{"version":3,"mappings":"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AAEnF,qCCD9FyT,sCAA6C,CAAE7X,OAAO,IAItD4uJ,cAHA,WAAoBrlJ,GAChB,MAAoB,mBAANA,gCCFlBsO,sCAA6C,CAAE7X,OAAO,IAItD4uJ,YAHA,WAAkBrlJ,GACd,OAAa,OAANA,GAA2B,iBAANA,qBCHhC,OACA,YACA,eACA,WACA,eACA,kBACA,eACA,kBACA,eACA,kBACA,eACA,kBACA,eACA,kBACA,eACA,kBACA,eACA,kBACA,cACA,YACA,eACA,WACA,cACA,YACA,eACA,YACA,eACA,YACA,cACA,iBACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,kBACA,eACA,kBACA,eACA,YACA,eACA,YACA,eACA,eACA,kBACA,eACA,kBACA,eACA,kBACA,cACA,iBACA,eACA,kBACA,cACA,iBACA,eACA,kBACA,eACA,kBACA,YACA,eACA,YACA,eACA,kBACA,eACA,kBACA,eACA,kBACA,eACA,YACA,eACA,WACA,cACA,YACA,eACA,YACA,eACA,aACA,gBACA,YACA,eACA,YACA,eACA,kBACA,eACA,kBACA,eACA,WACA,cACA,YACA,eACA,YACA,eACA,YACA,eACA,kBACA,qBACA,kBACA,qBACA,YACA,eACA,YACA,eACA,WACA,cACA,WACA,cACA,YACA,eACA,eACA,kBACA,YACA,eACA,YACA,eACA,YACA,eACA,kBACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,WACA,cACA,YACA,gBACA,mBACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,UACA,aACA,YACA,eACA,YACA,eACA,YACA,eACA,WACA,cACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,kBACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,YACA,eACA,WACA,eACA,kBACA,cACA,YACA,eACA,eACA,kBACA,cACA,iBACA,YACA,eACA,YACA,eACA,kBACA,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","names":["ActivitiesDataDic","constructor","this","setProperty","data","forEach","property","_activities","AvailableSpecialMeals","activity","Id","_Property","RestaurantId","WidgetPrePaymentMode","WidgetPaymentNote","Activity","Property","factory","i0","ctx_r18","E","ctx_r22","ctx_r29","oxw","ctx_r33","Se","ctx_r38","ctx_r42","ctx_r46","ctx_r49","ctx_r79","ctx_r81","ctx_r86","ctx_r89","ctx_r111","ctx_r113","ctx_r116","ctx_r127","ctx_r129","ctx_r132","ctx_r144","ctx_r148","ctx_r165","ctx_r167","ctx_r174","ctx_r184","ctx_r187","ctx_r189","t","$event","ctx_r206","ctx_r208","ActivitiesListComponent","activityService","route","ts","ps","dialog","reservationService","activitiesDataDic","activityFilter","dfs","toastr","Subscription","subscriptions","add","allClassActivitiesAvailable$","subscribe","value","availableActivities","addActivityTimeLeft","console","log","redirectToSlotSelection","ngOnInit","resetConfigBasedStyles","stopTimer","hideBackNav","restaurantMerchantCode","snapshot","params","merchantId","activityIdFromURL","activityId","propertyIdFromURL","queryParams","propertyId","sessionFilterValue","editData","operation","operationType","successBookRes","fromConfirmation","currentNavURL","hideCart","next","selectedDiningSpecialMeal","setSessionData","widgetConfigurations","config","closeAll","getRestaurantWidgetSettings","toggleActivitiesVenue","event","filterByVenue","displayByType","ngOnDestroy","unsubscribe","setWidgetConfigurations","setWidgetSettings","toggleView","ActivityViewType","a","startLoader","byPassValidation","getWidgetSettingsByMerchantCode","selectedLanguageId","stopLoader","Payload","setActivitiesData","PropertyWidgetSettings","ValidateGuestPhoneNumber","widgetSettings","enableActivities","U","EnableActivities","enableDining","EnableDining","loadActivitiesOnly","isNonDining","isDining","getWidgetImagesMerchantLevel","noDataFound","CartList","getSessionData","cartCount","length","crypto","window","array","Uint32Array","CartBookingList$","getRandomValues","bookingSection$","BookingActivity","loadClassActivities","p","AcceptsReservations","DisableReservations","addGoogleTagManager","WidgetCustomization","GTMCode","isDataLoaded","be","yt","Ne","Zt","isOpenBooking","filterDining","clickReserveNow","diningVenuesList","find","venue","gn","Ki","filterNonDining","clickReserveNow_NonDining","nonDiningVenuesList","ht","val","qi","restaurantWidgetId","dn","Nn","SpecialMealId","clickBookNow","validationError","ValidationMessages","filter","msg","Type","ValidationMessageType","Message","outOfServiceMessage","openSnackBar","instant","ConfigSettings","snackBarTime","commonErrorMessage","propertyList","diningSpecialMeals","specificActivity","specificEvent","diningVenue","originalVenueList","o","Utilities","ControlSettings","PropertyType","ActivitiesList","venueList","eachVenue","venueImageUrl","environment","urlConfig","lesson","IsForStandbyReservations","push","processEachActivities","dayLightDelta","DaylightDelta","currentTime","currentDateTime","Date","valueOf","dateFilterStartDate","setHours","dateFilterEndDate","_","x","LessonType","LessonTypes","availableMeals","transform","startDate","endDate","showDiningSpecialMeals","isViewable","tempAvailableActivities","bookSpecialMeal","specialMeal","dining","updateDateFilterValue","locationval","staffval","ActivitySessions","session","SessionLocationMappings","location","LocationId","StandaloneTableId","LocationName","getLocation","Locations","SessionStaffMappings","staff","ServerId","StaffName","getInstructor","Instructors","ActivityDayOfWeeks","FrequencyTypeIds","defaultFrequencyIds","map","item","Dayofweek","index","self","indexOf","venueLevelLocation","venueLevelInstructors","venueLevelAllocationMappings","AllocationMappings","IsCartEnabled","MaxPastTimeForReservationsInMinutes","EnableMultiSlotSelection","AllocationTypes","venueName","RestaurantName","IsSmsReminderSupported","CustomTermsOfService","IsReservationReminderMandatory","ConfirmationVia","RestaurantUniqueName","AllowLocationSelectionForActivity","AllowInstructorSelectionForActivity","AllowAdditionalGuestDetails","NotesType","DefaultWaiverForm","OperationCurrency","ImageUrl","ImageURL","sort","b","elem","join","Staffs","LessonName","Name","StaffValues","Availability","ClassType","AvailableSlots","PreferencesCategories","filterActivitiesByVenue","AllLessons","selectedVenueName","venueBasedActivityList","locationList","loc","instructorList","staffdata","LastName","getActivitiesDetails","activities","dialogConfig","MatDialogConfig","selectedActivities","autoFocus","width","height","maxHeight","panelClass","backdropClass","setOtherValues","open","LessonsDetailsDialog","activityType","showAvailableSlotCount","backClick","LocationList","InstructorList","showGuestFields","navigateToUrl","specialMealId","filteredStartDate","userCurrentDate","setDate","getDate","DaysForReservation","moment","format","selectedDining","displaySeatingArea","LocationFilters","LocationFilter","displaySeatingType","isSpecialMeal","isTableReservation","DisableCustomTermsAndConditions","bookaspot","errorImageHandler","image","Image","onload","target","src","onerror","detailDialogClose","TimeRemaining","findTimeLeft","Ongoing","trim","avlLessons","currentDate","activityDayofWeek","activityEndDays","dayofWeek","day","activityStartDate","StartDate","activityEndDate","EndDate","nextSession","nextEndSession","dateDifference","diff","i","currDate","localDate","StartTime","dayOfWeek","Math","min","EndTime","allocateTimeUnits","initialLoad","ActivityBookings","y","selectors","checkAcceptReservationsPipe","ge","prop","pure","ActivitiesLiteCheckOutComponent","ctx","ctx_r14","ctx_r19","ActivitiesLiteSecondaryGuestDataComponent","guestService","dynamicForm","EventEmitter","customGuestFieldsMappingValidations","restaurantDetail","createSecondaryGuestConfig","createCustomFieldsConfig","secondaryGuestDetail","secondaryGuestVisibileFields","showGuestNames","secondaryGuestConfig","type","name","label","inputType","showErrorText","isFormArray","errorMessage","validation","Validators","FirstName","appearanceOutline","AliasName","hide","ShowAliasName","showprimaryContacts","class","options","countriesList","element","id","CountryPhoneCode","CountryId","Country","directive","PhoneNumber","isMandatory","numberFormat","EmailAddress","requireFliedValidation","RequiredSecondaryGuestFields","ngOnChanges","changes","notesData","Notes","showNotes","ngAfterViewInit","getFormValue","getSecondaryGuestDetails","secondaryGuestForm","first","form","countryCodeChange","valueChanges","pipe","debounceTime","distinctUntilChanged","mobileNumberChange","last","guest","Object","assign","secondaryContact","ContactCustomFields","bindCustomGuestFieldsValue","PartyId","ContactNotes","isValid","valid","count","secondaryGuestData","emit","CustomFieldsList","customGuestFields","field","toString","customField","CustomFieldsDTO","CustomFieldId","Number","CustomFieldValue","CustomFieldName","FieldName","toggleSelection","chip","noteOptions","secondaryGuestNotes","countryCode","get","selectedCountryCode","country","selectedCountryId","changeMobileLength","mobileNumber","onInputChange","setValue","emitEvent","requiredPhoneNumberLength$","mobileNumberLength","controls","setValidators","mobileMandatoryValues","updateValueAndValidity","deleteSecondary","guestDetail","deleteSecondaryGuest","contactId","ContactId","fieldConfig","showCustomFieldBasedOnActivity","FieldType","fieldType","placeholder","FieldDescription","getCustomGuestFieldsValue","customValidationRequired","showCustomFields","Options","FieldOptions","split","customGuestFieldsLoad","customFieldId","selectedActivity","activitiesCustomGuestFields","ActivityId","CustomFields","FieldId","AvailableForWebReservation","customValue","customFieldMandatory","validations","Validations","RequiredFields","phoneIndex","findIndex","toLowerCase","emailIndex","emailPattern","emailMandatoryValues","RequiredPartyFields","includes","ctx_r13","ctx_r30","ctx_r35","ctx_r36","ctx_r40","ctx_r47","ctx_r50","ctx_r51","ctx_r62","ActivitiesLiteGuestDataComponent","rs","_snackBar","categoryDataPipe","innerWidth","PricingType","PricingCategory","onResize","screenWidth","expand","restaurantId","getRestaurantId","restaurantData","notesRef","resetSecondaryNotes","notesOptions","allowAddingSecondaryGuest","AllowAddingSecondaryGuest","selectedSize","GuestNames","PrimaryContacts","CustomGuestFields","secondaryGuestFields","entries","createGuestConfig","editContactData","SecondaryContacts","secondaryGuestDetails","contact","secondaryGuest","validateBookingCount","addOnList","Addons","getOpenBookingAddOns","loadAddOns","selectedDate","checkedDiningLocalTime","checkedNonDiningLocalTime","startTime","matchedContinousSlots","endTime","reqObj","selectedNonDining","TimeSlotUnitInMinutes","selectedSpecialMeal","response","err","expandAddOn","getAddOns","mandatoryAddOns","additionalAddOns","editActivityIncomingAddOns","BookingContactAddonItems","availableMandatoryAddOn","addOnData","AddonId","IsVisible","MaxQuantity","MinQuantity","Price","AddOnDetails","IsCategoryLevelMandatory","OverAllQuantity","selectedSlot","AddOnAvailability","AvailableQuantity","IsMandatory","IsUnlimited","yi","gi","Yi","selectedAddOnCreate","selectedQuantity","SelectionType","AddonCount","getAddOnQuantity","allEligibleAddOns","getAddOnsGroupedByCategory","_a","checkCategoryMandatoryAddons","addon","addonMinQuantity","groupBy","key","CategoryId","components","getPrimaryGuestData","decreaseAddOn","addOn","increaseAddOn","addonQuantityValidations","message","minsize","maxsize","msgVal","horizontalPosition","verticalPosition","duration","_categoryAddons","_missingCategoryAddon","categoryName","mandatoryCategoryAddons","loadAllAddOns","mandatoryAddonCount","additionalAddonCount","showMinAddOns","guestConfig","charLength","cellClick","bind","blurClick","addPromocodeConfig","addMarketingCollateralsConfig","DisplayPromoCode","PromoCodeLabel","promoCodeDetail","phone","PhoneNumberLength","MarketingFlagEnabled","MarketingFlagDescription","marketingFlag","JSON","parse","MarketingOptedIn","innerHTMLdata","setTimeout","firstName","lastName","aliasName","email","promoCode","primaryContact","guestData","formValid","guestContact","addSecondaryGuestDetails","detail","additionalSecondaryGuestCount","secondaryGuestValid","updatedContact","contactIndex","updatedValue","notes","note","checkBoxOptions","selected","icon","commentsBox","isNumberKey","evt","charCode","which","keyCode","validateAddOnsQtyOnChange","floor","GetCategoryDataPipe","ti","categories","category","Color","R","G","B","A","Text","ActivitiesLayoutSupportService","getRateplanData","currentFromDate","sizeMapping","selectedSeatingType","callbackFunction","_rateplanRequest","Slots","Time","DurationInMinutes","Size","getCoverTypesize","TableIds","SeatingTypeIds","CoverTypes","sizes","FinancialEffectId","BookingBehavior","getLocationRateplanCalculated","PriceDetail","seatingTypePriceDetail","reduce","res","curr","Covers","ctx_r10","SizeMappingComponent","translateService","Array","from","keys","FormGroup","mappedTypes","sizeArr","maxSize","setConfigTypes","bookingTypes","coverTypes","dataCovers","sizeChange","formValidate","errors","coverObject","CoverTypeId","BookingTypeId","bookingType","bookingTypeName","coverType","coverTypeName","CoverTypeName","bookingtype","bIndex","cover","getTypeObj","mappedType","isEdit","dataSize","defaultSize","BookingTypeName","parySizeChange","updateValue","onSizeChange","coverTypeQuantities","totalQuantity","MinimumQuantity","quantity","guestType","maxPartySize","GroupByPipe","j","arr","ActivitesGuestPriceSummaryComponent","ActivitiesLayoutComponent","httpService","activitiesService","rateplanSupportService","_selectedSeatingType","canvas","highlightByTypeHandler","updateIndicator","indicator","updateLocationSelection","initData","masterStatusData","soldout","textColor","stroke","text","fill","notSelectable","selectable","getButtonColor","zoomtoFit","zoomToPoint","getZoom","loopCount","seatingTypeSelected","color","seatingTypeList","statusColor","highlightByTypeAction","isHighlight","highlightColor","_objects","SeatingTypeId","IsAvailableForBooking","IsAvailableForReservations","fillColor","isSelected","defaultTheme","tableColor","ShapeType","set","renderAll","setColorByType","selectedIds","selectedNonDiningLocation","highlightSelectedObject","removeHighlightSelectedObject","zoomSubs","_that","on","opt","e","ctrlKey","delta","deltaY","zoom","preventDefault","stopPropagation","vpt","viewportTransform","zoomBoundaryHandler","offsetX","offsetY","canvaElm","document","getElementById","addEventListener","touches","_containerX","_containerY","getBoundingClientRect","_xPoint","clientX","_yPoint","clientY","_diffX","screenX","_diffY","screenY","lastTouchDiff","intialZoomPoint","isDragging","_expectedXPosition","_expectedYPosition","_eClientX","_eClientY","lastPosX","lastPosY","requestRenderAll","_canvasZoom","_maxAllowed","left","top","allowXMove","allowYMove","setViewportTransform","selection","showLocationDetails","bounds","getElementsByClassName","availability","max","MinPartySize","MaxPartySize","currentBookingSize","validateLocationSize","locationDetail","position","Total","restaurantImages","images","layoutImages","LayoutImages","objectImages","ObjectImages","customImages","CustomImages","floorPlanImage","ImageId","floorPlanData","setLayoutWidth","setCanvas","setDefaultFloor","StandaloneTables","IsTemplate","Labels","Walls","Shapes","fabric","bytes","img","layoutStyle","tables","labels","walls","shapes","imageId","basicTables","findminObject","topMinValue","leftMinValue","negativeCoords","totalminDataHeight","totalminDataWidth","abs","adjustedTopValue","adjustedLeftValue","Top","Left","Points","point","X","Y","Height","Width","findstringlength","getwidth","getHeight","angles","Angle","findmaxObject","topValue","leftValue","scaleFactor","heightValue","totalDataHeight","widthValue","totalDataWidth","scaleFactorY","canvasLoader","nativeElement","clientHeight","scaleFactorX","clientWidth","setHeight","setWidth","setBackgroundImage","scaleX","scaleY","setTableConfiguration","dataToBePushed","addLabel","addShape","addWall","objs","getObjects","table","setObjectImage","Dimensions","setCoords","scaleObjects","BasedOn","newtables","obj","tempname","newlabels","newwalls","newshapes","allObjects","concat","minx","miny","baseElement","preserveObjectStacking","transparentCorners","rotatingPointOffset","cornerSize","hasBorders","lockMovementX","lockMovementY","perPixelTargetFind","flipY","hasControls","hoverCursor","targetFindTolerance","locationSelection","getWidgetCustomizationData","object","strokeWidth","statusDetail","getStatusDetail","afternewtables","afternewlabels","afternewwalls","afternewshapes","maxx","maxy","selectedTableObject","tableObj","tableImage","compressedPhoto","shapedObject","ele","originX","originY","server","addWithUpdate","clipPath","radius","startAngle","angle","PI","moveTo","size","checkTableiscircle","ShapeTypeEnum","fontFamily","fontSize","fontWeight","shape","newcolor","undefined","strokeDashArray","Rotation","rx","ry","sendToBack","linesArray","wall","adjustheightval","adjustwidthtval","rectangle","addTableGroup","party","circle","ellipse","setControlsVisibility","ml","mt","mr","mb","pin","basicRectangle","basicCircle","that","statusColorData","getStatusColor","text1","groupedObject","SeatingArea","SeatingAreaId","SeatingType","IsCommunalTable","FloorPlanViewId","Party","partyData","RotationAngle","defaultColor","drawRectangleSeat","seat","drawCircleSeat","textAlign","numberCircle","opacity","objectCaching","rotate","tempScaleX","tempScaleY","colorData","setArray","drawSeat","seatArray","scale","ff","rectSeat","x1","y1","x2","y2","rectangleSeatObj","roundSeatDraw","seatColor","tblFillColor","myTotal","tableObj1","circleSeat","endAngle","partyColor","numberColor","objects","shapetype","scalefactorneed","shapetypetable","getbigRectangle","tempLeft","tempTop","points","calcOffset","finalval","getLayoutData","partySize","isCommunalTable","timeSlot","seatingAreaId","seatingTypeId","reservationIdToIgnore","DurationValueDirective","el","control","RegExp","onKeyDown","regex","specialKeys","current","String","match","durationList","onPaste","clipboardData","getData","test","onBlur","abstractControl","ctx_r23","ctx_r25","ctx_r66","ctx_r85","ctx_r92","ctx_r100","ctx_r104","ctx_r120","ctx_r124","ctx_r147","_r144","ctx_r151","ctx_r152","ctx_r156","_r153","ctx_r160","ctx_r161","ctx_r164","ctx_r171","ctx_r177","ctx_r182","ctx_r186","ctx_r191","ctx_r197","ctx_r199","_r193","ctx_r203","ctx_r204","_r131","ctx_r207","ctx_r209","_r218","ctx_r227","ctx_r237","ctx_r239","ctx_r247","ctx_r251","ctx_r257","ctx_r269","ctx_r274","ctx_r277","ctx_r284","ctx_r286","_r259","ctx_r289","ctx_r291","ctx_r293","ctx_r299","ctx_r317","ctx_r319","ctx_r321","ctx_r323","ctx_r326","ctx_r328","ctx_r330","ctx_r340","ctx_r347","ctx_r349","ctx_r351","ctx_r358","ctx_r364","ctx_r366","_r360","ctx_r370","ctx_r375","ctx_r378","ctx_r379","ctx_r390","ctx_r393","ctx_r394","ctx_r400","ctx_r403","ctx_r404","ctx_r409","ctx_r413","ActivitySessionSelectionComponent","router","super","FormControl","LocationViewTypes","BookingGuestType","showBackNav","prevNavURL","widgetCustomization","showSpecialEvent","DefaultReservationView","cartList","sessionStorage","getItem","addToCartEnableForTaxType","PropertyId","TaxType","backToSlotSelect","setActivityData","_restaurantData","getCartCount","isSpecialMealReservation","setLockCartData","modifiedLockCart","CartLockList","cartlock","slotLockResp","unLockMultiCart","checkDataPresent","setBookingType","bookingTypeList","bookingTypeForActivity","meal","selectedActivityData","BookingTypeActivitiesMappings","BookingTypes","getMemberConfig","defaultValue","IsDefault","selectedBookingType","BookingTypeInfo","BookingGuestTypes","confirmationNumber","Input","bookingTypePlaceholder","applyBookingType","skipWarnings","getBookingTypesDetails","BookingRange","Start","getFullYear","End","HotelGuestRange","disableDatePicker","bookingTypeMinDate","bookingTypeMaxDate","setHotelDateRange","isBetween","changeFromDate","checkSessionorSlotAvailability","bookingStart","bookingEnd","bookingTypeChangeHandler","retainSessionValue","isTimeDropList","TimeSlotType","initializeData","availableSpecialMeals","nexAvailableMealDate","findNextAvailableDate","cs","ks","mealSelected","SpecialMeal","mealWithConfig","ShowOtherActivities","loadConfigBasedStyles","addAnySeatingOptionInMasterList","seatingAreaSeatingTypeMappings","SeatingAreaSeatingTypeMappings","classDetail","findDiningSpecialMeal","normalTableReservation","bShowLocation","Xn","vn","pa","durationControl","filteredDurationOptions","startWith","_filter","slice","setGuestAndCoverTypes","xa","generateDurationList","selectedClassActivity","isSessionComponentReload","removeItem","selectedSpecialMealId","selectedData","chosenStartDate","currentToDate","seatingAreaMasterList","SeatingAreaList","seatingTypesMasterList","SeatingTypeList","typeColor","daysForReservation","restaurant","openHourDays","OpenHourDays","CustomOpenHours","some","custDay","Closed","minDate","maxDate","customDay","propertyMaxDateAllowed","diningMaxDate","setNoteType","addCategoryPreferencesNotes","noteType","specialMealReservation","resetReservationDetails","getCoverTypesReservation","generatePartySize","setAvailableDate","setAvailableSeatings","price","minSizeAllowed","selectedDiningSlots","checkedItem","selectedSeatingArea","area","splice","Description","showAvailableDates","bIsSlotReloadRequired","updateNonDiningSlotTime","diningSlotChangeListners","isMultiSlotSelection","isIntial","filterChanges","sessionSlotsAvailableDates","BooKingTypeName","ReservedFor","fa","Fo","_l","Or","nl","Rr","gr","vl","Yr","Nl","ul","Dl","Ea","Qa","xr","Vo","Contact","currentInstructors","Zu","StaffIds","kd","CoverTypeQuantities","_h","gh","getFormattedBookingTypeValues","getFormattedCoverTypeValues","isValidFormValues","getavailableSlots","currentLocations","overAllBookingSize","spliceTimeArrayForTheSelectedMealTab","selectedMealTab","MealTabs","tab","toggleSelected","requiredTimeArray","startHours","startMins","endHours","endMins","clone","originalTimeSlotList","time","showOtherDaysAvailable","MaxAlternateDays","MaxDate","nonDiningMaxDate","otherAvailableDays","tempDate","curDate","isInitial","toISOString","getDay","existingDateObj","dayObj","date","customDates","getCustomAvailableDays","quickAvaialbleDays","getTime","sortByDate","startId","availableDays","checkIfDateSelected","otherDate","addDays","days","result","dateTemp","chooseAvailableDate","selectedDay","checkNonDiningSessionorSlotAvailability","instructors","fromDate","toDate","bookingSize","classLessonList","availableSessions","selectedIndex","requestedObject","AvailabilityCriteria","PreferredLocationId","PreferredStaffId","BookingSize","getSlotsForDining","getSlotInitial","getSlotsForNonDining","getSlotsForClass","getAvailabilityCriteria","locations","isSessionClass","CoverTypePrices","minimumQuantity","minSize","activityHeadlines","ActivityAttributes","calculatePartySize","getLocations","venueAllocationMappings","showSessionorSlots","selectedClassSchedule","setInitialData","covers","manualSelect","generateCoverType","seatingArea","loadSeatingTypes","MappedSeatingTypes","seatingType","seatingTypeNames","isSameOrBefore","showNextArrow","showParticularDays","EnableAndDisableDates","SetInitialDate","IsHoliday","isHoliday","IsCustomDay","IsCustomHoliday","holiday","mergedArray","every","setFrequencyDate","isNext","fromAvailableDates","daysNumList","dayNum","finalDate","d","enableDate","bookingSizeArray","maxSizeAllowed","availableCoverTypes","selectSpecialMeal","specialMealIndex","changeDiningDate","nextOrPrev","daysDiffByMaxDate","getNextAvailableDate","getPrevAvailableDate","scheduledNextDay","customNextDay","scheduledPrevDay","customPrevDay","reverse","changeCoverTypeSize","changePartySize","changeTimeSlots","slot","applyToOtherDates","selectedDateIndex","memberid","bookAllAvailableDates","checked","selectedSessionIndexes","AvailableSessions","isChecked","sessionIndex","selectedGuest","MembershipType","memberTypename","MemberActive","memberActive","memberType","allocation","AllocationTypeName","toLocaleLowerCase","AllocationTypeId","sessionsUnavailable","AvailabilityType","IsMember","disabled","dates","AvailableDate","uncheckSelectedSession","isReload","validGroupSize","coverTypeTotal","selectedNonDiningSlots","displayLocationType","getNonDiningLocationsApiHandler","staffList","SelectedStaffList","selectedStaff","serverval","SelectedLocationList","selectedLocation","GetRestaurantDateAvailability","GetClassSlots","slots","afterSlotResponse","overAllAddons","BookedSessions","SessionId","datatindex","updateSlotBasedOnBookedSession","isNotPastTimeSlot","pastSlot","isBlocked","isAddonAvailable","showAvailibility","seatCountAvailability","sessionHeadlines","getPublicHeadLine","c","slotStatusSet","elm","group","selectedSession","SessionGroupId","editPartyData$","groupList","groupDetail","DayOfWeek","selectedItem","checkedSessionObj","description","sessionStart","ActivitySessionId","AttributeType","openHeadlines","ApplyForAllSessions","publicHeadlines","availabilityType","seatLeftCount","isDisabled","countMultiplier","SlotCountInWidget","status","SessionAvailabiltyStatus","slotChangeListners","disabledOverlaped","disableOverlapingSessions","groupIdList","StatusCode","Status","isSlotBooked","getStateOfBookedSession","PartyState","sessionId","BookedDate","SessionState","slotDateTime","past1hr","slotTime","loadPreviousDate","loadNextDate","membershipId","isAnyMember","selectedSlots","isOverlap","start","end","slotStart","slotEnd","selectedSlotStart","selectedSlotEnd","storeFilters","stringify","getCoverTypeValues","formatedCoverTypes","formatedBookingTypes","bookType","getBookingTypeValues","getSlotsObj","resSlots","selectedTimeSlots","availableDate","sessionsSelected","SessionIds","getSessionGroupId","isCheckCartExisting","alreadyExist","cartObj","eachItem","toDateString","LocalTime","checkedItems","SelectedTimeSlots","addToCart","continueClicked","addtoCartValidation","updateCartIndex","setBookingData","SaveBookingObj","guestContactValidation","validateCartItem","ExceptionMessage","bookingErrorHandler","validateCartItemApiSuccessHandler","setItem","proceedAddToCart","lockMultiPropertySessionsfn","navigateToPage","finishReservationClicked","errorText","isOverlapBookError","popUpMessage","confirmationMessage","dialogTitle","showAlert","isScrolable","componentDetails","PopupMessageComponent","openCustomPopup","ComponentTypes","getErrorDialogPrimaryBtnLabel","getErrorDialogSecondryBtnLabel","afterClosed","ok","bShowOverbookingErrorDialog","cartLockObj","sessionFromCart","Slot","LockId","Sessions","saveBookingObj","SessionBookingObj","resetNotes","SessionBookingDTO","getOpenBookingSelectedSeatingArea","getOpenBookingSelectedSeatingType","CartId","substring","SelectedClassSchedule$","createSaveRequestObject","bookingData","ContactObj","NoteType","getCategoryPreferencesNotes","SecondaryContactsList","currentEditItem","bookingTypeDetails","RemindAboutVisit","RemindAboutVisitEmail","AgreedWithTermsOfUse","getOpenBookingSlots","getRequestObjectSlot","getRequestObjectSlots","SeatingTime","getNotes","Location","InstructorIds","StaffId","GuestTypes","FromWebsite","Language","ReservationAttemptId","waiverFormTransactionId","BookingContacts","FromDate","ToDate","SelectedSchedule","SelectedActivityInfo","getSelectedItemInfo","AllowAdditionalGuest","DoesRequirePrepayment","AddOns","isBookingApiRequest","UserSelectedTable","ActivityTypeId","sessionClass","lockResponse","SlotLockIdDTO","proceedMultiBooking","emptyCartData","lockMultiPropertySessions","formCartLockPayLoad","lockMultipleResult","setLockIdsResponse","unLockMultiPropertySessions","setNotesData","isSecondary","notesPreferencesCategories","IncludeInWebReservation","freeTextIdValue","predefinedNotes","SubCategories","predefinedNoteOptions","PredefinedContactNote","PredefinedPartyNote","freeTextIdList","noteMappingList","PredefinedContactNotePropertyMapping","PredefinedPartyNotePropertyMapping","PredefinedContactNoteId","PredefinedPartyNoteId","Set","inputOptions","Category","Icon","noteEditData","PartyNoteType","RelatedId","eachNotes","existingCheckboxId","existingCommentboxId","eachCheckbox","editNote","navigateGuestData","durationOption","cart","GetCustomFields","CustomGuestField","getCountries","GetCountries","setGuestData","contacts","changeNonDiningDate","changeNonDiningBookingTypeSize","updateSlotReloadValue","changeNonDiningCoverTypeSize","changeNonDiningPartySize","changeNonDiningTimeSlots","BookingTypeQuantities","bUpdateNonDiningBackUpData","nonDiningBackUpData","DepartureTime","selectContinousSlots","setSelectedNonDiningSlotsDisplayText","setSelectedNonDiningSlots","updateRateplanForSeatingType","error","nonDiningSlotChangeListners","setNonDiningBackUpData","closePopover","isLocationReload","matchedSlot","displayFn","user","option","displayName","changeNonDiningDuration","selectedSlotIndex","selectedDurationIndex","showContinousSlotErrorMsg","closeSlotEditPopOver","localMoment","selectedNonDiningSlotsDisplayText","locale","DEFAULT_LANGUAGE_CODE","setDurationControlValue","selectedDurationOption","highlightSelectedNonDiningSlots","showHideLocationEventHandler","tableList","nonDiningTotalSeatsSelected","floorPlan","coverAndBookingTypeEditngPopOver","close","getRestaurantImages","buildNonDiningLocationApiRequest","getOpenBookingLayoutData","FloorPlans","seatingTypeColor","locationMappedSeatingTypes","filteredTableList","filterLocationList","setSelectedLocations","TimeSlot","Duration","PartySize","ReservationIdToIgnore","locationSelectionInMapHandler","locationCanvasObj","locationSelectionEventHandler","locationViewSelectionEventHandler","bEnableLocationMultiSelect","remainingAllowedPartySize","selectedSeats","removedFirstSelectedLocation","removedLocationIndex","macthedIndex","editNonDiningSelectedSlots","seatingArea_TypeFieldChangeHandler","seatType","valueUpdate","isSlotReloadRequired","IsRegularReservation","clearBackUpData","slotEditngbPopOver","clearNonDiningBackUpData","closeTypeEditPopOver","checkSlotReloadRequired","bookingSizeChange","goToPage","SafeHtmlPipe","zo","sanitizer","html","bypassSecurityTrustHtml","ctx_r7","TaxExpandedView","serviceChargeExpandedView","ctx_r95","ctx_r97","ctx_r109","ctx_r115","ActivitiesLiteOrderSummaryComponent","MESSAGES","onMessage","origin","rGuestPayResponseData","rGuestPayRespose","payResponse","transactionInfo","payments","code","gatewayResponseData","transactions","successCode","paymentType","proceedReservation","authorizeTransactionID","paymentGateway","PaymentGateways","transInfo","processTransactions","isCreditcardPayment","payment","PaymentType","AuthorizePaymentType","buildReservationRequest","dto","SlotLockIds","BookingID","PayResponse","TokenType","PaymentAmount","paidAmount","PaymentGateway","AuthorizeTransactions","ReservationAttemptIds","paymentData","AttemptIds","ResponseDTOs","SplitPaymentReload","isSplitPayment","CardOnFileRequired","f","PaymentMethod","CardOnFileAmount","TotalAmount","PayableAmount","creditCardPaid","Amount","reservationConfirm","UpdateMultiCartReservationAttempt","validationErrors","errorString","fieldName","alert","callbackDto","CardNumber","cardInfo","accountNumberMasked","ExpirationDate","expirationYearMonth","CVC","FirstNameHolder","LastNameHolder","AddressLine1","AddressLine2","City","State","PostalCode","Token","token","preloadCartData","operationCurrency","cartItems","findPartySize","customTerms","validationMessageList","termsUrl","privacyUrl","customTermsList","getAgreeTermsAndConditionsText","basicTerm","processCustomTermsConditions","processOtherCheckBoxes","applyDefaultGuestDetails","applyToAllGuests","processGuestAutoFill","guestDetails","mobile","applyToOtherGuestDetails","guestIndex","addNewGuest","selectedAdditionalGuest","removeAdditionalGuest","openCloseAdditionalGuest","getPhoneCountryCodes","restaurantSettings","DefaultMobileCountryCode","countryList","countrySelected","countryId","isValidURL","termsarray","terms","labelText","labelValue","required","checkSubmitValidation","disableSubmit","guestDetailsForm","checkBoxErrorMessages","waiverForm","isUserAllowedToclickConfirm","reservationAttemptInfo","CreditCardIframeUrl","ShouldCreditCardBeEntered","financialData","RedirectUrl","showCartLockWarning","paymentOffline","disableSubmitButton","checkTermsValidation","validTerms","saveCardInfo","reminderSmsEmailChecks","privacyPolicy","navigateToHome","balanceAmount","financialEffectId","enableSubmit","pathname","startTimer","taxTypeForBooking","MerchantId","MerchantCode","showCardOnFileInformation","isCardOnFilePayment","isValidateTerms","setEditData","RegisterReservationMerchantLevelAttempt","checkCustomTermsAndMessageOptionValidation","initial","setRatePlanCalculation","cartLockList","isAvailable","multiRegPayload","eachActivities","registerReservationAttemptRequestDTO","SessionSlot","TableId","request","cartId","RegisterReservationAttemptEdit","GetSessionRatePlanCalculated","multiCartRegisterResponse","RatePlan","Reservations","totalActivitiesRegistered","processOrderSummatyList","formOrderSummaryForNoRatePlanBookings","invokeFinancialEffect","isIframeToBeDisplayed","getFinancialEffectCalculation","UpdateActivityFinancialEffect","payload","ReservationId","Source","BookAttemptRequest","UpdateReservationFinancialEffect","updateBookingForFinancialEffect","bookings","Items","GuestPrices","SubTotal","TimeRange","ActivityName","SpecialMealName","guestPartySize","ServiceCharge","ServiceCharges","VAT","Tax","Taxes","NoShowFeeAmount","overallBookings","TaxOnServiceChargeAmount","Unpaid","LoadIframe","PartyPaymentType","setMessageState","RetailCreditCardPaymentTokenId","infoMessage","showFinancialEffectPopUp","isSelectedMealDefferedPayment","toFixed","NumberOfFractionalDigits","refundAmount","RefundOption","processEditOrderSummaryList","fromEdit","RegisterReservationAttempt","updateBooking","setCartItemForIndividualSessions","subTotal","eachRegisterResponse","respIndex","argGuestTypes","argBookingTypes","argSize","eachGuestTypes","findRegistrationAttemptArrayData","formDiningOrderList","RateplanAmountinfo","SpecialMealAmountinfo","reconstructRatePlan","RatePlanTotal","RatePlanCalculations","TotalAddOnAmount","AddonAttemptDetails","TotalAddonAmount","MinRateAdjustmentAmount","RatePlanVariants","GuestTypeVariant","SlotList","LocationVariant","OriginalLocationVariant","LocationAmount","InstructorVariant","OriginalInstructorVariant","InstructorAmount","BaseVariant","OriginalBaseRate","BaseAmount","TotalBaseRate","coverTypeVariants","coverVariant","coverTotal","Variant","defaultPrice","OriginalVariant","bookingTypeVariant","bookingTypeVariants","BookingTypeVariant","bookingTotal","locationTypeVariants","locationTypeVariant","locationTotal","Count","SpecialMealVariant","SpecialMealAmount","GuestTypeVariants","cartItem","LockCartId","cartLockItem","totalServiceCharge","individual","newCartItems","totalTax","MinRateAdjustment","TaxAmount","TotalAddonTaxAmount","TotalServiceChargeAmount","ServiceChargeAmount","TotalAddonServiceChargeAmount","taxOnServiceCharge","TotalTaxOnServiceChargeAmount","TotalAddonTaxOnServiceChargeAmount","ratePlan","registerResponse","diningDetails","specialMealName","ratePlanAmount","specialMealAmount","noShowFeeAmount","IsImmediatePaymentMode","FormattedLocalTime","cartData","cartLock","deleteCartItem","cartIndex","deleteAllCartItem","resetCartData","cartBookObj","eachCartObj","triggerCartUpdate","filteredItems","apply","SlotLockResultDTO","filteredObjects","listObj","MemberType","bannerImageHandler","RegisterReservationAttemptMerchantLevelUniversalCart","loaderRunning","mapSummaryDetails","eachBooking","TotalItems","flat","partyDTO","GetFinancialEffectCalculation","refundData","TaxOnServiceCharge","TotalTaxAmount","financeEffects","FinancialEffects","TotalAddOnTaxAmount","IsCreditCardNeeded","financialPopUpRef","cancel","unlockSessions","financialEffect","diningCartItem","editedDiningItem","noShowFee","coverPrice","FinancialEffectType","RatePlanAmount","lockResult","unlockSessionsUrl","offTimer","lockData","values","LockIds","innerArray","releaseMultiple","isDeffered","LoadGuestWaiverForm","formCode","GetAuthWaiverForm","formURL","iframeURl","urlSafe","bypassSecurityTrustResourceUrl","showIframe","clickToPayment","formSubmitted","action","getBookingActions","confToken","navigate","actionControl","DisplayModifyButton","DisplayCancelButton","ActionControl","waiverFormTrancationId","invalid","Dto","url","sorrysomethingwentwromg","CCUprocessableTryAgainErrorMessage","ImportantErrorMessage","CreditCardAuthorizationError","TryAgainMessage","CardNumbershouldContainOnlyDigits","CardNumberShouldConsists13To16Digits","CardNumberShouldNotBlank","SorryWeGotSomeErrorCardExpired","ErrorMessage","PendingAmount","openInfoMessage","timer","ExtendedSlotLockResultDTO","ExpiresAt","LockedAt","showTimer","runTimer","isSplitPayment$","ReservationIds","GetRegisterMultipleReservationAttempt","regAtmptData","isAuthorized","reservationData","PaymentStates","isApproved","additionalGuestPage","reservationConfirmationByEmail","reservationConfirmationBySMS","fromSubmit","isOverlapBooking","partyDtoRequired","isPartySizeMatchSecondaryContactList","updateReservation","CreateReservation","getReminderChecksValue","reminderName","remindVisitBySMS","partyDTOArray","BookingId","ConfirmationMessageOption","LanguageId","language","reservation","getAttemptIdsForOpenBooking","WaiverFormTransactionId","ReservationAttemptIdWithSlotDTOList","getOpenbookingSlotwithIds","getBookingContacts","getFinancialEffectId","AuthorizeTransaction","contactItem","sanitizeCoverTypes","booking","selectedProperty","PaymentMode","cartid","attemptResponse","r","toArray","buildSecondaryContactList","secondaryContactList","SecondaryContactDTO","FormValue","getConfirmationMessageOption","getCoverTypes","getBookingTypes","partyDto","updateSessionBooking","completeReservation","responseData","CartBookingId","createMultiSessionBookingrequest","saveCardToContact","createActivityResponse$","bookingErrorDialogRef","SlotTime","authorizeTransactions","transaction","paymentDetail","roomDetails","RoomNumber","ConfirmationNumber","pointsDetails","AccountNumber","BucketName","LoyaltyTransactionId","accountName","cardIssuer","cardNumber","tender","followOnData","expirationDate","CardExpirationYearMonth","cardExpiry","TokenExpirationDate","TransactionFollowOnData","AuthorizeTransactionID","InvoiceID","invoiceID","TransactionDate","transactionsDate","LoyaltyAccountNumber","IssuerType","AuthCode","authCode","CCType","cardIssuerType","CCTransactionId","payTransactionID","clearCart","clearCartDialogRef","buildNonDiningSLots","reservationAttemptId","validateForm","GroupItemByType","Pl","grossPrice","minRateAdjustment","serviceCharge","totalPrice","tax","lineItem","ctx_r2","ctx_r4","ctx_r5","ActivityCartComponent","getPopup","deleteConfirmationDialog","onNoClick","BookingChargeType","QRCodeComponent","renderer","allowEmptyString","colorDark","colorLight","cssClass","elementType","errorCorrectionLevel","margin","qrdata","qrCodeURL","context","__awaiter","createQRCode","isValidQrCodeText","toDataURL","qrCodeConfig","Promise","resolve","reject","QRCode","toCanvas","toSVG","renderElement","node","qrcElement","childNodes","removeChild","appendChild","version","warn","isNaN","Error","dark","light","centerImageSrc","imageSrc","centerImageHeight","imageHeight","centerImageWidth","imageWidth","canvasElement","createElement","getContext","then","ariaLabel","setAttribute","title","centerImage","drawImage","emitQRCodeURL","catch","svgParentElement","svgString","svgElement","firstChild","imgElement","dataUrl","alt","className","SVGSVGElement","blob","Blob","outerHTML","urlSvg","URL","createObjectURL","urlSanitized","bypassSecurityTrustUrl","urlImage","HTMLCanvasElement","HTMLImageElement","fetch","urlResponse","ɵfac","i1","ɵcmp","_c0","_t","decls","encapsulation","QRCodeModule","ɵmod","ɵinj","ctx_r52","routes","path","component","showLanguageOption","bookingToken","currency","getOrderDetails","displayModifyButton","displayCancelButton","continueToBooking","editModify","activityDetails","getByCartId","setLanguageIdFromUrl","bookedActivityCount","bookedReservations","retryCancelActivity","cancelRes","cancelReservationConfirmation","getCancellationCharges","modifyBooking","BookingAmounts","serviceChargeAmount","minRateAdjustmentAmount","minRateAdjustmentTaxAmount","CanBeCancel","CancellationCutOffDescription","cartBookingId","grandTotalCalculation","sessionItem","Reason","grandTotal","showQRCode","PropertyTypeId","cancellationCharges","CancellationFeeAmount","activityStartTime","findSlot","activityEndTime","hideEditCancel","GrandTotal","taxIncluded","reservationDetails","bookedSessionId","widget","propertyType","headerTitle","cancelDialogRef","confirmDiningCancellation","confirmNonDiningCancellation","confirmCancellation","cancelReservation","alertmsg","getCancellationCharge","CancellationCharge","cancellationcharge","collectTypeInfo","cancellationMessage","CancelBooking","CancelReservation","OperationResultState","CancelNonDiningBooking","reservationDetail","ActivityBookingConfirmationComponent","ActivitiesLiteRoutingModule","RouterModule","LayoutFunctions","drawSeatEllipse","curvedSeat","drawEllipseSeat","isImage","scaleObject","ActivitiesLiteModule","imports","CommonModule","TranslateModule","FormsModule","ReactiveFormsModule","MaterialModule","SharedModule","ActivitiesService","BehaviorSubject","Subject","getWidgetSettingsByRestaurantName","restaurantName","lockSessions","post","getWidgetSettingsByRestaurantId","getByToken","req","GetPreliminaryReservationInformation","GetRegisterReservationAttempt","UpdateReservationAttempt","PaymentCallbackRequest","RegisterReservationAttemptRequestDTO","createSessionBooking","PageMethod","PreferredPageMethod","GetFilterValues","reservationDTO","partyId","cancelAllOrRemainingSessions","AppInitializer","httpClient","ls","gs","localizeService","appConfigSettings","configSettings","initializeApp","isVersion2","configGet","BaseUrl","authorizeIframeResponseOrigin","rGuestPayIframeResponsOrigin","redirectToAdminPortal","setURLConfig","setMerchantCode","feedbackURLSegements","href","searchParams","setLanguage","propertyNameSegment","all","getMerchantCode","processThemeService","browserUrl","merchantCode","pathList","styleURL","responseType","injectStylesheet","css","head","getElementsByTagName","styleTag","innerHTML","defaultLocale","localeValue","LanguageCode","getLanguageFromRouteParam","getLanguageFromQueryParam","m","URLSearchParams","search","segments","Boolean","LayoutService","findUserAgent","objAgent","userAgent","isMobileBrowser","languageId","getBannerImage","getBackgroundImage","GetRestaurantPolicy","timerValue","totalTime","minutes","seconds","timerSubscription","interval","UnSubscribeTimerAndRedirectToHome","editPartyData","nextButton","componentName","getDateFormats","display","dateInput","restaurantWidgetSettings$","DateFormat","monthYearLabel","dateA11yLabel","monthYearA11yLabel","ReservationService","fb","reservationFormGroup","eventId","getLayoutBackgroundImage","fromWidget","GetLockSlot","lockSlotDto","GetRestaurantAvailableDates","ReleaseLockSlot","lockId","tableId","GetCoverTypePricing","overlapBooking","UpdateReservation","CreateSecondaryContacts","contactList","memberId","bookingGuestTypes","_rawRateSplit","VATOnServiceChargeAmount","M","MatGridListModule","MatLineModule","MatCommonModule","MatListModule","MatRippleModule","MatPseudoCheckboxModule","MatDividerModule","MatPaginatorIntl","itemsPerPageLabel","nextPageLabel","previousPageLabel","firstPageLabel","lastPageLabel","getRangeLabel","page","pageSize","startIndex","ɵprov","MAT_PAGINATOR_INTL_PROVIDER","provide","deps","Optional","SkipSelf","useFactory","parentIntl","MatPaginatorModule","MatButtonModule","MatSelectModule","MatTooltipModule","MatProgressBarModule","_r0","_MatProgressSpinnerBase","mixinColor","_elementRef","MAT_PROGRESS_SPINNER_DEFAULT_OPTIONS","InjectionToken","providedIn","diameter","elementRef","_platform","_document","animationMode","defaults","changeDetectorRef","viewportRuler","ngZone","_diameter","_value","_resizeSubscription","mode","trackedDiameters","MatProgressSpinner","_diameters","_spinnerAnimationLabel","_getSpinnerAnimationLabel","has","_noopAnimations","_forceAnimations","nodeName","isBrowser","SAFARI","change","run","markForCheck","coerceNumberProperty","_styleRoot","_attachStyleNode","_strokeWidth","newValue","_getShadowRoot","classList","_getCircleRadius","_getViewBox","viewBox","_getStrokeCircumference","_getStrokeDashOffset","_getCircleStrokeWidth","_getCircleTransformOrigin","svg","currentScale","styleRoot","currentDiameter","diameters","diametersForElement","textContent","_getAnimationText","strokeCircumference","replace","WeakMap","DOCUMENT","ANIMATION_MODULE_TYPE","i2","directives","i3","styles","MatProgressSpinnerModule","MatSidenavModule","CdkScrollableModule","_MatSlideToggleRequiredValidatorModule","MatSlideToggleModule","ObserversModule","MatSliderModule","CdkStepperModule","BidiModule","MatStepperIntl","optionalLabel","completedLabel","editableLabel","MAT_STEPPER_INTL_PROVIDER","MatStepperModule","ErrorStateMatcher","PortalModule","MatIconModule","MatToolbarModule","MatBottomSheetModule","OverlayModule","MatAutocompleteModule","MatButtonToggleModule","MatCardModule","MatCheckboxModule","MatChipsModule","MatDatepickerModule","MatDialogModule","MatExpansionModule","MatFormFieldModule","MatInputModule","MatMenuModule","MatNativeDateModule","MatRadioModule","MatSnackBarModule","MatSortModule","MatTableModule","MatTabsModule","NgxMaterialTimepickerModule","MatMomentDateModule","PartyType","PartyPrepaymentState","bookingId","classType","locationName","staffId","membershipDetails","guestTypes","sessionGroupId","MembershipDetail","CollectType","LanguageFileName","PolicyDataType","SlottingMode","ctx_r6","ctx_r9","ctx_r12","ctx_r16","ctx_r20","ButtonComponent","_EL","handleclick","valueChange","ctx_r8","ctx_r11","ctx_r17","PopupComponent","dialogRef","dialogData","componentFactoryResolver","okayBtn","buttonTypes","update","customclass","cancelBtn","disbaledproperity","actionSubscription","eve","actionEnabled$","actiondisabled$","componentName1","popupTitle","componentFactory","resolveComponentFactory","dynamicComponent","createComponent","instance","popupInput","closeDialog","cancelEnabled$","MAT_DIALOG_DATA","ViewContainerRef","activityStatus","ActivityTabs","GuestTitle","SlotType","AutomaticRefundState","PartyNoteTypes","HeaderStyle","AnyVenue","Restaurant","Auditorium","Cabana","MovieTheatre","ScreenType","ActivitiesVenue","TennisCenter","OpenBookingProperties","General","DiningProperties","VenueBasedActivitiesProperties","chineseLanguageCodes","DEFAULT_LANGUAGE_ID","layoutImageUrl","getWidgetSettings","seatingTypesUrl","layoutUrl","bannerImageUrl","dateAvailabilityUrl","availableDateUrl","restaurantPolicy","getCustomGuestFields","getContact","acquireLock","releaseLock","getPreliminaryReservationInformation","getCoverTypePricing","createReservation","registerReservationAttempt","updateReservationAttempt","completeShift4Booking","getReservationAttemptState","formatResult","getFinancialEffectForUpdatedReservationDTO","getSpecialMeal","getAuthWaiverForm","getImages","widgetImageURL","getMerchantLevelImageUrl","createSecondaryContacts","backgroundImageUrl","GetSlotsForActivityURL","getGetFilteredLessonsActivityURL","lockSessionsURL","lockMultiSessionsURL","unLockMultiSessionsURL","registerMultiReservationAttempt","registerMultiReservationAttemptUniversalCart","GetRatePlanCalculatedURL","createSessionBookingURL","createMultiSessionBookingURL","updateSessionBookingURL","GetPreliminaryActivityInformationURL","registerBookActivityAttempt","updateMultipleBookActivityAttempt","getFinancialEffectForUpdatedActivityDTO","cancelSessionBooking","GetCancellationChargeURL","cancelStandByBooking","GetContactFromEngagebyCardnoURL","GetSlotsForTablesURL","getsurveyurl","updatesurveyurl","layoutseatingImageUrl","lockTablesURL","getMultipleReservationAttemptStates","BookMultipleActivity","getByBookingId","cancelOpenBookingUrl","releaseMultipleLocks","getCommentCardCustomization","AddToCartItem","bookSelectedCartItems","bookPrivateLesson","cancelPrivateLessonUrl","LockCartSessionURL","UnlockCartSessionURL","getCartReservationAttempt","bookCart","validateCartCustomFields","openBookingLayoutUrl","openBookingAddOnsUrl","openBookingCancelUrl","getLanguageConstants","SearchByBookingType","getRateplan","loaderDisabledUrls","FormChipService","isErrorState","DecimalsOnlyDirective","PhoneNumberFormatDirective","ngControl","onModelChange","valueAccessor","writeValue","keydownBackspace","ctx_r26","ctx_r28","ctx_r53","ctx_r55","FormInputComponent","cdf","MyErrorStateMatcher","inputEmiter","FormControlName","onlyNumber","digitOnly","numbersDotOnly","isPhoneNumber","isAlphaNumeric","inputControls","decimalNumbersOnly","prefix","isConciergeNumber","isNewPhoneNumber","detectChanges","increaseClicked","decreaseClicked","onKeyup","iconClick","ctrlName","addNewPhoneNumber","returnFunction","onFocusOut","onfocusOutClick","FormCheckboxComponent","configName","FormTextareaComponent","_r7","ctx_r15","_r20","FormSelectComponent","reset","blur","selectedOption","_r2","FormdateComponent","MAT_DATE_FORMATS","layoutService","_r1","FormRadioComponent","selectedRadioOption","FormInputSelectComponent","FormAddButtonComponent","addData","addBtnConfig","ctx_r21","ctx_r24","ctx_r37","ctx_r39","FormAutocompleteComponent","_eR","slotTimePipe","autocomplete","panelOpen","updatePosition","autocompleteOptions","appearance","scrollEvent","selectedOptions","viewValue","toHighlight","patchValue","ngDoCheck","validInput","filterOptions","isDateTime","DateTime","filterValue","ngDestroy","removeEventListener","omit_Characters","dateSelection","MatAutocompleteTrigger","FormTimeComponent","input","checkbox","textarea","select","radio","inputSelect","addBtn","formChipService","multiple","multipleChip","selectedChip","setSelected","formChipChange$","FormChipComponent","DynamicFieldDirective","resolver","container","supportedTypes","DynamicFormComponent","dynamicFormService","createGroup","configControls","removeControl","addControl","createControl","updateControl","createFormArray","HTMLPattern","disable","enable","createItem","handleSubmit","submit","validateAllFormFields","getElementsByName","scrollIntoView","behavior","formGroup","markAsTouched","onlySelf","setDisabled","DynamicFormService","domSanitizer","backspace","stringCount","newVal","phoneNumberFormatArray","v","PhoneNumberPattern","getFormat","Function","inputvalidation","secureText","sanitize","SecurityContext","ActivityListFilterPipe","firstDay","weekdaysBetween","dateFilteredActivity","eachActivity","P","isSameOrAfter","nameFilteredActivity","searchText","CurrencyDecimalFormatter","num","DateComparePipe","date1","date2","numOfDays","FormatSettingsDatePipe","getLanguageIdFromUrl","availableLanguages","findLocale","toUpperCase","LocalizedDatePipe","formatDate","SlotTimeFormatter","SlotDate","amPm","hrs","getHours","mins","getMinutes","TextCutterFormater","maxLength","substr","GuestService","snackBar","gtmService","state","ce","lt","Fe","Ht","Ut","LocationViewType","AvailabilityOnPartySize","addnlUrl","skipLocationChange","fromCart","_platformLocation","HomePageUrl","merchantImgUrl","bannerImg","logoImg","backgroundImg","tagId","googleTagManagerId","pushTag","mealId","requireImage","getbyBookingId","RegisterReservationAttemptCart","RegisterReservationAttemptRequest","reservationAttemptIds","requestBody","RegisterReservationAttemptMerchantLevel","RegisterReservationAttemptMerchantRequestDTO","cartListReqObj","sessionIds","CancelStandByBooking","CancelOpenBooking","partyIds","CancelPrivateLessonBooking","addToCartItem","validateCart","PartyIds","LockCartSessionSlots","lockreq","UnlockCart","unlockList","getContactFromEngagebyCardno","cardNo","lockTables","slotIdObj","cartListObj","eachLock","slotResultDto","findInnerArrayData","ei","Ke","St","TableLockedDTO","Ve","Q","ze","fe","ye","Ce","pt","dt","setOpenBookingSlotLockIds","lockDetails","lockObject","getSlotsForTable","generateSlot","dateTime","UpdatedAt","timeDifference","minutesToDday","hoursToDday","daysToDday","setAdditionalGuest","noofguest","additionalGuestRequired","TabChange$","TimerOff$","msgState","snackConfiguration","unlockCartURL","unlockCartList","getCountryId","loadDefaultImage","hideImage","loader","hideBackNavigation","backNavigation","backNavigateURL","eachCart","lockRequest","lockIdToIgnore","Gt","fi","fromComponent","back","showAction","maxWidth","selectionView","disableClose","minHeight","standalone","cartListCount","isObject","setting","settings","FilterByVenue","PropertiesEnabled","ViewActivityInfo","IsMembershipFilterEnabled","HeaderText","IsWidgetHeaderEnabled","IsWidgetFooterEnabled","Languages","IsMultiLanguageSelectionEnabled","numberOfFractionalDigits","lockResponseArr","matchedLockResponseObj","checkLanguageAvailabilityOption","getLanguageConstant","screenType","GetLanguageConstants","setLanguageConstant","lngConstants","languageConstants","cnst","lngConst","LanguageKey","LanguageValue","loadLanguageData","languageFileChanges","langChged","reload","lang","Code","body","remove","loadPropertyBannerImage","loadSpecialMealImage","querySelector","BannerImageUrl","loadBannerImage","httpOptions","headers","HttpHeaders","localStorage","HttpService","http","forImage","put","catchError","handleError","delete","errMsg","statusText","throwError","LocalizeService","literalsFolder","translationPath","customLiteralsPathAvailable","use","setTranslatePath","getFallbackLangPath","fallbackLang","PopupService","isManual","DEFAULT_ALIASES","hover","focus","win","guessedVersion","spanEl","innerText","rect","checkPadding","getComputedStyle","paddingLeft","parseFloat","__theme","_guessBsVersion","isBs3","isBs4","isBs5","MapPlacementInToRL","bottom","right","auto","PlacementForBs5","nodeType","ownerDocument","defaultView","documentElement","sibling","offsetParent","nextElementSibling","getStyleComputedProperty","getOffsetParent","parentNode","getRoot","element1","element2","order","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","range","createRange","setStart","setEnd","commonAncestorContainer","contains","firstElementChild","isOffsetContainer","element1root","host","findCommonOffsetParent","parentElement","axis","sideA","sideB","computedStyle","getSize","offsets","prototype","call","isNumber","getWindowSizes","horizScrollbar","offsetWidth","vertScrollbar","offsetHeight","getBordersSize","getClientRect","overflow","overflowX","overflowY","getScrollParent","getParentNode","children","parent","fixedPosition","_b","_c","_d","_e","_f","isHTML","childrenRect","parentRect","borderTopWidth","borderLeftWidth","marginTop","marginLeft","side","upperSide","scrollingElement","isFixed","padding","boundariesElement","boundaries","getFixedPositionOffsetParent","excludeScroll","relativeOffset","getOffsetRectRelativeToArbitraryNode","innerHeight","scrollTop","Kt","getScroll","scrollLeft","getViewportOffsetRectRelativeToArtbitraryNode","boundariesNode","vi","placement","refRect","allowedPositions","_g","_j","_k","_m","getBoundaries","rects","sortedAreas","getArea","filteredAreas","allowedPosition","computedPlacement","variation","getBsVer","def","marginBottom","marginRight","hostOffsets","targetRect","getOuterSizes","targetOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","hash","matched","getOppositePlacement","modifierName","modifiers","enabled","availablePositions","checkPosition","unit","n","isFinite","isNumeric","setStyle","style","arrowElement","isVertical","len","sideCapitalized","altSide","opSide","arrowElementSize","placementVariation","targetMarginSide","targetBorderSide","center","targetBorderRadius","borderRadius","targetSideArrowOffset","sideValue","arrow","round","isModifierEnabled","getTargetOffsets","adaptivePosition","computeAutoPlacement","flipOrder","step","_o","_p","_q","_r","overlapsRef","overflowsLeft","overflowsRight","overflowsTop","overflowsBottom","overflowsBoundaries","flippedVariation","getOppositeVariation","transformProp","targetStyles","preventOverflow","check","primary","secondary","isPlacementHorizontal","basePlacement","shiftVariation","shiftOffsets","positionService","hostElement","targetElement","offset","getReferenceOffsets","positionElements","appendToBody","chainOfModifiers","flip","shift","hostElPosition","placementAuto","matches","positionFixed","modifiedData","modifier","getOffsets","setStyles","containerClass","dataPlacement","checkPopoverMargin","checkMargins","updateContainerClass","PositioningService","rendererFactory","platformId","update$$","Map","isPlatformBrowser","runOutsideAngular","triggerEvent$","merge","fromEvent","passive","of","animationFrameScheduler","positionElement","_getHtmlElement","attachment","createRenderer","addPositionElement","event$","calcPosition","deletePositionElement","elRef","setOptions","PLATFORM_ID","ElementRef","nodes","viewRef","componentRef","_viewContainerRef","_renderer","_injector","_componentFactoryResolver","_ngZone","_applicationRef","_posService","onBeforeShow","onShown","onBeforeHide","onHidden","_providers","_isHiding","containerDefaultSelector","_listenOpts","_globalListener","isShown","_componentRef","attach","compType","_componentFactory","to","opts","provider","show","_subscribePositioning","_innerComponent","_contentRef","_getContentRef","content","initialState","injector","Injector","providers","create","attachView","hostView","selectedElement","_registerOutsideClick","componentEl","destroy","_removeGlobalListener","toggle","dispose","_unsubscribePositioning","_unregisterListenersFn","listen","listenOpts","triggers","outsideClick","outsideEsc","registerHide","parsedTriggers","aliases","trimmedTriggers","trigger","triggerPair","alias","Trigger","manualTriggers","parseTriggers","listeners","_registerHide","fn","useToggle","showFn","_hide","unsubscribeFn","listenToTriggersV2","attachInline","vRef","template","_inlineViewRef","createEmbeddedView","targets","registerOutsideClick","registerEscClick","getInnerComponent","_zoneSubscription","onStable","ContentRef","TemplateRef","_viewRef","rootNodes","contentCmptFactory","modalContentInjector","createText","ComponentLoaderFactory","createLoader","ComponentLoader","PopoverModule","static","ngModule","TooltipModule","GuestTitlePipe","SafeHtml","htmlval","DEFAULT_PERFECT_SCROLLBAR_CONFIG","wheelPropagation","minScrollbarLength","DEFAULT_SWIPER_CONFIG","direction","slidesPerView","keyboard","mousewheel","navigation","nextEl","prevEl","slideToClickedSlide","loop","observer","TitleCasePipe","PERFECT_SCROLLBAR_CONFIG","useValue","SWIPER_CONFIG","NgbModule","NgScrollbarModule","PerfectScrollbarModule","SwiperModule","dimensionType","popupType","popUpDetails","eventName","countryCodes","defaultCountry","restaurantCountry","matchedCountry","startOf","uniqueByArgs","modifiedArray","output","customDate","utc","getTimezoneOffset","nd","AddonsList","AddonActivitiesMappings","selectedAddOns","Quantity","OverAllAddon","AvailableAddon","selectedPartySize","addonvalue","alreadycheckval","categoryleveladdons","byPartyType","byPerBooking","byLessonType","anyCategoryforBooking","addons","z","Categoryaddons","tempval","cat","catval","configLocation","production","defaultPropertyName","generalPropertyName","SEAProduction","restaurantIds","app_base_href","NotesAsTagsMerchantIds","restaurantIdshowSMSRemainder","restaurantIdToHideLanguages","AppRoutingModule","LOADERS","cog","fire","pacman","PRIMARY_SPINNER","init","NgxSpinner","NgxSpinnerService","spinnerObservable","getSpinner","asObservable","spinner","_reject","debounce","_sanitizer","ɵpipe","NgxSpinnerComponent","spinnerService","changeDetector","disableAnimation","ngUnsubscribe","setDefaultOptions","bdColor","fullScreen","divArray","divCount","zIndex","showSpinner","handleKeyboardEvent","spinnerDOM","isSpinnerZone","returnValue","initObservable","takeUntil","propName","changedProp","isFirstChange","currentValue","previousValue","getClass","sizeClass","complete","inputs","ngContentSelectors","pipes","transition","animate","changeDetection","NgxSpinnerModule","LoaderService","LoaderComponent","loading$","isLoading","CdTimerComponent","elt","onStart","onStop","onTick","onComplete","autoStart","timeoutId","countdown","ngContentNode","lastChild","ngContentSchema","nodeValue","resetTimeout","initVar","computeTimeUnits","startTickCount","resume","stop","clear","renderText","hours","tick_count","tickCounter","clearInterval","outputText","items","padStart","maxTimeUnit","setInterval","counter","ɵngcc0","outputs","vars","rf","CdTimerModule","V2HeaderComponent","cdTimer","gt","hideArrow","setLanguageConfig","generateLanguageOptions","languageConfig","languageOptions","isTranslate","setDefaultLanguage","initialLanguageChange","onTimerComplete","cartProceed","DisplayName","D","lng","selectedLanguage","V2FooterComponent","AppComponent","appIntializer","ActivityCommonHeaderComponent","propertyInfo","isCartEnabled","getPropLocation","SelectedLanguage","headerValue","Street1","Street2","propertyLocation","showCartItems","ctx_r3","MessageComponent","closeMessage","closeEvent","messageInfo","primaryButton","secondaryButton","emitOverlapBookingproceedEvent","allowOverlapBookings","overlapBookingproceedEvent","proceedOverlapBooking","isOverlapErrorFromValidateCartApi","ActivityFilterComponent","Subscriptions","filterAvailabilities","filteredSessions","getFilterValues","createReservationConfig","createActionButtons","setMindate","MembershipId","reservationConfig","membershipConfig","previousButton","FilterObj","memberFormGroup","filterFormGroup","hasMembershipValue","InProgress","InstructorId","filterPayLoad","filterObj","ActivityState","filteredDays","daysCount","memberShipdetail","membershipValid","guestObject","FName","LName","Email","PhoneCode","PIILastUsedDate","EmailAddress2","EmailList","Z","EmailId","PhoneNumber2","PhoneList","ue","Birthday","Dob","VisitStats","memberShipId","CardNo","De","MembershipStatus","membershipStatus","TrackMembershipNumber","Ze","Lessons","Pi","Qi","ImageData","mn","sn","filterData","formObj","getAvailableDays","daysArr","resetFilter","resetData","checkAvailability","checkAvailableDate","ctx_r41","ActivityClassBookingComponent","header","alignRight","isDate","isCurrency","lessonType","cols","columnsToDisplay","search_config","isListView","filterDataGridList","SearchbyActivityName","searchOperation","changeView","MatTableDataSource","SelectedActivity$","searchData","assignResetData","ButtonInputFormater","customClass","disabledProperty","additionalInfo","styleObj","btnFormat","additionalText","customStyle","OpenBookingSlotViewComponent","slotAvailabilitySubject$","setSlots","isSlotsAvailable","slots_holder","newslots","IsDisabled","IsOverRide","allAvailableSlots","selectedOpenBookingResevationSlots","minDuration","selectedPrivateBookingResevationSlots","openBookingSlotChange","timediff","isContinuous","allKeys","selectedOpenBookingSlots","slotList","diffInMins","slotValue","diffInSlotMins","maxDuration","SlotChanged","isenableMultiple","slotsToCheck","anyMemberAllocationTypeId","OpenBookingSelectorComponent","datePipe","widgetdata","BookNew$","EditData","isMultipleEnabled","getOpenslots","setOpenBookingFieldConfig","formChangeSubscribe","updateFormValidity","getSlots","getSlotsByLocation","isCoverTypeMatchBookingSize","coverTypeConfig","bookingTypeConfig","isBookingTypeMatchBookingSize","bookingTypeTotal","isValidBookingSizeSelected","isFormValid","istimeSlotsSelected","componet","coverTypeConfigChange","bookingTypeConfigChange","openBookingConfig","coverSizeConfig","getCoverTypeConfig","getBookingTypeConfig","formdateComponent","displaySlots","instructor","partySlots$","getEditSlots","SlotIds","availableSlots","OpenHours","openHour","SlotsByTableId","newSlot","checkFormValidity","openhrSlots","Nt","existingslot","isSame","updateSelectedSlotsByMembersihps","itm","allocationTypeId","slot_holder","openBookingObj","membershipNo","formdataComponent","openBookingData","OpenBookingDTO","getLocationName","locationId","gotoNextPage","createSaveRequestObj","lockKeys","slotAvailablity","lockMultipleIds","AllocationName","IsMemberActive","TotalRatePlan","RatePlanList$","OpenTimeSlots","RatePlanTimeSlots","getRatePlanSlots","timeslots","slotI","currentSlotIndex","resSlot","calculateEndTime","defaultDateTime","startTimeStr","setMinutes","additionalGuestLength","CheckMemberShip","validCoverTypes","validBookingTypes","getFormComponent","args","arg","ct","bt","setCoverTypeValue","covertType","ActivityBookingComponent","bookingValue","imageUrl","bookingType$","ClassInfoComponent","bannerImage","backButton","bookButton","operatingCurrency","bookClick","ActivitySlotViewComponent","SessionSlots","initFormArray","intialized","onSlotClick","slotClick","ctx_r27","ctx_r32","ActivitySelectorComponent","widgetData","currentTab","resetValue","SelectedActivityData","locationConfig","updateDateConfig","customizeSizeConfig","bookingType_config","multiCheck","Instructor","bookingtypes","covertype","getBookingTypeName","getCoverTypeName","SessionSlotsAvailableDates","_results","cancelButton","CheckAvailabilityBtn","StaffList","from_dateConfig","to_dateConfig","ci","setBookingTypeValue","reservationToken","formRepeatCount","navClick","moveDirection","gotoPreviousPage","resetPaymentInfo","ispaymentInvolvedInfo","setRatePlanData","bookingTypevariants","SelectedActivity","UniqueArrayOfObject","FirstkeyToBeUnique","SecondKeyToBeUnique","PrivateActivityBookingComponent","isValidDuration","fromdate","updateCoverConfig","activitySessions","Ra","Qn","durationSelected","MinDuration","MaxDuration","DataRetentionPolicyComponent","customPolicyText","CustomPolicyText","dataRetentionPolicy","dataRetentionPolicy$","policy","loadPolicies","PolicyDetails","policyDetails","DataType","nameRetentionPeriod","RetentionInDays","emailRetentionPeriod","phoneRetentionPeriod","fromclient","addressRetentionPeriod","guestImageRetentionPeriod","birthdayAndAnniversaryRetentionPeriod","customFieldRetentionPeriod","AuthRefundPopupComponent","FinancialData","refundAmountConfig","refundOptions","changeindex","isTotalAmountMatching","setRefundData","isInputGreaterThanTotal","resIndex","selectType","total","ctx_r31","ctx_r43","GuestDataComponent","titleCasePipe","currencyDecimalFormatter","isNew","partyDetails","AuthrefundPopupRef","getCancellationPolicy","CancellationPolicy","cancellationPolicy","guestDataSecondary","guestInfoConfig","guestDataPrimary","addCustomGuestFields","addRequiredCustomTermsAndConditions","guestInfoConfigSecondary","disableSelect","Mobile","dataRetentionPolicyDialogRef","deleteSecondaryGuestConfirmed","deleteSecondaryGuestPopUpRef","RefundData","showAuthRefundPopup","isAuthRefund","goBackToReservation","subscribeMemberConfig","cartEvents","isAdd","addtoCartDataSuccessHandler","isUpdate","updateCartSuccessHandler","countryCodeSelected","confirmButton","addToButton","bookBtn","editButton","additionalGuestBtn","SaveGuestbtn","groupLabel","freeTextValue","phoneValue","phoneNumber","formData","promoCodeValue","fieldValue","IsCustomGuestFieldVisible","AvailableForOnlineReservation","customFieldErrorMessage","validationField","customFieldValidation","fieldIds","CustomGuestFieldId","customTerm","dataRetentionPolicyExisting","editFromCart","IsGDPREnabled","restaurantWidgetName","ConsentPolicyId","showDataRententionPolicy","dataRetentionPolicyData","fromClient","allNotes","addInfo","notesFormGroup","secondaryGuest1","primaryGuest","primaryGuestPhone","primaryGuestEmail","agreeTerms","dataRetention","bindPreferencesCategoryToForm","bindContactsToForm","fc","getCountryCode","termsOfUse","addToCartData","getSeatSelection","trackByGuest","UpdateCart","selectedCartIndex","additionalGuest","queryForm","touched","memberForm","srcForm","contactNotes","WaiverFormCode","Applied","FormCode","isValidateCartApi","RemindBySMS","RemindByEmail","ConsentDate","formValue","userSelectedPredefinedNotesList","existingContactNoteId","freeTextId","promocode","getContactNotes","PartiesData","isArray","bookingPartiesData$","partyType","responseTimeSlots","NewParties","PaymentData$","bindPaymentAmountAndMessage","CreditCardIFrameURL","paymentAmount","ratePlanAmountInfo","specialMealAmountInfo","paymentAmountInfo","activityPayment","paymentMessage","showPaymentSummary","noShowfee","CustomNoShowFeeTerms","noShowfeeMessage","noShowPolicyTitle","CancellationTitle","getPaymentCallbackRequestDTO","transactionReferenceData","transactionResponseData","totalAmount","transactionFollowOnData","createPartialReservationforAuth","showRefundPopup","openDeleteConfirmationPopUp","secondaryGuestTobeDeletedIndex","backtosummary","ctx_r65","ActivitySlotSummaryComponent","RestaurantSettingsData","SummaryData","setSummaryData","getInstructors","OpenbookingSlots","selectedBookingSlotObj","activityName","TableNames","getTimeRange","SessionData","isEditEnable","SelectedLocList","selectedLoc","ActivitySummaryComponent","ctx_r56","ctx_r61","ctx_r63","ctx_r68","ctx_r70","CartDetailsComponent","cancelledCartItems","refreshCartDetails","getCartList","proceedBtn","continueBtn","backToSummaryBtn","cancelBookingBtn","bookCartData","generateCartId","TableList","StaffsList","showNoResults","LockCartData","isbookingCompleted","cancelledCartItems$","proceedBooking","SlotLockResult","ClientIP","ForceIFrameUrl","setReservationAttemptResponse","reservationAttemptIDsList","getRegisterreservationAttemptIds","TotalCartPayment","showIframeURL","LoadPayment","ReservationAttemptResponse","attempt","showIframeLoader","IframeURL","mapLockAndReservationAttemptInfo","bookedParties","Parties","bookedCartList","reservatioAttemptWithSlotMapList","cancelBooking","continueBooking","cartLockResultIds","slotLockId","RefundAmount","TotalRefundAmount","BookAnotherReservation","isSummaryFromCart","editItem","setPartyDetails","setPartySessionClassInfo","WaiverFormTrancationId","calculateRatePlanTotal","unlockCartObj","LockIdToIgnore","setClassType","BookingBehaviour","setCartLockandRatePlanData","CartLockData","cartItemLockInfo","lck","setLockIds","TotalCartValue","TotalDepositAmount","slotLockData","setTimer","IsLockTimer","CreditCardRequired","viewPartySummary","parties","getbyToken","selectedBooking","backtosummaryBooking","RatePlanDetailsComponent","ctx_r69","ctx_r90","ctx_r93","ctx_r99","ActivityScheduleComponent","restaurantToken","ratePlanfromToken","PartyData","reservationAllCancelled","allAvailableDates","setPaymentSummary","availableDates","AllParties","SelectedCoverTypeQuantities","SelectedBookingTypeQuantities","setPartiesData","showModifybtn","SelectedClassSchedule","ratePlantotal","partySchedule","selectedSlotRatePlan","WishedTime","variants","PrepaymentState","TotalMemberShipVariant","modifySelected","SpecialMeals","BookedDates","getSessionIds","bookedinfo","sessions","sessioninfo","ActivityInfo","rateData","amount","specialmeal","activeSession","classGroup","selectedClassList","timeConversion","hour","modifyButton","BookAnotherReservationBtn","backToSummarybtn","confirmCancelation","confirmClassorSessionCancellation","reservationConfirmationText","isClassBokking","checkAllReservationCancellation","SelectedSessionIds","setCancelSummaryData","editdata","PaymentState","showRefundAmount","dat","checkresponseData","showCancellationAlertMessage","cancellationDto","selectedactivity","WillBeChargedImmediately","dateClicked","sessionClicked","dateIndex","itemsChecked","cancelClick","sessionmsg","modifyClick","SelectedDates","bookAnotherReservationBtn","refundDialogRef","checkPartyState","backToCartSummary","ActivityBookingSummaryComponent","dateFormat","bookingSection","ratePlanList","calculateTotalAmount","showScheduleSummary","SeatedType","ConfirmationData","lessonName","coverSize","openBookingStartDate","DepositPaid","SessionCount","modifyBtn","backToCartSummarybtn","reservationCancelled","showratePlanDetails","modifyDetails","cancelReservationList","ids","cancelDetails","datePipeString","reservationStatus","showSchedule","ActivityAdditionalguestComponent","ActivityCommonFooterComponent","ActivitiesComponent","SelectedTab","bookAnotherReservation","loadDataRetentionPolicy","client","loadRestaurantSettings","acceptReservation","AllowTableSelection","propertyName","pageName","globaactivityServiceeatingAreaId","section_id","loadBackgroundImage","backgroundImageData","setbackgroundImage","mainContainer","WidgetBackgroundColor","ErrorComponent","ctx_r48","ctx_r71","ReservationDetailsComponent","spaceBetween","breakpoints","reservationDetailsFormGp","reservationDate","reservationTime","communalAvailability","eventSelection","AllowNewReservations","eventOptions","reservationSelectionConfig","EventSelection","selectValue","isSpecialMealAvailable","specialMealList","seatingAreaData","isNativeControl","seatingTypeData","seatingTypeInfoPopup","updateLockedTableInReservationForm","tableLockDTO","availabilityText","setResetBackgroundColor","loadInitialSettings","splMealFromURL","specialMealIdFromURL","spm","reservationConfigForm","dateSelectedInOtherDaysAvailability","clearMealTabSelection","showSlots","checkPartySizeValidationAndAssignFormValue","LoadSeatingTypes","triggerAvailableDatesApiCall","getRestaurantAvailableDates","reservationDetailsForm","availableMealPeriods","resetOtherDaysAvailability","coverTypeForm","availableCoverTypePrices","specialMealPartySize","isNextBtnDisabled","minPartySize","partySizeError","PartySizeAndDateDisclaimer","toolTip","ShowCommunalTableAvailabilityOption","globalSeatingAreaId","setAvailableMealPeriod","selectedSeatingTypeId","markAsDirty","originalReservedFor","bc","selectedMeal","ReservationDate","totalCovers","coverTypeValue","restrictAvailabilityCheck","navigateLeft","scrollWidth","navigateRight","clearBackgroundColor","getRestaurantDateAvailability","querySelectorAll","removeStyle","selectedAvailabilityDays","AvailableButtonBackgroundColor","AvailableButtonColor","coverTypeElements","coverLength","isInitialEdit","showOtherDays","showRefreshText","mealPeriodConfig","maxAllowedDate","mealPeriods","CheckAvailability","selectedTimeArray","timeBtn","btn","EarlierLaterHoverBackgroundColor","Value","partySizeOptions","isSpecialMealDisabled","getMinMaxDate","addPartySizeConfig","viewPrice","showPrepaymentIcon","sp","selectedViewPricing","lockCallRequired","LockSlot","specialMealValue","unshift","valueIncrease","selectedCoverType","selectedConfig","valueDecrease","mealPeriod","removeSeatingAreaWhichHasNoSeatingTypeMappings","sepcialMeal","_selectedDate","timeBtnArray","isDropdown","timeArrayValues","timeBtnArrayConfig","selectedDateTime","scrollBottom","selectedSlotVal","showSeatingPriceIfRequired","showRatePlanInformationPopUp","seatingTypeName","getRatePlanText","onRefreshClick","block","inline","SeatingTypeFilter","typeId","seatingTypesList","TablesLayoutComponent","communalTableOption","allowMultipleSelection","AllowMultipleTableSelection","seatSelectionFormGp","seatSelected","seatSelectionConfig","isCommunalTableSelected","isSlotAcquired","highLightSelectedTables","controlTimerDisplay","_render","callSuper","font","fillStyle","fillText","callback","forceAsync","tableSelectIcon","_getNonTransformedDimensions","scalarAdd","_calculateCurrentDimensions","_getTransformedDimensions","getViewportTransform","skipOrHightLightTableSelection","isTableAvailable","SlottingModeWidget","highlightPreviousSelectedTable","tableIds","selectedTableIds","animationCounter","getReservationId","timeCount","getGuestDetails","updateSeatingTypeId","getReservationDetails","selectedTableId","isSameType","isSameArea","isSelectedSizeAccommodableInTable","isJoinedTableAvailable","joinedTables","JoinedTables","joinedTable","StandaloneTableIds","tablesJoined","tableReq","mouseOut","showPrice","setSelectedTables","isMouseDown","removeHightLightColor","addHighLightObject","icontop","iconleft","sin","cos","myobj","scaleToWidth","scaleToHeight","available","textAvailable","textSeatingType","textPartySize","getTableDisplayName","EventId","textAvailablerect","textAvailableData","textAvailableGroup","textSeatingTypeLabel","partySizeData","pricePopoverGroup","getWidth","onSelectionCleared","selectionCleared","removeIllusion","joinTableSelected","removeHightLightedColor","seaterTables","selectedTable","isPartySizeFulFilled","tableData","tableDetails","joinedTableIds","tbleId","tbleObj","ismouseDowm","GuestDetailsComponent","SwireConfig","authorizeTransactionDetails","isSwireAndSEAEnv","CheckForSwire","PreReservationMessage","isPreReservationMsgHTML","isForSwire","mapPartyNotes","configOptions","formChipsChange","str","doc","DOMParser","parseFromString","regionChange","mobileNumberValidation","editSlotsButton","editGuestButton","tag","getOptions","configOptios","PrimaryButtonBGColor","swireMerchantIds","selectedChips","_partyNotes","selectedPartyNotes","sNotes","selectedPartyPreferenceTags","acc","cur","preferredTags","arrVal","filteredNotes","secondaryContactId","isForSecondaryContact","userSelectedPartyPreference","existingNoteId","sc","countryValue","clearValidators","showSMSRemainder","bindContactPhoneNumber","copyData","CopyPrimaryContactDetailsToSecondaryWidget","isAnyFormInvalid","termsIndex","GuestReservationPhoneNumber","setControl","invalidFormCount","GuestReservationEmail","remindAboutVisit","reservationBySMS","reservationByEmail","Eo","yd","hl","Nr","Fa","Gc","dr","pp","Ec","Hu","Vu","Dh","getPartyNotes","Fl","al","promoCodeNotes","partyNotes","coverTypesList","coverTypeDto","CoverTypeQuantityDTO","bookingTypesList","bookingTypeDto","BookingTypeQuantityDTO","reservationConfimationDetails","taxAmount","paymentWithoutTax","rGuestPayResponse","ChargeOnBooking","enableIframe","formDiv","ConfirmationDetailsComponent","createActionButton","partyConfirmationDetails","ConfirmationMessage","isConfirmationMsgHTML","setReservationData","showImage","confirmationCode","ConfirmationCode","bookingReferenceId","BookingReferenceId","reservationFor","setSelectedSeatingType","setSelectedSpecialMeal","taxes","serviceChargeTax","bookNewReservation","modifyReservation","resetPage","cancelationInformation","bookReservation","showTaxes","showTaxDetails","CoverTypePriceFilter","CoverType","coverTypeSelected","PrivacyPolicyComponent","TermsOfUseComponent","HeaderComponent","hideLanguageOption","showRestrictedLanguage","languages","FooterComponent","LayoutComponent","currentComponent","componentArray","curentComponent","events","NavigationEnd","currentRoute","routerState","setCustomStyles","restaurantUniqueName","link","rel","paramLanguage","currentComponentName","ngAfterViewChecked","isHeaderDisplayed","subHeaderElements","SubheaderTextColor","formElements","BodyTextColor","specialMealElements","SMFontColor","SpecialMealFontSize","inputElements","actionButton","PrimaryButtonTextColor","ButtonFont","ButtonFontSize","ButtonStyle","btnIcon","SecondaryButtonBGColor","SecondaryButtonTextColor","timeButtons","HeaderFont","matInputElements","InputStyle","hyperlinkElements","HyperlinkFont","showFooter","restaurantNameElement","RestaurantNameSize","RestaurantNameFont","RestaurantNameTextColor","restaurantAddressElement","RestaurantAddressSize","RestaurantAddressFont","RestaurantAddressTextColor","allowReservations","SurveyApiService","imagedata","questionList","updatesurveyelement","getFeedbackSurveyQuestions","propertyUniqueName","getTokens","setImage","setQuestion","getImage","getaddress","restaurentName","questionspost","address","updatesurveylist","PropertyID","FeedbackQuestionId","currentGuest","rating","GuestComments","ErrorEvent","surveyService","httpSurveyApi","getsurveyelement","_input","Title","getvalue","OutletName","DateandTime","ArrivedAt","IntroText","SurveyFormComponent","questions","isdatavalid","isonlyText","getsurveyaddress","success","dataSaved$","errormsg","onSearchChange","checkaallselected","SurveyMainComponent","paramMap","isvalid","getSurveyQuestions","getCommentcardCustomizations","commentcardStyles","getAllQuestions","surveyDetails","FeedbackQuestionaries","FeedbackQuestion","isActivity","bookingDate","Feedbacks","getsurveyproperty","timeOut","matcher","consumed","getModifiedRestaurantUrl","posParams","UrlSegment","loadChildren","partyToken","CoreRoutingModule","scrollPositionRestoration","GoogleTagManagerModule","splitUrltext","suffix","getTranslation","LayoutModule","SurveyModule","LoaderInterceptor","loaderService","removeRequest","requests","intercept","Observable","subscription","handle","HttpResponse","PayloadProcesser","pendingRequests","clonedObs","OnOperationCompletedWithServerError","OnOperationCompletedWithValidationErrors","OnOperationCompletedWithAccessDenied","ShowNotification","AccessDenied","ActivitiesModule","TranslateHttpLoader","CoreModule","HTTP_INTERCEPTORS","useClass","multi","HttpClientModule","TranslateLoader","HttpLoaderFactory","HttpClient","appInit","overlay","scrollStrategies","AppModule","bootstrap","DatePipe","APP_BASE_HREF","APP_INITIALIZER","init_app","MAT_AUTOCOMPLETE_SCROLL_STRATEGY","scrollFactory","Overlay","MAT_DATE_LOCALE","DateAdapter","MomentDateAdapter","MAT_MOMENT_DATE_ADAPTER_OPTIONS","MAT_MOMENT_DATE_FORMATS","BrowserModule","BrowserAnimationsModule","CdkTableModule","ToastrModule","ScrollingModule","enableProdMode","__NgCli_bootstrap_1","bootstrapModule","canPromise","require","CanvasRenderer","SvgRenderer","renderFunc","cb","arguments","argsNum","isLastArgCb","exports","renderCanvas","render","renderToDataURL","module","getSymbolSize","posCount","intervals","ceil","positions","coords","pos","getRowColCoords","posLength","Mode","ALPHA_NUM_CHARS","ALPHANUMERIC","AlphanumericData","getBitsLength","getLength","write","bitBuffer","buffer","BitBuffer","bufIndex","putBit","getLengthInBits","bit","Uint8Array","reservedBit","BitMatrix","row","col","reserved","xor","isReserved","encodeUtf8","BYTE","ByteData","l","ECLevel","EC_BLOCKS_TABLE","EC_CODEWORDS_TABLE","L","H","level","string","fromString","Utils","G15_BCH","getBCHDigit","mask","EXP_TABLE","LOG_TABLE","KANJI","KanjiData","toSJIS","PATTERN000","PATTERN001","PATTERN010","PATTERN011","PATTERN100","PATTERN101","PATTERN110","PATTERN111","maskPattern","Patterns","parseInt","sameCountCol","sameCountRow","lastCol","lastRow","bitsCol","bitsRow","darkCount","modulesCount","pattern","getMaskAt","setupFormatFunc","numPatterns","bestPattern","lowerPenalty","Infinity","applyMask","penalty","getPenaltyN1","getPenaltyN2","getPenaltyN3","getPenaltyN4","VersionCheck","Regex","ccBits","dataStr","testNumeric","NUMERIC","testAlphanumeric","testKanji","NumericData","remainingNum","GF","p1","p2","coeff","mul","divident","divisor","degree","poly","exp","AlignmentPattern","FinderPattern","MaskPattern","ECCode","ReedSolomonEncoder","Version","FormatInfo","Segments","matrix","bits","getEncodedBits","mod","fromArray","estimatedVersion","rawSegments","rawSplit","getBestVersionForData","bestVersion","dataBits","getCharCountIndicator","dataTotalCodewordsBits","getSymbolTotalCodewords","getTotalCodewordsCount","remainingByte","totalCodewords","dataTotalCodewords","ecTotalBlocks","getBlocksCount","blocksInGroup1","totalCodewordsInGroup1","dataCodewordsInGroup1","dataCodewordsInGroup2","ecCount","dcData","ecData","maxDataSize","encode","createCodewords","createData","moduleCount","modules","setupFinderPattern","getPositions","setupTimingPattern","setupAlignmentPattern","setupFormatInfo","setupVersionInfo","inc","bitIndex","byteIndex","setupData","getBestMask","toSJISFunc","setToSJISFunction","createSymbol","Polynomial","genPoly","initialize","generateECPolynomial","paddedData","remainder","buff","numeric","kanji","byte","TEST_KANJI","TEST_NUMERIC","TEST_ALPHANUMERIC","dijkstra","unescape","encodeURIComponent","exec","numSegs","getSegments","alphaNumSegs","byteSegs","kanjiSegs","isKanjiModeEnabled","BYTE_KANJI","s1","s2","modesHint","bestMode","getBestModeForData","seg","buildSingleSegment","segs","getStringByteLength","buildNodes","getSegmentsFromString","graph","prevNodeIds","nodeGroup","currentNodeIds","lastCount","prevNodeId","getSegmentBitsLength","buildGraph","find_path","optimizedSegs","prevSeg","mergeSegments","toSJISFunction","CODEWORDS_COUNT","digit","G18_BCH","totalBits","reservedBits","MIXED","usableBits","getReservedBitsCount","ecl","currentVersion","getTotalBitsFromDataArray","getCapacity","getBestVersionForMixedData","getBestVersionForDataLength","qrData","canvasEl","getCanvasElement","getImageWidth","createImageData","qrToImageData","clearRect","clearCanvas","putImageData","rendererOpts","quality","attrib","alpha","hex","cmd","qrcodesize","bg","getColorAttrib","moveBy","newRow","lineLength","svgCmd","qrToPath","svgTag","hexCode","hexValue","g","hex2rgba","qrSize","getScale","imgData","qr","symbolSize","scaledMargin","palette","posDst","pxColor","TranslateFakeLoader","ɵTranslateFakeLoader_BaseFactory","FakeMissingTranslationHandler","o1","o2","keySet","t1","equals","source","mergeDeep","TranslateDefaultParser","TranslateParser","templateMatcher","interpolate","expr","interpolateString","interpolateFunction","getValue","isDefined","ɵTranslateDefaultParser_BaseFactory","TranslateFakeCompiler","TranslateCompiler","compile","compileTranslations","translations","ɵTranslateFakeCompiler_BaseFactory","currentLang","defaultLang","langs","onTranslationChange","onLangChange","onDefaultLangChange","USE_STORE","USE_DEFAULT_LANG","DEFAULT_LANGUAGE","USE_EXTEND","TranslateService","store","currentLoader","compiler","parser","missingTranslationHandler","useDefaultLang","isolate","extend","defaultLanguage","pending","_onTranslationChange","_onLangChange","_onDefaultLangChange","_langs","_translations","_translationRequests","setDefaultLang","_defaultLang","_currentLang","retrieveTranslations","take","changeDefaultLang","getDefaultLang","changeLang","loadingTranslations","shareReplay","updateLangs","setTranslation","shouldMerge","getLangs","addLangs","getParsedResult","interpolateParams","observables","k","isObservable","sources","forkJoin","concatMap","getStreamOnTranslationChange","defer","switchMap","stream","reloadLang","resetLang","getBrowserLang","navigator","browserLang","browserLanguage","userLanguage","getBrowserCultureLang","browserCultureLang","TranslateStore","MissingTranslationHandler","TranslatePipe","translate","_ref","onTranslation","lastKey","query","lastParams","validArgs","SyntaxError","_dispose","kSampleStepSize","float32ArraySupported","Float32Array","aA1","aA2","aT","C","mX1","mY1","mX2","mY2","LinearEasing","sampleValues","calcBezier","aX","intervalStart","currentSample","kSplineTableSize","guessForT","initialSlope","getSlope","aGuessT","currentSlope","newtonRaphsonIterate","aA","aB","currentX","currentT","binarySubdivide","getTForX","single_source_shortest_paths","s","predecessors","costs","closest","u","cost_of_s_to_u","adjacent_nodes","cost_of_s_to_u_plus_cost_of_e","PriorityQueue","make","empty","pop","cost","hasOwnProperty","extract_shortest_path_from_predecessor_list","T","queue","sorter","default_sorter","charCodeAt","second","global","sqrt","atan2","pow","PiBy180","PiBy2","HTMLDocument","Document","implementation","createHTMLDocument","virtualWindow","JSDOM","decodeURIComponent","features","FetchExternalResources","resources","jsdomImplForWrapper","nodeCanvas","gl","pipelineState","glCanvas","targetCanvas","dWidth","destinationWidth","dHeight","destinationHeight","numBytes","u8","imageBuffer","u8Clamped","Uint8ClampedArray","readPixels","RGBA","UNSIGNED_BYTE","isTouchSupported","maxTouchPoints","isLikelyNode","Buffer","SHARED_ATTRIBUTES","DPI","reNum","commaWsp","rePathCommand","reNonWord","fontPaths","iMatrix","svgNS","perfLimitSizeTotal","maxCacheSideLimit","minCacheSideLimit","charWidthsCache","textureSize","disableStyleCopyPaste","enableGLFiltering","devicePixelRatio","webkitDevicePixelRatio","mozDevicePixelRatio","browserShadowBlurConstant","arcToSegmentsCache","boundsOfCurveCache","cachesBoundsOfCurve","forceGLPutImageData","initFilterBackend","isWebglSupported","maxTextureSize","WebglFilterBackend","tileSize","Canvas2dFilterBackend","handler","__eventListeners","eventListener","util","_handler","off","listenersForEvent","once","_once","_removeEventListener","Collection","_onObjectAdded","renderOnAddRemove","insertAt","nonSplicing","somethingRemoved","_onObjectRemoved","forEachObject","isEmpty","deep","complexity","memo","CommonMethods","_setOptions","_initGradient","filler","colorStops","Gradient","_initPattern","Pattern","_setObject","_set","angleSlice","sign","removeFromArray","idx","getRandomInt","random","degreesToRadians","degrees","radiansToDegrees","radians","rotatePoint","newPoint","Point","rotateVector","addEquals","vector","transformPoint","ignoreOffset","makeBoundingBoxFromPoints","xPoints","minX","yPoints","minY","invertTransform","number","fractionDigits","parseUnit","DEFAULT_SVG_FONT_SIZE","falseFunction","getKlass","namespace","camelize","charAt","resolveNamespace","getSvgAttributes","attributes","parts","loadImage","crossOrigin","createImage","onLoadCallback","loadImageInDom","div","enlivenObjects","reviver","enlivenedObjects","numLoadedObjects","numTotalObjects","fromObject","onLoaded","enlivenPatterns","patterns","numLoadedPatterns","enlivenedPatterns","groupSVGElements","elements","centerPoint","Group","sourcePath","populateWithProperties","destination","properties","drawDashedLine","da","dx","dy","rot","dc","di","draw","save","restore","createCanvasElement","copyCanvasElement","newCanvas","multiplyTransformMatrices","is2x2","qrDecompose","denom","skewX","skewY","translateX","translateY","calcRotateMatrix","theta","calcDimensionsMatrix","scaleMatrix","flipX","multiply","tan","composeMatrix","resetObjectTransform","saveObjectTransform","isTransparent","tolerance","_isTransparent","imageData","getImageData","parsePreserveAspectRatioAttribute","attribute","align","meetOrSlice","aspectRatioAttrs","alignX","alignY","clearFabricFontCache","limitDimsByArea","ar","maximumArea","roughWidth","perfLimitSizeY","capValue","findScaleToFit","findScaleToCover","matrixToSVG","NUM_FRACTION_DIGITS","removeTransformFromObject","inverted","finalTransform","calcOwnMatrix","applyTransformToObject","addTransformToObject","setPositionByOrigin","sizeAfterTransform","dimX","dimY","transformMatrix","bbox","_join","commandLengths","h","q","repeatedCommands","th2","th3","cosTh","sinTh","cx1","cy1","mT","fromX","fromY","costh2","sinth2","costh3","sinth3","toX","toY","large","sweep","rotateX","th","px","py","rx2","ry2","py2","px2","pl","root","cx","cy","mTheta","calcVectorAngle","dtheta","mDelta","segmentToBezier","ux","uy","vx","vy","ta","tb","x0","y0","x3","y3","argsString","t2","b2ac","sqrtb2ac","tvalues","jlen","fx","fy","segsNorm","arcToSegments","p1x","p1y","p2x","p2y","p3x","p3y","p4x","p4y","pct","c1","CB1","c2","CB2","c3","CB3","c4","CB4","invT","QB1","QB2","QB3","iterator","perc","tempP","tmpLen","calcLineLength","tempInfo","angleFinder","totalLength","info","command","getPointOnCubicBezierIterator","getTangentCubicIterator","pathIterator","getPointOnQuadraticBezierIterator","getTangentQuadraticIterator","destX","destY","joinPath","pathData","segment","parsePath","pathString","currentPath","parsed","coordsStr","re","rNumber","rNumberCommaWsp","rFlagCommaWsp","regArcArgumentSequence","coordsParsed","commandLength","repeatedCommand","klen","makePathSimpler","converted","previous","controlX","controlY","destinationPath","fromArcToBeziers","getSmoothPathFromPoints","correction","multSignX","multSignY","manyPoints","eq","midPoint","midPointFrom","getPathSegmentsInfo","getBoundsOfCurve","getPointOnPath","distance","infos","segInfo","segPercent","lerp","nextLen","lastPerc","nextStep","findPercentageForDistance","transformPath","pathOffset","pathSegment","newSegment","fromArcToBeizers","getBoundsOfArc","tx","ty","bound","drawArc","bezier","bezierCurveTo","byProperty","condition","invoke","method","value1","value2","Element","prev","character","capitalize","firstLetterOnly","escapeXml","graphemeSplit","textstring","chr","graphemes","getWholeChar","emptyFunction","IS_DONTENUM_BUGGY","addMethods","klass","superclass","methodName","parentMethod","_this","superClassMethod","createClass","subclasses","Subclass","couldUseAttachEvent","attachEvent","touchEvents","addListener","removeListener","getPointer","scroll","getScrollLeftTop","_evt","touchProp","changedTouches","getTouchInfo","isTouchEvent","pointerType","parseEl","reOpacity","setOpacity","es","currentStyle","hasLayout","elementStyle","cssText","styleFloat","sliceCanConvertNodelists","getElementStyle","selectProp","_slice","arrayLike","tagName","ve","htmlFor","docElement","attr","makeElementUnselectable","onselectstart","le","unselectable","makeElementSelectable","setImageSmoothing","imageSmoothingEnabled","webkitImageSmoothingEnabled","mozImageSmoothingEnabled","msImageSmoothingEnabled","oImageSmoothingEnabled","getById","addClass","makeElement","wrapElement","wrapper","replaceChild","getElementOffset","docElem","scrollLeftTop","box","offsetAttributes","paddingTop","clientLeft","clientTop","getNodeCanvas","impl","_canvas","_image","cleanUpJsdomNode","_currentSrc","_attributes","_classList","xhr","XMLHttpRequest","parameters","onreadystatechange","readyState","emptyFn","param","addParamToUrl","setRequestHeader","send","_requestAnimFrame","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","_cancelAnimFrame","cancelAnimationFrame","clearTimeout","requestAnimFrame","timestamp","finish","onChange","noop","abort","easing","defaultEasing","startValue","endValue","byValue","ticktime","timePerc","valuePerc","tick","cancelAnimFrame","begin","animateColor","fromColor","toColor","startColor","getSource","endColor","originalOnComplete","originalOnChange","calculateColor","colorEasing","asin","easeOutBounce","ease","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","easeOutSine","easeInOutSine","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","easeOutCirc","easeInOutCirc","easeInElastic","elastic","normalize","easeOutElastic","easeInOutElastic","easeInBack","easeOutBack","easeInOutBack","easeInBounce","easeInOutBounce","attributesMap","visibility","colorAttributes","fSize","cPath","parentAttributes","parseTransformAttribute","visible","fillIndex","strokeIndex","nodeNames","nodeList","nodeArray","firstMatching","parentMatching","selectorMatches","selector","doesSomeParentMatch","classNames","getAttribute","nodelist","svgValidTagNamesRegEx","getSvgRegex","svgViewBoxElementsRegEx","svgInvalidAncestorsRegEx","svgValidParentsRegEx","cssRules","gradientDefs","clipPaths","reTransformList","reTransform","attributeValue","matrices","translateMatrix","rotateMatrix","multiplierY","skewMatrix","combinedMatrix","reViewBoxAttrValue","viewBoxWidth","viewBoxHeight","viewBoxAttr","widthAttr","heightAttr","preserveAspectRatio","missingViewBox","missingDimAttr","toBeParsed","parsedDim","widthDiff","heightDiff","removeAttribute","Qe","createElementNS","gradient","xlinkAttr","referencedGradient","elementById","recursivelyParseGradientsXlink","hasAttribute","referenceClone","cloneNode","parseSVGDocument","parsingOptions","parseUseDirectives","_getMultipleNodes","xlinkAttribute","attrs","xlink","el2","currentTrans","oldLength","applyViewboxTransform","el3","setAttributeNS","svgUid","__uid","descendants","selectNodes","hasAncestorWithNodeName","getGradientDefs","getCSSRules","parseElements","instances","reFontDeclaration","parseFontDeclaration","oStyle","fontStyle","lineHeight","elList","parseAttributes","parentFontSize","ownAttributes","cssAttrs","rule","elementMatchesRule","getGlobalStylesForElement","parseStyleAttribute","normalizedAttr","normalizedValue","normalizedStyle","normalizeValue","normalizeAttr","mergedAttrs","setAlpha","getAlpha","toRgba","_setStrokeFillOpacity","ElementsParser","chunk","pair","parseStyleString","parseStyleObject","parsePointsAttribute","parsedPoints","allRules","styleContents","ruleObj","propertyValuePairs","_rule","loadSVGFromURL","xml","responseXML","results","_options","allElements","loadSVGFromString","regexUrl","proto","numElements","createObjects","createObject","findTag","fromElement","createCallback","checkIfDone","resolveGradient","_originalElement","_removeTransformMatrix","resolveClipPath","extractPropertyDefinition","storage","lastIndex","gradientDef","opacityAttr","createClipPathCallback","_newObj","fillRule","clipRule","usingElement","objTransformInv","gTransform","calcTransformMatrix","clipPathTag","clipPathOwner","scalar","scalarAddEquals","subtract","subtractEquals","scalarSubtract","scalarSubtractEquals","multiplyEquals","divide","divideEquals","lte","gte","distanceFrom","setXY","setX","setY","setFromPoint","swap","Intersection","appendPoint","appendPoints","intersectLineLine","a1","a2","b1","b2","uaT","ubT","uB","ua","ub","intersectLinePolygon","inter","intersectPolygonPolygon","points1","points2","intersectPolygonRectangle","r1","r2","topRight","bottomLeft","inter1","inter2","inter3","inter4","_tryParsingColor","setSource","colorNameMap","sourceFromHex","sourceFromRgb","sourceFromHsl","_rgbToHsl","_source","toRgb","toHsl","hsl","toHsla","toHex","toHexa","toGrayscale","average","toBlackWhite","threshold","currentAlpha","overlayWith","otherColor","otherSource","reRGBa","reHSLa","reHex","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgrey","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgrey","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","fromRgb","fromSource","fromRgba","fromHsl","hue2rgb","fromHsla","fromHex","isShortNotation","isRGBa","oColor","scaleMap","skewMap","LEFT","TOP","RIGHT","BOTTOM","CENTER","opposite","fabricObject","cornerAngle","canvasOptions","eventData","uniformIsToggled","uniScaleKey","uniformScaling","by","scaleProportionally","lockX","lockScalingX","lockY","lockScalingY","pointer","actionHandler","getCenterPoint","constraint","translateToOriginPoint","actionPerformed","fireEvent","commonEventInfo","corner","localPoint","toLocalPoint","oppositeSkew","scaleToCompensate","reference","newDim","newSkew","dimNoSkew","getLocalPoint","totalSkewSize","currentSkew","targetHasOneFlip","hasSkewed","dimBeforeSkewing","compensateScaleForSkew","dim","signX","signY","scaleIsProportional","forbidScaling","scalingIsForbidden","gestureScale","lockScalingFlip","original","isTransformCentered","oldScaleX","oldScaleY","scaleCursorStyleHandler","findCornerQuadrant","skewCursorStyleHandler","lockSkewingY","lockSkewingX","scaleSkewCursorStyleHandler","altActionKey","rotationWithSnapping","wrapWithFireEvent","wrapWithFixedAnchor","pivotPoint","lockRotation","hasRotated","lastAngle","ey","ex","curAngle","snapAngle","snapThreshold","rightAngleLocked","leftAngleLocked","scalingEqually","scalingX","scalingY","scalingYOrSkewingX","skewHandlerX","scalingXOrSkewingY","skewHandlerY","changeWidth","strokePadding","strokeUniform","multiplier","oldWidth","newWidth","skewObjectX","finalHandler","skewObjectY","dragHandler","newLeft","newTop","moveX","moveY","scaleOrSkewActionName","isAlternative","rotationStyleHandler","cursorStyle","controlsUtils","renderCircleControl","styleOverride","xSize","sizeX","ySize","sizeY","cornerStrokeColor","myLeft","myTop","cornerColor","strokeStyle","se","lineWidth","beginPath","arc","renderSquareControl","xSizeBy2","ySizeBy2","strokeRect","Control","actionName","touchSizeX","touchSizeY","withConnection","mouseDownHandler","mouseUpHandler","getActionHandler","getMouseDownHandler","getMouseUpHandler","cursorStyleHandler","getActionName","getVisibility","controlKey","objectVisibility","_controlsVisibility","setVisibility","positionHandler","finalMatrix","calcCornerCoords","objectAngle","objectCornerSize","centerX","centerY","isTouch","cosHalfOffset","sinHalfOffset","cosHalfOffsetComp","sinHalfOffsetComp","controlTriangleAngle","cornerHypotenuse","newTheta","newThetaComp","tl","tr","bl","br","cornerStyle","colorAlpha","keyValuePairs","gradientTransform","gradientUnits","addColorStop","toObject","propertiesToInclude","markup","commonAttributes","needsSwap","withViewport","additionalTransform","minRadius","percentageShift","colorStop","toLive","createLinearGradient","createRadialGradient","svgOptions","colorStopEls","getLinearCoords","getRadialCoords","getColorStop","propValue","finalValue","__convertPercentUnitsToValues","repeat","patternTransform","isError","patternSource","patternWidth","patternHeight","patternOffsetX","patternOffsetY","patternImgSrc","naturalWidth","naturalHeight","createPattern","Shadow","affectStroke","includeDefaultValues","nonScaling","_parseShadow","shadow","shadowStr","offsetsAndBlur","reOffsetsAndBlur","fBoxX","fBoxY","StaticCanvas","CANVAS_INIT_ERROR","renderAndResetBound","renderAndReset","requestRenderAllBound","_initStatic","backgroundColor","backgroundImage","overlayColor","overlayImage","stateful","controlsAboveOverlay","allowTouchScrolling","backgroundVpt","overlayVpt","enableRetinaScaling","vptCoords","skipOffscreen","_createLowerCanvas","_initOptions","interactive","_initRetinaScaling","setOverlayImage","setBackgroundColor","setOverlayColor","_isRetinaScaling","getRetinaScaling","scaleRatio","__initRetinaScaling","lowerCanvasEl","contextContainer","upperCanvasEl","contextTop","_offset","__setBgOverlayImage","__setBgOverlayColor","_createCanvasElement","_originalCanvasStyle","_applyCanvasStyle","setDimensions","dimensions","cssValue","cssOnly","_setBackstoreDimension","hasLostContext","backstoreOnly","_setCssDimension","_isCurrentlyDrawing","freeDrawingBrush","_setBrushStyles","cacheCanvasEl","wrapperEl","activeObject","_activeObject","backgroundObject","overlayObject","calcViewportBoundaries","before","after","setZoom","absolutePan","relativePan","getElement","setupState","clearContext","_hasITextHandlers","_mouseUpITextHandler","_iTextInstances","isRendering","iVpt","cancelRequestedRender","_renderBackground","_renderObjects","drawControls","shouldCache","_transformDone","renderCache","forClipping","drawClipPathOnCanvas","_renderOverlay","globalCompositeOperation","zoomX","zoomY","_cacheCanvas","cacheTranslationX","cacheTranslationY","_renderBackgroundOrOverlay","needsVpt","lineTo","closePath","getCenter","centerObjectH","_centerObject","centerObjectV","centerObject","viewportCenterObject","vpCenter","getVpCenter","viewportCenterObjectH","viewportCenterObjectV","toDatalessJSON","toDatalessObject","_toObjectMethod","_toObjects","excludeFromExport","_toObject","__serializeBgOverlay","originalValue","bgImage","bgColor","background","svgViewportTransformation","_setSVGPreamble","_setSVGHeader","clipPathId","_setSVGBgOverlayColor","_setSVGBgOverlayImage","_setSVGObjects","suppressPreamble","encoding","createSVGFontFacesMarkup","createSVGRefElementsMarkup","createSVGClipPathMarkup","toClipPathSVG","shouldTransform","rowIndex","charIndex","fontList","_setSVGObject","finalWidth","finalHeight","activeSelection","bringToFront","sendBackwards","intersecting","newIdx","objsMoved","_findNewLowerIndex","intersectsWithObject","isContainedWithinObject","bringForward","_findNewUpperIndex","DataURLExporter","EMPTY_JSON","supports","setLineDash","toJSON","createPNGStream","createJPEGStream","BaseBrush","strokeLineCap","strokeLineJoin","strokeMiterLimit","limitedToCanvasSize","lineCap","miterLimit","lineJoin","_saveAndTransform","_setShadow","shadowColor","shadowBlur","shadowOffsetX","shadowOffsetY","needsFullRender","_resetShadow","_isOutSideCanvas","PencilBrush","decimate","_points","_drawSegment","quadraticCurveTo","onMouseDown","_isMainEvent","_prepareForDrawing","_captureDrawingPath","onMouseMove","oldEnd","onMouseUp","_finalizeAndAddPath","_reset","_addPoint","pointerPoint","convertPointsToSVGPath","_isEmptySVGPath","createPath","Path","decimatePoints","adjustedDistance","lastPoint","newPoints","CircleBrush","drawDot","addPoint","dot","originalRenderOnAddRemove","circles","Circle","circleRadius","circleColor","SprayBrush","density","dotWidth","dotWidthVariance","randomOpacity","optimizeOverlapping","sprayChunks","addSprayChunk","sprayChunkPoints","ilen","sprayChunk","Rect","_getOptimizedRects","uniqueRects","uniqueRectsArray","globalAlpha","fillRect","PatternBrush","getPatternSrc","patternCanvas","patternCtx","getPatternSrcFunction","getPattern","topLeft","_getLeftTopCoords","Canvas","_initInteractive","_createCacheCanvas","centeredScaling","centeredRotation","centeredKey","selectionKey","altSelectionKey","selectionColor","selectionDashArray","selectionBorderColor","selectionLineWidth","selectionFullyContained","moveCursor","defaultCursor","freeDrawingCursor","rotationCursor","notAllowedCursor","skipTargetFind","isDrawingMode","stopContextMenu","fireRightClick","fireMiddleClick","_hoveredTarget","_hoveredTargets","_currentTransform","_groupSelector","_initWrapperElement","_createUpperCanvas","_initEventListeners","_chooseObjectsToRender","objsToRender","activeGroupObjects","activeObjects","getActiveObjects","contextTopDirty","renderTopLayer","_drawSelection","renderTop","_normalizePointer","invertedM","vptPointer","restorePointerVpt","isTargetTransparent","normalizedPointer","targetRelativeX","targetRelativeY","_cacheContext","contextCache","originalColor","selectionBackgroundColor","_isSelectionKeyPressed","_shouldClearSelection","evented","_shouldCenterTransform","altKey","centerTransform","_getOriginFromCorner","_getActionFromCorner","alreadySelected","_setupCurrentTransform","__corner","lastX","lastY","shiftKey","_beforeTransform","setCursor","cursor","viewportStart","viewportExtent","extent","maxX","maxY","strokeOffset","_setLineDash","findTarget","skipGroup","activeTarget","activeTargetSubs","aObjects","shouldLookForActive","_findTargetCorner","_searchPossibleTargets","_checkTarget","globalPointer","containsPoint","isEditing","subTarget","objToCheck","pointerToUse","subTargetCheck","ignoreZoom","_absolutePointer","_pointer","cssScale","boundsWidth","boundsHeight","retinaScaling","lowerCanvasClass","_copyCanvasStyle","fromEl","toEl","getSelectionContext","getSelectionElement","getActiveObject","active","_discardActiveObject","_fireSelectionEvents","oldObjects","somethingChanged","added","removed","oldObject","deselected","updated","S","setActiveObject","currentActives","_setActiveObject","onSelect","onDeselect","discardActiveObject","removeListeners","_renderControls","originalProperties","_realizeGroupTransformOnObject","_unwindGroupTransformOnObject","originalValues","layoutProps","clearContextTop","addEventOptions","button","mainTouchId","_bindEvents","addOrRemove","_getEventPrefix","enablePointerEvents","functor","eventjsFunctor","eventTypePrefix","_onResize","_onMouseDown","_onMouseMove","_onMouseOut","_onMouseEnter","_onMouseWheel","_onContextMenu","_onDoubleClick","_onDragOver","_onDragEnter","_onDragLeave","_onDrop","_onTouchStart","eventjs","_onGesture","_onDrag","_onOrientationChange","_onShake","_onLongPress","_onMouseUp","_onTouchEnd","eventsBound","_simpleEventHandler","__onTransformGesture","__onDrag","__onMouseWheel","_target","hiddenTextarea","__onOrientationChange","__onShake","__onLongPress","_fireEnterLeaveEvents","_cacheTransformEventData","_handleEvent","_resetTransformEventData","getPointerId","identifier","pointerId","isPrimary","__onMouseDown","__onMouseUp","_willAddMouseDown","__onMouseMove","_shouldRender","groupSelector","shouldRender","isClick","checkClick","_onMouseUpInDrawingMode","_finalizeCurrentTransform","targetWasActive","_maybeGroupObjects","activeOn","isMoving","_setCursorFromEvent","eventType","subTargets","absolutePointer","currentTarget","currentSubTargets","_scaling","hasStateChanged","_addEventOptions","_fire","_onMouseDownInDrawingMode","_onMouseMoveInDrawingMode","_previousPointer","shouldGroup","_shouldGroup","_handleGrouping","saveState","_transformObject","_fireOverOutEvents","fireSyntheticInOutEvents","oldTarget","evtOut","canvasEvtOut","evtIn","canvasEvtIn","_draggedoverTarget","inOpt","outOpt","inFires","targetChanged","previousTarget","nextTarget","_performTransformAction","getCornerCursor","_updateActiveSelection","_createActiveSelection","currentActiveObjects","removeWithUpdate","_createGroup","groupObjects","exitEditing","ActiveSelection","_groupSelectedObjects","aGroup","_collectObjects","currentObject","selectionX1Y1","selectionX2Y2","allowIntersect","intersectsWithRect","isContainedWithinRect","toCanvasElement","cropping","scaledWidth","scaledHeight","originalWidth","originalHeight","newZoom","vp","originalInteractive","newVp","originalRetina","originalContextTop","loadFromJSON","json","serialized","_enlivenObjects","_setBgOverlay","enlivenedCanvasClip","__setupCanvas","loaded","cbIfLoaded","__setBgOverlay","enlivedObject","_toDataURL","_toDataURLWithMultiplier","toDataURLWithMultiplier","cloneWithoutData","backgroundImageOpacity","backgroundImageStretch","touchCornerSize","borderColor","borderDashArray","cornerDashArray","strokeDashOffset","borderOpacityWhenMoving","borderScaleFactor","minScaleLimit","statefullCache","noScaleCache","dirty","paintFirst","stateProperties","cacheProperties","colorProperties","absolutePositioned","_cacheProperties","_updateCacheCanvas","_limitCacheSize","dims","limitedDims","capped","_getCacheCanvasDimensions","objectScale","getTotalObjectScaling","neededX","neededY","drawingWidth","drawingHeight","minCacheSize","dimensionsChanged","cacheWidth","cacheHeight","shouldRedraw","additionalWidth","additionalHeight","shouldResizeCanvas","canvasWidth","canvasHeight","sizeGrowing","getHeightOfLine","setTransform","_removeDefaultValues","getObjectScaling","retina","getObjectOpacity","isChanged","groupNeedsUpdate","_constrainScale","isOnACache","setOnGroup","isNotVisible","isOnScreen","_setupCompositeOperation","drawSelectionBackground","_setOpacity","drawCacheOnCanvas","_removeCacheCanvas","drawObject","propertySet","isCacheDirty","hasStroke","hasFill","needsItsOwnCache","ownCaching","willDrawShadow","drawClipPathOnCache","originalFill","originalStroke","_setClippingProperties","_drawClipPath","skipCanvas","_removeShadow","_setStrokeStyles","decl","lineDashOffset","_applyPatternForTransformedGradient","_applyPatternGradientTransform","_setFillStyles","dashArray","drawBorders","forActiveSelection","drawBordersInGroup","scaling","multX","multY","_renderPaintInOrder","_renderStroke","_renderFill","pCtx","pCanvas","_findCenterFromElement","_assignTransformMatrixProps","preserveAspectRatioOptions","cropX","cropY","offsetLeft","offsetTop","objectForm","_fromObject","cloneAsImage","utils","origParams","originalGroup","originalShadow","withoutTransform","withoutShadow","boundingRect","getBoundingRect","shadowOffset","originalCanvas","isType","shouldCenterOrigin","_setOriginToCenter","_resetOrigin","centerH","viewportCenterH","centerV","viewportCenterV","viewportCenter","getLocalPointer","pClicked","objectLeftTop","createAccessors","extraParam","enlivedProps","originXOffset","originYOffset","translateToGivenOrigin","fromOriginX","fromOriginY","toOriginX","toOriginY","translateToCenterPoint","leftTop","getPointByOrigin","adjustPosition","offsetFrom","offsetTo","hypotFull","getScaledWidth","xFull","yFull","_originalOriginX","_originalOriginY","originPoint","multiplyMatrices","oCoords","aCoords","lineCoords","ownMatrixCache","matrixCache","_getCoords","absolute","calculate","calcACoords","calcLineCoords","getCoords","arrayFromCoords","pointTL","pointBR","other","lines","_getImageLines","_findCrossPoints","_containsCenterOfCanvas","isPartiallyOnScreen","topline","rightline","bottomline","leftline","xi","iLine","xcount","lineKey","getScaledHeight","boundingRectFactor","calcCoords","calcOCoords","cosP","sinP","cosPSinP","cosPMinusSinP","_calcRotateMatrix","_calcTranslateMatrix","startMatrix","forEachControl","w","skipCorners","_setCornerCoords","transformMatrixKey","sep","cache","tMatrix","_calcDimensionsTransformMatrix","flipping","noSkew","_finalizeDimensions","getSvgStyles","skipShadow","getSvgFilter","getSvgColorString","getSvgSpanStyles","useWhiteSpace","term","textDecoration","getSvgTextDecoration","decoration","getSvgCommons","getSvgTransform","full","_setSVGBg","textBgRects","_getFillAttributes","_createBaseSVGMarkup","_toSVG","_createBaseClipPathSVGMarkup","objectMarkup","commonPieces","clipPathMarkup","noStyle","styleInfo","shadowInfo","withShadow","vectorEffect","absoluteClipPath","addPaintOrder","originalSet","props","tmpObj","origValue","firstPass","_isEqual","dashedPropertySet","saveProps","forTouch","isControlVisible","touchCorner","controlObject","wh","shouldStroke","setControlVisible","FX_DURATION","fxCenterObjectH","callbacks","fxCenterObjectV","fxRemove","propsToAnimate","_animate","skipCallbacks","propPair","propIsColor","valueProgress","timeProgress","coordProps","propertyNames","originValues","axis1","axis2","dimension","nearest","farthest","Line","_setWidthHeight","_getLeftToOriginX","_getTopToOriginY","makeEdgeToOriginGetter","calcLinePoints","origStrokeStyle","xMult","yMult","ATTRIBUTE_NAMES","parsedAttributes","pi","setRadius","startX","startY","endX","endY","getRadiusX","getRadiusY","isValidRadius","Triangle","widthBy2","heightBy2","piBy2","Ellipse","getRx","getRy","_initRxRy","isRounded","Polyline","_setPositionDimensions","correctLeftTop","calcDim","_calcDimensions","fromSVG","diffX","diffY","commonRender","fromElementGenerator","_class","Polygon","_toString","_renderPathCommands","subpathStartX","subpathStartY","_getOffsetTransform","digits","aY","useSetOnGroup","isAlreadyGrouped","_updateObjectsACoords","_calcBounds","_updateObjectsCoords","_updateObjectCoords","nested","_restoreObjectsState","_includeDefaultValues","objsToObject","originalDefaults","_obj","ownCache","groupMatrix","realizeTransform","parentMatrix","toActiveSelection","ungroupOnCanvas","setObjectsCoords","onlyWidthHeight","iLen","jLen","_getBounds","minXY","maxXY","enlivedClipPath","toGroup","newGroup","childrenOverride","srcFromAttribute","_lastScaleX","_lastScaleY","_filterScalingX","_filterScalingY","minimumScaleTrigger","cacheKey","imageSmoothing","filters","_initElement","_element","setElement","removeTexture","_initConfig","applyFilters","resizeFilter","applyResizeFilters","backend","filterBackend","evictCachesForKey","getCrossOrigin","getOriginalSize","_stroke","getSrc","hasCrop","strokeSvg","imageMarkup","imageRendering","getSvgSrc","origFill","filtered","setSrc","minimumScale","elementToFilter","_filteredEl","sourceWidth","sourceHeight","isNeutralState","_needsResize","elementToDraw","elWidth","elHeight","sX","sY","sW","sH","maxDestW","maxDestH","_resetWidthHeight","CSS_CANVAS","_initFilters","pAR","rWidth","rHeight","pWidth","pHeight","_object","resizeFilters","fromURL","imgOptions","_getAngleValueForStraighten","straighten","fxStraighten","straightenObject","fxStraightenObject","precision","fragmentSource","fragmentShader","createShader","FRAGMENT_SHADER","shaderSource","compileShader","getShaderParameter","COMPILE_STATUS","setupGLContext","captureGPUInfo","isSupported","getParameter","MAX_TEXTURE_SIZE","precisions","testPrecision","webGlPrecision","createWebGLCanvas","aPosition","chooseFastestCopyGLTo2DMethod","canUseImageData","canMeasurePerf","performance","canUseArrayBuffer","ArrayBuffer","canUseUint8Clamped","copyGLTo2D","copyGLTo2DPutImageData","drawImageTime","testContext","now","copyGLTo2DDrawImage","glOptions","premultipliedAlpha","depth","stencil","antialias","clearColor","cachedTexture","getCachedTexture","sourceTexture","createTexture","targetTexture","originalTexture","passes","webgl","programCache","pass","tempFbo","createFramebuffer","bindFramebuffer","FRAMEBUFFER","applyTo","resizeCanvasIfNeeded","bindTexture","TEXTURE_2D","deleteTexture","deleteFramebuffer","clearWebGLCaches","textureCache","textureImageSource","texture","texParameteri","TEXTURE_MAG_FILTER","NEAREST","TEXTURE_MIN_FILTER","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","texImage2D","uniqueId","gpuInfo","vendor","ext","getExtension","UNMASKED_RENDERER_WEBGL","UNMASKED_VENDOR_WEBGL","sourceElement","originalEl","originalImageData","BaseFilter","vertexSource","createProgram","vertexShader","VERTEX_SHADER","getShaderInfoLog","program","attachShader","linkProgram","getProgramParameter","LINK_STATUS","getProgramInfoLog","attributeLocations","getAttributeLocations","uniformLocations","getUniformLocations","uStepW","getUniformLocation","uStepH","getAttribLocation","sendAttributeData","aPositionData","attributeLocation","createBuffer","bindBuffer","ARRAY_BUFFER","enableVertexAttribArray","vertexAttribPointer","FLOAT","bufferData","STATIC_DRAW","_setupFrameBuffer","framebufferTexture2D","COLOR_ATTACHMENT0","_swapTextures","temp","main","mainParameter","applyToWebGL","applyTo2d","retrieveShader","shader","useProgram","uniform1f","sendUniformData","viewport","drawArrays","TRIANGLE_STRIP","bindAdditionalTexture","textureUnit","activeTexture","TEXTURE0","unbindAdditionalTexture","getMainParameter","setMainParameter","createHelpLayer","helpLayer","mainP","ColorMatrix","colorsOnly","uColorMatrix","uConstants","constants","uniformMatrix4fv","uniform4fv","Brightness","brightness","uBrightness","Convolute","opaque","Convolute_3_1","Convolute_3_0","Convolute_5_1","Convolute_5_0","Convolute_7_1","Convolute_7_0","Convolute_9_1","Convolute_9_0","dstOff","scx","scy","srcOff","wt","weights","halfSide","sw","sh","dst","alphaFac","uMatrix","uOpaque","uHalfSize","uSize","uniform1fv","Grayscale","lightness","luminosity","uMode","uniform1i","Invert","invert","uInvert","Noise","noise","rand","uNoise","uSeed","Pixelate","blocksize","_i","_iLen","_jLen","uBlocksize","RemoveColor","useAlpha","lowC","highC","uLow","uHigh","Brownie","Vintage","Kodachrome","Technicolor","Polaroid","Sepia","BlackWhite","BlendColor","screen","lighten","darken","exclusion","tint","buildSource","tg","alpha1","uColor","BlendImage","TEXTURE1","calculateMatrix","canvas1","blendData","blendImage","uTransformMatrix","uImage","uniformMatrix3fv","Resize","resizeType","lanczosLobes","uDelta","uTaps","uniform2fv","horizontal","taps","filterWindow","getFilterWindow","generateShader","tempScale","getTaps","lobeFunction","lanczosCreate","fragmentSourceTOP","dW","dH","lobes","xx","rcpScaleX","rcpScaleY","newData","oW","oH","sliceByTwo","hermiteFastResize","bilinearFiltering","lanczosResize","tmpCanvas","doneW","doneH","stepW","stepH","dX","dY","srcData","destImg","destData","lanczos","ratioX","ratioY","rcpRatioX","rcpRatioY","range2X","range2Y","cacheLanc","icenter","weight","fX","fY","process","xDiff","yDiff","chnl","origPix","w4","pixels","destImage","destPixels","ratioW","ratioH","ratioWHalf","ratioHHalf","img2","data2","weightsAlpha","gxR","gxG","gxB","gxA","yy","w0","Contrast","contrast","contrastF","uContrast","Saturation","saturation","adjust","uSaturation","Vibrance","vibrance","amt","uVibrance","Blur","aspectRatio","simpleBlur","canvas2","blurLayer1","blurLayer2","percent","ctx1","ctx2","newImageData","chooseRightDelta","blurScale","Gamma","gamma","rInv","gInv","bInv","rVals","gVals","bVals","uGamma","uniform3fv","Composed","subFilters","HueRotation","rotation","rad","aThird","aThirdSqtSin","OneMinusCos","additionalProps","_dimensionAffectingProps","_reNewline","_reSpacesAndTabs","_reSpaceAndTab","_reWords","underline","overline","linethrough","superscript","baseline","subscript","textBackgroundColor","pathStartOffset","pathSide","_fontSizeFraction","_fontSizeMult","charSpacing","_measuringContext","_styleProperties","__charBounds","CACHE_FONT_SIZE","MIN_TEXT_WIDTH","__skipDimension","setPathInfo","initDimensions","segmentsInfo","getMeasuringContext","_splitText","newLines","_splitTextIntoLines","textLines","_textLines","graphemeLines","_unwrappedTextLines","_unwrappedLines","_text","graphemeText","_clearCache","calcTextWidth","cursorWidth","calcTextHeight","enlargeSpaces","diffSpace","currentLineWidth","accumulatedSpace","line","charBound","spaces","isEndOfWrapping","getLineWidth","kernedWidth","lineIndex","missingNewlineOffset","_setTextStyles","_renderTextLinesBackground","_renderTextDecoration","_renderText","_renderTextStroke","_renderTextFill","charStyle","forMeasuring","textBaseline","_getFontDeclaration","_renderTextLine","_renderChars","styleHas","heightOfLine","lineLeftOffset","lastColor","charBox","currentColor","drawStart","leftOffset","_getLeftOffset","lineTopOffset","_getTopOffset","boxStart","boxWidth","_getLineLeftOffset","getValueOfPropertyAt","renderLeft","getFontCache","cacheProp","_measureChar","_char","previousChar","prevCharStyle","coupleWidth","previousWidth","fontCache","couple","stylesAreEqual","fontMultiplier","measureText","getHeightOfChar","measureLine","lineInfo","_measureLine","_getWidthOfCharSpacing","grapheme","prevGrapheme","graphemeInfo","startingPoint","totalPathLength","lineBounds","positionInPath","_getGraphemeBox","_setGraphemeOnPath","numOfSpaces","skipLeft","getCompleteStyleDeclaration","prevStyle","previousBox","__lineHeights","_renderTextCommon","lineHeights","isEmptyStyles","actualStyle","nextStyle","timeToRender","drawingLeft","isJustify","charsToRender","shortCut","isLtr","_renderChar","_hasStyleChanged","_applyPatternGradientTransformText","handleFiller","fillOffsets","strokeOffsets","_getStyleDeclaration","fullDecl","shouldFill","strokeText","setSuperscript","_setScript","setSubscript","schema","get2DCursorLocation","setSelectionStyles","thisStyle","_hasStyleChangedForSvg","lineDiff","__lineWidths","_shouldClearDimensionCache","shouldClear","_forceClearCache","_size","_dy","lastDecoration","currentDecoration","currentFill","lastFill","topOffset","styleObject","family","fontIsGeneric","genericFonts","newLine","newText","allProperties","needsDims","isAddingPath","_key","parsedAnchor","textAnchor","originalStrokeWidth","textHeightScaleFactor","scaledDiff","textHeight","offX","objectCopy","textInstance","pathInstance","p3","cleanStyle","letterCount","stylePropertyValue","stylesCount","allStyleObjectPropertiesMatch","graphemeCount","lineNum","charNum","_extendStyles","_getLineStyle","_setLineStyle","_setStyleDeclaration","selectionStart","skipWrapping","getSelectionStyles","endIndex","selectionEnd","getStyleAtPosition","lineStyle","_deleteStyleDeclaration","_deleteLineStyle","IText","editable","editingBorderColor","cursorColor","cursorDelay","cursorDuration","caching","hiddenTextareaContainer","_reSpace","_currentCursorOpacity","_selectionDirection","_abortCursorAnimation","__widthOfSpace","inCompositionMode","initBehavior","setSelectionStart","_updateAndFire","setSelectionEnd","_fireSelectionChanged","_updateTextarea","initDelayedCursor","cursorOffsetCache","renderCursorOrSelection","skipRestore","_clearTextArea","_getCursorBoundaries","renderCursor","renderSelection","_getCursorBoundariesOffsets","cursorPosition","cursorLocation","charHeight","__isMousedown","startLine","endLine","startChar","endChar","realLineHeight","lineOffset","boxEnd","drawWidth","drawHeight","extraTop","compositionColor","getCurrentCharFontSize","cp","_getCurrentCharIndex","getCurrentCharColor","parseDecoration","initAddedHandler","initRemovedHandler","initCursorSelectionHandlers","initDoubleClickSimulation","mouseMoveHandler","_initCanvasHandlers","_removeCanvasHandlers","_tick","_currentTickState","_animateCursor","targetOpacity","completeMethod","tickState","isAborted","_onTickComplete","_cursorTimeout1","_currentTickCompleteState","restart","delay","abortCursorAnimation","_cursorTimeout2","selectAll","getSelectedText","findWordBoundaryLeft","startFrom","findWordBoundaryRight","findLineBoundaryLeft","findLineBoundaryRight","searchWordBoundary","selectWord","newSelectionStart","newSelectionEnd","selectLine","enterEditing","exitEditingOnOthers","initHiddenTextarea","_saveEditingProps","_setEditingProps","_textBeforeEdit","initMouseMoveHandler","getSelectionStartFromPointer","currentStart","currentEnd","__selectionStartOnMouseDown","restartCursorIfNeeded","fromStringToGraphemeSelection","smallerTextStart","graphemeStart","smallerTextEnd","fromGraphemeToStringSelection","newSelection","updateTextareaPosition","updateFromTextArea","_calcTextareaPosition","desiredPosition","compositionStart","upperCanvas","upperCanvasWidth","upperCanvasHeight","_savedProps","_restoreEditingProps","isTextChanged","_removeExtraneousStyles","removeStyleFromTo","cursorStart","cursorEnd","lineStart","charStart","lineEnd","charEnd","shiftLineStyles","numericChar","clonedStyles","numericLine","insertNewlineStyleObject","qty","copiedStyle","currentCharStyle","newLineStyles","somethingAdded","isEndOfLine","numIndex","styleCarriedOver","insertCharStyleObject","currentLineStyles","currentLineStylesCloned","numericIndex","newStyle","insertNewStyleBlock","insertedText","cursorLoc","addedLines","linesLength","setSelectionStartEndWithShift","setSelectionInBoundaries","__lastClickTime","__lastLastClickTime","__lastPointer","__newClickTime","newPointer","isTripleClick","_stopEvent","__lastIsEditing","__lastSelected","initMousedownHandler","initMouseupHandler","initClicks","doubleClickHandler","tripleClickHandler","_mouseDownHandler","setCursorByClick","_mouseDownHandlerBefore","currentActive","mouseOffset","prevWidth","_getNewSelectionStartFromOffset","distanceBtwNextCharAndCursor","onKeyUp","onInput","copy","paste","onCompositionStart","onCompositionUpdate","onCompositionEnd","_clickHandlerInitialized","onClick","keysMap","keysMapRtl","ctrlKeysMapUp","ctrlKeysMapDown","keyMap","metaKey","stopImmediatePropagation","_copyDone","fromPaste","removedText","removeFrom","removeTo","nextText","charCount","nextCharCount","charDiff","textareaSelection","backDelete","copiedText","copiedTextStyle","compositionEnd","_getClipboardData","_getWidthBeforeCursor","widthBeforeCursor","getDownCursorOffset","isRight","selectionProp","_getSelectionForOffset","indexOnOtherLine","_getIndexOnLine","getUpCursorOffset","textBeforeCursor","charWidth","foundMatch","widthOfCharsOnLine","indexOnLine","rightEdge","offsetFromLeftEdge","moveCursorDown","_moveCursorUpOrDown","moveCursorUp","moveCursorWithShift","moveCursorWithoutShift","moveCursorLeft","_moveCursorLeftOrRight","_move","_moveLeft","_moveRight","moveCursorLeftWithoutShift","moveCursorLeftWithShift","moveCursorRight","moveCursorRightWithShift","moveCursorRightWithoutShift","changed","removeChars","insertChars","multipleSpacesRegex","_getSVGLeftTopOffsets","textAndBg","_getSVGTextAndBg","textTop","textLeft","_wrapSVGTextAndBg","lineTop","textSpans","textTopOffset","textLeftOffset","_setSVGTextLineBg","_setSVGTextLineText","_createTextCharSpan","styleDecl","shouldUseWhitespace","styleProps","fillStyles","dySpan","J","_pushTextBgRect","_getSVGLineTopOffset","lastHeight","Textbox","minWidth","dynamicMinWidth","__cachedLines","_wordJoiners","splitByGrapheme","_styleMap","_generateStyleMap","textInfo","realLineCount","realLineCharCount","isWrapping","nextOffset","shouldLimit","mapNextLine","_wrapText","desiredWidth","wrapped","_wrapLine","_measureWord","word","charOffset","_line","reservedSpace","words","infix","wordWidth","infixWidth","largestWordWidth","lineJustStarted","additionalSpace","getMinWidth","linesToKeep","scaleSkewStyleHandler","scaleStyleHandler","objectControls","mtr","textBoxControls","FUNC_ERROR_TEXT","HASH_UNDEFINED","PLACEHOLDER","INFINITY","MAX_SAFE_INTEGER","MAX_ARRAY_LENGTH","wrapFlags","argsTag","arrayTag","boolTag","dateTag","errorTag","funcTag","genTag","mapTag","numberTag","objectTag","promiseTag","regexpTag","setTag","stringTag","symbolTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","reEmptyStringLeading","reEmptyStringMiddle","reEmptyStringTrailing","reEscapedHtml","reUnescapedHtml","reHasEscapedHtml","reHasUnescapedHtml","reEscape","reEvaluate","reInterpolate","reIsDeepProp","reIsPlainProp","rePropName","reRegExpChar","reHasRegExpChar","reTrimStart","reWhitespace","reWrapComment","reWrapDetails","reSplitDetails","reAsciiWord","reForbiddenIdentifierChars","reEscapeChar","reEsTemplate","reFlags","reIsBadHex","reIsBinary","reIsHostCtor","reIsOctal","reIsUint","reLatin","reNoMatch","reUnescapedString","rsAstralRange","rsComboRange","rsComboMarksRange","rsDingbatRange","rsLowerRange","rsUpperRange","rsVarRange","rsBreakRange","rsMathOpRange","rsAstral","rsBreak","rsCombo","rsDigits","rsDingbat","rsLower","rsMisc","rsFitz","rsNonAstral","rsRegional","rsSurrPair","rsUpper","rsMiscLower","rsMiscUpper","rsOptContrLower","rsOptContrUpper","reOptMod","rsModifier","rsOptVar","rsSeq","rsEmoji","rsSymbol","reApos","reComboMark","reUnicode","reUnicodeWord","reHasUnicode","reHasUnicodeWord","contextProps","templateCounter","typedArrayTags","cloneableTags","stringEscapes","freeParseFloat","freeParseInt","freeGlobal","freeSelf","freeExports","freeModule","moduleExports","freeProcess","nodeUtil","types","binding","nodeIsArrayBuffer","isArrayBuffer","nodeIsDate","nodeIsMap","isMap","nodeIsRegExp","isRegExp","nodeIsSet","isSet","nodeIsTypedArray","isTypedArray","func","thisArg","setter","iteratee","accumulator","predicate","baseIndexOf","comparator","initAccum","asciiSize","baseProperty","collection","eachFunc","fromIndex","fromRight","strictIndexOf","baseFindIndex","baseIsNaN","baseSum","trimmedEndIndex","arrayMap","strSymbols","chrSymbols","deburrLetter","basePropertyOf","escapeHtmlChar","hasUnicode","unicodeSize","unicodeToArray","asciiToArray","unescapeHtmlChar","uid","pick","TypeError","arrayProto","objectProto","coreJsData","funcToString","idCounter","maskSrcKey","IE_PROTO","nativeObjectToString","objectCtorString","oldDash","reIsNative","Symbol","allocUnsafe","getPrototype","overArg","getPrototypeOf","objectCreate","propertyIsEnumerable","spreadableSymbol","isConcatSpreadable","symIterator","symToStringTag","toStringTag","defineProperty","getNative","ctxClearTimeout","ctxNow","ctxSetTimeout","nativeCeil","nativeFloor","nativeGetSymbols","getOwnPropertySymbols","nativeIsBuffer","isBuffer","nativeIsFinite","nativeJoin","nativeKeys","nativeMax","nativeMin","nativeNow","nativeParseInt","nativeRandom","nativeReverse","DataView","nativeCreate","metaMap","realNames","dataViewCtorString","toSource","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","symbolProto","symbolValueOf","symbolToString","isObjectLike","LazyWrapper","LodashWrapper","wrapperClone","baseCreate","chainAll","__wrapped__","__actions__","__chain__","__index__","__values__","__dir__","__filtered__","__iteratees__","__takeCount__","__views__","entry","__data__","MapCache","ListCache","inherited","isArr","isArg","isArguments","isBuff","skipIndexes","baseTimes","isIndex","baseRandom","shuffleSelf","copyArray","baseClamp","baseAssignValue","objValue","baseEach","copyObject","configurable","enumerable","writable","paths","skip","lower","upper","bitmask","customizer","stack","isDeep","isFlat","isFull","initCloneArray","getTag","isFunc","cloneBuffer","initCloneObject","getSymbolsIn","copySymbolsIn","keysIn","baseAssignIn","getSymbols","copySymbols","baseAssign","Ctor","cloneArrayBuffer","dataView","byteOffset","byteLength","cloneDataView","cloneTypedArray","regexp","cloneRegExp","symbol","cloneSymbol","initCloneByTag","Stack","stacked","subValue","baseClone","getAllKeysIn","getAllKeys","arrayEach","assignValue","wait","arrayIncludes","isCommon","valuesLength","baseUnary","We","arrayIncludesWith","cacheHas","SetCache","outer","computed","valuesIndex","lodash","templateSettings","escape","evaluate","variable","baseLodash","Hash","assocIndexOf","getMapData","pairs","LARGE_ARRAY_SIZE","createBaseEach","baseForOwn","baseEachRight","baseForOwnRight","isSymbol","isStrict","isFlattenable","N","baseFlatten","arrayPush","baseFor","createBaseFor","baseForRight","arrayFilter","isFunction","castPath","toKey","keysFunc","symbolsFunc","isOwn","unmasked","getRawTag","objectToString","arrays","othLength","othIndex","caches","seen","baseGetTag","equalFunc","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","equalArrays","convert","mapToArray","setToArray","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","isPartial","objProps","objLength","objStacked","othStacked","skipCtor","othValue","compared","objCtor","othCtor","equalObjects","baseIsEqualDeep","baseIsEqual","matchData","noCustomizer","srcValue","COMPARE_PARTIAL_FLAG","isMasked","identity","baseMatchesProperty","baseMatches","isPrototype","isArrayLike","getMatchData","matchesStrictComparable","baseIsMatch","isKey","isStrictComparable","hasIn","srcIndex","mergeFunc","safeGet","assignMergeValue","isTyped","isArrayLikeObject","as","Us","isPlainObject","Vd","toPlainObject","baseMergeDeep","baseMerge","iteratees","orders","baseGet","getIteratee","comparer","baseSortBy","baseMap","criteria","objCriteria","othCriteria","ordersLength","compareAscending","compareMultiple","baseSet","baseIndexOfWith","indexes","baseUnset","setToString","overRest","arraySample","baseSetData","kn","baseSetToString","Kr","constant","retHighest","low","high","mid","baseSortedIndexBy","valIsNaN","valIsNull","valIsSymbol","valIsUndefined","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","setLow","an","baseToString","createSet","seenIndex","updater","isDrop","baseSlice","actions","arrayReduce","baseUniq","baseDifference","assignFunc","valsLength","stringToPath","castRest","baseRest","arrayBuffer","typedArray","valIsDefined","valIsReflexive","partials","holders","isCurried","argsIndex","argsLength","holdersLength","leftIndex","leftLength","rangeLength","isUncurried","holdersIndex","rightIndex","rightLength","initializer","arrayAggregator","baseAggregator","assigner","guard","isIterateeCall","iterable","stringToArray","trailing","castSlice","deburr","thisBinding","findIndexFunc","flatRest","funcs","prereq","thru","getFuncName","funcName","isLaziable","WRAP_ARY_FLAG","plant","partialsRight","holdersRight","argPos","ary","arity","isAry","isBind","isBindKey","WRAP_CURRY_FLAG","isFlip","createCtor","getHolder","holdersCount","countHolders","composeArgs","composeArgsRight","newHolders","replaceHolders","createRecurry","createHybrid","Hi","reorder","toIteratee","baseInverter","operator","baseToNumber","arrayFunc","chars","charsLength","baseRepeat","stringSize","toFinite","baseRange","toNumber","wrapFunc","isCurry","setData","setWrapToString","toInteger","Bi","setToPairs","baseToPairs","srcBitmask","newBitmask","WRAP_BIND_FLAG","mergeData","createCurry","createPartial","createBind","customDefaultsMerge","arrLength","arrStacked","arrValue","arraySome","flatten","baseGetAllKeys","otherFunc","baseIteratee","isKeyable","baseIsNative","stubArray","hasFunc","isLength","ctorString","isMaskable","stubFalse","otherArgs","oldArray","shortOut","details","insertWrapDetails","updateWrapDetails","getWrapDetails","lastCalled","stamp","remaining","memoize","memoizeCapped","quote","subString","difference","differenceBy","differenceWith","intersection","mapped","castArrayLikeObject","baseIntersection","intersectionBy","intersectionWith","pull","pullAll","basePullAll","pullAt","baseAt","basePullAt","union","unionBy","unionWith","unzip","without","baseXor","xorBy","xorWith","zip","zipWith","unzipWith","interceptor","wrapperAt","countBy","createAggregator","createFind","findLast","findLastIndex","arrayEachRight","invokeMap","baseInvoke","keyBy","partition","sortBy","baseOrderBy","createWrap","bindKey","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","timerExpired","invokeFunc","timeSinceLastCall","shouldInvoke","trailingEdge","timeWaiting","remainingWait","isInvoking","leadingEdge","debounced","flush","baseDelay","memoized","Cache","overArgs","transforms","funcsLength","partial","partialRight","rearg","createRelationalOperation","baseGt","baseIsArguments","baseLt","isString","done","iteratorToArray","baseTrim","isBinary","createAssigner","assignIn","assignInWith","assignWith","at","propsIndex","propsLength","defaultsDeep","mergeWith","hasPath","baseHasIn","createInverter","invertBy","arrayLikeKeys","baseKeys","nativeKeysIn","isProto","baseKeysIn","omit","CLONE_DEEP_FLAG","customOmitClone","basePickBy","basePick","toPairs","createToPairs","toPairsIn","baseValues","camelCase","createCompounder","upperFirst","kebabCase","lowerCase","lowerFirst","createCaseFirst","snakeCase","startCase","upperCase","hasUnicodeWord","unicodeWords","asciiWords","bindAll","methodNames","flow","createFlow","flowRight","methodOf","baseFunctions","chain","over","createOver","overEvery","arrayEvery","overSome","basePropertyDeep","rangeRight","createMathOperation","augend","addend","createRound","dividend","multiplicand","minuend","subtrahend","castArray","compact","cond","conforms","baseConformsTo","baseConforms","curry","curryRight","drop","dropRight","dropRightWhile","baseWhile","dropWhile","toLength","baseFill","baseFilter","flatMap","flatMapDeep","flatMapDepth","flattenDeep","flattenDepth","fromPairs","functions","functionsIn","mapKeys","mapValues","matchesProperty","mixin","negate","nthArg","baseNth","omitBy","pickBy","orderBy","propertyOf","pullAllBy","pullAllWith","rest","sampleSize","arraySampleSize","baseSampleSize","setWith","shuffle","arrayShuffle","baseShuffle","sortedUniq","baseSortedUniq","sortedUniqBy","separator","limit","spread","tail","takeRight","takeRightWhile","takeWhile","tap","throttle","toPath","isArrLike","unary","uniq","uniqBy","uniqWith","unset","baseUpdate","castFunction","updateWith","valuesIn","wrap","zipObject","baseZipObject","zipObjectDeep","entriesIn","extendWith","clamp","cloneDeep","cloneDeepWith","cloneWith","conformsTo","defaultTo","endsWith","escapeRegExp","baseEvery","findKey","baseFindKey","findLastKey","forEachRight","forIn","forInRight","forOwn","forOwnRight","baseHas","inRange","te","baseInRange","isBoolean","isElement","isEqual","isEqualWith","isInteger","isMatch","isMatchWith","isNative","isNil","isNull","isSafeInteger","isUndefined","isWeakMap","isWeakSet","lastIndexOf","strictLastIndexOf","baseExtremum","maxBy","mean","baseMean","meanBy","minBy","stubObject","stubString","stubTrue","nth","noConflict","pad","strLength","createPadding","padEnd","radix","floating","baseReduce","reduceRight","arrayReduceRight","runInContext","sample","baseSample","baseSome","sortedIndex","baseSortedIndex","sortedIndexBy","sortedIndexOf","sortedLastIndex","sortedLastIndexBy","sortedLastIndexOf","startsWith","sum","sumBy","customDefaultsAssignIn","isEscaping","isEvaluating","importsKeys","importsValues","reDelimiters","sourceURL","escapeValue","interpolateValue","esTemplateValue","evaluateValue","escapeStringChar","times","toLower","toSafeInteger","toUpper","charsStartIndex","charsEndIndex","trimEnd","trimStart","truncate","omission","newEnd","each","eachRight","VERSION","isFilter","takeName","dropName","checkIteratee","isTaker","lodashFunc","retUnwrapped","isLazy","useLazy","isHybrid","isUnwrapped","onlyLazy","chainName","dir","view","getView","iterLength","takeCount","baseWrapperValue","iterIndex","commit","define","defineLocale","months","monthsShort","weekdays","weekdaysShort","weekdaysMin","meridiemParse","isPM","meridiem","isLower","longDateFormat","LT","LTS","LL","LLL","LLLL","calendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","relativeTime","future","past","ss","mm","hh","dd","MM","dayOfMonthOrdinalParse","ordinal","week","dow","doy","pluralForm","plurals","pluralize","withoutSuffix","isFuture","weekdaysParseExact","minute","postformat","symbolMap","preparse","numberMap","suffixes","forms","plural","isFormat","relativeTimeWithPlural","period","ww","lastDigit","last2Digits","meridiemHour","monthsShortRegex","monthsParseExact","mutationTable","softMutation","mutation","lastNumber","monthsParse","monthsRegex","minWeekdaysParse","weekdaysParse","fullWeekdaysParse","shortWeekdaysParse","monthsStrictRegex","monthsShortStrictRegex","longMonthsParse","shortMonthsParse","relativeTimeWithMutation","ll","lll","llll","processRelativeTime","monthsNominativeEl","monthsGenitiveEl","momentToFormat","_monthsGenitiveEl","month","_monthsNominativeEl","calendarEl","mom","_calendarEl","monthsShortDot","invalidDate","numbersPast","numbersFuture","verbalNumber","monthsShortWithDots","monthsShortWithoutDots","weekEndings","eras","since","narrow","abbr","until","eraYearOrdinalRegex","eraYearOrdinalParse","$0","$1","$2","isUpper","ezafeNumSuffix","eifelerRegelAppliesToNumber","units","translateSingular","special","relativeTimeWithSingular","translator","correctGrammaticalCase","wordKey","relativeTimeMr","monthsNominative","monthsSubjective","numbersNouns","numberNoun","hundred","ten","one","numberAsNoun","hm","nominative","accusative","genitive","processHoursFunction","hookCallback","getOwnPropertyNames","hasOwnProp","arrLen","strict","createLocalOrUTC","_pf","unusedTokens","unusedInput","charsLeftOver","nullInput","invalidEra","invalidMonth","invalidFormat","userInvalidated","iso","parsedDateParts","era","rfc2822","weekdayMismatch","flags","parsedParts","isNowValid","getParsingFlags","invalidWeekday","_strict","bigHour","isFrozen","_isValid","createUTC","NaN","fun","momentProperties","hooks","updateInProgress","momentPropertiesLen","_isAMomentObject","_tzm","_isUTC","_locale","copyConfig","updateOffset","Moment","suppressDeprecationWarnings","firstTime","deprecationHandler","argLen","deprecations","parentConfig","childConfig","de","targetLength","forceSign","absNumber","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","padded","zeroFill","localeData","expandFormat","removeFormattingTokens","makeFormatFunction","replaceLongDateFormatTokens","weekday","isoweekdays","isoweekday","DDD","dayofyears","dayofyear","ms","milliseconds","millisecond","quarters","quarter","gg","weekyears","weekyear","GG","isoweekyears","isoweekyear","weeks","W","isoweeks","isoweek","years","year","inputObject","normalizedProp","normalizedInput","normalizeUnits","priorities","isoWeekday","dayOfYear","weekYear","isoWeekYear","isoWeek","regexes","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchWord","match1to2NoLeadingZero","match1to2HasZero","strictRegex","regexEscape","p4","unescapeFormat","argumentForCoercion","coercedNumber","absFloor","tokens","tokenLen","toInt","addParseToken","_w","isLeapYear","addFormatToken","addRegexToken","parseTwoDigitYear","getSetYear","makeGetSet","keepTime","set$1","isUTC","getUTCMilliseconds","getMilliseconds","getUTCSeconds","getSeconds","getUTCMinutes","getUTCHours","getUTCDate","getUTCDay","getUTCMonth","getMonth","getUTCFullYear","setUTCMilliseconds","setMilliseconds","setUTCSeconds","setSeconds","setUTCMinutes","setUTCHours","setUTCDate","setUTCFullYear","setFullYear","modMonth","defaultLocaleMonths","defaultLocaleMonthsShort","MONTHS_IN_FORMAT","defaultMonthsShortRegex","defaultMonthsRegex","monthName","ii","llc","_monthsParse","_longMonthsParse","_shortMonthsParse","daysInMonth","setUTCMonth","setMonth","shortP","longP","shortPieces","longPieces","mixedPieces","cmpLenRev","_monthsRegex","_monthsShortRegex","_monthsStrictRegex","_monthsShortStrictRegex","UTC","fwd","createUTCDate","resYear","resDayOfYear","firstWeekOffset","daysInYear","Sa","resWeek","weekOffset","weeksInYear","weekOffsetNext","addWeekParseToken","ws","weekdaysMinRegex","weekdaysShortRegex","weekdaysRegex","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","weekdayName","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","minp","shortp","longp","minPieces","_weekdaysRegex","_weekdaysShortRegex","_weekdaysMinRegex","_weekdaysStrictRegex","_weekdaysShortStrictRegex","_weekdaysMinStrictRegex","lowercase","_meridiemParse","hFormat","matchMeridiem","kInput","_isPm","_meridiem","pos1","pos2","getSetHour","globalLocale","baseConfig","locales","localeFamilies","arr1","arr2","minl","oldLocale","isLocaleNameSane","_abbr","aliasedRequire","getSetGlobalLocale","getLocale","deprecateSimple","_config","parentLocale","loadLocale","Locale","mergeConfigs","names","normalizeLocale","commonPrefix","chooseLocale","_overflowDayOfYear","_overflowWeeks","_overflowWeekday","extendedIsoRegex","basicIsoRegex","tzRegex","isoDates","isoTimes","aspNetJsonRegex","obsOffsets","UT","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","allowTime","timeFormat","tzFormat","isoDatesLen","isoTimesLen","configFromStringAndFormat","yearStr","parsedArray","preprocessRFC2822","monthStr","dayStr","hourStr","minuteStr","secondStr","untruncateYear","extractFromRFC2822Strings","weekdayStr","parsedInput","checkWeekday","obsOffset","militaryOffset","numOffset","calculateOffset","expectedWeekday","yearToUse","nowValue","_useUTC","currentDateArray","weekdayOverflow","curWeek","weekOfYear","createLocal","_week","dayOfYearFromWeeks","_dayOfYear","dayOfYearFromWeekInfo","_nextDay","createDate","ISO_8601","RFC_2822","skipped","stringLength","totalParsedInputLength","getParseRegexForToken","addTimeToArrayFromToken","isPm","meridiemFixWrap","erasConvertYear","configFromArray","checkOverflow","configFromRFC2822","configFromISO","createInvalid","isMoment","tempConfig","bestMoment","scoreToBeat","currentScore","validFormatFound","bestFormatIsValid","configfLen","score","configFromStringAndArray","createFromInputFallback","configFromString","normalizeObjectUnits","configFromObject","configFromInput","isObjectEmpty","prepareConfig","createFromConfig","deprecate","prototypeMin","prototypeMax","moments","ordering","unitHasDecimal","orderLen","isDurationValid","_milliseconds","_days","_months","_data","_bubble","utcOffset","offsetFromString","chunkOffset","model","setTime","local","aspNetRegex","isoRegex","ret","diffRes","isDuration","absRound","parseIso","He","base","cloneWithOffset","isBefore","positiveMomentsDifference","momentsDifference","inp","isAfter","tmp","addSubtract","createDuration","isAdding","createAdder","arrayTest","dataTypeTest","isNumberOrStringArray","objectTest","propertyTest","propertyLen","isMomentInputObject","monthDiff","wholeMonthDiff","anchor","newLocaleData","defaultFormat","defaultFormatUtc","MS_PER_SECOND","MS_PER_MINUTE","MS_PER_HOUR","MS_PER_400_YEARS","erasAbbrRegex","erasName","erasAbbr","erasNarrow","abbrPieces","namePieces","narrowPieces","_erasRegex","_erasNameRegex","_erasAbbrRegex","_erasNarrowRegex","getter","weeksTarget","setWeekAll","dayOfYearData","matchEraAbbr","erasNameRegex","erasNarrowRegex","erasParse","_eraYearOrdinalRegex","addWeekYearFormatToken","_dayOfMonthOrdinalParse","_ordinalParse","_dayOfMonthOrdinalParseLenient","getSetDayOfMonth","getSetMinute","getSetMillisecond","getSetSecond","parseMs","formats","Bt","isCalendarSpec","sod","calendarFormat","asFloat","zoneDelta","endOf","startOfDate","utcStartOfDate","localStartOfDate","mod$1","inputString","isUtc","formatMoment","humanize","fromNow","toNow","invalidAt","localInput","inclusivity","localFrom","localTo","inputMs","parsingFlags","prioritized","unitsObj","priority","getPrioritizedUnits","prioritizedLen","keepOffset","inspect","zone","isLocal","for","unix","creationData","eraName","eraNarrow","eraAbbr","eraYear","getSetWeekYearHelper","getSetMonth","isoWeeks","weekInfo","weeksInWeekYear","isoWeeksInYear","isoWeeksInISOWeekYear","parseWeekday","parseIsoWeekday","keepLocalTime","keepMinutes","localAdjust","getDateOffset","_changeInProgress","parseZone","tZone","hasAlignedHourOffset","isDST","isUtcOffset","zoneAbbr","zoneName","isDSTShifted","_isDSTShifted","array1","array2","dontConvert","lengthDiff","diffs","compareArrays","proto$1","get$1","out","localeSorted","_calendar","_longDateFormat","formatUpper","tok","_invalidDate","_ordinal","preParsePostFormat","_relativeTime","pastFuture","_eras","computeErasParse","_monthsShort","_monthsParseExact","handleStrictParse","computeMonthsParse","firstDayOfYear","firstDayOfWeek","_weekdays","shiftWeekdays","_weekdaysMin","_weekdaysShort","_weekdaysParseExact","handleStrictParse$1","_fullWeekdaysParse","computeWeekdaysParse","langData","mathAbs","asMilliseconds","makeAs","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asQuarters","asYears","valueOf$1","makeGetter","thresholds","abs$1","totalSign","ymSign","daysSign","hmsSign","proto$2","addSubtract$1","daysToMonths","monthsToDays","monthsFromDays","absCeil","argWithSuffix","argThresholds","withSuffix","posNegDuration","substituteTimeAgo","relativeTime$1","toISOString$1","toIsoString","setHookCallback","listMonthsImpl","listWeekdaysImpl","updateLocale","tmpLocale","relativeTimeRounding","roundingFunction","relativeTimeThreshold","myMoment","HTML5_FMT","DATETIME_LOCAL","DATETIME_LOCAL_SECONDS","DATETIME_LOCAL_MS","DATE","TIME","TIME_SECONDS","TIME_MS","WEEK","MONTH","LuxonError","reason","toMessage","DATE_SHORT","DATE_MED","DATE_MED_WITH_WEEKDAY","DATE_FULL","DATE_HUGE","TIME_SIMPLE","TIME_WITH_SECONDS","TIME_WITH_SHORT_OFFSET","timeZoneName","TIME_WITH_LONG_OFFSET","TIME_24_SIMPLE","hourCycle","TIME_24_WITH_SECONDS","TIME_24_WITH_SHORT_OFFSET","TIME_24_WITH_LONG_OFFSET","DATETIME_SHORT","DATETIME_SHORT_WITH_SECONDS","DATETIME_MED","DATETIME_MED_WITH_SECONDS","DATETIME_MED_WITH_WEEKDAY","DATETIME_FULL","DATETIME_FULL_WITH_SECONDS","DATETIME_HUGE","DATETIME_HUGE_WITH_SECONDS","ZoneIsAbstractError","ianaName","isUniversal","offsetName","formatOffset","otherZone","singleton","Zone","SystemZone","Intl","DateTimeFormat","resolvedOptions","timeZone","parseZoneInfo","dtfCache","typeToPos","ianaZoneCache","IANAZone","isValidZone","dtf","hour12","makeDTF","adOrBc","formatToParts","formatted","filled","partsOffset","fMonth","fDay","fYear","fadOrBc","fHour","fMinute","fSecond","hackyOffset","asTS","objToLocalTS","intlLFCache","intlDTCache","locString","intlNumCache","intlRelCache","sysLocaleCache","weekInfoCache","englishFn","intlFn","listingMode","intl","forceSimple","padTo","otherOpts","intlOpts","Co","useGrouping","minimumIntegerDigits","inf","NumberFormat","getCachedINF","fixed","roundTo","originalZone","gmtOffset","offsetZ","setZone","plus","getCachedDTF","toJSDate","part","Rd","isEnglish","hasRelative","rtf","cacheKeyOpts","RelativeTimeFormat","getCachedRTF","lastable","isDay","isInPast","is","fmtValue","singular","lilUnits","fmtUnit","English","fallbackWeekSettings","minimalDays","weekend","numberingSystem","outputCalendar","weekSettings","defaultToEN","specifiedLocale","Settings","localeR","systemLocale","numberingSystemR","outputCalendarR","weekSettingsR","validateWeekSettings","numbering","parsedLocale","parsedNumberingSystem","parsedOutputCalendar","localeStr","xIndex","uIndex","selectedStr","smaller","parseLocaleString","intlConfigString","weekdaysCache","monthsCache","meridiemCache","eraCache","fastNumbersCached","fastNumbers","supportsFastNumbers","alts","redefaultToEN","redefaultToSystem","listStuff","formatStr","mapMonths","extract","mapWeekdays","meridiems","matching","dtFormatter","numberFormatter","PolyNumberFormatter","PolyDateFormatter","relFormatter","PolyRelFormatter","listFormatter","ListFormat","getCachedLF","getWeekSettings","hasLocaleWeekInfo","getWeekInfo","getCachedWeekInfo","getStartOfWeek","getMinDaysInFirstWeek","getWeekendDays","utcInstance","FixedOffsetZone","signedOffset","defaultZone","lowered","InvalidZone","numberingSystems","arab","arabext","bali","beng","deva","fullwide","gujr","hanidec","khmr","knda","laoo","limb","mlym","mong","mymr","orya","tamldec","telu","thai","tibt","latn","numberingSystemsUTF16","hanidecChars","digitRegexCache","append","ns","throwOnInvalid","defaultNumberingSystem","defaultOutputCalendar","twoDigitCutoffYear","defaultWeekSettings","normalizeZone","cutoffYear","resetDigitRegexCache","explanation","nonLeapLadder","leapLadder","Invalid","js","month0","startOfWeek","gregObj","minDaysInFirstWeek","computeOrdinal","isoWeekdayToLocal","weekNumber","hn","timeObject","weekData","weekdayOfJan4","yearInDays","uncomputeOrdinal","gregData","ordinalData","localWeekday","localWeekNumber","localWeekYear","ConflictingSpecificationError","validYear","validMonth","integerBetween","validDay","unitOutOfRange","validHour","validMinute","validSecond","validMillisecond","compare","best","InvalidArgumentError","thing","fraction","towardZero","factor","R0","trunc","floorMod","offsetFormat","modified","offHourStr","offMinuteStr","offHour","offMin","numericValue","normalizer","normalized","asNumber","RangeError","monthsLong","monthsNarrow","weekdaysLong","weekdaysNarrow","erasLong","erasShort","splits","tokenToString","literal","macroTokenToFormatOpts","Formats","DD","DDDD","tt","ttt","tttt","TT","TTT","TTTT","fff","ffff","F","FF","FFF","FFFF","Formatter","fmt","currentFull","bracketed","formatOpts","systemLoc","formatWithSystemDefault","formatDateTime","formatDateTimeParts","formatInterval","df","formatRange","formatDateTimeFromString","knownEnglish","useDateTimeFormatter","isOffsetFixed","allowZ","maybeMacro","stringifyTokens","parseFormat","formatDurationFromString","dur","tokenToField","realTokens","found","lildur","shiftTo","ianaRegex","extractors","mergedVals","mergedZone","extractor","parseInteger","offsetRegex","isoTimeBaseRegex","isoTimeRegex","isoTimeExtensionRegex","extractISOWeekData","simpleParse","extractISOOrdinalData","sqlTimeRegex","sqlTimeExtensionRegex","fallback","int","parseMillis","fullOffset","isoTimeOnly","isoDuration","weekStr","millisecondsStr","hasNegativePrefix","negativeSeconds","maybeNegate","force","parseFloating","milOffset","fromStrings","rfc1123","rfc850","ascii","isoYmdWithTimeExtensionRegex","combineRegexes","isoWeekWithTimeExtensionRegex","isoOrdinalWithTimeExtensionRegex","isoTimeCombinedRegex","extractISOYmdTimeAndOffset","combineExtractors","extractISOTime","extractISOOffset","extractIANAZone","extractISOWeekTimeAndOffset","extractISOOrdinalDateAndTime","extractISOTimeAndOffset","extractISOTimeOnly","sqlYmdWithTimeExtensionRegex","sqlTimeCombinedRegex","extractISOTimeOffsetAndIANAZone","INVALID","lowOrderMatrix","casualMatrix","daysInYearAccurate","daysInMonthAccurate","accurateMatrix","orderedUnits","reverseUnits","conf","conversionAccuracy","vals","durationToMillis","conv","rollUp","accurate","isLuxonDuration","normalizeObject","normalizeUnit","durationLike","fromMillis","extractISODuration","parseISODuration","parseISOTimeOnly","InvalidDurationError","InvalidUnitError","toFormat","fmtOpts","toHuman","unitDisplay","listStyle","toISO","toISOTime","millis","toMillis","suppressMilliseconds","suppressSeconds","includePrefix","includeOffset","invalidReason","fromDurationLike","minus","mapUnits","reconfigure","normalizeValues","rescale","newVals","removeZeroes","shiftToAll","built","accumulated","lastUnit","own","ak","negated","invalidExplanation","v1","v2","isLuxonInterval","InvalidIntervalError","Interval","builtStart","friendlyDateTime","builtEnd","validateError","validateStartEnd","fromDateTimes","startIsValid","endIsValid","toDuration","useLocaleWeeks","hasSame","splitAt","dateTimes","sorted","splitBy","divideEqually","numberOfParts","overlaps","abutsStart","abutsEnd","engulfs","final","sofar","currentCount","ends","ne","toLocaleString","toISODate","mapEndpoints","mapFn","locObj","relative","localeWeek","earlier","later","utcDayStart","toUTC","deser","parseDigits","spaceOrNBSP","fromCharCode","spaceOrNBSPRegExp","strings","fixListRegex","stripInsensitivities","groups","partTypeStyleToTokenVal","short","long","dayperiod","dayPeriod","hour24","dummyDateTimeCache","formatOptsToTokens","maybeExpandMacroToken","expandMacroTokens","digitRegex","two","three","four","six","oneOrTwo","oneToThree","oneToSix","oneToNine","twoToFour","fourToSix","escapeToken","unitate","oneOf","intUnit","simple","unitForToken","disqualifyingUnit","regexString","handlers","buildRegex","explainFromTokens","rawMatches","matchIndex","specificOffset","toField","dateTimeFromMatches","TokenParser","getDummyDateTime","resolvedOpts","isSpace","actualType","tokenForPart","MAX_DATE","gregorianToWeek","localWeekData","inst","old","localTS","tz","utcGuess","o3","fixOffset","oPre","millisToAdd","parsedZone","interpretationZone","extended","longFormat","extendedZone","defaultUnitValues","defaultWeekUnitValues","defaultOrdinalUnitValues","orderedWeekUnits","orderedOrdinalUnits","weeknumber","weeksnumber","weeknumbers","unsupportedZone","hasInvalidGregorianData","hasInvalidTimeData","offsetProvis","zoneOffsetGuessCache","zoneOffsetTs","guessOffsetForZone","objToTS","calendary","formatter","differ","argList","ot","tsToObj","_zone","isLuxonDateTime","lastOpts","quickDT","zoneToUse","normalizeUnitWithLocalWeeks","usesLocalWeekValues","tsNow","Dn","containsOrdinal","containsGregorYear","containsGregorMD","containsGregor","definiteWeekDef","useWeekData","defaultValues","objNow","gregorianToOrdinal","foundFirst","$","higherOrderInvalid","validWeek","validWeekday","hasInvalidWeekData","validOrdinal","hasInvalidOrdinalData","gregorian","weekToGregorian","ordinalToGregorian","tsFinal","offsetFinal","parseISODate","parseDataToDateTime","extractRFC2822","parseRFC2822Date","extractRFC1123Or850","extractASCII","parseHTTPDate","localeToUse","parseFromTokens","fromFormat","parseSQL","InvalidDateTimeError","localeOpts","tokenList","expanded","possiblyCachedWeekData","isWeekend","possiblyCachedLocalWeekData","monthShort","Info","monthLong","weekdayShort","weekdayLong","offsetNameShort","offsetNameLong","isInDST","getPossibleOffsets","dayMs","minuteMs","oEarlier","oLater","ts1","ts2","isInLeapYear","weeksInLocalWeekYear","resolvedLocaleOptions","toLocal","keepCalendarTime","newTS","offsetGuess","asObj","setLocale","settingWeekStuff","mixed","adjustTime","normalizedUnit","toLocaleParts","toISOWeekDate","toTechFormat","toRFC2822","toHTTP","toSQLDate","toSQLTime","includeZone","includeOffsetSpace","toSQL","toSeconds","toUnixInteger","toBSON","includeConfig","otherDateTime","durOpts","maybeArray","otherIsLater","diffed","highWater","lowestOrder","differs","dayDiff","Xi","highOrderDiffs","remainingMillis","lowerOrderUnits","diffNow","adjustedToZone","toRelative","diffRelative","toRelativeCalendar","bestBy","fromFormatExplain","formatParser","dateTimeish","fromJSDate","_r3","_r4","updateTime","_r9","onKeydown","animationDone","_r12","onHourChange","onHourSelected","_r15","_r18","onMinuteChange","tmp_1_0","ctx_r0","_r6","backdropClick","changePeriod","TimeUnit","HOUR","MINUTE","TimePeriod","AM","PM","TimeFormat","TWELVE","TWELVE_SHORT","TWENTY_FOUR","TWENTY_FOUR_SHORT","compareWith","TimeAdapter","getLocaleOptionsByTime","timeMask","isPeriodExist","parsedTime","parseTime","DEFAULT_LOCALE","DEFAULT_NUMBERING_SYSTEM","DEFAULT_FORMAT","localOpts","granularity","minutesGap","convertedTime","between","currentHour","localeConfig","defaultConfig","DEFAULT_HOUR","DEFAULT_MINUTE","NgxMaterialTimepickerService","hourSubject","minuteSubject","periodSubject","selectedHour","selectedMinute","selectedPeriod","setDefaultTimeIfAvailable","isTimeAvailable","setDefaultTime","getFullTime","formatTime","defaultTime","formatHourByPeriod","resetTime","TIME_LOCALE","NUMBERING_SYSTEM","NgxMaterialTimepickerEventService","backdropClickSubject","keydownEventSubject","bufferSize","refCount","keydownEvent","dispatchEvent","AppendToInputDirective","inputCords","inputElement","_inputCords","isElementFit","_direction","changePosition","defineElementYByDirection","inputTop","inputBottom","ɵdir","NgxMaterialTimepickerContentComponent","angleStep","formatHour","gap","minutesCount","TimeLocalizerPipe","timeUnit","isKeyboardEnabled","timeMeasure","TimeParserPipe","AutofocusDirective","activeElement","isFocusActive","preventScroll","NgxMaterialTimepickerDialControlComponent","timeParserPipe","timeLocalizerPipe","timeUnitChanged","timeChanged","focused","unfocused","selectedTime","timeList","isEditable","timeControl","formatTimeForUI","updateInputValue","nextTime","isTimeUnavailable","isTimeDisabledToChange","saveTimeAndChangeTimeUnit","previousTime","isDigit","changeTimeByArrow","ARROW_UP","ARROW_DOWN","editableTimeTmpl","_c1","i4","NgxMaterialTimepickerPeriodComponent","timePeriod","isPeriodAvailable","periodChanged","isSwitchPeriodAvailable","getDisabledTimeByPeriod","activeTimeUnit","TimepickerTimeUtils","disableHours","minTime","maxTime","disableMinutes","sequence","NgxMaterialTimepickerDialComponent","hourChanged","minuteChanged","changeTimeUnit","changeHour","changeMinute","showHint","isHintVisible","hideHint","NgxMaterialTimepickerHoursFace","hourChange","hourSelected","hoursList","onTimeSelected","ActiveHourPipe","isClockFaceDisabled","ActiveMinutePipe","currentMinute","MinutesFormatterPipe","CLOCK_HAND_STYLES","NgxMaterialTimepickerFaceComponent","innerClockFaceSize","timeChange","timeSelected","setClockHandPosition","addTouchEvents","faceTimeChanges","faceTime","selectedTimeChanges","selectAvailableTime","trackByTime","onMousedown","isStarted","selectTime","MouseEvent","clockFaceCords","clockFace","arctangent","atan","circleAngle","currentAngle","countAngleByCords","isInnerClockChosen","isInnerClockFace","roundAngle","onMouseup","removeTouchEvents","touchStartHandler","touchEndHandler","decreaseClockHand","increaseClockHand","clockHand","availableTime","_c5","_c6","NgxMaterialTimepicker24HoursFaceComponent","ngAfterContentInit","NgxMaterialTimepicker12HoursFaceComponent","NgxMaterialTimepickerMinutesFaceComponent","minutesList","minuteChange","NgxMaterialTimepickerButtonComponent","OverlayDirective","eventService","preventClick","NgxMaterialTimepickerThemeDirective","theme","setTheme","camelCaseToDash","myStr","AnimationState","ENTER","LEAVE","NgxMaterialTimepickerContainerComponent","timepickerService","_defaultTime","animationState","defineTime","timepickerBaseRef","timeUpdated","onTimeChange","hoursOnly","timeSet","phaseName","toState","fromDateTimeToString","toLocaleTimeString","tmp_8_0","tmp_9_0","DomService","cfr","appRef","appendTimepickerToBody","timepicker","destroyTimepicker","detachView","NgxMaterialTimepickerComponent","domService","isEsc","opened","closed","ngxMaterialTimepickerTheme","_ngxMaterialTimepickerTheme","_format","timepickerInput","_minutesGap","registerInput","cancelBtnTmpl","confirmBtnTmpl","editableHintTmpl","enableKeyboardInput","preventOverlayClick","appendToInput","timepickerClass","subscribeToEvents","unsubscribeFromEvents","NgxMaterialTimepickerToggleIconDirective","NgxMaterialTimepickerToggleComponent","_disabled","dirIndex","_c11","NgxTimepickerTimeControlComponent","timeParser","isSelectedTimeDisabled","setAvailableTime","changeTime","char","concatTime","changeTimeIfValid","increase","decrease","preventTyping","getAvailableTime","getNextAvailableTime","getPrevAvailableTime","onFocus","isFocused","timeString","timeCollection","maxValue","NgxTimepickerPeriodSelectorComponent","periodSelected","localizedPeriod","isOpened","NgxTimepickerFieldComponent","minHour","maxHour","buttonAlign","unsubscribe$","isFirstTimeChange","isDynamicallyChanged","previousFormat","timepickerTime","_min","_max","isDefaultTime","initTime","isTimeRangeSet","hour$","clockTime","changeDefaultTimeValue","updateAvailableMinutes","minute$","isChangePeriodDisabled","isPeriodDisabled","updateAvailableTime","registerOnTouched","registerOnChange","setDisabledState","onTimeSet","emitLocalTimeChange","localTime","clockFaceTime","updateAvailableHours","formattedTime","NG_VALUE_ACCESSOR","useExisting","tmp_2_0","tmp_10_0","lift","MapToOperator","subscriber","MapToSubscriber","Subscriber","_next","elMatches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","child","cls","scrollingClassTimeout","isAlive","scrollingThreshold","EventElement","prototypeAccessors","unbind","this$1","unbindAll","defineProperties","EventManager","eventElements","CustomEvent","createEvent","initCustomEvent","useScrollingClass","forceFireReachEvent","fields","ref","contentHeight","containerHeight","up","down","reach","ke","addScrollingClass","removeScrollingClass","setScrollingClassInstantly","processScrollDiff$1","eventElement","ee","onceHandler","env","isWebKit","supportsTouch","DocumentTouch","supportsIePointer","msMaxTouchPoints","isChrome","roundedScrollTop","containerWidth","contentWidth","scrollHeight","scrollbarXRail","queryChildren","scrollbarYRail","suppressScrollX","scrollXMarginOffset","scrollbarXActive","railXWidth","railXMarginWidth","railXRatio","scrollbarXWidth","getThumbSize","scrollbarXLeft","negativeScrollAdjustment","suppressScrollY","scrollYMarginOffset","scrollbarYActive","railYHeight","railYMarginHeight","railYRatio","scrollbarYHeight","scrollbarYTop","xRailOffset","isRtl","isScrollbarXUsingBottom","scrollbarXBottom","scrollbarXTop","yRailOffset","isScrollbarYUsingRight","scrollbarYRight","scrollbarYOuterWidth","scrollbarYLeft","scrollbarX","railBorderXWidth","scrollbarY","railBorderYWidth","updateCss","thumbSize","maxScrollbarLength","activeSlider","containerDimension","contentDimension","pageAxis","railDimension","scrollbarAxis","scrollbarDimension","scrollAxis","scrollbarRail","startingScrollPosition","startingMousePagePosition","scrollBy","updateGeometry","moveHandler","endHandler","me","cancelable","bindMoves","positionTop","pageY","pageYOffset","positionLeft","pageX","pageXOffset","bindMouseScrollHandler","isDefaultPrevented","defaultPrevented","contentDocument","shadowRoot","deltaX","Tn","shouldPreventDefault","wheel","wheelDeltaX","wheelDeltaY","deltaMode","wheelDelta","getDeltaFromEvent","maxScrollTop","maxScrollLeft","shouldBeConsumedByChild","shouldPrevent","useBothWheelAxes","xe","wheelSpeed","isTop","isBottom","isLeft","onwheel","mousewheelHandler","onmousewheel","touch","startOffset","speed","easingLoop","touchStart","touchMove","touchEnd","PointerEvent","MSPointerEvent","differenceX","differenceY","targetTouches","buttons","MSPOINTER_TYPE_MOUSE","shouldHandle","getTouch","currentOffset","applyTouchMove","timeGap","magnitudeX","magnitudeY","scrollY","swipeEasing","isInitialized","PerfectScrollbar","userSettings","originalScrollLeft","isNegativeScroll","railXStyle","borderRightWidth","railYStyle","paddingRight","outerWidth","borderBottomWidth","handlerName","lastScrollTop","lastScrollLeft","onScroll","processScrollDiff","removePsClasses","MapShim","__entries__","class_1","getIndex","global$1","requestAnimationFrame$1","transitionKeys","mutationObserverSupported","MutationObserver","ResizeObserverController","connected_","mutationEventsAdded_","mutationsObserver_","observers_","onTransitionEnd_","refresh","leadingCall","trailingCall","proxy","resolvePending","timeStamp","timeoutCallback","addObserver","connect_","removeObserver","observers","disconnect_","updateObservers_","activeObservers","gatherActive","hasActive","broadcastActive","observe","childList","characterData","subtree","disconnect","getInstance","instance_","defineConfigurable","getWindowOf","emptyRect","createRectInit","toFloat","isSVGGraphicsElement","SVGGraphicsElement","SVGElement","getBBox","getSVGContentRect","paddings","positions_1","getPaddings","horizPad","vertPad","boxSizing","isDocumentElement","getHTMLElementContentRect","ResizeObservation","broadcastWidth","broadcastHeight","contentRect_","isActive","getContentRect","broadcastRect","ResizeObserverEntry","rectInit","contentRect","Constr","DOMRectReadOnly","createReadOnlyRect","ResizeObserverSPI","controller","callbackCtx","activeObservations_","observations_","callback_","controller_","callbackCtx_","observations","unobserve","clearActive","observation","ResizeObserver","states","indicatorY","interaction","indicatorX","Geometry","Position","PerfectScrollbarEvents","PerfectScrollbarConfig","PerfectScrollbarDirective","ro","timeout","animation","configDiff","psScrollY","psScrollX","psScrollUp","psScrollDown","psScrollLeft","psScrollRight","psYReachEnd","psYReachStart","psXReachEnd","psXReachStart","config_1","auditTime","geometry","scrollable","scrollTo","animateScrolling","scrollToX","scrollToY","scrollToTop","scrollToLeft","scrollToRight","scrollToBottom","scrollToElement","qs","elementPos","scrollerPos","newValue_1","scrollCount_1","oldTimestamp_1","oldValue_1","cosParameter_1","step_1","newTimestamp","ctorParameters","NgZone","KeyValueDiffers","decorators","Inject","propDecorators","Output","exportAs","PerfectScrollbarComponent","cdRef","scrollPositionX","scrollPositionY","scrollDirectionX","scrollDirectionY","usePropagationX","usePropagationY","allowPropagationX","allowPropagationY","stateTimeout","stateUpdate","usePSClass","autoPropagation","scrollIndicators","It","directiveRef","checkPropagation","mapTo","ChangeDetectorRef","HostBinding","ViewChild","viewQuery","hostVars","hostBindings","consts","PerfectScrollbarComponent_div_3_Template","ɵngcc1","project","concurrent","scheduler","ExpandSubscriber","OuterSubscriber","hasCompleted","POSITIVE_INFINITY","subscribeToProjection","_complete","schedule","dispatch","subscribeToResult","notifyNext","outerValue","innerValue","outerIndex","innerIndex","innerSub","notifyComplete","SMOOTH_SCROLL_OPTIONS","SmoothScrollManager","customDefaultOptions","_onGoingScrolls","_defaultOptions","_now","_scrollElement","_getElement","coerceElement","_initSmoothScroll","_isFinished","destroyed","currentY","_interrupted","capture","_destroy","_step","elapsed","_applyScrollToOptions","BezierEasing","ExpandOperator","currContext","finalize","customOptions","rtlScrollAxisType","getRtlScrollAxisType","scrollableEl","targetEl","SmoothScrollModule","currentProp","plucker","PairwiseSubscriber","hasPrev","ctx_r1","isHorizontallyScrollable","verticalUsed","isVerticallyScrollable","horizontalUsed","NgScrollbar_ng_container_5_scrollbar_x_1_Template","NgScrollbar_ng_container_5_scrollbar_y_2_Template","_c2","ScrollViewport","viewPort","scrollMaxX","scrollMaxY","contentWrapperElement","activatePointerEvents","propagate","hovered","mouseMoveStream","mouseMove","mouseLeave","clicked","mouseDown","mouseUp","setAsWrapper","setAsViewport","customClassName","scrollYTo","scrollXTo","NG_SCROLLBAR_OPTIONS","defaultOptions","viewClass","trackClass","thumbClass","track","pointerEventsMethod","trackClickScrollDuration","minThumbSize","windowResizeDebounce","sensorDebounce","scrollAuditTime","viewportPropagateMouseMove","autoHeightDisabled","autoWidthDisabled","sensorDisabled","pointerEventsDisabled","ScrollbarManager","globalOptions","NgScrollbar","smoothScroll","manager","_sensorDisabled","_pointerEventsDisabled","_autoHeightDisabled","_autoWidthDisabled","_viewportPropagateMouseMove","coerceBooleanProperty","updateState","setState","deactivated","getScrolledByDirection","scrolled","pluck","PairwiseOperator","pairwise","setHovered","setDragging","dragging","setClicked","scrollbarClicked","customViewPort","defaultViewPort","scrollStream","verticalScrolled","horizontalScrolled","updateHeight","updateWidth","ɵngcc2","contentQueries","NgScrollbar_ng_container_5_Template","NgAttr","ResizeSensor","HideNativeScrollbar","ɵngcc3","ScrollbarX","ScrollbarY","NativeScrollbarSizeFactory","platform","_scrollbarSize","getNativeScrollbarSize","scrollbarSize","IOS","ɵngcc4","hideNativeScrollbar","_subscriber","RendererStyleFlags2","ngAttr","scrollbar","_currentSubscription","_debounce","_subscribe","_unsubscribe","_resizeObserver","TrackAdapter","cmp","trackElement","preventSelection","mouseup","enableSelection","EMPTY","clientRect","onTrackClicked","scrollSize","pageProperty","pageOffset","mapToScrollToOption","HTMLElement","ThumbAdapter","thumbElement","_dragging","trackMax","trackSize","contentSize","scrollbarRatio","calculateThumbSize","viewportScrollSize","scrollPosition","scrollMax","calculateThumbPosition","viewportScrollOffset","viewportScrollMax","updateStyles","handleDirection","dragged","trackMaxStart","scrollMaxStart","dragStart","dragEnd","dragStartOffset","mergeMap","mouseDownOffset","clientProperty","handleDrag","TrackXDirective","TrackYDirective","ThumbXDirective","horizontalDragging","ThumbYDirective","verticalDragging","Scrollbar","thumbDragEvent","trackClickEvent","trackHoveredEvent","viewportTrackClicked","viewportThumbClicked","isWithinBounds","thumb","mouseEnter","ANDROID","verticalHovered","horizontalHovered","PlatformModule","ssrDocument","initEvent","importNode","hostname","protocol","ssrWindow","history","replaceState","pushState","go","getPropertyValue","matchMedia","_getPrototypeOf","setPrototypeOf","__proto__","_setPrototypeOf","Reflect","construct","sham","Proxy","Parent","Class","_construct","_isNativeReflectConstruct","_cache","_wrapNativeSuper","_isNativeFunction","Wrapper","Dom7","_Array","makeReactive","ReferenceError","_assertThisInitialized","subClass","superClass","_inheritsLoose","arrayFlat","getWindow","getDocument","toCreate","tempParent","qsa","uniqueArray","arrayUnique","noTrigger","_len","shortcut","Methods","classes","_el$classList","removeClass","_len2","_key2","_el$classList2","hasClass","_len4","_key4","toggleClass","_len3","_key3","attrName","removeAttr","transitionDuration","_len5","_key5","targetSelector","listener","dom7EventData","_parents","parents","_event","dom7LiveListeners","proxyListener","handleLiveEvent","dom7Listeners","handleEvent","_len6","_key6","dom7proxy","_len9","_key9","bubbles","dataIndex","transitionEnd","dom","fireCallBack","includeMargins","_styles","outerHeight","_styles2","scrollX","_prop","previousSibling","returnIndex","newChild","tempDiv","prepend","insertBefore","nextAll","nextEls","previousElementSibling","prevAll","prevEls","_prev","_parent","foundElements","curTransform","curStyle","WebKitCSSMatrix","webkitTransform","MozTransform","OTransform","MsTransform","msTransform","m41","m42","noExtend","nextSource","isNode","keysArray","nextIndex","nextKey","desc","getOwnPropertyDescriptor","__swiper__","subKey","$container","createElements","checkProps","support","device","browser","pointerEvents","passiveListener","supportsPassive","gestures","calcSupport","overrides","_temp","getSupport","ios","android","screenHeight","ipad","ipod","iphone","windows","macos","os","calcDevice","isEdge","isSafari","isWebView","calcBrowser","swiper","resize","createObserver","initialized","newHeight","contentBoxSize","inlineSize","blockSize","resizeHandler","orientationChangeHandler","resizeObserver","_extends","Observer","WebkitMutationObserver","mutations","observerUpdate","observeParents","containerParents","$el","observeSlideChildren","$wrapperEl","bindModuleMethods","touchEventsData","animating","preventInteractionOnTransition","originalEvent","$targetEl","touchEventsTarget","isTouched","isMoved","noSwipingClass","noSwipingSelector","noSwiping","assignedSlot","__closestFrom","getRootNode","closestElement","allowClick","swipeHandler","edgeSwipeDetection","iOSEdgeSwipeDetection","edgeSwipeThreshold","iOSEdgeSwipeThreshold","allowTouchCallbacks","isScrolling","startMoving","touchStartTime","updateSize","swipeDirection","allowThresholdMove","focusableElements","touchStartForcePreventDefault","allowTouchMove","touchStartPreventDefault","isContentEditable","rtl","rtlTranslate","targetTouch","preventedByNestedSwiper","touchReleaseOnEdges","maxTranslate","minTranslate","touchAngle","isHorizontal","cssMode","touchMoveStopPropagation","loopFix","startTranslate","getTranslate","setTransition","allowMomentumBounce","grabCursor","allowSlideNext","allowSlidePrev","setGrabCursor","touchRatio","currentTranslate","disableParentSwiper","resistanceRatio","yn","resistance","followFinger","freeMode","watchSlidesProgress","watchSlidesVisibility","updateActiveIndex","updateSlidesClasses","velocities","updateProgress","setTranslate","slidesGrid","snapGrid","currentPos","touchEndTime","timeDiff","updateClickedSlide","lastClickTime","nextTick","slideTo","activeIndex","slides","freeModeMomentum","lastMoveEvent","velocityEvent","velocity","freeModeMinimumVelocity","freeModeMomentumVelocityRatio","momentumDuration","freeModeMomentumRatio","newPosition","afterBouncePosition","needsLoopFix","doBounce","bounceAmount","freeModeMomentumBounceRatio","freeModeMomentumBounce","centeredSlides","freeModeSticky","nextSlide","I","moveDistance","currentSlideSize","slidesSizesGrid","slideToClosest","transitionStart","longSwipesMs","stopIndex","groupSize","slidesPerGroupSkip","slidesPerGroup","_increment","ratio","increment","longSwipes","longSwipesRatio","shortSwipes","ft","setBreakpoint","updateSlides","isEnd","isBeginning","autoplay","running","paused","watchOverflow","preventClicks","preventClicksPropagation","previousTranslate","O","translatesDiff","progress","dummyEventAttached","Jo","initialSlide","updateOnWindowResize","autoHeight","setWrapperSize","virtualTranslate","effect","breakpointsBase","slidesPerColumn","slidesPerColumnFill","centeredSlidesBounds","slidesOffsetBefore","slidesOffsetAfter","normalizeSlideIndex","centerInsufficientSlides","roundLengths","simulateTouch","uniqueNavElements","preloadImages","updateOnImagesReady","loopAdditionalSlides","loopedSlides","loopFillGroupWithBlank","loopPreventsSlide","passiveListeners","containerModifierClass","slideClass","slideBlankClass","slideActiveClass","slideDuplicateActiveClass","slideVisibleClass","slideDuplicateClass","slideNextClass","slideDuplicateNextClass","slidePrevClass","slideDuplicatePrevClass","wrapperClass","runCallbacksOnInit","_emitClasses","descriptor","prototypes","modular","useParams","instanceParams","moduleName","useModules","modulesParams","moduleParams","moduleEventName","eventsEmitter","eventsListeners","__emitterProxy","onAny","eventsAnyListeners","offAny","eventHandler","eventsArray","getDirectionLabel","swiperSize","wrongRTL","isVirtual","virtual","previousSlidesLength","slidesLength","offsetBefore","offsetAfter","previousSnapGridLength","previousSlidesGridLength","slidePosition","prevSlideSize","slidesNumberEvenToRows","newSlidesGrid","_$wrapperEl$css","_$wrapperEl$css2","virtualSize","slideSize","slidesPerRow","numFullColumns","slide","newSlideOrderIndex","column","groupIndex","slideIndexInGroup","columnsInGroup","slideStyles","currentTransform","currentWebKitTransform","getDirectionPropertyValue","_slide$","swiperSlideSize","slidesGridItem","_i2","_slidesGridItem","_slides$filter$css","slideIndex","allSlidesSize","slideSizeValue","maxSnap","snap","_allSlidesSize","allSlidesOffset","snapIndex","updateSlidesOffset","updateAutoHeight","activeSlides","getSlideByIndex","visibleSlides","swiperSlideOffset","updateSlidesProgress","offsetCenter","visibleSlidesIndexes","slideProgress","slideBefore","slideAfter","wasBeginning","wasEnd","activeSlide","realIndex","prevSlide","Je","emitSlidesClasses","newActiveIndex","previousIndex","previousRealIndex","previousSnapIndex","slideFound","clickedSlide","clickedIndex","byController","translateTo","runCallbacks","translateBounds","internal","newTranslate","isH","_wrapperEl$scrollTo","onTranslateToWrapperTransitionEnd","indexAsNumber","normalizedTranslate","normalizedGird","normalizedGridNext","pe","onSlideToWrapperTransitionEnd","slideToLoop","newIndex","slideNext","_clientLeft","slidePrev","prevIndex","normalizedSnapGrid","prevSnap","slideReset","currentSnap","slidesPerViewDynamic","slideToIndex","loopCreate","blankSlidesNum","blankNode","prependSlides","appendSlides","loopDestroy","moving","isLocked","unsetGrabCursor","manipulation","appendSlide","prependSlide","addSlide","activeIndexBuffer","baseLength","slidesBuffer","currentSlide","removeSlide","slidesIndexes","indexToRemove","removeAllSlides","attachEvents","onTouchStart","onTouchMove","onTouchEnd","move","dummyEventListener","detachEvents","_swiper$loopedSlides","breakpoint","getBreakpoint","currentBreakpoint","breakpointOnlyParams","paramValue","Gn","breakpointParams","originalParams","wasMultiRow","isMultiRow","wasEnabled","emitContainerClasses","directionChanged","needsReLoop","changeDirection","isEnabled","containerEl","currentHeight","minRatio","_points$i","wasLocked","lastSlidePosition","addClasses","resultClasses","prepareClasses","autoheight","multirow","removeClasses","imageEl","srcset","checkForComplete","onReady","imagesLoaded","imagesToLoad","currentSrc","extendedDefaults","Swiper","swipers","newParams","getDevice","getBrowser","moduleParamName","desktop","swiperParams","passedParams","touchEventsTouch","touchEventsDesktop","clickTimeout","_proto","setProgress","getSlideClasses","slideEl","updates","spv","breakLoop","newDirection","needUpdate","currentDirection","mount","mounted","getWrapperSelector","getWrapper","deleteInstance","cleanStyles","deleteProps","extendDefaults","newDefaults","installModule","Constructor","protoProps","staticProps","_defineProperties","_createClass","prototypeGroup","protoMethod","Virtual","_swiper$params","_swiper$params$virtua","addSlidesBefore","addSlidesAfter","_swiper$virtual","previousFrom","previousTo","previousSlidesGrid","renderSlide","previousOffset","offsetProp","slidesAfter","slidesBefore","lazy","load","renderExternal","slidesToRender","renderExternalUpdate","onRendered","prependIndexes","appendIndexes","$slideEl","numberOfNewSlides","newCache","cachedIndex","$cachedEl","cachedElIndex","beforeInit","overwriteParams","Keyboard","kc","pageUpDown","isPageUp","isPageDown","isArrowLeft","isArrowRight","isArrowUp","isArrowDown","onlyInViewport","inView","swiperWidth","swiperHeight","windowWidth","windowHeight","swiperOffset","swiperCoord","Mousewheel","lastScrollTime","lastEventBeforeSnap","recentWheelEvents","hasFeature","isEventSupported","pX","pY","HORIZONTAL_AXIS","spinX","spinY","pixelX","pixelY","handleMouseEnter","mouseEntered","handleMouseLeave","eventsTarget","releaseOnEdges","rtlFactor","forceToAxis","sensitivity","_newEvent","ignoreWheelEvents","_recentWheelEvents","_prevEvent","firstEvent","snapToThreshold","autoplayDisableOnInteraction","newEvent","raw","prevEvent","animateSlider","releaseScroll","thresholdDelta","thresholdTime","Navigation","toggleEl","disabledClass","_swiper$navigation","$nextEl","$prevEl","lockClass","onPrevClick","onNextClick","createElementIfNotDefined","_swiper$navigation2","Pagination","pagination","paginationType","bullets","firstIndex","midIndex","dynamicBullets","bulletSize","dynamicMainBullets","dynamicBulletIndex","bulletActiveClass","bullet","$bullet","bulletIndex","$firstDisplayedBullet","$lastDisplayedBullet","dynamicBulletsLength","bulletsOffset","classesToSelector","currentClass","formatFractionCurrent","totalClass","formatFractionTotal","progressbarDirection","progressbarOpposite","progressbarFillClass","renderCustom","paginationHTML","numberOfBullets","renderBullet","bulletClass","bulletElement","renderFraction","renderProgressbar","clickable","clickableClass","modifierClass","progressbarOppositeClass","hiddenClass","dragSize","$dragEl","newSize","newPos","divider","moveDivider","getPointerPosition","setDragPosition","positionRatio","dragStartPos","onDragStart","dragTimeout","onDragMove","onDragEnd","snapOnRelease","enableDraggable","activeListener","disableDraggable","$swiperEl","dragClass","dragEl","draggable","Parallax","currentOpacity","parallax","parallaxEl","$parallaxEl","parallaxDuration","Zoom","getDistanceBetweenTouches","onGestureStart","gesture","fakeGestureTouched","fakeGestureMoved","scaleStart","$imageEl","$imageWrapEl","maxRatio","isScaling","onGestureChange","scaleMove","onGestureEnd","touchesStart","slideWidth","slideHeight","touchesCurrent","prevPositionX","prevPositionY","prevTime","momentumDurationX","momentumDurationY","newPositionX","newPositionY","onTransitionEnd","in","touchX","touchY","translateMinX","translateMinY","translateMaxX","translateMaxY","zoomedSlideClass","toggleGestures","slideSelector","enableGestures","gesturesEnabled","disableGestures","activeListenerWithCapture","Lazy","loadInSlide","loadInDuplicate","$images","elementClass","loadedClass","loadingClass","$pictureEl","sourceEl","$source","preloaderClass","slideOriginalIndex","originalSlide","duplicatedSlide","initialImageLoaded","slideExist","loadPrevNext","loadPrevNextAmount","maxIndex","minIndex","checkInViewOnLoad","$scrollElement","isWindow","scrollElementWidth","scrollElementHeight","scrollHandlerAttached","Controller","LinearSpline","guess","binarySearch","getInterpolateFunction","spline","_setTranslate","controlledTranslate","controlled","inverse","setControlledTranslate","setControlledTransition","A11y","getRandomNumber","makeElFocusable","makeElNotFocusable","addElRole","role","addElRoleDescription","addElControls","addElLabel","addElId","addElLive","live","disableEl","enableEl","onEnterOrSpaceKey","a11y","notify","lastSlideMessage","nextSlideMessage","firstSlideMessage","prevSlideMessage","click","notification","liveRegion","updateNavigation","updatePagination","bulletEl","$bulletEl","paginationBulletMessage","$containerEl","containerRoleDescriptionMessage","containerMessage","wrapperId","itemRoleDescriptionMessage","slideRole","ariaLabelMessage","slideLabelMessage","History","hashNavigation","getPathValues","scrollToSlide","setHistoryPopState","urlOverride","pathArray","setHistory","slugify","currentState","HashNavigation","onHashChange","newHash","setHash","watchState","Autoplay","$activeSlideEl","autoplayResult","reverseDirection","stopOnLastSlide","pause","waitForTransition","onVisibilityChange","visibilityState","onMouseEnter","disableOnInteraction","onMouseLeave","attachMouseEvents","pauseOnMouseEnter","detachMouseEvents","Fade","slideOpacity","fadeEffect","crossFade","eventTriggered","triggerEvents","Cube","$cubeShadowEl","cubeEffect","wrapperRotate","slideAngle","slideShadows","shadowBefore","shadowAfter","shadowScale","shadowAngle","scale2","Flip","flipEffect","limitRotation","rotateY","Coverflow","coverflowEffect","offsetMultiplier","translateZ","stretch","$shadowBeforeEl","$shadowAfterEl","Thumbs","thumbsParams","thumbs","SwiperClass","swiperCreated","thumbsContainerClass","onThumbClick","thumbsSwiper","slideThumbActiveClass","currentIndex","autoScrollOffset","useOffset","newThumbsIndex","currentThumbsIndex","prevThumbsIndex","nextThumbsIndex","jt","thumbsToActivate","thumbActiveClass","multipleActiveThumbs","hideOnClick","toEdge","fromEdge","_swiper$navigation3","_swiper$navigation4","isHidden","activeIndexChange","snapIndexChange","slidesLengthChange","snapGridLengthChange","doubleTap","slideChange","checkInView","loadOnTransitionStart","notificationClass","afterInit","paginationUpdate","beforeTransitionStart","sliderFirstMove","beforeDestroy","SwiperEventNames","SwiperDirective","initialIndex","indexChange","S_INIT","S_BEFOREDESTROY","S_SCROLL","S_PROGRESS","S_KEYPRESS","S_RESIZE","S_BREAKPOINT","S_ZOOMCHANGE","S_AFTERRESIZE","S_BEFORERESIZE","S_LOOPFIX","S_BEFORELOOPFIX","S_SLIDERMOVE","S_SLIDECHANGE","S_SETTRANSLATE","S_SETTRANSITION","S_FROMEDGE","S_TOEDGE","S_REACHEND","S_REACHBEGINNING","S_AUTOPLAY","S_AUTOPLAYSTART","S_AUTOPLAYSTOP","S_IMAGESREADY","S_LAZYIMAGELOAD","S_LAZYIMAGEREADY","S_SCROLLDRAGEND","S_SCROLLDRAGMOVE","S_SCROLLDRAGSTART","S_NAVIGATIONHIDE","S_NAVIGATIONSHOW","S_PAGINATIONRENDER","S_PAGINATIONUPDATE","S_PAGINATIONHIDE","S_PAGINATIONSHOW","S_TAP","S_CLICK","S_DOUBLETAP","S_TOUCHEND","S_TOUCHMOVE","S_TOUCHSTART","S_TOUCHMOVEOPPOSITE","S_TRANSITIONEND","S_TRANSITIONSTART","S_SLIDEPREVTRANSITIONEND","S_SLIDEPREVTRANSITIONSTART","S_SLIDENEXTTRANSITIONEND","S_SLIDENEXTTRANSITIONSTART","S_SLIDECHANGETRANSITIONEND","S_SLIDECHANGETRANSITIONSTART","S_OBSERVERUPDATE","setIndex","SwiperConfig","swiperEvent","emitter","real","silent","stopAutoplay","startAutoplay","SwiperComponent","mo","swiperConfig","paginationBackup","paginationConfig","useSwiperClass","isAtLast","isAtFirst","updateClasses","swiperSlides","getConfig","updateNeeded","onPaginationClick","hasError","thrownError","ObjectUnsubscribedError","_error","notifyError","kind","hasValue","do","accept","nextOrObserver","toObservable","Notification","undefinedValueNotification","completeNotification","_isScalar","observable","observerOrNext","sink","rxSubscriberSymbol","emptyObserver","toSubscriber","syncErrorThrowable","_trySubscribe","syncErrorThrown","syncErrorValue","isStopped","canReportError","promiseCtor","getPromiseCtor","Symbol_observable","operations","fns","pipeFromArray","toPromise","hostReportError","SubjectSubscriber","subject","AnonymousSubject","SubjectSubscription","subscriberIndex","destinationOrNext","SafeSubscriber","_unsubscribeAndRecycle","_parentOrParents","_parentSubscriber","_context","__tryOrSetError","__tryOrUnsub","useDeprecatedSynchronousErrorHandling","wrappedComplete","UnsubscriptionError","UnsubscriptionErrorImpl","_subscriptions","flattenUnsubscriptionErrors","sub","teardown","subscriptionIndex","errs","_enable_super_gross_mode_that_will_cause_bad_things","subjectFactory","_refCount","_isComplete","getSubject","_subject","connect","connection","_connection","ConnectableSubscriber","higherOrderRefCount","connectableObservableDescriptor","connectableProto","ConnectableObservable","connectable","NONE","resultSelector","isScheduler","CombineLatestOperator","CombineLatestSubscriber","toRespond","unused","_tryResultSelector","mergeAll","concatAll","observableFactory","emptyScheduled","forkJoinInternal","completed","emitted","isInteropObservable","scheduleObservable","isPromise","schedulePromise","scheduleArray","Symbol_iterator","isIterable","return","scheduleIterable","scheduled","subscribeTo","subscribeToArray","setupSubscription","sourceObj","isEventTarget","isJQueryStyleEventEmitter","isNodeStyleEventEmitter","async","dueTime","periodOrScheduler","due","durationSelector","AuditSubscriber","throttled","innerSubscription","clearThrottle","AuditOperator","audit","CatchOperator","caught","CatchSubscriber","err2","innerSubscriber","InnerSubscriber","DebounceTimeOperator","DebounceTimeSubscriber","debouncedSubscription","lastValue","clearDebounce","dispatchNext","debouncedNext","delayFor","absoluteDelay","DelayOperator","DelaySubscriber","errored","_schedule","scheduleNotification","DelayMessage","keySelector","DistinctUntilChangedOperator","DistinctUntilChangedSubscriber","hasKey","FilterOperator","FilterSubscriber","FinallyOperator","FinallySubscriber","MapOperator","MapSubscriber","MergeMapOperator","MergeMapSubscriber","_tryNext","_innerSub","ish","RefCountOperator","refCounter","RefCountSubscriber","sharedConnection","subjectOrSubjectFactory","MulticastOperator","multicast","shareSubjectFactory","AsyncScheduler","AsyncAction","work","execute","_execute","requestAsyncId","scheduleMessage","ObserveOnSubscriber","ObserveOnMessage","windowTime","_events","_infiniteTimeWindow","_bufferSize","_windowTime","nextInfiniteTimeWindow","nextTimeWindow","ReplayEvent","_getNow","_trimBufferThenGetEvents","eventsCount","spliceCount","configOrBufferSize","useRefCount","isComplete","ReplaySubject","shareReplayOperator","SkipOperator","SkipSubscriber","SwitchMapOperator","SwitchMapSubscriber","TakeOperator","ArgumentOutOfRangeError","TakeSubscriber","notifier","TakeUntilOperator","takeUntilSubscriber","TakeUntilSubscriber","notifierSubscription","seenValue","inclusive","TakeWhileOperator","TakeWhileSubscriber","nextOrComplete","predicateResult","DoOperator","TapSubscriber","_tapNext","_tapError","_tapComplete","Action","recycleAsyncId","errorValue","Scheduler","SchedulerAction","delegate","animationFrame","nextHandle","RESOLVED","activeHandles","Immediate","setImmediate","findAndClearHandle","clearImmediate","asap","getSymbolIterator","rxSubscriber","ArgumentOutOfRangeErrorImpl","ObjectUnsubscribedErrorImpl","obs","subscribeToObservable","promise","subscribeToPromise","subscribeToIterable","outerSubscriber","isArray_1","isObject_1","isFunction_1","UnsubscriptionError_1","qt","AUTO_STYLE","definitions","timings","steps","stateChangeExpr","_onDoneFns","_onStartFns","_onDestroyFns","_started","_destroyed","_finished","_position","parentPlayer","_onFinish","onDone","onDestroy","hasStarted","play","_onStart","triggerMicrotask","scheduleMicroTask","setPosition","getPosition","triggerCallback","methods","_players","players","doneCount","destroyCount","startCount","player","_onDestroy","timeAtPosition","longestPlayer","longestSoFar","newPlayerIsLongest","ɵPRE_STYLE","CDK_DESCRIBEDBY_ID_PREFIX","CDK_DESCRIBEDBY_HOST_ATTRIBUTE","nextId","AriaDescriber","_messageRegistry","_messagesContainer","_id","describe","_canBeDescribed","getKey","setMessageId","messageElement","referenceCount","_createMessageElement","_isElementDescribedByMessage","_addMessageReference","removeDescription","_isElementNode","_removeMessageReference","registeredMessage","_deleteMessageElement","describedElements","_removeCdkDescribedByReferenceIds","_createMessagesContainer","containerClassName","serverContainers","messagesContainer","originalReferenceIds","getAriaReferenceIds","existingId","addAriaReferencedId","filteredIds","removeAriaReferencedId","referenceIds","messageId","trimmedMessage","ELEMENT_NODE","_items","_activeItemIndex","_activeItem","_wrap","_letterKeyStream","_typeaheadSubscription","_vertical","_allowedModifierKeys","_homeAndEnd","_skipPredicateFn","_pressedLetters","tabOut","QueryList","newItems","itemArray","skipPredicate","withWrap","shouldWrap","withVerticalOrientation","withHorizontalOrientation","_horizontal","withAllowedModifierKeys","withTypeAhead","debounceInterval","letter","_getItemsArray","getLabel","setActiveItem","withHomeAndEnd","previousActiveItem","updateActiveItem","isModifierAllowed","TAB","DOWN_ARROW","setNextItemActive","UP_ARROW","setPreviousItemActive","RIGHT_ARROW","LEFT_ARROW","HOME","setFirstItemActive","END","setLastItemActive","hasModifierKey","toLocaleUpperCase","ZERO","NINE","activeItemIndex","activeItem","isTyping","_setActiveItemByIndex","_setActiveItemByDelta","_setActiveInWrapMode","_setActiveInDefaultMode","fallbackDelta","ListKeyManager","setInactiveStyles","setActiveStyles","_origin","setFocusOrigin","InteractivityChecker","isVisible","getClientRects","hasGeometry","isTabbable","frameElement","getFrameElement","getTabIndexValue","tabIndexValue","WEBKIT","isPotentiallyTabbableIOS","FIREFOX","tabIndex","isFocusable","isInputElement","isHiddenInput","isNativeFormElement","isAnchorElement","isAnchorWithHref","hasValidTabIndex","isPotentiallyFocusable","ignoreVisibility","_checker","deferAnchors","_hasAttached","startAnchorListener","focusLastTabbableElement","endAnchorListener","focusFirstTabbableElement","_enabled","attachAnchors","_startAnchor","_endAnchor","_toggleAnchorTabIndex","startAnchor","endAnchor","_createAnchor","nextSibling","focusInitialElementWhenReady","_executeOnStable","focusInitialElement","focusFirstTabbableElementWhenReady","focusLastTabbableElementWhenReady","_getRegionBoundary","markers","_getFirstTabbableElement","_getLastTabbableElement","redirectToElement","focusableChild","hasAttached","tabbableChild","toggleAnchors","isStable","FocusTrapFactory","deferCaptureElements","FocusTrap","CdkTrapFocus","_focusTrapFactory","_previouslyFocusedElement","focusTrap","autoCapture","_autoCapture","_captureFocus","autoCaptureChange","firstChange","_getFocusedElementPierceShadowDom","radiusX","radiusY","INPUT_MODALITY_DETECTOR_OPTIONS","INPUT_MODALITY_DETECTOR_DEFAULT_OPTIONS","ignoreKeys","ALT","CONTROL","MAC_META","META","SHIFT","modalityEventListenerOptions","normalizePassiveListenerOptions","InputModalityDetector","_mostRecentTarget","_modality","_lastTouchMs","_onKeydown","_getEventTarget","_onMousedown","isFakeMousedownFromScreenReader","_onTouchstart","isFakeTouchstartFromScreenReader","modalityDetected","modalityChanged","mostRecentModality","LIVE_ANNOUNCER_ELEMENT_TOKEN","LIVE_ANNOUNCER_DEFAULT_OPTIONS","LiveAnnouncer","elementToken","_liveElement","_createLiveElement","announce","politeness","_previousTimeout","_currentPromise","_currentResolve","previousElements","liveEl","FOCUS_MONITOR_DEFAULT_OPTIONS","captureEventListenerOptions","FocusMonitor","_inputModalityDetector","_windowFocused","_originFromTouchInteraction","_elementInfo","_monitoredElementCount","_rootNodeFocusListenerCount","_windowFocusListener","_windowFocusTimeoutId","_stopInputModalityDetector","_rootNodeFocusAndBlurListener","_onFocus","_onBlur","_detectionMode","detectionMode","monitor","checkChildren","rootNode","_getDocument","cachedInfo","_registerGlobalListeners","stopMonitoring","elementInfo","_setClasses","_removeGlobalListeners","focusVia","_getClosestElementsInfo","currentElement","_originChanged","_setOrigin","_info","_getWindow","_getFocusOrigin","focusEventTarget","_shouldBeAttributedToTouch","_lastFocusOrigin","isFromInteraction","_originTimeoutId","relatedTarget","_emitOrigin","rootNodeFocusListeners","modality","CdkMonitorFocus","_focusMonitor","cdkFocusChange","_monitorSubscription","BLACK_ON_WHITE_CSS_CLASS","WHITE_ON_BLACK_CSS_CLASS","HIGH_CONTRAST_MODE_ACTIVE_CSS_CLASS","HighContrastModeDetector","getHighContrastMode","testElement","documentWindow","computedColor","_applyBodyHighContrastModeCssClasses","_hasCheckedHighContrastMode","bodyClasses","A11yModule","highContrastModeDetector","DIR_DOCUMENT","inject","RTL_LOCALE_PATTERN","Directionality","htmlDir","rawValue","_resolveDirectionality","fallbackValue","_isNumberValue","elementOrRef","sourceValues","sourceValue","trimmedString","applyChanges","viewContainerRef","itemContextFactory","itemValueResolver","itemViewChanged","forEachOperation","record","adjustedPreviousIndex","insertContext","templateRef","detach","viewCacheSize","_viewCache","_insertView","viewArgsFactory","_detachAndCacheView","_moveView","cachedView","_insertViewFromCache","$implicit","viewArgs","detachedView","_maybeCacheView","insert","_multiple","initiallySelectedValues","_emitChanges","_selection","_deselectedToEmit","_selectedToEmit","_markSelected","_selected","_verifyValueAssignment","_emitChangeEvent","deselect","_unmarkSelected","_unmarkAll","isMultipleSelection","UniqueSelectionDispatcher","_listeners","registered","_VIEW_REPEATER_STRATEGY","BACKSPACE","ESCAPE","SPACE","PAGE_UP","PAGE_DOWN","DELETE","mediaQueriesForWebkitCompatibility","mediaQueryStyleNode","MediaMatcher","_matchMedia","noopMatchMedia","BLINK","sheet","insertRule","createEmptyStyleRule","media","BreakpointObserver","_mediaMatcher","_queries","_destroySubject","isMatched","queries","coerceArray","mediaQuery","_registerQuery","mql","splitQueries","stateObservable","combineLatest","breakpointStates","Breakpoints","XSmall","Small","Medium","Large","XLarge","Handset","Tablet","Web","HandsetPortrait","TabletPortrait","WebPortrait","HandsetLandscape","TabletLandscape","WebLandscape","MutationObserverFactory","ContentObserver","_mutationObserverFactory","_observedElements","_cleanupObserver","_observeElement","_unobserveElement","CdkObserveContent","_contentObserver","scrollBehaviorSupported","supportsScrollBehavior","_viewportRuler","_previousHTMLStyles","_isEnabled","_canBeEnabled","_previousScrollPosition","getViewportScrollPosition","coerceCssPixelValue","htmlStyle","bodyStyle","previousHtmlScrollBehavior","scrollBehavior","previousBodyScrollBehavior","getViewportSize","_scrollDispatcher","_scrollSubscription","_detach","_overlayRef","overlayRef","_initialScrollPosition","scrollContainers","containerBounds","scrollContainerRect","scrollThrottle","autoClose","overlayRect","overlayElement","isElementScrolledOutsideView","ScrollStrategyOptions","NoopScrollStrategy","CloseScrollStrategy","BlockScrollStrategy","reposition","RepositionScrollStrategy","scrollStrategy","hasBackdrop","disposeOnNavigation","configKeys","connectionPair","scrollableViewProperties","_portalOutlet","_host","_pane","_keyboardDispatcher","_location","_outsideClickDispatcher","_backdropElement","_backdropClick","_attachments","_detachments","_locationChanges","_backdropClickHandler","_backdropTransitionendHandler","_disposeBackdrop","_keydownEvents","_outsidePointerEvents","_scrollStrategy","_positionStrategy","positionStrategy","backdropElement","portal","_previousHostParent","attachResult","_updateStackingOrder","_updateElementSize","_updateElementDirection","_togglePointerEvents","_attachBackdrop","_toggleClasses","detachBackdrop","detachmentResult","_detachContentWhenStable","isAttached","_disposeScrollStrategy","attachments","detachments","keydownEvents","outsidePointerEvents","updatePositionStrategy","strategy","sizeConfig","setDirection","addPanelClass","removePanelClass","getDirection","updateScrollStrategy","enablePointer","showingClass","backdropToDetach","_backdropTimeout","cssClasses","backdrop","OverlayContainer","_containerElement","getContainerElement","_createContainer","_isTestEnvironment","oppositePlatformContainers","i1$1","boundingBoxClass","cssUnitPattern","connectedTo","_overlayContainer","_lastBoundingBoxSize","_isPushed","_canPush","_growAfterOpen","_hasFlexibleDimensions","_positionLocked","_viewportMargin","_scrollables","_preferredPositions","_positionChanges","_offsetX","_offsetY","_appliedPanelClasses","positionChanges","setOrigin","_validatePositions","_boundingBox","_isDisposed","_isInitialRender","_lastPosition","reapplyLastPosition","_clearPanelClasses","_resetOverlayElementStyles","_resetBoundingBoxStyles","_viewportRect","_getNarrowedViewportRect","_originRect","_getOriginRect","_overlayRect","_containerRect","originRect","viewportRect","containerRect","flexibleFits","_getOriginPoint","overlayPoint","_getOverlayPoint","overlayFit","_getOverlayFit","isCompletelyWithinViewport","_applyPosition","_canFitWithFlexibleDimensions","boundingBoxRect","_calculateBoundingBoxRect","visibleArea","bestFit","bestScore","fit","_previousPushAmount","extendStyles","alignItems","justifyContent","lastPosition","withScrollableContainers","scrollables","withPositions","withViewportMargin","withFlexibleDimensions","flexibleDimensions","withGrowAfterOpen","growAfterOpen","withPush","canPush","withLockedPosition","withDefaultOffsetX","withDefaultOffsetY","withTransformOriginOn","_transformOriginSelector","_isRtl","overlayStartX","overlayStartY","overlayX","Ae","overlayY","rawOverlayRect","getRoundedBoundingClientRect","_getOffset","topOverflow","bottomOverflow","visibleWidth","_subtractOverflows","visibleHeight","fitsInViewportVertically","fitsInViewportHorizontally","availableHeight","availableWidth","getPixelValue","horizontalFit","_pushOverlayOnScreen","overflowRight","overflowBottom","overflowTop","overflowLeft","pushX","pushY","_setTransformOrigin","_setOverlayElementStyles","_setBoundingBoxStyles","_addPanelClasses","_getScrollVisibility","changeEvent","ConnectedOverlayPositionChange","xOrigin","yOrigin","transformOrigin","smallestDistanceToViewportEdge","previousHeight","_hasExactPosition","hasExactPosition","hasFlexibleDimensions","_getExactOverlayY","_getExactOverlayX","transformString","horizontalStyleProperty","originBounds","overlayBounds","scrollContainerBounds","getElementRef","isOriginClipped","isElementClippedByScrolling","isOriginOutsideView","isOverlayClipped","isOverlayOutsideView","overflows","currentOverflow","_cssPosition","_topOffset","_bottomOffset","_leftOffset","_rightOffset","_alignItems","_justifyContent","_width","_height","centerHorizontally","centerVertically","parentStyles","shouldBeFlushHorizontally","shouldBeFlushVertically","bi","OverlayPositionBuilder","GlobalPositionStrategy","flexibleConnectedTo","FlexibleConnectedPositionStrategy","BaseOverlayDispatcher","_attachedOverlays","OverlayKeyboardDispatcher","_keydownListener","overlays","_isAttached","OverlayOutsideClickDispatcher","_cursorStyleIsSet","_pointerDownListener","_pointerDownEventTarget","_clickListener","_addEventListeners","_cursorOriginalValue","nextUniqueId","_positionBuilder","_directionality","_createHostElement","pane","_createPaneElement","portalOutlet","_createPortalOutlet","overlayConfig","OverlayConfig","OverlayRef","_appRef","ApplicationRef","DomPortalOutlet","i5","i6","defaultPositionList","CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY","CdkOverlayOrigin","CdkConnectedOverlay","_overlay","scrollStrategyFactory","_dir","_hasBackdrop","_lockPosition","_flexibleDimensions","_push","_backdropSubscription","_attachSubscription","_detachSubscription","_positionSubscription","viewportMargin","positionChange","overlayKeydown","overlayOutsideClick","_templatePortal","TemplatePortal","_scrollStrategyFactory","_updatePositionStrategy","lockPosition","_attachOverlay","_detachOverlay","_createOverlay","_buildConfig","_createPositionStrategy","currentPosition","_getFlexibleConnectedPositionStrategyOrigin","transformOriginSelector","CDK_CONNECTED_OVERLAY_SCROLL_STRATEGY_PROVIDER","hasV8BreakIterator","v8BreakIterator","supportedInputTypes","Platform","_platformId","EDGE","TRIDENT","chrome","CSS","candidateInputTypes","featureTestInput","supportsPassiveEvents","shadowDomIsSupported","supportsPassiveEventListeners","scrollToFunction","scrollContainer","containerStyle","contentStyle","createShadowRoot","attachShadow","_supportsShadowDom","ShadowRoot","newActiveElement","composedPath","__karma__","jasmine","jest","Mocha","_attachedHost","setAttachedHost","Portal","attachDomPortal","_attachedPortal","ComponentPortal","attachComponentPortal","attachTemplatePortal","DomPortal","_invokeDisposeFn","setDisposeFn","_disposeFn","BasePortalOutlet","outletElement","_defaultInjector","anchorNode","createComment","viewCount","_getComponentRootNode","viewContainer","CdkPortalOutlet","_isInitialized","attached","_getRootNode","attachedRef","_attachedRef","ScrollDispatcher","_scrolled","_globalSubscription","_scrolledCount","register","elementScrolled","deregister","scrollableReference","auditTimeInMs","_addGlobalListener","ancestorScrolled","elementOrElementRef","ancestors","getAncestorScrollContainers","scrollingContainers","_subscription","_scrollableContainsElement","scrollableElement","ViewportRuler","_change","_changeListener","_viewportSize","_updateViewportSize","getViewportRect","documentRect","throttleTime","_sticky","_hasStickyChanged","sticky","prevValue","hasStickyChanged","resetStickyChanged","CDK_TABLE","TEXT_COLUMN_OPTIONS","CdkCellDef","CdkHeaderCellDef","CdkFooterCellDef","_CdkColumnDefBase","mixinHasStickyInput","CdkColumnDefBase","CdkColumnDef","_table","_stickyEnd","_name","_setNameInput","stickyEnd","_updateColumnCssClassName","_columnCssClassName","cssClassFriendlyName","columnDef","CdkHeaderCell","BaseCdkCell","CdkFooterCell","tableRole","CdkCell","tasks","endTasks","_COALESCED_STYLE_SCHEDULER","_CoalescedStyleScheduler","_currentSchedule","task","_createScheduleIfNeeded","scheduleEnd","_Schedule","_getScheduleObservable","BaseRowDef","_differs","_columnsDiffer","columns","getColumnsDiff","extractCellTemplate","CdkHeaderRowDef","headerCell","CdkFooterRowDef","footerCell","cell","_CdkHeaderRowDefBase","CdkHeaderRowDefBase","_CdkFooterRowDefBase","CdkFooterRowDefBase","CdkRowDef","CdkCellOutlet","_viewContainer","mostRecentCellOutlet","CdkHeaderRow","CdkFooterRow","CdkRow","CdkNoDataRow","_contentClassName","STICKY_DIRECTIONS","_isNativeHtmlTable","_stickCellCss","_coalescedStyleScheduler","_isBrowser","_needsPositionStickyOnElement","_positionListener","_cachedCellWidths","_borderCellCss","clearStickyPositioning","rows","stickyDirections","elementsToClear","_removeStickyStyle","updateStickyColumns","stickyStartStates","stickyEndStates","recalculateCellWidths","stickyColumnsUpdated","stickyEndColumnsUpdated","firstRow","numCells","cellWidths","_getCellWidths","startPositions","_getStickyStartColumnPositions","endPositions","_getStickyEndColumnPositions","lastStickyStart","firstStickyEnd","_addStickyStyle","stickRows","rowsToStick","stickyStates","stickyOffsets","stickyCellHeights","elementsToStick","stickyOffset","borderedRowIndex","isBorderedRowIndex","stickyHeaderRowsUpdated","stickyFooterRowsUpdated","updateStickyFooterContainer","tableElement","tfoot","_getCalculatedZIndex","dirValue","isBorderElement","zIndexIncrements","firstRowCells","widths","nextPosition","STICKY_POSITIONING_LISTENER","DataRowOutlet","HeaderRowOutlet","FooterRowOutlet","NoDataRowOutlet","CdkTable","_changeDetectorRef","_viewRepeater","_stickyPositioningListener","_columnDefsByName","_customColumnDefs","_customRowDefs","_customHeaderRowDefs","_customFooterRowDefs","_headerRowDefChanged","_footerRowDefChanged","_stickyColumnStylesNeedReset","_forceRecalculateCellWidths","_cachedRenderRowsMap","stickyCssClass","needsPositionStickyOnElement","_isShowingNoDataRow","_multiTemplateDataRows","_fixedLayout","contentChanged","viewChange","MAX_VALUE","trackBy","_trackByFn","dataSource","_dataSource","_switchDataSource","multiTemplateDataRows","_rowOutlet","_forceRenderDataRows","updateStickyColumnStyles","fixedLayout","_setupStickyStyler","_applyNativeTableSections","_dataDiffer","dataRow","ngAfterContentChecked","_cacheRowDefs","_cacheColumnDefs","rowDefsChanged","columnsChanged","_renderUpdatedColumns","_forceRenderHeaderRows","_forceRenderFooterRows","_rowDefs","_renderChangeSubscription","_observeRenderChanges","_checkStickyStates","_headerRowOutlet","_footerRowOutlet","_headerRowDefs","_footerRowDefs","_defaultRowDef","isDataSource","renderRows","_renderRows","_getAllRenderRows","_updateNoDataRow","_adjustedPreviousIndex","_getEmbeddedViewArgs","_renderCellTemplateForItem","rowDef","_updateRowIndexContext","forEachIdentityChange","addColumnDef","removeColumnDef","addRowDef","removeRowDef","addHeaderRowDef","headerRowDef","removeHeaderRowDef","addFooterRowDef","footerRowDef","removeFooterRowDef","setNoDataRow","noDataRow","_customNoDataRow","updateStickyHeaderRowStyles","headerRows","_getRenderedRows","thead","_stickyStyler","updateStickyFooterRowStyles","footerRows","dataRows","headerRow","_addStickyColumnStyles","footerRow","prevCachedRenderRows","renderRowsForData","_getRenderRowsForData","renderRow","rowDefs","_getRowDefs","cachedRenderRows","mergeArrayAndSet","_getOwnDefs","_contentColumnDefs","_contentHeaderRowDefs","_contentFooterRowDefs","_contentRowDefs","defaultRowDefs","when","columnsDiffReducer","dataColumnsChanged","headerColumnsChanged","footerColumnsChanged","dataStream","_renderRow","columnDefs","columnName","rowOutlet","renderedRows","outlet","cellTemplate","_getCellTemplates","renderIndex","even","odd","columnId","documentFragment","createDocumentFragment","sections","outlets","_noDataRowOutlet","section","stickyCheckReducer","StickyStyler","_noDataRow","shouldShow","_DisposeViewRepeaterStrategy","CdkTextColumn","justify","_syncColumnDefName","headerText","_createDefaultHeaderText","dataAccessor","defaultDataAccessor","defaultHeaderTextTransform","_DOM","adapter","PlatformLocation","historyGo","relativePosition","ɵɵinject","BrowserPlatformLocation","useBrowserPlatformLocation","LOCATION_INITIALIZED","_doc","_init","_history","getBaseHrefFromDOM","getDOM","getBaseHref","onPopState","getGlobalEventTarget","port","newPath","supportsState","forward","getState","createBrowserPlatformLocation","slashes","pathEndIdx","LocationStrategy","platformLocation","PathLocationStrategy","provideLocationStrategy","_removeListenerFns","_baseHref","prepareExternalUrl","joinWithSlash","includeHash","normalizeQueryParams","externalUrl","HashLocationStrategy","platformStrategy","_urlChangeListeners","_platformStrategy","browserBaseHref","stripTrailingSlash","_stripIndexHtml","ev","isCurrentPathEqualTo","baseHref","_stripBaseHref","_notifyUrlChangeListeners","onUrlChange","_urlChangeSubscription","onNext","onThrow","onReturn","createLocation","NumberFormatStyle","Decimal","Percent","Currency","Scientific","FormStyle","Format","Standalone","TranslationWidth","Narrow","Abbreviated","Wide","Short","FormatWidth","Long","Full","NumberSymbol","List","PercentSign","PlusSign","MinusSign","Exponential","SuperscriptingExponent","PerMille","TimeSeparator","CurrencyDecimal","CurrencyGroup","getLastDefinedValue","ɵfindLocaleData","ɵLocaleDataIndex","ISO8601_DATE_REGEX","NAMED_FORMATS","DATE_FORMATS_SPLIT","ZoneWidth","ShortGMT","Extended","DateType","FullYear","Month","Hours","Minutes","Seconds","FractionalSeconds","Day","TranslationType","DayPeriods","Days","Months","Eras","timezone","parsedNb","tzHour","tzMin","dateSetter","timeSetter","isoStringToDate","getNamedFormat","dateTimezoneOffset","timezoneToOffset","reverseValue","addDateMinutes","convertTimezoneToLocal","dateFormatter","DATE_FORMATS","dateStrGetter","dateGetter","weekNumberingYearGetter","weekGetter","timeZoneGetter","getDateFormatter","newDate","localeId","getLocaleId","formatValue","getLocaleDateFormat","getLocaleTimeFormat","shortTime","shortDate","getLocaleDateTimeFormat","mediumTime","mediumDate","longTime","longDate","fullTime","fullDate","opt_values","minusSign","negWrap","neg","strNum","getDatePart","strMs","formatFractionalSeconds","localeMinus","getLocaleNumberSymbol","padNumber","formStyle","getLocaleMonthNames","getLocaleDayNames","currentHours","currentMinutes","rules","checkFullData","extractTime","getLocaleExtraDayPeriodRules","dayPeriods","getLocaleExtraDayPeriods","afterFrom","beforeTo","getLocaleDayPeriods","getLocaleEraNames","getDateTranslation","datetime","monthBased","nbDaysBefore1stDayOfMonth","today","thisThurs","getThursdayThisWeek","firstThurs","THURSDAY","getFirstThursdayOfYear","requestedTimezoneOffset","NUMBER_FORMAT_REGEXP","cookieStr","cookie","eqIndex","cookieName","cookieValue","NgClass","_iterableDiffers","_keyValueDiffers","_ngEl","_iterableDiffer","_keyValueDiffer","_initialClasses","_rawClass","_removeClasses","_applyClasses","ngClass","ɵisListLikeIterable","iterableChanges","_applyIterableChanges","keyValueChanges","_applyKeyValueChanges","forEachAddedItem","_toggleClass","forEachChangedItem","forEachRemovedItem","ɵstringify","rawClassVal","NgComponentOutlet","_moduleRef","ngComponentOutlet","elInjector","ngComponentOutletInjector","parentInjector","ngComponentOutletNgModuleFactory","parentModule","NgModuleRef","ComponentFactoryResolver","ngComponentOutletContent","ngForOf","NgForOf","_template","_ngForOf","_ngForOfDirty","_differ","ngForTrackBy","ngForTemplate","_applyChanges","NgForOfContext","applyViewChange","NgIf","NgIfContext","_thenTemplateRef","_elseTemplateRef","_thenViewRef","_elseViewRef","ngIf","_updateView","ngIfThen","assertTemplate","ngIfElse","_templateRef","_created","enforceState","created","NgSwitch","_defaultUsed","_caseCount","_lastCaseCheckIndex","_lastCasesMatched","ngSwitch","_ngSwitch","_updateDefaultCases","_addCase","_addDefault","_defaultViews","_matchCase","useDefault","NgSwitchCase","_view","SwitchView","ngSwitchCase","NgSwitchDefault","NgStyle","_ngStyle","ngStyle","_setStyle","nameAndUnit","NgTemplateOutlet","ngTemplateOutletContext","ngTemplateOutlet","ɵRuntimeError","createSubscription","updateLatestValue","_promiseStrategy","PromiseStrategy","_subscribableStrategy","SubscribableStrategy","AsyncPipe","_latestValue","_strategy","_selectStrategy","_updateLatestValue","ɵisPromise","ɵisSubscribable","invalidPipeArgumentError","unicodeWordMatch","txt","UpperCasePipe","DATE_PIPE_DEFAULT_TIMEZONE","defaultTimezone","LOCALE_ID","DecimalPipe","digitsInfo","isValue","groupSymbol","decimalSymbol","isPercent","formattedText","isZero","parsedNumber","integerLen","zeros","numStr","exponent","MAX_DIGITS","parseNumber","fractionLen","toPercent","minInt","minFraction","minFrac","maxFraction","maxFrac","minIntPart","minFractionPart","maxFractionPart","parseIntAutoRadix","fractionSize","roundAt","dropTrailingZeros","minLen","carry","roundNumber","decimals","lgSize","gSize","negPre","negSuf","posPre","posSuf","formatNumberToLocaleString","patternParts","positive","negative","positiveParts","integer","ch","ka","trunkLen","parseNumberFormat","getLocaleNumberFormat","formatNumber","strToNumber","SlicePipe","PLATFORM_BROWSER_ID","ViewportScroller","ɵɵdefineInjectable","BrowserViewportScroller","setOffset","getScrollPosition","supportsScrolling","scrollToPosition","scrollToAnchor","elSelected","documentResult","createTreeWalker","treeWalker","NodeFilter","SHOW_ELEMENT","currentNode","nextNode","findAnchorFromDocument","setHistoryScrollRestoration","scrollRestoration","supportScrollRestoration","scrollRestorationDescriptor","getScrollRestorationProperty","normalizedNames","lazyUpdate","lazyInit","maybeSetNormalizedName","getAll","op","lcName","copyFrom","applyUpdate","toDelete","existing","Li","encodeKey","standardEncoding","encodeValue","decodeKey","decodeValue","STANDARD_ENCODING_REGEX","STANDARD_ENCODING_REPLACEMENTS","cloneFrom","encoder","HttpUrlEncodingCodec","rawParams","codec","eqIdx","list","paramParser","appendAll","eKey","HttpParams","valueToString","FormData","third","fourth","reportProgress","withCredentials","HttpContext","urlWithParams","qIdx","serializeBody","isBlob","isFormData","isUrlSearchParams","detectContentTypeHeader","setHeaders","setParams","HttpRequest","HttpEventType","Sent","UploadProgress","ResponseHeader","DownloadProgress","Response","User","defaultStatus","defaultStatusText","HttpResponseBase","HttpHeaderResponse","events$","res$","jsonp","callbackParam","patch","addBody","HttpHandler","NoopInterceptor","XSSI_PREFIX","HttpXhrBackend","xhrFactory","build","detectedType","reqBody","headerResponse","partialFromXhr","getAllResponseHeaders","responseURL","getResponseHeader","getResponseUrl","onLoad","responseText","originalBody","HttpErrorResponse","onError","sentHeaders","onDownProgress","progressEvent","lengthComputable","partialText","onUpProgress","upload","DONE","XSRF_COOKIE_NAME","XSRF_HEADER_NAME","HttpXsrfCookieExtractor","lastCookieString","lastToken","parseCount","getToken","cookieString","ɵparseCookieValue","HttpXsrfInterceptor","tokenService","headerName","lcUrl","HttpXsrfTokenExtractor","HttpInterceptingHandler","interceptors","HttpInterceptorHandler","HttpBackend","HttpClientXsrfModule","withOptions","objWithPropertyToExtract","getClosureSafeProperty","overriddenName","newLineIndex","__forward_ref__","forwardRefFn","forwardRef","isForwardRef","formatRuntimeError","renderStringify","injectorName","injectorDetails","RuntimeError","stringifyForError","actual","expected","comparison","getOwnDefinition","NG_PROV_DEF","NG_INJECTABLE_DEF","NG_INJ_DEF","NG_INJECTOR_DEF","ngInjectableDef","ngInjectorDef","InjectFlags","Default","Host","Self","_injectImplementation","notFoundValue","injectableDef","getInjectableDef","throwProviderNotFoundError","ChangeDetectionStrategy","OnPush","ViewEncapsulation$1","ViewEncapsulation","Emulated","None","ShadowDom","__globalThis","globalThis","__window","__self","WorkerGlobalScope","_global","EMPTY_OBJ","EMPTY_ARRAY","NG_COMP_DEF","NG_DIR_DEF","NG_PIPE_DEF","NG_MOD_DEF","NG_FACTORY_DEF","NG_ELEMENT_ID","__NG_ELEMENT_ID__","_renderCompCount","componentDefinition","noSideEffects","declaredInputs","providersResolver","hostAttrs","onPush","directiveDefs","pipeDefs","setInput","schemas","tView","directiveTypes","feature","pipeTypes","invertObject","extractDirectiveDef","extractPipeDef","getComponentDef","getDirectiveDef","getPipeDef$1","autoRegisterModuleById","declarations","transitiveCompileScopes","scope","ngModuleDef","getNgModuleDef","newLookup","minifiedKey","publicName","declaredName","ɵɵdefineDirective","ɵɵdefineComponent","pipeDef","throwNotFound","tNode","NgOnChangesFeatureImpl","definition","ngOnChangesSetInput","rememberChangeHistoryAndInvokeOnChangesHook","simpleChangesStore","getSimpleChangesStore","privateName","SIMPLE_CHANGES_STORE","setSimpleChangesStore","previousChange","SimpleChange","ɵɵNgOnChangesFeature","ngInherit","domRendererFactory3","rendererType","lView","unwrapRNode","nodeIndex","isLView","lContainer","viewOrContainer","instructionState","lFrame","createLFrame","bindingsEnabled","isInCheckNoChangesMode","viewToRestore","contextLView","currentTNode","getCurrentTNodePlaceholderOk","isParent","bindingRootIndex","bindingStartIndex","bindingIndex","isInI18nBlock","inI18n","currentDirectiveIndex","setCurrentDirectiveIndex","tData","currentQueryIndex","declTNode","parentTNode","parentLView","getDeclarationTNode","allocLFrame","newView","newLFrame","currentLFrame","childLFrame","elementDepthCount","currentNamespace","oldLFrame","leaveDI","leaveViewLight","getTNode","namespaceHTMLInternal","directiveStart","directiveEnd","lifecycleHooks","directiveDef","contentHooks","contentCheckHooks","viewHooks","viewCheckHooks","destroyHooks","callHooks","initPhase","currentView","currentNodeIndex","nodeIndexLimit","lastNodeIndexFound","callHook","isInitHook","hook","isViewProvider","injectImplementation","resolving","canSeeViewProviders","injectImpl","native","isProc","isProceduralRenderer","namespaceURI","attrVal","isAnimationProp","marker","srcMarker","mergeHostAttribute","key1","key2","markerInsertPosition","dstValue","parentLocation","startView","viewOffset","getParentInjectorViewOffset","parentView","includeViewProviders","oldValue","nextNgElementId","existingInjectorIndex","getInjectorIndex","firstCreatePass","injectorIndex","insertBloom","blueprint","parentLoc","getParentInjectorLocation","hasParentInjector","parentIndex","getParentInjectorIndex","getParentInjectorView","parentData","footer","declarationViewOffset","lViewCursor","tViewType","oe","bloomHash","bloomAdd","moduleInjector","previousInjectImplementation","setInjectImplementation","injectRootLimpMode","notFoundValueOrThrow","tokenId","createNodeInjector","bloomHashBitOrFactory","enterDI","lookupTokenUsingModuleInjector","previousTView","hostTElementNode","Be","shouldSearchParent","bloomHasToken","searchTokensOnInjector","NOT_FOUND","NodeInjector","getCurrentTNode","getLView","currentTView","injectableIdx","locateDirectiveOrProvider","isComponentHost","getNodeInjectable","canAccessViewProviders","isHostSpecialCase","nodeProviderIndexes","providerIndexes","tInjectables","injectablesStart","directivesStart","cptViewProvidersCount","providerTokenOrDef","dirDef","isComponentDef","NodeInjectorFactory","isFactory","depPath","throwCyclicDependencyError","previousIncludeViewProviders","setIncludeViewProviders","directiveIndex","wrappedOnChanges","preOrderHooks","preOrderCheckHooks","registerPreOrderHooks","injectorView","isFirstHostTNode","_tNode","_lView","getOrCreateInjectable","ownConstructor","ownFactory","getFactoryOf","objectPrototype","resolveForwardRef","getFactoryDef","attrNameToInject","attrsLength","isNameOnlyAttributeMarker","injectAttributeImpl","PARAMETERS","PROP_METADATA","parentClass","metaCtor","makeMetadataCtor","ParamDecoratorFactory","annotationInstance","ParamDecorator","annotation","unusedKey","ngMetadataName","annotationCls","additionalProcessing","PropDecoratorFactory","decoratorInstance","meta","_desc","ANALYZE_FOR_ENTRY_COMPONENTS","makePropDecorator","isViewQuery","Query","deepForEach","keyValueArray","keyValueArrayIndexOf","arrayInsert2","middle","_arrayIndexOfSorted","THROW_IF_NOT_FOUND","DI_DECORATOR_FLAG","NG_TEMP_TOKEN_PATH","NEW_LINE","SOURCE","USE_VALUE$1","_currentInjector","former","getInjectImplementation","injectInjectorOnly","flag","getInjectFlag","decorator","attachInjectFlag","makeParamDecorator","policy$1","trustedTypes","createPolicy","createHTML","createScript","createScriptURL","getPolicy$1","getPolicy","changingThisBreaksApplicationSecurity","SafeValueImpl","getTypeName","getSanitizationBypassType","trustedHtml","SafeHtmlImpl","trustedStyle","SafeStyleImpl","trustedScript","SafeScriptImpl","trustedUrl","SafeUrlImpl","trustedResourceUrl","SafeResourceUrlImpl","defaultDoc","inertDocumentHelper","InertDocumentHelper","trustedHTMLFromString","isDOMParserAvailable","DOMParserHelper","getInertBodyElement","inertDocument","inertHtml","inertBodyElement","templateEl","inertBody","documentMode","stripCustomNsAttrs","elAttrs","childNode","SAFE_URL_PATTERN","DATA_URL_PATTERN","_sanitizeUrl","tags","sets","VOID_ELEMENTS","tagSet","OPTIONAL_END_TAG_BLOCK_ELEMENTS","OPTIONAL_END_TAG_INLINE_ELEMENTS","VALID_ELEMENTS","URI_ATTRS","SRCSET_ATTRS","VALID_ATTRS","SKIP_TRAVERSING_CONTENT_IF_INVALID_ELEMENTS","sanitizedSomething","buf","sanitizeChildren","traverseContent","startElement","TEXT_NODE","endElement","checkClobberedElement","elAttr","sanitizeSrcset","encodeEntities","DOCUMENT_POSITION_CONTAINED_BY","SURROGATE_PAIR_REGEXP","NON_ALPHANUMERIC_REGEXP","inertBodyHelper","unsafeHtmlInput","getInertBodyHelper","unsafeHtml","mXSSAttempts","parsedHtml","SanitizingHtmlSerializer","getTemplateContent","safeHtml","isTemplateElement","HTML","STYLE","SCRIPT","RESOURCE_URL","getSanitizer","trustedHTMLFromStringBypass","allowSanitizationBypassAndThrow","unwrapSafeValue","_sanitizeHtml","unsafeUrl","unsafeResourceUrl","trustedScriptURLFromStringBypass","MONKEY_PATCH_KEY_NAME","readPatchedData","ERROR_ORIGINAL_ERROR","_console","originalError","_findOriginalError","errorLogger","ERROR_LOGGER","defaultErrorLogger","getErrorLogger","getOriginalError","COMMENT_DISALLOWED","COMMENT_DELIMITER","defaultScheduler","Important","DashCase","_icuContainerIterate","tIcuContainerNode","isLContainer","getNearestLContainer","lNodeToHandle","beforeNode","isComponent","rNode","nativeAppendChild","nativeInsertBefore","nativeRemoveNode","destroyNode","parentRElement","applyToElementOrContainer","applyView","applyContainer","createTextNode","escapeCommentText","namespaceUri","getNamespaceUri","declarationContainer","movedViews","declarationViewIndex","insertionLContainer","updateTransplantedViewCount","removeIndex","indexInContainer","viewToDetach","declarationLContainer","detachMovedView","removedLView","removeViewFromContainer","lQueries","rootView","lViewOrLContainer","cleanUpView","firstView","destroyViewTree","toCall","callContext","executeOnDestroys","tCleanup","cleanup","lCleanup","lastLCleanupIndex","idxOrTargetGetter","useCaptureOrSubIdx","processCleanups","getClosestRElement","getNativeByTNode","isMove","_getInsertInFrontOfRNodeWithI18n","_processI18nInsertBefore","getInsertInFrontOfRNodeWithNoI18n","getInsertInFrontOfRNodeWithI18n","processI18nInsertBefore","childRNode","childTNode","parentRNode","getParentRElement","getInsertInFrontOfRNode","nativeAppendOrInsertBefore","tNodeType","getBeforeNodeForView","elIcuContainerChild","getFirstNativeNode","rNodeOrLContainer","nextRNode","projectionNodes","getProjectionNodes","getLViewParent","componentView","projection","viewIndexInContainer","nextViewIndex","firstTNodeOfView","isHostElement","nativeParent","nativeParentNode","nativeRemoveChild","isProjection","rawSlotValue","attachPatchData","applyNodes","icuContainerIterate","applyProjectionRecursive","projectionNext","tProjectionNode","componentLView","nodeToProjectOrRNodes","componentNode","classToSearch","startingIndex","foundIndex","NG_TEMPLATE_SELECTOR","cssClassToMatch","isProjectionMode","classIndexOf","currentSelector","nodeAttrs","nameOnlyMarkerIdx","getNameOnlyMarkerIndex","skipToNextSelector","hasTagAndTypeMatch","isPositive","selectorAttrValue","isCssClassMatching","attrIndexInNode","findAttrIndexInNode","isInlineTemplate","nodeAttrValue","compareAgainstClassName","bindingsMode","maybeAttrName","matchTemplateAttribute","isNodeMatchingSelector","selectorListLoop","currentSelectorInList","isNegativeMode","currentChunk","valueOrMarker","attrValue","maybeWrapInNotSelector","NO_CHANGE","selectIndexInternal","getTView","getSelectedIndex","checkNoChangesMode","executeCheckHooks","executeInitAndCheckHooks","setSelectedIndex","tStylingRange","queryStartIdx","directiveDefIdx","setCurrentQueryIndex","tHostNode","resetPreOrderHookFlags","createTNodeAtIndex","getCurrentParentTNode","setCurrentTNode","isCurrentTNodeParent","tParent","insertBeforeIndex","directiveStylingLast","propertyBindings","localNames","initialInputs","tViews","stylesWithoutHost","residualStyles","classesWithoutHost","residualClasses","classBindings","styleBindings","createTNode","numSlotsToAlloc","initialValue","allocIdx","enterView","executeViewQueryFn","templateFn","executeTemplate","staticContentQueries","refreshContentQueries","staticViewQueries","hostLView","renderComponent$1","renderChildComponents","incompleteFirstPass","leaveView","isInCheckNoChangesPass","setBindingIndex","hooksInitPhaseCompleted","incrementInitPhaseFlags","getFirstLContainer","getNextLContainer","movedLView","markTransplantedViewsForRefresh","embeddedLView","embeddedTView","viewAttachedToChangeDetector","refreshView","refreshEmbeddedViews","hostBindingOpCodes","opCode","directiveIdx","bindingRootIndx","hostBindingFn","setBindingRootForHostBindings","processHostBindingOpCodes","refreshComponent","refreshChildComponents","firstUpdatePass","normalExecutionPath","creationModeIsActive","isCreationMode","renderView","prevSelectedIndex","isUpdatePhase","isContentQueryHost","getBindingsEnabled","getOrCreateNodeInjectorForNode","addComponentLogic","setInputsFromAttrs","getComponentLViewByIndex","instantiateAllDirectives","elementIndex","getCurrentDirectiveIndex","invokeHostBindingsInCreationMode","invokeDirectivesHostBindings","viewData","localRefExtractor","localIndex","createTView","constsOrFactory","initialViewLength","createViewBlueprint","expandoStartIndex","directiveRegistry","pipeRegistry","cleanupFn","getOrCreateLViewCleanup","getOrCreateTViewCleanup","inputAliasMap","propStore","internalName","nativeOnly","dataValue","inputData","setInputsForProperty","viewIndex","childComponentLView","markDirtyIfOnPush","mapPropName","localRefs","hasDirectives","registry","isNodeMatchingSelectorList","diPublicInInjector","markAsComponentHost","findDirectiveDefMatches","exportsMap","initTNodeFlags","preOrderHooksFound","preOrderCheckHooksFound","allocExpando","mergeHostAttrs","configureViewWithDirective","saveNameToExportMap","lifeCycleHooks","tViewData","tNodeAttrs","inputsFromAttrs","inputsStore","outputsStore","directiveInputs","generateInitialInputs","generatePropertyAliases","initializeInputAndOutputAliases","ngDevMode","cacheMatchingLocalNames","directiveVarsIdx","elementIndx","lastSelectedElementIdx","hostTNode","numberOfDirectives","directiveFactory","nodeInjectorFactory","registerHostBindingOpCodes","getOrCreateTComponentView","addToViewTree","createLView","strValue","initialInputData","inputsToStore","hostNative","componentHostIdx","refreshContainsDirtyView","componentTView","syncViewWithBlueprint","isRootView","rootContext","rootComponent","readPatchedLView","renderComponentOrTemplate","tickRootContext","viewQueryFn","CLEAN_PROMISE","currentDef","unwrapLView","errorHandler","ErrorHandler","getNativeByIndex","updateTextNode","writeToHost","concatStringsWithSpace","INJECTOR","INJECTOR_SCOPE","NOT_YET","CIRCULAR","NULL_INJECTOR$1","NullInjector","defType","additionalProviders","createInjectorWithoutInjectorInstances","_resolveInjectorDefTypes","R3Injector","getNullInjector","records","injectorDefTypes","dedupStack","processProvider","injectorDef","processInjectorType","makeRecord","assertNotDestroyed","service","previousInjector","setCurrentInjector","couldBeInjectableType","injectableDefInScope","injectableDefOrInjectorDefFactory","hydrate","injectorErrorName","tokenPath","formatError","NG_TOKEN_PATH","catchInjectorError","defOrWrappedDef","getInjectorDef","isDuplicate","importTypesWithProviders","imported","defProviders","injectorType","ngModuleType","isTypeProvider","isValueProvider","providerToFactory","providerToRecord","multiRecord","injectArgs","hasOnDestroy","paramLength","newArray","inheritedInjectableDef","typeName","getInheritedInjectableDef","getUndecoratedInjectableFactory","unwrappedProvider","isFactoryProvider","isExistingProvider","classRef","hasDeps","createInjector","NULL","registerPostOrderHooks","superType","getSuperType","shouldInheritFields","inheritanceChain","superDef","writeableDef","maybeUnwrapEmpty","superHostBindings","inheritHostBindings","superViewQuery","superContentQueries","inheritViewQuery","inheritContentQueries","fillProperties","defData","ɵɵInheritDefinitionFeature","mergeHostAttrsAcrossInheritance","prevViewQuery","prevContentQueries","prevHostBindings","_symbolIterator","isJsObject","exp1","exp2","different","bindingUpdated","exp3","bindingUpdated2","exp4","nextBindingIndex","setElementAttribute","elementAttributeInternal","getSelectedTNode","ɵɵattribute","v0","getBindingIndex","incrementBindingIndex","attrsIndex","localRefsIndex","adjustedIndex","tViewConsts","getOrCreateTNode","getConstant","resolveDirectives","templateFirstCreatePass","comment","createLContainer","isDirectiveHost","createDirectivesInstances","saveResolvedLocalsInData","getContextLView","elementPropertyInternal","ɵɵproperty","isClassBased","createElementNode","getNamespace$1","computeStaticStyling","elementStart","elementStartFirstCreatePass","setUpAttributes","writeDirectClass","writeDirectStyle","getElementDepthCount","increaseElementDepthCount","executeContentQueries","ɵɵelementStart","setCurrentTNodeAsNotParent","decreaseElementDepthCount","elementEnd","hasClassInput","setDirectiveInputsWhichShadowsStyling","hasStyleInput","ɵɵelementEnd","ɵɵelement","elementContainerStartFirstCreatePass","ɵɵelementContainerStart","ɵɵelementContainerEnd","ɵɵelementContainer","isSubscribable","listenerFn","useCapture","eventTargetResolver","listenerInternal","ɵɵlistener","loadComponentRenderer","getCurrentDirectiveDef","ɵɵsyntheticHostListener","isTNodeDirectiveHost","processOutputs","lCleanupIndex","existingListener","tNodeIdx","cleanupEventName","listenerIdxInLCleanup","findExistingListener","__ngLastListenerFn__","__ngNextListenerFn__","wrapListener","directiveInstance","profiler","wrapWithPreventDefault","markViewDirty","executeListenerWithErrorHandling","nextListenerFn","wrapListenerIn_markDirtyAndPreventDefault","nestingLevel","walkUpViews","nextContextImpl","projectionSlots","wildcardNgContentIndex","ngProjectAsAttrVal","ngProjectAsAttrIdx","getProjectAsAttrValue","isSelectorInSelectorList","projectionHeads","tails","componentChild","slotIndex","matchingProjectionSlotIndex","selectorIndex","applyProjection","ɵɵpropertyInterpolate1","ɵɵpropertyInterpolate","interpolatedValue","interpolation1","interpolation2","ɵɵpropertyInterpolate2","tStylingKey","isPrevDir","isClassBinding","tStylingAtIndex","getTStylingRangePrev","getTStylingRangeNext","foundDuplicate","tStyleRangeAtCursor","isStylingMatch","setTStylingRangeNextDuplicate","setTStylingRangePrevDuplicate","tStylingKeyCursor","parserState","textEnd","keyEnd","valueEnd","consumeClassToken","consumeWhitespace","checkStylingProperty","ɵɵstyleProp","ɵɵclassProp","checkStylingMap","keyValueArraySet","classStringParser","resetParserState","parseClassNameNext","parseClassName","getLastParsedKey","stylingFirstUpdatePass","updateStyling","normalizeSuffix","stringParser","hasStylingInputShadow","isInHostBindings","staticPrefix","oldKeyValueArray","newKeyValueArray","oldIndex","oldKey","newKey","setKey","updateStylingMap","styleKeyValueArray","unwrappedValue","toStylingKeyValueArray","isHostBindings","stylingKey","hostDirectiveDef","residual","collectStylingFromTAttrs","collectStylingFromDirectives","templateStylingKey","bindings","getTemplateHeadTStylingKey","setTemplateHeadTStylingKey","collectResidual","wrapInStaticStylingKey","tStylingKeyWithStatic","isHostBinding","tBindings","tmplHead","tmplTail","isKeyDuplicateOfStatic","staticKeyValueArray","previousNode","toTStylingRange","setTStylingRangeNext","setTStylingRangePrev","Te","markDuplicates","markDuplicateOfResidualStyling","insertTStylingBinding","currentDirective","desiredMarker","currentMarker","tRange","isStylingValuePresent","getTStylingRangeNextDuplicate","findStylingValue","getTStylingRangePrevDuplicate","isProcedural","removeProperty","isImportant","applyStyling","isPrevDirection","rawKey","containsStatics","isStylingMap","valueAtLViewIndex","keyValueArrayGet","textNative","ɵɵtextInterpolate1","ɵɵtextInterpolate","interpolated","textBindingInternal","ɵɵtextInterpolate2","bindingUpdated3","interpolation3","ɵɵtextInterpolate3","v3","bindingUpdated4","interpolation4","ɵɵtextInterpolate4","ɵɵhostProperty","ɵɵsyntheticHostProperty","localeEn","LOCALE_DATA","normalizedLocale","getLocaleData","findLocaleData","LocaleDataIndex","PluralCase","ng","common","LocaleId","DayPeriodsFormat","DayPeriodsStandalone","DaysFormat","DaysStandalone","MonthsFormat","MonthsStandalone","FirstDayOfWeek","WeekendRange","NumberSymbols","NumberFormats","CurrencyCode","CurrencySymbol","CurrencyName","Currencies","ExtraData","pluralMapping","DEFAULT_LOCALE_ID","ELEMENT_MARKER","ICU_MARKER","I18nCreateOpCode","APPEND_EAGERLY","COMMENT","LOCALE_ID$1","tNodeInsertBeforeIndex","i18nParent","anchorRNode","previousTNodes","newTNode","existingTNode","isI18nText","isNewTNodeCreatedBefore","getInsertBeforeIndex","setInsertBeforeIndex","setI18nHandling","addTNodeAndUpdateInsertBeforeIndex","tIcu","currentCase","currentCaseLViewIndex","mergedCode","changeMask","changeMaskCounter","mutableOpCodes","rootRNode","rootIdx","textNodeIndex","parentIdx","getParentFromIcuCreateOpCode","insertInFrontOf","refIdx","getRefFromIcuCreateOpCode","getTIcu","caseIndex","getCurrentICUCaseIndex","applyMutableOpCodes","anchorIdx","commentValue","commentNodeIndex","createCommentNode","elementNodeIndex","updateOpCodes","bindingsStartIndex","checkBit","skipCodes","sanitizeFn","tNodeOrTagName","rText","applyIcuSwitchCase","applyIcuUpdateCase","activeCaseIndex","applyUpdateOpCodes","icuExpression","bindingValue","cases","resolvedCase","getLocalePluralCase","getPluralCase","getCaseIndex","applyIcuSwitchCaseRemove","removeCodes","nodeOrIcuIndex","_stack","_removes","_index","removeOpCode","enterIcu","icuContainerIteratorNext","BINDING_REGEXP","NESTED_ICU","ICU_BLOCK_REGEXP","SUBTEMPLATE_REGEXP","PH_REGEXP","NGSP_UNICODE_REGEXP","rootTNode","existingTNodes","createOpCodes","isICU","i18nNodeIdx","ensureIcuContainerVisitorLoaded","loadIcuContainerVisitor","assertEqual","setTNodeInsertBeforeIndex","hasBinding","createTNodeAndAddOpCode","generateBindingUpdateOpCodes","destinationNode","bindingStart","maskIndex","sizeIndex","textParts","textValue","toMaskBit","tagMatched","inTemplate","bindingMask","mainBinding","addUpdateIcuSwitch","setTIcu","valueArr","nestedIcus","icuIndex","parseIcuCase","addUpdateIcuUpdate","icuType","i18nParseTextIntoPartsAndICU","blocks","prevPos","braceStack","braces","parseICUBlock","caseName","unsafeCaseHtml","inertRootNode","walkIcuTree","sharedUpdateOpCodes","addCreateNodeAndAppend","lowerAttrName","addCreateAttribute","addRemoveNode","COMMENT_NODE","isNestedIcu","icuStart","addRemoveNestedIcu","appendToParentIdx","createAtIdx","icuCreateOpCode","messageIndex","subTemplateIndex","parentTNodeIndex","existingTNodeStack","isRootTemplateMessage","removeInnerTemplateTranslation","getTranslationForTemplate","msgParts","replaceNgsp","i18nStartFirstCreatePassProcessTextNode","icuContainerTNode","isClosing","createTNodePlaceholder","i18nStartFirstCreatePass","tI18n","isComment","appendNow","applyCreateOpCodes","setInI18nBlock","ɵɵi18nStart","ɵɵi18nEnd","setMaskBit","hasChange","ɵɵi18nExp","applyI18n","lInjectablesBlueprint","resolveProvider","providerFactory","beginIndex","ɵɵdirectiveInject","existingFactoryIndex","registerDestroyHooksIfSupported","existingProvidersFactoryIndex","existingViewProvidersFactoryIndex","doesProvidersFactoryExist","doesViewProvidersFactoryExist","factoryFn","componentProviders","multiFactoryAdd","multiFactory","multiViewProvidersFactoryResolver","multiProvidersFactoryResolver","contextIndex","indexInFactory","providerIsTypeProvider","providerIsClassProvider","isClassProvider","existingCallbacksIndex","isComponentProvider","lData","multiResolve","factories","componentCount","multiProviders","viewProviders","processProvidersFn","ERROR_COMPONENT","noComponentFactoryError","ComponentFactoryResolver$1","_NullComponentFactoryResolver","createElementRef","injectElementRef","Renderer2","nodeAtIndex","getOrCreateRenderer2","injectRenderer2","Sanitizer","major","minor","NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR","lNode","lViewInAContainer","lViewFirstChildTNode","collectNativeNodes","nodesInSlot","_cdRefInjectingView","_attachedToViewContainer","viewRefs","destroyLView","storeCleanupWithContext","reattach","detectChangesInternal","checkNoChanges","setIsInCheckNoChangesMode","checkNoChangesInternal","attachToViewContainerRef","detachFromAppRef","renderDetachView","attachToAppRef","ViewRef$1","detectChangesInRootView","checkNoChangesInRootView","componentDef","ComponentFactory","nonMinified","templateName","ComponentFactory$1","componentType","selectorList","stringifyCSSSelector","stringifyCSSSelectorList","isBoundToModule","toRefArray","projectableNodes","rootSelectorOrNode","rootViewInjector","createChainedInjector","RendererFactory2","hostRenderer","elementName","hostRNode","elementOrSelector","selectRootElement","rElement","locateHostElement","getNamespace","rootFlags","playerHandler","clean","createRootContext","rootTView","rootLView","tElementNode","viewRenderer","createRootComponentView","extractAttrsAndClassesFromSelector","nodesforSlot","hostFeatures","instantiateRootComponent","createRootComponent","LifecycleHooksFeature","ComponentRef","_rootLView","RootViewRef","NgModuleRef$1","_bootstrapComponents","destroyCbs","maybeUnwrapFn","_r3Injector","injectFlags","NgModuleFactory$1","moduleType","visited","incoming","assertSameOrNotExisting","recurse","registerNgModuleType","slotOffset","pureFn","getBindingRoot","updateBinding","getBinding","pureFunction1Internal","pureFunction2Internal","pureFunction3Internal","pureFunction4Internal","exp5","returnValueIndex","lastReturnValue","bindingRoot","getPureFunctionReturnValue","pipeName","getPipeDef","pipeFactory","pipeInstance","isPure","v4","exps","pureFunctionVInternal","isAsync","__isAsync","nextFn","errorFn","completeFn","_wrapInTimeout","_emitDistinctChangesOnly","_changesDetected","_changes","symbolIterator","resultsTree","identityAccessor","newResultFlat","valueA","valueB","arrayEquals","notifyOnChanges","setDirty","injectTemplateRef","ViewEngineTemplateRef","R3TemplateRef","_declarationLView","_declarationTContainer","declarationViewLQueries","createTemplateRef","injectViewContainerRef","createContainerRef","VE_ViewContainerRef","R3ViewContainerRef","_lContainer","_hostTNode","_hostLView","getViewRefs","componentFactoryOrType","indexOrOptions","ngModuleRef","isComponentFactory","contextInjector","viewAttachedToContainer","prevIdx","prevLContainer","prevVCRef","adjustedIdx","_adjustIndex","containerLength","addToArray","declaredComponentLView","insertedLContainer","trackMovedView","insertView","parentNativeNode","addViewToContainer","getOrCreateViewRefs","viewRefsArr","commentNode","nativeNextSibling","queryList","LQuery_","tQueries","noOfInheritedQueries","viewLQueries","tQuery","getByIndex","indexInDeclarationView","LQueries_","dirtyQueriesWithMatches","getTQuery","read","queriesForTemplateRef","childQueryIndex","tqueryClone","TQueries_","tquery","metadata","crossesNgTemplate","_appliesToNextNode","_declarationNodeIndex","isApplyingToNode","matchTNode","addMatch","TQuery_","declarationNodeIdx","matchTNodeWithReadOption","getIdxOfMatchingSelector","nodeMatchIdx","directiveOrProviderIdx","matchIdx","matchingIdx","createResultByTNodeType","createSpecialToken","queryIndex","lQuery","tQueryMatches","matchedNodeIdx","createResultForNode","lViewResults","materializeViewResults","collectQueryResults","embeddedLViews","getCurrentQueryIndex","unwrapElementRef","createTQuery","TQueryMetadata_","createLQuery","tViewContentQueries","saveContentQueryAndDirectiveIndex","loadQueryInternal","bindingPropertyName","hostPropertyName","ApplicationInitStatus","appInits","donePromise","rej","runInitializers","asyncInitPromises","initResult","observableAsPromise","APP_ID","_randomChar","PLATFORM_INITIALIZER","APP_BOOTSTRAP_LISTENER","Console","$localize","getGlobalLocale","DEFAULT_CURRENCY_CODE","ngModuleFactory","componentFactories","Compiler","compileModuleSync","NgModuleFactory","compileModuleAsync","compileModuleAndAllComponentsSync","declaration","ModuleWithComponentFactories","compileModuleAndAllComponentsAsync","clearCache","clearCacheFor","getModuleId","enableLongStackTrace","shouldCoalesceEventChangeDetection","shouldCoalesceRunChangeDetection","hasPendingMacrotasks","hasPendingMicrotasks","onUnstable","onMicrotaskEmpty","assertZonePatched","_nesting","_outer","_inner","TaskTrackingZoneSpec","fork","longStackTraceZoneSpec","lastRequestAnimationFrameId","nativeRequestAnimationFrame","nativeCancelAnimationFrame","unpatchedRequestAnimationFrame","__symbol__","unpatchedCancelAnimationFrame","getNativeRequestAnimationFrame","delayChangeDetectionForEventsDelegate","isCheckStableRunning","fakeTopEventTask","scheduleEventTask","updateMicroTaskStatus","checkStable","delayChangeDetectionForEvents","isAngularZone","onInvokeTask","applyThis","applyArgs","onEnter","invokeTask","onLeave","onInvoke","onHasTask","hasTaskState","hasTask","_hasPendingMicrotasks","microTask","macroTask","onHandleError","forkInnerZoneWithAngularBehavior","isInAngularZone","runTask","EMPTY_PAYLOAD","cancelTask","runGuarded","Testability","_pendingCount","_isZoneStable","_didWork","_callbacks","taskTrackingZone","_watchAngularEvents","assertNotInAngularZone","_runCallbacksIfReady","increasePendingRequestCount","decreasePendingRequestCount","doneCb","getPendingTasks","updateCb","macroTasks","creationLocation","addCallback","whenStable","getPendingRequestCount","findProviders","using","exactMatch","TestabilityRegistry","_applications","_testabilityGetter","addToWindow","registerApplication","testability","unregisterApplication","unregisterAllApplications","getTestability","getAllTestabilities","getAllRootElements","findTestabilityInTree","findInAncestors","_NoopGetTestability","ALLOW_MULTIPLE_PLATFORMS","parentPlatformFactory","extraProviders","getPlatform","injectedProviders","PlatformRef","inits","createPlatform","requiredToken","assertPlatform","_modules","_destroyListeners","bootstrapModuleFactory","moduleFactory","ngZoneOption","extra","NoopNgZone","ngZoneEventCoalescing","ngZoneRunCoalescing","getNgZone","ngZoneInjector","moduleRef","exceptionHandler","_callAndReportToErrorHandler","initStatus","assertDefined","setLocaleId","_moduleDoBootstrap","compilerOptions","optionsReducer","compileNgModuleFactory","ngDoBootstrap","_exceptionHandler","_initStatus","_bootstrapListeners","_views","_runningTick","_stable","componentTypes","_onMicrotaskEmptySubscription","isCurrentlyStable","stableSub","unstableSub","assertInAngularZone","merge$1","share","componentOrFactory","cf","compRef","testabilityRegistry","_loadComponent","_devMode","injectChangeDetectorRef","isPipe","createViewRef","isListLikeIterable","trackByFn","DefaultIterableDiffer","trackByIdentity","_linkedRecords","_unlinkedRecords","_previousItHead","_itHead","_itTail","_additionsHead","_additionsTail","_movesHead","_movesTail","_removalsHead","_removalsTail","_identityChangesHead","_identityChangesTail","forEachItem","nextIt","nextRemove","addRemoveOffset","moveOffsets","getPreviousIndex","adjPreviousIndex","_nextRemoved","localMovePreviousIndex","localCurrentIndex","forEachPreviousItem","_nextPrevious","_nextAdded","forEachMovedItem","_nextMoved","_nextIdentityChange","itemTrackBy","mayBeDirty","trackById","_verifyReinsertion","_addIdentityChange","_mismatch","iterateListLike","_truncate","isDirty","previousRecord","_remove","_reinsertAfter","_moveAfter","_addAfter","IterableChangeRecord_","reinsertRecord","_addToMoves","nextRecord","_addToRemovals","_unlink","prevRecord","_prevRemoved","_insertAfter","_DuplicateMap","toIndex","_prevDup","_nextDup","_head","_tail","atOrAfterIndex","duplicates","_DuplicateItemRecordList","recordList","moveOffset","DefaultKeyValueDiffer","_records","_mapHead","_appendAfter","_previousMapHead","_changesHead","_changesTail","_nextChanged","_forEach","_maybeAddToChanges","_getOrCreateRecordForKey","_insertBeforeOrAppend","KeyValueChangeRecord_","_addToAdditions","_addToChanges","IterableDiffers","DefaultIterableDifferFactory","copied","defaultIterableDiffersFactory","DefaultKeyValueDifferFactory","defaultKeyValueDiffersFactory","kv","platformCore","createPlatformFactory","ApplicationModule","ɵɵdefineNgModule","ɵɵdefineInjector","BaseControlValueAccessor","onTouched","BuiltInControlValueAccessor","CHECKBOX_VALUE_ACCESSOR","CheckboxControlValueAccessor","DEFAULT_VALUE_ACCESSOR","DefaultValueAccessor","COMPOSITION_BUFFER_MODE","_compositionMode","_composing","ɵgetDOM","getUserAgent","_isAndroid","_handleInput","_compositionStart","_compositionEnd","NG_VALIDATORS","NG_ASYNC_VALIDATORS","EMAIL_REGEXP","isEmptyInputValue","minValidator","maxValidator","requiredValidator","requiredTrueValidator","emailValidator","minLength","hasValidLength","minlength","requiredLength","actualLength","minLengthValidator","maxLengthValidator","nullValidator","regexStr","requiredPattern","actualValue","patternValidator","validators","compose","composeAsync","maxlength","ɵisObservable","arrayOfErrors","validator","validate","isValidatorFn","presentValidators","isPresent","mergeErrors","executeValidators","normalizeValidators","controlValidators","dirValidator","_rawValidators","_rawAsyncValidators","currentValidators","makeValidatorsArray","validatorsToAdd","hasValidator","_onDestroyCallbacks","pristine","untouched","statusChanges","_setValidators","_composedValidatorFn","composeValidators","_setAsyncValidators","_composedAsyncValidatorFn","composeAsyncValidators","asyncValidator","_registerOnDestroy","_invokeOnDestroyCallbacks","errorCode","getError","AbstractControlDirective","formDirective","cd","_cd","submitted","NgControlStatus","AbstractControlStatus","NgControl","NgControlStatusGroup","ControlContainer","setUpValidators","_pendingValue","_pendingChange","_pendingDirty","updateOn","setUpViewChangePipeline","emitModelEvent","viewToModelUpdate","_unregisterOnChange","setUpModelChangePipeline","_pendingTouched","setUpBlurPipeline","onDisabledChange","registerOnDisabledChange","_unregisterOnDisabledChange","setUpDisabledChangeHandler","validateControlPresenceOnChange","cleanUpValidators","_registerOnCollectionChange","registerOnValidatorChange","getControlValidators","mergeValidators","asyncValidators","getControlAsyncValidators","setAsyncValidators","onValidatorChange","isControlUpdated","updatedValidators","updatedAsyncValidators","emitModelToViewChange","viewModel","_syncPendingControls","valueAccessors","defaultAccessor","builtinAccessor","customAccessor","VALID","PENDING","DISABLED","validatorOrOpts","isOptionsObj","isFormControl","isFormGroup","FormArray","getRawValue","isGroup","_forEachChild","_hasOwnPendingAsyncValidator","_onCollectionChange","_onDisabledChange","coerceToValidator","coerceToAsyncValidator","validatorFn","asyncValidatorFn","_updateOn","addValidators","addAsyncValidators","removeValidators","removeAsyncValidators","hasAsyncValidator","clearAsyncValidators","markAllAsTouched","markAsUntouched","_updateTouched","markAsPristine","_updatePristine","markAsPending","skipPristineCheck","_parentMarkedDirty","_updateValue","_updateAncestors","changeFn","setParent","_setInitialStatus","_cancelExistingSubscription","_runValidator","_calculateStatus","_runAsyncValidator","_updateTreeValidity","ctrl","_allControlsDisabled","_asyncValidationSubscription","setErrors","_updateControlsErrors","delimiter","controlToFind","_find","_initObservables","_anyControlsHaveStatus","_anyControls","_anyControlsDirty","_anyControlsTouched","_isBoxedValue","formState","_setUpdateStrategy","AbstractControl","pickValidators","pickAsyncValidators","_onChange","_applyFormState","initialValueIsDefault","emitViewToModelChange","removeListItem","_setUpControls","registerControl","controlName","assertAllValuesPresent","assertControlPresent","_reduceChildren","subtreeUpdated","_reduceValue","initValue","_registerControl","removeAt","formDirectiveProvider$1","NgForm","resolvedPromise$1","_directives","ngSubmit","_findContainer","setUpControl","getControl","addFormGroup","setUpFormContainer","removeFormGroup","getFormGroup","updateModel","onSubmit","syncPendingControls","onReset","resetForm","AbstractFormGroupDirective","_checkParentType","controlPath","formControlBinding$1","NgModel","resolvedPromise","_registered","selectValueAccessor","_checkForErrors","_checkName","oldName","_getPath","_setUpControl","_updateDisabled","isPropertyUpdated","_isStandalone","_setUpStandalone","disabledValue","ɵNgNoValidate","NUMBER_VALUE_ACCESSOR","NumberValueAccessor","RadioControlRegistryModule","NG_MODEL_WITH_FORM_CONTROL_WARNING","formControlBinding","FormControlDirective","_ngModelWarningConfig","_ngModelWarningSent","_isControlChanged","previousForm","cleanUpControl","_ngModelWarningSentOnce","formDirectiveProvider","FormGroupDirective","_updateDomValue","_checkFormPresent","_updateValidators","_updateRegistrations","_oldForm","_setUpFormContainer","_cleanUpFormContainer","addFormArray","removeFormArray","getFormArray","oldCtrl","newCtrl","cleanUpFormContainer","formGroupNameProvider","FormGroupName","_hasInvalidParent","formArrayNameProvider","FormArrayName","controlNameBinding","_added","SELECT_VALUE_ACCESSOR","SelectControlValueAccessor","_optionMap","_idCounter","_compareWith","valueString","_buildValueString$1","_getOptionId","_getOptionValue","_registerOption","_extractId$1","NgSelectOption","_select","ngValue","_setElementValue","SELECT_MULTIPLE_VALUE_ACCESSOR","SelectMultipleControlValueAccessor","optionSelectedStateSetter","_setSelected","_extractId","ɵNgSelectMultipleOption","_buildValueString","AbstractValidatorDirective","_validator","inputName","normalizeInput","createValidator","REQUIRED_VALIDATOR","RequiredValidator","CHECKBOX_REQUIRED_VALIDATOR","CheckboxRequiredValidator","toBoolean","MAX_LENGTH_VALIDATOR","MaxLengthValidator","ɵInternalFormsSharedModule","warnOnNgModelWithFormControl","FormBuilder","controlsConfig","_reduceControls","isAbstractControlOptions","_createControl","controlConfig","_rollupMoment__default","_rollupMoment","useUtc","valueFunction","valuesArray","dateLocale","momentLocaleData","_localeData","longMonths","shortMonths","longDaysOfWeek","shortDaysOfWeek","narrowDaysOfWeek","getYear","getDayOfWeek","getMonthNames","getDateNames","getDayOfWeekNames","getYearName","getFirstDayOfWeek","getNumDaysInMonth","_createMoment","displayFormat","addCalendarYears","addCalendarMonths","addCalendarDays","toIso8601","deserialize","isDateInstance","MomentDateModule","_uniqueAutocompleteIdCounter","_MatAutocompleteMixinBase","mixinDisableRipple","MAT_AUTOCOMPLETE_DEFAULT_OPTIONS","autoActiveFirstOption","_MatAutocompleteBase","_activeOptionChanges","showPanel","_isOpen","displayWith","optionSelected","optionActivated","inertGroups","_autoActiveFirstOption","isOpen","coerceStringArray","_setVisibilityClasses","_keyManager","ActiveDescendantKeyManager","_setVisibility","_setScrollTop","panel","_getScrollTop","_emitSelectEvent","MatAutocompleteSelectedEvent","_getPanelAriaLabelledby","labelId","ariaLabelledby","_visibleClass","_hiddenClass","MatAutocomplete","MAT_OPTGROUP","MatOption","MAT_OPTION_PARENT_COMPONENT","MAT_AUTOCOMPLETE_SCROLL_STRATEGY_FACTORY_PROVIDER","MAT_AUTOCOMPLETE_VALUE_ACCESSOR","_MatAutocompleteTriggerBase","_formField","_defaults","_componentDestroyed","_autocompleteDisabled","_manuallyFloatingLabel","_viewportSubscription","_canOpenOnNextFocus","_closeKeyEventStream","_windowBlurHandler","_onTouched","autocompleteAttribute","_overlayAttached","optionSelections","onSelectionChange","autocompleteDisabled","_setStrategyPositions","_destroyPanel","openPanel","_floatLabel","closePanel","_resetLabel","_closingActionsSubscription","panelClosingActions","_getOutsideClickStream","MatOptionSelectionChange","activeOption","clickTarget","formField","customOrigin","_setTriggerValue","_handleKeydown","hasModifier","_selectViaInteraction","_resetActiveItem","prevActiveItem","isArrowKey","_canOpen","_scrollToOption","_previousValue","_handleFocus","_handleClick","shouldAnimate","floatLabel","_animateAndLockLabel","_subscribeToClosingActions","firstStable","optionChanges","wasOpen","_setValueAndClose","toDisplay","inputValue","_control","_clearPreviousSelectedOption","_getConnectedElement","_getPanelWidth","_portal","getLabelId","_getOverlayConfig","_getOverlayPosition","overlayPanelClass","belowPositions","_aboveClass","abovePositions","getConnectedOverlayOrigin","panelWidth","_getHostWidth","readOnly","labelCount","_countGroupLabelsBeforeOption","optionGroups","_getHostElement","newScrollPosition","_getOptionScrollPosition","i2$1","MAT_FORM_FIELD","MatOptionModule","MAT_BUTTON_TOGGLE_DEFAULT_OPTIONS","MAT_BUTTON_TOGGLE_GROUP","MAT_BUTTON_TOGGLE_GROUP_VALUE_ACCESSOR","MatButtonToggleGroup","uniqueIdCounter","_changeDetector","_controlValueAccessorChangeFn","_buttonToggles","_markForCheck","vertical","_selectionModel","_setSelectionByValue","SelectionModel","MatButtonToggleChange","_syncButtonToggle","isUserInput","deferEvents","_updateModelValue","_isSelected","_isPrechecked","_rawValue","_clearSelection","_selectValue","correspondingOption","MatButtonToggle","_MatButtonToggleBase","toggleGroup","defaultTabIndex","_isSingleSelector","_checked","parsedTabIndex","buttonToggleGroup","buttonId","_appearance","_buttonElement","_onButtonClick","newChecked","BUTTON_HOST_ATTRIBUTES","_MatButtonBase","mixinDisabled","MatButton","_animationMode","isRoundButton","_hasHostAttributes","isIconButton","_isRippleDisabled","disableRipple","MatRipple","MatCardTitle","MatCard","MatCardHeader","MAT_CHECKBOX_DEFAULT_OPTIONS","MAT_CHECKBOX_DEFAULT_OPTIONS_FACTORY","clickAction","MAT_CHECKBOX_CONTROL_VALUE_ACCESSOR","MatCheckbox","_MatCheckboxBase","mixinTabIndex","_uniqueId","labelPosition","indeterminateChange","_currentAnimationClass","_currentCheckState","_indeterminate","inputId","_required","focusOrigin","_syncIndeterminate","indeterminate","_transitionCheckState","_onLabelTextChange","_getAriaChecked","newState","oldState","_getAnimationClassForCheckStateTransition","animationClass","MatCheckboxChange","_inputElement","_onInputClick","_onInteractionEvent","animSuffix","nativeCheckbox","_MatCheckboxRequiredValidatorModule","MAT_CHIP_REMOVE","MAT_CHIP_AVATAR","MAT_CHIP_TRAILING_ICON","_MatChipMixinBase","MatChipBase","MatChip","globalRippleOptions","_hasFocus","chipListSelectable","_chipListMultiple","_chipListDisabled","_selectable","_removable","selectionChange","_addHostClassName","_chipRippleTarget","_chipRipple","RippleRenderer","setupTriggerEvents","rippleConfig","_animationsDisabled","rippleDisabled","coercedValue","_dispatchSelectionChange","removable","ariaSelected","basicChipAttrName","_removeTriggerEvents","selectViaInteraction","_blur","MAT_RIPPLE_GLOBAL_OPTIONS","MAT_CHIPS_DEFAULT_OPTIONS","_MatChipListBase","mixinErrorState","_defaultErrorStateMatcher","_parentForm","_parentFormGroup","MatChipList","controlType","_lastDestroyedChipIndex","_uid","_tabIndex","_userTabIndex","ariaOrientation","_syncChipsState","_initializeSelection","_chipInput","stateChanges","_placeholder","_hasFocusedChip","chips","shouldLabelFloat","chipSelectionChanges","chipFocusChanges","chipBlurChanges","chipRemoveChanges","FocusKeyManager","_allowFocusEscape","_resetChips","_updateTabIndex","_updateFocusForDestroyedChips","updateErrorState","_dropSubscriptions","setDescribedByIds","_ariaDescribedby","onContainerClick","_originatesFromChip","_focusInput","_keydown","newChipIndex","_isValidIndex","_sortValues","correspondingChip","_propagateChanges","valueToEmit","MatChipListChange","_markAsTouched","_listenToChipsFocus","_listenToChipsSelection","_listenToChipsRemoved","_chipFocusSubscription","_chipBlurSubscription","_chipSelectionSubscription","_chipRemoveSubscription","chipIndex","MatFormFieldControl","separatorKeyCodes","AnimationCurves","STANDARD_CURVE","DECELERATION_CURVE","ACCELERATION_CURVE","SHARP_CURVE","AnimationDurations","COMPLEX","ENTERING","EXITING","MATERIAL_SANITY_CHECKS","_sanityChecks","_hasDoneGlobalChecks","_checkIsEnabled","_color","colorPalette","_disableRipple","errorState","errorStateMatcher","_pendingSubscribers","_notifySubscriber","_markInitialized","_localeChanges","localeChanges","getValidDateOrNull","compareDate","sameDate","firstValid","secondValid","clampDate","ISO_8601_REGEX","NativeDateAdapter","matDateLocale","useUtcForDisplay","_createDateWithOverflow","_2digit","MAT_NATIVE_DATE_FORMATS","NativeDateModule","MatLine","setClass","Ie","fadeOut","fadeOutRipple","defaultRippleAnimationConfig","enterDuration","exitDuration","passiveEventOptions","pointerDownEvents","pointerUpEvents","_isPointerDown","_activeRipples","_pointerUpEventsRegistered","fadeInRipple","animationConfig","centered","distX","distY","distanceToFurthestCorner","ripple","enforceStyleRecalculation","rippleRef","RippleRef","persistent","_mostRecentTransientRipple","_runTimeoutOutsideZone","isMostRecentTransientRipple","wasActive","rippleEl","fadeOutAll","fadeOutAllNonPersistent","_triggerElement","_registerEvents","_onPointerUp","isFakeMousedown","isSyntheticEvent","_lastTouchStartEvent","terminateOnPointerUp","eventTypes","_globalOptions","_rippleRenderer","_setupTriggerEventsIfEnabled","_trigger","launch","configOrX","MatPseudoCheckbox","_uniqueIdCounter","_MatOptionBase","_active","_mostRecentViewValue","_stateChanges","_emitSelectionChangeEvent","_getAriaSelected","_getTabIndex","optionIndex","optionsArray","groupCounter","optionOffset","optionHeight","currentScrollPosition","panelHeight","_cellClicked","_r5","activeDate","_dateSelected","_r8","_monthSelectedInYearView","_goToDateInView","_yearSelectedInMultiYearView","displayValue","compareValue","MatCalendarBody","numCols","activeCell","isRange","cellAspectRatio","previewStart","previewEnd","selectedValueChange","previewChange","_enterHandler","_skipNextFocus","_getCellFromElement","_leaveHandler","columnChanges","_firstRowOffset","_cellPadding","_cellWidth","_isActiveCell","colIndex","cellNumber","_focusActiveCell","movePreview","_isRangeStart","isStart","_isRangeEnd","_isInRange","isInRange","_isComparisonStart","comparisonStart","comparisonEnd","_isComparisonBridgeStart","previousCell","previousRow","_isComparisonBridgeEnd","_isComparisonEnd","nextCell","nextRow","_isInComparisonRange","_isComparisonIdentical","_isPreviewStart","_isPreviewEnd","_isInPreview","isTableCell","rangeEnabled","MatDateSelectionModel","_adapter","_selectionChanged","selectionChanged","updateSelection","_isValidDateInstance","MatSingleDateSelectionModel","MatRangeDateSelectionModel","DateRange","Jt","MAT_SINGLE_DATE_SELECTION_MODEL_PROVIDER","MAT_RANGE_DATE_SELECTION_MODEL_PROVIDER","MAT_DATE_RANGE_SELECTION_STRATEGY","DefaultMatCalendarRangeStrategy","_dateAdapter","selectionFinished","currentRange","createPreview","MAT_CALENDAR_RANGE_STRATEGY_PROVIDER","MatMonthView","_dateFormats","_rangeStrategy","_rerenderSubscription","selectedChange","_userSelection","activeDateChange","_activeDate","oldActiveDate","validDate","_hasSameMonthAndYear","_setRanges","_minDate","_maxDate","comparisonChange","selectedYear","selectedMonth","rangeStartDate","rangeEndDate","_getDateInCurrentMonth","_previewStart","_previewEnd","_handleCalendarBodyKeydown","_selectionKeyPressed","_canSelect","_handleCalendarBodyKeyup","_todayDate","_getCellCompareValue","_monthLabel","monthLabel","firstOfMonth","_firstWeekOffset","_initWeekdays","_createWeekCells","_matCalendarBody","_previewChanged","previewRange","narrowWeekdays","dateNames","_weeks","_shouldEnableDate","cellClasses","dateClass","MatCalendarCell","dateFilter","d1","d2","selectedValue","_rangeStart","_rangeEnd","_isRange","_comparisonRangeStart","_comparisonRangeEnd","MatMultiYearView","yearSelected","isSameMultiYearView","_setSelectedYear","_todayYear","minYearOfPage","activeYear","getActiveOffset","_years","_createCellForYear","_yearSelected","yearsPerPage","_getActiveCell","yearName","_shouldEnableYear","_selectedYear","dateAdapter","year1","year2","startingYear","getStartingYear","euclideanModulo","MatYearView","monthSelected","_setSelectedMonth","_monthSelected","normalizedDate","_todayMonth","_getMonthInCurrentYear","_yearLabel","monthNames","_createCellForMonth","_shouldEnableMonth","_isYearAndMonthAfterMaxDate","_isYearAndMonthBeforeMinDate","maxYear","maxMonth","minYear","minMonth","_selectedMonth","MatDatepickerIntl","calendarLabel","openCalendarLabel","closeCalendarLabel","prevMonthLabel","nextMonthLabel","prevYearLabel","nextYearLabel","prevMultiYearLabel","nextMultiYearLabel","switchToMonthViewLabel","switchToMultiYearViewLabel","formatYearRange","MatCalendarHeader","_intl","_buttonDescriptionId","periodButtonText","maxYearOfPage","minYearName","maxYearName","periodButtonLabel","prevButtonLabel","nextButtonLabel","currentPeriodClicked","previousClicked","nextClicked","previousEnabled","_isSameView","nextEnabled","MatCalendar","_moveFocusOnNextTick","viewChanged","_intlChanges","startAt","_startAt","_clampedActiveDate","_currentView","viewChangedResult","_calendarHeaderPortal","headerComponent","focusActiveCell","_getCurrentViewComponent","updateTodaysDate","normalizedYear","normalizedMonth","monthView","yearView","multiYearView","i7","i8","matDatepickerAnimations","transformPanel","keyframes","fadeInCalendar","datepickerUid","MAT_DATEPICKER_SCROLL_STRATEGY","MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER","_MatDatepickerContentBase","MatDatepickerContent","_globalModel","_rangeSelectionStrategy","_animationDone","_actionsPortal","_closeButtonText","_model","_animationState","datepicker","touchUi","_handleUserSelection","_startExitAnimation","_getSelected","_applyPendingSelection","MatDatepickerBase","_inputStateChanges","_touchUi","xPosition","yPosition","_restoreFocus","openedStream","closedStream","_opened","_focusedElementBeforeOpen","_backdropHarnessClass","datepickerInput","getStartValue","getThemePalette","restoreFocus","_panelClass","_getMinDate","_getMaxDate","_getDateFilter","_setConnectedPositions","_destroyOverlay","_selectYear","_selectMonth","_viewChanged","registerActions","removeActions","_openOverlay","completeClose","_forwardContentValues","_dialogLabelId","getOverlayLabelId","isDialog","_getDialogStrategy","_getDropdownStrategy","_getCloseStream","primaryX","secondaryX","primaryY","secondaryY","i9","MatDatepicker","MatDatepickerInputBase","dateChange","_validatorOnChange","_cvaOnChange","_valueChangesSubscription","_localeSubscription","_parseValidator","_lastValueValid","matDatepickerParse","_filterValidator","controlValue","_matchesFilter","matDatepickerFilter","_minValidator","matDatepickerMin","_maxValidator","matDatepickerMax","_assignValueProgrammatically","_getValueFromModel","_parentDisabled","_getValidators","_registerModel","_assignValue","_shouldHandleChangeEvent","_isValidValue","_formatValue","MatDatepickerInputEvent","dateInputsHaveChanged","isAltDownArrow","_openPopup","_onInput","lastValueWasValid","hasChanged","_assignValueToModel","MAT_DATEPICKER_VALUE_ACCESSOR","MatDatepickerInput","MAT_DATEPICKER_VALIDATORS","dateFormats","_closedSubscription","matDatepicker","_datepicker","validValue","_dateFilter","wasMatchingValue","modelValue","MAT_INPUT_VALUE_ACCESSOR","MatDatepickerToggleIcon","MatDatepickerToggle","_watchStateChanges","_open","datepickerStateChanged","inputStateChanged","datepickerToggled","_c3","MAT_DATE_RANGE_INPUT_PARENT","_MatDateRangeInputBase","_rangeInput","_getPlaceholder","_handleChildValueChange","_openDatepicker","_groupDisabled","_startInput","_endInput","MatDateRangeInputPartBase","i2$2","MatStartDate","rangeInput","defaultErrorStateMatcher","parentForm","parentFormGroup","_startValidator","matStartDateInvalid","getMirrorValue","MatEndDate","_endValidator","matEndDateInvalid","MatDateRangeInput","_ariaDescribedBy","rangePicker","_rangePicker","wasMatchingStart","wasMatchingEnd","_revalidate","startEmpty","endEmpty","_getInputMirrorValue","_shouldHidePlaceholders","_shouldHideSeparator","_shouldLabelFloat","_getAriaLabelledby","_hasFloatingLabel","_labelId","_updateFocus","MatDateRangePicker","ariaDescribedBy","ariaLabelledBy","delayFocusTrap","closeOnNavigation","matDialogAnimations","dialogContainer","animateChild","optional","_MatDialogContainerBase","_interactivityChecker","_animationStateChanged","_elementFocusedBeforeDialogWasOpened","_closeInteractionType","_ariaLabelledBy","_initializeWithAttachedContent","_focusTrap","_recaptureFocus","_containsFocus","_trapFocus","_forceFocus","_focusByCssSelector","elementToFocus","focusedSuccessfully","_focusDialogContainer","previousElement","MatDialogContainer","_state","_onAnimationDone","_onAnimationStart","_containerInstance","_afterOpened","_afterClosed","_beforeClosed","_closeFallbackTimeout","_finishDialogClose","_result","componentInstance","_closeDialogVia","dialogResult","afterOpened","beforeClosed","_getPositionStrategy","interactionType","MAT_DIALOG_DEFAULT_OPTIONS","MAT_DIALOG_SCROLL_STRATEGY","MAT_DIALOG_SCROLL_STRATEGY_PROVIDER","_MatDialogBase","_parentDialog","_dialogRefConstructor","_dialogContainerType","_dialogDataToken","_openDialogsAtThisLevel","_afterAllClosedAtThisLevel","_afterOpenedAtThisLevel","_ariaHiddenElements","afterAllClosed","openDialogs","_getAfterAllClosed","componentOrTemplateRef","_applyConfigDefaults","getDialogById","_attachDialogContainer","_attachDialogContent","_hideNonDialogContentFromAssistiveTechnology","_removeOpenDialog","_closeDialogs","containerPortal","_createInjector","contentRef","userInjector","overlayContainer","siblings","dialogs","MatDialog","parentDialog","MatDialogRef","dialogElementUid","MatDialogTitle","_dialogRef","_dialog","getClosestDialog","MatDialogContent","MatDivider","_inset","inset","nextId$1","CDK_ACCORDION","CdkAccordion","_openCloseAllActions","_multi","openAll","CdkAccordionItem","accordion","_expansionDispatcher","_openCloseAllSubscription","expandedChange","_expanded","_removeUniqueSelectionListener","accordionId","_subscribeToOpenCloseAllActions","CdkAccordionModule","MAT_ACCORDION","EXPANSION_PANEL_ANIMATION_TIMING","matExpansionAnimations","indicatorRotate","bodyExpansion","MatExpansionPanelContent","MAT_EXPANSION_PANEL_DEFAULT_OPTIONS","MatExpansionPanel","_uniqueSelectionDispatcher","_hideToggle","afterExpand","afterCollapse","_inputChanges","_headerId","_bodyAnimationDone","fromState","hideToggle","togglePosition","_togglePosition","_hasSpacing","displayMode","_getExpandedState","_lazyContent","_body","focusedElement","bodyElement","_MatExpansionPanelHeaderMixinBase","MatExpansionPanelHeaderBase","MatExpansionPanelHeader","_parentChangeSubscription","accordionHideToggleChange","expandedHeight","collapsedHeight","_toggle","_isExpanded","_getPanelId","_getTogglePosition","_showToggle","_getHeaderHeight","isExpanded","_handleHeaderKeydown","_handleHeaderFocus","MatExpansionPanelTitle","MatAccordion","_ownHeaders","_headers","_r10","updateOutlineGap","_r16","nextUniqueId$2","MAT_ERROR","MatError","ariaLive","matFormFieldAnimations","transitionMessages","_MAT_HINT","MatLabel","MatPlaceholder","MAT_PREFIX","MatPrefix","MAT_SUFFIX","MatSuffix","_MatFormFieldBase","MAT_FORM_FIELD_DEFAULT_OPTIONS","MatFormField","_outlineGapCalculationNeededImmediately","_outlineGapCalculationNeededOnStable","_showAlwaysAnimate","_subscriptAnimationState","_hintLabel","_hintLabelId","_getDefaultFloatLabelState","_animationsEnabled","_hideRequiredMarker","hideRequiredMarker","_shouldAlwaysFloat","_canLabelFloat","hintLabel","_processHints","_explicitFormFieldControl","_controlNonStatic","_controlStatic","_connectionContainerRef","_validateControlChild","_validatePlaceholders","_syncDescribedByIds","_prefixChildren","_suffixChildren","_hintChildren","_errorChildren","_shouldForward","_hasPlaceholder","_placeholderChild","_hasLabel","_labelChildNonStatic","_labelChildStatic","_hideControlPlaceholder","_getDisplayedMessages","_label","_validateHints","userAriaDescribedBy","startHint","hint","endHint","labelEl","outlineStartSelector","outlineGapSelector","gapElements","_isAttachedToDOM","startWidth","gapWidth","startEls","gapEls","containerStart","_getStartEnd","labelChildren","labelStart","labelWidth","outlineGapPadding","ttWindow","iconName","svgText","MatIconRegistry","_httpClient","_errorHandler","_svgIconConfigs","_iconSetConfigs","_cachedIconsByUrl","_inProgressUrlFetches","_fontCssClassesByAlias","_resolvers","_defaultFontSetClass","addSvgIcon","addSvgIconInNamespace","addSvgIconLiteral","addSvgIconLiteralInNamespace","_addSvgIconConfig","SvgIconConfig","addSvgIconResolver","cleanLiteral","getMatIconFailedToSanitizeLiteralError","trustedLiteral","addSvgIconSet","addSvgIconSetInNamespace","addSvgIconSetLiteral","addSvgIconSetLiteralInNamespace","_addSvgIconSetConfig","registerFontClassAlias","classNameForFontAlias","setDefaultFontSetClass","getDefaultFontSetClass","getSvgIconFromUrl","safeUrl","getMatIconFailedToSanitizeUrlError","cachedIcon","cloneSvg","_loadSvgIconFromConfig","getNamedSvgIcon","iconKey","_getSvgFromConfig","_getIconConfigFromResolvers","iconSetConfigs","_getSvgFromIconSetConfigs","getMatIconNameNotFoundError","_svgElementFromConfig","namedIcon","_extractIconWithNameFromAnySet","iconSetFetchRequests","iconSetConfig","_loadSvgIconSetFromConfig","foundIcon","_extractSvgIconFromSet","_fetchIcon","iconSet","iconSource","iconElement","_setSvgAttributes","_toSvgElement","_svgElementFromString","iconConfig","getMatIconNoHttpProviderError","inProgressFetch","configNamespace","isSafeUrlWithOptions","_MatIconBase","MAT_ICON_LOCATION","getPathname","funcIriAttributes","funcIriAttributeSelector","funcIriPattern","MatIcon","_iconRegistry","ariaHidden","_inline","_currentIconFetch","svgIcon","_svgIcon","_updateSvgIcon","_clearSvgElement","fontSet","_fontSet","_cleanupFontValue","_updateFontIconClasses","fontIcon","_fontIcon","_splitIconName","cachedElements","_elementsWithExternalReferences","_previousPath","_prependPathToReferences","_usingFontIcon","_setSvgElement","styleTags","_cacheChildrenWithExternalReferences","layoutElement","childCount","fontSetClass","_previousFontSetClass","_previousFontIconClass","elementsWithFuncIri","elementWithReference","rawName","_svgNamespace","_svgName","listenerOptions","AutofillMonitor","_monitoredElements","animationName","isAutofilled","unlisten","TextFieldModule","MAT_INPUT_INVALID_TYPES","_MatInputBase","MatInput","inputValueAccessor","_autofillMonitor","autofilled","_type","_readonly","_neverEmptyInputTypes","getSupportedInputTypes","_inputValueAccessor","_previousNativeValue","setSelectionRange","_isServer","_isNativeSelect","_isTextarea","_isInFormField","_validateType","readonly","_dirtyCheckNativeValue","_dirtyCheckPlaceholder","_focusChanged","_previousPlaceholder","_isNeverEmpty","_isBadInput","validity","badInput","selectElement","firstOption","_isInlineSelect","matMenuAnimations","transformMenu","fadeInItems","MAT_MENU_CONTENT","MAT_MENU_PANEL","_MatMenuItemBase","MatMenuItem","_parentMenu","_hovered","_focused","_highlighted","_triggersSubmenu","addItem","_checkDisabled","_handleMouseEnter","icons","_setHighlighted","isHighlighted","MAT_MENU_DEFAULT_OPTIONS","overlapTrigger","menuPanelUid","_MatMenuBase","_xPosition","_yPosition","_directDescendantItems","_tabSubscription","_panelAnimationState","_overlapTrigger","panelId","setPositionClasses","previousPanelClass","_previousPanelClass","_updateDirectDescendants","focusedItem","itemsList","_item","parentMenu","focusFirstItem","lazyContent","_focusFirstItem","resetActiveItem","setElevation","elevation","_baseElevation","newElevation","_elevationPrefix","customElevation","_previousElevation","posX","posY","_startAnimation","_resetAnimation","_isAnimating","_allItems","MatMenu","MAT_MENU_SCROLL_STRATEGY","MAT_MENU_SCROLL_STRATEGY_FACTORY_PROVIDER","passiveEventListenerOptions","_MatMenuTriggerBase","_menuItemInstance","_menuOpen","_hoverSubscription","_menuCloseSubscription","_handleTouchStart","_openedBy","menuOpened","onMenuOpen","menuClosed","onMenuClose","_parentMaterialMenu","triggersSubmenu","_deprecatedMatMenuTriggerFor","menu","_menu","_destroyMenu","_checkMenu","_handleHover","menuOpen","toggleMenu","closeMenu","openMenu","_setPosition","_getPortal","menuData","_menuClosingActions","_initMenu","_attached","_setIsMenuOpen","_setMenuElevation","_subscribeToPositions","originFallbackX","overlayFallbackY","originFallbackY","overlayFallbackX","parentClose","_handleMousedown","asapScheduler","i3$1","MatMenuTrigger","MAT_RADIO_DEFAULT_OPTIONS","MAT_RADIO_GROUP_CONTROL_VALUE_ACCESSOR","MatRadioGroup","MAT_RADIO_GROUP","_MatRadioGroupBase","_labelPosition","_updateRadioButtonNames","_markRadiosForCheck","_updateSelectedRadioFromValue","_checkSelectedRadioButton","_touch","_radios","MatRadioChange","MatRadioButton","_MatRadioButtonMixinBase","MatRadioButtonBase","_MatRadioButtonBase","radioGroup","_radioDispatcher","_providerOverride","newCheckedState","_setDisabled","_onInputInteraction","groupValueChanged","focusMonitor","radioDispatcher","providerOverride","_panelDoneAnimatingStream","matSelectAnimations","transformPanelWrap","SELECT_PANEL_MAX_HEIGHT","MAT_SELECT_SCROLL_STRATEGY","MAT_SELECT_CONFIG","MAT_SELECT_SCROLL_STRATEGY_PROVIDER","_MatSelectMixinBase","MAT_SELECT_TRIGGER","_MatSelectBase","_parentFormField","_liveAnnouncer","_panelOpen","_triggerAriaLabelledBy","_valueId","_overlayPanelClass","_disableOptionCentering","disableOptionCentering","optionSelectionChanges","openedChange","_openedStream","_closedStream","typeaheadDebounceInterval","_typeaheadDebounceInterval","_panelDoneAnimating","_initKeyManager","_resetOptions","newAriaLabelledby","_getTriggerAriaLabelledby","_previousControl","_highlightCorrectOption","triggerValue","_handleOpenKeydown","_handleClosedKeydown","isOpenKey","previouslySelectedOption","hasDeselectedOptions","previouslyFocusedIndex","_onAttached","_overlayDir","_positioningSettled","_getPanelTheme","_scrollOptionIntoView","changedOrDestroyed","_onSelect","wasSelected","sortComparator","_getChangeEvent","_getAriaActiveDescendant","MatSelect","_scrollTop","_triggerFontSize","_transformOrigin","_positions","_calculateOverlayScroll","scrollBuffer","maxScroll","itemHeight","_getItemHeight","_triggerRect","_calculateOverlayPosition","_calculateOverlayOffsetX","MatSelectChange","viewportSize","paddingWidth","SELECT_MULTIPLE_PANEL_PADDING_X","SELECT_PANEL_PADDING_X","leftOverflow","rightOverflow","_calculateOverlayOffsetY","optionHeightAdjustment","maxOptionsDisplayed","optionOffsetFromPanelTop","_getItemCount","_checkOverlayWithinViewport","topSpaceAvailable","bottomSpaceAvailable","panelHeightTop","panelHeightBottom","_adjustPanelUp","_adjustPanelDown","_getOriginBasedOnOption","distanceBelowViewport","distanceAboveViewport","selectedOptionOffset","MAT_SNACK_BAR_DATA","announcementMessage","MAX_TIMEOUT","containerInstance","_afterDismissed","_onAction","_dismissedByAction","onAction","dismiss","_onExit","_finishDismiss","exit","_durationTimeoutId","dismissWithAction","closeWithAction","_dismissAfter","dismissedByAction","afterDismissed","_onEnter","SimpleSnackBar","snackBarRef","hasAction","MatSnackBarRef","matSnackBarAnimations","snackBarState","MatSnackBarContainer","snackBarConfig","_announceDelay","_onAnnounce","_assertNotAttached","_applySnackBarClasses","_live","_role","onAnimationEnd","_completeExit","enter","_screenReaderAnnounce","_announceTimeoutId","panelClasses","inertElement","liveElement","MatSnackBarConfig","MAT_SNACK_BAR_DEFAULT_OPTIONS","_MatSnackBarBase","_breakpointObserver","_parentSnackBar","_defaultConfig","_snackBarRefAtThisLevel","_openedSnackBarRef","openFromComponent","_attach","openFromTemplate","simpleSnackBarComponent","_attachSnackBarContainer","snackBarContainerComponent","containerRef","userConfig","handsetCssClass","_animateSnackBar","i3$2","MatSnackBar","breakpointObserver","parentSnackBar","MatSortHeaderIntl","MAT_SORT_HEADER_INTL_PROVIDER","MAT_SORT_DEFAULT_OPTIONS","_MatSortBase","mixinInitialized","MatSort","sortables","sortChange","disableClear","_disableClear","sortable","getNextSortDirection","sortDirectionCycle","sortOrder","getSortDirectionCycle","nextDirectionIndex","MatTable","MatCellDef","MatHeaderCellDef","MatColumnDef","MatHeaderCell","MatCell","MatHeaderRowDef","MatRowDef","MatHeaderRow","MatRow","DataSource","initialData","_renderData","_internalPageChanges","_renderChangesSubscription","sortingDataAccessor","sortHeaderId","numberValue","sortData","valueAType","valueBType","comparatorResult","filterPredicate","currentTerm","transformedFilter","_updateChangeSubscription","_filterData","_sort","paginator","_paginator","pageChange","filteredData","orderedData","_orderData","paginatedData","_pageData","_updatePaginator","pageIndex","filteredDataLength","lastPageIndex","newPageIndex","_MatTableDataSource","tab_r4","_r13","_tabFocusChanged","_removeTabBodyWrapperHeight","_setTabBodyWrapperHeight","_MAT_INK_BAR_POSITIONER","MatInkBar","_inkBarPositioner","alignToElement","_setStyles","inkBar","MAT_TAB_CONTENT","MAT_TAB_LABEL","MAT_TAB","_MatTabBase","MAT_TAB_GROUP","MatTab","_closestTabGroup","textLabel","_contentPortal","templateLabel","_templateLabel","_setTemplateLabelInput","_explicitContent","_implicitContent","_closestTab","matTabsAnimations","translateTab","MatTabBodyPortal","_centeringSub","_leavingSub","_beforeCentering","_isCenterPosition","isCentering","_content","_afterLeavingCenter","MatTabBody","_MatTabBodyBase","_dirChangeSubscription","_translateTabComplete","_onCentering","_onCentered","animationDuration","_computePositionAnimationState","_positionIndex","_computePositionFromOrigin","_onTranslateTabStarted","_getLayoutDirection","MAT_TABS_CONFIG","_MatTabLabelWrapperBase","MatTabLabelWrapper","getOffsetLeft","getOffsetWidth","MatPaginatedTabHeader","_scrollDistance","_selectedIndexChanged","_showPaginationControls","_disableScrollAfter","_disableScrollBefore","_stopScrolling","disablePagination","_selectedIndex","selectFocusedIndex","indexFocused","_stopInterval","_previousPaginator","_handlePaginatorPress","_nextPaginator","dirChange","realign","_alignInkBarToSelectedTab","newFocusIndex","_setTabFocus","_tabLabelCount","_scrollToLabel","_checkScrollingControls","_scrollDistanceChanged","_updateTabScrollPosition","focusIndex","_itemSelected","_onContentChanges","_currentTextContent","_checkPaginationEnabled","_tabListContainer","scrollDistance","_tabList","_scrollTo","_scrollHeader","_handlePaginatorClick","labelIndex","selectedLabel","viewLength","labelBeforePos","labelAfterPos","_tabListInner","beforeVisiblePos","afterVisiblePos","_getMaxScrollDistance","selectedLabelWrapper","_inkBar","mouseEvent","maxScrollDistance","_MatTabHeaderBase","MatTabHeader","_c4","_c7","_MatTabGroupMixinBase","_MatTabGroupBase","_tabs","_indexToSelect","_tabBodyWrapperHeight","_tabsSubscription","_tabLabelSubscription","headerPosition","selectedIndexChange","focusChange","selectedTabChange","_groupId","dynamicHeight","contentTabIndex","_dynamicHeight","_animationDuration","_contentTabIndex","_backgroundColor","indexToSelect","_clampTabIndex","isFirstRun","_createChangeEvent","_tabBodyWrapper","_subscribeToAllTabChanges","_subscribeToTabLabels","tabs","_allTabs","realignInkBar","_tabHeader","focusTab","MatTabChangeEvent","_getTabLabelId","_getTabContentId","tabHeight","tabHeader","MatTabGroup","_c8","_c9","i7$1","PANEL_CLASS","passiveListenerOptions","MAT_TOOLTIP_SCROLL_STRATEGY","MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER","MAT_TOOLTIP_DEFAULT_OPTIONS","showDelay","hideDelay","touchendHideDelay","_MatTooltipBase","_ariaDescriber","_viewInitialized","_pointerExitEventsInitialized","_cssClassPrefix","_showDelay","_hideDelay","touchGestures","_message","_passiveListeners","_updatePosition","_tooltipInstance","_setupPointerEnterEventsIfNeeded","_mouseLeaveHideDelay","_isTooltipVisible","_updateTooltipMessage","tooltipClass","_tooltipClass","_setTooltipClass","_touchstartTimeout","_showTimeoutId","_hideTimeoutId","_tooltipComponent","afterHidden","scrollableAncestors","_updateCurrentPositionClass","_handleBodyInteraction","disableTooltipInteractivity","_getOrigin","_addOffset","originPosition","_invertPosition","overlayPosition","_currentPosition","classPrefix","_platformSupportsMouseEvents","_setupPointerExitEventsIfNeeded","_disableNativeGesturesIfNecessary","_addListeners","exitListeners","newTarget","_wheelListener","touchendListener","elementUnderPointer","elementFromPoint","userSelect","msUserSelect","webkitUserSelect","MozUserSelect","webkitUserDrag","touchAction","webkitTapHighlightColor","MatTooltip","scrollDispatcher","ariaDescriber","TooltipComponent","_TooltipComponentBase","_visibility","_closeOnInteraction","_isVisible","_onHide","_toggleVisibility","_handleMouseLeave","_onShow","_handleAnimationEnd","_showAnimation","_hideAnimation","_finalizeAnimation","toVisible","tooltip","_tooltip","showClass","hideClass","_isHandset","NG_DEV_MODE$1","NoopAnimationPlayer","ɵAnimationGroupPlayer","driver","preStyles","postStyles","normalizedKeyframes","previousKeyframe","kf","isSameOffset","normalizedKeyframe","normalizePropertyName","normalizeStyleValue","animationFailed","copyAnimationEvent","makeAnimationEvent","triggerName","separatorPos","_contains","elm1","elm2","_query","_documentElement","getParentElement","_CACHED_BODY","_IS_WEBKIT","getBodyNode","containsVendorPrefix","containsElement","invokeQuery","NoopAnimationDriver","validateStyleProperty","matchesElement","_selector","computeStyle","previousPlayers","scrubberAccessRequested","AnimationDriver","NOOP","ENTER_CLASSNAME","LEAVE_CLASSNAME","NG_TRIGGER_CLASSNAME","NG_TRIGGER_SELECTOR","NG_ANIMATING_CLASSNAME","NG_ANIMATING_SELECTOR","_convertTimeValueToMS","allowNegativeValues","invalidTimingValue","delayMatch","easingVal","containsErrors","negativeStepValue","negativeDelayValue","parseTimeExpression","readPrototype","copyObj","styleAttrValue","getStyleAttributeString","camelCaseToDashCase","formerStyles","camelProp","dashCaseToCamelCase","writeStyleAttribute","PARAM_REGEX","varName","localVal","invalidParamValue","DASH_CASE_REGEXP","visitor","visitTrigger","visitState","visitTransition","visitSequence","visitGroup","visitAnimate","visitKeyframes","visitStyle","visitReference","visitAnimateChild","visitAnimateRef","visitQuery","visitStagger","invalidNodeType","transitionValue","expressions","eventStr","invalidTransitionAlias","parseAnimationAlias","invalidExpression","makeLambdaFromStates","parseInnerTransitionStr","TRUE_BOOLEAN_VALUES","FALSE_BOOLEAN_VALUES","lhs","rhs","LHS_MATCH_BOOLEAN","RHS_MATCH_BOOLEAN","lhsMatch","rhsMatch","SELF_TOKEN_REGEX","warnings","AnimationAstBuilderVisitor","_driver","AnimationAstBuilderContext","_resetContextStyleTimingState","ast","visitDslNode","normalizeAnimationEntry","unsupportedCSSPropertiesFound","currentQuerySelector","collectedStyles","queryCount","depCount","transitions","invalidTrigger","stateDef","invalidDefinition","styleAst","astParams","containsDynamicStyles","missingSubs","stylesObj","extractStyleParams","metadataName","invalidState","matchers","parseTransitionExpr","normalizeAnimationOptions","furthestTime","innerAst","timingAst","makeTimingAst","resolveTiming","dynamic","constructTimingAst","currentAnimateTimings","styleMetadata","newStyleData","_styleAst","isEmptyStep","_makeStyleAst","_validateStyleAst","styleTuple","invalidStyleValue","collectedEasing","styleData","styleMap","tuple","collectedEntry","updateCollectedStyle","firstStart","firstEnd","secondStart","secondEnd","invalidParallelAnimation","invalidStyleParams","validateStyleParams","invalidKeyframes","totalKeyframesWithOffsets","offsetsOutOfOrder","keyframesOutOfRange","offsetVal","consumeOffset","invalidOffset","keyframeOffsetsOutOfOrder","generatedOffset","keyframesMissingOffsets","animateDuration","durationUpToThisFrame","parentSelector","currentQuery","includeSelf","hasAmpersand","normalizeSelector","getOrSetAsInMap","originalSelector","invalidStagger","currentTransition","normalizeParams","preStyleProps","postStyleProps","subTimeline","_map","instructions","existingInstructions","ENTER_TOKEN_REGEX","LEAVE_TOKEN_REGEX","rootElement","enterClassName","leaveClassName","startingStyles","finalStyles","subInstructions","AnimationTimelineBuilderVisitor","buildKeyframes","ElementInstructionMap","AnimationTimelineContext","currentTimeline","timelines","timeline","containsAnimation","lastRootTimeline","allowOnlyTimelineStyles","createTimelineInstruction","elementInstructions","innerContext","createSubContext","_visitSubInstructions","transformIntoNewTimeline","resolveTimingValue","instruction","instructionTimings","appendInstructionToTimeline","updateOptions","subContextCount","snapshotCurrentStyles","DEFAULT_NOOP_PREVIOUS_NODE","delayNextStep","applyStylesToKeyframe","innerTimelines","mergeTimelineCollectedStyles","_visitTiming","incrementTime","getCurrentStyleProperties","forwardFrame","applyEmptyStep","innerTimeline","forwardTime","elms","currentQueryTotal","sameElementTimeline","parentContext","currentStaggerTime","startingTime","_enterClassName","_leaveClassName","initialTimeline","TimelineBuilder","skipIfExists","newOptions","optionsToUpdate","paramsToUpdate","_copyOptions","oldParams","newTime","updatedTimings","builder","SubTimelineBuilder","stretchStartingKeyframe","invalidQuery","_elementTimelineStylesLookup","_previousKeyframe","_currentKeyframe","_keyframes","_styleSummary","_pendingStyles","_backFill","_currentEmptyStepKeyframe","_localTimelineStyles","_globalTimelineStyles","_loadKeyframe","hasPreStyleStep","_updateStyle","allStyles","copyStyles","flattenStyles","getFinalKeyframe","details0","details1","finalKeyframes","keyframe","finalKeyframe","preProps","postProps","kf0","kf1","_stretchStartingKeyframe","newKeyframes","startingGap","newFirstKeyframe","oldFirstKeyframe","roundOffset","decimalPoints","mult","AnimationStyleNormalizer","userProvidedProperty","normalizedProperty","strVal","DIMENSIONAL_PROP_MAP","valAndSuffixMatch","invalidCssUnitValue","makeBooleanMap","isRemovalTransition","fromStyles","toStyles","queriedElements","EMPTY_OBJECT","_triggerName","_stateStyles","nextState","matchFns","oneOrMoreTransitionsMatch","buildStyles","stateName","backupStateStyler","stateStyler","backupStyles","currentOptions","nextOptions","skipAstBuild","transitionAnimationParams","currentStateStyles","nextAnimationParams","nextStateStyles","preStyleMap","postStyleMap","isRemoval","animationOptions","buildAnimationTimelines","createTransitionInstruction","queriedElementsList","defaultParams","combinedParams","_normalizer","transitionFactories","AnimationStateStyles","balanceProperties","AnimationTransitionFactory","fallbackTransition","createFallbackTransition","containsQueries","matchTransition","matchStyles","EMPTY_INSTRUCTION_MAP","bodyNode","_animations","_playersById","buildAnimationAst","registerFailed","_buildPlayer","normalizeKeyframes","autoStylesMap","oi","missingOrDestroyedAnimation","createAnimationFailed","optimizeGroupPlayer","_getPlayer","missingPlayer","baseEvent","listenOnPlayer","QUEUED_CLASSNAME","DISABLED_CLASSNAME","EMPTY_PLAYER_ARRAY","NULL_REMOVAL_STATE","namespaceId","setForRemoval","setForMove","hasAnimation","removedBeforeQueried","NULL_REMOVED_QUERIED_STATE","REMOVAL_FLAG","isObj","normalizeTriggerValue","absorbOptions","VOID_VALUE","DEFAULT_STATE_VALUE","StateValue","_engine","_triggers","_queue","_elementListeners","_hostClassName","phase","missingTrigger","missingEvent","isTriggerEventValid","unsupportedTriggerEvent","triggersWithStates","statesByElement","afterFlush","_getTrigger","unregisteredTrigger","defaultToFallback","TransitionAnimationPlayer","k1","k2","objEquals","reportError","eraseStyles","playersOnElement","playersByElement","queued","isFallbackTransition","totalQueuedPlayers","stateMap","clearElementCache","elementPlayers","_signalRemovalForInnerTriggers","namespaces","fetchNamespacesByElement","triggerLeaveAnimation","afterFlushAnimationsDone","destroyAfterComplete","triggerStates","previousTriggersValues","markElementAsRemoved","processLeaveNode","prepareLeaveAnimationListeners","elementStates","visitedTriggers","removeNode","engine","childElementCount","containsPotentialParentTransition","totalAnimations","currentPlayers","playersByQueriedElement","removalFlag","destroyInnerAnimations","_onRemovalComplete","insertNode","drainQueuedTransitions","microtaskId","Lt","markedForDestroy","d0","elementContainsData","containsData","newHostElements","disabledNodes","_namespaceLookup","_namespaceList","_flushFns","_whenQuietFns","namespacesByHostElement","collectedEnterElements","collectedLeaveElements","onRemovalComplete","queuedPlayers","createNamespace","AnimationTransitionNamespace","_balanceNamespaceList","collectEnterElement","namespaceList","ancestor","ancestorNs","registerTrigger","_fetchNamespace","nsId","isElementNode","markElementAsDisabled","hostNS","_buildInstruction","subTimelines","skipBuildAst","containerElement","destroyActiveAnimationsForElement","finishActiveQueriedAnimationOnElement","whenRenderingDone","cleanupFns","_flushAnimations","quietFns","he","triggerTransitionsFailed","skippedPlayers","skippedPlayersMap","queuedInstructions","allPreStyleElements","allPostStyleElements","disabledElementsSet","nodesThatAreDisabled","allTriggerElements","enterNodeMap","buildRootMap","enterNodeMapIds","allLeaveNodes","mergedLeaveNodes","leaveNodesWithoutAnimations","za","leaveNodeMapIds","leaveNodeMap","allPlayers","erroneousTransitions","nodeIsOrphaned","stringMap","setVal","transitionFailed","allPreviousPlayersMap","animationElementMap","_beforeAnimationBuild","_getPreviousPlayers","prevPlayer","replaceNodes","replacePostStylesAsPre","postStylesMap","cloakAndComputeStyles","preStylesMap","pre","rootPlayers","subPlayers","NO_PARENT_ANIMATION_ELEMENT_DETECTED","overrideTotalTime","parentWithAnimation","parentsToAdd","detectedParent","innerPlayer","_buildAnimation","setRealPlayer","parentPlayers","playersForElement","syncPlayerEvents","queriedPlayerResults","queriedInnerElements","queriedPlayers","activePlayers","removeNodesAfterAnimationDone","isQueriedElement","toStateValue","queriedElementPlayers","isRemovalAnimation","targetNameSpaceId","targetTriggerName","timelineInstruction","realPlayer","getRealPlayer","allQueriedPlayers","allConsumedElements","allSubElements","allNewPlayers","finalPlayers","_flattenGroupPlayersRecur","flattenGroupPlayers","wrappedPlayer","currentValues","deleteOrUnsetInMap","_player","_containsRealPlayer","_queuedCallbacks","_queueEvent","valuesMap","elementPropsMap","defaultStyle","cloakVals","cloakElement","failedElements","roots","rootMap","nodeSet","localRootMap","postEntry","preEntry","_triggerCache","_transitionEngine","TransitionAnimationEngine","_timelineEngine","TimelineAnimationEngine","componentId","triggerBuildFailed","AnimationTrigger","buildTrigger","onInsert","onRemove","disableAnimations","parseTimelineCommand","eventPhase","SpecialCasedStyles","_startStyles","_endStyles","initialStyles","initialStylesByElement","_initialStyles","isNonAnimatableStyle","_specialStyles","_initialized","currentSnapshot","_duration","_delay","_preparePlayerBeforeStart","domPlayer","_triggerWebAnimation","_finalKeyframe","_resetDomPlayerState","playerOptions","previousStyles","previousWebAnimationPlayers","WebAnimationsPlayer","allowPreviousPlayerStylesMerge","previousStyleProps","startingKeyframe","missingStyleProps","balancePreviousStylesIntoKeyframes","specialStyles","startStyles","endStyles","filterNonAnimatableStyles","packageNonAnimatableStyles","BrowserAnimationBuilder","AnimationBuilder","rootRenderer","_nextAnimationId","issueAnimationCommand","BrowserAnimationFactory","AnimationFactory","RendererAnimationPlayer","_command","_listen","DISABLE_ANIMATIONS_FLAG","AnimationRendererFactory","_currentId","_microtaskId","_animationCallbacksBuffer","_rendererCache","_cdRecurDepth","BaseAnimationRenderer","animationTriggers","AnimationRenderer","_scheduleCountTask","scheduleListenerCallback","refChild","oldChild","selectorOrNode","preserveContent","resolveElementFromTarget","dotIndex","parseTriggerCallbackName","InjectableAnimationEngine","ɵAnimationEngine","SHARED_ANIMATION_PROVIDERS","ɵAnimationStyleNormalizer","ɵWebAnimationsStyleNormalizer","ɵDomRendererFactory2","BROWSER_ANIMATIONS_PROVIDERS","ɵWebAnimationsDriver","BROWSER_NOOP_ANIMATIONS_PROVIDERS","ɵNoopAnimationDriver","ɵDomAdapter","supportsDOMEvents","GenericBrowserDomAdapter","ɵsetRootDomAdapter","BrowserDomAdapter","onAndCancel","getDefaultDocument","createHtmlDocument","isShadowRoot","DocumentFragment","getBaseElementHref","urlParsingNode","pathName","relativePath","resetBaseElement","getCookie","TRANSITION_ID","SERVER_TRANSITION_PROVIDERS","transitionId","setTestabilityGetter","BrowserGetTestability","ɵglobal","testabilities","didWork","decrement","didWork_","BrowserXhr","EVENT_MANAGER_PLUGINS","plugins","_eventNameToPlugin","_plugins","plugin","_findPluginFor","addGlobalEventListener","getZone","SharedStylesHost","_stylesSet","addStyles","additions","onStylesAdded","getAllStyles","DomSharedStylesHost","_hostNodes","_addStylesToHost","styleNodes","styleEl","addHost","hostNode","removeHost","styleNode","NAMESPACE_URIS","xhtml","xmlns","math","COMPONENT_REGEX","compId","DomRendererFactory2","eventManager","sharedStylesHost","appId","rendererByCompId","defaultRenderer","DefaultDomRenderer2","EmulatedEncapsulationDomRenderer2","applyToHost","ShadowDomRenderer","removeAttributeNS","decoratePreventDefault","contentAttr","componentShortId","shimContentAttribute","hostAttr","shimHostAttribute","hostEl","nodeOrShadowRoot","DomEventsPlugin","EventManagerPlugin","MODIFIER_KEYS","_keyMap","Del","Esc","Right","Up","Down","Menu","Scroll","Win","_chromeNumKeyPadMap","K","MODIFIER_KEY_GETTERS","KeyEventsPlugin","parseEventName","parsedEvent","outsideHandler","eventCallback","fullKey","domEventName","_normalizeKey","keyIdentifier","getEventKey","modifierGetter","getEventFullKey","keyName","platformBrowser","ɵPLATFORM_BROWSER_ID","makeCurrent","ɵsetDocument","BROWSER_MODULE_PROVIDERS","ɵINJECTOR_SCOPE","XhrFactory","DomSanitizer","DomSanitizerImpl","ɵallowSanitizationBypassAndThrow","ɵunwrapSafeValue","ɵ_sanitizeHtml","ɵgetSanitizationBypassType","ɵ_sanitizeUrl","ɵbypassSanitizationTrustHtml","bypassSecurityTrustStyle","ɵbypassSanitizationTrustStyle","bypassSecurityTrustScript","ɵbypassSanitizationTrustScript","ɵbypassSanitizationTrustUrl","ɵbypassSanitizationTrustResourceUrl","domSanitizerImplFactory","EmptyError","EmptyErrorImpl","seed","hasSeed","ScanOperator","ScanSubscriber","_seed","TakeLastOperator","TakeLastSubscriber","ring","errorFactory","defaultErrorFactory","ThrowIfEmptyOperator","ThrowIfEmptySubscriber","DefaultIfEmptyOperator","DefaultIfEmptySubscriber","hasDefaultValue","defaultIfEmpty","throwIfEmpty","RouterEvent","navigationTrigger","restoredState","urlAfterRedirects","shouldActivate","routeConfig","routerEvent","PRIMARY_OUTLET","ParamsAsMap","NAVIGATION_CANCELING_ERROR","segmentGroup","pathMatch","hasChildren","equalArraysOrString","aSorted","bSorted","pathCompareMap","exact","containee","matrixParams","equalPath","matrixParamsMatch","numberOfChildren","equalSegmentGroups","subset","containsSegmentGroup","paramCompareMap","shallowEqual","ignored","fragment","containsSegmentGroupHelper","containeePaths","containerPaths","containeeSegment","queryParamMap","_queryParamMap","convertToParamMap","DEFAULT_SERIALIZER","serialize","serializePaths","parameterMap","_parameterMap","serializePath","bs","UrlParser","UrlTree","parseRootSegment","parseQueryParams","parseFragment","tree","serializeSegment","strParams","encodeUriQuery","serializeQueryParams","encodeURI","encodeUriFragment","DefaultUrlSerializer","childOutlet","mapChildrenIntoArray","encodeUriString","decode","encodeUriSegment","serializeMatrixParams","SEGMENT_RE","QUERY_PARAM_RE","QUERY_PARAM_VALUE_RE","consumeOptional","peekStartsWith","UrlSegmentGroup","parseChildren","parseQueryParam","parseSegment","parseParens","matchSegments","parseMatrixParams","parseParam","valueMatch","matchQueryParams","matchUrlQueryParamValue","decodedKey","decodeQuery","decodedVal","currentVal","allowPrimary","outletName","_root","pathFromRoot","findNode","findPath","cc","Tree","setRouterState","urlTree","activated","ActivatedRouteSnapshot","RouterStateSnapshot","TreeNode","createEmptyStateSnapshot","emptyUrl","emptyParams","emptyData","emptyQueryParams","ActivatedRoute","RouterState","futureSnapshot","_futureSnapshot","_routerState","_paramMap","paramsInheritanceStrategy","inheritingStartingFrom","_resolvedData","flattenInherited","urlSegment","lastPathIndex","_urlSegment","_lastPathIndex","_resolve","serializeNode","nextSnapshot","shallowEqualArrays","equalUrlParams","equalSegments","equalParamsAndUrlSegments","routeReuseStrategy","prevState","shouldReuseRoute","createNode","createOrReuseChildren","shouldAttach","detachedRouteHandle","retrieve","createActivatedRoute","segmentPath","oldRoot","oldSegmentGroup","newSegmentGroup","qp","newRoot","replaceSegment","oldSegment","isAbsolute","numberOfDoubleDots","commands","isMatrixParams","cmdWithOutlet","isCommandWithOutlets","toRoot","processChildren","updateSegmentGroupChildren","currentCommandIndex","currentPathIndex","noMatch","pathIndex","commandIndex","prefixedWith","slicedCommands","createNewSegmentGroup","getOutlets","updateSegmentGroup","createNewSegmentChildren","futureState","currState","forwardEvent","activate","parentContexts","futureRoot","currRoot","deactivateChildRoutes","advanceActivatedRoute","activateChildRoutes","futureNode","currNode","contexts","nodeChildrenAsMap","futureChild","childOutletName","deactivateRoutes","childName","deactivateRouteAndItsChildren","shouldDetach","detachAndStoreRouteSubtree","deactivateRouteAndOutlet","onOutletDeactivated","deactivate","attachRef","activateRoutes","ActivationEnd","ChildActivationEnd","getOrCreateContext","stored","onOutletReAttached","_loadedConfig","parentLoadedConfig","cmpFactoryResolver","activateWith","INITIAL_VALUE","scan","isPending","innerAcc","isUrlTree","ChildrenOutletContexts","onChildOutletCreated","onChildOutletDestroyed","OutletContext","RouterOutlet","_activatedRoute","activateEvents","deactivateEvents","isActivated","activatedRoute","activatedRouteData","childContexts","OutletInjector","ɵEmptyOutletComponent","parentPath","validateNode","getFullPath","fullPath","validateConfig","standardizeConfig","sortedConfig","getOutlet","noMatch$1","consumedSegments","remainingSegments","positionalParamSegments","defaultUrlMatcher","slicedSegments","relativeLinkResolution","emptyPathMatch","containsEmptyPathMatchesWithNamedOutlets","primarySegment","_sourceSegment","_segmentIndexShift","createChildrenForEmptyPaths","containsEmptyPathMatches","addEmptyPathsToChildrenIfNeeded","rawSegment","NoMatch$1","newTree","AbsoluteRedirect","configLoader","urlSerializer","allowRedirects","splitGroup","rootSegmentGroup","expandSegmentGroup","createUrlTree","squashSegmentGroup","noMatchError","rootCandidate","expandChildren","expandSegment","childOutlets","sortedRoutes","sortByMatchingOutlets","expandedChild","takeLast","last$1","expanded$","expandSegmentAgainstRoute","noLeftoversInUrl","isImmediateMatch","redirectTo","matchSegmentAgainstRoute","expandSegmentAgainstRouteUsingRedirect","expandWildCardWithParamsAgainstRouteUsingRedirect","expandRegularSegmentAgainstRouteUsingRedirect","applyRedirectCommands","absoluteRedirect","lineralizeSegments","newSegments","rawSegmentGroup","cfg","getChildConfig","routerConfig","childModule","splitSegmentGroup","matchedOnOutlet","LoadedRouterConfig","runCanLoadGuards","shouldLoadResult","navigationCancelingError","canLoadFails","canLoad","canLoadObservables","injectionToken","guardVal","isCanLoad","wrapIntoObservable","prioritizedGuardValue","applyRedirectCreatreUrlTree","createSegmentGroup","createQueryParams","redirectToParams","actualParams","sourceName","updatedSegments","createSegments","redirectToSegments","actualSegments","findPosParam","findOrReturn","redirectToUrlSegment","newChildren","childCandidate","mergeTrivialChildren","getChildRouteGuards","getClosestLoadedConfig","futurePath","checks","canDeactivateChecks","canActivateChecks","prevChildren","shouldRun","shouldRunGuardsAndResolvers","runGuardsAndResolvers","CanActivate","CanDeactivate","getRouteGuards","rootComponentType","recognize","processSegmentGroup","freeze","routeState","inheritParamsAndData","routeNode","inheritedParamsDataResolve","processSegment","outletChildren","mergedChildren","mergeEmptyPathMatches","sortActivatedRouteSnapshots","localeCompare","processSegmentAgainstRoute","getSourceSegmentGroup","getPathIndexShift","getResolve","mergedNodes","hasEmptyPathConfig","duplicateEmptyPathNode","resultNode","mergedNode","nextResult","detachedTree","ROUTES","onLoadStartListener","onLoadEndListener","_loader$","loadRunner","loadModuleFactory","shouldProcessUrl","newUrlPart","wholeUrl","runExtras","exactMatchOptions","subsetMatchOptions","Router","rootContexts","lastSuccessfulNavigation","currentNavigation","disposed","navigationId","currentPageId","isNgZoneEnabled","defaultErrorHandler","malformedUriErrorHandler","defaultMalformedUriErrorHandler","navigated","lastSuccessfulId","beforePreactivation","defaultRouterHook","afterPreactivation","urlHandlingStrategy","DefaultUrlHandlingStrategy","DefaultRouteReuseStrategy","onSameUrlNavigation","urlUpdateStrategy","canceledNavigationResolution","ɵConsole","resetConfig","currentUrlTree","createEmptyUrlTree","rawUrlTree","browserUrlTree","RouterConfigLoader","triggerEvent","RouteConfigLoadStart","RouteConfigLoadEnd","createEmptyState","targetPageId","currentRawUrl","extractedUrl","rawUrl","extras","targetSnapshot","currentRouterState","targetRouterState","guards","guardsResult","navigations","setupNavigations","processNavigations","browserPageId","ɵrouterPageId","eventsSubject","initialUrl","previousNavigation","urlTransition","isBrowserTriggeredNavigation","NavigationStart","serializeUrl","ApplyRedirects","applyRedirects$1","applyRedirects","finalUrl","serializer","Recognizer","newObservableError","NoMatch","recognize$1","setBrowserUrl","routesRecognized","RoutesRecognized","navStart","replaceUrl","switchTap","appliedUrlTree","guardsStart","GuardsCheckStart","getAllRouteGuards","futureRSS","currRSS","currARS","canDeactivate","canDeactivateObservables","isCanDeactivate","runCanDeactivate","runCanDeactivateChecks","ChildActivationStart","fireChildActivationStart","ActivationStart","fireActivationStart","futureARS","canActivateChildGuardsMapped","canActivateChild","getCanActivateChild","guardsMapped","isCanActivateChild","runCanActivateChild","canActivate","canActivateObservables","isCanActivate","runCanActivate","runCanActivateChecks","checkGuards","guardsEnd","GuardsCheckEnd","restoreHistory","cancelNavigationTransition","resolveStart","ResolveStart","dataResolved","canActivateChecksResolved","getDataKeys","getResolver","resolveNode","resolvedData","runResolve","resolveData","resolveEnd","ResolveEnd","createRouterState","ActivateRoutes","isNavigationCancelingError","redirecting","navCancel","NavigationCancel","mergedTree","scheduleNavigation","navError","NavigationError","resetRootComponentType","initialNavigation","setUpLocationChangeListener","navigateByUrl","locationSubscription","stateCopy","parseUrl","getCurrentNavigation","navigationExtras","relativeTo","queryParamsHandling","preserveFragment","removeEmptyProps","nav","cmdIdx","urlPart","partIndex","computeNavigation","startingPosition","createPositionApplyingDoubleDots","findStartingPosition","validateCommands","matchOptions","containsTree","priorPromise","generateNgRouterState","restoringFromCaughtError","targetPagePosition","resetState","resetUrlToCurrentUrlTree","routerPageId","RouterLink","tabIndexAttribute","onChanges","setTabIndexIfNotOnNativeEl","newTabIndex","routerLink","attrBoolValue","preload","RouterPreloader","preloadingStrategy","setUpPreloading","processRoutes","preloadConfig","PreloadingStrategy","RouterScroller","viewportScroller","lastId","lastSource","restoredId","anchorScrolling","routerEventsSubscription","createScrollEvents","scrollEventsSubscription","consumeScrollEvents","scheduleScrollEvent","ROUTER_CONFIGURATION","ROUTER_FORROOT_GUARD","ROUTER_PROVIDERS","UrlSerializer","assignExtraOptionsToRouter","enableTracing","groupEnd","NoPreloading","NgProbeToken","provideRoutes","provideForRootGuard","createRouterScroller","routerNgProbeToken","RouterInitializer","getAppInitializer","ROUTER_INITIALIZER","getBootstrapListener","provideRouterInitializer","scrollOffset","platformLocationStrategy","useHash","initNavigation","resultOfPreactivationDone","appInitializer","bootstrapListener","bootstrappedComponentRef","preloader","routerScroller","RaceOperator","RaceSubscriber","hasFirst","ZipOperator","ZipSubscriber","iterators","StaticArrayIterator","StaticIterator","ZipBufferIterator","stillUnsubscribed","notifyInactive","checkIterators","shouldComplete","_tryresultSelector","WithLatestFromOperator","WithLatestFromSubscriber","_tryProject","_c31","transitionTimerDelayMs","noopFn","runningTransitions","ngbRunTransition","startFn","runningTransition","transition$","endFn","transitionProperty","runInZone","finishTransition$","stop$","endWith","transitionDurationMs","transitionDelay","getTransitionDurationMs","transitionEnd$","race","NgbConfig","NgbAccordionModule","NgbAlertModule","NgbButtonsModule","NgbCarouselModule","NgbCollapseModule","Key","Tab","Enter","Escape","Space","PageUp","PageDown","Home","ArrowLeft","ArrowUp","ArrowRight","ArrowDown","isContainedIn","matchesSelectorIfAny","isMobile","FOCUSABLE_ELEMENTS_SELECTOR","placementSeparator","getStyle","isStaticPositioned","offsetParentEl","elPosition","parentOffset","elBcr","viewportOffset","elOffset","placementPrimary","placementSecondary","targetElStyles","topPosition","leftPosition","targetElBCR","NgbDatepickerModule","NgbDropdownModule","_windowRef","windowRef","NgbModalBackdrop","_el","reflow","_windowCmptRef","_backdropCmptRef","_beforeDismiss","_closed","_dismissed","_hidden","dismissEvent","dismissed","hidden","shown","_removeModalElements","_dismiss","windowTransition$","backdropTransition$","ModalDismissReasons","BACKDROP_CLICK","ESC","NgbModalWindow","_elRef","_closed$","_elWithFocus","_show","_disableEventHandling","transitions$","_dialogEl","_enableEventHandling","_setFocus","_bumpBackdrop","preventClose","autoFocusable","firstFocusable","getFocusableBoundaryElements","elWithFocus","ScrollBar","scrollbarWidth","actualPadding","NgbModalStack","_scrollBar","_rendererFactory","_activeWindowCmptHasChanged","_ariaHiddenValues","_scrollBarRestoreFn","_backdropAttributes","_modalRefs","_windowAttributes","_windowCmpts","_activeInstances","activeWindowCmpt","ngbFocusTrap","stopFocusTrap$","refocusOnClick","lastFocusedElement$","withLatestFrom","tabEvent","lastFocusedElement","_revertAriaHidden","_setAriaHidden","_restoreScrollBar","scrollBarRestoreFn","_hideScrollBar","moduleCFR","contentInjector","activeModal","NgbActiveModal","backdropCmptRef","windowCmptRef","_attachWindowComponent","ngbModalRef","NgbModalRef","beforeDismiss","_registerModalRef","_registerWindowCmpt","_applyWindowOptions","_applyBackdropOptions","activeInstances","dismissAll","hasOpenModals","backdropFactory","windowFactory","windowInstance","optionName","backdropInstance","_createFromTemplateRef","_createFromString","_createFromComponent","componentNativeEl","unregisterModalRef","ngbWindowCmpt","NgbModalConfig","_ngbConfig","_animation","NgbModal","_moduleCFR","_modalStack","combinedOptions","NgbModalModule","NgbNavModule","NgbPaginationModule","delayOrNoop","NgbPopoverConfig","disablePopover","openDelay","closeDelay","NgbPopoverWindow","isTitleTemplate","NgbPopover","applicationRef","_ngbPopoverWindowId","popoverClass","_popupService","baseClass","placementVals","allowedPlacements","addClassesToTarget","targetPlacement","classname","placementToRemove","hasAuto","testPlacement","isInViewport","addedClasses","_isDisabled","ngbPopover","popoverTitle","closed$","insideElements","ignoreElements","insideSelector","wrapAsyncForMobile","escapes$","mouseDowns$","closeableClicks$","shouldClose","ngbAutoClose","isOpenedFn","openFn","closeFn","toggleFn","observeTriggers","input$","filteredInput$","currentlyOpen","delayedOpen$","delayedClose$","triggerDelay","listenToTriggers","NgbPopoverModule","NgbProgressbarModule","NgbRatingModule","NgbTimepickerModule","NgbToastModule","NgbTooltipModule","NgbTypeaheadModule","NGB_MODULES","GoogleTagManagerService","googleTagManagerAuth","googleTagManagerPreview","googleTagManagerResourcePath","googleTagManagerCSPNonce","isLoaded","browserGlobals","documentRef","gtm_auth","gtm_preview","gtm_resource_path","getDataLayer","dataLayer","pushOnDataLayer","addGtmToDom","gtmScript","applyGtmQueryParams","newestOnTop","toastId","toastType","toastRef","_onTap","triggerTap","tapToDismiss","onTap","triggerAction","DefaultNoComponentGlobalConfig","maxOpened","autoDismiss","preventDuplicates","countDuplicates","resetTimeoutOnDuplicate","includeTitleDuplicates","iconClasses","warning","closeButton","disableTimeOut","extendedTimeOut","enableHtml","progressBar","toastClass","positionClass","titleClass","messageClass","easeTime","onActivateTick","progressAnimation","TOAST_CONFIG","duplicatesCount","_activate","_manualClose","_resetTimeout","_countDuplicate","manualClose","manualClosed","timeoutReset","countDuplicate","isInactive","afterActivate","onDuplicate","_toastPackage","_parentInjector","ToastPackage","_hostDomElement","_portalHost","_paneElements","_createOverlayRef","getPaneElement","_createPortalHost","DomPortalHost","ToastrService","currentlyActive","toasts","toastrConfig","default","override","_preBuildNotification","applyConfig","toast","_findToast","activeToast","findDuplicate","resetOnDuplicate","hasDuplicateTitle","_buildNotification","toastComponent","duplicate","previousToastMessage","keepInactive","sanitizedMessage","ToastRef","toastPackage","toastInjector","ToastInjector","ins","Toast","toastrService","toastClasses","originalTimeout","activateToast","sub1","sub2","sub3","displayStyle","intervalId","outsideTimeout","hideTime","outsideInterval","tapToast","stickAround","delayedHideToast","runInsideAngular","DefaultGlobalConfig","ToastNoAnimation"],"sources":["./src/app/activities-lite/activities-lite.data.ts","./src/app/activities-lite/activities-list/activities-list.component.html","./src/app/activities-lite/activities-list/activities-list.component.ts","./src/app/activities-lite/activities-lite-check-out/activities-lite-check-out.component.ts","./src/app/activities-lite/activities-lite-check-out/activities-lite-check-out.component.html","./src/app/activities-lite/activities-lite-secondary-guest-data/activities-lite-secondary-guest-data.component.html","./src/app/activities-lite/activities-lite-secondary-guest-data/activities-lite-secondary-guest-data.component.ts","./src/app/activities-lite/activities-lite-guest-data/activities-lite-guest-data.component.html","./src/app/activities-lite/activities-lite-guest-data/activities-lite-guest-data.component.ts","./src/app/activities-lite/activities-layout/activities-layout-support.component.ts","./src/app/activities-lite/size-mapping/size-mapping.component.html","./src/app/activities-lite/size-mapping/size-mapping.component.ts","./src/app/activities-lite/activites-guest-price-summary/activites-guest-price-summary.component.html","./src/app/activities-lite/activites-guest-price-summary/activites-guest-price-summary.component.ts","./src/app/activities-lite/activities-layout/activities-layout.component.html","./src/app/activities-lite/activities-layout/activities-layout.component.ts","./src/app/shared/directives/duration-value.directive.ts","./src/app/activities-lite/activity-session-selection/activity-session-selection.component.html","./src/app/activities-lite/activity-session-selection/activity-session-selection.component.ts","./src/app/activities-lite/activities-lite-order-summary/activities-lite-order-summary.component.html","./src/app/activities-lite/activities-lite-order-summary/activities-lite-order-summary.component.ts","./src/app/activities-lite/activity-cart/activity-cart.component.html","./src/app/activities-lite/activity-cart/activity-cart.component.ts","./src/app/shared/dynamicform/models/common-models.ts","./node_modules/tslib/tslib.es6.mjs","./node_modules/angularx-qrcode/fesm2015/angularx-qrcode.mjs","./src/app/activities-lite/activity-booking-confirmation/activity-booking-confirmation.component.html","./src/app/activities-lite/activities-lite-routing.module.ts","./src/app/activities-lite/activity-booking-confirmation/activity-booking-confirmation.component.ts","./src/app/activities-lite/activities-layout/layout-functions.ts","./src/app/activities-lite/activities-lite.module.ts","./src/app/activities/activities.service.ts","./src/app/app-initializer.ts","./src/app/layout/layout.service.ts","./src/app/layout/reservation.service.ts","./node_modules/@angular/material/fesm2015/grid-list.mjs","./node_modules/@angular/material/fesm2015/list.mjs","./node_modules/@angular/material/fesm2015/paginator.mjs","./node_modules/@angular/material/fesm2015/progress-bar.mjs","./node_modules/@angular/material/fesm2015/progress-spinner.mjs","./node_modules/@angular/material/fesm2015/sidenav.mjs","./node_modules/@angular/material/fesm2015/slide-toggle.mjs","./node_modules/@angular/material/fesm2015/slider.mjs","./node_modules/@angular/cdk/fesm2015/stepper.mjs","./node_modules/@angular/material/fesm2015/stepper.mjs","./node_modules/@angular/material/fesm2015/toolbar.mjs","./node_modules/@angular/material/fesm2015/bottom-sheet.mjs","./src/app/material-module.ts","./src/app/shared/Models/PartyModels.ts","./src/app/shared/Models/ResultModels.ts","./src/app/shared/Models/SessionBookingDTO.ts","./src/app/shared/Models/WidgetSettingsModels.ts","./src/app/shared/components/button/button.component.html","./src/app/shared/components/button/button.component.ts","./src/app/shared/components/popup-message/popup-message.component.html","./src/app/shared/components/popup-message/popup-message.component.ts","./src/app/shared/components/popup/popup.component.html","./src/app/shared/components/popup/popup.component.ts","./src/app/shared/constants/commonenums.ts","./src/app/shared/constants/url-config.ts","./src/app/shared/dynamicform/components/form-chip/form-chip.service.ts","./src/app/shared/dynamicform/models/error-matcher.ts","./src/app/shared/directives/decimals-only.directive.ts","./src/app/shared/directives/phone-number-format.directive.ts","./src/app/shared/dynamicform/components/form-input/form-input.component.html","./src/app/shared/dynamicform/components/form-input/form-input.component.ts","./src/app/shared/dynamicform/components/form-checkbox/form-checkbox.component.html","./src/app/shared/dynamicform/components/form-checkbox/form-checkbox.component.ts","./src/app/shared/dynamicform/components/form-textarea/form-textarea.component.html","./src/app/shared/dynamicform/components/form-textarea/form-textarea.component.ts","./src/app/shared/dynamicform/components/form-select/form-select.component.html","./src/app/shared/dynamicform/components/form-select/form-select.component.ts","./src/app/shared/dynamicform/components/form-date/form-date.component.html","./src/app/shared/dynamicform/components/form-date/form-date.component.ts","./src/app/shared/dynamicform/components/form-radio/form-radio.component.html","./src/app/shared/dynamicform/components/form-radio/form-radio.component.ts","./src/app/shared/dynamicform/components/form-input-select/form-input-select.component.html","./src/app/shared/dynamicform/components/form-input-select/form-input-select.component.ts","./src/app/shared/dynamicform/components/form-add-button/form-add-button.component.ts","./src/app/shared/dynamicform/components/form-add-button/form-add-button.component.html","./src/app/shared/dynamicform/components/form-autocomplete/form-autocomplete.component.html","./src/app/shared/dynamicform/components/form-autocomplete/form-autocomplete.component.ts","./src/app/shared/dynamicform/components/form-time/form-time.component.ts","./src/app/shared/dynamicform/components/form-time/form-time.component.html","./src/app/shared/dynamicform/components/form-chip/form-chip.component.html","./src/app/shared/dynamicform/components/dynamic-field/dynamic-field.directive.ts","./src/app/shared/dynamicform/components/form-chip/form-chip.component.ts","./src/app/shared/dynamicform/dynamic-form/dynamic-form.component.html","./src/app/shared/dynamicform/dynamic-form/dynamic-form.component.ts","./src/app/shared/dynamicform/service/dynamic-form.service.ts","./src/app/shared/pipes/activity-list-filter.pipe.ts","./src/app/shared/pipes/currency-decimal.pipe.ts","./src/app/shared/pipes/date-compare.pipe.ts","./src/app/shared/pipes/format-settings-date.pipe.ts","./src/app/shared/pipes/localize-date.pipe.ts","./src/app/shared/pipes/slot-time-formatter.pipe.ts","./src/app/shared/pipes/text-cutter.piper.ts","./src/app/shared/services/guest.service.ts","./src/app/shared/services/http.service.ts","./src/app/shared/services/localize.service.ts","./src/app/shared/services/popup.service.ts","./node_modules/ngx-bootstrap/utils/fesm2015/ngx-bootstrap-utils.mjs","./node_modules/ngx-bootstrap/positioning/fesm2015/ngx-bootstrap-positioning.mjs","./node_modules/ngx-bootstrap/component-loader/fesm2015/ngx-bootstrap-component-loader.mjs","./node_modules/ngx-bootstrap/popover/fesm2015/ngx-bootstrap-popover.mjs","./node_modules/ngx-bootstrap/tooltip/fesm2015/ngx-bootstrap-tooltip.mjs","./src/app/shared/pipes/guest-title.pipe.ts","./src/app/shared/pipes/safe-html.pipe.ts","./src/app/shared/shared.module.ts","./src/app/shared/utilities/utilities.ts","./src/environments/environment.onprem.ts","./src/app/app-routing.module.ts","./node_modules/ngx-spinner/fesm2015/ngx-spinner.mjs","./src/app/core/services/loader.service.ts","./src/app/core/loader/loader.component.html","./src/app/core/loader/loader.component.ts","./node_modules/angular-cd-timer/__ivy_ngcc__/fesm2015/angular-cd-timer.js","./src/app/v2-layout/v2-header/v2-header.component.html","./src/app/v2-layout/v2-header/v2-header.component.ts","./src/app/v2-layout/v2-footer/v2-footer.component.ts","./src/app/v2-layout/v2-footer/v2-footer.component.html","./src/app/app.component.html","./src/app/app.component.ts","./src/app/activities/activity-common-header/activity-common-header/activity-common-header.component.html","./src/app/activities/activity-common-header/activity-common-header/activity-common-header.component.ts","./src/app/activities/message/message.component.html","./src/app/activities/message/message.component.ts","./src/app/activities/activity-class-booking/activity-filter/activity-filter.component.html","./src/app/activities/activity-class-booking/activity-filter/activity-filter.component.ts","./src/app/activities/activity-class-booking/activity-class-booking.component.html","./src/app/activities/activity-class-booking/activity-class-booking.component.ts","./src/app/shared/Models/OpenBookingDTO.ts","./src/app/shared/pipes/button-input-formatter.pipe.ts","./src/app/activities/open-booking-slot-view/open-booking-slot-view.component.html","./src/app/activities/open-booking-slot-view/open-booking-slot-view.component.ts","./src/app/activities/open-booking-selector/open-booking-selector.component.html","./src/app/activities/open-booking-selector/open-booking-selector.component.ts","./src/app/activities/activity-booking/activity-booking.component.html","./src/app/activities/activity-booking/activity-booking.component.ts","./src/app/activities/activity-class-booking/class-info/class-info.component.html","./src/app/activities/activity-class-booking/class-info/class-info.component.ts","./src/app/activities/activity-class-booking/activity-slot-view/activity-slot-view.component.html","./src/app/activities/activity-class-booking/activity-slot-view/activity-slot-view.component.ts","./src/app/activities/activity-class-booking/activity-selector/activity-selector.component.html","./src/app/activities/activity-class-booking/activity-selector/activity-selector.component.ts","./src/app/activities/private-activity-booking/private-activity-booking.component.html","./src/app/activities/private-activity-booking/private-activity-booking.component.ts","./src/app/layout/data-retention-policy/data-retention-policy.component.html","./src/app/layout/data-retention-policy/data-retention-policy.component.ts","./src/app/shared/components/auth-refund-popup/auth-refund-popup.component.html","./src/app/shared/components/auth-refund-popup/auth-refund-popup.component.ts","./src/app/shared/components/guest-data/guest-data.component.html","./src/app/shared/components/guest-data/guest-data.component.ts","./src/app/activities/activity-summary/activity-slot-summary/activity-slot-summary.component.html","./src/app/activities/activity-summary/activity-slot-summary/activity-slot-summary.component.ts","./src/app/activities/activity-summary/activity-summary.component.html","./src/app/activities/activity-summary/activity-summary.component.ts","./src/app/activities/cart-details/cart-details.component.html","./src/app/activities/cart-details/cart-details.component.ts","./src/app/activities/rate-plan-details/rate-plan-details.component.html","./src/app/activities/rate-plan-details/rate-plan-details.component.ts","./src/app/activities/activity-class-booking/activity-schedule/activity-schedule.component.html","./src/app/activities/activity-class-booking/activity-schedule/activity-schedule.component.ts","./src/app/activities/activity-booking-summary/activity-booking-summary.component.html","./src/app/activities/activity-booking-summary/activity-booking-summary.component.ts","./src/app/activities/activity-summary/activity-additionalguest/activity-additionalguest.component.html","./src/app/activities/activity-summary/activity-additionalguest/activity-additionalguest.component.ts","./src/app/activities/activity-common-footer/activity-common-footer.component.ts","./src/app/activities/activity-common-footer/activity-common-footer.component.html","./src/app/activities/activities.component.html","./src/app/activities/activities.component.ts","./src/app/error/error.component.ts","./src/app/error/error.component.html","./src/app/layout/reservation-details/reservation-details/reservation-details.component.html","./src/app/layout/reservation-details/reservation-details/reservation-details.component.ts","./src/app/layout/tables-layout/tables-layout.component.ts","./src/app/layout/tables-layout/tables-layout.component.html","./src/app/layout/guest-details/guest-details.component.html","./src/app/layout/guest-details/guest-details.component.ts","./src/app/layout/confirmation-details/confirmation-details.component.html","./src/app/layout/confirmation-details/confirmation-details.component.ts","./src/app/layout/privacy-policy/privacy-policy.component.ts","./src/app/layout/privacy-policy/privacy-policy.component.html","./src/app/layout/terms-of-use/terms-of-use.component.ts","./src/app/layout/terms-of-use/terms-of-use.component.html","./src/app/layout/header/header.component.html","./src/app/layout/header/header.component.ts","./src/app/layout/message/message.component.html","./src/app/layout/message/message.component.ts","./src/app/layout/footer/footer.component.ts","./src/app/layout/footer/footer.component.html","./src/app/layout/layout.component.html","./src/app/layout/layout.component.ts","./src/app/survey-main/survey-api.service.ts","./src/app/survey-main/header/header.component.html","./src/app/survey-main/header/header.component.ts","./src/app/survey-main/activity-summary/activity-summary.component.html","./src/app/survey-main/activity-summary/activity-summary.component.ts","./src/app/survey-main/survey-form/survey-form.component.html","./src/app/survey-main/survey-form/survey-form.component.ts","./src/app/survey-main/footer/footer.component.ts","./src/app/survey-main/footer/footer.component.html","./src/app/survey-main/survey-main.component.html","./src/app/survey-main/survey-main.component.ts","./src/app/core/core-routing.module.ts","./node_modules/@ngx-translate/http-loader/__ivy_ngcc__/fesm2015/ngx-translate-http-loader.js","./src/app/layout/layout.module.ts","./src/app/survey-main/survey.module.ts","./src/app/core/services/loaderInterceptor.service.ts","./src/app/activities/activities.module.ts","./src/app/core/core.module.ts","./src/app/app.module.ts","./src/main.ts","./node_modules/@cordobo/qrcode/lib/browser.js","./node_modules/@cordobo/qrcode/lib/can-promise.js","./node_modules/@cordobo/qrcode/lib/core/alignment-pattern.js","./node_modules/@cordobo/qrcode/lib/core/alphanumeric-data.js","./node_modules/@cordobo/qrcode/lib/core/bit-buffer.js","./node_modules/@cordobo/qrcode/lib/core/bit-matrix.js","./node_modules/@cordobo/qrcode/lib/core/byte-data.js","./node_modules/@cordobo/qrcode/lib/core/error-correction-code.js","./node_modules/@cordobo/qrcode/lib/core/error-correction-level.js","./node_modules/@cordobo/qrcode/lib/core/finder-pattern.js","./node_modules/@cordobo/qrcode/lib/core/format-info.js","./node_modules/@cordobo/qrcode/lib/core/galois-field.js","./node_modules/@cordobo/qrcode/lib/core/kanji-data.js","./node_modules/@cordobo/qrcode/lib/core/mask-pattern.js","./node_modules/@cordobo/qrcode/lib/core/mode.js","./node_modules/@cordobo/qrcode/lib/core/numeric-data.js","./node_modules/@cordobo/qrcode/lib/core/polynomial.js","./node_modules/@cordobo/qrcode/lib/core/qrcode.js","./node_modules/@cordobo/qrcode/lib/core/reed-solomon-encoder.js","./node_modules/@cordobo/qrcode/lib/core/regex.js","./node_modules/@cordobo/qrcode/lib/core/segments.js","./node_modules/@cordobo/qrcode/lib/core/utils.js","./node_modules/@cordobo/qrcode/lib/core/version-check.js","./node_modules/@cordobo/qrcode/lib/core/version.js","./node_modules/@cordobo/qrcode/lib/renderer/canvas.js","./node_modules/@cordobo/qrcode/lib/renderer/svg-tag.js","./node_modules/@cordobo/qrcode/lib/renderer/utils.js","./node_modules/@ngx-translate/core/__ivy_ngcc__/fesm2015/ngx-translate-core.js","./node_modules/bezier-easing/src/index.js","./node_modules/dijkstrajs/dijkstra.js","./node_modules/encode-utf8/index.js","./node_modules/fabric/dist/fabric.js","./node_modules/lodash/lodash.js","./node_modules/moment/locale/af.js","./node_modules/moment/locale/ar-dz.js","./node_modules/moment/locale/ar-kw.js","./node_modules/moment/locale/ar-ly.js","./node_modules/moment/locale/ar-ma.js","./node_modules/moment/locale/ar-ps.js","./node_modules/moment/locale/ar-sa.js","./node_modules/moment/locale/ar-tn.js","./node_modules/moment/locale/ar.js","./node_modules/moment/locale/az.js","./node_modules/moment/locale/be.js","./node_modules/moment/locale/bg.js","./node_modules/moment/locale/bm.js","./node_modules/moment/locale/bn-bd.js","./node_modules/moment/locale/bn.js","./node_modules/moment/locale/bo.js","./node_modules/moment/locale/br.js","./node_modules/moment/locale/bs.js","./node_modules/moment/locale/ca.js","./node_modules/moment/locale/cs.js","./node_modules/moment/locale/cv.js","./node_modules/moment/locale/cy.js","./node_modules/moment/locale/da.js","./node_modules/moment/locale/de-at.js","./node_modules/moment/locale/de-ch.js","./node_modules/moment/locale/de.js","./node_modules/moment/locale/dv.js","./node_modules/moment/locale/el.js","./node_modules/moment/locale/en-au.js","./node_modules/moment/locale/en-ca.js","./node_modules/moment/locale/en-gb.js","./node_modules/moment/locale/en-ie.js","./node_modules/moment/locale/en-il.js","./node_modules/moment/locale/en-in.js","./node_modules/moment/locale/en-nz.js","./node_modules/moment/locale/en-sg.js","./node_modules/moment/locale/eo.js","./node_modules/moment/locale/es-do.js","./node_modules/moment/locale/es-mx.js","./node_modules/moment/locale/es-us.js","./node_modules/moment/locale/es.js","./node_modules/moment/locale/et.js","./node_modules/moment/locale/eu.js","./node_modules/moment/locale/fa.js","./node_modules/moment/locale/fi.js","./node_modules/moment/locale/fil.js","./node_modules/moment/locale/fo.js","./node_modules/moment/locale/fr-ca.js","./node_modules/moment/locale/fr-ch.js","./node_modules/moment/locale/fr.js","./node_modules/moment/locale/fy.js","./node_modules/moment/locale/ga.js","./node_modules/moment/locale/gd.js","./node_modules/moment/locale/gl.js","./node_modules/moment/locale/gom-deva.js","./node_modules/moment/locale/gom-latn.js","./node_modules/moment/locale/gu.js","./node_modules/moment/locale/he.js","./node_modules/moment/locale/hi.js","./node_modules/moment/locale/hr.js","./node_modules/moment/locale/hu.js","./node_modules/moment/locale/hy-am.js","./node_modules/moment/locale/id.js","./node_modules/moment/locale/is.js","./node_modules/moment/locale/it-ch.js","./node_modules/moment/locale/it.js","./node_modules/moment/locale/ja.js","./node_modules/moment/locale/jv.js","./node_modules/moment/locale/ka.js","./node_modules/moment/locale/kk.js","./node_modules/moment/locale/km.js","./node_modules/moment/locale/kn.js","./node_modules/moment/locale/ko.js","./node_modules/moment/locale/ku-kmr.js","./node_modules/moment/locale/ku.js","./node_modules/moment/locale/ky.js","./node_modules/moment/locale/lb.js","./node_modules/moment/locale/lo.js","./node_modules/moment/locale/lt.js","./node_modules/moment/locale/lv.js","./node_modules/moment/locale/me.js","./node_modules/moment/locale/mi.js","./node_modules/moment/locale/mk.js","./node_modules/moment/locale/ml.js","./node_modules/moment/locale/mn.js","./node_modules/moment/locale/mr.js","./node_modules/moment/locale/ms-my.js","./node_modules/moment/locale/ms.js","./node_modules/moment/locale/mt.js","./node_modules/moment/locale/my.js","./node_modules/moment/locale/nb.js","./node_modules/moment/locale/ne.js","./node_modules/moment/locale/nl-be.js","./node_modules/moment/locale/nl.js","./node_modules/moment/locale/nn.js","./node_modules/moment/locale/oc-lnc.js","./node_modules/moment/locale/pa-in.js","./node_modules/moment/locale/pl.js","./node_modules/moment/locale/pt-br.js","./node_modules/moment/locale/pt.js","./node_modules/moment/locale/ro.js","./node_modules/moment/locale/ru.js","./node_modules/moment/locale/sd.js","./node_modules/moment/locale/se.js","./node_modules/moment/locale/si.js","./node_modules/moment/locale/sk.js","./node_modules/moment/locale/sl.js","./node_modules/moment/locale/sq.js","./node_modules/moment/locale/sr-cyrl.js","./node_modules/moment/locale/sr.js","./node_modules/moment/locale/ss.js","./node_modules/moment/locale/sv.js","./node_modules/moment/locale/sw.js","./node_modules/moment/locale/ta.js","./node_modules/moment/locale/te.js","./node_modules/moment/locale/tet.js","./node_modules/moment/locale/tg.js","./node_modules/moment/locale/th.js","./node_modules/moment/locale/tk.js","./node_modules/moment/locale/tl-ph.js","./node_modules/moment/locale/tlh.js","./node_modules/moment/locale/tr.js","./node_modules/moment/locale/tzl.js","./node_modules/moment/locale/tzm-latn.js","./node_modules/moment/locale/tzm.js","./node_modules/moment/locale/ug-cn.js","./node_modules/moment/locale/uk.js","./node_modules/moment/locale/ur.js","./node_modules/moment/locale/uz-latn.js","./node_modules/moment/locale/uz.js","./node_modules/moment/locale/vi.js","./node_modules/moment/locale/x-pseudo.js","./node_modules/moment/locale/yo.js","./node_modules/moment/locale/zh-cn.js","./node_modules/moment/locale/zh-hk.js","./node_modules/moment/locale/zh-mo.js","./node_modules/moment/locale/zh-tw.js","./node_modules/moment/moment.js","./node_modules/luxon/src/errors.js","./node_modules/luxon/src/impl/formats.js","./node_modules/luxon/src/zone.js","./node_modules/luxon/src/zones/systemZone.js","./node_modules/luxon/src/zones/IANAZone.js","./node_modules/luxon/src/impl/locale.js","./node_modules/luxon/src/impl/english.js","./node_modules/luxon/src/zones/fixedOffsetZone.js","./node_modules/luxon/src/zones/invalidZone.js","./node_modules/luxon/src/impl/zoneUtil.js","./node_modules/luxon/src/impl/util.js","./node_modules/luxon/src/impl/digits.js","./node_modules/luxon/src/settings.js","./node_modules/luxon/src/impl/invalid.js","./node_modules/luxon/src/impl/conversions.js","./node_modules/luxon/src/impl/formatter.js","./node_modules/luxon/src/impl/regexParser.js","./node_modules/luxon/src/duration.js","./node_modules/luxon/src/interval.js","./node_modules/luxon/src/info.js","./node_modules/luxon/src/impl/diff.js","./node_modules/luxon/src/impl/tokenParser.js","./node_modules/luxon/src/datetime.js","./node_modules/ngx-material-timepicker/fesm2015/ngx-material-timepicker.js","./node_modules/rxjs/_esm2015/internal/operators/mapTo.js","./node_modules/perfect-scrollbar/dist/perfect-scrollbar.esm.js","./node_modules/resize-observer-polyfill/dist/ResizeObserver.es.js","./node_modules/ngx-perfect-scrollbar/__ivy_ngcc__/dist/ngx-perfect-scrollbar.es5.js","./node_modules/rxjs/_esm2015/internal/operators/expand.js","./node_modules/ngx-scrollbar/__ivy_ngcc__/fesm2015/ngx-scrollbar-smooth-scroll.js","./node_modules/rxjs/_esm2015/internal/operators/pluck.js","./node_modules/rxjs/_esm2015/internal/operators/pairwise.js","./node_modules/ngx-scrollbar/__ivy_ngcc__/fesm2015/ngx-scrollbar.js","./node_modules/ssr-window/ssr-window.esm.js","./node_modules/dom7/dom7.esm.js","./node_modules/swiper/esm/utils/dom.js","./node_modules/swiper/esm/utils/utils.js","./node_modules/swiper/esm/utils/get-support.js","./node_modules/swiper/esm/utils/get-device.js","./node_modules/swiper/esm/utils/get-browser.js","./node_modules/swiper/esm/modules/resize/resize.js","./node_modules/swiper/esm/modules/observer/observer.js","./node_modules/swiper/esm/components/core/events/onTouchStart.js","./node_modules/swiper/esm/components/core/events/onTouchMove.js","./node_modules/swiper/esm/components/core/events/onTouchEnd.js","./node_modules/swiper/esm/components/core/events/onResize.js","./node_modules/swiper/esm/components/core/events/onClick.js","./node_modules/swiper/esm/components/core/events/onScroll.js","./node_modules/swiper/esm/components/core/events/index.js","./node_modules/swiper/esm/components/core/check-overflow/index.js","./node_modules/swiper/esm/components/core/defaults.js","./node_modules/swiper/esm/components/core/core-class.js","./node_modules/swiper/esm/components/core/modular.js","./node_modules/swiper/esm/components/core/events-emitter.js","./node_modules/swiper/esm/components/core/update/index.js","./node_modules/swiper/esm/components/core/update/updateSize.js","./node_modules/swiper/esm/components/core/update/updateSlides.js","./node_modules/swiper/esm/components/core/update/updateAutoHeight.js","./node_modules/swiper/esm/components/core/update/updateSlidesOffset.js","./node_modules/swiper/esm/components/core/update/updateSlidesProgress.js","./node_modules/swiper/esm/components/core/update/updateProgress.js","./node_modules/swiper/esm/components/core/update/updateSlidesClasses.js","./node_modules/swiper/esm/components/core/update/updateActiveIndex.js","./node_modules/swiper/esm/components/core/update/updateClickedSlide.js","./node_modules/swiper/esm/components/core/translate/index.js","./node_modules/swiper/esm/components/core/translate/getTranslate.js","./node_modules/swiper/esm/components/core/translate/setTranslate.js","./node_modules/swiper/esm/components/core/translate/minTranslate.js","./node_modules/swiper/esm/components/core/translate/maxTranslate.js","./node_modules/swiper/esm/components/core/translate/translateTo.js","./node_modules/swiper/esm/components/core/transition/index.js","./node_modules/swiper/esm/components/core/transition/setTransition.js","./node_modules/swiper/esm/components/core/transition/transitionStart.js","./node_modules/swiper/esm/components/core/transition/transitionEnd.js","./node_modules/swiper/esm/components/core/slide/index.js","./node_modules/swiper/esm/components/core/slide/slideTo.js","./node_modules/swiper/esm/components/core/slide/slideToLoop.js","./node_modules/swiper/esm/components/core/slide/slideNext.js","./node_modules/swiper/esm/components/core/slide/slidePrev.js","./node_modules/swiper/esm/components/core/slide/slideReset.js","./node_modules/swiper/esm/components/core/slide/slideToClosest.js","./node_modules/swiper/esm/components/core/slide/slideToClickedSlide.js","./node_modules/swiper/esm/components/core/loop/index.js","./node_modules/swiper/esm/components/core/loop/loopCreate.js","./node_modules/swiper/esm/components/core/loop/loopFix.js","./node_modules/swiper/esm/components/core/loop/loopDestroy.js","./node_modules/swiper/esm/components/core/grab-cursor/index.js","./node_modules/swiper/esm/components/core/grab-cursor/setGrabCursor.js","./node_modules/swiper/esm/components/core/grab-cursor/unsetGrabCursor.js","./node_modules/swiper/esm/components/core/manipulation/index.js","./node_modules/swiper/esm/components/core/manipulation/appendSlide.js","./node_modules/swiper/esm/components/core/manipulation/prependSlide.js","./node_modules/swiper/esm/components/core/manipulation/addSlide.js","./node_modules/swiper/esm/components/core/manipulation/removeSlide.js","./node_modules/swiper/esm/components/core/manipulation/removeAllSlides.js","./node_modules/swiper/esm/components/core/breakpoints/index.js","./node_modules/swiper/esm/components/core/breakpoints/setBreakpoint.js","./node_modules/swiper/esm/components/core/breakpoints/getBreakpoint.js","./node_modules/swiper/esm/components/core/classes/index.js","./node_modules/swiper/esm/components/core/classes/addClasses.js","./node_modules/swiper/esm/components/core/classes/removeClasses.js","./node_modules/swiper/esm/components/core/images/index.js","./node_modules/swiper/esm/components/core/images/loadImage.js","./node_modules/swiper/esm/components/core/images/preloadImages.js","./node_modules/swiper/esm/components/virtual/virtual.js","./node_modules/swiper/esm/components/keyboard/keyboard.js","./node_modules/swiper/esm/components/mousewheel/mousewheel.js","./node_modules/swiper/esm/components/navigation/navigation.js","./node_modules/swiper/esm/components/pagination/pagination.js","./node_modules/swiper/esm/components/scrollbar/scrollbar.js","./node_modules/swiper/esm/components/parallax/parallax.js","./node_modules/swiper/esm/components/zoom/zoom.js","./node_modules/swiper/esm/components/lazy/lazy.js","./node_modules/swiper/esm/components/controller/controller.js","./node_modules/swiper/esm/components/a11y/a11y.js","./node_modules/swiper/esm/components/history/history.js","./node_modules/swiper/esm/components/hash-navigation/hash-navigation.js","./node_modules/swiper/esm/components/autoplay/autoplay.js","./node_modules/swiper/esm/components/effect-fade/effect-fade.js","./node_modules/swiper/esm/components/effect-cube/effect-cube.js","./node_modules/swiper/esm/components/effect-flip/effect-flip.js","./node_modules/swiper/esm/components/effect-coverflow/effect-coverflow.js","./node_modules/swiper/esm/components/thumbs/thumbs.js","./node_modules/swiper/swiper-bundle.esm.js","./node_modules/ngx-swiper-wrapper/__ivy_ngcc__/fesm2015/ngx-swiper-wrapper.js","./node_modules/rxjs/_esm2015/internal/BehaviorSubject.js","./node_modules/rxjs/_esm2015/internal/InnerSubscriber.js","./node_modules/rxjs/_esm2015/internal/Notification.js","./node_modules/rxjs/_esm2015/internal/Observable.js","./node_modules/rxjs/_esm2015/internal/util/toSubscriber.js","./node_modules/rxjs/_esm2015/internal/util/canReportError.js","./node_modules/rxjs/_esm2015/internal/util/pipe.js","./node_modules/rxjs/_esm2015/internal/Observer.js","./node_modules/rxjs/_esm2015/internal/OuterSubscriber.js","./node_modules/rxjs/_esm2015/internal/Subject.js","./node_modules/rxjs/_esm2015/internal/SubjectSubscription.js","./node_modules/rxjs/_esm2015/internal/Subscriber.js","./node_modules/rxjs/_esm2015/internal/util/UnsubscriptionError.js","./node_modules/rxjs/_esm2015/internal/Subscription.js","./node_modules/rxjs/_esm2015/internal/config.js","./node_modules/rxjs/_esm2015/internal/observable/ConnectableObservable.js","./node_modules/rxjs/_esm2015/internal/observable/combineLatest.js","./node_modules/rxjs/_esm2015/internal/observable/concat.js","./node_modules/rxjs/_esm2015/internal/operators/concatAll.js","./node_modules/rxjs/_esm2015/internal/observable/defer.js","./node_modules/rxjs/_esm2015/internal/observable/empty.js","./node_modules/rxjs/_esm2015/internal/observable/forkJoin.js","./node_modules/rxjs/_esm2015/internal/observable/from.js","./node_modules/rxjs/_esm2015/internal/scheduled/scheduled.js","./node_modules/rxjs/_esm2015/internal/util/isInteropObservable.js","./node_modules/rxjs/_esm2015/internal/scheduled/scheduleObservable.js","./node_modules/rxjs/_esm2015/internal/scheduled/schedulePromise.js","./node_modules/rxjs/_esm2015/internal/util/isIterable.js","./node_modules/rxjs/_esm2015/internal/scheduled/scheduleIterable.js","./node_modules/rxjs/_esm2015/internal/observable/fromArray.js","./node_modules/rxjs/_esm2015/internal/observable/fromEvent.js","./node_modules/rxjs/_esm2015/internal/observable/interval.js","./node_modules/rxjs/_esm2015/internal/observable/merge.js","./node_modules/rxjs/_esm2015/internal/observable/of.js","./node_modules/rxjs/_esm2015/internal/observable/throwError.js","./node_modules/rxjs/_esm2015/internal/observable/timer.js","./node_modules/rxjs/_esm2015/internal/operators/audit.js","./node_modules/rxjs/_esm2015/internal/operators/auditTime.js","./node_modules/rxjs/_esm2015/internal/operators/catchError.js","./node_modules/rxjs/_esm2015/internal/operators/concatMap.js","./node_modules/rxjs/_esm2015/internal/operators/debounceTime.js","./node_modules/rxjs/_esm2015/internal/operators/delay.js","./node_modules/rxjs/_esm2015/internal/util/isDate.js","./node_modules/rxjs/_esm2015/internal/operators/distinctUntilChanged.js","./node_modules/rxjs/_esm2015/internal/operators/filter.js","./node_modules/rxjs/_esm2015/internal/operators/finalize.js","./node_modules/rxjs/_esm2015/internal/operators/map.js","./node_modules/rxjs/_esm2015/internal/operators/mergeAll.js","./node_modules/rxjs/_esm2015/internal/operators/mergeMap.js","./node_modules/rxjs/_esm2015/internal/operators/refCount.js","./node_modules/rxjs/_esm2015/internal/operators/multicast.js","./node_modules/rxjs/_esm2015/internal/operators/share.js","./node_modules/rxjs/_esm2015/internal/scheduler/queue.js","./node_modules/rxjs/_esm2015/internal/scheduler/QueueScheduler.js","./node_modules/rxjs/_esm2015/internal/scheduler/QueueAction.js","./node_modules/rxjs/_esm2015/internal/operators/observeOn.js","./node_modules/rxjs/_esm2015/internal/ReplaySubject.js","./node_modules/rxjs/_esm2015/internal/operators/shareReplay.js","./node_modules/rxjs/_esm2015/internal/operators/skip.js","./node_modules/rxjs/_esm2015/internal/operators/startWith.js","./node_modules/rxjs/_esm2015/internal/operators/switchMap.js","./node_modules/rxjs/_esm2015/internal/operators/take.js","./node_modules/rxjs/_esm2015/internal/operators/takeUntil.js","./node_modules/rxjs/_esm2015/internal/operators/takeWhile.js","./node_modules/rxjs/_esm2015/internal/operators/tap.js","./node_modules/rxjs/_esm2015/internal/scheduled/scheduleArray.js","./node_modules/rxjs/_esm2015/internal/scheduler/Action.js","./node_modules/rxjs/_esm2015/internal/scheduler/AsyncAction.js","./node_modules/rxjs/_esm2015/internal/Scheduler.js","./node_modules/rxjs/_esm2015/internal/scheduler/AsyncScheduler.js","./node_modules/rxjs/_esm2015/internal/scheduler/animationFrame.js","./node_modules/rxjs/_esm2015/internal/scheduler/AnimationFrameScheduler.js","./node_modules/rxjs/_esm2015/internal/scheduler/AnimationFrameAction.js","./node_modules/rxjs/_esm2015/internal/util/Immediate.js","./node_modules/rxjs/_esm2015/internal/scheduler/asap.js","./node_modules/rxjs/_esm2015/internal/scheduler/AsapScheduler.js","./node_modules/rxjs/_esm2015/internal/scheduler/AsapAction.js","./node_modules/rxjs/_esm2015/internal/scheduler/async.js","./node_modules/rxjs/_esm2015/internal/symbol/iterator.js","./node_modules/rxjs/_esm2015/internal/symbol/observable.js","./node_modules/rxjs/_esm2015/internal/symbol/rxSubscriber.js","./node_modules/rxjs/_esm2015/internal/util/ArgumentOutOfRangeError.js","./node_modules/rxjs/_esm2015/internal/util/ObjectUnsubscribedError.js","./node_modules/rxjs/_esm2015/internal/util/hostReportError.js","./node_modules/rxjs/_esm2015/internal/util/identity.js","./node_modules/rxjs/_esm2015/internal/util/isArray.js","./node_modules/rxjs/_esm2015/internal/util/isArrayLike.js","./node_modules/rxjs/_esm2015/internal/util/isFunction.js","./node_modules/rxjs/_esm2015/internal/util/isNumeric.js","./node_modules/rxjs/_esm2015/internal/util/isObject.js","./node_modules/rxjs/_esm2015/internal/util/isObservable.js","./node_modules/rxjs/_esm2015/internal/util/isPromise.js","./node_modules/rxjs/_esm2015/internal/util/isScheduler.js","./node_modules/rxjs/_esm2015/internal/util/noop.js","./node_modules/rxjs/_esm2015/internal/util/subscribeTo.js","./node_modules/rxjs/_esm2015/internal/util/subscribeToObservable.js","./node_modules/rxjs/_esm2015/internal/util/subscribeToPromise.js","./node_modules/rxjs/_esm2015/internal/util/subscribeToIterable.js","./node_modules/rxjs/_esm2015/internal/util/subscribeToArray.js","./node_modules/rxjs/_esm2015/internal/util/subscribeToResult.js","./node_modules/rxjs/internal/Subscription.js","./node_modules/rxjs/internal/util/UnsubscriptionError.js","./node_modules/rxjs/internal/util/isArray.js","./node_modules/rxjs/internal/util/isFunction.js","./node_modules/rxjs/internal/util/isObject.js","./node_modules/moment/locale|sync|/^/.*$","./node_modules/@angular/animations/fesm2015/animations.mjs","./node_modules/@angular/cdk/fesm2015/a11y.mjs","./node_modules/@angular/cdk/fesm2015/bidi.mjs","./node_modules/@angular/cdk/fesm2015/coercion.mjs","./node_modules/@angular/cdk/fesm2015/collections.mjs","./node_modules/@angular/cdk/fesm2015/keycodes.mjs","./node_modules/@angular/cdk/fesm2015/layout.mjs","./node_modules/@angular/cdk/fesm2015/observers.mjs","./node_modules/@angular/cdk/fesm2015/overlay.mjs","./node_modules/@angular/cdk/fesm2015/platform.mjs","./node_modules/@angular/cdk/fesm2015/portal.mjs","./node_modules/@angular/cdk/fesm2015/scrolling.mjs","./node_modules/@angular/cdk/fesm2015/table.mjs","./node_modules/@angular/common/fesm2015/common.mjs","./node_modules/@angular/common/fesm2015/http.mjs","./node_modules/@angular/core/fesm2015/core.mjs","./node_modules/@angular/forms/fesm2015/forms.mjs","./node_modules/@angular/material-moment-adapter/fesm2015/material-moment-adapter.mjs","./node_modules/@angular/material/fesm2015/autocomplete.mjs","./node_modules/@angular/material/fesm2015/button-toggle.mjs","./node_modules/@angular/material/fesm2015/button.mjs","./node_modules/@angular/material/fesm2015/card.mjs","./node_modules/@angular/material/fesm2015/checkbox.mjs","./node_modules/@angular/material/fesm2015/chips.mjs","./node_modules/@angular/material/fesm2015/core.mjs","./node_modules/@angular/material/fesm2015/datepicker.mjs","./node_modules/@angular/material/fesm2015/dialog.mjs","./node_modules/@angular/material/fesm2015/divider.mjs","./node_modules/@angular/cdk/fesm2015/accordion.mjs","./node_modules/@angular/material/fesm2015/expansion.mjs","./node_modules/@angular/material/fesm2015/form-field.mjs","./node_modules/@angular/material/fesm2015/icon.mjs","./node_modules/@angular/cdk/fesm2015/text-field.mjs","./node_modules/@angular/material/fesm2015/input.mjs","./node_modules/@angular/material/fesm2015/menu.mjs","./node_modules/@angular/material/fesm2015/radio.mjs","./node_modules/@angular/material/fesm2015/select.mjs","./node_modules/@angular/material/fesm2015/snack-bar.mjs","./node_modules/@angular/material/fesm2015/sort.mjs","./node_modules/@angular/material/fesm2015/table.mjs","./node_modules/@angular/material/fesm2015/tabs.mjs","./node_modules/@angular/material/fesm2015/tooltip.mjs","./node_modules/@angular/animations/fesm2015/browser.mjs","./node_modules/@angular/platform-browser/fesm2015/animations.mjs","./node_modules/@angular/platform-browser/fesm2015/platform-browser.mjs","./node_modules/rxjs/_esm2015/internal/util/EmptyError.js","./node_modules/rxjs/_esm2015/internal/operators/scan.js","./node_modules/rxjs/_esm2015/internal/operators/takeLast.js","./node_modules/rxjs/_esm2015/internal/operators/throwIfEmpty.js","./node_modules/rxjs/_esm2015/internal/operators/defaultIfEmpty.js","./node_modules/rxjs/_esm2015/internal/operators/first.js","./node_modules/@angular/router/fesm2015/router.mjs","./node_modules/rxjs/_esm2015/internal/operators/last.js","./node_modules/rxjs/_esm2015/internal/observable/race.js","./node_modules/rxjs/_esm2015/internal/observable/never.js","./node_modules/rxjs/_esm2015/internal/observable/zip.js","./node_modules/rxjs/_esm2015/internal/operators/withLatestFrom.js","./node_modules/@ng-bootstrap/ng-bootstrap/fesm2015/ng-bootstrap.mjs","./node_modules/rxjs/_esm2015/internal/operators/endWith.js","./node_modules/angular-google-tag-manager/fesm2015/angular-google-tag-manager.mjs","./node_modules/ngx-toastr/fesm2015/ngx-toastr.mjs"],"sourcesContent":["import { Injectable } from \"@angular/core\";\r\nimport { SpecialMealDTO } from \"../shared/Models/WidgetSettingsModels\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ActivitiesDataDic {\r\n\r\n private _Property: ActivitiesData = {};\r\n\r\n public setProperty(data: any[]){\r\n data.forEach(property => {\r\n let _activities: {[key: number]: SpecialMealDTO} = {}; \r\n\r\n if(property.AvailableSpecialMeals){\r\n property.AvailableSpecialMeals.forEach(activity => {\r\n _activities[activity.Id] = activity;\r\n });\r\n }\r\n \r\n this._Property[property.RestaurantId] = {\r\n WidgetPrePaymentMode: property.WidgetPrePaymentMode,\r\n WidgetPaymentNote: property.WidgetPaymentNote,\r\n Activity: _activities\r\n }\r\n });\r\n }\r\n\r\n public get Property():ActivitiesData{\r\n return this._Property;\r\n }\r\n}\r\n\r\n\r\ninterface ActivitiesData{\r\n [key: number]: {\r\n WidgetPrePaymentMode: number,\r\n WidgetPaymentNote: number,\r\n Activity: {\r\n [key: number] : SpecialMealDTO\r\n }\r\n }\r\n}","
\r\n
\r\n {{(displayByType === 'venue' ? \r\n (filterByVenue ? selectedVenueName : 'allVenues') : (displayByType === 'dining' ? 'restaurants' : 'activities')) | translate}}
\r\n
{{(displayByType === 'activities' || displayByType === 'non_dining' ? 'spendYourDayWithAdventure' : 'chooseYourFineDine') | translate}}\r\n
\r\n
\r\n\r\n\r\n 0 ? originalVenueList[0].PhoneNumber : ''}\">\r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n
stadium
 {{'reserveASpot' | translate}}
\r\n
\r\n
\r\n
filter_hdr
 {{'Activities' | translate}}
\r\n
\r\n
\r\n
restaurant_menu
 {{'dining' | translate}}
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n {{'activities' | translate}}\r\n {{'venues' | translate}}\r\n \r\n
\r\n
\r\n \r\n {{'filterByVenue' | translate}}\r\n \r\n {{'allActivities' | translate}}\r\n \r\n {{venue.RestaurantName}}\r\n \r\n \r\n close\r\n
\r\n
0 || venueBasedActivityList.length > 0)) || (!loadActivitiesOnly && diningSpecialMeals.length > 0) && displayByType === 'activities'\" class=\"p-3 d-flex flex-wrap align-items-center\">\r\n \r\n {{'selectDateRange'| translate}}\r\n \r\n \r\n \r\n \r\n clear\r\n \r\n \r\n \r\n \r\n \r\n {{'searchActivity' | translate}}\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n view_module\r\n view_headline\r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n\r\n
\r\n
\r\n\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n location_on\r\n   {{venue.RestaurantName}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n location_on\r\n {{venue.RestaurantName}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n \r\n \r\n arrow_circle_left\r\n \r\n {{'allVenues'| translate}}\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n {{dining.RestaurantName}}\r\n
\r\n
{{'reserveNow' | translate}}
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {{dining.RestaurantName}}\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n {{nonDining.RestaurantName}}\r\n
\r\n
\r\n {{'reserveNow' | translate}}
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {{nonDining.RestaurantName}}\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n {{'specialMeals' | translate}}\r\n
\r\n 0\">\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n {{specialMeal.LessonName}}\r\n
\r\n \r\n location_on\r\n  {{specialMeal.venueName}}\r\n
\r\n
{{'bookTable' | translate}}
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {{specialMeal.LessonName}}\r\n
\r\n \r\n location_on\r\n  {{specialMeal.venueName}}\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n\r\n \r\n {{contentMsg | translate}} {{parameter}}\r\n\r\n\r\n\r\n
\r\n
\r\n \r\n
\r\n
\r\n
{{avlLessons.LessonName}}
\r\n
\r\n {{'pricesStartsFrom' | translate}} \r\n {{avlLessons?.OperationCurrency}}{{avlLessons.BaseRate | currencyDecimalFormatter}}\r\n  {{'-'}}\r\n
\r\n
\r\n
{{'startsIn' | translate}} {{avlLessons.TimeRemaining}}
\r\n
{{'expired' | translate}}
\r\n \r\n \r\n
\r\n
\r\n location_on\r\n  {{avlLessons.venueName}}\r\n
\r\n
{{'bookNow' | translate}}
\r\n
\r\n
\r\n
\r\n\r\n\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
{{avlLessons.LessonName}}
\r\n info\r\n
\r\n
\r\n
\r\n
{{'startsIn' | translate}} {{avlLessons.TimeRemaining}}
\r\n
{{'expired' | translate}}
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n location_on\r\n
{{avlLessons.venueName}}
\r\n
\r\n
\r\n
\r\n
{{'pricesStartsFrom' | translate}}\r\n {{avlLessons?.OperationCurrency}}{{avlLessons.BaseRate | currencyDecimalFormatter}}\r\n {{'-'}}\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n {{'bookNow' | translate}}
\r\n
\r\n
\r\n \r\n
\r\n\r\n\r\n \r\n \r\n {{'activitiesDetails' | translate }} \r\n \r\n close\r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n

{{selectedActivities.LessonName}}

\r\n
\r\n location_on\r\n  {{selectedActivities.LocationName}}\r\n
\r\n
\r\n
\r\n \r\n
{{selectedActivities?.OperationCurrency}}\r\n {{selectedActivities.BaseRate | currencyDecimalFormatter}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
{{selectedActivities.activityType}}
\r\n
\r\n
\r\n \r\n
{{selectedActivities.StartDate | date:'MM/dd/yyyy'}}
\r\n
\r\n
\r\n \r\n
{{selectedActivities.EndDate | date:'MM/dd/yyyy'}}
\r\n
\r\n
\r\n \r\n \r\n
\r\n {{selectedActivities.AvailableSlots}}\r\n
\r\n
\r\n
\r\n \r\n
\r\n {{selectedActivities.Staffs}}
\r\n
\r\n
\r\n
{{'checkAvailabilityOtherDays' |\r\n translate}}
\r\n \r\n
\r\n
\r\n

\r\n {{'description' | translate}}\r\n

\r\n

\r\n {{selectedActivities.Description | textCutter: (descriptionReadMoreClicked ? null : textMaxLegth)}}\r\n textMaxLegth\"\r\n (click)=\"descriptionReadMoreClicked = !descriptionReadMoreClicked\">\r\n {{descriptionReadMoreClicked ? ('readLess' | translate) : ('readMore' | translate)}}\r\n \r\n

\r\n
\r\n
\r\n

\r\n {{'safetyInformation' | translate}}\r\n

\r\n

\r\n {{selectedActivities.safetyInformation | textCutter: (safetyInformationReadMoreClicked ? null : textMaxLegth)}}\r\n textMaxLegth\"\r\n (click)=\"safetyInformationReadMoreClicked = !safetyInformationReadMoreClicked\">\r\n {{safetyInformationReadMoreClicked ? ('readLess' | translate) : ('readMore' | translate)}}\r\n \r\n

\r\n
\r\n
\r\n

\r\n {{'CancellationPolicy' | translate}}\r\n

\r\n

\r\n {{selectedActivities?.CancellationPolicy | textCutter: (cancellationPolicyReadMoreCilcked ? null : textMaxLegth)}}\r\n textMaxLegth\"\r\n (click)=\"cancellationPolicyReadMoreCilcked = !cancellationPolicyReadMoreCilcked\">\r\n {{cancellationPolicyReadMoreCilcked ? ('readLess' | translate) : ('readMore' | translate)}}\r\n \r\n

\r\n
\r\n
\r\n
{{'bookNow' | translate}}
\r\n
\r\n
\r\n
\r\n
\r\n","import { Component, OnDestroy, OnInit, Pipe, PipeTransform, ViewChild } from '@angular/core';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { GuestService } from '../../shared/services/guest.service';\r\nimport { PopupService } from '../../shared/services/popup.service';\r\nimport { BookingActivity, ClassType, LessonTypes } from '../../shared/Models/SessionBookingDTO';\r\nimport { MatDialog, MatDialogConfig } from '@angular/material/dialog';\r\nimport { environment } from 'src/environments/environment';\r\nimport { urlConfig } from '../../shared/constants/url-config';\r\nimport { Utilities } from 'src/app/shared/utilities/utilities';\r\nimport { operationType } from 'src/app/shared/Models/WidgetSettingsModels';\r\nimport { ValidationMessageType } from 'src/app/shared/Models/ResultModels';\r\nimport { ActivityBookings, ActivityViewType, ControlSettings, LocationFilter, PropertyType } from 'src/app/shared/constants/commonenums';\r\nimport moment from 'moment';\r\nimport { ReservationService } from 'src/app/layout/reservation.service';\r\nimport _ from 'lodash';\r\nimport { ActivitiesDataDic } from '../activities-lite.data';\r\nimport { ActivityListFilterPipe } from 'src/app/shared/pipes/activity-list-filter.pipe';\r\nimport { DynamicFormService } from 'src/app/shared/dynamicform/service/dynamic-form.service';\r\nimport { ToastrService } from 'ngx-toastr';\r\n@Component({\r\n selector: 'app-activities-list',\r\n templateUrl: './activities-list.component.html',\r\n styleUrls: ['./activities-list.component.scss', './../activities-lite.component.scss']\r\n})\r\n\r\nexport class ActivitiesListComponent implements OnInit, OnDestroy {\r\n subscriptions: Subscription = new Subscription();\r\n isDataLoaded = false;\r\n outOfServiceMessage: any;\r\n availableActivities = [];\r\n tempAvailableActivities = [];\r\n venueList = [];\r\n originalVenueList = [];\r\n diningVenuesList = [];\r\n displayByType = 'non_dining';\r\n venueBasedActivityList = [];\r\n filterByVenue = false;\r\n selectedVenueName = '';\r\n selectedActivities: any;\r\n textMaxLegth = 500;\r\n descriptionReadMoreClicked = false;\r\n safetyInformationReadMoreClicked = false;\r\n cancellationPolicyReadMoreCilcked = false;\r\n showAvailableSlotCount = true;\r\n toggleView = 1;\r\n filteredVenue = 'allActivities';\r\n noDataFound = false;\r\n widgetConfigurations: any = {};\r\n dateFilterStartDate: Date;\r\n dateFilterEndDate: Date;\r\n dayLightDelta = '-4';\r\n currentDateTime: Date;\r\n loadActivitiesOnly = false;\r\n diningSpecialMeals = [];\r\n showDiningSpecialMeals = false;\r\n defaultFrequencyIds = [0,1,2,3,4,5,6];\r\n selectedMealAddOns:any;\r\n nonDiningVenuesList: any[] = [];\r\n searchText = '';\r\n\r\n @ViewChild('LessonsDetailsDialog') LessonsDetailsDialog;\r\n constructor(public activityService: GuestService,\r\n public route: ActivatedRoute,\r\n public ts: TranslateService,\r\n public ps: PopupService,\r\n public dialog: MatDialog,\r\n public reservationService: ReservationService,\r\n private activitiesDataDic: ActivitiesDataDic,\r\n public activityFilter : ActivityListFilterPipe,\r\n private dfs: DynamicFormService,public toastr: ToastrService) {\r\n // this.activityService?.ConfigSettings?.restaurantMerchantCode;\r\n this.subscriptions.add(this.activityService.allClassActivitiesAvailable$.subscribe(value => {\r\n this.availableActivities = value;\r\n this.addActivityTimeLeft();\r\n console.log(this.availableActivities);\r\n this.redirectToSlotSelection();\r\n }));\r\n // this.activityService.languageChange.subscribe(value => {\r\n // if(value)\r\n // this.getRestaurantWidgetSettings();\r\n // });\r\n }\r\n\r\n ngOnInit(): void {\r\n this.activityService.resetConfigBasedStyles();\r\n this.activityService.stopTimer();\r\n this.activityService.hideBackNav();\r\n this.activityService.restaurantMerchantCode = this.route.snapshot.params.merchantId;\r\n this.activityService.activityIdFromURL = this.route.snapshot.params.activityId;\r\n this.activityService.propertyIdFromURL = +this.route.snapshot.queryParams.propertyId;\r\n this.activityService.sessionFilterValue = null;\r\n this.activityService.editData = {};\r\n this.activityService.operation = operationType.create;\r\n this.activityService.successBookRes = {};\r\n this.activityService.fromConfirmation = false;\r\n this.activityService.currentNavURL = 'list';\r\n this.activityService.hideCart.next(false);\r\n this.activityService.selectedDiningSpecialMeal = null;\r\n this.activityService.setSessionData('activityEditData_' + this.activityService.restaurantMerchantCode, {}, true);\r\n this.activityService.widgetConfigurations.subscribe(config => { this.widgetConfigurations = config; });\r\n this.dialog.closeAll();\r\n this.getRestaurantWidgetSettings();\r\n }\r\n\r\n toggleActivitiesVenue(event) {\r\n this.filterByVenue = false; // set this to false whenever tab change to display the venue list 1st\r\n this.displayByType = event.value;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.subscriptions) { this.subscriptions.unsubscribe(); }\r\n }\r\n\r\n setWidgetConfigurations(data) {\r\n this.activityService.setWidgetSettings(data);\r\n this.toggleView = (this.widgetConfigurations.ActivityViewType < ActivityViewType.Both)\r\n ? this.widgetConfigurations.ActivityViewType : ActivityViewType.List;\r\n }\r\n getRestaurantWidgetSettings() {\r\n if (this.activityService?.restaurantMerchantCode) {\r\n this.activityService.startLoader();\r\n this.activityService.byPassValidation = true;\r\n this.subscriptions\r\n .add(this.activityService.getWidgetSettingsByMerchantCode(this.activityService.restaurantMerchantCode , false , this.activityService.selectedLanguageId)\r\n .subscribe((data: any) => {\r\n this.activityService.byPassValidation = false;\r\n this.activityService.stopLoader();\r\n if (data?.Payload) {\r\n this.setWidgetConfigurations(data.Payload);\r\n this.setActivitiesData(data.Payload.PropertyWidgetSettings);\r\n this.dfs.ValidateGuestPhoneNumber = data.Payload.PropertyWidgetSettings[0]?.ValidateGuestPhoneNumber;\r\n this.activityService.widgetSettings = data?.Payload;\r\n this.activityService.enableActivities = this.activityService.widgetSettings?.EnableActivities;\r\n this.activityService.enableDining = this.activityService.widgetSettings?.EnableDining;\r\n if (this.activityService.enableActivities && this.activityService.enableDining) {\r\n this.loadActivitiesOnly = this.activityService.isNonDining = (this.activityService.operation === operationType.edit ? !this.activityService.isDining : true);\r\n if(this.activityService.operation !== operationType.edit) this.activityService.isDining = false;\r\n } else if (!this.activityService.enableDining) {\r\n this.loadActivitiesOnly = this.activityService.isNonDining = true;\r\n this.activityService.isDining = false;\r\n } else {\r\n this.loadActivitiesOnly = this.activityService.isNonDining = false;\r\n this.activityService.isDining = true;\r\n }\r\n this.activityService.getWidgetImagesMerchantLevel();\r\n this.noDataFound = false;\r\n const CartList = this.activityService.getSessionData('CartList_' + this.activityService.restaurantMerchantCode, true);\r\n this.activityService.cartCount = CartList ? CartList.length : 0;\r\n const crypto = window.crypto;\r\n const array = new Uint32Array(1);\r\n this.activityService.CartBookingList$.next(crypto.getRandomValues(array));\r\n this.activityService.bookingSection$.next(BookingActivity.ClassBooking);\r\n this.loadClassActivities(data?.Payload);\r\n if (data?.Payload.AcceptsReservations && !data?.Payload.DisableReservations) {\r\n this.activityService.addGoogleTagManager(data?.Payload.WidgetCustomization.GTMCode);\r\n }\r\n this.isDataLoaded = true;\r\n if (this.activityService?.fromConfirmation && this.activityService?.editData?.RestaurantId) {\r\n if (!this.activityService.editData.isDining && !this.activityService.editData?.isOpenBooking) {\r\n this.availableActivities?.forEach((val: any) => {\r\n if (val?.restaurantWidgetId === this.activityService?.editData?.RestaurantId &&\r\n val?.Id === this.activityService?.editData?.SpecialMealId) {\r\n this.clickBookNow(val);\r\n }\r\n });\r\n } else if(this.activityService.isDining) {\r\n this.filterDining();\r\n this.clickReserveNow(this.diningVenuesList.find(venue => venue.RestaurantId === this.activityService?.editData?.RestaurantId));\r\n } else if(this.activityService.isNonDining) {\r\n this.filterNonDining();\r\n this.clickReserveNow_NonDining(this.nonDiningVenuesList.find(venue => venue.RestaurantId === this.activityService?.editData?.RestaurantId));\r\n }\r\n }\r\n }\r\n else {\r\n this.noDataFound = true;\r\n let validationError = '';\r\n if (data.ValidationMessages && data.ValidationMessages.\r\n filter(msg => msg.Type === ValidationMessageType.Error).length > 0) {\r\n data?.ValidationMessages.filter(msg => msg.Type === ValidationMessageType.Error).forEach(msg => {\r\n validationError += msg.Message + '\\n';\r\n });\r\n this.outOfServiceMessage = validationError;\r\n this.activityService.\r\n openSnackBar(validationError, this.ts.instant('close'), this.activityService.ConfigSettings.snackBarTime, 'error-snackbar');\r\n } else {\r\n this.activityService.\r\n openSnackBar(this.activityService.ConfigSettings.commonErrorMessage, this.ts.instant('close'),\r\n this.activityService.ConfigSettings.snackBarTime, 'error-snackbar');\r\n this.outOfServiceMessage = this.activityService.ConfigSettings.commonErrorMessage;\r\n }\r\n }\r\n }, () => {\r\n this.noDataFound = true;\r\n this.activityService.openSnackBar(this.activityService.ConfigSettings.commonErrorMessage, this.ts.instant('close'),\r\n this.activityService.ConfigSettings.snackBarTime, 'error-snackbar');\r\n this.outOfServiceMessage = this.activityService.ConfigSettings.commonErrorMessage;\r\n this.activityService.stopLoader();\r\n }\r\n ));\r\n }\r\n else {\r\n this.noDataFound = true;\r\n this.outOfServiceMessage = this.activityService.ConfigSettings.commonErrorMessage;\r\n this.activityService.openSnackBar(this.activityService.ConfigSettings.commonErrorMessage, this.ts.instant('close'), this.activityService.ConfigSettings.snackBarTime, 'error-snackbar');\r\n }\r\n }\r\n\r\n setActivitiesData(propertyList){\r\n this.activitiesDataDic.setProperty(propertyList);\r\n }\r\n\r\n redirectToSlotSelection() {\r\n if (this.activityService.activityIdFromURL && this.route.snapshot.params.activityId) {\r\n if ((this.availableActivities && this.availableActivities.length > 0)\r\n || (this.diningSpecialMeals && this.diningSpecialMeals.length > 0)) {\r\n var specificActivity = this.availableActivities.filter(a => a.Id == this.activityService.activityIdFromURL);\r\n if (specificActivity && specificActivity.length > 0) {\r\n this.clickBookNow(specificActivity[0]);\r\n }\r\n else {\r\n var specificEvent = this.diningSpecialMeals.filter(a => a.Id == this.activityService.activityIdFromURL);\r\n if (specificEvent && specificEvent.length > 0) {\r\n var diningVenue = this.originalVenueList.filter(o => o.RestaurantId == specificEvent[0].RestaurantId);\r\n if (diningVenue && diningVenue.length > 0)\r\n this.clickReserveNow(diningVenue[0],\r\n specificEvent[0].Id);\r\n }\r\n }\r\n }\r\n } else if(this.activityService.propertyIdFromURL){\r\n let property = this.originalVenueList.find(({RestaurantId}) => RestaurantId === this.activityService.propertyIdFromURL);\r\n if(Utilities.controlValidate(ControlSettings.DiningProperties, property.PropertyType)){\r\n this.displayByType = 'dining';\r\n this.clickReserveNow(property);\r\n }else{\r\n\r\n this.clickReserveNow_NonDining(property);\r\n }\r\n }\r\n }\r\n\r\n loadClassActivities(data) {\r\n let ActivitiesList = [];\r\n /* this.activityService.LocationList = data.Locations;\r\n this.activityService.InstructorList = data.Instructors;\r\n this.activityService.AllocationTypes = data.AllocationMappings; */\r\n this.venueList = data?.PropertyWidgetSettings || [];\r\n this.originalVenueList = data?.PropertyWidgetSettings || [];\r\n data?.PropertyWidgetSettings?.forEach((eachVenue) => {\r\n if (eachVenue.AcceptsReservations) {\r\n eachVenue.venueImageUrl = environment.BaseUrl + urlConfig.widgetImageURL + eachVenue.RestaurantId;\r\n //dev\r\n // eachVenue.DefaultWaiverForm = {\"Applied\": true,\r\n // \"FormCode\": \"Wave1\",\r\n // \"RestaurantId\": 230};\r\n eachVenue?.AvailableSpecialMeals?.forEach((lesson) => {\r\n if(!lesson.IsForStandbyReservations)\r\n ActivitiesList.push(this.processEachActivities(eachVenue, lesson));\r\n });\r\n //this.activityService.addOnList = this.activityService.addOnList.concat(eachVenue?.Addons);\r\n }\r\n });\r\n this.dayLightDelta = data?.PropertyWidgetSettings[0].DaylightDelta;\r\n const currentTime =\r\n Utilities.getRestaurantDateTime(this.dayLightDelta);\r\n this.currentDateTime = new Date(currentTime.valueOf());\r\n this.activityService.currentDateTime = this.currentDateTime;\r\n this.dateFilterStartDate = this.activityService.dateFilterStartDate || new Date(this.currentDateTime.setHours(0, 0, 0, 0));\r\n this.activityService.dateFilterStartDate = this.dateFilterStartDate;\r\n this.dateFilterEndDate = this.activityService.dateFilterEndDate || new Date(this.currentDateTime.setHours(0, 0, 0, 0));\r\n this.activityService.dateFilterEndDate = this.dateFilterEndDate;\r\n this.diningSpecialMeals = _.sortBy(ActivitiesList?.filter(x => x.LessonType === LessonTypes.SpecialMeal), \"SortOrder\");\r\n let availableMeals = this.activityFilter.transform(this.diningSpecialMeals , {startDate : this.dateFilterStartDate , endDate : this.dateFilterEndDate})\r\n this.showDiningSpecialMeals = availableMeals?.length > 0 ? true : false;\r\n ActivitiesList = _.sortBy(ActivitiesList?.filter(x => x.isViewable && x.LessonType === LessonTypes.GroupLesson), \"SortOrder\");\r\n this.tempAvailableActivities = ActivitiesList;\r\n if (this.activityService.isDining) {\r\n this.filterDining();\r\n } else if(this.activityService.isNonDining){\r\n this.filterNonDining(true);\r\n }\r\n this.activityService.allClassActivitiesAvailable$.next(ActivitiesList);\r\n this.activityService.bookingSection$.next(BookingActivity.ClassBooking);\r\n }\r\n\r\n filterDining() {\r\n this.displayByType = 'dining';\r\n this.diningVenuesList = this.originalVenueList?.filter(x => \r\n Utilities.controlValidate(ControlSettings.DiningProperties, x.PropertyType) && x.AcceptsReservations);\r\n }\r\n\r\n bookSpecialMeal(specialMeal) {\r\n this.clickReserveNow(this.diningVenuesList.find(dining => dining.RestaurantId === specialMeal.RestaurantId), specialMeal.Id);\r\n }\r\n\r\n updateDateFilterValue() {\r\n this.activityService.dateFilterStartDate = this.dateFilterStartDate || this.currentDateTime;\r\n this.activityService.dateFilterEndDate = this.dateFilterEndDate || this.activityService.dateFilterStartDate;\r\n }\r\n\r\n processEachActivities(eachVenue, lesson) {\r\n const activity = {};\r\n let locationval = [];\r\n const staffval = [];\r\n lesson?.ActivitySessions?.forEach(session => {\r\n session?.SessionLocationMappings?.forEach(location => {\r\n if ((locationval && locationval.length === 0) || locationval.length > 0\r\n && !locationval.find(x => x.LocationId === location.StandaloneTableId)) {\r\n locationval.push({ LocationName: this.getLocation(eachVenue.Locations, location), LocationId: location.StandaloneTableId });\r\n }\r\n });\r\n session?.SessionStaffMappings?.forEach(staff => {\r\n if ((staffval && staffval.length === 0) || staffval.length > 0 && !staffval.find(x => x.ServerId === staff.ServerId)) {\r\n staffval.push({ ServerId: staff.ServerId, StaffName: this.getInstructor(eachVenue.Instructors, staff) });\r\n }\r\n });\r\n });\r\n if (Utilities.controlValidate(ControlSettings.VenueBasedActivitiesProperties, eachVenue.PropertyType)) {\r\n lesson.ActivityDayOfWeeks = lesson.FrequencyTypeIds ? lesson.FrequencyTypeIds : this.defaultFrequencyIds;\r\n } else {\r\n lesson.ActivityDayOfWeeks = lesson?.ActivitySessions?.map(item => item.Dayofweek).filter((value, index, self) => self.indexOf(value) === index);\r\n }\r\n\r\n // For venue level need these settings to gathere data in diffecrent screens from the activity selected\r\n lesson.venueLevelLocation = eachVenue.Locations;\r\n lesson.venueLevelInstructors = eachVenue.Instructors;\r\n lesson.venueLevelAllocationMappings = eachVenue.AllocationMappings;\r\n lesson.restaurantWidgetId = eachVenue.RestaurantId;\r\n lesson.IsCartEnabled = eachVenue.IsCartEnabled;\r\n lesson.MaxPastTimeForReservationsInMinutes = eachVenue.MaxPastTimeForReservationsInMinutes;\r\n lesson.DaylightDelta = eachVenue.DaylightDelta;\r\n lesson.EnableMultiSlotSelection = eachVenue.EnableMultiSlotSelection;\r\n lesson.AllocationTypes = eachVenue.AllocationMappings;\r\n lesson.venueName = eachVenue.RestaurantName;\r\n lesson.IsSmsReminderSupported = eachVenue.IsSmsReminderSupported;\r\n lesson.CustomTermsOfService = eachVenue.WidgetCustomization.CustomTermsOfService;\r\n lesson.IsReservationReminderMandatory = eachVenue.WidgetCustomization.IsReservationReminderMandatory;\r\n lesson.ConfirmationVia = eachVenue.WidgetCustomization.ConfirmationVia;\r\n lesson.RestaurantUniqueName = eachVenue.RestaurantUniqueName;\r\n lesson.AllowLocationSelectionForActivity = eachVenue.WidgetCustomization.AllowLocationSelectionForActivity;\r\n lesson.AllowInstructorSelectionForActivity = eachVenue.WidgetCustomization.AllowInstructorSelectionForActivity;\r\n lesson.AllowAdditionalGuestDetails = eachVenue.WidgetCustomization.AllowAdditionalGuestDetails;\r\n lesson.NotesType = eachVenue.WidgetCustomization.NotesType;\r\n // dev\r\n // lesson.WaiverFormCode = \"Wave1\";\r\n lesson.DefaultWaiverForm = eachVenue.DefaultWaiverForm;\r\n\r\n lesson.OperationCurrency = eachVenue.OperationCurrency;\r\n lesson.ImageUrl = lesson.ImageURL;\r\n locationval = locationval?.sort((a, b) => (a.LocationName > b.LocationName) ? 1 : ((b.LocationName > a.LocationName) ? -1 : 0));\r\n lesson.LocationName = locationval?.map((elem) => {\r\n return elem.LocationName;\r\n }).join(',');\r\n eachVenue.LocationName = lesson.LocationName;\r\n lesson.Staffs = staffval?.filter(x => x).map((elem) => {\r\n return elem.StaffName;\r\n }).join(',');\r\n lesson.LessonName = lesson.Name;\r\n lesson.LocationId = locationval;\r\n lesson.StaffValues = staffval;\r\n lesson.SpecialMealId = lesson.Id;\r\n // Not considering available slots count\r\n lesson.Availability = lesson.ClassType === ClassType.Class && !(lesson.AvailableSlots > 0) ? this.ts.instant('notAvailable') : this.ts.instant('available');\r\n lesson.isViewable = locationval.length && staffval.length || false;\r\n lesson.PreferencesCategories = eachVenue.PreferencesCategories;\r\n lesson.PropertyType = eachVenue.PropertyType;\r\n return lesson;\r\n }\r\n\r\n filterActivitiesByVenue(eachVenue) {\r\n this.filterByVenue = true;\r\n const AllLessons = eachVenue.AvailableSpecialMeals;\r\n this.selectedVenueName = eachVenue.RestaurantName;\r\n this.venueBasedActivityList = [];\r\n AllLessons?.forEach(lesson => {\r\n if(!lesson.IsForStandbyReservations)\r\n this.venueBasedActivityList.push(this.processEachActivities(eachVenue, lesson));\r\n });\r\n this.venueBasedActivityList = this.loadActivitiesOnly ?\r\n this.venueBasedActivityList?.filter(x => x.isViewable && x.LessonType === LessonTypes.GroupLesson)\r\n : this.venueBasedActivityList?.filter(x => Utilities.controlValidate(ControlSettings.VenueBasedActivitiesProperties, x.PropertyType));\r\n }\r\n\r\n getLocation(locationList, location) {\r\n const loc = locationList?.filter(data => data.Id === location.StandaloneTableId);\r\n return (loc && loc.length > 0) ? loc[0].Name : '';\r\n }\r\n\r\n getInstructor(instructorList, staffdata) {\r\n const staff = instructorList?.filter(data => data.Id === staffdata.ServerId)[0];\r\n if (staff) {\r\n return staff.Name + ' ' + (staff.LastName || '');\r\n }\r\n else {\r\n return '';\r\n }\r\n }\r\n\r\n getActivitiesDetails(activities) {\r\n const dialogConfig = new MatDialogConfig();\r\n this.selectedActivities = activities;\r\n dialogConfig.data = activities;\r\n dialogConfig.autoFocus = false;\r\n dialogConfig.width = '500px';\r\n dialogConfig.height = 'auto';\r\n dialogConfig.maxHeight = '90vh';\r\n dialogConfig.panelClass = 'activitesDetailDialog';\r\n dialogConfig.backdropClass = 'dgBackdrop';\r\n this.setOtherValues();\r\n this.dialog.open(this.LessonsDetailsDialog, dialogConfig);\r\n }\r\n\r\n setOtherValues() {\r\n this.selectedActivities.activityType = this.selectedActivities.ClassType === ClassType.Session ?\r\n 'Session' : this.selectedActivities.ClassType === ClassType.Class ? 'Class' : 'Duration';\r\n this.showAvailableSlotCount = this.selectedActivities.LessonType === LessonTypes.GroupLesson;\r\n }\r\n\r\n backClick($event) {\r\n }\r\n\r\n clickBookNow(data ) {\r\n this.dialog.closeAll();\r\n console.log(data);\r\n this.activityService.selectedActivities = data;\r\n this.activityService.isDining = false;\r\n this.activityService.isNonDining = false;\r\n this.activityService.LocationList = data.venueLevelLocation;\r\n this.activityService.InstructorList = data.venueLevelInstructors;\r\n this.activityService.AllocationTypes = data.venueLevelAllocationMappings;\r\n this.activityService.restaurantWidgetId = data.restaurantWidgetId;\r\n this.activityService.showGuestFields = false;\r\n this.activityService.navigateToUrl('slot-selection/' + data.restaurantWidgetId, {activityId: data.Id});\r\n }\r\n\r\n clickReserveNow(data, specialMealId = null) {\r\n const filteredStartDate = new Date(this.dateFilterStartDate).setHours(0, 0, 0, 0);\r\n const userCurrentDate = new Date(new Date(this.currentDateTime).setDate(new Date(this.currentDateTime).getDate() + data?.DaysForReservation - 1)).setHours(0, 0, 0, 0);\r\n if (data?.DaysForReservation && this.activityService.operation === operationType.create && filteredStartDate > userCurrentDate) {\r\n if (new Date(this.currentDateTime).setHours(0, 0, 0, 0) === userCurrentDate) {\r\n this.activityService.\r\n openSnackBar(this.ts.instant('bookingsOpenOnlyFor') + moment(this.currentDateTime).format('D MMM, YYYY'), this.ts.instant('close'), this.activityService.ConfigSettings.snackBarTime);\r\n } else {\r\n this.activityService.\r\n openSnackBar(this.ts.instant('bookingsOpenOnlyFor') + moment(this.currentDateTime).format('D MMM, YYYY') + ' - ' + moment(userCurrentDate).format('D MMM, YYYY'), this.ts.instant('close'), this.activityService.ConfigSettings.snackBarTime);\r\n }\r\n return;\r\n }\r\n this.activityService.selectedDining = data;\r\n this.activityService.isDining = true;\r\n this.activityService.isNonDining = false;\r\n this.activityService.restaurantWidgetId = data.RestaurantId;\r\n this.activityService.displaySeatingArea = data.WidgetCustomization?.LocationFilters?.filter(x => x == LocationFilter.ByArea).length > 0;\r\n this.activityService.displaySeatingType = data.WidgetCustomization?.LocationFilters?.filter(x => x == LocationFilter.ByType).length > 0;\r\n this.activityService.isSpecialMeal = false;\r\n this.activityService.isTableReservation = true;\r\n this.activityService.showGuestFields = false;\r\n this.activityService.DisableCustomTermsAndConditions = data.DisableCustomTermsAndConditions;\r\n if (specialMealId) {\r\n this.activityService.selectedDiningSpecialMeal = data?.AvailableSpecialMeals.find(specialMeal => specialMeal.Id === specialMealId);\r\n this.activityService.isSpecialMeal = true;\r\n this.activityService.isTableReservation = !this.activityService.isSpecialMeal;\r\n }\r\n else if(this.activityService?.editData?.SpecialMealId){\r\n specialMealId = this.activityService?.editData?.SpecialMealId;\r\n }\r\n this.activityService.navigateToUrl('slot-selection/' + data.RestaurantId, {specialMealId});\r\n }\r\n\r\n clickReserveNow_NonDining(data) {\r\n this.activityService.clickReserveNow_NonDining(data);\r\n this.activityService.showGuestFields = false;\r\n this.activityService.DisableCustomTermsAndConditions = data.DisableCustomTermsAndConditions;\r\n this.activityService.navigateToUrl('slot-selection/' + data.RestaurantId, {bookaspot: true});\r\n }\r\n\r\n errorImageHandler(event) {\r\n const image = new Image();\r\n image.onload = () => {\r\n event.target.src = image.src;\r\n };\r\n image.onerror = () => {\r\n event.target.src = './assets/images/defaultImage.png';\r\n };\r\n }\r\n\r\n detailDialogClose() {\r\n this.dialog.closeAll();\r\n }\r\n\r\n addActivityTimeLeft() {\r\n if (this.availableActivities) {\r\n this.availableActivities.forEach(activity => {\r\n activity.TimeRemaining = this.findTimeLeft(activity);\r\n activity.Ongoing = activity.TimeRemaining?.trim() == 'Currently Running';\r\n });\r\n }\r\n }\r\n\r\n findTimeLeft(avlLessons) {\r\n const currentTime =\r\n Utilities.getRestaurantDateTime(avlLessons.DaylightDelta);\r\n const currentDateTime = moment(currentTime);\r\n const currentDate = moment(currentDateTime.format(moment.HTML5_FMT.DATE));\r\n let dayofWeek = currentDate.day();\r\n let activityStartDate = moment(avlLessons.StartDate);\r\n let activityEndDate = moment(avlLessons.EndDate);\r\n let activityDayofWeek;\r\n let activityEndDays;\r\n let nextSession = 0;\r\n let nextEndSession = 0;\r\n if (currentDate >= activityStartDate && currentDate <= activityEndDate) {\r\n let dateDifference: number = activityEndDate.diff(currentDateTime, 'days');\r\n for (let i = 0; i <= dateDifference; i++) {\r\n let currDate = moment(currentDateTime);\r\n currDate.add('days', i);\r\n activityDayofWeek = avlLessons.ActivitySessions.filter(session => {\r\n let localDate = moment(currDate.format(moment.HTML5_FMT.DATE) + ' ' + session.StartTime);\r\n let dayOfWeek = localDate.day();\r\n return dayOfWeek === session.Dayofweek && localDate >= currentDateTime\r\n });\r\n if (activityDayofWeek.length > 0) {\r\n nextSession = Math.min(...activityDayofWeek.map(x => moment(currDate.format(moment.HTML5_FMT.DATE) + ' ' + x.StartTime)));\r\n break;\r\n }\r\n activityEndDays = avlLessons.ActivitySessions.filter(session => {\r\n let localDate = moment(currDate.format(moment.HTML5_FMT.DATE) + ' ' + session.EndTime);\r\n return dayofWeek === session.Dayofweek && localDate >= currentDateTime\r\n });\r\n if (activityEndDays.length > 0 && dateDifference == 0) {\r\n nextEndSession = Math.min(...activityEndDays.map(x => moment(currDate.format(moment.HTML5_FMT.DATE) + ' ' + x.StartTime)));\r\n break;\r\n }\r\n }\r\n return nextSession ? this.activityService.allocateTimeUnits(moment(nextSession), currentDateTime) : (nextEndSession ? 'Currently Running' : null);\r\n }\r\n return '-';\r\n }\r\n\r\n filterNonDining(initialLoad?: boolean){\r\n this.displayByType ='non_dining';\r\n this.nonDiningVenuesList = this.originalVenueList?.filter(x => Utilities.controlValidate(ControlSettings.OpenBookingProperties, x.PropertyType)\r\n && x.AcceptsReservations && x.WidgetCustomization.ActivityBookings.filter(y => y == ActivityBookings.OpenBooking)?.length);\r\n\r\n if(initialLoad && !this.nonDiningVenuesList?.length && this.tempAvailableActivities.length\r\n || (initialLoad && this.activityService.operation === operationType.edit \r\n && (this.activityService.editData && !this.activityService.editData?.isOpenBooking && !this.activityService.editData?.isDining))) {\r\n this.displayByType ='activities';\r\n }\r\n }\r\n\r\n}\r\n\r\n\r\n@Pipe({\r\n name: 'checkAcceptReservations'\r\n})\r\nexport class checkAcceptReservationsPipe implements PipeTransform {\r\n\r\n transform(data: any): any {\r\n return (data.filter(prop => prop.AcceptsReservations).length)\r\n }\r\n\r\n\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { GuestService } from 'src/app/shared/services/guest.service';\r\n\r\n@Component({\r\n selector: 'app-activities-lite-check-out',\r\n templateUrl: './activities-lite-check-out.component.html',\r\n styleUrls: ['./activities-lite-check-out.component.scss',\r\n './../activities-lite.component.scss',\r\n '../activities-lite-order-summary/activities-lite-order-summary.component.scss']\r\n})\r\nexport class ActivitiesLiteCheckOutComponent implements OnInit {\r\n\r\n constructor(public activityService: GuestService) {\r\n this.activityService.stopTimer();\r\n }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n}\r\n","
\r\n
\r\n arrow_back\r\n
\r\n
\r\n
\r\n
{{'checkOut' | translate}}
\r\n
{{'proceedWithPaymentToFinalizeTheBooking' | translate}}\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n person\r\n
2 {{'people' | translate}}
\r\n
\r\n
\r\n \r\n calendar_today\r\n
12/23/2021
\r\n
\r\n
\r\n \r\n access_time\r\n
10:00 AM - 11:00 AM
\r\n
\r\n
\r\n \r\n location_on\r\n
2A
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
{{'description' | translate}}
\r\n
\r\n
\r\n
\r\n
\r\n
{{'sessionCharges' | translate}} X 2
\r\n
\r\n
\r\n
$67.00
\r\n
\r\n
\r\n
\r\n
\r\n
{{'totalCharges' | translate}}
\r\n
\r\n
\r\n
$154
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
{{'grandTotal' | translate}}
\r\n
\r\n
\r\n
$154
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n {{'submit' | translate}}\r\n
\r\n
\r\n
\r\n","
\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n \r\n delete\r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n\r\n \r\n \r\n
\r\n {{notes.text}}\r\n
\r\n
\r\n \r\n \r\n check\r\n {{option.value}}\r\n \r\n \r\n
\r\n
\r\n \r\n {{'leaveaComment' | translate}}\r\n \r\n \r\n
\r\n
\r\n
\r\n
","import { AfterViewInit, Component, EventEmitter, Input, OnInit, Output, QueryList, ViewChildren } from '@angular/core';\r\nimport { Validators } from '@angular/forms';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { FieldConfig } from 'src/app/shared/dynamicform/models/common-models';\r\nimport { GuestService } from 'src/app/shared/services/guest.service';\r\nimport { MatChip } from '@angular/material/chips';\r\nimport { Utilities } from 'src/app/shared/utilities/utilities';\r\nimport { DynamicFormService } from 'src/app/shared/dynamicform/service/dynamic-form.service';\r\nimport { DynamicFormComponent } from 'src/app/shared/dynamicform/dynamic-form/dynamic-form.component';\r\nimport { fieldType } from 'src/app/shared/constants/commonenums';\r\nimport { CustomFieldsDTO, SecondaryContactDTO, RequiredPartyFields } from 'src/app/shared/Models/PartyModels';\r\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'app-activities-lite-secondary-guest-data',\r\n templateUrl: './activities-lite-secondary-guest-data.component.html',\r\n styleUrls: ['./activities-lite-secondary-guest-data.component.scss']\r\n})\r\nexport class ActivitiesLiteSecondaryGuestDataComponent implements OnInit, AfterViewInit {\r\n @Input() secondaryGuestDetail: SecondaryContactDTO;\r\n @Input() customGuestFields;\r\n @Input() selectedActivity;\r\n @Input() secondaryGuestCount;\r\n @Input() restaurantDetail;\r\n @Input() secondaryGuestVisibileFields;\r\n @Input() noteType: number;\r\n secondaryGuestConfig: FieldConfig[] = [];\r\n @ViewChildren('form') secondaryGuestForm: QueryList;\r\n @Output() secondaryGuestNotes = new EventEmitter();\r\n @Output() deleteSecondaryGuest = new EventEmitter();\r\n @Output() secondaryGuestData = new EventEmitter();\r\n mobileNumberLength: number = 10;\r\n customGuestFieldsMappingValidations: any = [];\r\n customGuestFieldsLoad: boolean = false;\r\n notesData: any[] = [];\r\n mobileMandatoryValues = false;\r\n showNotes: boolean = false;\r\n\r\n constructor(private ts: TranslateService, public guestService: GuestService, private dynamicForm: DynamicFormService) { }\r\n\r\n ngOnInit(): void {\r\n this.customGuestFieldsMappingValidations = this.restaurantDetail?.customGuestFieldsMappingValidations;\r\n this.createSecondaryGuestConfig();\r\n this.createCustomFieldsConfig();\r\n }\r\n\r\n createSecondaryGuestConfig() {\r\n let data = this.secondaryGuestDetail;\r\n if (this.secondaryGuestVisibileFields?.showGuestNames) {\r\n this.secondaryGuestConfig.push({\r\n type: 'input',\r\n name: 'FirstName',\r\n label: this.ts.instant('firstName'),\r\n inputType: 'text',\r\n showErrorText: true,\r\n isFormArray: false,\r\n errorMessage: this.ts.instant('firstNameRequired'),\r\n validation: [Validators.required],\r\n value: (data && data.FirstName) ? data.FirstName : '',\r\n appearanceOutline: true,\r\n },\r\n {\r\n type: 'input',\r\n label: this.ts.instant('lastName'),\r\n name: 'LastName',\r\n inputType: 'text',\r\n showErrorText: true,\r\n isFormArray: false,\r\n errorMessage: this.ts.instant('lastNameRequired'),\r\n value: (data && data.LastName) ? data.LastName : '',\r\n appearanceOutline: true,\r\n },\r\n {\r\n type: 'input',\r\n label: this.ts.instant('aliasName'),\r\n name: 'AliasName',\r\n inputType: 'text',\r\n showErrorText: true,\r\n isFormArray: false,\r\n value: (data && data.AliasName) ? data.AliasName : '',\r\n validation: [],\r\n appearanceOutline: true,\r\n hide: this.guestService?.widgetSettings?.ShowAliasName ? false : true,\r\n }\r\n )\r\n }\r\n if (this.secondaryGuestVisibileFields?.showprimaryContacts) {\r\n this.secondaryGuestConfig.push({\r\n type: 'select',\r\n name: 'CountryId',\r\n inputType: 'number',\r\n class: 'guest-view__mobile-code-edit',\r\n options: this.guestService.countriesList ? this.guestService.countriesList.map(element => {\r\n return { id: element.Id, value: element.CountryPhoneCode + ' (' + element.Name + ' )' }\r\n }) : [],\r\n value: (data && data.CountryId) ? data.CountryId : Utilities.getDefaultCountry(this.guestService.countriesList ? this.guestService.countriesList : [], this.restaurantDetail.Country).Id,\r\n validation: [Validators.required],\r\n isFormArray: false,\r\n appearanceOutline: true,\r\n },\r\n {\r\n type: 'input',\r\n name: 'PhoneNumber',\r\n inputType: 'text',\r\n label: this.ts.instant('mobile'),\r\n directive: 'numberOnly',\r\n showErrorText: true,\r\n isFormArray: false,\r\n value: (data && data.PhoneNumber) ? data.PhoneNumber : null,\r\n appearanceOutline: true,\r\n isMandatory: true,\r\n validation: [],\r\n numberFormat: 'phoneNumber',\r\n },\r\n {\r\n type: 'input',\r\n label: this.ts.instant('email'),\r\n name: 'EmailAddress',\r\n inputType: 'email',\r\n showErrorText: true,\r\n isFormArray: false,\r\n errorMessage: this.ts.instant('emailRequired'),\r\n validation: [Validators.email, Validators.pattern('^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\\\.[A-Za-z]{2,4}$')],\r\n value: (data && data.EmailAddress) ? data.EmailAddress : null,\r\n appearanceOutline: true,\r\n })\r\n }\r\n this.secondaryGuestConfig = this.requireFliedValidation(this.restaurantDetail.RequiredSecondaryGuestFields, this.secondaryGuestConfig);\r\n }\r\n\r\n ngOnChanges(changes) {\r\n this.notesData = this.secondaryGuestDetail?.Notes || [];\r\n this.showNotes = this.secondaryGuestVisibileFields?.showNotes || false;\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.getFormValue();\r\n this.getSecondaryGuestDetails();\r\n }\r\n\r\n getFormValue() {\r\n if (this.secondaryGuestForm.first.form) {\r\n this.countryCodeChange();\r\n this.secondaryGuestForm.first.form.valueChanges.pipe(debounceTime(500),\r\n distinctUntilChanged()).subscribe(data => {\r\n this.getSecondaryGuestDetails();\r\n if (data.CountryId) {\r\n this.countryCodeChange()\r\n }\r\n if (data.PhoneNumber) {\r\n this.mobileNumberChange()\r\n }\r\n })\r\n }\r\n if (this.secondaryGuestForm.last.form) {\r\n this.secondaryGuestForm.last.form.valueChanges.pipe(debounceTime(500),\r\n distinctUntilChanged()).subscribe(data => {\r\n this.getSecondaryGuestDetails();\r\n })\r\n }\r\n }\r\n\r\n getSecondaryGuestDetails() {\r\n let guest = Object.assign(this.secondaryGuestForm.last.form.value , this.secondaryGuestDetail);\r\n let secondaryContact = {\r\n FirstName: guest.FirstName,\r\n LastName: guest.LastName,\r\n AliasName: guest.AliasName,\r\n EmailAddress: guest.EmailAddress ? guest.EmailAddress : null,\r\n PhoneNumber: guest.PhoneNumber ? guest.PhoneNumber : null,\r\n CountryId: guest.CountryId,\r\n ContactCustomFields: this.bindCustomGuestFieldsValue(),\r\n PartyId: this.secondaryGuestDetail.PartyId ? this.secondaryGuestDetail.PartyId : null,\r\n Id: this.secondaryGuestDetail.Id || null,\r\n ContactNotes: guest.ContactNotes ? guest.ContactNotes : null,\r\n Notes: this.notesData,\r\n isValid: this.secondaryGuestForm.last.form.valid,\r\n count: this.secondaryGuestDetail.count,\r\n }\r\n this.secondaryGuestData.emit(secondaryContact);\r\n }\r\n bindCustomGuestFieldsValue() {\r\n let CustomFieldsList: CustomFieldsDTO[] = [];\r\n if (this.customGuestFields && this.customGuestFields.length > 0) {\r\n this.customGuestFields.forEach((field) => {\r\n if (this.secondaryGuestForm.first.form.value['customField_' + field.Id.toString()] != null) {\r\n let customField = new CustomFieldsDTO();\r\n customField.CustomFieldId = Number(field.Id);\r\n customField.CustomFieldValue = this.secondaryGuestForm.first.form.value['customField_' + field.Id.toString()];\r\n customField.CustomFieldName = field.FieldName;\r\n CustomFieldsList.push(customField);\r\n }\r\n })\r\n }\r\n return CustomFieldsList;\r\n }\r\n\r\n toggleSelection(chip: MatChip, noteOptions) {\r\n this.secondaryGuestNotes.emit({ chip: chip, noteOptions: noteOptions });\r\n this.getSecondaryGuestDetails();\r\n }\r\n\r\n countryCodeChange() {\r\n if (this.secondaryGuestVisibileFields?.showprimaryContacts) {\r\n let countryCode = this.secondaryGuestForm.first.form.get('CountryId').value;\r\n if (countryCode) {\r\n const selectedCountryCode = this.guestService.countriesList.find((country) => {\r\n return country.Id === countryCode;\r\n });\r\n this.guestService.selectedCountryId = selectedCountryCode.Id;\r\n this.dynamicForm.selectedCountryCode = selectedCountryCode.CountryPhoneCode;\r\n this.changeMobileLength();\r\n this.mobileNumberChange();\r\n }\r\n }\r\n }\r\n\r\n mobileNumberChange() {\r\n if (this.secondaryGuestVisibileFields?.showprimaryContacts) {\r\n let mobileNumber = this.secondaryGuestForm.first.form.get('PhoneNumber').value;\r\n if (mobileNumber) {\r\n mobileNumber = this.dynamicForm.onInputChange(mobileNumber, false);\r\n }\r\n this.changeMobileLength();\r\n this.secondaryGuestForm.first.form.get('PhoneNumber').setValue(mobileNumber, { emitEvent: false });\r\n }\r\n }\r\n\r\n changeMobileLength() {\r\n if (this.secondaryGuestVisibileFields?.showprimaryContacts && this.dynamicForm.requiredPhoneNumberLength$) {\r\n const count = this.dynamicForm.requiredPhoneNumberLength$;\r\n this.mobileNumberLength = count;\r\n this.secondaryGuestForm.first.form.controls['PhoneNumber'].setValidators(this.mobileMandatoryValues ? [Validators.required, Validators.minLength(this.mobileNumberLength), Validators.maxLength(this.mobileNumberLength)] : [Validators.minLength(this.mobileNumberLength), Validators.maxLength(this.mobileNumberLength)]);\r\n this.secondaryGuestForm.first.form.updateValueAndValidity({ emitEvent: false });\r\n }\r\n }\r\n\r\n deleteSecondary(guestDetail) {\r\n this.deleteSecondaryGuest.emit(({\r\n index: guestDetail.count,\r\n contactId: guestDetail.ContactId\r\n }));\r\n }\r\n\r\n createCustomFieldsConfig() {\r\n if (this.customGuestFields) {\r\n this.customGuestFields.map((customField, index) => {\r\n let fieldConfig: FieldConfig;\r\n if (this.showCustomFieldBasedOnActivity(customField.Id)) {\r\n if (customField.FieldType == fieldType[0]) {\r\n fieldConfig = {\r\n type: 'input',\r\n name: `customField_${customField.Id}`,\r\n inputType: 'text',\r\n label: customField.FieldName,\r\n placeholder: customField.FieldDescription,\r\n class: 'guest-view__custom-fields-edit',\r\n id: customField.Id,\r\n isFormArray: false,\r\n appearanceOutline: true,\r\n value: this.getCustomGuestFieldsValue(customField.Id, fieldType[0]),\r\n validation: this.customValidationRequired(customField),\r\n hide: !this.secondaryGuestVisibileFields.showCustomFields\r\n };\r\n } else if (customField.FieldType == fieldType[1]) {\r\n let Options = [];\r\n Options = customField.FieldOptions.split(',').map(x => { return { id: x, value: x } });\r\n fieldConfig = {\r\n type: 'select',\r\n label: customField.FieldName,\r\n name: `customField_${customField.Id}`,\r\n placeholder: customField.FieldDescription,\r\n options: Options,\r\n class: 'guest-view__custom-fields-edit',\r\n id: customField.Id,\r\n isFormArray: false,\r\n appearanceOutline: true,\r\n value: this.getCustomGuestFieldsValue(customField.Id, fieldType[1]),\r\n validation: this.customValidationRequired(customField),\r\n hide: !this.secondaryGuestVisibileFields.showCustomFields\r\n }\r\n }\r\n if (fieldConfig) {\r\n this.secondaryGuestConfig.push(fieldConfig);\r\n }\r\n }\r\n })\r\n }\r\n this.customGuestFieldsLoad = true;\r\n }\r\n\r\n showCustomFieldBasedOnActivity(customFieldId) {\r\n let specialMealId = (this.selectedActivity && this.selectedActivity.SpecialMealId) ? this.selectedActivity?.SpecialMealId : -1;\r\n let activitiesCustomGuestFields = this.customGuestFieldsMappingValidations;\r\n if (activitiesCustomGuestFields.find(activity => activity.ActivityId == specialMealId)) {\r\n let activeActivity = activitiesCustomGuestFields.find(activity => activity.ActivityId == specialMealId)\r\n if (activeActivity.CustomFields.filter(field => field.FieldId === customFieldId && field.AvailableForWebReservation == true)?.length > 0) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n } else {\r\n return false\r\n }\r\n }\r\n\r\n getCustomGuestFieldsValue(Id, type) {\r\n let customValue;\r\n if (this.secondaryGuestDetail && this.secondaryGuestDetail.ContactCustomFields && this.secondaryGuestDetail.ContactCustomFields.length) {\r\n customValue = this.secondaryGuestDetail.ContactCustomFields.find(field => field.CustomFieldId === Id)\r\n }\r\n return type == fieldType[0] ? (customValue ? customValue['CustomFieldValue'] : '') : (customValue ? customValue['CustomFieldValue'] : '');\r\n }\r\n\r\n customValidationRequired(field) {\r\n if (this.customFieldMandatory(field)) {\r\n return [Validators.required];\r\n } else {\r\n return [];\r\n }\r\n }\r\n\r\n customFieldMandatory(field) {\r\n let specialMealId = (this.selectedActivity && this.selectedActivity.SpecialMealId) ? this.selectedActivity?.SpecialMealId : -1;\r\n let activitiesCustomGuestFields = this.customGuestFieldsMappingValidations;\r\n let CustomFields = activitiesCustomGuestFields.find(activity => activity.ActivityId == specialMealId)?.CustomFields;\r\n let validations = CustomFields?.find(customField => customField?.FieldId === field?.Id)?.Validations;\r\n if (validations?.length > 0) {\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n requireFliedValidation(RequiredFields, fieldConfig) {\r\n if (this.secondaryGuestVisibileFields?.showprimaryContacts) {\r\n const phoneIndex = fieldConfig.findIndex(x => x.name.toLowerCase() === 'PhoneNumber');\r\n const emailIndex = fieldConfig.findIndex(x => x.name.toLowerCase() === 'EmailAddress');\r\n const emailPattern = [Validators.required, Validators.email, Validators.pattern('^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\\\.[A-Za-z]{2,}$')]\r\n let mobileMandatoryValues = [RequiredPartyFields.All, RequiredPartyFields.Both, RequiredPartyFields.Anyone, RequiredPartyFields.PhoneNumber, RequiredPartyFields.PhoneNumberEmailAddressSecEmailAddress, RequiredPartyFields.PhoneNumberEmailAddressSecPhoneNumber, RequiredPartyFields.PhoneNumberSecEmailAddress];\r\n let emailMandatoryValues = [RequiredPartyFields.All, RequiredPartyFields.Both, RequiredPartyFields.Anyone, RequiredPartyFields.EmailAddress, RequiredPartyFields.EmailAddressSecEmailAddress, RequiredPartyFields.EmailAddressSecPhoneNumber, RequiredPartyFields.EmailAddressSecPhoneNumberSecEmailAddress, RequiredPartyFields.PhoneNumberEmailAddressSecEmailAddress, RequiredPartyFields.PhoneNumberEmailAddressSecPhoneNumber];\r\n if (mobileMandatoryValues.includes(RequiredFields)) {\r\n this.mobileMandatoryValues = true;\r\n fieldConfig[phoneIndex].validation = [Validators.required];\r\n fieldConfig[phoneIndex].showErrorText = true;\r\n fieldConfig[phoneIndex].errorMessage = 'guestBookDetailsMobileError';\r\n\r\n }\r\n if (emailMandatoryValues.includes(RequiredFields)) {\r\n fieldConfig[emailIndex].validation = emailPattern;\r\n fieldConfig[emailIndex].showErrorText = true;\r\n fieldConfig[emailIndex].errorMessage = 'guestBookDetailsEmailError';\r\n\r\n }\r\n }\r\n return fieldConfig\r\n }\r\n\r\n}\r\n","
\r\n
\r\n {{!activityService.isDining ? (activityService.isNonDining ? activityService.selectedNonDining.RestaurantName : selectedActivity?.Name) : activityService.selectedDining.RestaurantName}}\r\n
\r\n
{{'guestDetails' |\r\n translate}}
\r\n
\r\n {{'reservationSubTitle' | translate}}\r\n
\r\n
\r\n \r\n\r\n\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n 0 || additionalAddOns?.length > 0) && allEligibleAddOns?.length\" \r\n [class.collapseMode]=\"!expand\" style=\"\r\n transition: 0.5s;\r\n padding: 0;\r\n border: 1px solid #ededed;\r\n margin-bottom: 18px;\r\n padding-bottom: 15px;\r\n position: relative;\r\n overflow: auto;\r\n \">\r\n
\r\n {{'addons' | translate}}\r\n *\r\n \r\n \r\n
= 992 || expand)\">\r\n
\r\n {{ 'minCategoryAddonMessage' | translate: {name: name} }}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n {{item.AddonName}}\r\n *\r\n
\r\n \r\n {{item | getCategoryData : restaurantData.PreferencesCategories :'Text'}}\r\n
\r\n
\r\n
{{restaurantData.OperationCurrency}} {{item.Price | currencyDecimalFormatter}}\r\n
\r\n
\r\n \r\n For {{ item.AddOnDetails[0].Duration }} {{'hours' | translate}}\r\n \r\n For {{ item.AddOnDetails[0].Duration }} {{'minutes' | translate}}\r\n
\r\n
{{'perSession' |\r\n translate}}
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n 0 || additionalAddOns?.length > 0) && allEligibleAddOns?.length ? 'col-lg-6 col-md-12 col-xl-6 col-xs-12 col-sm-12' \r\n : 'm-auto col-lg-8 col-md-8 col-xl-8 col-sm-8 col-xs-8']\">\r\n
\r\n {{'guestDetails' | translate}}\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
0\"\r\n class=\"guest-section__secondary-guest pt-4\">\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n\r\n
\r\n 0 || additionalAddOns?.length > 0)}\"\r\n [ngClass]=\"{'col-lg-8 col-md-12 col-xl-8 col-sm-12 col-xs-12 m-auto': !(mandatoryAddOns?.length > 0 || additionalAddOns?.length > 0)}\">\r\n

\r\n {{'CancellationPolicy' | translate}}\r\n

\r\n
\r\n {{activityService?.selectedSpecialMeal?.CancellationPolicy}}\r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n \r\n
\r\n {{notes.text}}\r\n
\r\n
\r\n \r\n \r\n check\r\n {{option.value}}\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n {{'leaveaComment' | translate}}\r\n \r\n \r\n
\r\n
\r\n
\r\n","import { Component, EventEmitter, HostListener, Input, OnInit, Output, Pipe, PipeTransform, QueryList, SimpleChanges, ViewChild, ViewChildren, ViewEncapsulation, } from '@angular/core';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { ButtonValue, FieldConfig } from 'src/app/shared/dynamicform/models/common-models';\r\nimport { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\r\nimport { DynamicFormComponent } from 'src/app/shared/dynamicform/dynamic-form/dynamic-form.component';\r\nimport { GuestService } from 'src/app/shared/services/guest.service';\r\nimport { buttonTypes, fieldType } from 'src/app/shared/constants/commonenums';\r\nimport { CustomFieldsDTO, SecondaryContactDTO } from 'src/app/shared/Models/PartyModels';\r\nimport { MatChip } from '@angular/material/chips';\r\nimport { environment } from 'src/environments/environment';\r\nimport { Utilities } from 'src/app/shared/utilities/utilities';\r\nimport { DynamicFormService } from 'src/app/shared/dynamicform/service/dynamic-form.service';\r\nimport _ from 'lodash';\r\nimport { operationType, PricingCategory, PricingType, SelectionType } from 'src/app/shared/Models/WidgetSettingsModels';\r\nimport moment from 'moment';\r\nimport { Subscription } from 'rxjs';\r\nimport { ReservationService } from 'src/app/layout/reservation.service';\r\n// import e from 'express';\r\nimport {\r\n MatSnackBar,\r\n MatSnackBarHorizontalPosition,\r\n MatSnackBarVerticalPosition,\r\n} from '@angular/material/snack-bar';\r\n@Component({\r\n selector: 'app-activities-lite-guest-data',\r\n templateUrl: './activities-lite-guest-data.component.html',\r\n styleUrls: ['./activities-lite-guest-data.component.scss'],\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class ActivitiesLiteGuestDataComponent implements OnInit {\r\n constructor(private rs: ReservationService, private ts: TranslateService, public activityService: GuestService, private dfs: DynamicFormService, private _snackBar: MatSnackBar, public categoryDataPipe: GetCategoryDataPipe) { }\r\n @HostListener('window:resize', ['$event'])\r\n onResize(event) {\r\n this.screenWidth = event.target.innerWidth;\r\n if (this.screenWidth >= 992) {\r\n this.expand = true;\r\n }\r\n }\r\n expand = true;\r\n screenWidth = window.innerWidth;\r\n @ViewChildren('form') components: QueryList;\r\n @Input() selectedActivity;\r\n @Input() customGuestFields;\r\n @Input() editContactData;\r\n @Input() notesOptions;\r\n @Input() promoCodeDetail;\r\n @Output() guestData = new EventEmitter();\r\n @Output() notesData = new EventEmitter();\r\n customGuestFieldsMappingValidations: any = [];\r\n customGuestFieldsLoad: boolean = false;\r\n restaurantData: any;\r\n guestConfig: FieldConfig[] = [];\r\n termsAndConditionsConfig: FieldConfig[] = [];\r\n marketingFlag: FieldConfig[] = [];\r\n mobileNumberLength = 10;\r\n mandatoryAddOns: any = [];\r\n editActivityIncomingAddOns: any = [];\r\n additionalAddOns: any;\r\n additionalAddonCount = 2;\r\n mandatoryAddonCount = 2;\r\n PricingType = PricingType;\r\n PricingCategory = PricingCategory;\r\n allEligibleAddOns: any = [];\r\n\r\n @Input() matchedContinousSlots: any[] = [];\r\n @Input() TimeSlotUnitInMinutes: number = 10;\r\n @Input() checkedNonDiningLocalTime: string = '';\r\n @Input() checkedDiningLocalTime: string = '';\r\n subscriptions: Subscription = new Subscription();\r\n addSecondaryGuestBtn: ButtonValue;\r\n secondaryGuest: SecondaryContactDTO[] = [];\r\n secondaryGuestDetails: SecondaryContactDTO[] = [];\r\n allowAddingSecondaryGuest: boolean = false;\r\n additionalSecondaryGuestCount: boolean = true;\r\n notesRef: any[] = [];\r\n secondaryGuestVisibileFields = { showGuestNames: false, showprimaryContacts: false, showNotes: false, showCustomFields: false };\r\n horizontalPosition: MatSnackBarHorizontalPosition = 'center';\r\n verticalPosition: MatSnackBarVerticalPosition = 'top';\r\n primaryContact : any;\r\n mandatoryCategoryAddons: string[] = [];\r\n\r\n ngOnInit() {\r\n let restaurantId = this.getRestaurantId();\r\n this.restaurantData = this.activityService.widgetSettings.PropertyWidgetSettings.find(property => property.RestaurantId == restaurantId);\r\n this.notesRef = this.resetSecondaryNotes(_.cloneDeep(this.notesOptions));\r\n if (this.selectedActivity && this.selectedActivity.SpecialMealId && !this.activityService.isDining) {\r\n this.allowAddingSecondaryGuest = this.selectedActivity.AllowAddingSecondaryGuest || false;\r\n if ( this.allowAddingSecondaryGuest && this.activityService.selectedSize > 1) {\r\n this.allowAddingSecondaryGuest = true;\r\n }\r\n else {\r\n this.allowAddingSecondaryGuest = false;\r\n }\r\n this.secondaryGuestVisibileFields.showGuestNames = this.selectedActivity.GuestNames || false;\r\n this.secondaryGuestVisibileFields.showprimaryContacts = this.selectedActivity.PrimaryContacts || false;\r\n this.secondaryGuestVisibileFields.showNotes = this.selectedActivity.ContactNotes || false;\r\n this.secondaryGuestVisibileFields.showCustomFields = this.selectedActivity.CustomGuestFields || false;\r\n } else {\r\n this.allowAddingSecondaryGuest = this.restaurantData?.WidgetCustomization.AllowAdditionalGuestDetails || false;\r\n if (this.allowAddingSecondaryGuest && this.activityService.selectedSize > 1) {\r\n this.allowAddingSecondaryGuest = true;\r\n }\r\n else {\r\n this.allowAddingSecondaryGuest = false;\r\n }\r\n this.secondaryGuestVisibileFields.showGuestNames = this.restaurantData?.WidgetCustomization.GuestNames || false;\r\n this.secondaryGuestVisibileFields.showprimaryContacts = this.restaurantData?.WidgetCustomization.PrimaryContacts || false;\r\n this.secondaryGuestVisibileFields.showNotes = this.restaurantData?.WidgetCustomization.ContactNotes || false;\r\n this.secondaryGuestVisibileFields.showCustomFields = this.restaurantData?.WidgetCustomization.CustomGuestFields || false;\r\n }\r\n if (this.allowAddingSecondaryGuest) {\r\n let secondaryGuestFields = Object.entries(this.secondaryGuestVisibileFields);\r\n this.allowAddingSecondaryGuest = secondaryGuestFields?.find(field => field[1] == true) ? true : false;\r\n }\r\n this.customGuestFieldsMappingValidations = this.restaurantData?.customGuestFieldsMappingValidations;\r\n this.createGuestConfig();\r\n this.createCustomFieldsConfig();\r\n if (this.editContactData?.SecondaryContacts?.length) {\r\n this.secondaryGuestDetails = this.editContactData.SecondaryContacts;\r\n this.secondaryGuestDetails.map((contact,index) => {\r\n contact.isValid = true;\r\n // contact.count = index + 1;\r\n })\r\n this.secondaryGuest = this.editContactData.SecondaryContacts;\r\n this.validateBookingCount();\r\n }\r\n this.activityService.addOnList = this.restaurantData.Addons || [];\r\n if (this.activityService.isNonDining || this.activityService.isTableReservation) this.getOpenBookingAddOns();\r\n else \r\n if(this.activityService.isDining){\r\n this.getOpenBookingAddOns();\r\n }\r\n else\r\n this.loadAddOns();\r\n\r\n // this.addOnTempList = this.addOnTempList.slice(0,2)\r\n }\r\n\r\n getOpenBookingAddOns() {\r\n\r\n let selectedDate = moment((this.activityService.isTableReservation || this.activityService.isDining) ? this.checkedDiningLocalTime : this.checkedNonDiningLocalTime).format('YYYY-MM-DD');\r\n let startTime = moment((this.activityService.isTableReservation || this.activityService.isDining) ? this.checkedDiningLocalTime : this.matchedContinousSlots[0]).format('HH:mm');\r\n let endTime = moment((this.activityService.isTableReservation || this.activityService.isDining) ? this.checkedDiningLocalTime : this.matchedContinousSlots[this.matchedContinousSlots.length - 1]).format('HH:mm');\r\n\r\n if(this.activityService.isDining){\r\n startTime = moment(this.checkedDiningLocalTime).format('HH:mm');\r\n endTime = moment(this.checkedDiningLocalTime).format('HH:mm');\r\n }\r\n\r\n const reqObj = {\r\n RestaurantId: this.activityService.isNonDining ? this.activityService.selectedNonDining.RestaurantId : this.activityService.selectedDining.RestaurantId,\r\n StartTime: moment(`${selectedDate} ${startTime}`).format('YYYY-MM-DDTHH:mm:ss'),\r\n EndTime: moment(`${selectedDate} ${endTime}`).add(this.TimeSlotUnitInMinutes, 'm').format('YYYY-MM-DDTHH:mm:ss')\r\n }\r\n\r\n this.activityService.startLoader();\r\n this.subscriptions.add(this.rs.getOpenBookingAddOns(reqObj, this.activityService.selectedSpecialMeal?.Id).subscribe(response => {\r\n this.activityService.addOnList = response?.Payload || [];\r\n }, (err) => { },\r\n () => {\r\n this.activityService.stopLoader();\r\n this.loadAddOns();\r\n }));\r\n }\r\n\r\n\r\n getRestaurantId() {\r\n if (this.activityService.isDining) return this.activityService.selectedDining.RestaurantId;\r\n else if (this.activityService.isNonDining) return this.activityService.selectedNonDining.RestaurantId;\r\n else return this.activityService.selectedActivities.RestaurantId;\r\n }\r\n\r\n expandAddOn() {\r\n this.expand = !this.expand\r\n }\r\n\r\n loadAddOns() {\r\n let getAddOns = Utilities.getAddons(this.activityService.addOnList, this.activityService.selectedSpecialMeal?.Id, this.activityService.isNonDining);\r\n\r\n this.mandatoryAddOns = [];\r\n this.additionalAddOns = [];\r\n\r\n if (this.activityService.operation == operationType.edit && this.activityService.editData) {\r\n this.editActivityIncomingAddOns = this.activityService.editData.BookingContactAddonItems ? this.activityService.editData?.BookingContactAddonItems : {};\r\n }\r\n\r\n // if(this.activityService.isNonDining) this.activityService.addOnList = this.allEligibleAddOns;\r\n\r\n // if(!this.activityService.isNonDining)\r\n getAddOns.forEach(item => {\r\n let availableMandatoryAddOn = this.activityService.addOnList.find(addOnData => addOnData.AddonId == item.AddonId);\r\n if (availableMandatoryAddOn) {\r\n availableMandatoryAddOn['IsVisible'] = item.IsVisible;\r\n availableMandatoryAddOn['MaxQuantity'] = item.MaxQuantity\r\n availableMandatoryAddOn['MinQuantity'] = item.MinQuantity\r\n availableMandatoryAddOn['Price'] = availableMandatoryAddOn.AddOnDetails?.length ? availableMandatoryAddOn.AddOnDetails[0].Price : 0;\r\n availableMandatoryAddOn['IsCategoryLevelMandatory'] = item.IsCategoryLevelMandatory;\r\n\r\n if (!this.activityService.isNonDining && !this.activityService.isDining)\r\n availableMandatoryAddOn['OverAllQuantity'] = this.activityService.selectedSlot ? this.activityService.selectedSlot.AddOnAvailability?.find(data => data.AddonId == availableMandatoryAddOn.AddonId)?.OverAllQuantity : 0;\r\n else availableMandatoryAddOn['OverAllQuantity'] = item['OverAllQuantity'] || 0;\r\n\r\n if (!this.activityService.isNonDining && !this.activityService.isDining)\r\n availableMandatoryAddOn['AvailableQuantity'] = this.activityService.selectedSlot ? this.activityService.selectedSlot.AddOnAvailability?.find(data => data.AddonId == availableMandatoryAddOn.AddonId)?.AvailableQuantity : 0\r\n else availableMandatoryAddOn['AvailableQuantity'] = item['AvailableQuantity'] || 0;\r\n\r\n availableMandatoryAddOn['IsMandatory'] = item.IsMandatory;\r\n\r\n if (!this.activityService.isNonDining && !this.activityService.isDining)\r\n availableMandatoryAddOn['IsUnlimited'] = this.activityService.selectedSlot?.AddOnAvailability?.find(data => data.AddonId == availableMandatoryAddOn.AddonId)?.IsUnlimited || false;\r\n else availableMandatoryAddOn['IsUnlimited'] = item['IsUnlimited'];\r\n\r\n availableMandatoryAddOn['PricingType'] = availableMandatoryAddOn.AddOnDetails?.length ? availableMandatoryAddOn.AddOnDetails[0].PricingType : null;\r\n availableMandatoryAddOn['PricingCategory'] = availableMandatoryAddOn.AddOnDetails?.length ? availableMandatoryAddOn.AddOnDetails[0].PricingCategory : null;\r\n let addOnQuantity = 0;\r\n if (item.IsMandatory) {\r\n if (this.editActivityIncomingAddOns && this.editActivityIncomingAddOns.length > 0) {\r\n let selectedAddOnCreate = this.editActivityIncomingAddOns.filter(x => x.AddonId == item.AddonId);\r\n if (selectedAddOnCreate && selectedAddOnCreate.length > 0) {\r\n if (availableMandatoryAddOn.SelectionType == SelectionType.PerGuest) {\r\n availableMandatoryAddOn.selectedQuantity = this.activityService.selectedSize;\r\n }\r\n else {\r\n availableMandatoryAddOn.selectedQuantity = selectedAddOnCreate[0].AddonCount;\r\n }\r\n }\r\n else {\r\n availableMandatoryAddOn.selectedQuantity = this.getAddOnQuantity(availableMandatoryAddOn);\r\n }\r\n }\r\n else {\r\n availableMandatoryAddOn.selectedQuantity = this.getAddOnQuantity(availableMandatoryAddOn);\r\n }\r\n this.mandatoryAddOns.push(availableMandatoryAddOn)\r\n this.allEligibleAddOns.push(availableMandatoryAddOn);\r\n }\r\n\r\n else {\r\n if (this.editActivityIncomingAddOns && this.editActivityIncomingAddOns.length > 0) {\r\n let selectedAddOnCreate = this.editActivityIncomingAddOns.filter(x => x.AddonId == item.AddonId);\r\n if (selectedAddOnCreate && selectedAddOnCreate.length > 0) {\r\n availableMandatoryAddOn.selectedQuantity = selectedAddOnCreate[0].AddonCount;\r\n }\r\n else {\r\n availableMandatoryAddOn.selectedQuantity = 0;\r\n }\r\n }\r\n else {\r\n availableMandatoryAddOn.selectedQuantity = 0;\r\n }\r\n this.additionalAddOns.push(availableMandatoryAddOn)\r\n this.allEligibleAddOns.push(availableMandatoryAddOn);\r\n }\r\n\r\n // if (item.IsMandatory || item.IsCategoryLevelMandatory) {\r\n // addOnQuantity = this.getAddOnQuantity(availableMandatoryAddOn)\r\n // }\r\n // availableMandatoryAddOn.selectedQuantity = addOnQuantity;\r\n // if (this.data) {\r\n // if (this.data.BookingContactAddonItems) {\r\n // let bookedAddon = this.data.BookingContactAddonItems.find(addOn => addOn.AddonId == availableMandatoryAddOn.AddonId);\r\n // if (bookedAddon && bookedAddon != undefined && bookedAddon != null) {\r\n // availableMandatoryAddOn.selectedQuantity = bookedAddon.AddonCount || 0;\r\n // }\r\n // }\r\n // else if (this.data.SelectedAddOns) {\r\n // availableMandatoryAddOn.selectedQuantity = this.data.SelectedAddOns.find(addOn => addOn.AddonId == availableMandatoryAddOn.AddonId)?.Quantity || 0;\r\n // }\r\n // }\r\n // availableMandatoryAddOn.selectedQuantity = Number( availableMandatoryAddOn.selectedQuantity);\r\n // if (item.IsMandatory || item.IsCategoryLevelMandatory) {\r\n // this.mandatoryAddOns.push(availableMandatoryAddOn);\r\n // this.allEligibleAddOns.push(availableMandatoryAddOn);\r\n\r\n // }\r\n // else {\r\n // this.additionalAddOns.push(availableMandatoryAddOn);\r\n // this.allEligibleAddOns.push(availableMandatoryAddOn);\r\n\r\n // }\r\n\r\n }\r\n })\r\n this.mandatoryAddOns = this.getAddOnsGroupedByCategory(this.mandatoryAddOns)\r\n this.allEligibleAddOns = this.allEligibleAddOns.filter(_a => _a.IsVisible);\r\n this.allEligibleAddOns = _.orderBy(this.allEligibleAddOns, 'IsMandatory', 'desc');\r\n this.additionalAddOns = this.getAddOnsGroupedByCategory(this.additionalAddOns)\r\n //this.ps.addOnList = _.flatten([_.flatten(_.map(this.mandatoryAddOns, 'Addons')), _.flatten(_.map(this.additionalAddOns, 'Addons'))]);\r\n this.checkCategoryMandatoryAddons();\r\n\r\n }\r\n\r\n\r\n getAddOnQuantity(addon) {\r\n //changes for future planned - based on selectiontype\r\n switch (addon.SelectionType) {\r\n case SelectionType.PerGuest:\r\n let addonMinQuantity: number = 0;\r\n if (addon.IsMandatory) {\r\n addonMinQuantity = this.activityService.selectedSize;\r\n }\r\n else {\r\n addonMinQuantity = addon.MinQuantity;\r\n }\r\n return addonMinQuantity;\r\n break;\r\n case SelectionType.PerBooking:\r\n return addon.MinQuantity\r\n break;\r\n case SelectionType.PerLesson:\r\n return addon.MinQuantity\r\n break;\r\n }\r\n }\r\n\r\n getAddOnsGroupedByCategory(addOnList) {\r\n return _.chain(addOnList)\r\n .groupBy(\"CategoryId\")\r\n .map((value, key) => {\r\n return {\r\n CategoryId: value[0].CategoryId,\r\n Addons: value\r\n }\r\n })\r\n .value();\r\n }\r\n ngAfterViewInit() {\r\n console.log(this.activityService)\r\n this.getFormValue();\r\n }\r\n getFormValue() {\r\n if (this.components.first.form) {\r\n this.countryCodeChange();\r\n this.components.first.form.valueChanges.subscribe(data => {\r\n this.getPrimaryGuestData();\r\n })\r\n }\r\n if (this.components.last.form) {\r\n this.components.last.form.valueChanges.subscribe(data => {\r\n this.getPrimaryGuestData();\r\n })\r\n }\r\n }\r\n\r\n decreaseAddOn(addOn) {\r\n if (addOn.IsMandatory && addOn.selectedQuantity - 1 < addOn.MinQuantity && addOn.SelectionType != SelectionType.PerGuest) {\r\n }\r\n else if (addOn.IsMandatory && addOn.SelectionType == SelectionType.PerGuest && (addOn.selectedQuantity - 1 < this.activityService.selectedSize)) {\r\n }\r\n else {\r\n if (addOn.selectedQuantity - 1 >= 0)\r\n addOn.selectedQuantity = addOn.selectedQuantity - 1;\r\n }\r\n this.checkCategoryMandatoryAddons();\r\n }\r\n increaseAddOn(addOn) {\r\n if ((!addOn.IsUnlimited || (addOn.IsUnlimited && addOn.MaxQuantity)) && ((addOn.selectedQuantity == addOn.MaxQuantity) || (addOn.SelectionType !== SelectionType.PerLesson && (addOn.selectedQuantity + 1) > addOn.AvailableQuantity))) {\r\n }\r\n else if (addOn.IsMandatory && addOn.SelectionType == SelectionType.PerGuest && (addOn.selectedQuantity + 1 > this.activityService.selectedSize)) {\r\n\r\n }\r\n else {\r\n addOn.selectedQuantity = addOn.selectedQuantity + 1;\r\n }\r\n this.checkCategoryMandatoryAddons();\r\n }\r\n\r\n addonQuantityValidations(event, addon) {\r\n if (addon.SelectionType == SelectionType.PerLesson && (!addon.IsUnlimited || (addon.IsUnlimited && addon.MaxQuantity))) {\r\n addon.selectedQuantity = addon.IsMandatory ? addon.MaxQuantity : (event.target.value >= 1) ? 1 : 0;\r\n } else if (addon.SelectionType == SelectionType.PerGuest && addon.IsMandatory && (!addon.IsUnlimited || (addon.IsUnlimited && addon.MaxQuantity))) {\r\n addon.selectedQuantity = this.activityService.selectedSize;\r\n } else if (addon.IsMandatory && (event.target.value == '' || event.target.value < addon.MinQuantity)) {\r\n addon.selectedQuantity = addon.MinQuantity;\r\n } else if ((event.target.value == '' || event.target.value < addon.MinQuantity)) {\r\n addon.selectedQuantity = 0;\r\n } else if(addon.IsUnlimited && addon.MaxQuantity && (event.target.value > addon.MaxQuantity || event.target.value > addon.AvailableQuantity)) {\r\n addon.selectedQuantity = addon.MaxQuantity;\r\n } else if ((!addon.IsUnlimited) && (event.target.value > addon.MaxQuantity || event.target.value > addon.AvailableQuantity)) {\r\n addon.selectedQuantity = addon.AvailableQuantity < addon.MaxQuantity ? addon.AvailableQuantity : addon.MaxQuantity; \r\n }\r\n if (Number(event.target.value) !== Number(addon.selectedQuantity)) {\r\n let message = ''\r\n const minsize = addon.IsMandatory ? addon.MinQuantity : 0;\r\n const maxsize = addon.MaxQuantity;\r\n this.ts.get('missMatchAddonQuantity', { minsize, maxsize }).subscribe(msgVal => message = msgVal);\r\n this._snackBar.open(message, 'Close', {\r\n horizontalPosition: this.horizontalPosition,\r\n verticalPosition: this.verticalPosition,\r\n duration: 3000,\r\n });\r\n }\r\n this.checkCategoryMandatoryAddons();\r\n }\r\n\r\n checkCategoryMandatoryAddons(){\r\n let _categoryAddons = {}\r\n let _missingCategoryAddon: string[] = [];\r\n\r\n this.allEligibleAddOns.forEach(addon => {\r\n if(addon.IsCategoryLevelMandatory){\r\n _categoryAddons[addon.CategoryId] = (_categoryAddons[addon.CategoryId] || 0) + addon.selectedQuantity;\r\n }\r\n })\r\n\r\n Object.entries(_categoryAddons).forEach(([key, value]) => {\r\n if(!value){\r\n let categoryName = this.categoryDataPipe.transform({CategoryId: key}, this.restaurantData.PreferencesCategories, 'Text')\r\n _missingCategoryAddon.push(categoryName)\r\n }\r\n })\r\n \r\n this.mandatoryCategoryAddons = _missingCategoryAddon;\r\n\r\n this.validateBookingCount();\r\n }\r\n\r\n loadAllAddOns(type) {\r\n if (type == \"mandatory\") {\r\n this.mandatoryAddonCount = this.mandatoryAddOns.length;\r\n }\r\n else {\r\n this.additionalAddonCount = this.additionalAddOns.length\r\n }\r\n }\r\n\r\n showMinAddOns(type) {\r\n if (type == \"mandatory\") {\r\n this.mandatoryAddonCount = 2\r\n }\r\n else {\r\n this.additionalAddonCount = 2\r\n }\r\n }\r\n\r\n createGuestConfig() {\r\n let data = this.editContactData\r\n this.guestConfig = [\r\n {\r\n type: 'input',\r\n name: 'firstName',\r\n label: this.ts.instant('firstName'),\r\n inputType: 'text',\r\n showErrorText: true,\r\n isFormArray: false,\r\n errorMessage: this.ts.instant('firstNameRequired'),\r\n validation: [Validators.required],\r\n value: (data && data.FirstName) ? data.FirstName : '',\r\n appearanceOutline: true,\r\n },\r\n {\r\n type: 'input',\r\n label: this.ts.instant('lastName'),\r\n name: 'lastName',\r\n inputType: 'text',\r\n showErrorText: true,\r\n isFormArray: false,\r\n charLength: 2,\r\n errorMessage: this.ts.instant('lastNameRequired'),\r\n value: (data && data.LastName) ? data.LastName : '',\r\n validation: [Validators.required, Validators.minLength(2)],\r\n appearanceOutline: true,\r\n },\r\n {\r\n type: 'input',\r\n label: this.ts.instant('aliasName'),\r\n name: 'aliasName',\r\n inputType: 'text',\r\n showErrorText: true,\r\n isFormArray: false,\r\n //errorMessage: this.ts.instant('lastNameRequired'),\r\n value: (data && data.AliasName) ? data.AliasName : '',\r\n appearanceOutline: true,\r\n hide: this.activityService?.widgetSettings?.ShowAliasName ? false : true,\r\n },\r\n {\r\n type: 'select',\r\n name: 'CountryId',\r\n inputType: 'number',\r\n class: 'guest-view__mobile-code-edit', // Do not modify the className, there is a dependency for editGuest details.\r\n options: this.activityService.countriesList ? this.activityService.countriesList.map(element => {\r\n return { id: element.Id, value: element.CountryPhoneCode + ' (' + element.Name + ' )' }\r\n }) : [],\r\n cellClick: this.countryCodeChange.bind(this, true),\r\n value: (data && data.CountryId) ? data.CountryId : Utilities.getDefaultCountry(this.activityService.countriesList ? this.activityService.countriesList : [], this.restaurantData.Country).Id,\r\n validation: [Validators.required],\r\n isFormArray: false,\r\n appearanceOutline: true,\r\n },\r\n {\r\n type: 'input',\r\n name: 'phone',\r\n inputType: 'text',\r\n label: this.ts.instant('mobile'),\r\n directive: 'numberOnly',\r\n //validation: [Validators.minLength(minMobileLength)], //minlength has to be included\r\n showErrorText: true,\r\n blurClick: this.mobileNumberChange.bind(this),\r\n isFormArray: false,\r\n value: (data && data.PhoneNumber) ? data.PhoneNumber : '',\r\n appearanceOutline: true,\r\n // isPhoneNumber:true,\r\n isMandatory: true,\r\n validation: [Validators.required],\r\n numberFormat: 'phoneNumber',\r\n },\r\n {\r\n type: 'input',\r\n label: this.ts.instant('email'),\r\n name: 'email',\r\n inputType: 'email',\r\n showErrorText: true,\r\n isFormArray: false,\r\n errorMessage: this.ts.instant('emailRequired'),\r\n validation: [Validators.required, Validators.email, Validators.pattern('^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\\\.[A-Za-z]{2,4}$')],\r\n value: (data && data.EmailAddress) ? data.EmailAddress : '',\r\n appearanceOutline: true,\r\n }\r\n ];\r\n this.addPromocodeConfig();\r\n this.addMarketingCollateralsConfig();\r\n }\r\n addPromocodeConfig() {\r\n if (this.activityService.selectedDining.WidgetCustomization?.DisplayPromoCode && !this.selectedActivity?.SpecialMealId) {\r\n this.guestConfig.push({\r\n type: 'input',\r\n name: 'promoCode',\r\n label: this.activityService.selectedDining.WidgetCustomization?.PromoCodeLabel ? this.activityService.selectedDining.WidgetCustomization?.PromoCodeLabel : this.ts.instant('promoCode'),\r\n inputType: 'text',\r\n showErrorText: true,\r\n isFormArray: false,\r\n value: this.promoCodeDetail ? this.promoCodeDetail : '',\r\n appearanceOutline: true,\r\n placeholder: this.activityService.selectedDining.WidgetCustomization?.PromoCodeLabel ? this.activityService.selectedDining.WidgetCustomization?.PromoCodeLabel : this.ts.instant('promoCode'),\r\n })\r\n }\r\n }\r\n\r\n countryCodeChange() {\r\n let countryCode = this.components.first.form.get('CountryId').value;\r\n if (countryCode) {\r\n const selectedCountryCode = this.activityService.countriesList.find((country) => {\r\n return country.Id === countryCode;\r\n });\r\n this.activityService.selectedCountryId = selectedCountryCode.Id;\r\n this.dfs.selectedCountryCode = selectedCountryCode.CountryPhoneCode;\r\n this.changeMobileLength();\r\n this.mobileNumberChange();\r\n }\r\n }\r\n\r\n mobileNumberChange() {\r\n let mobileNumber = this.components.first.form.get('phone').value;\r\n if (mobileNumber) {\r\n mobileNumber = this.dfs.onInputChange(mobileNumber, false);\r\n this.changeMobileLength();\r\n }\r\n this.components.first.form.get('phone').setValue(mobileNumber, { emitEvent: false });\r\n }\r\n\r\n changeMobileLength() {\r\n if (this.dfs.requiredPhoneNumberLength$) {\r\n const count = this.dfs.requiredPhoneNumberLength$;\r\n this.mobileNumberLength = count;\r\n this.components.first.form.controls['phone'].setValidators([Validators.required, Validators.minLength(this.mobileNumberLength), Validators.maxLength(this.mobileNumberLength)]);\r\n this.components.first.form.updateValueAndValidity({ emitEvent: false });\r\n }\r\n else {\r\n this.dfs.requiredPhoneNumberLength$ = this.dfs.countriesList.find(country => country.Id == (this.activityService.selectedCountryId || this.dfs.selectedCountryCode))?.PhoneNumberLength;\r\n this.components.first.form.controls['phone'].setValidators([Validators.required, Validators.minLength(this.dfs.requiredPhoneNumberLength$), Validators.maxLength(this.dfs.requiredPhoneNumberLength$)]);\r\n this.components.first.form.updateValueAndValidity({ emitEvent: false });\r\n }\r\n }\r\n\r\n addMarketingCollateralsConfig() {\r\n if (this.activityService.selectedDining.MarketingFlagEnabled && this.activityService.selectedDining?.MarketingFlagDescription && !this.selectedActivity?.SpecialMealId) {\r\n this.marketingFlag = [{\r\n type: 'checkbox',\r\n placeholder: this.activityService.selectedDining?.MarketingFlagDescription ? JSON.parse(this.activityService.selectedDining?.MarketingFlagDescription)[0] : '',\r\n value: (this.editContactData && this.editContactData) ? this.editContactData.MarketingOptedIn : false,\r\n name: 'MarketingOptedIn',\r\n class: 'p3',\r\n isFormArray: false,\r\n innerHTMLdata: true\r\n }]\r\n }\r\n }\r\n createCustomFieldsConfig() {\r\n if (this.customGuestFields) {\r\n this.customGuestFields.map((customField, index) => {\r\n let fieldConfig: FieldConfig;\r\n if (this.showCustomFieldBasedOnActivity(customField.Id)) {\r\n if (customField.FieldType == fieldType[0]) {\r\n fieldConfig = {\r\n type: 'input',\r\n name: `customField_${customField.Id}`,\r\n inputType: 'text',\r\n label: customField.FieldName,\r\n placeholder: customField.FieldDescription,\r\n class: 'guest-view__custom-fields-edit',\r\n id: customField.Id,\r\n isFormArray: false,\r\n appearanceOutline: true,\r\n value: this.getCustomGuestFieldsValue(customField.Id, fieldType[0]),\r\n validation: this.customValidationRequired(customField)\r\n };\r\n } else if (customField.FieldType == fieldType[1]) {\r\n let Options = [];\r\n Options = customField.FieldOptions.split(',').map(x => { return { id: x, value: x } });\r\n fieldConfig = {\r\n type: 'select',\r\n label: customField.FieldName,\r\n name: `customField_${customField.Id}`,\r\n placeholder: customField.FieldDescription,\r\n options: Options,\r\n class: 'guest-view__custom-fields-edit',\r\n id: customField.Id,\r\n isFormArray: false,\r\n appearanceOutline: true,\r\n value: this.getCustomGuestFieldsValue(customField.Id, fieldType[1]),\r\n validation: this.customValidationRequired(customField)\r\n }\r\n }\r\n if (fieldConfig) {\r\n this.guestConfig.push(fieldConfig);\r\n }\r\n }\r\n })\r\n }\r\n this.customGuestFieldsLoad = true;\r\n setTimeout(() => {\r\n this.getPrimaryGuestData();\r\n }, 1000)\r\n }\r\n getCustomGuestFieldsValue(Id, type) {\r\n let customValue;\r\n if (this.editContactData && this.editContactData.ContactCustomFields && this.editContactData.ContactCustomFields.length) {\r\n customValue = this.editContactData.ContactCustomFields.find(field => field.CustomFieldId === Id)\r\n }\r\n return type == fieldType[0] ? (customValue ? customValue['CustomFieldValue'] : '') : (customValue ? customValue['CustomFieldValue'] : '');\r\n }\r\n getPrimaryGuestData() {\r\n let guest = this.components.first.form.value\r\n let contact = {\r\n FirstName: guest.firstName,\r\n LastName: guest.lastName,\r\n AliasName: guest.aliasName,\r\n EmailAddress: guest.email,\r\n PhoneNumber: guest.phone,\r\n CountryId: guest.CountryId,\r\n ContactCustomFields: this.bindCustomGuestFieldsValue(),\r\n MarketingOptedIn: this.components.last?.form?.value.MarketingOptedIn,\r\n promoCode: guest.promoCode\r\n }\r\n this.primaryContact = contact;\r\n this.guestData.emit({ formValid: this.components.first.form.valid && !this.mandatoryCategoryAddons?.length, guestContact: contact , secondaryContact: this.secondaryGuestDetails });\r\n\r\n }\r\n bindCustomGuestFieldsValue() {\r\n let CustomFieldsList: CustomFieldsDTO[] = [];\r\n if (this.customGuestFields && this.customGuestFields.length > 0) {\r\n this.customGuestFields.forEach((field) => {\r\n if (this.components.first.form.value['customField_' + field.Id.toString()] != null) {\r\n let customField = new CustomFieldsDTO();\r\n customField.CustomFieldId = Number(field.Id);\r\n customField.CustomFieldValue = this.components.first.form.value['customField_' + field.Id.toString()];\r\n customField.CustomFieldName = field.FieldName;\r\n CustomFieldsList.push(customField);\r\n }\r\n })\r\n }\r\n return CustomFieldsList;\r\n }\r\n toggleSelection(chip: MatChip, noteOptions) {\r\n this.notesData.emit({ chip: chip, noteOptions: noteOptions });\r\n\r\n }\r\n\r\n showCustomFieldBasedOnActivity(customFieldId) {\r\n let specialMealId = (this.selectedActivity && this.selectedActivity.SpecialMealId) ? this.selectedActivity?.SpecialMealId : -1;\r\n let activitiesCustomGuestFields = this.customGuestFieldsMappingValidations;\r\n if (activitiesCustomGuestFields.find(activity => activity.ActivityId == specialMealId)) {\r\n let activeActivity = activitiesCustomGuestFields.find(activity => activity.ActivityId == specialMealId)\r\n if (activeActivity.CustomFields.filter(field => field.FieldId === customFieldId && field.AvailableForWebReservation == true)?.length > 0) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n } else {\r\n return false\r\n }\r\n }\r\n customValidationRequired(field) {\r\n if (this.customFieldMandatory(field)) {\r\n return [Validators.required];\r\n } else {\r\n return [];\r\n }\r\n }\r\n customFieldMandatory(field) {\r\n let specialMealId = (this.selectedActivity && this.selectedActivity.SpecialMealId) ? this.selectedActivity?.SpecialMealId : -1;\r\n let activitiesCustomGuestFields = this.customGuestFieldsMappingValidations;\r\n let CustomFields = activitiesCustomGuestFields.find(activity => activity.ActivityId == specialMealId)?.CustomFields\r\n let validations = CustomFields?.find(customField => customField?.FieldId === field?.Id)?.Validations;\r\n if (validations?.length > 0) {\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n\r\n addSecondaryGuestDetails() {\r\n this.secondaryGuest.push({\r\n FirstName: null,\r\n LastName: null,\r\n AliasName: null,\r\n EmailAddress: null,\r\n PhoneNumber: null,\r\n CountryId: null,\r\n ContactCustomFields: null,\r\n Notes: _.cloneDeep(this.notesRef),\r\n Id: null,\r\n ContactId: null,\r\n ContactNotes: null,\r\n PartyId: null,\r\n isValid: false,\r\n count: this.secondaryGuest.length,\r\n });\r\n this.secondaryGuestDetails = this.secondaryGuest;\r\n\r\n this.validateBookingCount();\r\n\r\n }\r\n\r\n deleteSecondaryGuest({index, contactId}) {\r\n if(contactId){\r\n this.secondaryGuest = this.secondaryGuest.filter(detail => detail.ContactId !== contactId);\r\n } else if(index >= 0){\r\n this.secondaryGuest = this.secondaryGuest.filter(detail => detail.count !== index);\r\n }\r\n this.secondaryGuestDetails = this.secondaryGuest;\r\n this.validateBookingCount();\r\n }\r\n\r\n validateBookingCount() {\r\n if (this.selectedActivity && this.editContactData?.Id) {\r\n this.additionalSecondaryGuestCount = this.secondaryGuestDetails?.length === ((this.activityService.selectedSize )) ? false : true;\r\n }\r\n\r\n else {\r\n this.additionalSecondaryGuestCount = this.secondaryGuestDetails?.length === (this.activityService.selectedSize - 1) ? false : true;\r\n }\r\n this.guestData.emit({ formValid: this.components?.first.form.valid && !this.mandatoryCategoryAddons?.length, guestContact: this.primaryContact , secondaryContact: this.secondaryGuestDetails });\r\n }\r\n\r\n secondaryGuestNotes(event) {\r\n this.toggleSelection(event.chip, event.noteOptions);\r\n }\r\n\r\n secondaryGuestValid(updatedContact) {\r\n let contactIndex = this.secondaryGuestDetails.findIndex(contact => ((contact.count !== null && contact.count !== undefined) && (contact.count == updatedContact.count)) || (contact.Id && contact.Id == updatedContact.Id))\r\n if(contactIndex >= 0){\r\n let updatedValue = Object.assign(this.secondaryGuestDetails[contactIndex], updatedContact);\r\n this.secondaryGuestDetails[contactIndex] = updatedValue;\r\n \r\n }\r\n this.guestData.emit({ formValid: this.components.first.form.valid && !this.mandatoryCategoryAddons?.length, guestContact: this.primaryContact, secondaryContact: this.secondaryGuestDetails });\r\n }\r\n\r\n resetSecondaryNotes(notes) {\r\n notes?.forEach(note => {\r\n if (note?.checkBoxOptions && note.checkBoxOptions?.length) {\r\n note.checkBoxOptions = note.checkBoxOptions?.map(x => { return { id: x.id, value: x.value, selected: false, icon: x.icon } });\r\n }\r\n if (note.commentsBox) {\r\n note.commentsBox.value = '';\r\n }\r\n });\r\n return notes;\r\n }\r\n\r\n isNumberKey(evt) {\r\n var charCode = (evt.which) ? evt.which : evt.keyCode\r\n if (charCode > 31 && (charCode < 48 || charCode > 57))\r\n return false;\r\n return true;\r\n }\r\n\r\n validateAddOnsQtyOnChange(item) {\r\n setTimeout(() => {\r\n if(item.selectedQuantity)\r\n item.selectedQuantity = Math.floor(item.selectedQuantity);\r\n }, 10);\r\n }\r\n\r\n}\r\n\r\n@Pipe({\r\n name: 'viewMore'\r\n})\r\nexport class viewMorePipe implements PipeTransform {\r\n\r\n transform(data: any, count): any {\r\n return (data.splice(0, count - 1))\r\n }\r\n}\r\n\r\n@Pipe({\r\n name: 'getCategoryData'\r\n})\r\nexport class GetCategoryDataPipe implements PipeTransform {\r\n transform(addOn: any, categories, property): any {\r\n\r\n let data = categories.find(category => category.Id == addOn.CategoryId)\r\n return property == 'Color' ? `rgba(${data.Color.R}, ${data.Color.G}, ${data.Color.B}, ${data.Color.A})` : data.Text;\r\n\r\n }\r\n}\r\n","import { Component, Injectable, Input } from \"@angular/core\";\r\nimport { ActivatedRoute } from \"@angular/router\";\r\nimport moment from \"moment\";\r\nimport { ReservationService } from \"src/app/layout/reservation.service\";\r\nimport { GuestService } from \"src/app/shared/services/guest.service\";\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ActivitiesLayoutSupportService {\r\n seatingTypePriceDetail = {};\r\n\r\n constructor(public activityService: GuestService, public route: ActivatedRoute, public rs: ReservationService){}\r\n\r\n getRateplanData(location, currentFromDate, matchedContinousSlots, duration, sizeMapping, restaurantId, selectedSeatingType, callbackFunction) {\r\n const selectedDate = moment(currentFromDate).format('YYYY-MM-DD');\r\n const startTime = moment(matchedContinousSlots[0]).format('HH:mm');\r\n\r\n let _slots = [{\r\n Time: moment(`${selectedDate} ${startTime}`).format('YYYY-MM-DDTHH:mm:ss'),\r\n DurationInMinutes: duration\r\n }]\r\n let _rateplanRequest = {\r\n Slots: _slots,\r\n Size: this.getCoverTypesize(sizeMapping),\r\n TableIds: location?.Id ? [\r\n location.Id\r\n ] : [],\r\n SeatingTypeIds: selectedSeatingType ? [selectedSeatingType] : null,\r\n CoverTypes: sizeMapping?.sizes,\r\n FinancialEffectId: null,\r\n BookingBehavior: 0,\r\n StartDate: `${selectedDate}T00:00:00.000Z`,\r\n EndDate: `${selectedDate}T00:00:00.000Z`\r\n }\r\n this.activityService.startLoader();\r\n this.rs.getLocationRateplanCalculated(restaurantId, _rateplanRequest).subscribe(data => {\r\n if (location) {\r\n location.PriceDetail = data;\r\n }else if(selectedSeatingType){\r\n this.seatingTypePriceDetail[selectedSeatingType] = data;\r\n }\r\n callbackFunction();\r\n this.activityService.stopLoader();\r\n }, err => {\r\n this.activityService.stopLoader();\r\n })\r\n }\r\n\r\n getCoverTypesize(sizeMapping): number {\r\n return sizeMapping?.sizes?.reduce((res, curr) => res + (+curr.Covers), 0);\r\n }\r\n}","
\r\n
\r\n \r\n
\r\n
\r\n
{{cover.CoverTypeId ? coverTypeName[cover.CoverTypeId] : (cover.BookingTypeId ? bookingTypeName[cover.BookingTypeId] : ('SelectCoverSize' | translate))}}
\r\n
\r\n -
\r\n
\r\n \r\n \r\n \r\n \r\n {{option}}\r\n \r\n \r\n \r\n
\r\n \r\n +
\r\n
\r\n
\r\n
\r\n \r\n","import { Component, EventEmitter, Input, OnInit, Output, SimpleChanges } from \"@angular/core\";\r\nimport { FormArray, FormControl, FormGroup } from \"@angular/forms\";\r\nimport { TranslateService } from \"@ngx-translate/core\";\r\n\r\n@Component({\r\n selector: 'size-mapping',\r\n templateUrl: './size-mapping.component.html',\r\n styleUrls: ['./size-mapping.component.scss']\r\n})\r\nexport class SizeMappingComponent implements OnInit {\r\n @Input() coverTypes: [];\r\n @Input() bookingTypes: any[];\r\n @Input() maxSize: number = 61;\r\n @Input() dataCovers;\r\n @Input() dataSize;\r\n @Input() isEdit;\r\n\r\n @Output() sizeChange: EventEmitter = new EventEmitter();\r\n @Input() size: {\r\n valid: boolean;\r\n sizes: any\r\n };\r\n\r\n\r\n mappedTypes: any[] = [];\r\n coverTypeName: {\r\n [key: string]: string\r\n } = {};\r\n bookingTypeName: {\r\n [key: string]: string\r\n } = {};\r\n\r\n sizeArr: number[] | string[] = Array.from(Array(61).keys());\r\n formGroup = new FormGroup({})\r\n errors: string[];\r\n\r\n constructor(private translateService: TranslateService) {\r\n\r\n }\r\n\r\n ngOnInit() {\r\n this.mappedTypes = [];\r\n this.sizeArr = Array.from(Array(this.maxSize).keys());\r\n this.setConfigTypes();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges){\r\n if(changes.bookingTypes || changes.coverTypes || changes.dataCovers){\r\n this.mappedTypes = [];\r\n this.setConfigTypes();\r\n this.sizeChange.emit({ sizes: this.mappedTypes, valid: !this.formValidate().length, errors: this.errors });\r\n }\r\n }\r\n\r\n setConfigTypes(){\r\n let coverObject = {};\r\n if(this.dataCovers && this.dataCovers.length){\r\n this.dataCovers.forEach(({CoverTypeId, BookingTypeId, Covers}) => {\r\n coverObject[(CoverTypeId || null) + \"_\" + (BookingTypeId || null)] = Covers\r\n });\r\n }\r\n this.bookingTypes.forEach(bookingType => {\r\n this.bookingTypeName[bookingType.id] = bookingType.name || bookingType.Name;\r\n })\r\n this.coverTypes.forEach((coverType: any) => {\r\n this.coverTypeName[coverType.id || coverType.CoverTypeId] = coverType.name || coverType.Name || coverType.CoverTypeName;\r\n })\r\n\r\n if(!this.bookingTypes.length){\r\n this.bookingTypes = [{id: 0}]\r\n }\r\n\r\n if (this.bookingTypes?.length) {\r\n this.bookingTypes.forEach((bookingtype, bIndex) => {\r\n if (this.coverTypes?.length) {\r\n this.coverTypes.forEach((cover: any) => {\r\n this.mappedTypes.push(this.getTypeObj(bookingtype.id, cover.id, bIndex === 0 ? (cover.value || 0) : 0 ));\r\n })\r\n\r\n if(!this.mappedTypes.find(mappedType => mappedType.Covers)){\r\n this.mappedTypes[0].Covers = 1;\r\n }\r\n } else {\r\n this.mappedTypes.push(this.getTypeObj(bookingtype.id, null, bIndex === 0 ? 1 : 0));\r\n }\r\n })\r\n }\r\n\r\n if(this.dataCovers && this.dataCovers.length){\r\n this.mappedTypes.forEach(type => {\r\n type.Covers = coverObject[(type.CoverTypeId || null) + \"_\" + (type.BookingTypeId || null)] || 0;\r\n })\r\n }\r\n else {\r\n if(this.isEdit)\r\n this.mappedTypes.forEach(type => {\r\n type.Covers = this.dataSize || 0;\r\n })\r\n }\r\n\r\n }\r\n\r\n getTypeObj(BookingTypeId, CoverTypeId, defaultSize){\r\n return {\r\n BookingTypeId: BookingTypeId,\r\n BookingTypeName: this.bookingTypeName[BookingTypeId],\r\n CoverTypeId: CoverTypeId,\r\n CoverTypeName: this.coverTypeName[CoverTypeId],\r\n Covers: defaultSize\r\n }\r\n }\r\n\r\n parySizeChange(updateValue,cover) {\r\n if(updateValue == 'prev' && cover.Covers == 0) {\r\n return ;\r\n }\r\n if(updateValue == 'prev' && cover.Covers > 0) {\r\n cover.Covers = cover.Covers - 1;\r\n }\r\n else if(updateValue == 'next' && cover.Covers < this.maxSize) {\r\n cover.Covers = cover.Covers + 1;\r\n }\r\n this.onSizeChange();\r\n\r\n }\r\n\r\n onSizeChange() {\r\n this.errors = this.formValidate();\r\n this.sizeChange.emit({ sizes: this.mappedTypes, valid: !this.errors.length, errors: this.errors });\r\n }\r\n\r\n formValidate(): string[] {\r\n let coverTypeQuantities = {};\r\n let totalQuantity = 0;\r\n this.mappedTypes.forEach(type => {\r\n if (!coverTypeQuantities[type.CoverTypeId]) {\r\n coverTypeQuantities[type.CoverTypeId] = 0;\r\n }\r\n\r\n coverTypeQuantities[type.CoverTypeId] += +type.Covers;\r\n totalQuantity += +type.Covers\r\n });\r\n\r\n let errors = [];\r\n\r\n if(!totalQuantity){\r\n errors.push(this.translateService.instant('guestTypeMinQuantityErrorMessage', {quantity: 1, guestType: this.translateService.instant('cover')}))\r\n }else if(this.coverTypes.length){\r\n this.coverTypes.forEach((cover: any) => {\r\n if (coverTypeQuantities[cover.Id] < cover.MinimumQuantity) {\r\n errors.push(this.translateService.instant('guestTypeMinQuantityErrorMessage', {quantity: cover.MinimumQuantity, guestType: cover.Name}))\r\n }\r\n })\r\n }\r\n if(totalQuantity > this.maxSize){\r\n errors.push(this.translateService.instant('maxPartySizeError', {maxPartySize: this.maxSize}))\r\n }\r\n\r\n return errors\r\n }\r\n}\r\n\r\n\r\nimport { Pipe, PipeTransform } from \"@angular/core\";\r\nimport _ from \"lodash\";\r\n\r\n@Pipe({\r\n name: 'groupBy'\r\n })\r\n export class GroupByPipe implements PipeTransform {\r\n \r\n transform(arr: any[], groupBy:string): any {\r\n return Object.entries(_.groupBy(arr, groupBy));\r\n }\r\n }","
\r\n
{{itemPrice.Name}}
\r\n
{{currency}}{{itemPrice.SubTotal | currencyDecimalFormatter}}
\r\n
\r\n
\r\n\r\n
\r\n
{{labelMap.label | translate}}
\r\n
{{currency}}{{priceDetail[labelMap.key] | currencyDecimalFormatter}}
\r\n
\r\n
\r\n
\r\n
\r\n
{{'Total'}}
\r\n
{{currency}}{{priceDetail.Total | currencyDecimalFormatter}}
\r\n
","import { Component, Input, OnInit } from \"@angular/core\";\r\n\r\n\r\n@Component({\r\n selector: 'app-activites-guest-price-summary',\r\n templateUrl: './activites-guest-price-summary.component.html',\r\n styleUrls: ['./activites-guest-price-summary.component.scss', './../activities-lite.component.scss']\r\n })\r\n \r\n export class ActivitesGuestPriceSummaryComponent implements OnInit{\r\n\r\n @Input() priceDetail: GuestPriceShort;\r\n @Input() currency: string;\r\n\r\n paymentSplitKeyLabels = [\r\n { key: 'SubTotal', label: 'SubTotal'},\r\n { key: 'ServiceCharge', label: 'serviceCharges'},\r\n { key: 'Tax', label: 'Tax'},\r\n { key: 'TaxOnServiceChargeAmount', label: 'taxOnserviceCharge'},\r\n { key: 'VAT', label: 'VAT'},\r\n { key: 'VATOnServiceChargeAmount', label: 'VATOnserviceCharge'}\r\n ]\r\n\r\n ngOnInit(): void {\r\n \r\n }\r\n }\r\n\r\n\r\n export interface GuestPriceShort{\r\n Items: any[];\r\n SubTotal: number;\r\n Total: number;\r\n ServiceCharge: number;\r\n Tax: number;\r\n VAT: number;\r\n VATOnServiceChargeAmount: number;\r\n }","
\r\n
\r\n \r\n \r\n \r\n\r\n
\r\n\r\n
\r\n
\r\n {{locationDetail.availability | translate}}\r\n
\r\n
\r\n {{locationDetail.Name}}\r\n
\r\n
\r\n {{ 'Price' | translate }}: {{ guestService.selectedNonDining.OperationCurrency }} {{locationDetail.Price | currencyDecimalFormatter}}\r\n
\r\n
\r\n {{locationDetail.MinPartySize}} {{'Min' | translate}}   |   {{locationDetail.MaxPartySize}} {{'Max' |\r\n translate}}\r\n
\r\n
\r\n
","import { AfterViewInit, Component, ElementRef, EventEmitter, Input, OnDestroy, OnInit, Output, ViewChild, ViewEncapsulation } from \"@angular/core\";\r\nimport { fabric } from 'fabric';\r\nimport _ from 'lodash';\r\nimport { Subscription } from \"rxjs\";\r\nimport { ActivitiesService } from \"src/app/activities/activities.service\";\r\nimport { LayoutService } from \"src/app/layout/layout.service\";\r\nimport { ShapeTypeEnum } from \"src/app/shared/constants/commonenums\";\r\nimport { urlConfig } from \"src/app/shared/constants/url-config\";\r\nimport { InputImages } from \"src/app/shared/dynamicform/models/common-models\";\r\nimport { GuestService } from \"src/app/shared/services/guest.service\";\r\nimport { HttpService } from \"src/app/shared/services/http.service\";\r\nimport { ActivatedRoute } from \"@angular/router\";\r\nimport { ReservationService } from \"src/app/layout/reservation.service\";\r\nimport { ActivitiesLayoutSupportService } from \"./activities-layout-support.component\";\r\n\r\n@Component({\r\n selector: 'activities-layout',\r\n templateUrl: './activities-layout.component.html',\r\n styleUrls: ['./activities-layout.component.scss'],\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class ActivitiesLayoutComponent implements OnInit, AfterViewInit, OnDestroy {\r\n\r\n @Input('floorPlan') floorPlanData;\r\n @Input('currentBookingSize') currentBookingSize;\r\n @Input() seatingTypeList;\r\n @Input('selectedSeatingType')\r\n set selectedSeatingType(id: number) {\r\n this._selectedSeatingType = id;\r\n if (this._selectedSeatingType && this.canvas) {\r\n this.highlightByTypeHandler();\r\n }\r\n }\r\n @Input('updateIndicator') \r\n set updateIndicator(indicator){\r\n if(this.canvas){\r\n this.updateLocationSelection();\r\n }\r\n }\r\n @Output('locationSelection') locationSelection = new EventEmitter();\r\n\r\n _selectedSeatingType;\r\n _selectedLocations;\r\n subscriptions: Subscription = new Subscription();\r\n dataToBePushed = [];\r\n canvas: any;\r\n topMinValue: any;\r\n leftMinValue: any;\r\n heightValue;\r\n widthValue;\r\n @ViewChild('canvasLoader') canvasLoader: ElementRef;\r\n scaleFactorY = 1;\r\n scaleFactorX = 1;\r\n customImages: InputImages[] = [];\r\n layoutImages: InputImages[] = [];\r\n objectImages: InputImages[] = [];\r\n shapeTypeEnum = {\r\n 0: 'rect',\r\n 1: 'circle',\r\n 2: 'pin'\r\n };\r\n selectedTableIds = [];\r\n tableObj: any = []\r\n rectangle: any;\r\n circle: any;\r\n ellipse: any;\r\n pin: any;\r\n basicRectangle: fabric.Rect;\r\n basicCircle: fabric.Circle;\r\n layoutStyle: { width: string, height: string } = null;\r\n masterStatusData: any = {};\r\n\r\n // selectedItems = [];\r\n \r\n locationDetail: {\r\n MinPartySize: number,\r\n MaxPartySize: number,\r\n Name: string,\r\n position: any,\r\n availability: 'available' | 'notAvailable' \r\n Price: string\r\n }\r\n\r\n \r\n @Input() currentFromDate;\r\n @Input() matchedContinousSlots;\r\n @Input() duration;\r\n @Input() sizeMapping;\r\n @Input() restaurantId;\r\n\r\n constructor(private httpService: HttpService, public guestService: GuestService, private activitiesService: ActivitiesService, public route: ActivatedRoute, public rs: ReservationService, public rateplanSupportService: ActivitiesLayoutSupportService) {\r\n \r\n }\r\n\r\n initData(): void {\r\n this.masterStatusData = {\r\n soldout: {\r\n textColor: '#989898',\r\n stroke: '#d3d3d3',\r\n text: '\\u20E0',\r\n fill: '#d3d3d3'\r\n },\r\n notSelectable: {\r\n textColor: '#ffffff',\r\n stroke: '#000000',\r\n text: '\\u002B',\r\n fill: '#000000'\r\n },\r\n selectable: {\r\n textColor: this.getButtonColor()[0],\r\n stroke: this.getButtonColor()[0],\r\n text: '\\u002B',\r\n fill: this.getButtonColor()[1]\r\n }\r\n }\r\n }\r\n\r\n zoomtoFit() {\r\n setTimeout(() => {\r\n this.canvas.zoomToPoint({ x: 300, y: 100 }, this.canvas.getZoom() * 0.9);\r\n console.log(\"ZoomValue: \", this.canvas.getZoom())\r\n }, 0)\r\n }\r\n\r\n highlightByTypeHandler(loopCount = 1, seatingTypeSelected?) {\r\n if (!seatingTypeSelected) {\r\n seatingTypeSelected = this.seatingTypeList.find(x => x.Id == this._selectedSeatingType);\r\n }\r\n let color;\r\n if (seatingTypeSelected) {\r\n let statusColor = seatingTypeSelected.Color;\r\n color = 'rgba(' + statusColor.R + ',' + statusColor.G + ',' + statusColor.B + ',' + statusColor.A + ')';\r\n }\r\n if(!this._selectedSeatingType){\r\n this.highlightByTypeAction(seatingTypeSelected, false, color); \r\n loopCount = 8; // Break highlight loop \r\n }else{\r\n this.highlightByTypeAction(seatingTypeSelected, (loopCount % 2), color);\r\n }\r\n\r\n\r\n loopCount += 1;\r\n setTimeout(() => {\r\n if (loopCount < 7) {\r\n this.highlightByTypeHandler(loopCount, seatingTypeSelected);\r\n }\r\n }, 500);\r\n }\r\n\r\n highlightByTypeAction(seatingTypeSelected, isHighlight, color = highlightColor) {\r\n this.canvas._objects.forEach(element => {\r\n if ((element.SeatingTypeId === this._selectedSeatingType \r\n || !isHighlight || (this._selectedSeatingType && element.SeatingTypeId !== this._selectedSeatingType))\r\n && element.IsAvailableForBooking && element.IsAvailableForReservations) {\r\n let fillColor;\r\n if(isHighlight && element.SeatingTypeId === this._selectedSeatingType){\r\n fillColor = highlightColor;\r\n }else{\r\n fillColor = element.isSelected ? defaultTheme : element.tableColor\r\n }\r\n element._objects.filter(x => (element.ShapeType === 2 && x.name == 'shape')\r\n || (element.ShapeType !== 2 && x.name == 'textCircle'))[0].set({\r\n fill: fillColor\r\n });\r\n }\r\n });\r\n this.canvas.renderAll();\r\n }\r\n\r\n setColorByType(element){\r\n let seatingTypeSelected = this.seatingTypeList.find(x => x.Id == this._selectedSeatingType);\r\n \r\n let color;\r\n if (seatingTypeSelected) {\r\n let statusColor = seatingTypeSelected.Color;\r\n color = 'rgba(' + statusColor.R + ',' + statusColor.G + ',' + statusColor.B + ',' + statusColor.A + ')';\r\n }\r\n\r\n }\r\n\r\n updateLocationSelection(){\r\n let selectedIds = this.guestService.selectedNonDiningLocation?.length ? this.guestService.selectedNonDiningLocation.map(({Id}) => Id) : [];\r\n this.canvas._objects.forEach(element => {\r\n if (selectedIds.includes(element.Id)) {\r\n element.isSelected = true;\r\n this.highlightSelectedObject(element);\r\n }else if(element.isSelected){\r\n element.isSelected = false;\r\n this.removeHighlightSelectedObject(element);\r\n }\r\n });\r\n this.canvas.renderAll();\r\n }\r\n\r\n zoomSubs() {\r\n this.zoomtoFit();\r\n let _that = this;\r\n this.canvas.on('mouse:wheel', (opt) => {\r\n var evt = opt.e;\r\n if (evt.ctrlKey === true) {\r\n var delta = opt.e.deltaY;\r\n var zoom = this.canvas.getZoom();\r\n opt.e.preventDefault();\r\n opt.e.stopPropagation();\r\n // zoom *= 0.999 ** delta;\r\n\r\n if(delta > 0){\r\n zoom /= 1.03;\r\n }else{\r\n zoom *= 1.03;\r\n }\r\n\r\n let vpt = this.canvas.viewportTransform;\r\n if (zoom < 0.9) {\r\n vpt[4] = 30;\r\n vpt[5] = 10;\r\n \r\n return;\r\n }\r\n \r\n\r\n if (zoom > 20) zoom = 20;\r\n if (zoom < 0.01) zoom = 0.01;\r\n\r\n this.zoomBoundaryHandler(vpt);\r\n\r\n console.log(\"Touch Points\", opt.e.offsetX, opt.e.offsetY);\r\n\r\n this.canvas.zoomToPoint({ x: opt.e.offsetX, y: opt.e.offsetY }, zoom);\r\n }\r\n });\r\n let canvaElm = document.getElementById('canvaContainer');\r\n canvaElm.addEventListener('touchmove', (opt) => {\r\n // console.log(opt);\r\n if('[object HTMLCanvasElement]' === opt.target.toString()){\r\n if(opt.touches.length === 2){\r\n let {x: _containerX, y: _containerY} = opt.target?.['getBoundingClientRect']()\r\n let _xPoint = ((opt.touches[0].clientX + opt.touches[1].clientX) / 2) - _containerX;\r\n let _yPoint = ((opt.touches[0].clientY + opt.touches[1].clientY) / 2) - _containerY;\r\n\r\n var zoom = this.canvas.getZoom();\r\n opt.preventDefault();\r\n opt.stopPropagation();\r\n\r\n console.log(\"_XPoint, _YPoint\", _xPoint, _yPoint);\r\n \r\n let _diffX = (opt.touches[1].screenX - opt.touches[0].screenX);\r\n let _diffY = (opt.touches[1].screenY - opt.touches[0].screenY);\r\n \r\n if(_diffX < 0){\r\n _diffX *= -1;\r\n }\r\n if(_diffY < 0){\r\n _diffY *= -1;\r\n }\r\n\r\n if(!this.canvas.lastTouchDiff || (_diffX > this.canvas.lastTouchDiff.x) || (_diffY > this.canvas.lastTouchDiff.y)){\r\n zoom *= 1.03;\r\n }else{\r\n zoom /= 1.03;\r\n }\r\n this.canvas.lastTouchDiff = {\r\n x: _diffX,\r\n y: _diffY\r\n };\r\n \r\n let vpt = this.canvas.viewportTransform;\r\n if (zoom < 0.9) {\r\n vpt[4] = 30;\r\n vpt[5] = 10;\r\n \r\n return;\r\n }\r\n \r\n if (zoom > 20) zoom = 20;\r\n if (zoom < 0.01) zoom = 0.01;\r\n\r\n this.zoomBoundaryHandler(vpt);\r\n\r\n this.canvas.intialZoomPoint = { x: _xPoint, y: _yPoint };\r\n \r\n this.canvas.zoomToPoint(this.canvas.intialZoomPoint || { x: _xPoint, y: _yPoint }, zoom);\r\n }\r\n }\r\n })\r\n\r\n canvaElm.addEventListener('touchend', (opt) => {\r\n this.canvas.lastTouchDiff = null;\r\n this.canvas.intialZoomPoint = null;\r\n })\r\n\r\n this.canvas.on('mouse:over', (opt) => {\r\n // this.showLocationDetails(opt); \r\n });\r\n this.canvas.on('mouse:move', (opt) => {\r\n // if(!(opt.target && (opt.target.ShapeType === 2 || opt.target.ShapeType === 3))){\r\n // this.locationDetail = null;\r\n // }\r\n if (this.canvas.isDragging) {\r\n var e = opt.e;\r\n var vpt = this.canvas.viewportTransform;\r\n\r\n let _expectedXPosition;\r\n let _expectedYPosition;\r\n let _eClientX;\r\n let _eClientY;\r\n \r\n if(e.type === 'mousemove'){\r\n _expectedXPosition = vpt[4] + e.clientX - this.canvas.lastPosX;\r\n _expectedYPosition = vpt[5] + e.clientY - this.canvas.lastPosY;\r\n\r\n _eClientX = e.clientX;\r\n _eClientY = e.clientY;\r\n }\r\n if(e.type === 'touchmove' && e.touches && e.touches.length === 1){\r\n _expectedXPosition = vpt[4] + e.touches[0].clientX - this.canvas.lastPosX;\r\n _expectedYPosition = vpt[5] + e.touches[0].clientY - this.canvas.lastPosY;\r\n this.canvas.requestRenderAll();\r\n\r\n _eClientX = e.touches[0].clientX;\r\n _eClientY = e.touches[0].clientY;\r\n\r\n \r\n }\r\n\r\n /** Allow Move by Postion */\r\n\r\n let _canvasZoom = this.canvas.getZoom();\r\n\r\n let _maxAllowed = {\r\n left: -1 * this.canvas.width * (_canvasZoom - 1),\r\n top: -1 * this.canvas.height * (_canvasZoom - 1)\r\n }\r\n\r\n let allowXMove = (_expectedXPosition < 30 || vpt[4] > 30 && vpt[4])\r\n && (_maxAllowed.left < _expectedXPosition);\r\n let allowYMove = (_expectedYPosition < 10 || vpt[5] > 10)\r\n && (_maxAllowed.top < _expectedYPosition);\r\n\r\n if(allowXMove){\r\n vpt[4] = _expectedXPosition;\r\n }\r\n if(allowYMove){\r\n vpt[5] = _expectedYPosition;\r\n }\r\n\r\n this.canvas.requestRenderAll();\r\n\r\n if(allowXMove){\r\n this.canvas.lastPosX = _eClientX;\r\n }\r\n if(allowYMove){\r\n this.canvas.lastPosY = _eClientY;\r\n }\r\n\r\n // if(_expectedXPosition && _expectedYPosition){\r\n // vpt[4] = _expectedXPosition;\r\n // vpt[5] = _expectedYPosition;\r\n // this.canvas.requestRenderAll();\r\n // this.canvas.lastPosX = _eClientX;\r\n // this.canvas.lastPosY = _eClientY;\r\n // }\r\n }\r\n });\r\n this.canvas.on('mouse:up', function (opt) {\r\n // on mouse up we want to recalculate new interaction\r\n // for all objects, so we call setViewportTransform\r\n this.setViewportTransform(_that.canvas.viewportTransform);\r\n _that.canvas.isDragging = false;\r\n _that.canvas.selection = true;\r\n });\r\n }\r\n\r\n zoomBoundaryHandler(vpt){\r\n if(!vpt){\r\n vpt = this.canvas.viewportTransform;\r\n }\r\n let _canvasZoom = this.canvas.getZoom();\r\n let _maxAllowed = {\r\n left: -1 * this.canvas.width * (_canvasZoom - 1),\r\n top: -1 * this.canvas.height * (_canvasZoom - 1)\r\n }\r\n\r\n if(vpt[4] > 30){\r\n vpt[4] = 30;\r\n }else if(_maxAllowed.left > vpt[4]){\r\n vpt[4] = _maxAllowed.left\r\n }\r\n if(vpt[5] > 10){\r\n vpt[5] = 10;\r\n }else if(_maxAllowed.top > vpt[5]){\r\n vpt[5] = _maxAllowed.top\r\n }\r\n }\r\n\r\n showLocationDetails(opt: any){\r\n if(opt.target && opt.target.Id){\r\n let bounds = document.getElementsByClassName('tables-layout__canvas-view')[0].getBoundingClientRect();\r\n let x = opt.e.clientX - bounds.x + 10;\r\n let y = opt.e.clientY - bounds.y + 30;\r\n \r\n if((x + 200) > bounds.width){\r\n x = x - ((x + 250) - bounds.width);\r\n }\r\n if((y + 90) > bounds.height){\r\n y = y - ((y + 170) - bounds.height);\r\n }\r\n\r\n let [min, max] = [opt.target.MinPartySize, opt.target.MaxPartySize];\r\n let availability;\r\n if(!opt.target.IsAvailableForBooking){\r\n availability = 'soldOut';\r\n }else{\r\n availability = (this.currentBookingSize >= min && this.currentBookingSize <= max \r\n || !this.guestService.validateLocationSize) ? 'available' : 'notAvailable';\r\n }\r\n this.locationDetail = {\r\n MinPartySize: min,\r\n MaxPartySize: max,\r\n Name: opt.target.Name,\r\n position: {\r\n left: `${x}px`,\r\n top: `${y}px`\r\n },\r\n availability,\r\n Price: opt.target.PriceDetail?.Total || 0,\r\n }\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.subscriptions.add(this.guestService.restaurantImages.subscribe((images) => {\r\n if (images && !this.canvas) {\r\n this.layoutImages = images.LayoutImages;\r\n this.objectImages = images.ObjectImages;\r\n this.customImages = images.CustomImages;\r\n\r\n let floorPlanImage = this.layoutImages.filter(x => x.ImageId == this.floorPlanData.ImageId)[0];\r\n if (floorPlanImage) {\r\n this.setLayoutWidth(floorPlanImage);\r\n }\r\n this.setCanvas();\r\n if (this.floorPlanData) {\r\n this.setDefaultFloor(this.floorPlanData.StandaloneTables.filter(x => !x.IsTemplate), this.floorPlanData.Labels, this.floorPlanData.Walls, this.floorPlanData.Shapes, this.floorPlanData.ImageId);\r\n }\r\n \r\n if(this.guestService.selectedNonDiningLocation?.length){\r\n this.updateLocationSelection();\r\n }\r\n }\r\n }))\r\n\r\n }\r\n\r\n setLayoutWidth(floorPlanImage) {\r\n fabric.Image.fromURL(floorPlanImage ? 'data:image/png;base64,' + floorPlanImage.bytes : '', (img) => {\r\n this.layoutStyle = { width: img.width + 'px', height: img.height + 'px' }\r\n });\r\n }\r\n ngOnInit(): void {\r\n this.initData();\r\n }\r\n\r\n\r\n setDefaultFloor(tables, labels, walls, shapes, imageId) {\r\n //****this.dataToBePushed = [];\r\n labels.forEach((element, index) => {\r\n element.id = index;\r\n element.name = 'label';\r\n });\r\n walls.forEach((element, index) => {\r\n element.id = index;\r\n element.name = 'wall';\r\n });\r\n\r\n shapes.forEach((element, index) => {\r\n element.id = index;\r\n element.name = 'area';\r\n });\r\n\r\n\r\n tables = _.cloneDeep(tables);\r\n labels = _.cloneDeep(labels);\r\n walls = _.cloneDeep(walls);\r\n shapes = _.cloneDeep(shapes);\r\n let basicTables = this.findminObject(tables, labels, walls, shapes);\r\n let topMinValue = _.minBy(basicTables, 'totalminDataHeight');\r\n let leftMinValue = _.minBy(basicTables, 'totalminDataWidth');\r\n const negativeCoords = basicTables.filter(x => x.totalminDataHeight < 0 || x.totalminDataWidth < 0);\r\n this.topMinValue = Math.abs(topMinValue['totalminDataHeight']);\r\n this.leftMinValue = Math.abs(leftMinValue['totalminDataWidth']);\r\n if (negativeCoords.length > 0) {\r\n // negative values\r\n let adjustedTopValue = topMinValue['totalminDataHeight'] < 0 ? Math.abs(topMinValue['totalminDataHeight']) : 0;;\r\n let adjustedLeftValue = leftMinValue['totalminDataWidth'] < 0 ? Math.abs(leftMinValue['totalminDataWidth']) : 0;\r\n tables.forEach(element => {\r\n element.Top = element.Top + Math.abs(adjustedTopValue);\r\n element.Left = element.Left + Math.abs(adjustedLeftValue);\r\n });\r\n labels.forEach(element => {\r\n element.Top = element.Top + Math.abs(adjustedTopValue);\r\n element.Left = element.Left + Math.abs(adjustedLeftValue);\r\n });\r\n walls.forEach(element => {\r\n element.Points.forEach(point => {\r\n point['X'] = point['X'] + adjustedLeftValue;\r\n point['Y'] = point['Y'] + adjustedTopValue;\r\n });\r\n });\r\n\r\n shapes.forEach(element => {\r\n element.Top = element.Top + Math.abs(adjustedTopValue);\r\n element.Left = element.Left + Math.abs(adjustedLeftValue);\r\n });\r\n\r\n // // find new min val\r\n basicTables = this.findminObject(tables, labels, walls, shapes);\r\n topMinValue = _.minBy(basicTables, 'totalminDataHeight');\r\n leftMinValue = _.minBy(basicTables, 'totalminDataWidth');\r\n this.topMinValue = Math.abs(topMinValue['totalminDataHeight']);\r\n this.leftMinValue = Math.abs(leftMinValue['totalminDataWidth']);\r\n\r\n }\r\n let adjustedTopValue = 0;\r\n let adjustedLeftValue = 0;\r\n\r\n if (this.topMinValue > 50 && this.floorPlanData.ImageId == null) {\r\n adjustedTopValue = -1 * (this.topMinValue - 30);\r\n } else if (this.floorPlanData.ImageId) {\r\n }\r\n\r\n if (this.leftMinValue > 50 && this.floorPlanData.ImageId == null) {\r\n adjustedLeftValue = -1 * (this.leftMinValue - 30);\r\n } else if (this.floorPlanData.ImageId) {\r\n }\r\n\r\n tables.forEach(element => {\r\n element.Top = element.Top + (element.Height / 2) + adjustedTopValue;\r\n element.Left = element.Left + (element.Width / 2) + adjustedLeftValue;\r\n });\r\n labels.forEach(element => {\r\n\r\n let findstringlength = element.Text.length;\r\n let getwidth = 11;\r\n let getHeight = 11;\r\n let angles = element.Angle;\r\n if ((angles >= 0 && angles <= 20) || (angles >= 160 && angles <= 200) || (angles >= 340 && angles <= 360)) {\r\n getwidth = (findstringlength * 10) / 2;\r\n } else {\r\n getHeight = (findstringlength * 10) / 2;\r\n }\r\n element.Top = element.Top + adjustedTopValue + getHeight;\r\n element.Left = element.Left + adjustedLeftValue + getwidth;\r\n });\r\n walls.forEach(element => {\r\n element.Points.forEach(point => {\r\n point['X'] = point['X'] + adjustedLeftValue;\r\n point['Y'] = point['Y'] + adjustedTopValue;\r\n });\r\n });\r\n\r\n shapes.forEach(element => {\r\n element.Top = element.Top + adjustedTopValue;\r\n element.Left = element.Left + adjustedLeftValue;\r\n });\r\n\r\n basicTables = this.findmaxObject(tables, labels, walls, shapes);\r\n const topValue = _.maxBy(basicTables, 'totalDataHeight');\r\n const leftValue = _.maxBy(basicTables, 'totalDataWidth');\r\n\r\n this.heightValue = topValue['totalDataHeight'] + 25;\r\n this.widthValue = leftValue['totalDataWidth'] + 25;\r\n const height = this.canvasLoader.nativeElement.clientHeight > this.heightValue ? this.canvasLoader.nativeElement.clientHeight : this.heightValue;\r\n const width = this.canvasLoader.nativeElement.clientWidth > this.widthValue ? this.canvasLoader.nativeElement.clientWidth : this.widthValue;\r\n let scaleFactor;\r\n if (this.canvas) {\r\n this.scaleFactorY = this.canvasLoader.nativeElement.clientHeight / this.heightValue;\r\n this.scaleFactorX = (this.canvasLoader.nativeElement.clientWidth / this.widthValue > 1) ? 1 : this.canvasLoader.nativeElement.clientWidth / this.widthValue;\r\n if (this.scaleFactorX < 1 && this.scaleFactorY < 1) {\r\n scaleFactor = this.scaleFactorX <= this.scaleFactorY ? this.scaleFactorX : this.scaleFactorY;\r\n }\r\n else {\r\n scaleFactor = this.scaleFactorX >= this.scaleFactorY ? this.scaleFactorY : this.scaleFactorX;\r\n }\r\n\r\n let calculatedWidth = width * scaleFactor;\r\n // this.canvas.setZoom(scaleFactor);\r\n this.canvas.setHeight(this.canvasLoader.nativeElement.clientHeight);\r\n this.canvas.setWidth(this.canvasLoader.nativeElement.clientWidth);\r\n }\r\n let _that = this;\r\n let floorPlanImage = this.layoutImages.filter(x => x.ImageId == imageId)[0];\r\n fabric.Image.fromURL(floorPlanImage ? 'data:image/png;base64,' + floorPlanImage.bytes : '', function (img) {\r\n _that.layoutStyle = { width: img.width + 'px', height: img.height + 'px' }\r\n _that.canvas.setBackgroundImage(img, _that.canvas.renderAll.bind(_that.canvas), {\r\n scaleX: _that.canvas.width / img.width,\r\n scaleY: _that.canvas.height / img.height\r\n });\r\n });\r\n // // this.renderer.setStyle(this.canvasLoader.nativeElement, 'height', this.height);\r\n // // this.renderer.setStyle(this.canvasLoader.nativeElement, 'width', this.width)\r\n tables.forEach(element => {\r\n this.setTableConfiguration(element);\r\n\r\n });\r\n this.dataToBePushed.forEach(data => {\r\n this.canvas.add(data);\r\n data.set('subTargetCheck', true);\r\n })\r\n\r\n if (labels) {\r\n labels.forEach((element, index) => {\r\n this.addLabel(element, index);\r\n });\r\n\r\n }\r\n if (shapes) {\r\n shapes.forEach(element => {\r\n this.addShape(element);\r\n });\r\n\r\n }\r\n if (walls) {\r\n walls.forEach(element => {\r\n this.addWall(element);\r\n });\r\n }\r\n\r\n const objs = this.canvas.getObjects();\r\n\r\n objs.forEach((table) => {\r\n if (table.ImageId && (table.ShapeType == 3 || table.ShapeType == 4)) {\r\n this.setObjectImage(table);\r\n }\r\n });\r\n //Needed\r\n if (this.floorPlanData.ImageId) {\r\n if (this.floorPlanData.Dimensions && this.floorPlanData.Dimensions.length > 0 && this.floorPlanData.Dimensions[0].Width > 0 && this.floorPlanData.Dimensions[0].Height > 0) {\r\n this.scaleFactorX = this.canvasLoader.nativeElement.clientWidth / this.floorPlanData.Dimensions[0].Width;\r\n this.scaleFactorY = this.canvasLoader.nativeElement.clientHeight / this.floorPlanData.Dimensions[0].Height;\r\n this.canvas.getObjects().forEach(element => {\r\n element.set({\r\n scaleX: element.scaleX * _that.scaleFactorX,\r\n scaleY: element.scaleY * _that.scaleFactorY,\r\n top: element.top * _that.scaleFactorY,\r\n left: element.left * _that.scaleFactorX\r\n })\r\n element.setCoords();\r\n });\r\n }\r\n else {\r\n this.scaleObjects(this.canvas, this.scaleFactorX, this.scaleFactorY, scaleFactor, this.floorPlanData.BasedOn)\r\n }\r\n // if (isScalingAvailable) {\r\n // this.lf.scaleObjects(this.canvas, this.scaleFactorX, this.scaleFactorY, scaleFactor, this.floorPlan.BasedOn);\r\n // }\r\n } else {\r\n this.scaleObjects(this.canvas, this.scaleFactorX, this.scaleFactorY, scaleFactor, this.floorPlanData.BasedOn);\r\n }\r\n //this.scaleObjects(this.canvas, this.scaleFactorX, this.scaleFactorY, scaleFactor);\r\n this.canvas.renderAll();\r\n }\r\n\r\n findminObject(tables?, labels?, walls?, shapes?) {\r\n const newtables = _.cloneDeep(tables.map(obj => ({ ...obj, tempname: 'table' })));\r\n const newlabels = _.cloneDeep(labels.map(obj => ({ ...obj, tempname: 'label' })));\r\n const newwalls = _.cloneDeep(walls.map(obj => ({ ...obj, tempname: 'wall' })));\r\n const newshapes = _.cloneDeep(shapes.map(obj => ({ ...obj, tempname: 'area' })));\r\n\r\n const allObjects = _.cloneDeep(newtables.concat(newlabels, newwalls, newshapes));\r\n allObjects.forEach(element => {\r\n if (element.tempname == 'wall') {\r\n const minx = _.minBy(element.Points, (e) => { return e['X']; });\r\n const miny = _.minBy(element.Points, (e) => { return e['Y']; });\r\n element.totalminDataHeight = miny['Y'];\r\n element.totalminDataWidth = minx['X'];\r\n }\r\n else if (element.tempname == 'label') {\r\n const findstringlength = element.Text.length;\r\n let getwidth = 2;\r\n let getHeight = 2;\r\n const angles = element.Angle;\r\n if ((angles >= 0 && angles <= 20) || (angles >= 160 && angles <= 200) || (angles >= 340 && angles <= 360)) {\r\n getwidth = findstringlength / 2;\r\n } else {\r\n getHeight = findstringlength / 2;\r\n }\r\n element.totalminDataHeight = element.Top - (getHeight);\r\n element.totalminDataWidth = element.Left - (getwidth);\r\n }\r\n else if (element.tempname == 'table') {\r\n element.totalminDataHeight = element.Top - ((element.Height / 2) + 14);\r\n element.totalminDataWidth = element.Left - ((element.Width / 2) + 14);\r\n } else if (element.tempname == 'area') {\r\n element.totalminDataHeight = element.Top;\r\n element.totalminDataWidth = element.Left;\r\n } else {\r\n element.totalminDataHeight = element.Top - element.Height;\r\n element.totalminDataWidth = element.Left - element.Width;\r\n }\r\n });\r\n\r\n return allObjects;\r\n\r\n }\r\n\r\n\r\n baseElement;\r\n setCanvas() {\r\n this.baseElement = this.canvasLoader.nativeElement;\r\n this.canvas = new fabric.Canvas('tablesLayout', {\r\n selection: false,\r\n });\r\n this.canvas.preserveObjectStacking = true;\r\n fabric.Object.prototype.set({\r\n transparentCorners: false,\r\n rotatingPointOffset: 20,\r\n cornerSize: 12,\r\n hasBorders: false,\r\n lockMovementX: true,\r\n lockMovementY: true,\r\n perPixelTargetFind: true,\r\n flipY: false,\r\n hasControls: false,\r\n });\r\n\r\n this.canvas.hoverCursor = 'pointer';\r\n this.canvas.perPixelTargetFind = true;\r\n this.canvas.targetFindTolerance = 2;\r\n let _that = this;\r\n\r\n this.zoomSubs();\r\n this.canvas.on({\r\n 'mouse:down'(event) {\r\n if (event.target) {\r\n _that.rateplanSupportService.getRateplanData(event.target, _that.currentFromDate, _that.matchedContinousSlots, _that.duration, _that.sizeMapping, _that.restaurantId, null, () => {\r\n if (event.target.IsAvailableForBooking && event.target.IsAvailableForReservations) {\r\n _that.locationSelection.emit(event.target);\r\n }\r\n _that.showLocationDetails(event);\r\n })\r\n // _that.highlightSelectedObject(event.target);\r\n }else{\r\n var evt = event.e;\r\n // if (evt.ctrlKey === true) {\r\n _that.canvas.isDragging = true;\r\n _that.canvas.selection = false;\r\n if(evt.type === 'mousedown'){\r\n _that.canvas.lastPosX = evt.clientX;\r\n _that.canvas.lastPosY = evt.clientY;\r\n }\r\n if(evt.type === 'touchstart' && evt.touches && evt.touches.length === 1){\r\n _that.canvas.lastPosX = evt.touches[0].clientX;\r\n _that.canvas.lastPosY = evt.touches[0].clientY;\r\n }\r\n _that.locationDetail = null;\r\n }\r\n\r\n if (!(event.target && (event.target.ShapeType === 2 || event.target.ShapeType === 3))) {\r\n this.locationDetail = null;\r\n }\r\n\r\n }\r\n });\r\n // //_that.removeIllusion();\r\n\r\n\r\n // },\r\n // 'mouse:move'(event) {\r\n // if (!_that.isMouseDown) {\r\n // _that.removeHightLightColor(event, _that);\r\n // }\r\n // },\r\n // 'mouse:up'(event) {\r\n // _that.removeHightLightColor(event, _that);\r\n\r\n // },\r\n // 'mouse:over'(event) {\r\n // _that.showPrice(event, _that)\r\n // },\r\n // 'mouse:out'(event) {\r\n // _that.mouseOut(event, _that)\r\n // }\r\n\r\n // });\r\n\r\n }\r\n\r\n getWidgetCustomizationData(property) {\r\n return this.guestService.selectedNonDining.WidgetCustomization && this.guestService.selectedNonDining.WidgetCustomization[property];\r\n }\r\n\r\n getButtonColor() {\r\n //return [this.getWidgetCustomizationData('AvailableButtonBackgroundColor') || defaultTheme, this.getWidgetCustomizationData('AvailableButtonColor') || '#fff'];\r\n return [defaultTheme, '#fff']\r\n }\r\n\r\n highlightSelectedObject(object) {\r\n\r\n if (object.ShapeType == 2) {\r\n object._objects.filter(x => x.name == 'shape')[0].set({\r\n text: '\\u2713',\r\n fill: this.getButtonColor()[0],\r\n stroke: this.getButtonColor()[0],\r\n strokeWidth: 2\r\n });\r\n\r\n object._objects.filter(x => x.name == 'text' || x.name == 'pin')[0].set({\r\n text: '\\u2713',\r\n fill: this.getButtonColor()[1]\r\n });\r\n }\r\n else {\r\n object._objects.filter(x => x.name == 'textCircle')[0].set({\r\n text: '\\u2713',\r\n fill: this.getButtonColor()[0],\r\n stroke: this.getButtonColor()[0],\r\n strokeWidth: 2\r\n });\r\n object._objects.filter(x => x.name == 'text')[0].set({\r\n text: '\\u2713',\r\n fill: this.getButtonColor()[1]\r\n });\r\n }\r\n }\r\n\r\n removeHighlightSelectedObject(object) {\r\n const statusDetail = this.getStatusDetail(object);\r\n if (object.ShapeType == 2) {\r\n object._objects.forEach(x => {\r\n // let shapeC, pinC, textC;\r\n if (x.name == 'shape') {\r\n x.set({\r\n text: '\\u002B',\r\n fill: statusDetail.fill || this.getButtonColor()[0],\r\n stroke: statusDetail.fill || this.getButtonColor()[0],\r\n strokeWidth: 2\r\n })\r\n } else if ( x.name == 'pin') {\r\n x.set({\r\n text: '\\u002B',\r\n fill: statusDetail.fill ? '#fff' : this.getButtonColor()[0]\r\n });\r\n } else if (x.name == 'text') {\r\n x.set({\r\n text: '\\u002B',\r\n fill: statusDetail.textColor ? statusDetail.textColor : this.getButtonColor()[0]\r\n });\r\n }\r\n });\r\n\r\n }\r\n else {\r\n\r\n object._objects.forEach(x => {\r\n if (x.name == 'textCircle') {\r\n x.set({\r\n text: '\\u002B',\r\n fill: statusDetail.fill || this.getButtonColor()[0],\r\n stroke: statusDetail.fill || this.getButtonColor()[0],\r\n strokeWidth: 2\r\n });\r\n } else if (x.name == 'text') {\r\n x.set({\r\n text: '\\u002B',\r\n fill: statusDetail.textColor ? statusDetail.textColor : this.getButtonColor()[0]\r\n });\r\n }\r\n });\r\n }\r\n }\r\n\r\n findmaxObject(tables?, labels?, walls?, shapes?) {\r\n const afternewtables = _.cloneDeep(tables.map(obj => ({ ...obj, tempname: 'table' })));\r\n const afternewlabels = _.cloneDeep(labels.map(obj => ({ ...obj, tempname: 'label' })));\r\n const afternewwalls = _.cloneDeep(walls.map(obj => ({ ...obj, tempname: 'wall' })));\r\n const afternewshapes = _.cloneDeep(shapes.map(obj => ({ ...obj, tempname: 'area' })));\r\n\r\n const allObjects = _.cloneDeep(afternewtables.concat(afternewlabels, afternewwalls, afternewshapes));\r\n\r\n allObjects.forEach(element => {\r\n if (element.tempname == 'wall') {\r\n const maxx = _.maxBy(element.Points, (e) => { return e['X']; });\r\n const maxy = _.maxBy(element.Points, (e) => { return e['Y']; });\r\n element.totalDataHeight = maxy['Y'] + 10;\r\n element.totalDataWidth = maxx['X'] + 10;\r\n }\r\n else if (element.tempname == 'label') {\r\n const findstringlength = element.Text.length;\r\n let getwidth = 11;\r\n let getHeight = 11;\r\n const angles = element.Angle;\r\n if ((angles >= 0 && angles <= 20) || (angles >= 160 && angles <= 200) || (angles >= 340 && angles <= 360)) {\r\n getwidth = findstringlength * 10.2 / 2;\r\n } else {\r\n getHeight = findstringlength * 10.2 / 2;\r\n }\r\n element.totalDataHeight = getHeight + element.Top;\r\n element.totalDataWidth = getwidth + element.Left;\r\n }\r\n else if (element.tempname == 'table') {\r\n element.totalDataHeight = (element.Height) + element.Top;\r\n element.totalDataWidth = (element.Width) + element.Left;\r\n } else if (element.tempname == 'area') {\r\n element.totalDataHeight = element.Height + element.Top + 15;\r\n element.totalDataWidth = element.Width + element.Left + 15;\r\n } else {\r\n element.totalDataHeight = element.Height / 2 + element.Top;\r\n element.totalDataWidth = element.Width / 2 + element.Left;\r\n }\r\n\r\n });\r\n\r\n return allObjects;\r\n }\r\n\r\n\r\n setObjectImage(table) {\r\n let selectedTableObject = this.canvas.getObjects().filter(tableObj => tableObj.Id == table.Id);\r\n let tableImage = this.objectImages.filter((img) => img.ImageId == table.ImageId);\r\n\r\n if (selectedTableObject && selectedTableObject.length > 0 && tableImage.length > 0) {\r\n let compressedPhoto;\r\n fabric.Image.fromURL('data:image/png;base64,' + tableImage[0].bytes, (img) => {\r\n compressedPhoto = img;\r\n let shapedObject = selectedTableObject[0]._objects.filter(ele => ele.name == 'shape')[0];\r\n if (selectedTableObject[0].ShapeType == 4) {\r\n compressedPhoto.set({\r\n scaleX: (((shapedObject.width) / img.width) * selectedTableObject[0].scaleX),\r\n scaleY: (((shapedObject.height) / img.height) * selectedTableObject[0].scaleY),\r\n top: selectedTableObject[0].top,\r\n left: selectedTableObject[0].left,\r\n originX: 'center',\r\n originY: 'center',\r\n name: 'image',\r\n width: img.width,\r\n height: img.height,\r\n })\r\n } else {\r\n compressedPhoto.set({\r\n scaleX: ((shapedObject.width) / img.width) * selectedTableObject[0].scaleX,\r\n scaleY: ((shapedObject.height) / img.height) * selectedTableObject[0].scaleY,\r\n top: selectedTableObject[0].top,\r\n left: selectedTableObject[0].left,\r\n originX: 'center',\r\n originY: 'center',\r\n name: 'image',\r\n width: img.width,\r\n height: img.height\r\n });\r\n let server = selectedTableObject[0]._objects.filter(ele => ele.name == 'serverCircle');\r\n if (server && server.length > 0) {\r\n server[0].left = server[0].left + 12;\r\n server[0].top = server[0].top - 13;\r\n }\r\n }\r\n let allObjects = selectedTableObject[0]._objects.filter(ele => ele.name == 'textCircle' ||\r\n ele.name == 'tableNumber' || ele.name == 'text' || ele.name == 'serverLines').length;\r\n\r\n selectedTableObject[0].addWithUpdate(compressedPhoto);\r\n if (selectedTableObject[0].ShapeType == 4) {\r\n selectedTableObject[0].set({\r\n clipPath: new fabric.Circle({\r\n radius: selectedTableObject[0].height / 2,\r\n originX: 'center',\r\n originY: 'center',\r\n startAngle: 0,\r\n angle: Math.PI * 2,\r\n }),\r\n })\r\n }\r\n compressedPhoto.moveTo(selectedTableObject[0].size() - (allObjects + 1));\r\n selectedTableObject[0].addWithUpdate();\r\n this.canvas.renderAll();\r\n })\r\n }\r\n }\r\n\r\n\r\n checkTableiscircle(object) {\r\n const checkdiff = object.Width - object.Height;\r\n return Math.abs(checkdiff) < 15 ? ShapeTypeEnum.Circle : ShapeTypeEnum.Ellipse;\r\n }\r\n\r\n addLabel(obj, index) {\r\n obj.id = index;\r\n obj.name = 'label';\r\n this.canvas.add(new fabric.Text(obj.Text.toString(), {\r\n fontFamily: 'Roboto Light',\r\n left: obj.Left,\r\n top: obj.Top,\r\n fontSize: 20,\r\n fontWeight: 'bold',\r\n fill: '#0000008A',\r\n data: index,\r\n name: 'label',\r\n selectable: false,\r\n angle: obj.Angle,\r\n originX: 'center',\r\n originY: 'center'\r\n }));\r\n this.canvas.renderAll();\r\n }\r\n addShape(element) {\r\n let shape;\r\n let newcolor = element.Color ? 'rgba(' + element.Color.R + ',' + element.Color.G + ',' + element.Color.B + ',' + element.Color.A + ')' : '#3B4532'\r\n if (element.ShapeType != undefined) {\r\n let type;\r\n switch (element.ShapeType) {\r\n case 0:\r\n type = ShapeTypeEnum.Rectangle\r\n break;\r\n case 1:\r\n type = this.checkTableiscircle(element);\r\n break;\r\n case 2:\r\n type = this.checkTableiscircle(element);\r\n break\r\n }\r\n if (type == ShapeTypeEnum.Rectangle) {\r\n shape = new fabric.Rect({\r\n left: element.Left,\r\n top: element.Top,\r\n height: element.Height,\r\n width: element.Width,\r\n stroke: newcolor,\r\n strokeWidth: 2,\r\n strokeDashArray: [8, 3],\r\n name: 'area',\r\n fill: '',\r\n angle: element.Rotation,\r\n selectable: false\r\n });\r\n } else if (type == ShapeTypeEnum.Circle) {\r\n\r\n shape = new fabric.Circle({\r\n radius: (element.Width > element.Height ? element.Height : element.Width) / 2,\r\n left: element.Left,\r\n top: element.Top,\r\n height: element.Height,\r\n width: element.Width,\r\n stroke: newcolor,\r\n strokeWidth: 2,\r\n strokeDashArray: [8, 3],\r\n name: 'area',\r\n fill: 'transparent',\r\n angle: element.Rotation,\r\n perPixelTargetFind: true,\r\n });\r\n } else if (type == ShapeTypeEnum.Ellipse) {\r\n\r\n shape = new fabric.Ellipse({\r\n left: element.Left,\r\n top: element.Top,\r\n rx: element.Width / 2,\r\n ry: element.Height / 2,\r\n stroke: newcolor,\r\n strokeWidth: 2,\r\n strokeDashArray: [8, 3],\r\n name: 'area',\r\n fill: 'transparent',\r\n angle: element.Rotation,\r\n perPixelTargetFind: true,\r\n });\r\n\r\n }\r\n }\r\n this.canvas.add(shape)\r\n this.canvas.sendToBack(shape);\r\n this.canvas.renderAll();\r\n }\r\n\r\n addWall(element) {\r\n element.name = 'wall'\r\n let linesArray = []\r\n element.Points.forEach(point => {\r\n linesArray.push({ x: point.X, y: point.Y })\r\n });\r\n\r\n let wall = new fabric.Polyline(linesArray, {\r\n stroke: '#3B4532',\r\n strokeWidth: 2,\r\n fill: 'transparent',\r\n data: element.id,\r\n name: 'wall',\r\n perPixelTargetFind: true,\r\n\r\n });\r\n this.canvas.add(wall)\r\n this.canvas.sendToBack(wall);\r\n this.canvas.renderAll();\r\n }\r\n\r\n setTableConfiguration(element) {\r\n if (element.ShapeType != undefined) {\r\n\r\n let type;\r\n switch (element.ShapeType) {\r\n case 0:\r\n type = ShapeTypeEnum.Rectangle\r\n break;\r\n case 1:\r\n type = this.checkTableiscircle(element);\r\n break;\r\n case 2:\r\n type = ShapeTypeEnum.Pin\r\n break;\r\n case 3:\r\n type = ShapeTypeEnum.BasicRectangle;\r\n break;\r\n case 4:\r\n type = ShapeTypeEnum.BasicCircle;\r\n break;\r\n case 8:\r\n type = ShapeTypeEnum.Image;\r\n break;\r\n\r\n }\r\n let adjustheightval = element.Height;\r\n let adjustwidthtval = element.Width;\r\n // const type = 'rect';\r\n if (type == 'rect') {\r\n const color = '#f7f7f7';\r\n const strokeColor = '#95989A';\r\n const textColor = 'gray';\r\n const party = null;\r\n const blocked = false;\r\n\r\n\r\n this.rectangle = new fabric.Rect({\r\n left: element.Left,\r\n top: element.Top,\r\n scaleX: this.scaleFactorX,\r\n scaleY: this.scaleFactorY,\r\n height: adjustheightval,\r\n width: adjustwidthtval,\r\n fill: '#fff',\r\n name: 'shape',\r\n rx: 2,\r\n ry: 2,\r\n scaleFactorX: this.scaleFactorX,\r\n scaleFactorY: this.scaleFactorY\r\n });\r\n\r\n this.rectangle.set({\r\n name: 'shape',\r\n });\r\n\r\n this.tableObj = [];\r\n this.tableObj.push(this.rectangle);\r\n this.addTableGroup(this, this.rectangle, element, party);\r\n\r\n }\r\n else if (type == 'circle') {\r\n\r\n const party = null;\r\n\r\n this.circle = new fabric.Circle({\r\n left: element.Left,\r\n top: element.Top,\r\n height: adjustheightval,\r\n width: adjustwidthtval,\r\n radius: (adjustwidthtval / 2) > 15 ? (adjustwidthtval / 2) : 15,\r\n fill: '#fff',\r\n });\r\n this.circle.set({\r\n name: 'shape',\r\n });\r\n this.addTableGroup(this, this.circle, element, party)\r\n }\r\n else if (type == ShapeTypeEnum.Ellipse) {\r\n this.ellipse = new fabric.Ellipse({\r\n left: element.Left,\r\n top: element.Top,\r\n fill: '#fff',\r\n rx: element.Width / 2,\r\n ry: element.Height / 2,\r\n });\r\n this.ellipse.set({\r\n name: 'shape',\r\n });\r\n this.ellipse.setControlsVisibility({\r\n\r\n 'ml': false,\r\n 'mt': false,\r\n 'mr': false,\r\n 'mb': false,\r\n\r\n });\r\n this.addTableGroup(this, this.ellipse, element, false);\r\n }\r\n else if (type == ShapeTypeEnum.Pin) {\r\n let color = '#000';\r\n let seatingTypeSelected = [];\r\n if (this.seatingTypeList) {\r\n seatingTypeSelected = this.seatingTypeList.filter(x => x.Id == element.SeatingTypeId);\r\n }\r\n\r\n if (seatingTypeSelected.length > 0) {\r\n let statusColor = seatingTypeSelected[0].Color;\r\n color = 'rgba(' + statusColor.R + ',' + statusColor.G + ',' + statusColor.B + ',' + statusColor.A + ')';\r\n }\r\n this.pin = new fabric.Circle({\r\n\r\n left: element.Left,\r\n top: element.Top,\r\n height: adjustheightval,\r\n width: adjustwidthtval,\r\n radius: (adjustwidthtval / 2) > 15 ? (adjustwidthtval / 2) : 15,\r\n fill: color,\r\n\r\n });\r\n this.pin.set({\r\n name: 'shape',\r\n type: 'pin'\r\n });\r\n this.addTableGroup(this, this.pin, element, false);\r\n\r\n }\r\n else if (type == ShapeTypeEnum.BasicRectangle) {\r\n const party = null;\r\n this.basicRectangle = new fabric.Rect({\r\n left: element.Left,\r\n top: element.Top,\r\n height: adjustheightval,\r\n width: adjustwidthtval,\r\n fill: '#fff',\r\n rx: 2,\r\n ry: 2\r\n });\r\n\r\n this.basicRectangle.set({\r\n name: 'shape',\r\n type: 'brect'\r\n });\r\n this.addTableGroup(this, this.basicRectangle, element, false);\r\n } else if (type == ShapeTypeEnum.BasicCircle) {\r\n const party = null;\r\n this.basicCircle = new fabric.Circle({\r\n left: element.Left,\r\n top: element.Top,\r\n height: adjustheightval,\r\n width: adjustwidthtval,\r\n radius: (adjustwidthtval / 2) > 15 ? (adjustwidthtval / 2) : 15,\r\n fill: '#fff',\r\n });\r\n this.basicCircle.set({\r\n name: 'shape',\r\n type: 'bcircle'\r\n });\r\n this.addTableGroup(this, this.basicCircle, element, false)\r\n }\r\n else if (type == ShapeTypeEnum.Image) {\r\n const images = this.customImages.filter((img) => img.ImageId == element.ImageId);\r\n if (images && images.length == 1) {\r\n let that = this;\r\n fabric.Image.fromURL('data:image/png;base64,' + images[0].bytes, function (img) {\r\n img.set({\r\n scaleX: (adjustwidthtval / img.width) * that.scaleFactorX,\r\n scaleY: (adjustheightval / img.height) * that.scaleFactorY,\r\n top: element.Top * that.scaleFactorY,\r\n left: element.Left * that.scaleFactorX,\r\n name: 'shape',\r\n type: 'image',\r\n scaleFactorX: that.scaleFactorX,\r\n scaleFactorY: that.scaleFactorY\r\n })\r\n that.addTableGroup(that, img, element, false);\r\n });\r\n }\r\n }\r\n\r\n }\r\n }\r\n\r\n\r\n\r\n addTableGroup(that, object, element, party) {\r\n let blocked = false;\r\n that.tableObj = [];\r\n const statusColorData = this.getStatusColor(element);\r\n const statusDetail = this.getStatusDetail(element);\r\n if (object.type == ShapeTypeEnum.Pin) {\r\n object.set('fill', statusDetail.fill);\r\n } else {\r\n object.set('fill', '#d3d3d3');\r\n }\r\n\r\n element.tableColor = this.getStatusDetail(element)?.fill;\r\n\r\n if (object.type == ShapeTypeEnum.Image) {\r\n\r\n object.set('stroke', this.getButtonColor()[0]);\r\n object.set('strokeWidth', 2);\r\n }\r\n\r\n that.tableObj.push(object);\r\n that.groupedObject = new fabric.Group(that.tableObj, {\r\n top: object.top,\r\n left: object.left,\r\n originY: 'center',\r\n originX: 'center',\r\n });\r\n\r\n let seatingTypeSelected = [];//**this.ls.restaurantWidgetSettings$.value.SeatingTypeList.filter(x => x.Id == element.SeatingTypeId);\r\n let color = statusDetail.fill || 'white'\r\n // if (seatingTypeSelected.length > 0) {\r\n // let statusColor = seatingTypeSelected[0].Color;\r\n // color = 'rgba(' + statusColor.R + ',' + statusColor.G + ',' + statusColor.B + ',' + statusColor.A + ')';\r\n // }\r\n that.groupedObject.set({\r\n SeatingArea: element.SeatingArea,\r\n SeatingAreaId: element.SeatingAreaId,\r\n SeatingType: element.SeatingType,\r\n SeatingTypeId: element.SeatingTypeId,\r\n ServerId: element.ServerId,\r\n MaxPartySize: element.MaxPartySize,\r\n MinPartySize: element.MinPartySize,\r\n Name: element.Name,\r\n Price: element.Price || 0,\r\n IsAvailableForBooking: element.IsAvailableForBooking,\r\n IsAvailableForReservations: element.IsAvailableForReservations,\r\n IsCommunalTable: element.IsCommunalTable,\r\n FloorPlanViewId: element.FloorPlanViewId,\r\n Id: element.Id,\r\n ShapeType: element.ShapeType,\r\n Party: statusColorData.partyData,\r\n selectable: !element.IsAvailableForReservations || !element.IsAvailableForBooking || element.MinPartySize > 2/*this.partyDetails.partySize*/ ? false : true,\r\n radius: element && element.radius > 0 ? element.radius : object.width / 2,\r\n Angle: element ? element.RotationAngle : 0,\r\n defaultColor: color,\r\n ImageId: element ? element.ImageId : null,\r\n tableColor: element.tableColor\r\n\r\n });\r\n // if (!element.IsAvailableForReservations || !element.IsAvailableForBooking || element.MinPartySize > 2/*this.partyDetails.partySize*/) {\r\n // color = '#7d7d7d';\r\n // object.set({\r\n // selectable: false,\r\n // fill: 'red',\r\n // opacity: 1\r\n // });\r\n // that.groupedObject.set({\r\n // defaultColor: '#7d7d7d'\r\n // })\r\n // }\r\n if (object.type == 0 || object.type == ShapeTypeEnum.Rectangle) {\r\n const seatData = this.drawRectangleSeat(that.groupedObject, that, '#3B4532');\r\n seatData.forEach(seat => {\r\n seat.set('strokeWidth', seat.strokeWidth * that.groupedObject.scaleX)\r\n that.groupedObject.addWithUpdate(seat);\r\n seat.moveTo(that.groupedObject.size() - 5)\r\n });\r\n }\r\n else if (object.type == 1 || object.type == ShapeTypeEnum.Circle) {\r\n const obj = _.cloneDeep(that.groupedObject)\r\n const seatData = this.drawCircleSeat(obj, that, '#3B4532');\r\n seatData.forEach(seat => {\r\n that.groupedObject.addWithUpdate(seat);\r\n seat.moveTo(that.groupedObject.size() - 5)\r\n });\r\n }\r\n\r\n that.groupedObject.setCoords();\r\n let text1;\r\n text1 = new fabric.Text(statusDetail.text, {\r\n fill: statusDetail.textColor,\r\n textAlign: 'center',\r\n fontSize: object.scaleFactorX ? 14 * object.scaleFactorX : 14,\r\n fontWeight: 600,\r\n originX: 'center',\r\n originY: 'center',\r\n name: 'text',\r\n top: that.groupedObject.top,\r\n left: that.groupedObject.left,\r\n });\r\n\r\n const numberCircle = new fabric.Circle({\r\n fill: statusDetail.fill || '#fff',\r\n radius: object.scaleFactorX ? 14 * object.scaleFactorX : 14,\r\n top: that.groupedObject.top,\r\n left: that.groupedObject.left,\r\n originX: 'center',\r\n originY: 'center',\r\n name: 'textCircle',\r\n opacity: .8,\r\n stroke: statusDetail.stroke,\r\n strokeWidth: object.scaleFactorX ? 2 * object.scaleFactorX : 2\r\n });\r\n if (object.type == ShapeTypeEnum.Pin) {\r\n text1 = new fabric.Text(statusDetail.text, {\r\n textAlign: 'center',\r\n fill: statusDetail.textColor || '#fff',\r\n name: 'pin',\r\n top: that.groupedObject.top,\r\n left: that.groupedObject.left,\r\n originX: 'center',\r\n originY: 'center',\r\n fontWeight: 'bold',\r\n objectCaching: false,\r\n fontSize: object.radius\r\n });\r\n }\r\n if (object.type != ShapeTypeEnum.Pin) {\r\n that.groupedObject.addWithUpdate(numberCircle);\r\n }\r\n\r\n that.groupedObject.addWithUpdate(text1)\r\n\r\n if (element) {\r\n that.groupedObject.rotate(element.RotationAngle);\r\n }\r\n that.groupedObject.addWithUpdate();\r\n\r\n if (element && element.scaleX) {\r\n let tempScaleX = element.scaleX;\r\n\r\n if (tempScaleX == 0 || tempScaleX < 0.1) {\r\n tempScaleX = 1;\r\n that.groupedObject.set({\r\n scaleX: tempScaleX\r\n })\r\n }\r\n\r\n }\r\n\r\n if (element && element.scaleY) {\r\n let tempScaleY = element.scaleY;\r\n\r\n if (tempScaleY == 0 || tempScaleY < 0.1) {\r\n tempScaleY = 1;\r\n that.groupedObject.set({\r\n scaleY: tempScaleY\r\n })\r\n }\r\n\r\n }\r\n\r\n if (object.type == ShapeTypeEnum.Image) {\r\n if (element && element.Angle) {\r\n that.groupedObject.set({\r\n angle: element.Angle\r\n })\r\n }\r\n }\r\n\r\n that.groupedObject.setCoords();\r\n that.count++;\r\n that.canvas.add(that.groupedObject);\r\n\r\n }\r\n\r\n\r\n\r\n drawRectangleSeat(obj, that, colorData) {\r\n const color = '#444444';\r\n const objectWidth = obj.width;\r\n const objectHeight = obj.height;\r\n let setArray;\r\n const partySize = obj.MaxPartySize > 6 ? 6 : obj.MaxPartySize;\r\n switch (partySize) {\r\n case 1:\r\n setArray = ['left'];\r\n break;\r\n case 2:\r\n setArray = ['left', 'right'];\r\n break;\r\n case 3:\r\n setArray = ['left', 'top', 'right'];\r\n break;\r\n case 4:\r\n setArray = ['left', 'top', 'right', 'bottom'];\r\n break;\r\n case 5:\r\n setArray = ['left', 'top-right', 'top-left', 'right', 'bottom'];\r\n break;\r\n case 6:\r\n setArray = ['left', 'top-right', 'top-left', 'right', 'bottom-left', 'bottom-right'];\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n return this.drawSeat(obj, setArray, this, color);\r\n }\r\n\r\n\r\n drawSeat(obj, seatArray, that, color) {\r\n const tableObj = [];\r\n const scale = obj._objects.filter(x => x.name == 'shape')[0].scaleX;\r\n const shape = obj._objects.filter(x => x.name == 'shape')[0]\r\n seatArray.forEach(element => {\r\n switch (element) {\r\n case 'top': {\r\n const ff = this.rectSeat(obj.left - (obj.width / 4), (obj.top - (obj.height / 2) - 6), obj.left + (obj.width / 4), (obj.top - (obj.height / 2) - 6), scale, color);\r\n tableObj.push(ff);\r\n break;\r\n }\r\n\r\n case 'left': {\r\n const ff = this.rectSeat((obj.left - (obj.width / 2) - 4), (obj.top - (obj.height / 4) - 4), (obj.left - (obj.width / 2) - 4), (obj.top + obj.height / 4), scale, color);\r\n tableObj.push(ff);\r\n break;\r\n }\r\n\r\n case 'right': {\r\n const ff = this.rectSeat((obj.left + (obj.width / 2) - 1), (obj.top - (obj.height / 4) - 4), (obj.left + (obj.width / 2) - 1), (obj.top + obj.height / 4), scale, color);\r\n tableObj.push(ff);\r\n break;\r\n }\r\n\r\n case 'bottom': {\r\n const ff = this.rectSeat((obj.left - (obj.width / 4)), (obj.top + (obj.height / 2)), obj.left + (obj.width / 4), (obj.top + (obj.height / 2)), scale, color);\r\n tableObj.push(ff);\r\n break;\r\n }\r\n\r\n case 'top-right': {\r\n const ff = this.rectSeat(obj.left + (obj.width / 8), (obj.top - (obj.height / 2) - 6), obj.left + (obj.width / 2) - (obj.width / 8), (obj.top - (obj.height / 2) - 6), scale, color);\r\n tableObj.push(ff);\r\n break;\r\n }\r\n\r\n case 'top-left': {\r\n const ff = this.rectSeat(obj.left - (obj.width / 2) + (obj.width / 8), (obj.top - (obj.height / 2) - 6), obj.left - (obj.width / 8), (obj.top - (obj.height / 2) - 6), scale, color);\r\n tableObj.push(ff);\r\n break;\r\n }\r\n\r\n case 'bottom-right': {\r\n const ff = this.rectSeat(obj.left + (obj.width / 8), (obj.top + (obj.height / 2)), obj.left + (obj.width / 2) - (obj.width / 8), (obj.top + (obj.height / 2)), scale, color);\r\n tableObj.push(ff);\r\n break;\r\n }\r\n\r\n case 'bottom-left': {\r\n const ff = this.rectSeat(obj.left - (obj.width / 2) + (obj.width / 8), (obj.top + (obj.height / 2)), obj.left - (obj.width / 8), (obj.top + (obj.height / 2)), scale, color);\r\n tableObj.push(ff);\r\n break;\r\n }\r\n case 'top-right': {\r\n const ff = this.rectSeat(obj.left + (obj.width / 2) + (obj.width / 8), (obj.top - 6), obj.left + (obj.width) - (obj.width / 8), (obj.top - 6), scale, color);\r\n tableObj.push(ff);\r\n break;\r\n }\r\n\r\n case 'top-left': {\r\n const ff = this.rectSeat(obj.left + (obj.width / 8), (obj.top - 6), obj.left + (obj.width / 2) - (obj.width / 8), (obj.top - 6), scale, color);\r\n tableObj.push(ff);\r\n break;\r\n }\r\n\r\n case 'bottom-right': {\r\n const ff = this.rectSeat(obj.left + (obj.width / 2) + (obj.width / 8), (obj.top + (obj.height)), obj.left + (obj.width) - (obj.width / 8), (obj.top + (obj.height)), scale, color);\r\n tableObj.push(ff);\r\n break;\r\n }\r\n\r\n case 'bottom-left': {\r\n const ff = this.rectSeat(obj.left + (obj.width / 8), (obj.top + (obj.height)), obj.left + (obj.width / 2) - (obj.width / 8), (obj.top + (obj.height)), scale, color);\r\n tableObj.push(ff);\r\n break;\r\n }\r\n }\r\n\r\n });\r\n return tableObj;\r\n }\r\n\r\n\r\n rectSeat(x1, y1, x2, y2, scale, color) {\r\n scale = 1;\r\n const rectangleSeatObj = new fabric.Line([x1, y1, x2, y2], {\r\n stroke: color,\r\n strokeWidth: (5),\r\n });\r\n rectangleSeatObj.set({\r\n name: 'seat'\r\n });\r\n return rectangleSeatObj;\r\n }\r\n\r\n\r\n drawCircleSeat(obj, that, colorData) {\r\n const color = '#444444';\r\n const seatWidth = 5 * 5;\r\n const radius = obj.radius;\r\n return this.roundSeatDraw(obj.MaxPartySize > 6 ? 6 : obj.MaxPartySize, radius, color, this.getButtonColor()[0], this, obj, color); // green,blue\r\n }\r\n\r\n roundSeatDraw(seat, radius, seatColor, tblFillColor, that, obj, color?) {\r\n const seatWidth = seat * 25;\r\n const lastend = 0;\r\n const myTotal = seat * 8;\r\n let startAngle = 0;\r\n const tableObj1 = [];\r\n const strokeColor = '';\r\n const table = obj._objects.filter(x => x.name == 'shape')[0];\r\n for (let i = 0; i < seat; i++) {\r\n const circleSeat = new fabric.Circle({\r\n radius: ((table.width * table.scaleX) / 2) + 3,\r\n startAngle: startAngle - ((Math.PI * 2) / myTotal),\r\n endAngle: startAngle + ((Math.PI * 2) / myTotal),\r\n stroke: seatColor,\r\n strokeWidth: (5),\r\n fill: '',\r\n top: obj.top,\r\n left: obj.left,\r\n originX: 'center',\r\n originY: 'center',\r\n });\r\n\r\n circleSeat.set({\r\n name: 'seat',\r\n });\r\n\r\n startAngle += Math.PI * 2 * ((myTotal / seat) / myTotal);\r\n tableObj1.push(circleSeat);\r\n }\r\n return tableObj1;\r\n }\r\n\r\n getStatusDetail(element) {\r\n if (element.IsAvailableForBooking && element.IsAvailableForBooking) {\r\n let seatingTypeSelected = {} as any;\r\n if (this.seatingTypeList) {\r\n seatingTypeSelected = this.seatingTypeList.find(x => element.SeatingTypeId === x.Id);\r\n }\r\n\r\n //seatingTypeSelected && && (!this._selectedSeatingType || this._selectedSeatingType === element.SeatingTypeId)\r\n if (seatingTypeSelected) {\r\n let statusColor = seatingTypeSelected.Color;\r\n let color = 'rgba(' + statusColor.R + ',' + statusColor.G + ',' + statusColor.B + ',' + statusColor.A + ')';\r\n\r\n return { ...this.masterStatusData.selectable, fill: color, textColor: '#fff', stroke: color }\r\n }\r\n return this.selectedSeatingType ? this.masterStatusData.notSelectable : this.masterStatusData.selectable;\r\n }else{\r\n return this.masterStatusData.soldout;\r\n }\r\n }\r\n\r\n getStatusColor(element) {\r\n let fillColor = '#7d7d7d';\r\n const textColor = '#444444';\r\n let partyColor = 'black';\r\n let stroke = '#3B4532';\r\n let numberColor = '#4f483e';\r\n let partyData = null;\r\n return ({ fillColor, textColor, partyData, partyColor, stroke, numberColor });\r\n }\r\n\r\n scaleObjects(canvas, scaleFactorX, scaleFactorY, scaleFactor, BasedOn?) {\r\n const objects = canvas.getObjects();\r\n for (const i in objects) {\r\n const scaleX = objects[i].scaleX;\r\n const scaleY = objects[i].scaleY;\r\n const left = objects[i].left;\r\n const top = objects[i].top;\r\n const shapetype = objects[i].name == 'area';\r\n let scalefactorneed = false;\r\n if (objects[i]._objects) {\r\n let shape = objects[i]._objects.filter(x => x.name == 'shape')[0];\r\n let shapetypetable = shape.get('type');\r\n scalefactorneed = false;\r\n if (!shapetype && shapetypetable == ShapeTypeEnum.Rectangle && BasedOn == undefined) {\r\n scalefactorneed = this.getbigRectangle(objects[i].width, objects[i].height);\r\n }\r\n }\r\n const tempScaleX = scaleX * (shapetype || scalefactorneed ? scaleFactorX : scaleFactor);\r\n const tempScaleY = scaleY * (shapetype || scalefactorneed ? scaleFactorY : scaleFactor);\r\n const tempLeft = left * scaleFactorX;\r\n const tempTop = top * scaleFactorY;\r\n if (objects[i].points) {\r\n\r\n objects[i].scaleX = scaleFactorX;\r\n objects[i].scaleY = scaleFactorY;\r\n objects[i].left = tempLeft;\r\n objects[i].top = tempTop;\r\n } else {\r\n objects[i].scaleX = tempScaleX;\r\n objects[i].scaleY = tempScaleY;\r\n objects[i].left = tempLeft;\r\n objects[i].top = tempTop;\r\n }\r\n objects[i].setCoords();\r\n }\r\n canvas.renderAll();\r\n canvas.calcOffset();\r\n }\r\n\r\n\r\n getbigRectangle(Width, Height) {\r\n const checkdiff = Width < Height;\r\n let finalval = Height / Width;\r\n if (!checkdiff) {\r\n finalval = Width / Height;\r\n }\r\n return Math.abs(finalval) > (1.25);\r\n }\r\n\r\n getLayoutData(restaurantId: Number, partySize: Number, isCommunalTable: boolean, timeSlot, seatingAreaId = null, seatingTypeId = null, reservationIdToIgnore = null) {\r\n seatingTypeId = null;\r\n return this.httpService.get(`${urlConfig.layoutUrl}?restaurantId=${restaurantId}&timeSlot=${timeSlot}&partySize=${partySize}&showCommunalTable=${isCommunalTable}&seatingareaid=${seatingAreaId}&reservationIdToIgnore=${reservationIdToIgnore}&seatingtypeid=${seatingTypeId}`);\r\n }\r\n\r\n}\r\n\r\nconst defaultTheme = '#2196f3';\r\nconst highlightColor = '#61ff00';","import { Directive, ElementRef, HostListener, Input } from '@angular/core';\r\nimport { NgControl } from '@angular/forms';\r\n\r\n@Directive({\r\n selector: 'input[appDurationValue]'\r\n})\r\nexport class DurationValueDirective {\r\n @Input() durationList: any[] = [];\r\n private regex: RegExp = new RegExp(/^-?[1-9][0-9]{0,}$/g);\r\n private specialKeys: Array = ['Backspace', 'Tab', 'End', 'Home', '-', 'ArrowLeft', 'ArrowRight', 'ArrowDown', 'ArrowUp', 'Delete',\r\n 'Enter'];\r\n constructor(private el: ElementRef, private control: NgControl) {\r\n }\r\n\r\n @HostListener('keydown', ['$event'])\r\n onKeyDown(event: KeyboardEvent) {\r\n this.regex = new RegExp(/^-?[1-9][0-9]{0,}$/g)\r\n\r\n if (this.specialKeys.indexOf(event.key) !== -1 || event.ctrlKey) {\r\n return;\r\n }\r\n const current: string = this.el.nativeElement.value;\r\n const next: string = current.concat(event.key);\r\n if (next && !String(next).match(this.regex)) {\r\n event.preventDefault();\r\n }else if(next >= this.durationList[0]?.value && !this.durationList.filter(x => x.value == next).length){\r\n event.preventDefault();\r\n }\r\n }\r\n\r\n @HostListener('paste', ['$event'])\r\n onPaste(event) {\r\n const current = event.clipboardData && event.clipboardData.getData('text') ?\r\n this.regex.test(String(event.clipboardData.getData('text'))) : null;\r\n if (!current || (current >= this.durationList[0]?.value && !this.durationList.filter(x => x.value == current).length)) {\r\n event.preventDefault();\r\n }\r\n }\r\n\r\n @HostListener('blur', ['$event'])\r\n onBlur(event) {\r\n setTimeout(() => {\r\n const current = this.el.nativeElement.value;\r\n const abstractControl = this.control.control;\r\n\r\n if (abstractControl && !current) {\r\n abstractControl.setValue(this.durationList[0]?.value);\r\n abstractControl.updateValueAndValidity();\r\n }\r\n }, 100);\r\n }\r\n}\r\n","\r\n \r\n\r\n\r\n
\r\n
\r\n {{!activityService.isDining ? (activityService.isNonDining ? activityService.selectedNonDining.RestaurantName :\r\n selectedActivityData?.Name) : activityService.selectedDining.RestaurantName}}\r\n
\r\n \r\n \r\n location_on\r\n   {{activityService.selectedDining.Street1}}{{activityService.selectedDining.Street2}},\r\n {{activityService.selectedDining.City}}, {{activityService.selectedDining.Country}}\r\n
\r\n \r\n\r\n
\r\n \r\n location_on\r\n   {{activityService.selectedNonDining.Street1}}{{activityService.selectedNonDining.Street2}},\r\n {{activityService.selectedNonDining.City}}, {{activityService.selectedNonDining.Country}}\r\n
\r\n \r\n\r\n
\r\n {{(activityService.selectedDining.WidgetCustomization?.HeaderText ?\r\n activityService.selectedDining.WidgetCustomization?.HeaderText : 'selectYourDesiredSlot') | translate}}\r\n
\r\n \r\n
\r\n 0\">\r\n
\r\n
\r\n
 {{'specialEvent' | translate}}
\r\n
\r\n
\r\n
 {{'tableReservation' | translate}}
\r\n
\r\n
\r\n
\r\n
\r\n {{(activityService.selectedDining.WidgetCustomization?.SubHeaderText ?\r\n activityService.selectedDining.WidgetCustomization?.SubHeaderText : 'letsMakeReservation') | translate }}\r\n
\r\n\r\n
\r\n {{(activityService.selectedDining.WidgetCustomization?.SubHeaderText ?\r\n activityService.selectedDining.WidgetCustomization?.SubHeaderText : 'letsMakeReservation') | translate }}\r\n
\r\n\r\n
0 && !activityService?.mealWithConfig\"\r\n class=\"px-2 col-12 d-flex justify-content-end\">\r\n
\r\n  {{'prePaymentNeeded' | translate}}\r\n
\r\n
\r\n\r\n
\r\n \"meal-image\"\r\n
\r\n
\r\n
{{this.activityService.mealWithConfig?.Name || ''}}\r\n  ({{'serves'| translate}} {{this.activityService.mealWithConfig?.MinPartySize}} -\r\n {{this.activityService.mealWithConfig?.MaxPartySize}})\r\n\r\n
\r\n\r\n
\r\n  {{'prePaymentNeeded' | translate}}\r\n
\r\n
\r\n
\r\n {{this.activityService.mealWithConfig?.OperationCurrency + ' ' + (this.activityService.mealWithConfig?.Price | currencyDecimalFormatter)}}\r\n
\r\n
0\"\r\n class=\"d-flex cursor-pointer activity-description activity-list-title disable-text-select\">\r\n {{'viewPricing'\r\n | translate}}\r\n
\r\n \r\n
\r\n {{coverPrice.CoverTypeName + ' - ' +\r\n activityService.mealWithConfig.OperationCurrency + ' ' + (coverPrice.Price | currencyDecimalFormatter)}}\r\n
\r\n
\r\n

\r\n\r\n\r\n

\r\n
\r\n\r\n
\r\n\r\n
0 && !this.activityService.mealWithConfig\">\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
{{specialMeal?.Name}}\r\n
\r\n
\r\n \r\n
\r\n
\r\n
{{('serves' | translate) + ' ' + specialMeal?.MinPartySize\r\n + ' - ' +\r\n specialMeal?.MaxPartySize + ' ' + ('people' | translate)}}
\r\n
0\"\r\n class=\"d-flex justify-content-center activity-description activity-list-title disable-text-select\">\r\n {{'viewPricing'\r\n | translate}}\r\n
\r\n
{{\r\n selectedActivityData.OperationCurrency + ' ' + (specialMeal?.Price | currencyDecimalFormatter)}}
\r\n \r\n
\r\n {{coverPrice.CoverTypeName + ' - ' +\r\n selectedActivityData.OperationCurrency + ' ' + (coverPrice.Price | currencyDecimalFormatter)}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n {{eacInstructor.value}}\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n {{eacLoc.value}}\r\n \r\n \r\n \r\n\r\n \r\n {{(isMultiSlotSelection ? 'FromDate' : 'selectDate') | translate}}\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n {{'ToDate' | translate}}\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n\r\n\r\n \r\n\r\n
\r\n\r\n\r\n\r\n \r\n
\r\n
\r\n
1\" class=\"select-prev-date\" [class.disabledArrow]=\"i === 0\"\r\n (click)=\"loadPreviousDate(i)\"><
\r\n
{{sessionDates.AvailableDate | localizeDate : 'DD MMMM, ddd'}}
\r\n
1\" class=\"select-next-date\" (click)=\"loadNextDate(i)\"\r\n [class.disabledArrow]=\"i === (sessionSlotsAvailableDates.length-1)\">>
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n {{'session' | translate}} {{i+1}}
\r\n \r\n
\r\n {{eachSlot.SessionGroupName}}
\r\n
{{eachSlot.Start | localizeDate: 'LT'}}\r\n - {{eachSlot.End | localizeDate: 'LT'}}\r\n
\r\n\r\n
\r\n {{eachSlot.showAvailibility.text}}
\r\n
\r\n \r\n {{ eachSlot.sessionHeadlines }}\r\n
\r\n
\r\n check_circle\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n {{'Bookforallavailabledates' | translate}} (\r\n \r\n {{sessionSlotsAvailableDates[0]?.AvailableDate | localizeDate: 'DD MMMM'}} -\r\n {{sessionSlotsAvailableDates[sessionSlotsAvailableDates.length -1].AvailableDate | localizeDate: 'DD\r\n MMMM'}}\r\n \r\n )\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n {{'noSlotsAvailable' | translate}}\r\n
\r\n \r\n\r\n
\r\n
\r\n
\r\n \r\n
\r\n
<
\r\n
\r\n
\r\n {{'selectDate' | translate}}
\r\n
\r\n {{currentFromDate | localizeDate : 'DD MMMM, ddd'}}
\r\n \r\n {{'selectDate' | translate}}\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
= diningMaxDate || !(bookingTypeMaxDate | dateCompareByDay: currentFromDate) || !showNextArrow\">>
\r\n
\r\n \r\n
\r\n
-
\r\n
\r\n
\r\n {{cover.name}}
\r\n
\r\n {{cover.value}}
\r\n \r\n {{cover.name}}\r\n \r\n {{'0' | translate}}\r\n \r\n {{bookingSize.value}}\r\n \r\n \r\n \r\n
\r\n
+\r\n
\r\n
\r\n
\r\n \r\n
\r\n
-\r\n
\r\n
\r\n
\r\n {{'partySize' | translate}}
\r\n
\r\n {{currentBookingSize}}
\r\n \r\n {{'partySize' | translate}}\r\n \r\n \r\n {{bookingSize.value}}\r\n \r\n \r\n \r\n
\r\n
+\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
{{'communalTableAvailability' | translate}}
\r\n
\r\n
0\" class=\"d-flex flex-wrap mb-3\">\r\n
\r\n {{'showAvailableDays' | translate}}\r\n
\r\n \r\n
\r\n
{{day.value | localizeDate: 'DD'}}
\r\n
{{day.value | localizeDate: 'ddd'}}
\r\n
\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n\r\n
\r\n
\r\n
\r\n 0 && activityService?.displaySeatingArea\">\r\n \r\n \r\n \r\n {{seating.value}}\r\n \r\n \r\n \r\n \r\n\r\n 0 && activityService?.displaySeatingType\">\r\n \r\n \r\n \r\n {{seatType.value}}\r\n \r\n \r\n \r\n \r\n
\r\n
0\" class=\"d-flex flex-column\">\r\n
{{'mealPeriod' | translate}}
\r\n
\r\n \r\n \r\n {{option.Name}}\r\n \r\n \r\n
\r\n
\r\n
\r\n
{{'timeSlots' | translate}}
\r\n
\r\n \r\n \r\n
\r\n
\r\n {{diningSlots | localizeDate: 'LT'}}
\r\n
\r\n
\r\n
\r\n
\r\n 0 && isTimeDropList\">\r\n
\r\n
\r\n
<\r\n
\r\n
\r\n
\r\n {{'time' |\r\n translate}}
\r\n
\r\n {{checkedDiningLocalTime | localizeDate: 'LT'}}
\r\n \r\n {{'time' | translate}}\r\n \r\n \r\n {{timing | localizeDate: 'LT'}}\r\n \r\n \r\n \r\n
\r\n
\r\n >
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n {{'noslots' | translate}}\r\n
\r\n
\r\n
\r\n\r\n\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n calendar_today\r\n \r\n \r\n {{currentFromDate | localizeDate : 'Do MMMM, ddd'}}\r\n \r\n {{'selectDate' | translate}}\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n\r\n \r\n\r\n
\r\n\r\n \r\n \r\n\r\n
\r\n
\r\n \r\n \r\n push_pin\r\n \r\n \r\n
\r\n {{seatingTypeNames[selectedSeatingType]}}\r\n
\r\n {{'Price' | translate}}: ({{activityService.selectedNonDining.OperationCurrency}}{{(rateplanSupportService.seatingTypePriceDetail[selectedSeatingType]?.Total !=='' ?\r\n rateplanSupportService.seatingTypePriceDetail[selectedSeatingType]?.Total : 0) | currencyDecimalFormatter}})\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n schedule\r\n \r\n \r\n {{selectedNonDiningSlotsDisplayText}}\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n \r\n \r\n push_pin\r\n \r\n \r\n\r\n \r\n
\r\n {{location.Name}}\r\n
\r\n {{'TotalPriceTopBarText' | translate}}: ({{activityService.selectedNonDining.OperationCurrency}}{{(location.PriceDetail?.Total !=='' ?\r\n location.PriceDetail?.Total : 0) | currencyDecimalFormatter}})\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
{{'Sold' | translate}}
\r\n
{{'Selected' | translate}}\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n 0 && activityService?.displaySeatingArea\">\r\n
\r\n
\r\n \r\n \r\n {{'seatingArea' | translate}}\r\n \r\n {{'NA' | translate}}\r\n {{seating.value}}\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n\r\n\r\n
\r\n
\r\n\r\n

{{'seatingType' | translate}}

\r\n\r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n {{ seatType.value }}\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n \r\n
\r\n
<
\r\n
\r\n
{{'date' |\r\n translate}}
\r\n
\r\n {{currentFromDate | localizeDate : 'DD MMMM, ddd'}}
\r\n \r\n {{'selectDate' | translate}}\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
= nonDiningMaxDate\">>\r\n
\r\n
\r\n\r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n 0 && activityService?.displaySeatingArea\">\r\n
\r\n
\r\n
\r\n {{'seatingArea' |\r\n translate}}
\r\n \r\n \r\n \r\n {{'NA' | translate}}\r\n {{seating.value}}\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n\r\n\r\n 0 && activityService?.displaySeatingType\">\r\n
\r\n
\r\n
\r\n {{'seatingType' |\r\n translate}}
\r\n \r\n \r\n \r\n {{'NA' | translate}}\r\n {{seatType.value}}\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n\r\n\r\n
\r\n
\r\n \r\n
\r\n
{{'communalTableAvailability' | translate}}
\r\n
\r\n
0\" class=\"d-flex flex-wrap mb-3\">\r\n
\r\n {{'showAvailableDays' | translate}}\r\n
\r\n \r\n
\r\n
{{day.value | localizeDate: 'DD'}}
\r\n
{{day.value | localizeDate: 'ddd'}}
\r\n
\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n\r\n
\r\n \r\n
\r\n\r\n
\r\n
\r\n \r\n
\r\n {{'Price' | translate}}: ({{activityService.selectedNonDining.OperationCurrency}}{{(location.PriceDetail?.Total !=='' ?\r\n location.PriceDetail?.Total : 0) | currencyDecimalFormatter}})\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
{{'Locations' |\r\n translate}}
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n {{table.Name}}\r\n \r\n
\r\n {{'Min'}}: {{table.MinPartySize}} {{'Max'}}: {{table.MaxPartySize}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n {{'noLocations' | translate}}\r\n
\r\n
\r\n
\r\n \r\n \r\n {{'PleaseSelectTimeSlotsToShowTheTablesOrSeating' | translate}}\r\n
\r\n \r\n \r\n \r\n {{'unavailableForSelectionInfo' | translate}}\r\n
\r\n
\r\n\r\n \r\n\r\n\r\n \r\n\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n
\r\n
\r\n\r\n \r\n\r\n\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n\r\n\r\n\r\n
\r\n \r\n {{activityService.selectedDining.WidgetCustomization?.PromoCodeLabel ?\r\n activityService.selectedDining.WidgetCustomization?.PromoCodeLabel : ('promoCode' | translate)}}\r\n \r\n \r\n
\r\n
\r\n\r\n\r\n
\r\n
\r\n \r\n
\r\n
{{activityService.selectedDining.MarketingFlagDescription}}
\r\n
\r\n
\r\n\r\n\r\n\r\n\r\n\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n\r\n\r\n
\r\n
\r\n -
\r\n
\r\n
{{'Duration' |\r\n translate}}
\r\n
\r\n \r\n {{'Duration' |\r\n translate}}\r\n \r\n \r\n \r\n {{option.displayName}}\r\n \r\n \r\n \r\n
\r\n
\r\n
= durationList[durationList.length-1]\">+
\r\n
\r\n
\r\n\r\n\r\n
\r\n
{{'timeSlots' | translate}}
\r\n
\r\n \r\n \r\n
\r\n
\r\n {{nonDiningSlots | localizeDate: 'LT'}}
\r\n
\r\n
\r\n
\r\n
\r\n 0 && isTimeDropList\">\r\n
\r\n
\r\n
<\r\n
\r\n
\r\n
{{'time' |\r\n translate}}
\r\n
\r\n {{checkedNonDiningLocalTime | localizeDate: 'LT'}}
\r\n \r\n {{'time' | translate}}\r\n \r\n \r\n {{timing | localizeDate: 'LT'}}\r\n \r\n \r\n \r\n
\r\n
\r\n >
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n {{'noslots' | translate}}\r\n
\r\n
\r\n\r\n\r\n\r\n check\r\n\r\n\r\n\r\n\r\n
\r\n
{{ 'partySize' | translate }}
\r\n
\r\n -
\r\n
\r\n \r\n\r\n\r\n \r\n \r\n {{'0' | translate}}\r\n \r\n {{bookingSize.value}}\r\n \r\n \r\n \r\n
\r\n +\r\n
\r\n \r\n \r\n\r\n
\r\n\r\n\r\n\r\n\r\n \r\n\r\n

{{ 'BookingTypes' | translate }}

\r\n\r\n \r\n \r\n
{{bookType.name}}
\r\n
\r\n -
\r\n
\r\n \r\n\r\n \r\n \r\n {{'0' | translate}}\r\n \r\n {{bookingSize.value}}\r\n \r\n \r\n \r\n
\r\n +\r\n \r\n \r\n
\r\n\r\n

{{ 'CoverTypes' | translate }}

\r\n\r\n \r\n \r\n
{{cover.Name || cover.name}}
\r\n
\r\n -
\r\n
\r\n \r\n \r\n\r\n\r\n\r\n \r\n \r\n {{'0' | translate}}\r\n \r\n {{bookingSize.value}}\r\n \r\n \r\n \r\n
\r\n \r\n +\r\n \r\n \r\n
\r\n\r\n
\r\n\r\n
\r\n\r\n\r\n \r\n
\r\n \r\n {{'selectBookingType' | translate}}\r\n \r\n {{type.value}}\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n {{bookingTypePlaceholder}}\r\n \r\n \r\n \r\n
\r\n
\r\n
","import { Component, HostListener, OnInit, Pipe, PipeTransform, TemplateRef, ViewChild, ViewEncapsulation } from '@angular/core';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { Observable, Subscription } from 'rxjs';\r\nimport { AvailabilityCriteria, BookingBehavior, NoteType, PartyState, AttributeType, LocationViewTypes, ComponentTypes, ActivityBookings, ScreenType, DEFAULT_LANGUAGE_CODE , BookingGuestType, Status } from 'src/app/shared/constants/commonenums';\r\nimport {\r\n ActivitySlotRequestDTO, AvailabilityType,\r\n ClassType, SessionBookingDTO\r\n} from 'src/app/shared/Models/SessionBookingDTO';\r\nimport { GuestService } from 'src/app/shared/services/guest.service';\r\nimport { Utilities } from 'src/app/shared/utilities/utilities';\r\nimport moment from 'moment';\r\nimport { SpecialMealDTO, operationType } from 'src/app/shared/Models/WidgetSettingsModels';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { ContactAddressDTO, FullContactDTO, PartyNoteType, SessionAvailabiltyStatus ,BookingTypeInfo} from 'src/app/shared/Models/PartyModels';\r\nimport { MatChip } from '@angular/material/chips';\r\nimport _ from 'lodash';\r\nimport { ActivitiesLiteGuestDataComponent } from '../activities-lite-guest-data/activities-lite-guest-data.component'\r\nimport { FormControl, Validators } from '@angular/forms';\r\nimport { map, startWith } from 'rxjs/operators';\r\nimport { ReservationService } from 'src/app/layout/reservation.service';\r\nimport { HttpService } from 'src/app/shared/services/http.service';\r\nimport { urlConfig } from 'src/app/shared/constants/url-config';\r\nimport { NgbPopover } from '@ng-bootstrap/ng-bootstrap';\r\nimport { ValidationMessageType } from 'src/app/shared/Models/ResultModels';\r\nimport { PopupMessageComponent } from 'src/app/shared/components/popup-message/popup-message.component';\r\nimport { ComponentDetails } from 'src/app/shared/dynamicform/models/popup.interface';\r\nimport { DynamicFormService } from 'src/app/shared/dynamicform/service/dynamic-form.service';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\nimport { FieldConfig } from 'src/app/shared/dynamicform/models/common-models';\r\nimport { DynamicFormComponent } from 'src/app/shared/dynamicform/dynamic-form/dynamic-form.component';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { ActivitiesLayoutSupportService } from '../activities-layout/activities-layout-support.component';\r\n\r\n\r\n@Component({\r\n selector: 'app-activity-session-selection',\r\n templateUrl: './activity-session-selection.component.html',\r\n styleUrls: ['./activity-session-selection.component.scss', './../activities-lite.component.scss'],\r\n encapsulation:ViewEncapsulation.None\r\n})\r\n\r\nexport class ActivitySessionSelectionComponent extends Utilities implements OnInit {\r\n\r\n @ViewChild('commentDetailsForm') commentDetailsForm;\r\n @ViewChild(ActivitiesLiteGuestDataComponent, { static: true }) activitiesLiteGuestDataComponent: ActivitiesLiteGuestDataComponent;\r\n subscriptions: Subscription = new Subscription();\r\n checkedItem = false;\r\n sessionSlotsAvailableDates: any = null;\r\n showSessionorSlots = false;\r\n selectedIndex = 0;\r\n isSessionClass: any;\r\n availableSessions: any[];\r\n classLessonList: any[];\r\n selectedClassSchedule: any = [];\r\n selectedActivityData: any;\r\n validGroupSize = false;\r\n coverTypes = [];\r\n activityHeadlines = [];\r\n bookingTypes = [];\r\n validBookingTypes = true;\r\n instructorList: any[];\r\n locationList: any[];\r\n bookingSizeArray: any = [];\r\n classDetail: any;\r\n minSizeAllowed = 1;\r\n maxSizeAllowed = 10;\r\n currentInstructors: any;\r\n currentLocations: any;\r\n currentFromDate: any;\r\n currentToDate: any;\r\n currentBookingSize = 0;\r\n bookAllAvailableDates = false;\r\n isMultiSlotSelection = false;\r\n isEdit = false;\r\n venueAllocationMappings: any;\r\n overAllBookingSize = 0;\r\n lockResponse: any;\r\n freeTextIdList = [];\r\n notesOptions = [];\r\n noteType: number;\r\n seatingAreaMasterList = [];\r\n seatingArea = [];\r\n selectedSeatingArea = 0;\r\n seatingTypesMasterList = [];\r\n seatingType = [];\r\n selectedSeatingType = 0;\r\n seatingAreaSeatingTypeMappings = [];\r\n daysForReservation = 0;\r\n diningMaxDate: Date;\r\n propertyMaxDateAllowed: Date;\r\n showParticularDays: any;\r\n availableSpecialMeals = [];\r\n isCommunalTable = false;\r\n showSpecialEvent = true;\r\n isTimeDropList = false;\r\n selectedDiningSlots = [];\r\n checkedDiningLocalTime = '';\r\n sessionsUnavailable: any[];\r\n selectedTimeSlots: any = [];\r\n ratePlan: any;\r\n originalTimeSlotList = [];\r\n otherAvailableDays = [];\r\n showAvailableDates = true;\r\n promoCodeDetail = '';\r\n marketingFlag = false;\r\n customGuestFields: any = [];\r\n // showGuestFields:boolean = false;\r\n guestContact: any;\r\n editContactData: any = {};\r\n guestContactValidation: boolean = false;\r\n selectedMealAddOns: any;\r\n openHourDays = [];\r\n CustomOpenHours = [];\r\n nonDiningMaxDate: Date;\r\n selectedNonDiningSlots: any[] = [];\r\n checkedNonDiningLocalTime: string = '';\r\n matchedContinousSlots: any[] = [];\r\n bShowLocation: boolean = false;\r\n tableList: any[] = [];\r\n filteredTableList: any[] = [];\r\n // selectedNonDiningLocation: any;\r\n selectedNonDiningSlotsDisplayText: string;\r\n TimeSlotUnitInMinutes: number = 10;\r\n durationControl = new FormControl('');\r\n durationList: any[] = [];\r\n filteredDurationOptions: Observable;\r\n bIsSlotReloadRequired: boolean = false;\r\n showNextArrow = false;\r\n floorPlan;\r\n updateIndicator;\r\n mealWithConfig: any;\r\n // locationView: 'list' | 'map' = 'list';\r\n locationViewTypes = LocationViewTypes;\r\n @ViewChild('slotEditngbPopOver') public slotEditngbPopOver: NgbPopover;\r\n @ViewChild('coverAndBookingTypeEditngPopOver') public coverAndBookingTypeEditngPopOver: NgbPopover;\r\n bUpdateNonDiningBackUpData: boolean = true;\r\n nonDiningBackUpData: any;\r\n locationMappedSeatingTypes: Number[] = [];\r\n finishReservationClicked: boolean = false;\r\n secondaryContacts: any[] = [];\r\n selectedBookingType:number;\r\n bookingTypeList:any[] = [];\r\n BookingGuestType = BookingGuestType;\r\n confirmationNumber:string;\r\n bookingTypePlaceholder: string;\r\n bookingTypeMinDate : Date;\r\n bookingTypeMaxDate : Date;\r\n disableDatePicker : boolean = false;\r\n sizeMapping:any;\r\n getSlotInitial: boolean = false;\r\n addToCartEnableForTaxType: boolean = true;\r\n seatingTypeNames: {\r\n [key: string]: string\r\n } = {}\r\n constructor(\r\n private httpService: HttpService,\r\n private ts: TranslateService,\r\n public activityService: GuestService,\r\n private router: Router,\r\n public route: ActivatedRoute, private rs: ReservationService,\r\n private dfs: DynamicFormService,public dialog: MatDialog, public rateplanSupportService: ActivitiesLayoutSupportService) {\r\n super(dialog);\r\n }\r\n\r\n // viewChange(){\r\n // if(this.locationView === 'list'){\r\n // this.locationView = 'map';\r\n // }else{\r\n // this.locationView = 'list';\r\n // }\r\n // }\r\n\r\n ngOnInit(): void {\r\n // this.activityService.resetConfigBasedStyles();\r\n this.activityService.stopTimer();\r\n this.activityService.showBackNav();\r\n this.activityService.currentNavURL = 'session-selection';\r\n this.activityService.prevNavURL = 'list';\r\n let widgetCustomization =null;\r\n if(this.activityService.widgetSettings && this.activityService.widgetSettings.PropertyWidgetSettings){\r\n widgetCustomization = this.activityService.widgetSettings.PropertyWidgetSettings.find(property => property.RestaurantId == this.activityService.restaurantWidgetId)?.WidgetCustomization;\r\n if(widgetCustomization) {\r\n this.showSpecialEvent = widgetCustomization.DefaultReservationView ? false : true;\r\n }\r\n }\r\n this.activityService.restaurantMerchantCode = this.route.snapshot.params.merchantId;\r\n let cartList = JSON.parse(sessionStorage.getItem('CartList_' + this.activityService.restaurantMerchantCode));\r\n if(cartList?.length && this.activityService.widgetSettings && this.activityService.widgetSettings.PropertyWidgetSettings){\r\n this.addToCartEnableForTaxType = this.activityService.widgetSettings.PropertyWidgetSettings.find((property) => property.RestaurantId == cartList[0].PropertyId).TaxType == this.activityService.widgetSettings.PropertyWidgetSettings.find((property) => property.RestaurantId == this.route.snapshot.params.restaurantId)?.TaxType\r\n }\r\n if (this.activityService.isNonDining) {\r\n if (this.route.snapshot.queryParams.activityId) {\r\n let activity = this.activityService.allClassActivitiesAvailable$?.value && this.activityService.allClassActivitiesAvailable$.value.find(({ Id }) => Id === +this.route.snapshot.queryParams.activityId);\r\n if (activity) {\r\n this.backToSlotSelect();\r\n this.setActivityData(activity);\r\n } else {\r\n this.activityService.activityIdFromURL = +this.route.snapshot.queryParams.activityId;\r\n this.activityService.navigateToUrl(`list`, null, \"/\" + this.activityService.activityIdFromURL);\r\n return;\r\n }\r\n } else if (this.route.snapshot.queryParams.bookaspot) { \r\n let _restaurantData = this.activityService.widgetSettings?.PropertyWidgetSettings && this.activityService.widgetSettings.PropertyWidgetSettings.find((property) => property.RestaurantId === +this.route.snapshot.params.restaurantId && property.AcceptsReservations && property.WidgetCustomization.ActivityBookings.filter(y => y == ActivityBookings.OpenBooking)?.length);\r\n if (_restaurantData) {\r\n this.activityService.clickReserveNow_NonDining(_restaurantData);\r\n } else {\r\n this.activityService.navigateToUrl(`list`, { propertyId: +this.route.snapshot.params.restaurantId });\r\n return;\r\n }\r\n } else {\r\n this.activityService.navigateToUrl(`list`);\r\n return;\r\n }\r\n }\r\n\r\n this.activityService.getCartCount();\r\n this.isEdit = this.activityService.operation === operationType.edit ? true : false;\r\n this.activityService.hideCart.next(this.isEdit);\r\n if(this.activityService?.sessionFilterValue?.isSpecialMealReservation) {\r\n this.showSpecialEvent = this.activityService?.sessionFilterValue?.isSpecialMealReservation;\r\n }\r\n else if(this.activityService.isSpecialMeal) {\r\n this.showSpecialEvent = this.activityService?.isSpecialMeal;\r\n }\r\n else {\r\n this.showSpecialEvent = widgetCustomization?.DefaultReservationView ? false : true;\r\n }\r\n this.setLockCartData();\r\n }\r\n\r\n setLockCartData(){\r\n if (this.activityService.cartCount > 0) {\r\n let modifiedLockCart = [];\r\n const CartLockList = this.activityService.getSessionData('CartLockList_' + this.activityService.restaurantMerchantCode, true) || [];\r\n CartLockList.forEach(cartlock => {\r\n if (cartlock.slotLockResp) {\r\n modifiedLockCart.push(cartlock.slotLockResp);\r\n }\r\n });\r\n if (modifiedLockCart?.length && modifiedLockCart.length) {\r\n this.unLockMultiCart(CartLockList, modifiedLockCart);\r\n } else {\r\n this.checkDataPresent();\r\n }\r\n } else {\r\n this.checkDataPresent();\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n if(!this.isEdit){\r\n this.setBookingType();\r\n }\r\n }\r\n \r\n setBookingType(){\r\n let _restaurantData = this.activityService.widgetSettings.PropertyWidgetSettings?.find((property) => property.RestaurantId === this.activityService.restaurantWidgetId);\r\n this.bookingTypeList = [];\r\n if (_restaurantData) {\r\n let bookingTypeForActivity = _restaurantData.AvailableSpecialMeals.find(meal => meal.Id == this.selectedActivityData?.SpecialMealId)\r\n let bookingTypes = this.selectedActivityData?.SpecialMealId ? bookingTypeForActivity?.BookingTypeActivitiesMappings : _restaurantData?.BookingTypes;\r\n if(bookingTypes?.length){\r\n this.getMemberConfig(bookingTypes);\r\n }\r\n }\r\n }\r\n getMemberConfig(bookingTypes) {\r\n bookingTypes = bookingTypes?.filter(bookingType => bookingType.BookingGuestType);\r\n let defaultValue = bookingTypes?.find(bookingType => bookingType.IsDefault)?.BookingGuestType || BookingGuestType.Others;\r\n let options = [];\r\n if (bookingTypes?.length) {\r\n bookingTypes.forEach(bookingType => {\r\n options.push({ id: bookingType.BookingGuestType, value: bookingType.Name });\r\n })\r\n }\r\n this.bookingTypeList = options;\r\n this.selectedBookingType = this.isEdit ? this.activityService.editData?.BookingTypeInfo?.BookingGuestTypes : defaultValue;\r\n this.confirmationNumber = this.isEdit ? this.activityService.editData?.BookingTypeInfo?.Input : '';\r\n this.bookingTypePlaceholder = this.selectedBookingType === BookingGuestType.HotelGuest ? this.ts.instant ('Confirmation') : this.ts.instant('Membership');\r\n if((BookingGuestType.Others == defaultValue || this.confirmationNumber) && this.bookingTypeList?.length){\r\n this.applyBookingType(true);\r\n }\r\n }\r\n applyBookingType(skipWarnings?: boolean) {\r\n this.activityService.byPassValidation = false;\r\n this.subscriptions.add(this.rs.getBookingTypesDetails(this.route.snapshot.params.restaurantId, this.confirmationNumber || null, this.selectedBookingType, this.selectedActivityData?.SpecialMealId).subscribe(response => {\r\n if (response) {\r\n if (new Date(response.BookingRange.Start).getFullYear() < new Date().getFullYear() || new Date(response.BookingRange.End).getFullYear() < new Date().getFullYear() ) {\r\n if (response.HotelGuestRange) {\r\n this.disableDatePicker = false;\r\n this.bookingTypeMinDate = new Date(response.HotelGuestRange.Start);\r\n this.bookingTypeMaxDate = new Date(response.HotelGuestRange.End);\r\n if (!skipWarnings) this.activityService.openSnackBar(this.ts.instant('memberVerificationMsg'), 'CLOSE', 3000, 'large-size-snack');\r\n } else {\r\n this.disableDatePicker = true;\r\n if (!skipWarnings) this.activityService.openSnackBar(this.ts.instant('memberVerificationMsg'), 'CLOSE', 3000, 'large-size-snack');\r\n }\r\n } else if (response.HotelGuestRange) {\r\n this.setHotelDateRange(response, skipWarnings);\r\n } else {\r\n this.disableDatePicker = false;\r\n this.bookingTypeMinDate = new Date(response.BookingRange.Start);\r\n this.bookingTypeMaxDate = new Date(response.BookingRange.End);\r\n if (!skipWarnings) this.activityService.openSnackBar(this.ts.instant('memberVerificationMsg'), 'CLOSE', 3000, 'large-size-snack');\r\n }\r\n if(!moment(this.currentFromDate).isBetween(this.bookingTypeMinDate , this.bookingTypeMaxDate)){\r\n this.currentFromDate = this.bookingTypeMinDate;\r\n }\r\n this.changeFromDate();\r\n this.checkSessionorSlotAvailability(false , true);\r\n }\r\n }));\r\n }\r\n\r\n setHotelDateRange(response, skipWarnings) {\r\n let bookingStart = new Date(moment(response.BookingRange.Start).format('YYYY-MM-DD') + 'T00:00:00');\r\n let bookingEnd = new Date(moment(response.BookingRange.End).format('YYYY-MM-DD') + 'T00:00:00');\r\n if (Utilities.datetimeBetween(bookingStart, bookingEnd, response.HotelGuestRange.Start) || Utilities.datetimeBetween(bookingStart, bookingEnd, response.HotelGuestRange.End)) {\r\n\r\n this.disableDatePicker = false;\r\n this.bookingTypeMinDate = new Date(response.HotelGuestRange.Start) >= new Date(bookingStart) ? new Date(response.HotelGuestRange.Start) : new Date(bookingStart);\r\n this.bookingTypeMaxDate = new Date(response.HotelGuestRange.End) > new Date(bookingEnd) ? new Date(bookingEnd) : new Date(response.HotelGuestRange.End);\r\n if (!skipWarnings) this.activityService.openSnackBar(this.ts.instant('memberVerificationMsg'), 'CLOSE', 3000, 'large-size-snack');\r\n } else {\r\n this.disableDatePicker = true;\r\n this.activityService.openSnackBar(this.ts.instant('stayDateWarningMessage'), 'CLOSE', 3000, 'large-size-snack');\r\n }\r\n }\r\n\r\n bookingTypeChangeHandler(){\r\n this.selectedBookingType;\r\n this.confirmationNumber = '',\r\n this.disableDatePicker = false;\r\n this.bookingTypePlaceholder = this.selectedBookingType === BookingGuestType.HotelGuest ? this.ts.instant('Confirmation') : this.ts.instant('Membership');\r\n if(this.selectedBookingType === BookingGuestType.Others){\r\n this.applyBookingType();\r\n }\r\n }\r\n setActivityData(data) {\r\n this.activityService.selectedActivities = data;\r\n this.activityService.isDining = false;\r\n this.activityService.isNonDining = false;\r\n this.activityService.LocationList = data.venueLevelLocation;\r\n this.activityService.InstructorList = data.venueLevelInstructors;\r\n this.activityService.AllocationTypes = data.venueLevelAllocationMappings;\r\n this.activityService.restaurantWidgetId = data.restaurantWidgetId;\r\n }\r\n\r\n checkDataPresent(retainSessionValue = true) {\r\n if (!this.activityService.isDining && !this.activityService.isNonDining) {\r\n if (Object.keys(this.activityService?.selectedActivities)?.length !== 0 || this.activityService.fromConfirmation) {\r\n this.classDetail = this.activityService.selectedActivities;\r\n if (this.classDetail) {\r\n this.activityService.selectedSpecialMeal = this.classDetail;\r\n this.selectedActivityData = this.classDetail;\r\n }\r\n this.selectedClassActivity(this.selectedActivityData);\r\n } else if(this.route.snapshot.queryParams.specialMealId){\r\n this.activityService.navigateToUrl(`list` ,null, \"/\" + this.route.snapshot.queryParams.specialMealId );\r\n }\r\n else{\r\n let propertyId = this.route.snapshot.params.restaurantId;\r\n const isSessionComponentReload = sessionStorage.getItem('isSessionComponentReload');\r\n sessionStorage.removeItem('isSessionComponentReload');\r\n this.activityService.navigateToUrl(`list`, isSessionComponentReload !== 'true' ? { propertyId } : null);\r\n }\r\n } else if (this.activityService.isDining) {\r\n if (Object.keys(this.activityService?.selectedDining)?.length !== 0 || this.activityService.fromConfirmation) {\r\n this.isTimeDropList = this.activityService.selectedDining.WidgetCustomization?.TimeSlotType == \"DropDown\" ? true : false;\r\n this.initializeData(this.activityService?.selectedDining);\r\n // Filter special Meals based on available date and current date\r\n this.availableSpecialMeals = _.sortBy(this.activityService.selectedDining?.AvailableSpecialMeals.filter(meal => {\r\n if (!this.isEdit && meal.StartDate && meal.EndDate) {\r\n let nexAvailableMealDate = this.findNextAvailableDate(meal, this.activityService.dateFilterStartDate);\r\n return (nexAvailableMealDate >= new Date(meal.StartDate) && nexAvailableMealDate <= new Date(meal.EndDate)) || (nexAvailableMealDate <= new Date(meal.StartDate) && nexAvailableMealDate <= new Date(meal.EndDate))\r\n } else if (this.isEdit && this.activityService.editData?.SpecialMealId) {\r\n return meal.Id === this.activityService.editData?.SpecialMealId;\r\n } else {\r\n return meal;\r\n }\r\n }), \"SortOrder\");\r\n if (this.activityService.selectedDiningSpecialMeal?.Id || this.activityService.editData) {\r\n let mealSelected = this.activityService.selectedDiningSpecialMeal || this.activityService.editData.SpecialMeal;\r\n this.activityService.mealWithConfig = this.availableSpecialMeals.find(meal => meal.Id == mealSelected?.Id && !this.activityService.selectedDiningSpecialMeal?.ShowOtherActivities)\r\n if(this.activityService.mealWithConfig){\r\n this.availableSpecialMeals = [this.activityService.mealWithConfig];\r\n this.activityService.loadConfigBasedStyles(this.activityService.mealWithConfig);\r\n }\r\n }\r\n this.addAnySeatingOptionInMasterList();\r\n this.seatingAreaSeatingTypeMappings = (this.activityService?.selectedDining?.SeatingAreaSeatingTypeMappings && this.activityService?.selectedDining.SeatingAreaSeatingTypeMappings.length > 0) ? this.activityService.selectedDining.SeatingAreaSeatingTypeMappings : [];\r\n this.classDetail = this.findDiningSpecialMeal();\r\n this.activityService.selectedSpecialMeal = this.classDetail;\r\n this.selectedActivityData = this.classDetail;\r\n this.TimeSlotUnitInMinutes = this.activityService.selectedDining.TimeSlotUnitInMinutes;\r\n if (this.classDetail && this.availableSpecialMeals.length > 0 && this.showSpecialEvent) {\r\n this.availableSpecialMeals.forEach(x => { x.isSelected = false; });\r\n this.availableSpecialMeals[0].isSelected = true;\r\n this.selectedSpecialMeal(this.selectedActivityData, true, retainSessionValue);\r\n } else {\r\n this.showSpecialEvent = false;\r\n this.normalTableReservation(retainSessionValue, this.activityService.selectedDining?.MaxPartySize);\r\n }\r\n } else {\r\n let propertyId = this.route.snapshot.params.restaurantId;\r\n this.activityService.navigateToUrl(`list`, { propertyId });\r\n }\r\n } else {\r\n // Non Dining code\r\n this.bShowLocation = true;\r\n if (Object.keys(this.activityService?.selectedNonDining)?.length !== 0 || this.activityService.fromConfirmation) {\r\n this.isTimeDropList = this.activityService.selectedNonDining.WidgetCustomization?.TimeSlotType == \"DropDown\" ? true : false;\r\n this.initializeData(this.activityService?.selectedNonDining);\r\n\r\n this.seatingAreaSeatingTypeMappings = (this.activityService?.selectedNonDining?.SeatingAreaSeatingTypeMappings && this.activityService?.selectedNonDining.SeatingAreaSeatingTypeMappings.length > 0) ? this.activityService.selectedNonDining.SeatingAreaSeatingTypeMappings : [];\r\n this.selectedActivityData = this.classDetail;\r\n this.normalTableReservation(retainSessionValue, this.activityService.selectedNonDining?.MaxPartySize);\r\n this.TimeSlotUnitInMinutes = this.activityService.selectedNonDining.TimeSlotUnitInMinutes;\r\n this.durationControl.setValue(this.TimeSlotUnitInMinutes);\r\n this.filteredDurationOptions = this.durationControl.valueChanges.pipe(\r\n startWith(''),\r\n map(value => {\r\n return value ? this._filter(value as string) : this.durationList.slice();\r\n }),\r\n );\r\n this.setGuestAndCoverTypes(this.activityService?.selectedNonDining, retainSessionValue);\r\n this.generateDurationList();\r\n } else {\r\n let propertyId = this.route.snapshot.params.restaurantId;\r\n this.activityService.navigateToUrl(`list`, { propertyId });\r\n }\r\n }\r\n }\r\n\r\n\r\n findDiningSpecialMeal() {\r\n if (this.isEdit && !this.activityService?.editData?.SpecialMealId) {\r\n return null;\r\n } else {\r\n if ((this.isEdit && this.activityService?.editData?.SpecialMealId) || this.activityService.sessionFilterValue?.selectedSpecialMealId) {\r\n return this.isEdit && this.activityService?.editData.SpecialMealId ? this.availableSpecialMeals.find(specialMeal =>\r\n specialMeal.Id === this.activityService?.editData.SpecialMealId) : this.availableSpecialMeals.find(specialMeal =>\r\n specialMeal.Id === this.activityService.sessionFilterValue?.selectedSpecialMealId);\r\n } else {\r\n return this.activityService.selectedDiningSpecialMeal || this.availableSpecialMeals[0];\r\n }\r\n }\r\n }\r\n\r\n // Initialize Dining/Non-Dining Data\r\n initializeData(selectedData: any) {\r\n this.currentFromDate = this.activityService.chosenStartDate ? this.activityService.chosenStartDate : this.activityService.dateFilterStartDate;\r\n this.currentToDate = this.activityService.dateFilterEndDate;\r\n this.seatingAreaMasterList = selectedData?.SeatingAreaList;\r\n this.seatingTypesMasterList = (selectedData?.SeatingTypeList && selectedData?.SeatingTypeList.length > 0) ? selectedData.SeatingTypeList.map(type => {\r\n type.typeColor = 'rgba(' + type.Color.R + ',' + type.Color.G + ',' + type.Color.B + ',' + type.Color.A + ')'\r\n return type;\r\n }) : [];\r\n this.daysForReservation = selectedData.DaysForReservation;\r\n let restaurant = selectedData;\r\n this.openHourDays = (restaurant.OpenHourDays && restaurant.OpenHourDays.length > 0) ? restaurant.OpenHourDays : [];\r\n this.CustomOpenHours = (restaurant.CustomOpenHours && restaurant.CustomOpenHours.length > 0) ? restaurant.CustomOpenHours : [];\r\n\r\n if(!this.openHourDays?.length && this.CustomOpenHours?.some(custDay => !custDay.Closed)){\r\n // this.openHourDays = this.CustomOpenHours.map(customDay => new Date(customDay.Date).getDay());\r\n let minDate = null;\r\n let maxDate = null;\r\n this.CustomOpenHours.forEach(customDay => {\r\n if(!customDay.Closed && (new Date(customDay.Date) > maxDate || !maxDate)){\r\n maxDate = new Date(customDay.Date);\r\n }\r\n if(!customDay.Closed && (new Date(customDay.Date) <= minDate || !minDate)){\r\n minDate = new Date(customDay.Date);\r\n }\r\n // this.openHourDays.push(new Date(customDay.Date).getDay());\r\n })\r\n if(maxDate){\r\n this.propertyMaxDateAllowed = new Date(maxDate);\r\n this.diningMaxDate = new Date(maxDate);\r\n }\r\n if(minDate){\r\n this.activityService.currentDateTime = minDate;\r\n }\r\n }\r\n this.setNoteType();\r\n this.notesOptions = this.addCategoryPreferencesNotes(this.noteType, this.notesOptions);\r\n }\r\n\r\n specialMealReservation() {\r\n this.resetReservationDetails(true);\r\n this.checkDataPresent(false);\r\n this.setBookingType();\r\n }\r\n\r\n normalTableReservation(retainSessionValue = true, MaxPartySize: Number) {\r\n this.activityService.isSpecialMeal = false;\r\n this.activityService.isTableReservation = this.activityService.isDining ? true : false;\r\n this.activityService.selectedSpecialMeal = null;\r\n if(this.activityService.isDining)\r\n {\r\n this.getCoverTypesReservation();\r\n }\r\n this.generatePartySize({ MinPartySize: 1, MaxPartySize });\r\n this.resetReservationDetails(false);\r\n this.setAvailableDate(null);\r\n this.setAvailableSeatings(null);\r\n if (this.activityService.isDining) {\r\n this.checkSessionorSlotAvailability(true, false, retainSessionValue);\r\n this.setBookingType();\r\n }\r\n }\r\n\r\n resetReservationDetails(isSpecialMeal) {\r\n this.showSpecialEvent = isSpecialMeal;\r\n if(this.coverTypes.length > 0) {\r\n this.coverTypes = this.coverTypes.map(x => { return { id: x.Id, name: x.Name, value: 0, price: x?.Price } });\r\n this.coverTypes[0].value = this.minSizeAllowed;\r\n }\r\n this.selectedDiningSlots = [];\r\n this.selectedActivityData = 0;\r\n this.currentBookingSize = 1;\r\n if (!this.isTimeDropList) {\r\n this.checkedDiningLocalTime = '';\r\n this.checkedItem = false;\r\n }\r\n this.selectedSeatingArea = 0;\r\n }\r\n\r\n addAnySeatingOptionInMasterList() {\r\n (this.seatingAreaMasterList.findIndex(area => (area.Id === 0 || area.Id === null)) > -1) || this.seatingAreaMasterList.splice(0, 0, { Id: 0, Name: this.ts.instant('AnySeatingArea') });\r\n (this.seatingTypesMasterList.findIndex(type => (type.Id === 0 || type.Id === null)) > -1) || this.seatingTypesMasterList.splice(0, 0, { Id: 0, Description: this.ts.instant('AnySeatingType') });\r\n }\r\n\r\n changeFromDate() {\r\n this.activityService.chosenStartDate = new Date(this.currentFromDate);\r\n this.activityService.chosenStartDate.setHours(0,0,0);\r\n this.showAvailableDates = true;\r\n if (this.activityService.isNonDining) {\r\n this.bIsSlotReloadRequired = true;\r\n if (this.activityService.operation === operationType.edit) this.updateNonDiningSlotTime();\r\n } else if (this.activityService.isDining) {\r\n this.diningSlotChangeListners('');\r\n }\r\n if (!this.isMultiSlotSelection || this.currentFromDate > this.currentToDate) {\r\n this.currentToDate = this.currentFromDate;\r\n }\r\n }\r\n checkSessionorSlotAvailability(isIntial = false, filterChanges = false, retainSessionValue = true) {\r\n // this.setBookingData();\r\n if(!this.currentBookingSize){\r\n this.currentBookingSize = this.getCoverTypesize();\r\n }\r\n if (this.activityService.sessionFilterValue && Object.keys(this.activityService.sessionFilterValue)?.length !== 0 && isIntial && retainSessionValue) {\r\n this.coverTypes = this.activityService.sessionFilterValue.coverTypes;\r\n this.bookingTypes = this.activityService.sessionFilterValue.bookingTypes;\r\n this.currentFromDate = new Date(this.activityService.sessionFilterValue.currentFromDate) || \"\";\r\n this.currentToDate = new Date(this.activityService.sessionFilterValue.currentToDate) || \"\";\r\n this.currentBookingSize = this.activityService.sessionFilterValue.currentBookingSize;\r\n this.sessionSlotsAvailableDates = this.activityService.sessionFilterValue.sessionSlotsAvailableDates;\r\n this.notesOptions = this.activityService.sessionFilterValue.notes;\r\n this.selectedSeatingArea = this.activityService.sessionFilterValue.selectedSeatingArea || 0;\r\n this.selectedSeatingType = this.activityService.sessionFilterValue.selectedSeatingType || 0;\r\n this.checkedDiningLocalTime = this.activityService.sessionFilterValue.checkedDiningLocalTime;\r\n this.marketingFlag = this.activityService.sessionFilterValue.marketingFlag;\r\n this.promoCodeDetail = this.activityService.sessionFilterValue.promoCodeDetail;\r\n } else if (this.activityService.fromConfirmation && isIntial && retainSessionValue) {\r\n this.coverTypes = this.activityService?.editData?.Covers?.filter(cover => cover.CoverTypeId)?.length > 0 ? _.uniqBy(this.activityService?.editData?.Covers?.map(cover => { return { id: cover.CoverTypeId, name: cover.CoverTypeName, value: cover.Covers } }), 'id') : [];\r\n this.bookingTypes = this.activityService?.editData?.Covers?.filter(cover => cover.BookingTypeId)?.length > 0 ? _.uniqBy(this.activityService?.editData?.Covers?.map(cover => { return { id: cover.BookingTypeId, name: cover.BooKingTypeName, value: 0 } }), 'id') : this.activityService?.editData?.BookingTypes || [];\r\n this.currentFromDate = this.activityService.isDining ? new Date(this.activityService?.editData?.ReservedFor) : new Date(this.activityService?.editData?.StartDate) || \"\";\r\n this.currentToDate = this.activityService.isDining ? new Date(this.activityService?.editData?.ReservedFor) : new Date(this.activityService?.editData?.EndDate) || \"\";\r\n this.currentBookingSize = this.activityService?.editData?.Size;\r\n this.checkedDiningLocalTime = this.activityService?.editData?.ReservedFor;\r\n this.selectedSeatingArea = this.activityService?.editData?.SeatingAreaId || 0;\r\n this.selectedSeatingType = this.activityService?.editData?.SeatingTypeId || 0;\r\n this.isCommunalTable = this.activityService?.editData?.IsCommunalTable;\r\n this.marketingFlag = this.activityService?.editData?.Contact?.MarketingOptedIn;\r\n this.currentInstructors = this.activityService.editData?.StaffIds.length ? this.activityService.editData?.StaffIds[0] : null;\r\n if(!this.selectedActivityData)\r\n this.selectedActivityData = {};\r\n this.selectedActivityData.CoverTypeQuantities = this.activityService?.editData?.CoverTypeQuantities;\r\n this.sessionSlotsAvailableDates = [];\r\n if(this.activityService.isDining) {\r\n this.getFormattedBookingTypeValues();\r\n this.getFormattedCoverTypeValues();\r\n }\r\n }\r\n this.isValidFormValues();\r\n this.getavailableSlots(\r\n this.currentInstructors,\r\n this.currentLocations,\r\n this.currentFromDate,\r\n this.currentToDate,\r\n this.overAllBookingSize,\r\n isIntial,\r\n filterChanges\r\n );\r\n }\r\n\r\n spliceTimeArrayForTheSelectedMealTab(chip: MatChip, selectedMealTab) {\r\n this.activityService?.selectedDining?.MealTabs.forEach(tab => { if (selectedMealTab.Id === tab.Id) { tab.selected = !tab.selected } else { tab.selected = false } });\r\n chip.toggleSelected();\r\n let requiredTimeArray = [];\r\n if (selectedMealTab && selectedMealTab.selected) {\r\n let startHours = selectedMealTab.StartTime.split(':')[0];\r\n let startMins = selectedMealTab.StartTime.split(':')[1];\r\n let endHours = selectedMealTab.EndTime.split(':')[0];\r\n let endMins = selectedMealTab.EndTime.split(':')[1];\r\n let selectedDate = moment(this.currentFromDate).format('YYYY-MM-DD');\r\n let startTime = moment(selectedDate).clone().add(startHours, 'hours').add(startMins, 'minutes').format(\"YYYY-MM-DDTHH:mm:ss\");\r\n let endTime = moment(selectedDate).clone().add(endHours, 'hours').add(endMins, 'minutes').format(\"YYYY-MM-DDTHH:mm:ss\");\r\n if (moment(startTime) > moment(endTime)) {\r\n endTime = moment(endTime).add(1, 'day').format(\"YYYY-MM-DDTHH:mm:ss\");\r\n }\r\n if (this.originalTimeSlotList.length > 0) {\r\n this.originalTimeSlotList.forEach(time => {\r\n if (Utilities.datetimeBetween(new Date(startTime), new Date(endTime), new Date(time))) {\r\n requiredTimeArray.push(time);\r\n }\r\n })\r\n }\r\n this.selectedDiningSlots = requiredTimeArray;\r\n } else {\r\n this.selectedDiningSlots = this.originalTimeSlotList;\r\n }\r\n if (this.isTimeDropList) {\r\n this.checkedItem = true;\r\n this.checkedDiningLocalTime = this.selectedDiningSlots[0];\r\n }\r\n }\r\n\r\n showOtherDaysAvailable() {\r\n\r\n let MaxAlternateDays = this.activityService.selectedDining.MaxAlternateDays;\r\n let MaxDate = this.diningMaxDate;\r\n if (this.activityService.isNonDining) {\r\n MaxAlternateDays = this.activityService.selectedNonDining.MaxAlternateDays;\r\n MaxDate = this.nonDiningMaxDate;\r\n }\r\n\r\n if(this.bookingTypeMaxDate && moment(this.bookingTypeMaxDate).diff(new Date(MaxDate), 'days') < 0) {\r\n MaxDate = new Date(this.bookingTypeMaxDate);\r\n MaxDate.setDate(this.bookingTypeMaxDate.getDate() - 1);\r\n }\r\n\r\n this.otherAvailableDays = [];\r\n let tempDate = new Date(this.currentFromDate);\r\n for (let i = 1; i <= MaxAlternateDays; i++) {\r\n let curDate = tempDate;\r\n const isInitial = i === 1 ? true : false;\r\n if (curDate < new Date(MaxDate)) {\r\n if (isInitial) {\r\n this.otherAvailableDays.push({ Id: i, value: new Date(tempDate).toISOString(), isSelected: false });\r\n }\r\n curDate = this.findNextAvailableDate(this.selectedActivityData, curDate, true, true, isInitial);\r\n if (curDate && curDate < new Date(MaxDate) && this.openHourDays.includes(curDate.getDay())) {\r\n tempDate = new Date(curDate);\r\n const existingDateObj = this.otherAvailableDays.find(dayObj => dayObj.value === tempDate.toISOString());\r\n if (!existingDateObj || !Object.keys(existingDateObj)?.length) {\r\n this.otherAvailableDays.push({ Id: i, value: tempDate.toISOString(), isSelected: false, date: tempDate })\r\n }\r\n }\r\n }\r\n }\r\n\r\n let customDates = this.getCustomAvailableDays(this.openHourDays?.length ? this.otherAvailableDays.length : this.otherAvailableDays.length + 1);\r\n\r\n let quickAvaialbleDays = sortByDate(_.uniqBy([...this.otherAvailableDays, ...customDates], \"value\"));\r\n\r\n this.otherAvailableDays = quickAvaialbleDays.slice(0, MaxAlternateDays + 1);\r\n }\r\n\r\n getCustomAvailableDays(startId){\r\n let availableDays = [];\r\n this.CustomOpenHours.forEach((customDay, index) => {\r\n let tempDate = new Date(customDay.Date);\r\n if(!customDay.Closed && tempDate > this.currentFromDate){\r\n availableDays.push({ Id: startId + index, value: tempDate.toISOString(), isSelected: false, date: tempDate })\r\n }\r\n })\r\n\r\n return availableDays;\r\n }\r\n\r\n //Highlight date based on selection\r\n checkIfDateSelected(otherDate) {\r\n let isSelected = false;\r\n if (new Date(this.currentFromDate).toISOString() === otherDate) {\r\n isSelected = true;\r\n }\r\n return isSelected;\r\n }\r\n\r\n addDays(date, days, count) {\r\n var result = new Date(date);\r\n let dateTemp = new Date(date);\r\n dateTemp.setDate(dateTemp.getDate() + count);\r\n\r\n\r\n if (this.selectedActivityData?.FrequencyTypeIds?.includes(dateTemp.getDay())) {\r\n } else {\r\n result = new Date(this.findNextAvailableDate(this.selectedActivityData, dateTemp, true, true));\r\n }\r\n\r\n var daysDiff = moment(moment(result).format('YYYY-MM-DD')).diff(moment(this.diningMaxDate).format('YYYY-MM-DD'), 'days')\r\n return daysDiff <= 0 ? result : null;\r\n }\r\n\r\n chooseAvailableDate(selectedDay) {\r\n this.currentFromDate = new Date(selectedDay.value);\r\n this.activityService.chosenStartDate = this.currentFromDate;\r\n if (this.activityService.isDining) {\r\n this.checkSessionorSlotAvailability(false, true);\r\n this.diningSlotChangeListners('');\r\n }\r\n else if (this.activityService.isNonDining) this.checkNonDiningSessionorSlotAvailability(false, true);\r\n }\r\n\r\n getavailableSlots(instructors, location, fromDate, toDate, bookingSize, isInitial = false, filterChanges = false) {\r\n this.sessionSlotsAvailableDates = [];\r\n this.classLessonList = [];\r\n this.availableSessions = [];\r\n this.selectedIndex = 0;\r\n const requestedObject = {\r\n ActivityId: +this.selectedActivityData?.SpecialMealId || null,\r\n // AvailabilityCriteria: this.getAvailabilityCriteria([location], [instructors]), // Uncomment this if filters are added\r\n AvailabilityCriteria: 0,\r\n StartDate: moment(fromDate).format('YYYY-MM-DD'),\r\n EndDate: moment(toDate).format('YYYY-MM-DD'),\r\n // PreferredLocationId: [location], // Uncomment this if filters are added\r\n // PreferredStaffId: [instructors], // Uncomment this if filters are added\r\n PreferredLocationId: [],\r\n PreferredStaffId: [],\r\n BookingSize: bookingSize,\r\n ClassType: this.selectedActivityData?.ClassType || null,\r\n reservationIdToIgnore: this.activityService?.editData?.Id || null\r\n } as ActivitySlotRequestDTO;\r\n\r\n if (this.activityService.isDining) { // For restaurants call Dining\r\n this.getSlotsForDining(requestedObject, isInitial);\r\n } else if (this.activityService.isNonDining) {\r\n this.getSlotInitial = true;\r\n this.getSlotsForNonDining(requestedObject, isInitial);\r\n } else {\r\n this.getSlotInitial = true;\r\n this.getSlotsForClass(requestedObject, isInitial, filterChanges);\r\n }\r\n }\r\n\r\n getAvailabilityCriteria(locations, instructors) {\r\n if (!locations?.length && !instructors?.length) {\r\n return AvailabilityCriteria.None;\r\n } else if (locations?.length && !instructors?.length) {\r\n return AvailabilityCriteria.IncludeLocation;\r\n } else if (!locations?.length && instructors?.length) {\r\n return AvailabilityCriteria.IncludeInstructor;\r\n } else {\r\n return AvailabilityCriteria.IncludeLocationAndInstructor;\r\n }\r\n }\r\n\r\n setNoteType() {\r\n this.noteType = (!this.activityService.isDining && !this.activityService.isNonDining) ?\r\n this.selectedActivityData?.NotesType :\r\n (this.activityService.isNonDining ? this.activityService?.selectedNonDining?.WidgetCustomization?.NotesType\r\n : this.activityService?.selectedDining?.WidgetCustomization?.NotesType);\r\n }\r\n\r\n selectedClassActivity(data) {\r\n this.selectedActivityData = data;\r\n this.setNoteType();\r\n this.isSessionClass = this.selectedActivityData?.ClassType === ClassType.Session;\r\n if (data?.CoverTypePrices?.length > 0) {\r\n let minimumQuantity = data.CoverTypePrices?.filter(type => type.MinimumQuantity == 0);\r\n if (minimumQuantity?.length && minimumQuantity?.length == data?.CoverTypePrices?.length) {\r\n this.minSizeAllowed = data.MinPartySize;\r\n } else {\r\n let minSize = data.CoverTypePrices?.filter(type => type.MinimumQuantity > 0);\r\n this.minSizeAllowed = minSize[0].MinimumQuantity;\r\n }\r\n } else {\r\n this.minSizeAllowed = data.MinPartySize;\r\n }\r\n this.coverTypes = data?.CoverTypePrices?.map(type => {\r\n return {\r\n id: type.Id,\r\n name: type.CoverTypeName,\r\n value: type.MinimumQuantity > 0 ? type.MinimumQuantity : 0,\r\n };\r\n });\r\n let minimumQuantity = this.coverTypes.filter(type => type.MinimumQuantity == 0);\r\n if (minimumQuantity?.length && minimumQuantity.length == data?.CoverTypePrices?.length) {\r\n minimumQuantity[0].value = this.minSizeAllowed;\r\n }\r\n this.activityHeadlines = data.ActivityAttributes;\r\n this.bookingTypes = data?.BookingTypeActivitiesMappings?.map(type => {\r\n return {\r\n id: type.Id,\r\n name: type.Name,\r\n value: 0\r\n };\r\n });\r\n\r\n this.calculatePartySize();\r\n\r\n this.instructorList = this.getInstructor(data.StaffValues);\r\n this.locationList = this.getLocations(data.LocationId);\r\n this.isMultiSlotSelection = data.EnableMultiSlotSelection;\r\n this.venueAllocationMappings = data.AllocationTypes;\r\n this.showSessionorSlots = false;\r\n this.selectedClassSchedule = [];\r\n this.sessionSlotsAvailableDates = [];\r\n this.setInitialData();\r\n }\r\n\r\n setInitialData() {\r\n this.currentInstructors = null;\r\n this.currentLocations = null;;\r\n this.currentFromDate = this.activityService.dateFilterStartDate; // this.selectedActivityData.StartDate;\r\n this.currentToDate = this.activityService.dateFilterEndDate; // this.selectedActivityData.EndDate;\r\n this.overAllBookingSize = this.minSizeAllowed;\r\n if (this.bookingTypes?.length) {\r\n this.bookingTypes[0].value = this.minSizeAllowed;\r\n }\r\n if (this.coverTypes?.length) {\r\n let minimumQuantity = this.coverTypes?.filter(covers => covers.value === 0);\r\n if (minimumQuantity.length === this.coverTypes.length) {\r\n this.coverTypes[0].value = this.minSizeAllowed;\r\n }\r\n }\r\n if (!this.coverTypes?.length && !this.bookingTypes?.length) {\r\n this.currentBookingSize = this.minSizeAllowed;\r\n }\r\n this.notesOptions = this.addCategoryPreferencesNotes(this.noteType, this.notesOptions);\r\n console.log(this.currentInstructors, this.currentLocations);\r\n this.checkSessionorSlotAvailability(true);\r\n }\r\n\r\n selectedSpecialMeal(meal, isInitial = false, retainSessionValue = true , manualSelect?: boolean) {\r\n this.selectedActivityData = meal;\r\n this.activityService.selectedSpecialMeal = meal;\r\n if (!this.isTimeDropList) {\r\n this.checkedDiningLocalTime = '';\r\n this.checkedItem = false;\r\n }\r\n this.activityService.isSpecialMeal = true;\r\n this.activityService.isTableReservation = false;\r\n this.coverTypes = [];\r\n this.setAvailableSeatings(meal);\r\n this.setAvailableDate(meal);\r\n this.generatePartySize(meal);\r\n this.generateCoverType(meal);\r\n this.checkSessionorSlotAvailability(isInitial, false, retainSessionValue);\r\n if(manualSelect) this.setBookingType();\r\n }\r\n\r\n setAvailableSeatings(specialMeal: any) {\r\n if (specialMeal && specialMeal.SeatingAreaId && specialMeal.SeatingAreaId > 0) {\r\n this.selectedSeatingArea = specialMeal.SeatingAreaId;\r\n this.seatingArea = this.seatingAreaMasterList.filter(x => x.Id == specialMeal.SeatingAreaId).map(x => { return { id: x.Id, value: x.Name } });\r\n } else {\r\n this.seatingArea = this.seatingAreaMasterList.map(x => { return { id: x.Id, value: x.Name } });\r\n }\r\n if (this.seatingArea?.length) {\r\n this.loadSeatingTypes((this.activityService.isNonDining && this.isEdit) ? this.activityService?.editData.SeatingAreaId : null);\r\n }\r\n }\r\n\r\n loadSeatingTypes(seatingAreaId: number) {\r\n let MappedSeatingTypes = [];\r\n MappedSeatingTypes = this.seatingAreaSeatingTypeMappings.filter(t => t.SeatingAreaId == seatingAreaId || seatingAreaId == 0 || seatingAreaId == null).map(x => { return x.SeatingTypeId });\r\n this.seatingType = MappedSeatingTypes.length > 0 ? this.seatingTypesMasterList.filter(x => MappedSeatingTypes.indexOf(x.Id) > -1 || x.Id == 0 || x.Id === null).map(x => { return { id: x.Id, value: x.Description, color: 'rgba(' + x.Color?.R + ',' + x.Color?.G + ',' + x.Color?.B + ',' + x.Color?.A + ')' } }) : [{ id: 0, value: this.ts.instant('AnySeatingType') }];\r\n this.seatingType?.forEach(seatingType => {\r\n this.seatingTypeNames[seatingType.id] = seatingType.value;\r\n });\r\n }\r\n\r\n setAvailableDate(specialMeal) {\r\n let selectedDate = moment(specialMeal?.StartDate).isSameOrBefore(this.activityService.dateFilterStartDate) ? this.activityService.dateFilterStartDate : specialMeal?.StartDate; \r\n this.currentFromDate = this.findNextAvailableDate(specialMeal, this.activityService.chosenStartDate ? this.activityService.chosenStartDate : (selectedDate || this.activityService.dateFilterStartDate));\r\n if(this.currentFromDate && this.currentFromDate == 'Invalid Date') { // Condition added for invalid date issue #39356\r\n this.currentFromDate = selectedDate || this.activityService.dateFilterStartDate;\r\n }\r\n if (specialMeal && specialMeal.StartDate && specialMeal.EndDate) {\r\n if (new Date(specialMeal.StartDate).setHours(0, 0, 0, 0) > new Date(new Date(this.currentFromDate).setDate(new Date(this.currentFromDate).getDate() + this.daysForReservation - 1)).setHours(0, 0, 0, 0)) {\r\n this.activityService.\r\n openSnackBar(this.ts.instant('BookingYetToOpenMsg'), this.ts.instant('close'), this.activityService.ConfigSettings.snackBarTime);\r\n return;\r\n }\r\n if (new Date(specialMeal.EndDate).setHours(0, 0, 0, 0) > new Date(new Date(this.currentFromDate).setDate(new Date(this.currentFromDate).getDate() + this.daysForReservation - 1)).setHours(0, 0, 0, 0)) {\r\n this.diningMaxDate = new Date(new Date(this.currentFromDate).setDate(new Date(this.currentFromDate).getDate() + this.daysForReservation - 1));\r\n }\r\n else {\r\n this.diningMaxDate = new Date(specialMeal.EndDate);\r\n }\r\n }\r\n else {\r\n this.diningMaxDate = new Date(new Date().setDate(new Date().getDate() + this.daysForReservation - 1));\r\n if(this.CustomOpenHours?.length == 0 && this.openHourDays?.length == 0)\r\n this.diningMaxDate = new Date();\r\n }\r\n this.diningMaxDate = new Date(new Date(this.diningMaxDate).setHours(0, 0, 0, 0));\r\n if(this.propertyMaxDateAllowed < this.diningMaxDate){\r\n this.diningMaxDate = new Date(this.propertyMaxDateAllowed);\r\n }\r\n this.showNextArrow = new Date(this.diningMaxDate) > new Date(this.findNextAvailableDate(specialMeal, this.currentFromDate, true, true));\r\n this.showParticularDays = this.EnableAndDisableDates(specialMeal);\r\n // this.activityService.currentDateTime = new Date(this.currentFromDate);\r\n this.SetInitialDate((this.activityService.chosenStartDate && this.activityService.chosenStartDate.toString() != 'Invalid Date') ? this.activityService.chosenStartDate : this.currentFromDate);\r\n\r\n if (this.activityService.isNonDining) {\r\n this.nonDiningMaxDate = this.diningMaxDate;\r\n this.diningMaxDate = null;\r\n }\r\n }\r\n\r\n SetInitialDate(date: Date) {\r\n let IsHoliday = false;\r\n IsHoliday = this.IsHoliday(date)\r\n let currentDateTime = this.activityService.currentDateTime;\r\n currentDateTime.setHours(0,0,0,0);\r\n if (IsHoliday || date < currentDateTime) {\r\n date.setDate(date.getDate() + 1);\r\n this.SetInitialDate(date);\r\n }\r\n else {\r\n this.currentFromDate = date;\r\n }\r\n }\r\n\r\n IsHoliday(date: Date) {\r\n let isHoliday = false;\r\n isHoliday = this.IsCustomDay(date) ? this.IsCustomHoliday(date) : this.openHourDays?.length ? !this.openHourDays.includes(date.getDay()) : false;\r\n return isHoliday;\r\n }\r\n\r\n IsCustomDay(date: Date) {\r\n for (let holiday of this.CustomOpenHours) {\r\n let date1 = moment(holiday.Date).format('LL');\r\n let date2 = moment(date).format('LL');\r\n if (date1 == date2) {\r\n return true;\r\n };\r\n }\r\n return false;\r\n }\r\n\r\n EnableAndDisableDates(specialMeal) {\r\n if ((specialMeal?.FrequencyTypeIds && specialMeal?.FrequencyTypeIds != null) || (this.openHourDays && this.openHourDays.length > 0)) {\r\n if (specialMeal?.FrequencyTypeIds != null && this.openHourDays.length > 0) {\r\n let mergedArray = [];\r\n specialMeal?.FrequencyTypeIds.every(a => this.openHourDays.includes(a) ? mergedArray.push(a) : '');\r\n return this.setFrequencyDate(mergedArray);\r\n }\r\n else if (specialMeal?.FrequencyTypeIds != null && this.openHourDays.length <= 0) {\r\n return this.setFrequencyDate(specialMeal?.FrequencyTypeIds);\r\n }\r\n else {\r\n return this.setFrequencyDate(this.openHourDays);\r\n }\r\n }\r\n else {\r\n return this.setFrequencyDate([])\r\n }\r\n }\r\n\r\n\r\n // To get Available date based on FrequencyTypeIds [0,1,2,3,4,5,6]\r\n findNextAvailableDate(specialMeal, date, isNext = true, fromAvailableDates = false, isInitial = false) {\r\n let daysNumList = specialMeal?.FrequencyTypeIds || this.openHourDays || [0, 1, 2, 3, 4, 5, 6];\r\n daysNumList = daysNumList.sort((a, b) => { return a - b; });\r\n let dayNum = new Date(date).getDay() || 0;\r\n let tempDate = new Date(date);\r\n let finalDate = null;\r\n\r\n if (daysNumList.length > 0 && !daysNumList.includes(dayNum) || fromAvailableDates) {\r\n if (isNext) {\r\n const startCount = dayNum === 6 ? 0 : dayNum;\r\n for (let count = dayNum; count < dayNum + 7; count++) {\r\n tempDate.setDate(tempDate.getDate() + 1);\r\n if (daysNumList.includes(new Date(tempDate).getDay()) && !finalDate) {\r\n finalDate = new Date(new Date(tempDate).setHours(0, 0, 0, 0));\r\n }\r\n }\r\n } else {\r\n for (let count = dayNum; count < dayNum + 7; count++) {\r\n tempDate.setDate(tempDate.getDate() - 1);\r\n if (daysNumList.includes(new Date(tempDate).getDay()) && !finalDate) {\r\n finalDate = new Date(new Date(tempDate).setHours(0, 0, 0, 0));\r\n }\r\n }\r\n }\r\n }\r\n return finalDate ? finalDate : (fromAvailableDates && !isInitial) ? null : tempDate;\r\n }\r\n\r\n setFrequencyDate(days) {\r\n let frequencyDate = (d: Date): boolean => {\r\n if (d !== null) {\r\n const date = (new Date(d) || new Date());\r\n const dayDate = date.getDate();\r\n const day = date.getDay();\r\n let enableDate = days.includes(day);\r\n if (this.CustomOpenHours.length > 0 && this.IsCustomDay(date)) {\r\n let IsHoliday = this.IsHoliday(date);\r\n enableDate = !IsHoliday;\r\n }\r\n return enableDate;\r\n } else {\r\n return false;\r\n }\r\n }\r\n return frequencyDate;\r\n }\r\n\r\n IsCustomHoliday(date: Date) {\r\n if (this.CustomOpenHours?.length) {\r\n for (let holiday of this.CustomOpenHours) {\r\n let date1 = moment(holiday.Date).format('LL');\r\n let date2 = moment(date).format('LL');\r\n if (date1 == date2) {\r\n return holiday.Closed;\r\n };\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n generatePartySize(specialMeal) {\r\n this.bookingSizeArray = [];\r\n this.overAllBookingSize = this.minSizeAllowed = specialMeal ? specialMeal.MinPartySize : 1;\r\n this.maxSizeAllowed = specialMeal ? specialMeal.MaxPartySize : 10;\r\n for (let index = 1; index <= this.maxSizeAllowed; index++) {\r\n this.bookingSizeArray.push({ id: index, value: index });\r\n }\r\n this.currentBookingSize = this.minSizeAllowed;\r\n if (this.coverTypes.length) this.coverTypes[0].value = String(this.minSizeAllowed);\r\n if (this.bookingTypes.length) this.bookingTypes[0].value = String(this.minSizeAllowed);\r\n }\r\n\r\n generateCoverType(meal) {\r\n let availableCoverTypes = this.activityService.selectedDining.AvailableSpecialMeals.filter(x => x.Id == meal.Id)[0].CoverTypePrices;\r\n if (meal.CoverTypePrices.length > 0) {\r\n this.coverTypes = availableCoverTypes.map(x => { return { id: x.Id, name: x.CoverTypeName, value: 0, price: x?.Price } });\r\n this.coverTypes[0].value = this.minSizeAllowed;\r\n }\r\n else {\r\n this.coverTypes = [];\r\n }\r\n }\r\n\r\n selectSpecialMeal(specialMealIndex , manualSelect) {\r\n if ((specialMealIndex || specialMealIndex === 0) && this.availableSpecialMeals[specialMealIndex]?.SpecialMealId !== this.selectedActivityData?.SpecialMealId) {\r\n this.availableSpecialMeals.forEach((x: any) => { x.isSelected = false; });\r\n if (this.availableSpecialMeals?.[specialMealIndex]) {\r\n this.availableSpecialMeals[specialMealIndex].isSelected = true;\r\n this.selectedSpecialMeal(this.availableSpecialMeals[specialMealIndex] , null , null , manualSelect);\r\n }\r\n }\r\n }\r\n\r\n changeDiningDate(nextOrPrev: string) {\r\n this.currentFromDate = new Date(this.currentFromDate);\r\n let daysDiffByMaxDate = moment(this.bookingTypeMaxDate || this.diningMaxDate).diff(new Date(this.currentFromDate), 'days');\r\n if (nextOrPrev === 'next' && this.currentFromDate < new Date(this.diningMaxDate) && daysDiffByMaxDate > 0) {\r\n this.currentFromDate = new Date(this.currentFromDate.setDate(this.currentFromDate.getDate() + 1));\r\n this.currentFromDate = this.getNextAvailableDate();\r\n this.showNextArrow = new Date(this.diningMaxDate) > new Date(this.findNextAvailableDate(this.selectedActivityData, this.currentFromDate, true, true))\r\n this.checkSessionorSlotAvailability(false, true);\r\n }\r\n else if (nextOrPrev === 'prev' && this.currentFromDate > this.activityService.currentDateTime.setHours(0, 0, 0, 0)) {\r\n this.currentFromDate = new Date(this.currentFromDate.setDate(this.currentFromDate.getDate() - 1));\r\n this.currentFromDate = this.getPrevAvailableDate();\r\n this.showNextArrow = new Date(this.diningMaxDate) > new Date(this.findNextAvailableDate(this.selectedActivityData, this.currentFromDate, false, true))\r\n this.checkSessionorSlotAvailability(false, true);\r\n }\r\n\r\n this.diningSlotChangeListners('');\r\n\r\n }\r\n\r\n getNextAvailableDate(){\r\n let scheduledNextDay = this.findNextAvailableDate(this.selectedActivityData, this.currentFromDate, true);\r\n let customNextDay = this.CustomOpenHours.find(customDay => new Date(customDay.Date) > this.currentFromDate);\r\n\r\n return customNextDay && new Date(customNextDay?.Date) < scheduledNextDay ? new Date(customNextDay?.Date) : scheduledNextDay;\r\n }\r\n\r\n getPrevAvailableDate(){\r\n let scheduledPrevDay = this.findNextAvailableDate(this.selectedActivityData, this.currentFromDate, false);\r\n let customDaysReverse = this.CustomOpenHours.slice().reverse();\r\n let customPrevDay = customDaysReverse.find(customDay => new Date(customDay.Date) < this.currentFromDate);\r\n\r\n return customPrevDay && new Date(customPrevDay?.Date) > scheduledPrevDay ? new Date(customPrevDay?.Date) : scheduledPrevDay;\r\n }\r\n\r\n changeCoverTypeSize(nextOrPrev: string, index: number) {\r\n if (nextOrPrev === 'next' && this.coverTypes[index].value < this.maxSizeAllowed) { \r\n this.coverTypes[index].value = this.coverTypes[index].value + 1; this.checkSessionorSlotAvailability(false, true); \r\n }\r\n else if (nextOrPrev === 'prev' && this.coverTypes[index].value > 0) { \r\n this.coverTypes[index].value = this.coverTypes[index].value - 1; this.checkSessionorSlotAvailability(false, true); \r\n }\r\n }\r\n\r\n changePartySize(nextOrPrev: string) {\r\n if (nextOrPrev === 'next' && this.currentBookingSize < this.maxSizeAllowed) { this.currentBookingSize = this.currentBookingSize + 1; this.checkSessionorSlotAvailability(false, true); }\r\n else if (nextOrPrev === 'prev' && this.currentBookingSize > this.minSizeAllowed) { this.currentBookingSize = this.currentBookingSize - 1; this.checkSessionorSlotAvailability(false, true); }\r\n }\r\n\r\n changeTimeSlots(nextOrPrev: string) {\r\n if (nextOrPrev === 'next' && this.checkedDiningLocalTime !== this.selectedDiningSlots[this.selectedDiningSlots.length - 1]) { this.checkedDiningLocalTime = this.selectedDiningSlots[this.selectedDiningSlots.findIndex(slot => slot === this.checkedDiningLocalTime) + 1]; }\r\n else if (nextOrPrev === 'prev' && this.checkedDiningLocalTime !== this.selectedDiningSlots[0]) { this.checkedDiningLocalTime = this.selectedDiningSlots[this.selectedDiningSlots.findIndex(slot => slot === this.checkedDiningLocalTime) - 1]; }\r\n }\r\n\r\n applyToOtherDates(selectedDateIndex, event) {\r\n\r\n this.bookAllAvailableDates = event?.checked;\r\n let memberid;\r\n const selectedSessionIndexes =\r\n this.sessionSlotsAvailableDates[selectedDateIndex].AvailableSessions\r\n .map((session, index) => session.isChecked ? index : -1).filter(sessionIndex => sessionIndex !== -1);\r\n if (this.activityService.selectedGuest) {\r\n var { MembershipType: memberTypename, MemberActive: memberActive } = this.activityService.selectedGuest;\r\n const memberType = this.venueAllocationMappings\r\n .find(allocation => allocation.AllocationTypeName.trim().toLocaleLowerCase() === memberTypename.trim().toLocaleLowerCase());\r\n if (memberType) {\r\n memberid = memberType.AllocationTypeId;\r\n }\r\n }\r\n if (event.checked) {\r\n this.sessionsUnavailable = [];\r\n if (!selectedSessionIndexes || !selectedSessionIndexes.length) {\r\n this.activityService.\r\n openSnackBar(this.ts.instant('selectSessionsToApplyForAllDates'), this.ts.instant('close'), this.activityService.ConfigSettings.snackBarTime);\r\n this.bookAllAvailableDates = false;\r\n return false;\r\n }\r\n this.sessionSlotsAvailableDates.forEach(selectedDate => {\r\n selectedDate.AvailableSessions = selectedDate.AvailableSessions.map(session => {\r\n session.isChecked = false;\r\n return session;\r\n });\r\n selectedSessionIndexes.forEach(index => {\r\n if (selectedDate.AvailableSessions[index] &&\r\n (\r\n selectedDate.AvailableSessions[index].Availability?.AvailabilityType === AvailabilityType.Cancelled || selectedDate.AvailableSessions[index].Availability?.AvailabilityType === AvailabilityType.OpenToAll\r\n || (selectedDate.AvailableSessions[index].Availability?.AvailabilityType === AvailabilityType.OpenToSpecificMember\r\n && ((selectedDate.AvailableSessions[index].Availability?.AllocationTypeId === memberid)\r\n || (this.IsMember(selectedDate.AvailableSessions[index].Availability) && memberid)) && memberActive)\r\n )\r\n && !selectedDate.AvailableSessions[index].disabled) {\r\n selectedDate.AvailableSessions[index].isChecked = true;\r\n } else {\r\n if (!this.sessionsUnavailable[index] || !this.sessionsUnavailable[index].dates) {\r\n //this.sessionsUnavailable[index] = { session: ('Session') + ' ' + (index + 1) + ' ' + ('notAvailableOn') + ' ', dates: '' };\r\n this.sessionsUnavailable[index] = { session: this.ts.instant('session') + ' ' + (index + 1) + ' ' + this.ts.instant('notAvailableOn') + ' ', dates: '' };\r\n }\r\n this.sessionsUnavailable[index].dates +=\r\n this.sessionsUnavailable[index].dates ? ', ' + moment(selectedDate.AvailableDate).format('LL')\r\n : moment(selectedDate.AvailableDate).format('LL');\r\n }\r\n });\r\n });\r\n this.sessionsUnavailable = this.sessionsUnavailable.filter(item => item);\r\n if (!this.sessionsUnavailable || !this.sessionsUnavailable.length) {\r\n // this.toastrService.success(this.ts.instant(\"Applied\"), \"\", { timeOut: 3000, closeButton: true });\r\n } else {\r\n let errorMessage = '';\r\n const errObj = {\r\n ErrorDetails: {\r\n Error: this.sessionsUnavailable.map(session => {\r\n errorMessage = errorMessage + session.session + session.dates + '. ';\r\n })\r\n },\r\n ErrorType: true,\r\n dialogTitle: 'error'\r\n };\r\n this.activityService.openSnackBar(errorMessage, this.ts.instant('close'), this.activityService.ConfigSettings.snackBarTime, 'error-snackbar');\r\n // this.activityService.setMessageState(errorMessage, 0);\r\n }\r\n } else {\r\n this.uncheckSelectedSession();\r\n }\r\n }\r\n\r\n uncheckSelectedSession() {\r\n if (!this.isTimeDropList) {\r\n this.checkedItem = false;\r\n this.checkedDiningLocalTime = '';\r\n this.sessionSlotsAvailableDates.forEach(selectedDate => {\r\n selectedDate.AvailableSessions = selectedDate.AvailableSessions.map(session => {\r\n session.isChecked = false;\r\n return session;\r\n });\r\n });\r\n }\r\n }\r\n\r\n isValidFormValues(isReload?: boolean) {\r\n\r\n this.validGroupSize = false;\r\n\r\n const minsize = this.selectedActivityData?.MinPartySize || 1;\r\n const maxsize = this.selectedActivityData?.MaxPartySize || 10;\r\n\r\n let selectedSize = 0;\r\n let bookingTypeTotal = 0;\r\n let coverTypeTotal = 0;\r\n let guestTypeMinQuantity = true;\r\n\r\n if(this.activityService.isDining) {\r\n\r\n // if (this.bookingTypes?.length) {\r\n // this.bookingTypes.forEach(bookType => {\r\n // bookingTypeTotal += Number(bookType.value);\r\n // });\r\n // }\r\n\r\n if (this.coverTypes?.length) {\r\n this.coverTypes.forEach(coverType => {\r\n coverTypeTotal += Number(coverType.value);\r\n });\r\n }\r\n\r\n if (this.bookingTypes?.length === 0 && this.coverTypes?.length === 0) {\r\n selectedSize = this.currentBookingSize;\r\n }\r\n else {\r\n selectedSize = coverTypeTotal;\r\n }\r\n // } else if (this.bookingTypes?.length && this.coverTypes?.length === 0) {\r\n // selectedSize = bookingTypeTotal;\r\n // } else if (this.bookingTypes?.length === 0 && this.coverTypes?.length) {\r\n // selectedSize = coverTypeTotal;\r\n // } else if (this.bookingTypes?.length && this.coverTypes?.length) {\r\n // if (bookingTypeTotal !== coverTypeTotal) {\r\n // this.activityService.openSnackBar(this.ts.instant('countsNotMatching'), this.ts.instant('close'), this.activityService.ConfigSettings.snackBarTime, 'error-snackbar');\r\n // return false;\r\n // } else {\r\n // selectedSize = bookingTypeTotal;\r\n // }\r\n // }\r\n }else {\r\n\r\n selectedSize = this.currentBookingSize;\r\n }\r\n\r\n if (selectedSize < minsize || selectedSize > maxsize) {\r\n this.ts.get('MisMatchGroupSizeWithClass', { minsize: minsize, maxsize: maxsize }).subscribe(result => {\r\n this.activityService.openSnackBar(result, this.ts.instant('close'), this.activityService.ConfigSettings.snackBarTime, 'error-snackbar');\r\n });\r\n if (this.activityService.isDining) {\r\n this.selectedDiningSlots = [];\r\n } else if (this.activityService.isNonDining) {\r\n this.selectedNonDiningSlots = [];\r\n }\r\n else {\r\n this.sessionSlotsAvailableDates = [];\r\n }\r\n return false;\r\n }\r\n\r\n this.overAllBookingSize = selectedSize;\r\n this.validGroupSize = selectedSize >= minsize && selectedSize <= maxsize;\r\n\r\n if (this.selectedActivityData?.CoverTypePrices?.length && this.coverTypes?.length) {\r\n this.selectedActivityData?.CoverTypePrices?.map(type => {\r\n type.value = this?.sizeMapping?.sizes ? this.sizeMapping.sizes.filter(x => x.CoverTypeId == type.Id).reduce((res, curr) => res = res + curr.Covers, 0) : this.coverTypes.find(x => x.id == type.Id)?.value;\r\n return type;\r\n });\r\n this.selectedActivityData?.CoverTypePrices?.map(type => {\r\n if (type.MinimumQuantity > 0 && (type.value < type.MinimumQuantity)) {\r\n this.ts.get('guestTypeMinQuantityErrorMessage', { quantity: type.MinimumQuantity, guestType: type.CoverTypeName }).subscribe(result => {\r\n this.activityService.openSnackBar(result, this.ts.instant('close'), this.activityService.ConfigSettings.snackBarTime, 'error-snackbar');\r\n });\r\n this.validGroupSize = false;\r\n return false;\r\n }\r\n })\r\n }\r\n\r\n\r\n if(this.sizeMapping?.errors?.length > 0) {\r\n return false;\r\n }\r\n\r\n if (isReload && this.activityService.displayLocationType !== LocationViewTypes.None) {\r\n this.getNonDiningLocationsApiHandler(false , isReload);\r\n }\r\n\r\n }\r\n\r\n IsMember(slot: any): boolean {\r\n if (!slot || !this.venueAllocationMappings) {\r\n return false;\r\n }\r\n const allocationType = this.venueAllocationMappings;\r\n const isAnyMember = allocationType.find(type => type.AllocationTypeId === slot.AllocationTypeId)?.AllocationTypeName === 'AnyMembers';\r\n return isAnyMember;\r\n }\r\n\r\n getInstructor(staffList) {\r\n let SelectedStaffList = [];\r\n if (staffList?.length > 1) {\r\n SelectedStaffList.push({ Id: -1, value: 'Any' });\r\n }\r\n staffList?.forEach(staff => {\r\n const selectedStaff = this.activityService?.InstructorList.filter(data => data.Id === staff.ServerId)[0];\r\n if (selectedStaff) {\r\n let serverval = 'Unnamed';\r\n if (selectedStaff) {\r\n if (selectedStaff.Name) {\r\n serverval = selectedStaff.Name;\r\n }\r\n if (selectedStaff.LastName) {\r\n serverval = serverval + ' ' + selectedStaff.LastName;\r\n }\r\n }\r\n selectedStaff.value = serverval;\r\n\r\n SelectedStaffList.push(selectedStaff);\r\n }\r\n });\r\n SelectedStaffList = SelectedStaffList.map(data => {\r\n return {\r\n id: data.Id,\r\n value: data.value\r\n };\r\n });\r\n\r\n return SelectedStaffList;\r\n }\r\n\r\n getLocations(locationList) {\r\n let SelectedLocationList = [];\r\n if (locationList?.length > 1) {\r\n SelectedLocationList.push({ Id: -1, value: 'Any' });\r\n }\r\n locationList?.forEach(location => {\r\n const selectedLocation = this.activityService?.LocationList.filter(data => data.Id === location.LocationId)[0];\r\n if (selectedLocation) {\r\n selectedLocation.value = selectedLocation.Name;\r\n SelectedLocationList.push(selectedLocation);\r\n }\r\n });\r\n SelectedLocationList = SelectedLocationList.map(data => {\r\n return {\r\n id: data.Id,\r\n value: data.value\r\n };\r\n });\r\n return SelectedLocationList;\r\n }\r\n\r\n getSlotsForDining(reqObj, isInitial = false) {\r\n this.activityService.startLoader();\r\n this.subscriptions.add(this.activityService.GetRestaurantDateAvailability(\r\n this.selectedActivityData?.restaurantWidgetId || this.activityService.selectedDining?.RestaurantId,\r\n reqObj.BookingSize,\r\n this.isCommunalTable,\r\n true,\r\n moment(this.currentFromDate).format('YYYY-MM-DD'),\r\n this.selectedSeatingArea ? this.selectedSeatingArea : null,\r\n this.activityService.operation === operationType.edit ? this.activityService?.editData?.Id : null,\r\n this.showSpecialEvent && +this.selectedActivityData?.SpecialMealId ? +this.selectedActivityData?.SpecialMealId : null,\r\n this.selectedSeatingType ? this.selectedSeatingType : null\r\n ).subscribe(data => {\r\n this.activityService.stopLoader();\r\n this.showAvailableDates = true;\r\n this.activityService?.selectedDining?.MealTabs.forEach(tab => { tab.selected = false });\r\n this.selectedDiningSlots = data;\r\n if (isInitial && this.activityService.operation === operationType.create && this.isTimeDropList) {\r\n this.checkedItem = true;\r\n this.checkedDiningLocalTime = this.selectedDiningSlots[0];\r\n }\r\n this.originalTimeSlotList = data;\r\n if (this.isEdit && this.activityService.editData?.ReservedFor) {\r\n this.checkedItem = data && data.findIndex(time => time === this.activityService.editData?.ReservedFor) !== -1 ? true : false;\r\n } else if (isInitial && this.activityService.sessionFilterValue?.checkedDiningLocalTime) {\r\n this.checkedItem = data && data.findIndex(time => time === this.activityService.sessionFilterValue.checkedDiningLocalTime) !== 1 ? true : false;\r\n }\r\n this.showOtherDaysAvailable();\r\n })\r\n );\r\n }\r\n\r\n getSlotsForClass(requestedObject, isInitial = false, filterChanges = false) {\r\n requestedObject.PropertyId = this.selectedActivityData.restaurantWidgetId;\r\n this.checkedItem = false;\r\n this.activityService.startLoader();\r\n this.subscriptions.add(this.activityService.GetClassSlots(requestedObject).subscribe(response => {\r\n this.activityService.stopLoader();\r\n const slots = response.Payload;\r\n this.getSlotInitial = false;\r\n this.afterSlotResponse(slots, isInitial, filterChanges);\r\n }));\r\n }\r\n\r\n\r\n afterSlotResponse(slots, isInitial = false, filterChanges = false) {\r\n let restaurantData: any;\r\n let restaurantId = this.activityService.isDining ? this.activityService.selectedDining.RestaurantId : !this.activityService.isNonDining ? this.activityService.selectedActivities.RestaurantId : this.activityService.selectedNonDining.RestaurantId;\r\n restaurantData = this.activityService.widgetSettings.PropertyWidgetSettings.find(property => property.RestaurantId == restaurantId);\r\n this.activityService.addOnList = restaurantData.Addons || [];\r\n\r\n let overAllAddons = Utilities.getAddons(this.activityService.addOnList, this.selectedActivityData?.SpecialMealId);\r\n let Addons = Utilities.getMandatoryAddons(this.activityService.addOnList, this.selectedActivityData?.SpecialMealId);\r\n\r\n this.sessionSlotsAvailableDates = slots.length ? slots.map((date, index) => {\r\n if(!this.activityService.editData && !this.activityService.fromConfirmation)\r\n date.AvailableSessions = date.AvailableSessions.filter(session => session.Availability?.AvailabilityType != AvailabilityType.Cancelled)\r\n else\r\n date.AvailableSessions = date.AvailableSessions.filter(session => session.Availability?.AvailabilityType != 6 || ( session.Availability?.AvailabilityType == 6 && _.map(this.activityService.editData.BookedSessions,'ActivitySessionId').includes(session.SessionId)))\r\n date.AvailableSessions = date.AvailableSessions\r\n .filter(session => session.Availability?.AvailabilityType !== AvailabilityType.SelectionCriteriaNotMatched)\r\n .map((slot, datatindex) => {\r\n slot.Start = date.AvailableDate.split('T')[0] + 'T' + slot.Start;\r\n slot.End = date.AvailableDate.split('T')[0] + 'T' + slot.End;\r\n if (this.activityService?.editData && isInitial && !this.activityService?.sessionFilterValue?.currentFromDate) {\r\n this.updateSlotBasedOnBookedSession(slot, date);\r\n }\r\n if (!this.isNotPastTimeSlot(slot.End) && !slot.isChecked) {\r\n slot.disabled = true;\r\n }\r\n if (!this.isNotPastTimeSlot(slot.End)) {\r\n slot.pastSlot = true;\r\n }\r\n if (slot.Availability?.AvailabilityType == AvailabilityType.Blocked) {\r\n slot.isBlocked = true;\r\n }\r\n slot.isAddonAvailable = true;\r\n this.activityService.selectedSize = this.overAllBookingSize;\r\n slot.isAddonAvailable = Utilities.filterSlotsbyAddon(this.activityService.addOnList, overAllAddons, Addons, slot.AddOnAvailability, this.overAllBookingSize, this.selectedActivityData?.SpecialMealId);\r\n slot.showAvailibility = this.seatCountAvailability(slot?.Availability?.AvailabilityType,slot?.Availability?.AvailableSlots, slot.disabled, slot.isAddonAvailable, slot.isBlocked);\r\n slot.sessionHeadlines = this.getPublicHeadLine(slot);\r\n if (slot.isChecked)\r\n this.activityService.selectedSlot = slot;\r\n return slot;\r\n }).sort((a, b) => {\r\n const c: any = new Date(a.Start);\r\n const d: any = new Date(b.Start);\r\n return c.getTime() - d.getTime();\r\n });\r\n // console.log(date);\r\n return date;\r\n }) : [];\r\n\r\n if (this.sessionSlotsAvailableDates) {\r\n this.showSessionorSlots = true;\r\n this.sessionSlotsAvailableDates =\r\n this.sessionSlotsAvailableDates.filter(slot => slot.AvailableSessions.length);\r\n const isChecked = false;\r\n this.sessionSlotsAvailableDates.forEach((element, index) => {\r\n const checked = element.AvailableSessions.findIndex(x => x.isSelected);\r\n if (checked !== -1 && !this.checkedItem) {\r\n this.checkedItem = true;\r\n this.selectedIndex = index;\r\n }\r\n });\r\n\r\n this.slotStatusSet();\r\n }\r\n\r\n if (!this.isSessionClass) {\r\n this.availableSessions = [];\r\n this.classLessonList = [];\r\n this.sessionSlotsAvailableDates.forEach(elm => {\r\n this.availableSessions = [...this.availableSessions, ...elm.AvailableSessions];\r\n });\r\n const groupIdList: any[] = Utilities.uniqueBy(this.availableSessions, 'SessionGroupId');\r\n groupIdList.forEach(group => {\r\n const selectedSession = this.availableSessions.find(session => session.SessionGroupId === +group.SessionGroupId);\r\n selectedSession.isChecked =\r\n this.activityService.editPartyData$.value && this.activityService.editPartyData$.value.SessionGroupId ?\r\n selectedSession.SessionGroupId === this.activityService.editPartyData$.value.SessionGroupId : false;\r\n this.classLessonList.push(selectedSession);\r\n const checkedItem = this.classLessonList.filter(x => x.isChecked);\r\n this.checkedItem = checkedItem.length ? true : false;\r\n });\r\n this.selectedClassSchedule = [];\r\n let groupList: any[] = Utilities.uniqueBy(this.availableSessions, 'SessionGroupId', 'DayOfWeek', 'SessionId');\r\n groupList = groupList.filter(group => group.SessionGroupId === this.activityService.editPartyData$.value?.SessionGroupId);\r\n groupList.forEach(groupDetail => {\r\n if (!this.selectedClassSchedule[groupDetail.DayOfWeek]) {\r\n this.selectedClassSchedule[groupDetail.DayOfWeek] = [];\r\n }\r\n const selectedItem = this.availableSessions\r\n .find(session => session.SessionGroupId === groupDetail.SessionGroupId &&\r\n session.DayOfWeek === groupDetail.DayOfWeek && session.SessionId === groupDetail.SessionId);\r\n this.selectedClassSchedule[groupDetail.DayOfWeek].push(selectedItem);\r\n });\r\n }\r\n this.showSessionorSlots = true;\r\n\r\n if (!filterChanges && this.activityService?.sessionFilterValue?.sessionSlotsAvailableDates?.length) {\r\n this.sessionSlotsAvailableDates?.[this.selectedIndex]?.AvailableSessions?.forEach((element, index) => {\r\n const checkedSessionObj =\r\n this.activityService?.sessionFilterValue?.sessionSlotsAvailableDates?.[this.selectedIndex]?.AvailableSessions\r\n .find(x => x.SessionId === element.SessionId);\r\n if (Object.keys(checkedSessionObj)?.length && checkedSessionObj.isChecked) {\r\n element.isChecked = true;\r\n this.checkedItem = true;\r\n }\r\n });\r\n }\r\n }\r\n\r\n getPublicHeadLine(slot: any) {\r\n let description: string = '';\r\n if (this.activityHeadlines == null || this.activityHeadlines?.length == 0) {\r\n return;\r\n }\r\n else {\r\n const sessionStart = moment(slot.Start).format(\"YYYY-MM-DD\");\r\n const sessionHeadlines = this.activityHeadlines.filter(x => x.ActivitySessionId == slot.SessionId && x.AttributeType == AttributeType.PublicHeadlines\r\n && moment(x.StartDate).format(\"YYYY-MM-DD\") == sessionStart);\r\n if (sessionHeadlines != null && sessionHeadlines.length > 0) {\r\n description = sessionHeadlines[0].Description;\r\n }\r\n if (sessionHeadlines == null || sessionHeadlines.length == 0) {\r\n const activityId = this.selectedActivityData?.Id;\r\n const openHeadlines = this.activityHeadlines.filter(x => x.ActivityId == activityId && x.AttributeType == AttributeType.PublicHeadlines && x.ApplyForAllSessions && !x.IsDefault\r\n && moment(x.StartDate).format(\"YYYY-MM-DD\") == sessionStart);\r\n if (openHeadlines != null && openHeadlines.length > 0) {\r\n description = openHeadlines[0].Description;\r\n }\r\n if (openHeadlines == null || openHeadlines.length == 0) {\r\n const publicHeadlines = this.activityHeadlines.filter(x => x.ActivityId == activityId && x.AttributeType == AttributeType.PublicHeadlines && x.IsDefault);\r\n if (publicHeadlines != null && publicHeadlines.length > 0) {\r\n description = publicHeadlines[0].Description;\r\n }\r\n }\r\n }\r\n }\r\n return description;\r\n }\r\n\r\n seatCountAvailability(availabilityType: number, seatLeftCount: number, isDisabled: boolean, isAddonAvailable: boolean, isBlocked: boolean) {\r\n const countMultiplier = this.selectedActivityData?.SlotCountInWidget && this.selectedActivityData?.SlotCountInWidget > 0 ? this.selectedActivityData?.SlotCountInWidget : 0;\r\n if(availabilityType == AvailabilityType.Cancelled){\r\n return { status: SessionAvailabiltyStatus.NotAvailable, text: this.ts.instant('Cancelled') };\r\n }\r\n if (isBlocked) {\r\n return { status: SessionAvailabiltyStatus.Blocked, text: this.ts.instant('currentlyUnavailable') };\r\n }\r\n if (countMultiplier > 0 && isDisabled) {\r\n return { status: SessionAvailabiltyStatus.PastTime, text: '' };\r\n }\r\n if (countMultiplier > 0 && seatLeftCount > this.selectedActivityData.MaxPartySize * countMultiplier) {\r\n return { status: SessionAvailabiltyStatus.Available, text: '' };\r\n }\r\n if (countMultiplier > 0 && seatLeftCount > this.selectedActivityData.MaxPartySize && seatLeftCount <= this.selectedActivityData.MaxPartySize * countMultiplier) {\r\n return { status: SessionAvailabiltyStatus.LimitedAvailability, text: this.ts.instant('limitedAvailablity') };\r\n }\r\n if (seatLeftCount === 0) {\r\n return { status: SessionAvailabiltyStatus.NotAvailable, text: this.ts.instant('soldOut') };\r\n }\r\n\r\n if (seatLeftCount > 0 && !isAddonAvailable) {\r\n return { status: SessionAvailabiltyStatus.NotAvailable, text: '' };\r\n }\r\n return { status: SessionAvailabiltyStatus.LessAvailability, text: seatLeftCount + ' ' + this.ts.instant('left') };\r\n }\r\n\r\n slotChangeListners(event) {\r\n if (event.disabled || event.disabledOverlaped || !event.isAddonAvailable) {\r\n return false;\r\n }\r\n event.isChecked = !event.isChecked;\r\n if (this.isMultiSlotSelection) {\r\n this.disableOverlapingSessions();\r\n }\r\n this.activityService.selectedSlot = event;\r\n if (this.selectedActivityData && this.selectedActivityData.ClassType === ClassType.Class && event.isChecked) {\r\n let groupIdList: any[] = Utilities.uniqueBy(this.availableSessions, 'SessionGroupId', 'DayOfWeek', 'SessionId');\r\n this.selectedClassSchedule = [];\r\n groupIdList = groupIdList.filter(group => group.SessionGroupId === event.SessionGroupId);\r\n groupIdList.forEach(groupDetail => {\r\n if (!this.selectedClassSchedule[groupDetail.DayOfWeek]) {\r\n this.selectedClassSchedule[groupDetail.DayOfWeek] = [];\r\n }\r\n const selectedItem = this.availableSessions.\r\n find(session => session.SessionGroupId === groupDetail.SessionGroupId &&\r\n session.DayOfWeek === groupDetail.DayOfWeek && session.SessionId === groupDetail.SessionId);\r\n this.selectedClassSchedule[groupDetail.DayOfWeek].push(selectedItem);\r\n });\r\n this.classLessonList.forEach(session => {\r\n if (session.SessionId !== event.SessionId || session.SessionGroupId !== event.SessionGroupId) {\r\n session.isChecked = false;\r\n }\r\n });\r\n const checkedItem = this.classLessonList.filter(x => x.isChecked);\r\n this.checkedItem = checkedItem.length ? true : false;\r\n } else if (!this.isMultiSlotSelection && event.isChecked) {\r\n let isChecked = false;\r\n this.sessionSlotsAvailableDates.forEach((element, index) => {\r\n element.AvailableSessions.forEach(session => {\r\n if (session.SessionId !== event.SessionId) {\r\n session.isChecked = false;\r\n }\r\n if (session.isChecked) {\r\n isChecked = true;\r\n }\r\n });\r\n });\r\n this.checkedItem = isChecked;\r\n } else {\r\n if (this.classLessonList && this.classLessonList.length > 0) {\r\n const checkedItem = this.classLessonList.filter(x => x.isChecked);\r\n this.checkedItem = checkedItem.length ? true : false;\r\n } else {\r\n let isChecked = false;\r\n this.sessionSlotsAvailableDates.forEach((element, index) => {\r\n element.AvailableSessions.forEach(session => {\r\n if (session.isChecked) {\r\n isChecked = true;\r\n }\r\n });\r\n });\r\n this.checkedItem = isChecked;\r\n }\r\n }\r\n }\r\n\r\n diningSlotChangeListners(event) {\r\n this.checkedDiningLocalTime = (!this.isTimeDropList && this.checkedDiningLocalTime === event) ? '' : event ? event : this.checkedDiningLocalTime;\r\n this.checkedItem = this.checkedDiningLocalTime === '' ? false : true;\r\n this.isValidFormValues();\r\n }\r\n\r\n updateSlotBasedOnBookedSession(slot, date) {\r\n const editData = this.activityService.editData;\r\n slot.isChecked = editData && editData.BookedSessions && editData.BookedSessions.length > 0 && !_.map(this.activityService.editData.SpecialMeal.ActivitySessions.filter(data => data.StatusCode == Status.Cancelled),'ActivitySessionId').includes(slot.SessionId)? \r\n this.isSlotBooked(date.AvailableDate, slot.SessionId, editData) : false;\r\n\r\n if (slot.isChecked && editData && editData.BookedSessions && editData.BookedSessions.length > 0 &&\r\n this.getStateOfBookedSession(date.AvailableDate, slot.SessionId, editData) === PartyState.Seated) {\r\n slot.Availability.AvailabilityType = AvailabilityType.SelectionCriteriaNotMatched;\r\n slot.isChecked = false;\r\n }\r\n\r\n if (slot.isChecked) {\r\n this.checkedItem = true;\r\n }\r\n }\r\n\r\n isSlotBooked(date, sessionId, editData): boolean {\r\n return editData.BookedSessions.\r\n findIndex(session =>\r\n moment(session.BookedDate).\r\n diff(moment(date), 'days') === 0 && session.ActivitySessionId === sessionId\r\n && session.SessionState !== PartyState.Cancelled) > -1;\r\n }\r\n\r\n isNotPastTimeSlot(slotDateTime): boolean {\r\n const currentTime =\r\n Utilities.getRestaurantDateTime(this.activityService?.selectedActivities?.DaylightDelta);\r\n const past1hr = new Date(currentTime.valueOf());\r\n const slotTime = Utilities.parseDateString(slotDateTime);\r\n return slotTime >= past1hr;\r\n }\r\n\r\n getStateOfBookedSession(date, sessionId, editData): PartyState {\r\n return editData.BookedSessions.\r\n find(session => moment(session.BookedDate).\r\n diff(moment(date), 'days') === 0 && session.ActivitySessionId === sessionId).SessionState;\r\n }\r\n\r\n calculatePartySize() {\r\n this.bookingSizeArray = [];\r\n for (let i = 1; i <= this.selectedActivityData?.MaxPartySize; i++) {\r\n this.bookingSizeArray.push({ id: i, value: i.toString() });\r\n }\r\n // this.bookingSizeArray.push({ id: this.maxSizeAllowed, value: this.maxSizeAllowed.toString() + \"+\" });\r\n return this.bookingSizeArray;\r\n }\r\n\r\n loadPreviousDate(index) {\r\n if (index === 0) {\r\n return false;\r\n }\r\n this.selectedIndex -= 1;\r\n this.slotStatusSet();\r\n }\r\n\r\n loadNextDate(index) {\r\n if (index === (this.sessionSlotsAvailableDates.length - 1)) {\r\n return false;\r\n }\r\n this.selectedIndex += 1;\r\n this.slotStatusSet();\r\n }\r\n\r\n slotStatusSet() {\r\n const membershipId = this.activityService.membershipId || null;\r\n if (this.sessionSlotsAvailableDates) {\r\n this.sessionSlotsAvailableDates[this.selectedIndex]?.AvailableSessions.forEach(session => {\r\n let isAnyMember = false;\r\n isAnyMember = this.IsMember(session.Availability);\r\n session.disabled = session.disabled || !(session.Availability?.AvailabilityType === AvailabilityType.OpenToAll\r\n || (session.Availability?.AvailabilityType === AvailabilityType.OpenToSpecificMember\r\n && session.Availability?.AllocationTypeId === membershipId && this.activityService.selectedGuest.MemberActive\r\n || (isAnyMember && membershipId)) || session.isChecked) || (session.Availability?.AvailabilityType === AvailabilityType.Cancelled);\r\n if (session.Availability?.AllocationTypeId) {\r\n const { R, G, B, A } = session.AllocationTypes?.\r\n find(type => type.AllocationTypeId === session.Availability?.AllocationTypeId)?.Color;\r\n session.color = `rgba(${R}, ${G}, ${B}, ${A})`;\r\n }\r\n });\r\n this.disableOverlapingSessions();\r\n }\r\n }\r\n\r\n disableOverlapingSessions() {\r\n const selectedSlots = this.sessionSlotsAvailableDates[this.selectedIndex]?.AvailableSessions.filter(slot => slot.isChecked);\r\n this.sessionSlotsAvailableDates[this.selectedIndex]?.AvailableSessions.forEach(session => {\r\n if (!session.isChecked && this.isMultiSlotSelection) {\r\n session.disabledOverlaped = this.isOverlap(selectedSlots, session);\r\n }\r\n });\r\n }\r\n\r\n isBetween(start, end, value) {\r\n return value > start && value < end;\r\n }\r\n\r\n isOverlap(selectedSlots, slot): boolean {\r\n const slotStart = new Date(slot.Start);\r\n const slotEnd = new Date(slot.End);\r\n\r\n const intersectingSlots = selectedSlots.filter(selectedSlot => {\r\n const selectedSlotStart = new Date(selectedSlot.Start);\r\n const selectedSlotEnd = new Date(selectedSlot.End);\r\n\r\n if ( // is Same Start Or End\r\n slotStart.getTime() === selectedSlotStart.getTime() ||\r\n slotEnd.getTime() === selectedSlotEnd.getTime() ||\r\n // is slot falls between selectedSlot\r\n this.isBetween(selectedSlotStart, selectedSlotEnd, slotStart) ||\r\n this.isBetween(selectedSlotStart, selectedSlotEnd, slotEnd) ||\r\n // is selectedSlot falls between slot\r\n this.isBetween(slotStart, slotEnd, selectedSlotStart) ||\r\n this.isBetween(slotStart, slotEnd, selectedSlotEnd)) {\r\n return true;\r\n }\r\n\r\n return false;\r\n });\r\n return intersectingSlots.length;\r\n }\r\n\r\n storeFilters() {\r\n this.activityService.sessionFilterValue = {};\r\n this.activityService.sessionFilterValue.coverTypes = this.coverTypes;\r\n this.activityService.sessionFilterValue.bookingTypes = this.bookingTypes;\r\n this.activityService.sessionFilterValue.currentFromDate = this.currentFromDate;\r\n this.activityService.sessionFilterValue.currentToDate = this.currentToDate;\r\n this.activityService.sessionFilterValue.currentBookingSize = this.currentBookingSize;\r\n this.activityService.sessionFilterValue.sessionSlotsAvailableDates = JSON.parse(JSON.stringify(this.sessionSlotsAvailableDates));\r\n this.activityService.sessionFilterValue.selectedIndex = this.selectedIndex;\r\n this.activityService.sessionFilterValue.selectedSeatingArea = this.selectedSeatingArea;\r\n this.activityService.sessionFilterValue.selectedSeatingType = this.selectedSeatingType;\r\n this.activityService.sessionFilterValue.isCommunalTable = this.isCommunalTable;\r\n this.activityService.sessionFilterValue.marketingFlag = this.marketingFlag;\r\n this.activityService.sessionFilterValue.selectedSpecialMealId = this.selectedActivityData?.Id;\r\n this.activityService.sessionFilterValue.checkedDiningLocalTime = this.checkedDiningLocalTime;\r\n this.activityService.sessionFilterValue.checkedNonDiningLocalTime = this.checkedNonDiningLocalTime;\r\n this.activityService.sessionFilterValue.isSpecialMealReservation = this.showSpecialEvent;\r\n this.activityService.sessionFilterValue.notes = JSON.parse(JSON.stringify(this.notesOptions));\r\n this.activityService.sessionFilterValue.marketingFlag = this.marketingFlag;\r\n this.activityService.sessionFilterValue.promoCodeDetail = this.promoCodeDetail;\r\n }\r\n\r\n getCoverTypeValues() {\r\n const formatedCoverTypes = [];\r\n this.coverTypes.forEach(coverType => {\r\n if(coverType.name || coverType.Name)\r\n formatedCoverTypes.push({ Covers: coverType.value, CoverTypeId: coverType.id, Name: coverType.name || coverType.Name, Price: coverType?.price });\r\n });\r\n return formatedCoverTypes;\r\n }\r\n\r\n getFormattedCoverTypeValues() {\r\n const formatedCoverTypes = [];\r\n this.coverTypes.forEach(coverType => {\r\n formatedCoverTypes.push({ value: +coverType?.Covers || +coverType?.value, id: coverType?.CoverTypeId || coverType?.id, name: coverType?.CoverTypeName || coverType?.name, price: coverType?.Price });\r\n });\r\n this.coverTypes = formatedCoverTypes;\r\n }\r\n\r\n getFormattedBookingTypeValues() {\r\n const formatedBookingTypes = [];\r\n this.bookingTypes.forEach(bookType => {\r\n formatedBookingTypes.push(\r\n { value: +bookType?.BookingTypes, id: bookType?.BookingTypeId, name: bookType?.Name }\r\n );\r\n });\r\n this.bookingTypes = formatedBookingTypes;\r\n }\r\n\r\n getBookingTypeValues() {\r\n const formatedBookingTypes = [];\r\n this.bookingTypes.forEach(bookType => {\r\n formatedBookingTypes.push(\r\n { BookingTypes: bookType.value, BookingTypeId: bookType.id, Name: bookType.name }\r\n );\r\n });\r\n return formatedBookingTypes;\r\n }\r\n\r\n getSlotsObj() {\r\n const resSlots = [];\r\n this.selectedTimeSlots = [];\r\n\r\n this.sessionSlotsAvailableDates.forEach(availableDate => {\r\n\r\n let sessionsSelected = availableDate.AvailableSessions\r\n .filter(session => session.isChecked);\r\n sessionsSelected.forEach(element => {\r\n this.selectedTimeSlots.push({\r\n SessionId: element.SessionId,\r\n Start: element.Start,\r\n End: element.End,\r\n Date: availableDate.AvailableDate\r\n });\r\n });\r\n sessionsSelected = sessionsSelected.map(session => session.SessionId);\r\n\r\n if (sessionsSelected.length) {\r\n resSlots.push({ Date: availableDate.AvailableDate, SessionIds: sessionsSelected });\r\n }\r\n });\r\n return resSlots;\r\n }\r\n\r\n getSessionGroupId() {\r\n if (!this.isSessionClass) {\r\n if (!this.selectedClassSchedule.length && this.selectedActivityData) {\r\n return this.selectedActivityData.SessionGroupId;\r\n } else if (this.selectedClassSchedule.length) {\r\n return this.selectedClassSchedule.find(item => item)[0].SessionGroupId;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n isCheckCartExisting() {\r\n let alreadyExist = -1;\r\n const cartObj = this.activityService.getSessionData('CartList_' + this.activityService.restaurantMerchantCode, true);\r\n\r\n cartObj.forEach((eachItem, index) => {\r\n if (eachItem.isDining || eachItem.isNonDining) {\r\n if (new Date(this.currentFromDate).toDateString() === new Date(eachItem.LocalTime).toDateString()\r\n && ((this.showSpecialEvent && eachItem.LocalTime === this.checkedDiningLocalTime && eachItem?.SpecialMealId === this.selectedActivityData?.Id)\r\n || (!this.showSpecialEvent && eachItem.LocalTime === this.checkedDiningLocalTime && !eachItem?.SpecialMealId))) {\r\n alreadyExist = index;\r\n }\r\n } else {\r\n const checkedItems = [];\r\n this.sessionSlotsAvailableDates.forEach(availableDate => {\r\n const sessionsSelected = availableDate.AvailableSessions\r\n .filter(session => session.isChecked);\r\n sessionsSelected.forEach(element => {\r\n checkedItems.push(element.SessionId);\r\n });\r\n });\r\n console.log(checkedItems);\r\n console.log(eachItem.SelectedTimeSlots[0].SessionId);\r\n if (checkedItems.indexOf(eachItem.SelectedTimeSlots[0].SessionId) !== -1) {\r\n alreadyExist = index;\r\n }\r\n }\r\n });\r\n\r\n return alreadyExist;\r\n }\r\n\r\n addToCart(continueClicked = false) { // For adding To Cart\r\n if(!this.addToCartEnableForTaxType){\r\n this.addtoCartValidation(this.ts.instant('addToCartValidationMsg'));\r\n return;\r\n }\r\n this.storeFilters();\r\n console.log(this.notesOptions);\r\n const updateCartIndex = this.isCheckCartExisting();\r\n this.setBookingData();\r\n if (this.isEdit) {\r\n this.activityService.SaveBookingObj.Id = this.activityService.editData.Id;\r\n this.guestContactValidation = false;\r\n this.activityService.validateCartItem(this.activityService.SaveBookingObj).subscribe(data => {\r\n this.guestContactValidation = true;\r\n if (data?.ValidationMessages.filter(msg => msg.Type == ValidationMessageType.Error).length === 0 && !data?.ExceptionMessage) {\r\n this.validateCartItemApiSuccessHandler(continueClicked, updateCartIndex);\r\n } else {\r\n this.bookingErrorHandler(data?.ExceptionMessage\r\n || data?.ValidationMessages?.filter(msg => msg.Type == ValidationMessageType.Error)[0]?.Message\r\n || this.ts.instant('errorWhileCreatingReservation'), (data?.ValidationMessages || []), continueClicked, updateCartIndex);\r\n }\r\n });\r\n }\r\n else {\r\n this.guestContactValidation = false;\r\n if(this.activityService.SaveBookingObj?.Contact){\r\n sessionStorage.setItem('guest_contact' , JSON.stringify(this.activityService.SaveBookingObj.Contact));\r\n }\r\n this.activityService.validateCartItem(this.activityService.SaveBookingObj).subscribe(data => {\r\n this.guestContactValidation = true;\r\n this.proceedAddToCart(continueClicked, updateCartIndex);\r\n if (continueClicked) {\r\n this.activityService.lockMultiPropertySessionsfn(this.activityService.restaurantMerchantCode);\r\n }\r\n else {\r\n this.activityService.navigateToPage();\r\n }\r\n });\r\n }\r\n }\r\n\r\n validateCartItemApiSuccessHandler(continueClicked, updateCartIndex) {\r\n this.proceedAddToCart(continueClicked, updateCartIndex);\r\n this.activityService.lockMultiPropertySessionsfn(this.activityService.restaurantMerchantCode);\r\n this.finishReservationClicked = false;\r\n }\r\n\r\n bookingErrorHandler(errorText: string, ValidationMessages: any[], continueClicked, updateCartIndex) {\r\n\r\n const isOverlapBookError = ValidationMessages?.filter(x => x.Type == 2).length ? true : false;\r\n if (isOverlapBookError) {\r\n errorText = ValidationMessages.find(x => x.Type == 2)?.Message || this.ts.instant('errorWhileCreatingReservation');\r\n }\r\n\r\n const popUpMessage = [{\r\n confirmationMessage: errorText,\r\n dialogTitle: this.ts.instant('warningText'),\r\n showAlert: true,\r\n isScrolable: true\r\n }];\r\n const height = '330px';\r\n const componentDetails: ComponentDetails = Utilities.setComponentDetails(PopupMessageComponent, 'small', '', popUpMessage,\r\n popUpMessage[0].dialogTitle);\r\n const bookingErrorDialogRef = this.activityService.openCustomPopup(componentDetails, ComponentTypes.clearCart, '400px', height, true, '',\r\n this.getErrorDialogPrimaryBtnLabel(isOverlapBookError), this.getErrorDialogSecondryBtnLabel(isOverlapBookError), true, '90vw');\r\n bookingErrorDialogRef.afterClosed().subscribe(data => {\r\n if (data.ok && !isOverlapBookError) {\r\n this.activityService.navigateToUrl('list');\r\n } else if (data.ok && isOverlapBookError) {\r\n this.activityService.bShowOverbookingErrorDialog = true;\r\n this.validateCartItemApiSuccessHandler(continueClicked, updateCartIndex);\r\n return;\r\n }\r\n this.activityService.bShowOverbookingErrorDialog = false;\r\n });\r\n }\r\n\r\n getErrorDialogPrimaryBtnLabel(isOverlapBookError: boolean) {\r\n if (isOverlapBookError)\r\n return this.ts.instant('Yes');\r\n else if (this.isEdit)\r\n return this.ts.instant('retryUpdate');\r\n else\r\n return this.ts.instant('bookAgain');\r\n }\r\n\r\n getErrorDialogSecondryBtnLabel(isOverlapBookError: boolean) {\r\n if (isOverlapBookError)\r\n return this.ts.instant('No');\r\n else\r\n return this.ts.instant('cancel');\r\n }\r\n\r\n proceedAddToCart(continueClicked, updateCartIndex) {\r\n let cartObj = this.activityService.getSessionData('CartList_' + this.activityService.restaurantMerchantCode, true);\r\n let cartLockObj = this.activityService.getSessionData('CartLockList_' + this.activityService.restaurantMerchantCode, true);\r\n if (updateCartIndex >= 0) {\r\n const sessionFromCart = JSON.parse(JSON.stringify(cartObj[updateCartIndex]));\r\n delete sessionFromCart.Slot?.LockId;\r\n delete sessionFromCart.Sessions?.LockId;\r\n const saveBookingObj = JSON.parse(JSON.stringify(this.activityService.SaveBookingObj));\r\n delete saveBookingObj.Slot?.LockId;\r\n delete saveBookingObj.Sessions?.LockId;\r\n if (JSON.stringify(sessionFromCart) === JSON.stringify(saveBookingObj)) {\r\n if (!continueClicked) {\r\n this.activityService.\r\n openSnackBar(this.ts.instant('itemAlreadyinCart'),\r\n this.ts.instant('close'), this.activityService.ConfigSettings.snackBarTime);\r\n }\r\n return false;\r\n }\r\n cartObj[updateCartIndex] = this.activityService.SaveBookingObj;\r\n cartLockObj[updateCartIndex] = this.activityService.SessionBookingObj;\r\n } else {\r\n if (cartLockObj?.length && cartObj?.length) {\r\n cartObj.push(this.activityService.SaveBookingObj); // this is used for bookink obj payload\r\n cartLockObj.push(this.activityService.SessionBookingObj); // this is used for cartLock payload\r\n } else {\r\n cartObj = [];\r\n cartLockObj = [];\r\n cartObj.push(this.activityService.SaveBookingObj);\r\n cartLockObj.push(this.activityService.SessionBookingObj);\r\n }\r\n }\r\n this.activityService.setSessionData('CartList_' + this.activityService.restaurantMerchantCode, cartObj, true);\r\n this.activityService.setSessionData('CartLockList_' + this.activityService.restaurantMerchantCode, cartLockObj, true);\r\n this.activityService.getCartCount();\r\n let isDining = this.activityService.isDining;\r\n if (this.activityService.operation !== operationType.edit) {\r\n this.activityService.\r\n openSnackBar(updateCartIndex === -1 ? this.ts.instant(isDining ? 'diningaddedToCartSuccessfully' : 'addedToCartSuccessfully') :\r\n this.ts.instant(isDining ? 'diningupdatedToCartSuccessfully' : 'updatedToCartSuccessfully'),\r\n this.ts.instant('close'), this.activityService.ConfigSettings.snackBarTime);\r\n }\r\n const crypto = window.crypto;\r\n const array = new Uint32Array(1);\r\n this.activityService.CartBookingList$.next(crypto.getRandomValues(array));\r\n this.uncheckSelectedSession();\r\n this.resetNotes();\r\n this.activityService.showGuestFields = false;\r\n }\r\n\r\n setBookingData() {\r\n this.activityService.SessionBookingObj = new SessionBookingDTO(\r\n null,\r\n this.selectedActivityData?.SpecialMealId || this.activityService?.editData?.SpecialMealId ||null,\r\n this.selectedActivityData?.ClassType || 0,\r\n this.currentFromDate,\r\n this.currentToDate,\r\n (this.activityService.isDining || !this.currentLocations) ? this.currentLocations : (typeof (this.currentLocations) == 'object' ? this.currentLocations : [this.currentLocations]),\r\n [this.activityService.isDining ? this.activityService.selectedDining.LocationName : this.activityService.selectedNonDining.LocationName],\r\n (this.activityService.isDining || !this.currentInstructors) ? this.currentInstructors : (typeof (this.currentInstructors) == 'object' ? this.currentInstructors : [this.currentInstructors]),\r\n this.overAllBookingSize,\r\n '',\r\n this.getCoverTypeValues(),\r\n this.getBookingTypeValues(),\r\n this.getSlotsObj(),\r\n this.getSessionGroupId(),\r\n !this.activityService.isDining && !this.activityService.isNonDining ? this.activityService.selectedActivities.restaurantWidgetId : !this.activityService.isNonDining ? this.activityService.selectedDining.RestaurantId : this.activityService.selectedNonDining.RestaurantId,\r\n this.selectedSeatingArea || this.selectedSeatingArea == 0 ? (!this.activityService.isNonDining ? this.selectedSeatingArea : this.getOpenBookingSelectedSeatingArea()) : null,\r\n this.selectedSeatingType || this.selectedSeatingType == 0 ? (!this.activityService.isNonDining ? this.selectedSeatingType : this.getOpenBookingSelectedSeatingType()) : null,\r\n this.activityService.isDining ? this.checkedDiningLocalTime : this.checkedNonDiningLocalTime,\r\n this.isCommunalTable\r\n );\r\n this.activityService.SessionBookingObj.CartId = (Utilities.getRandomDecimal() + 1).toString(36).substring(7);\r\n if (!this.isSessionClass) {\r\n this.activityService.SelectedClassSchedule$.next(this.selectedClassSchedule);\r\n }\r\n if (this.isEdit && this.activityService.editData?.Notes) {\r\n this.activityService.SessionBookingObj.Notes = this.activityService.editData.Notes;\r\n }\r\n this.activityService.SessionBookingObj.AvailabilityCriteria =\r\n this.getAvailabilityCriteria(this.currentLocations, this.currentInstructors);\r\n this.createSaveRequestObject();\r\n }\r\n\r\n createSaveRequestObject() {\r\n const bookingData = this.activityService.SessionBookingObj;\r\n var ContactObj = {} as FullContactDTO;\r\n ContactObj = Object.assign(ContactObj, this.guestContact);\r\n if (this.noteType === NoteType.guestNote) {\r\n ContactObj.Notes = this.getCategoryPreferencesNotes(NoteType.guestNote, this.notesOptions);\r\n }\r\n if (!ContactObj.MarketingOptedIn) {\r\n ContactObj.MarketingOptedIn = this.activityService.isDining ? this.marketingFlag : null;\r\n }\r\n if (this.guestContact.SecondaryContactsList?.length) {\r\n this.guestContact.SecondaryContactsList?.map(x => {\r\n x.Notes = this.getCategoryPreferencesNotes(NoteType.guestNote, x.Notes);\r\n });\r\n ContactObj.SecondaryContactsList = this.guestContact.SecondaryContactsList;\r\n }\r\n console.log(this.selectedActivityData)\r\n let currentEditItem: any = {};\r\n currentEditItem = !this.activityService.isDining && !this.activityService.isNonDining\r\n ? this.activityService?.selectedActivities : !this.activityService.isDining ? this.activityService?.selectedNonDining : this.activityService?.selectedDining;\r\n let bookingTypeDetails = {} as BookingTypeInfo;\r\n bookingTypeDetails.BookingGuestType = this.selectedBookingType;\r\n bookingTypeDetails.Input = this.confirmationNumber;\r\n\r\n this.activityService.SaveBookingObj = {\r\n CartId: (Utilities.getRandomDecimal() + 1).toString(36).substring(7),\r\n Id: this.isEdit ? this.activityService.editData?.Id : null,\r\n Size: bookingData.BookingSize,\r\n RemindAboutVisit: false,\r\n RemindAboutVisitEmail: false,\r\n AgreedWithTermsOfUse: true,\r\n Contact: ContactObj,\r\n Slots: !this.activityService.isNonDining ? this.getSlotsObj() : this.getOpenBookingSlots(),\r\n Slot: !this.activityService.isNonDining ? this.getRequestObjectSlot() : (this.getOpenBookingSlots()[0] || {}),\r\n Sessions: !this.activityService.isNonDining ? this.getRequestObjectSlots() : null,\r\n PartyId: null,\r\n SeatingAreaId: this.selectedSeatingArea || null,\r\n SeatingTypeId: this.selectedSeatingType || null,\r\n LocalTime: this.activityService.isNonDining ? this.checkedNonDiningLocalTime : this.checkedDiningLocalTime,\r\n SeatingTime: this.activityService.isNonDining ? this.checkedNonDiningLocalTime : this.checkedDiningLocalTime,\r\n isDining: this.activityService.isDining,\r\n isNonDining: this.activityService.isNonDining,\r\n Notes: this.noteType === NoteType.partyNote ? this.getCategoryPreferencesNotes(NoteType.partyNote, this.notesOptions) : this.getNotes(),\r\n TableIds: !this.activityService.isNonDining ? bookingData.Location : this.activityService.selectedNonDiningLocation.map(({ Id }) => (Id)),\r\n InstructorIds: bookingData.StaffId,\r\n CoverTypes: this.sizeMapping?.sizes || bookingData.GuestTypes,\r\n BookingTypes: bookingData.BookingTypes,\r\n IsCommunalTable: this.isCommunalTable,\r\n FromWebsite: true,\r\n Language: 0,\r\n ReservationAttemptId: null,\r\n waiverFormTransactionId: null,\r\n BookingContacts: this.guestContact?.SecondaryContactsList?.length ? this.guestContact.SecondaryContactsList : null,\r\n BookingBehavior: !this.activityService.isDining && !this.activityService.isNonDining ? BookingBehavior.ClassOrSession : BookingBehavior.OpenBooking,\r\n SpecialMealId: bookingData.ActivityId,\r\n StaffId: bookingData.StaffId,\r\n StaffIds: bookingData.StaffId,\r\n StartDate: !this.activityService.isDining && !this.activityService.isNonDining ? (moment(bookingData.FromDate).format()).split('+')[0] : this.activityService.isNonDining ? (moment(this.checkedNonDiningLocalTime).format()).split('+')[0] : null,\r\n EndDate: !this.activityService.isDining && !this.activityService.isNonDining ? (moment(bookingData.ToDate).format()).split('+')[0] : this.activityService.isNonDining ? (moment(this.checkedNonDiningLocalTime).format()).split('+')[0] : null,\r\n SelectedSchedule: this.selectedClassSchedule,\r\n SelectedTimeSlots: this.selectedTimeSlots,\r\n SessionGroupId: bookingData.SessionGroupId,\r\n SelectedActivityInfo: this.getSelectedItemInfo(currentEditItem),\r\n PropertyId: !this.activityService.isDining && !this.activityService.isNonDining ? this.activityService.selectedActivities.restaurantWidgetId : !this.activityService.isNonDining ? this.activityService.selectedDining.RestaurantId : this.activityService.selectedNonDining.RestaurantId,\r\n AllowAdditionalGuest: !this.activityService.isDining && !this.activityService.isNonDining ? this.selectedActivityData?.AllowAdditionalGuestDetails : currentEditItem.WidgetCustomization?.ConfirmationVia,\r\n DoesRequirePrepayment: this.selectedActivityData?.DoesRequirePrepayment,\r\n Price: this.selectedActivityData?.Price,\r\n ConfirmationVia: !this.activityService.isDining && !this.activityService.isNonDining ? this.activityService?.selectedActivities?.ConfirmationVia : !this.activityService.isNonDining ? this.activityService?.selectedDining?.ConfirmationVia : this.activityService?.selectedNonDining?.ConfirmationVia,\r\n AddOns: Utilities.getSelectedAddOns(this.activityService.addOnList),\r\n isBookingApiRequest: true,\r\n BookingTypeInfo :bookingTypeDetails\r\n \r\n // selectedNonDiningLocation: this.activityService.selectedNonDiningLocation[0]\r\n };\r\n\r\n if (this.activityService.SaveBookingObj?.isNonDining && this.activityService.SaveBookingObj?.TableIds?.length) {\r\n this.activityService.SaveBookingObj.UserSelectedTable = true;\r\n }\r\n }\r\n\r\n getSelectedItemInfo(currentEditItem) {\r\n return {\r\n ActivityTypeId: this.selectedActivityData?.ActivityTypeId,\r\n Name: this.selectedActivityData?.Name,\r\n OperationCurrency: !this.activityService.isDining ? this.selectedActivityData?.OperationCurrency : currentEditItem?.OperationCurrency,\r\n CustomTermsOfService: !this.activityService.isDining ? this.selectedActivityData?.WidgetCustomization?.CustomTermsOfService : currentEditItem.WidgetCustomization?.CustomTermsOfService,\r\n IsSmsReminderSupported: !this.activityService.isDining ? this.selectedActivityData?.IsSmsReminderSupported : currentEditItem?.IsSmsReminderSupported,\r\n IsReservationReminderMandatory: !this.activityService.isDining ? this.selectedActivityData?.IsReservationReminderMandatory : currentEditItem.WidgetCustomization?.IsReservationReminderMandatory,\r\n ConfirmationVia: !this.activityService.isDining ? this.selectedActivityData?.ConfirmationVia : currentEditItem.WidgetCustomization?.ConfirmationVia,\r\n RestaurantName: currentEditItem.RestaurantName\r\n };\r\n }\r\n\r\n getRequestObjectSlots() {\r\n const bookingData = this.activityService.SessionBookingObj;\r\n const sessionClass = this.activityService.SessionBookingObj.ClassType === ClassType.Session;\r\n\r\n return {\r\n LockId: this.lockResponse?.SlotLockIdDTO?.Id,\r\n Sessions: sessionClass ? bookingData.Slots : [],\r\n SessionGroupId: sessionClass ? null : bookingData.SessionGroupId\r\n };\r\n }\r\n\r\n getRequestObjectSlot() {\r\n const bookingData: SessionBookingDTO = this.activityService.SessionBookingObj;\r\n\r\n return {\r\n Time: (moment(bookingData.FromDate).format()).split('+')[0],\r\n LockId: this.lockResponse?.SlotLockIdDTO?.Id,\r\n Type: !this.activityService.isDining ? bookingData.AvailabilityCriteria : 4\r\n };\r\n }\r\n\r\n addtoCartValidation(Message: string) {\r\n const popUpMessage = [{\r\n confirmationMessage: Message,\r\n dialogTitle: '',\r\n showAlert: true\r\n }];\r\n const componentDetails: ComponentDetails = Utilities.setComponentDetails(PopupMessageComponent, 'small', '', popUpMessage,\r\n popUpMessage[0].dialogTitle);\r\n let addtoCartValidation = this.openCustomPopup(componentDetails, ComponentTypes.financialEffectCalculation, '450px', '300px', true, 'No', 'Ok',\r\n 'Cancel', false)\r\n }\r\n\r\n proceedMultiBooking(continueClicked = false) {\r\n if(!this.addToCartEnableForTaxType){\r\n this.addtoCartValidation(this.ts.instant('addToCartValidationMsg'));\r\n return;\r\n }\r\n if (this.finishReservationClicked) {\r\n return;\r\n }\r\n this.finishReservationClicked = true;\r\n if (this.activityService.operation === operationType.edit) {\r\n this.activityService.emptyCartData();\r\n }\r\n if (!this.checkedItem && this.activityService.getCartCount() === 0) {\r\n this.activityService.\r\n openSnackBar(this.ts.instant('addItemstoCarttoProceed'), this.ts.instant('close'), this.activityService.ConfigSettings.snackBarTime);\r\n this.finishReservationClicked = false;\r\n return false;\r\n }\r\n if (this.checkedItem) {\r\n this.addToCart(continueClicked);\r\n }\r\n }\r\n\r\n lockMultiPropertySessions() {\r\n const modifiedLockCart = this.activityService.formCartLockPayLoad(this.activityService.restaurantMerchantCode);\r\n this.activityService.startLoader();\r\n this.subscriptions.add(\r\n this.activityService\r\n .lockMultiPropertySessions(modifiedLockCart).subscribe(response => {\r\n this.activityService.stopLoader();\r\n this.activityService.lockMultipleResult = response.Payload;\r\n this.activityService.setLockIdsResponse(response.Payload, this.activityService.restaurantMerchantCode);\r\n this.activityService.operation === operationType.edit ? this.activityService.navigateToUrl('order-summary/edit/' + this.activityService.restaurantWidgetId) : this.activityService.navigateToUrl('order-summary');\r\n })\r\n );\r\n }\r\n\r\n unLockMultiCart(CartLockList , modifiedLockCart) {\r\n if (modifiedLockCart?.length > 0 && CartLockList.length > 0) {\r\n this.activityService.startLoader();\r\n this.subscriptions.add(\r\n this.activityService\r\n .unLockMultiPropertySessions(modifiedLockCart).subscribe(response => {\r\n this.activityService.stopLoader();\r\n this.activityService.lockMultipleResult = null;\r\n this.checkDataPresent();\r\n }, err => {\r\n this.activityService.stopLoader();\r\n })\r\n );\r\n }\r\n }\r\n setNotesData(notesData) {\r\n this.toggleSelection(notesData.chip, notesData.noteOptions)\r\n }\r\n\r\n toggleSelection(chip: MatChip, noteOptions) {\r\n noteOptions.selected = !noteOptions.selected;\r\n chip.toggleSelected();\r\n }\r\n\r\n addCategoryPreferencesNotes(noteType: NoteType, notes?, isSecondary?: boolean) {\r\n let notesData = [];\r\n\r\n let notesPreferencesCategories = [];\r\n let restaurantId = 0;\r\n\r\n notesPreferencesCategories = !this.activityService.isDining && !this.activityService.isNonDining ? this.activityService?.selectedActivities?.PreferencesCategories\r\n : this.activityService.isNonDining ? this.activityService?.selectedNonDining?.PreferencesCategories : this.activityService?.selectedDining?.PreferencesCategories;\r\n restaurantId = !this.activityService.isDining && !this.activityService.isNonDining ? this.selectedActivityData?.restaurantWidgetId\r\n : this.activityService.isNonDining ? this.activityService.selectedNonDining?.RestaurantId : this.activityService.selectedDining?.RestaurantId;\r\n\r\n if (restaurantId && notesPreferencesCategories && notesPreferencesCategories.length > 0) {\r\n notesPreferencesCategories.forEach(category => {\r\n if (category.IncludeInWebReservation) {\r\n let predefinedNotes = [];\r\n let freeTextIdValue;\r\n if (category.SubCategories && category.SubCategories.length > 0) {\r\n category.SubCategories.forEach(x => {\r\n let predefinedNoteOptions = noteType === NoteType.guestNote ? x?.PredefinedContactNote : x?.PredefinedPartyNote;\r\n if (predefinedNoteOptions) {\r\n predefinedNoteOptions.forEach(note => {\r\n if (note.Text.toLowerCase() === \"others\") {\r\n freeTextIdValue = note.Id;\r\n this.freeTextIdList.push(freeTextIdValue);\r\n } else {\r\n let noteMappingList = noteType === NoteType.guestNote ? note.PredefinedContactNotePropertyMapping : note.PredefinedPartyNotePropertyMapping;\r\n noteMappingList = noteMappingList.filter(x => x.PropertyId === restaurantId).map(x => noteType === NoteType.guestNote ? x.PredefinedContactNoteId : x.PredefinedPartyNoteId);\r\n if (noteMappingList.find(x => x === note.Id)) { predefinedNotes.push(note) }\r\n }\r\n });\r\n }\r\n this.freeTextIdList = [...new Set(this.freeTextIdList)];\r\n })\r\n };\r\n let inputOptions: any = {};\r\n if (predefinedNotes && predefinedNotes.length > 0) {\r\n inputOptions.text = predefinedNotes[0]?.Category;\r\n inputOptions.checkBoxOptions = predefinedNotes.map(x => { return { id: x.Id, value: x.Text, selected: false, icon: x.Icon } });\r\n if (freeTextIdValue) {\r\n inputOptions.commentsBox = {\r\n id: freeTextIdValue,\r\n value: ''\r\n }\r\n }\r\n if (this.activityService.operation === operationType.edit && notes?.length > 0) {\r\n let noteEditData = noteType == NoteType.partyNote ? this.activityService.editData.Notes : this.activityService.editData.Contact.Notes;\r\n if (isSecondary) {\r\n noteEditData = notes;\r\n }\r\n noteEditData?.forEach(note => {\r\n if (note.Type == PartyNoteType.PromoCode && note.Text) {\r\n this.promoCodeDetail = note.Text;\r\n }\r\n inputOptions.checkBoxOptions = inputOptions.checkBoxOptions.map(x => { return (x.id === note.RelatedId && note.Text) ? { id: x.id, value: x.value, selected: true, icon: x.icon } : x });\r\n if (inputOptions?.commentsBox?.id === note.RelatedId && note.Text && inputOptions?.commentsBox?.value) {\r\n inputOptions.commentsBox.value = note.Text;\r\n }\r\n });\r\n }\r\n notesData.push(inputOptions);\r\n }\r\n }\r\n });\r\n }\r\n return notesData;\r\n }\r\n\r\n resetNotes() {\r\n this.notesOptions.forEach(note => {\r\n if (note.checkBoxOptions && note.checkBoxOptions?.length) {\r\n note.checkBoxOptions = note.checkBoxOptions.map(x => { return { id: x.id, value: x.value, selected: false, icon: x.icon } });\r\n }\r\n if (note.commentsBox) {\r\n note.commentsBox.value = '';\r\n }\r\n });\r\n }\r\n\r\n getCategoryPreferencesNotes(noteType: NoteType, notesData) {\r\n let notes = [];\r\n notes = notes.concat(this.getNotes());\r\n if (notesData && notesData.length > 0) {\r\n notesData.forEach(eachNotes => {\r\n let existingCheckboxId;\r\n let existingCommentboxId;\r\n eachNotes.checkBoxOptions?.forEach(eachCheckbox => {\r\n if (this.activityService.operation == operationType.edit) {\r\n let editNote = noteType == NoteType.guestNote ? this.activityService.editData?.Contact?.Notes : this.activityService.editData?.Notes;\r\n if (editNote) {\r\n existingCheckboxId = editNote.filter(x => x.RelatedId == eachCheckbox.id)[0];\r\n existingCommentboxId = editNote.filter(x => x.RelatedId == eachNotes?.commentsBox?.id)[0];\r\n }\r\n }\r\n if (eachCheckbox.selected) {\r\n notes.push({\r\n RelatedId: eachCheckbox.id,\r\n Text: eachCheckbox.value,\r\n Id: existingCheckboxId && existingCheckboxId.Id ? existingCheckboxId.Id : null,\r\n Icon: eachCheckbox.icon,\r\n Type: noteType == NoteType.partyNote ? PartyNoteType.PredefinedNote : null\r\n });\r\n }\r\n });\r\n if (eachNotes?.commentsBox?.id && eachNotes?.commentsBox?.value) {\r\n notes.push({\r\n RelatedId: eachNotes.commentsBox.id,\r\n Text: eachNotes.commentsBox.value,\r\n Id: existingCommentboxId && existingCommentboxId.Id ? existingCommentboxId.Id : null,\r\n Type: noteType == NoteType.partyNote ? PartyNoteType.FreeFormNote : null\r\n });\r\n }\r\n });\r\n }\r\n return notes;\r\n }\r\n\r\n getNotes() {\r\n const notes = [];\r\n // Map Promocode Value\r\n if (this.promoCodeDetail) {\r\n const promoCode = { Type: 3, Text: this.promoCodeDetail };\r\n notes.push(promoCode);\r\n }\r\n return notes;\r\n }\r\n backToSlotSelect() {\r\n this.activityService.showGuestFields = false;\r\n }\r\n navigateGuestData() {\r\n if(this.activityService.isNonDining && !this.durationList.find(durationOption => durationOption.value === this.durationControl.value)){\r\n this.activityService.\r\n openSnackBar(this.ts.instant('Select valid duration'), this.ts.instant('close'), this.activityService.ConfigSettings.snackBarTime);\r\n return;\r\n }\r\n let cartList = this.activityService.getSessionData('CartList_' + this.activityService.restaurantMerchantCode, true);\r\n let guestContact;\r\n if (this.activityService.editData?.Contact) {\r\n guestContact = this.activityService.editData?.Contact;\r\n let notes = this.noteType == NoteType.partyNote ? this.activityService.editData.Notes : this.activityService.editData.Contact.Notes;\r\n this.notesOptions = this.addCategoryPreferencesNotes(this.noteType, notes);\r\n guestContact.SecondaryContacts = this.activityService.editData?.BookingContacts?.length ? this.activityService.editData?.BookingContacts : [];\r\n } else {\r\n if (cartList && cartList.length) {\r\n guestContact = cartList.filter((cart) => cart.PropertyId == this.selectedActivityData?.RestaurantId)[0]?.Contact;\r\n guestContact = guestContact ? guestContact : cartList[0].Contact;\r\n let notes = this.noteType == NoteType.partyNote ? cartList[0].Notes : guestContact.Notes;\r\n this.notesOptions = this.addCategoryPreferencesNotes(this.noteType, notes);\r\n guestContact.SecondaryContacts = cartList[0].SecondaryContacts;\r\n }\r\n }\r\n if (guestContact?.SecondaryContacts?.length) {\r\n guestContact?.SecondaryContacts?.forEach(contact => {\r\n contact.Notes = this.addCategoryPreferencesNotes(this.noteType, contact.Notes, true);\r\n });\r\n }\r\n if(!guestContact && sessionStorage.getItem('guest_contact')){\r\n guestContact = JSON.parse(sessionStorage.getItem('guest_contact'));\r\n }\r\n this.editContactData = guestContact;\r\n this.activityService.startLoader();\r\n this.activityService.selectedSize = this.overAllBookingSize;\r\n let restaurantId = this.activityService.isDining ? this.activityService.selectedDining.RestaurantId\r\n : this.activityService.isNonDining ? this.activityService.selectedNonDining.RestaurantId : this.activityService.selectedActivities.RestaurantId;\r\n if (restaurantId) {\r\n this.activityService.GetCustomFields(restaurantId).subscribe(data => {\r\n this.customGuestFields = data.CustomGuestField\r\n if (!this.activityService.countriesList || !this.activityService.countriesList?.length) {\r\n this.getCountries();\r\n } else {\r\n this.activityService.showGuestFields = true;\r\n // if(this.activityService.isNonDining) this.getOpenBookingAddOns();\r\n this.activityService.stopLoader();\r\n }\r\n })\r\n }\r\n }\r\n getCountries() {\r\n this.activityService.GetCountries().subscribe(data => {\r\n if (data) {\r\n this.activityService.countriesList = data;\r\n this.activityService.showGuestFields = true;\r\n this.dfs.countriesList = data;\r\n // if(this.activityService.isNonDining) this.getOpenBookingAddOns();\r\n this.activityService.stopLoader();\r\n }\r\n });\r\n }\r\n setGuestData(data) {\r\n if (data && data.guestContact) {\r\n this.guestContactValidation = data.formValid;\r\n this.guestContact = data.guestContact;\r\n this.promoCodeDetail = data.guestContact.promoCode;\r\n this.finishReservationClicked = false;\r\n }\r\n if (data?.secondaryContact?.length) {\r\n for (let contacts of data?.secondaryContact) {\r\n if (contacts.isValid && data.formValid) {\r\n this.guestContactValidation = true;\r\n }\r\n else {\r\n this.guestContactValidation = false;\r\n break;\r\n }\r\n }\r\n if (this.guestContactValidation && data.secondaryContact?.length) {\r\n this.guestContact.SecondaryContactsList = data.secondaryContact;\r\n }\r\n if(this.activityService?.editData?.BookingContacts){\r\n this.activityService.editData.BookingContacts = _.cloneDeep(this.guestContact.SecondaryContactsList)\r\n }\r\n }\r\n }\r\n\r\n\r\n // Non Dining\r\n changeNonDiningDate(nextOrPrev: string) {\r\n this.currentFromDate = new Date(this.currentFromDate);\r\n if (nextOrPrev === 'next' && this.currentFromDate < new Date(this.nonDiningMaxDate)) {\r\n this.currentFromDate = new Date(this.currentFromDate.setDate(this.currentFromDate.getDate() + 1));\r\n this.currentFromDate = this.findNextAvailableDate(this.selectedActivityData, this.currentFromDate, true);\r\n if (this.activityService.operation === operationType.edit) this.updateNonDiningSlotTime();\r\n this.checkNonDiningSessionorSlotAvailability(false, true);\r\n }\r\n else if (nextOrPrev === 'prev' && this.currentFromDate > this.activityService.currentDateTime.setHours(0, 0, 0, 0)) {\r\n this.currentFromDate = new Date(this.currentFromDate.setDate(this.currentFromDate.getDate() - 1));\r\n this.currentFromDate = this.findNextAvailableDate(this.selectedActivityData, this.currentFromDate, false);\r\n if (this.activityService.operation === operationType.edit) this.updateNonDiningSlotTime();\r\n this.checkNonDiningSessionorSlotAvailability(false, true);\r\n }\r\n }\r\n\r\n changeNonDiningBookingTypeSize(nextOrPrev: string, index: number) {\r\n if (nextOrPrev === 'next' && this.bookingTypes[index].value < this.maxSizeAllowed) {\r\n this.bookingTypes[index].value = this.bookingTypes[index].value + 1;\r\n if (this.currentBookingSize > 0) this.updateSlotReloadValue();\r\n this.checkNonDiningSessionorSlotAvailability(false, true);\r\n } else if (nextOrPrev === 'prev' && this.bookingTypes[index].value > 0) {\r\n this.bookingTypes[index].value = this.bookingTypes[index].value - 1;\r\n if (this.currentBookingSize > 0) this.updateSlotReloadValue();\r\n this.checkNonDiningSessionorSlotAvailability(false, true);\r\n }\r\n }\r\n\r\n changeNonDiningCoverTypeSize(nextOrPrev: string, index: number) {\r\n if (nextOrPrev === 'next' && this.coverTypes[index].value < this.maxSizeAllowed) {\r\n this.coverTypes[index].value = this.coverTypes[index].value + 1;\r\n if (this.currentBookingSize > 0) this.updateSlotReloadValue();\r\n this.checkNonDiningSessionorSlotAvailability(false, true);\r\n } else if (nextOrPrev === 'prev' && this.coverTypes[index].value > 0) {\r\n this.coverTypes[index].value = this.coverTypes[index].value - 1;\r\n if (this.currentBookingSize > 0) this.updateSlotReloadValue();\r\n this.checkNonDiningSessionorSlotAvailability(false, true);\r\n }\r\n }\r\n\r\n changeNonDiningPartySize(nextOrPrev: string) {\r\n if (nextOrPrev === 'next' && this.currentBookingSize < this.maxSizeAllowed) {\r\n this.currentBookingSize = this.currentBookingSize + 1;\r\n if (this.currentBookingSize > 0) this.updateSlotReloadValue();\r\n this.checkNonDiningSessionorSlotAvailability(false, true);\r\n } else if (nextOrPrev === 'prev' && this.currentBookingSize > 0) {\r\n this.currentBookingSize = this.currentBookingSize - 1;\r\n this.checkNonDiningSessionorSlotAvailability(false, true);\r\n if (this.currentBookingSize > 0) this.updateSlotReloadValue();\r\n }\r\n }\r\n\r\n changeNonDiningTimeSlots(nextOrPrev: string) {\r\n if (nextOrPrev === 'next' && this.checkedNonDiningLocalTime !== this.selectedNonDiningSlots[this.selectedNonDiningSlots.length - 1]) { this.checkedNonDiningLocalTime = this.selectedNonDiningSlots[this.selectedNonDiningSlots.findIndex(slot => slot === this.checkedNonDiningLocalTime) + 1]; }\r\n else if (nextOrPrev === 'prev' && this.checkedNonDiningLocalTime !== this.selectedNonDiningSlots[0]) { this.checkedNonDiningLocalTime = this.selectedNonDiningSlots[this.selectedNonDiningSlots.findIndex(slot => slot === this.checkedNonDiningLocalTime) - 1]; }\r\n }\r\n\r\n checkNonDiningSessionorSlotAvailability(isIntial = false, filterChanges = false, retainSessionValue = true, isReload = false) {\r\n // this.setBookingData();\r\n if (this.activityService.sessionFilterValue && Object.keys(this.activityService.sessionFilterValue)?.length !== 0 && isIntial && retainSessionValue) {\r\n this.coverTypes = this.activityService.sessionFilterValue.coverTypes;\r\n this.bookingTypes = this.activityService.sessionFilterValue.bookingTypes;\r\n this.currentFromDate = new Date(this.activityService.sessionFilterValue.currentFromDate) || \"\";\r\n this.currentToDate = new Date(this.activityService.sessionFilterValue.currentToDate) || \"\";\r\n this.currentBookingSize = this.activityService.sessionFilterValue.currentBookingSize;\r\n this.sessionSlotsAvailableDates = this.activityService.sessionFilterValue.sessionSlotsAvailableDates;\r\n this.notesOptions = this.activityService.sessionFilterValue.notes;\r\n this.selectedSeatingArea = this.activityService.sessionFilterValue.selectedSeatingArea || 0;\r\n this.selectedSeatingType = this.activityService.sessionFilterValue.selectedSeatingType || 0;\r\n this.checkedNonDiningLocalTime = this.activityService.sessionFilterValue.checkedNonDiningLocalTime;\r\n this.marketingFlag = this.activityService.sessionFilterValue.marketingFlag;\r\n this.promoCodeDetail = this.activityService.sessionFilterValue.promoCodeDetail;\r\n } else if (this.activityService.fromConfirmation && isIntial && retainSessionValue) {\r\n this.coverTypes = this.activityService?.editData?.Covers?.filter(cover => cover.CoverTypeId)?.length > 0 ? _.uniqBy(this.activityService?.editData?.Covers?.map(cover => { return { id: cover.CoverTypeId, name: cover.CoverTypeName, value: cover.Covers } }), 'id') : [];\r\n this.bookingTypes = this.activityService?.editData?.BookingTypeQuantities || this.activityService?.editData?.BookingTypes || this.bookingTypes;\r\n this.currentFromDate = this.activityService.isNonDining ? new Date(this.activityService?.editData?.ReservedFor) : new Date(this.activityService?.editData?.StartDate) || \"\";\r\n this.currentToDate = this.activityService.isNonDining ? new Date(this.activityService?.editData?.ReservedFor) : new Date(this.activityService?.editData?.EndDate) || \"\";\r\n this.currentBookingSize = this.activityService?.editData?.Size;\r\n this.checkedNonDiningLocalTime = this.activityService?.editData?.ReservedFor;\r\n this.selectedSeatingArea = this.activityService?.editData?.SeatingAreaId || 0;\r\n this.selectedSeatingType = this.activityService?.editData?.SeatingTypeId || 0;\r\n this.isCommunalTable = this.activityService?.editData?.IsCommunalTable;\r\n this.marketingFlag = this.activityService?.editData?.Contact?.MarketingOptedIn;\r\n this.selectedActivityData.CoverTypeQuantities = this.activityService?.editData?.CoverTypeQuantities;\r\n this.sessionSlotsAvailableDates = [];\r\n this.getBookingTypeValues();\r\n this.getCoverTypeValues();\r\n }\r\n this.isValidFormValues();\r\n if (this.validGroupSize && (!this.bShowLocation || isIntial || isReload || this.activityService.displayLocationType == LocationViewTypes.None)) {\r\n this.getavailableSlots(\r\n this.currentInstructors,\r\n this.currentLocations,\r\n this.currentFromDate,\r\n this.currentToDate,\r\n this.overAllBookingSize,\r\n isIntial,\r\n filterChanges\r\n );\r\n } else if (this.validGroupSize && this.bShowLocation && this.activityService.displayLocationType !== LocationViewTypes.None) {\r\n if (this.selectedNonDiningSlots.length) {\r\n this.getNonDiningLocationsApiHandler();\r\n }\r\n }\r\n }\r\n\r\n getSlotsForNonDining(reqObj, isInitial = false) {\r\n this.activityService.startLoader();\r\n this.subscriptions.add(this.activityService.GetRestaurantDateAvailability(\r\n this.selectedActivityData?.restaurantWidgetId || this.activityService.selectedNonDining?.RestaurantId || this.activityService?.selectedActivities?.RestaurantId,\r\n reqObj.BookingSize,\r\n this.isCommunalTable,\r\n true,\r\n moment(this.currentFromDate || this.activityService.currentDateTime).format('YYYY-MM-DD'),\r\n this.selectedSeatingArea ? this.selectedSeatingArea : null,\r\n this.activityService.operation === operationType.edit ? this.activityService?.editData?.Id : null,\r\n this.showSpecialEvent && +this.selectedActivityData?.SpecialMealId ? +this.selectedActivityData?.SpecialMealId : null,\r\n this.selectedSeatingType ? this.selectedSeatingType : null\r\n ).subscribe(data => {\r\n this.getSlotInitial = false;\r\n this.activityService.stopLoader();\r\n this.showAvailableDates = true;\r\n this.activityService?.selectedNonDining?.MealTabs.forEach(tab => { tab.selected = false });\r\n this.selectedNonDiningSlots = data;\r\n // && this.isTimeDropList\r\n if (isInitial && this.activityService.operation === operationType.create && this.activityService.displayLocationType !== LocationViewTypes.None) {\r\n this.checkedItem = true;\r\n this.checkedNonDiningLocalTime = this.selectedNonDiningSlots[0];\r\n this.matchedContinousSlots = [this.checkedNonDiningLocalTime];\r\n }\r\n this.originalTimeSlotList = data;\r\n this.bUpdateNonDiningBackUpData = true;\r\n this.nonDiningBackUpData = null;\r\n\r\n if (this.isEdit && this.activityService.editData?.ReservedFor) {\r\n this.checkedItem = data && data.findIndex(time => time === this.activityService.editData?.ReservedFor) !== 1 ? true : false;\r\n this.checkedNonDiningLocalTime = this.activityService.editData?.ReservedFor;\r\n this.durationControl.setValue((new Date(this.activityService.editData?.DepartureTime).getTime() - new Date(this.checkedNonDiningLocalTime).getTime()) / 60000);\r\n this.selectContinousSlots('', false);\r\n } else if (isInitial && this.activityService.sessionFilterValue?.checkedNonDiningLocalTime) {\r\n this.checkedItem = data && data.findIndex(time => time === this.activityService.sessionFilterValue.checkedNonDiningLocalTime) !== 1 ? true : false;\r\n }\r\n\r\n if (isInitial && this.activityService.displayLocationType !== LocationViewTypes.None) {\r\n if (this.selectedNonDiningSlots[0]) {\r\n this.getNonDiningLocationsApiHandler(isInitial);\r\n }\r\n this.setSelectedNonDiningSlotsDisplayText();\r\n } else if (this.bIsSlotReloadRequired || (!isInitial && this.activityService.displayLocationType !== LocationViewTypes.None)) {\r\n this.setSelectedNonDiningSlots(true, true);\r\n } else if(this.activityService.displayLocationType === LocationViewTypes.None){\r\n this.updateRateplanForSeatingType();\r\n }\r\n\r\n this.showOtherDaysAvailable();\r\n if (this.selectedNonDiningSlots.length) this.bIsSlotReloadRequired = false;\r\n else this.activityService.selectedNonDiningLocation = [];\r\n }, error => {\r\n this.getSlotInitial = false;\r\n })\r\n );\r\n }\r\n\r\n nonDiningSlotChangeListners(event) {\r\n this.setNonDiningBackUpData();\r\n if (this.checkedNonDiningLocalTime !== event || !this.bShowLocation || this.activityService.displayLocationType == LocationViewTypes.None) {\r\n this.checkedNonDiningLocalTime = (!this.isTimeDropList && this.checkedNonDiningLocalTime === event) ? '' : event;\r\n this.checkedItem = this.checkedNonDiningLocalTime === '' ? false : true;\r\n this.matchedContinousSlots = this.checkedItem ? [this.checkedNonDiningLocalTime] : [];\r\n this.selectContinousSlots('', true, true);\r\n } else {\r\n this.selectContinousSlots();\r\n }\r\n this.updateRateplanForSeatingType();\r\n }\r\n\r\n setSelectedNonDiningSlots(closePopover = true, isLocationReload?: boolean) {\r\n const matchedSlot = this.selectedNonDiningSlots.find(x => moment(x).format('hh:mm A') == moment(this.checkedNonDiningLocalTime).format('hh:mm A'));\r\n if (matchedSlot) {\r\n this.checkedNonDiningLocalTime = matchedSlot;\r\n this.selectContinousSlots('', closePopover, isLocationReload);\r\n } else {\r\n this.matchedContinousSlots = [];\r\n this.activityService.selectedNonDiningLocation = [];\r\n this.checkedItem = false;\r\n this.setSelectedNonDiningSlotsDisplayText();\r\n }\r\n }\r\n\r\n displayFn(user: any) {\r\n return user && typeof user == 'object' ? user.value : user;\r\n }\r\n\r\n private _filter(value: string): any[] {\r\n return this.durationList.filter(option => String(option.value).includes(value));\r\n }\r\n\r\n generateDurationList() {\r\n this.durationList = Array.from({ length: 5 }, (_, i) => {\r\n return { value: ((i + 1) * this.TimeSlotUnitInMinutes), displayName: `${((i + 1) * this.TimeSlotUnitInMinutes)} Min(s)` };\r\n });\r\n }\r\n\r\n changeNonDiningDuration(nextOrPrev: string) {\r\n\r\n this.setNonDiningBackUpData();\r\n\r\n if (nextOrPrev === 'next' && (Number(this.durationControl.value) + this.TimeSlotUnitInMinutes) <= this.durationList[this.durationList.length - 1].value)\r\n this.durationControl.setValue(Number(this.durationControl.value) + this.TimeSlotUnitInMinutes);\r\n else if (nextOrPrev === 'prev' && (Number(this.durationControl.value) - this.TimeSlotUnitInMinutes) >= this.TimeSlotUnitInMinutes)\r\n this.durationControl.setValue(Number(this.durationControl.value) - this.TimeSlotUnitInMinutes);\r\n\r\n if (this.activityService.displayLocationType == LocationViewTypes.None) {\r\n this.selectContinousSlots(nextOrPrev);\r\n this.updateRateplanForSeatingType();\r\n }\r\n }\r\n\r\n updateRateplanForSeatingType(){\r\n if(this.selectedSeatingType && this.matchedContinousSlots?.length){\r\n this.rateplanSupportService.getRateplanData(this.activityService.selectedNonDiningLocation[0], this.currentFromDate, this.matchedContinousSlots, this.durationControl.value, this.sizeMapping, +this.route.snapshot.params.restaurantId, this.selectedSeatingType, () => {\r\n \r\n });\r\n }else if(!this.matchedContinousSlots?.length){\r\n this.rateplanSupportService.seatingTypePriceDetail = {}\r\n }\r\n }\r\n\r\n selectContinousSlots(nextOrPrev?: string, closePopover = true, isLocationReload?: boolean) {\r\n if (this.checkedItem\r\n && ((this.durationControl.value >= this.TimeSlotUnitInMinutes\r\n || (this.durationControl.value == this.TimeSlotUnitInMinutes && nextOrPrev == 'prev'))\r\n && this.durationControl.value <= this.durationList[this.durationList.length - 1].value)) {\r\n\r\n const selectedSlotIndex = this.selectedNonDiningSlots.findIndex(x => x == this.checkedNonDiningLocalTime);\r\n if (selectedSlotIndex > -1) {\r\n\r\n const selectedDurationIndex = this.durationList.findIndex(x => x.value == this.durationControl.value);\r\n const matchedContinousSlots = this.selectedNonDiningSlots.slice(selectedSlotIndex, (selectedSlotIndex + selectedDurationIndex + 1));\r\n\r\n if (selectedDurationIndex != (matchedContinousSlots.length - 1)) {\r\n this.matchedContinousSlots = [];\r\n this.showContinousSlotErrorMsg();\r\n return;\r\n }\r\n\r\n let tempDate = moment(matchedContinousSlots[0]).toDate();\r\n for (let index = 0; index < matchedContinousSlots.length; index++) {\r\n const slot = matchedContinousSlots[index];\r\n tempDate = moment(tempDate).add(index != 0 ? this.TimeSlotUnitInMinutes : 0, 'm').toDate()\r\n if (new Date(moment(slot).toDate()).getTime() != new Date(tempDate).getTime()) {\r\n this.matchedContinousSlots = [];\r\n this.showContinousSlotErrorMsg();\r\n // this.bShowLocation = false; \r\n return;\r\n }\r\n }\r\n\r\n this.matchedContinousSlots = matchedContinousSlots;\r\n }\r\n }\r\n this.setSelectedNonDiningSlotsDisplayText();\r\n if (!nextOrPrev && this.matchedContinousSlots.length && closePopover) this.closeSlotEditPopOver(true);\r\n if (this.matchedContinousSlots.length && isLocationReload) this.isValidFormValues(isLocationReload);\r\n }\r\n\r\n showContinousSlotErrorMsg() {\r\n this.activityService.\r\n openSnackBar(this.ts.instant('SlotsNotAvailableForGivenDuration'), this.ts.instant('close'), this.activityService.ConfigSettings.snackBarTime);\r\n // if (!this.bShowLocation) {\r\n // this.matchedContinousSlots = this.matchedContinousSlots.filter(x => x !== this.checkedNonDiningLocalTime);\r\n this.checkedItem = false;\r\n if (!this.matchedContinousSlots.length) this.checkedNonDiningLocalTime = null;\r\n // this.selectedNonDiningSlotsDisplayText = null;\r\n // this.tableList = [];\r\n // }\r\n // this.durationControl.setValue(this.TimeSlotUnitInMinutes); \r\n // this.closeSlotEditPopOver();\r\n }\r\n\r\n setSelectedNonDiningSlotsDisplayText() {\r\n if (this.matchedContinousSlots[0]) {\r\n let localMoment = moment(this.matchedContinousSlots[0]);\r\n ;\r\n this.selectedNonDiningSlotsDisplayText = localMoment.locale(sessionStorage.getItem('languageCode') || DEFAULT_LANGUAGE_CODE).format('LT');\r\n if (this.matchedContinousSlots.length) {\r\n let localMoment = moment(this.matchedContinousSlots[this.matchedContinousSlots.length - 1]).add(this.TimeSlotUnitInMinutes, 'm');\r\n this.selectedNonDiningSlotsDisplayText += ` - ${localMoment.locale(sessionStorage.getItem('languageCode') || DEFAULT_LANGUAGE_CODE).format('LT')}`\r\n }\r\n } else {\r\n this.selectedNonDiningSlotsDisplayText = this.ts.instant('SelectSlot');\r\n }\r\n }\r\n\r\n setDurationControlValue(selectedDurationOption: any) {\r\n this.durationControl?.setValue(selectedDurationOption.value);\r\n this.selectContinousSlots();\r\n }\r\n\r\n highlightSelectedNonDiningSlots(slot: any) {\r\n return this.matchedContinousSlots?.filter(x => x == slot).length > 0;\r\n }\r\n\r\n showHideLocationEventHandler() {\r\n this.bShowLocation = !this.bShowLocation;\r\n if (this.bShowLocation) this.getNonDiningLocationsApiHandler();\r\n }\r\n\r\n getNonDiningLocationsApiHandler(isInitial?: boolean , isReload : boolean = false) {\r\n\r\n this.activityService.startLoader();\r\n\r\n this.activityService.selectedNonDiningLocation = [];\r\n this.tableList = [];\r\n this.activityService.nonDiningTotalSeatsSelected = 0;\r\n this.floorPlan = null;\r\n this.coverAndBookingTypeEditngPopOver?.close();\r\n\r\n if (this.activityService.displayLocationType == LocationViewTypes.LayoutView)\r\n this.activityService.getRestaurantImages(this.activityService.selectedNonDining.RestaurantId);\r\n\r\n const reqObj = this.buildNonDiningLocationApiRequest();\r\n this.subscriptions.add(this.rs.getOpenBookingLayoutData(reqObj).subscribe(response => {\r\n this.floorPlan = response.Payload.FloorPlans[0];\r\n this.activityService.stopLoader();\r\n this.tableList = response.Payload.FloorPlans[0]?.StandaloneTables.filter(x => x.IsAvailableForReservations && x.IsAvailableForBooking);\r\n let MappedSeatingTypes = [];\r\n this.tableList.forEach(x => {\r\n if (MappedSeatingTypes.findIndex(seatingTypeId => seatingTypeId == x.SeatingTypeId) < 0) {\r\n MappedSeatingTypes.push(x.SeatingTypeId);\r\n }\r\n x.seatingTypeColor = this.seatingType.find(y => y.id == x.SeatingTypeId)?.color || null;\r\n return x;\r\n })\r\n this.locationMappedSeatingTypes = MappedSeatingTypes;\r\n this.filteredTableList = JSON.parse(JSON.stringify(this.tableList));\r\n this.filterLocationList(this.selectedSeatingType, false);\r\n if (this.isEdit && isInitial) this.setSelectedLocations();\r\n if (!this.filteredTableList?.length && !isReload) {\r\n this.activityService.\r\n openSnackBar(this.ts.instant('LocationsNotAvailableForSelectedSlot'), this.ts.instant('close'), this.activityService.ConfigSettings.snackBarTime);\r\n // this.bShowLocation = false;\r\n }\r\n }));\r\n }\r\n\r\n buildNonDiningLocationApiRequest() {\r\n\r\n let selectedDate = moment(this.currentFromDate).format('YYYY-MM-DD');\r\n let startTime = moment(this.matchedContinousSlots[0]).format('HH:mm');\r\n\r\n return {\r\n RestaurantId: this.activityService.selectedNonDining.RestaurantId,\r\n TimeSlot: moment(`${selectedDate} ${startTime}`).format('YYYY-MM-DDTHH:mm:ss'),\r\n Duration: this.durationControl.value,\r\n PartySize: this.overAllBookingSize,\r\n CoverTypes: this.sizeMapping ? this.sizeMapping.sizes : this.getCoverTypeValues() ,\r\n BookingTypes: [],\r\n ReservationIdToIgnore: this.activityService.editData?.Id\r\n };\r\n }\r\n\r\n locationSelectionInMapHandler(locationCanvasObj) {\r\n let location = this.tableList.find(({ Id }) => Id === locationCanvasObj.Id);\r\n if (location) { \r\n location.PriceDetail = locationCanvasObj.PriceDetail;\r\n this.locationSelectionEventHandler(location);\r\n }\r\n }\r\n\r\n locationViewSelectionEventHandler(location){\r\n this.rateplanSupportService.getRateplanData(location, this.currentFromDate, this.matchedContinousSlots, this.durationControl.value, this.sizeMapping, +this.route.snapshot.params.restaurantId, null, () => this.locationSelectionEventHandler(location));\r\n }\r\n\r\n locationSelectionEventHandler(location: any) {\r\n \r\n if (location) {\r\n if (location.SeatingAreaId != this.selectedSeatingArea) {\r\n this.selectedSeatingArea = null;\r\n }\r\n if (location.SeatingTypeId != this.selectedSeatingType) {\r\n this.selectedSeatingType = null;\r\n }\r\n }\r\n\r\n if (this.activityService.bEnableLocationMultiSelect) {\r\n\r\n let remainingAllowedPartySize: number = 0;\r\n if (location.isSelected) {\r\n location.isSelected = false;\r\n } else {\r\n this.activityService.nonDiningTotalSeatsSelected = 0;\r\n this.activityService.selectedNonDiningLocation.forEach(x => {\r\n this.activityService.nonDiningTotalSeatsSelected += x.selectedSeats;\r\n });\r\n\r\n if (this.activityService.nonDiningTotalSeatsSelected >= this.overAllBookingSize) {\r\n const removedFirstSelectedLocation = this.activityService.selectedNonDiningLocation.splice(0, 1);\r\n const removedLocationIndex = this.tableList.findIndex(x => x.Id == removedFirstSelectedLocation[0].Id);\r\n this.tableList[removedLocationIndex].isSelected = false;\r\n this.activityService.nonDiningTotalSeatsSelected -= removedFirstSelectedLocation[0].selectedSeats;\r\n // return this.activityService.\r\n // openSnackBar(this.ts.instant('MaxPartySizeReached'), this.ts.instant('close'), this.activityService.ConfigSettings.snackBarTime);\r\n }\r\n\r\n remainingAllowedPartySize = this.overAllBookingSize - this.activityService.nonDiningTotalSeatsSelected;\r\n\r\n if (location.MinPartySize <= remainingAllowedPartySize && !location.isSelected)\r\n location.isSelected = true;\r\n else if (!location.isSelected)\r\n this.activityService.\r\n openSnackBar(this.ts.instant('PartySizeMisMatch'), this.ts.instant('close'), this.activityService.ConfigSettings.snackBarTime);\r\n }\r\n\r\n const macthedIndex = this.activityService.selectedNonDiningLocation.findIndex(x => x.Id == location.Id);\r\n if (macthedIndex < 0 && location.isSelected) {\r\n location.selectedSeats = remainingAllowedPartySize <= location.MaxPartySize ? remainingAllowedPartySize : location.MaxPartySize;\r\n this.activityService.selectedNonDiningLocation.push(location);\r\n this.activityService.nonDiningTotalSeatsSelected += location.selectedSeats;\r\n } else if (macthedIndex > -1 && !location.isSelected) {\r\n this.activityService.nonDiningTotalSeatsSelected -= location.selectedSeats;\r\n if (this.activityService.selectedNonDiningLocation.length > 1) this.activityService.selectedNonDiningLocation.splice(macthedIndex, 1);\r\n else this.activityService.selectedNonDiningLocation = [];\r\n }\r\n\r\n } else if (!this.activityService.bEnableLocationMultiSelect) {\r\n\r\n if (((location.MinPartySize <= this.overAllBookingSize && location.MaxPartySize >= this.overAllBookingSize) || !this.activityService.validateLocationSize)\r\n && !location.isSelected)\r\n location.isSelected = true;\r\n else if (!location.isSelected)\r\n this.activityService.\r\n openSnackBar(this.ts.instant('PartySizeMisMatch'), this.ts.instant('close'), this.activityService.ConfigSettings.snackBarTime);\r\n else location.isSelected = false;\r\n\r\n const macthedIndex = this.activityService.selectedNonDiningLocation.findIndex(x => x.Id == location.Id);\r\n if (macthedIndex < 0 && location.isSelected) {\r\n location.selectedSeats = this.overAllBookingSize;\r\n this.activityService.selectedNonDiningLocation = [location];\r\n this.activityService.nonDiningTotalSeatsSelected = location.selectedSeats;\r\n this.tableList.forEach(x => {\r\n if (x.Id != location.Id) {\r\n x.isSelected = false;\r\n x.selectedSeats = 0;\r\n }\r\n return x;\r\n })\r\n } else if (macthedIndex > -1 && !location.isSelected) {\r\n this.activityService.nonDiningTotalSeatsSelected = 0;\r\n this.activityService.selectedNonDiningLocation = [];\r\n }\r\n }\r\n\r\n\r\n // if(this.activityService.nonDiningTotalSeatsSelected >= this.currentBookingSize){\r\n this.filterLocationList(this.selectedSeatingType, false);\r\n // }\r\n\r\n // if (this.activityService.selectedNonDiningLocation != location) this.activityService.selectedNonDiningLocation = location;\r\n // else this.activityService.selectedNonDiningLocation = null;\r\n\r\n // const macthedIndex = this.tableList.findIndex(x => x.Id == location.Id);\r\n // if(macthedIndex > -1){\r\n // this.tableList[macthedIndex].isSelected = !this.tableList[macthedIndex].isSelected;\r\n // }\r\n\r\n this.updateIndicator = (new Date()).getTime();\r\n\r\n }\r\n\r\n editNonDiningSelectedSlots() {\r\n this.bShowLocation = false;\r\n this.tableList = [];\r\n }\r\n\r\n seatingArea_TypeFieldChangeHandler(seatType: any, valueUpdate = true, isSlotReloadRequired = false) {\r\n if ((seatType || seatType == null) && !valueUpdate) {\r\n this.loadSeatingTypes(seatType);\r\n this.selectedSeatingType = null;\r\n }\r\n if (valueUpdate) this.selectedSeatingType = this.selectedSeatingType != seatType.id ? seatType.id : null;\r\n if (this.activityService.displayLocationType !== LocationViewTypes.None)\r\n this.filterLocationList(seatType, false, isSlotReloadRequired);\r\n else\r\n this.checkNonDiningSessionorSlotAvailability(false, true);\r\n }\r\n\r\n filterLocationList(seatType: any, valueUpdate = true, isSlotReloadRequired = false) {\r\n if (valueUpdate) this.selectedSeatingType = this.selectedSeatingType != seatType.id ? seatType.id : null;\r\n if (isSlotReloadRequired) this.bIsSlotReloadRequired = true;\r\n if (this.selectedSeatingType || this.selectedSeatingArea)\r\n this.filteredTableList = this.tableList.filter(x => {\r\n return (this.selectedSeatingArea && x.SeatingAreaId == this.selectedSeatingArea) || (!this.selectedSeatingArea || !this.activityService.displaySeatingArea);\r\n }).filter(y => { return (this.selectedSeatingType && y.SeatingTypeId == this.selectedSeatingType) || (!this.selectedSeatingType || !this.activityService.displaySeatingType) });\r\n else\r\n this.filteredTableList = this.tableList;\r\n }\r\n\r\n setGuestAndCoverTypes(data, retainSessionValue) {\r\n this.selectedActivityData = data;\r\n // this.setNoteType();\r\n this.isSessionClass = this.selectedActivityData?.ClassType === ClassType.Session;\r\n this.minSizeAllowed = 1;\r\n this.coverTypes = data?.GuestTypes?.filter(guest => guest.IsRegularReservation).map(type => {\r\n return {\r\n id: type.Id,\r\n name: type.Name,\r\n value: 0\r\n };\r\n });\r\n this.activityHeadlines = data.ActivityAttributes;\r\n if (this.coverTypes?.length && !this.activityService.isNonDining) {\r\n this.coverTypes[0].value = 1;\r\n }\r\n\r\n this.bookingTypes = data?.BookingTypes?.map(type => {\r\n return {\r\n id: type.Id,\r\n name: type.Name,\r\n value: 0\r\n };\r\n });\r\n\r\n if (this.bookingTypes?.length && !this.activityService.isNonDining) {\r\n this.bookingTypes[0].value = 1;\r\n }\r\n\r\n this.calculatePartySize();\r\n\r\n // this.instructorList = this.getInstructor(data.StaffValues);\r\n // this.locationList = this.getLocations(data.LocationId);\r\n this.isMultiSlotSelection = data.EnableMultiSlotSelection;\r\n // this.venueAllocationMappings = data.AllocationTypes;\r\n this.showSessionorSlots = false;\r\n this.selectedClassSchedule = [];\r\n this.sessionSlotsAvailableDates = [];\r\n\r\n\r\n this.overAllBookingSize = this.minSizeAllowed;\r\n if (this.bookingTypes?.length) {\r\n this.bookingTypes[0].value = this.minSizeAllowed;\r\n }\r\n if (this.coverTypes?.length) {\r\n this.coverTypes[0].value = this.minSizeAllowed;\r\n }\r\n if (!this.coverTypes?.length && !this.bookingTypes?.length) {\r\n this.currentBookingSize = this.minSizeAllowed;\r\n }\r\n\r\n this.checkNonDiningSessionorSlotAvailability(true, false, retainSessionValue);\r\n\r\n }\r\n\r\n getOpenBookingSlots() {\r\n return [{ LocalTime: this.updateNonDiningSlotTime(), DurationInMinutes: this.durationControl.value, Duration: this.durationControl.value }];\r\n }\r\n\r\n closeSlotEditPopOver(clearBackUpData?: boolean) {\r\n if (this.activityService.displayLocationType == LocationViewTypes.None) return;\r\n this.slotEditngbPopOver?.close();\r\n if (clearBackUpData || (this.nonDiningBackUpData && !this.matchedContinousSlots.length))\r\n this.clearNonDiningBackUpData();\r\n }\r\n\r\n clearNonDiningBackUpData(updateValue?: boolean) {\r\n if (this.nonDiningBackUpData && !this.matchedContinousSlots.length) {\r\n this.durationControl.setValue(this.nonDiningBackUpData.duration);\r\n this.matchedContinousSlots = this.nonDiningBackUpData.slots;\r\n this.setSelectedNonDiningSlotsDisplayText();\r\n }\r\n this.nonDiningBackUpData = null;\r\n this.bUpdateNonDiningBackUpData = true;\r\n }\r\n\r\n setNonDiningBackUpData() {\r\n if (this.activityService.displayLocationType == LocationViewTypes.None) return;\r\n if (this.bUpdateNonDiningBackUpData) {\r\n this.bUpdateNonDiningBackUpData = false;\r\n this.nonDiningBackUpData = {\r\n duration: this.durationControl.value,\r\n slots: this.matchedContinousSlots\r\n };\r\n\r\n this.matchedContinousSlots = [];\r\n this.checkedItem = false;\r\n this.checkedNonDiningLocalTime = '';\r\n }\r\n }\r\n\r\n closeTypeEditPopOver() {\r\n this.coverAndBookingTypeEditngPopOver.close();\r\n }\r\n\r\n checkSlotReloadRequired() {\r\n if (this.bIsSlotReloadRequired) this.checkNonDiningSessionorSlotAvailability(false, true, true, true);\r\n }\r\n\r\n setSelectedLocations() {\r\n let location;\r\n this.activityService.editData?.TableIds?.forEach(x => {\r\n location = this.filteredTableList.find(({ Id }) => Id === x);\r\n if (location) {\r\n this.locationSelectionEventHandler(location);\r\n }\r\n });\r\n this.rateplanSupportService.getRateplanData(location, this.currentFromDate, this.matchedContinousSlots, this.durationControl.value, this.sizeMapping, +this.route.snapshot.params.restaurantId, null, () => {});\r\n }\r\n\r\n updateSlotReloadValue() {\r\n this.bIsSlotReloadRequired = true;\r\n }\r\n\r\n updateNonDiningSlotTime() {\r\n let selectedDate = moment(this.currentFromDate).format('YYYY-MM-DD');\r\n let startTime = moment(this.matchedContinousSlots[0]).format('HH:mm');\r\n\r\n return this.checkedNonDiningLocalTime = moment(`${selectedDate} ${startTime}`).format('YYYY-MM-DDTHH:mm:ss');\r\n }\r\n\r\n getOpenBookingSelectedSeatingArea() {\r\n if (this.activityService.displayLocationType !== LocationViewTypes.None) {\r\n return this.selectedSeatingArea = this.activityService.selectedNonDiningLocation[0]?.SeatingAreaId || null;\r\n }\r\n return this.selectedSeatingArea;\r\n }\r\n\r\n getOpenBookingSelectedSeatingType() {\r\n if (this.activityService.displayLocationType !== LocationViewTypes.None) {\r\n return this.selectedSeatingType = this.activityService.selectedNonDiningLocation[0]?.SeatingTypeId || null;\r\n }\r\n return this.selectedSeatingType;\r\n }\r\n\r\n getCoverTypesReservation() : void {\r\n this.coverTypes = this.activityService.selectedDining.GuestTypes?.filter(x => x.IsRegularReservation) || [];\r\n }\r\n\r\n bookingSizeChange() {\r\n if(this.route.snapshot.queryParams.activityId || this.route.snapshot.queryParams.bookaspot){\r\n this.currentBookingSize = this.getCoverTypesize();\r\n if(this.activityService.isNonDining && !this.getSlotInitial) {\r\n this.checkSessionorSlotAvailability(false, true)\r\n }\r\n if(!this.activityService.isDining && !this.activityService.isNonDining) {\r\n if(this.currentBookingSize > 0){ this.updateSlotReloadValue(); }\r\n if(!this.getSlotInitial)\r\n this.checkNonDiningSessionorSlotAvailability(false, true)\r\n }\r\n if(this.sizeMapping?.errors?.length) {\r\n this.activityService.openSnackBar(this.sizeMapping.errors[0], this.ts.instant('close'), this.activityService.ConfigSettings.snackBarTime, 'error-snackbar');\r\n }\r\n this.isValidFormValues();\r\n }\r\n }\r\n\r\n getCoverTypesize(): number {\r\n return this.sizeMapping?.sizes?.reduce((res, curr) => res + (+curr.Covers), 0);\r\n }\r\n\r\n // Non Dinning\r\n\r\n @HostListener('window:beforeunload') goToPage() {\r\n sessionStorage.setItem('isSessionComponentReload', 'true');\r\n }\r\n\r\n}\r\n\r\ninterface DataItem {\r\n Id: number;\r\n value: string;\r\n isSelected: boolean;\r\n date: string; // Keep as string for input\r\n}\r\n\r\nfunction sortByDate(arr: any[]){\r\n return arr.sort((a, b) => {\r\n return new Date(a.date).getTime() - new Date(b.date).getTime();\r\n });\r\n}\r\n\r\n\r\n@Pipe({\r\n name: 'safeHtml',\r\n})\r\nexport class SafeHtmlPipe implements PipeTransform {\r\n\r\n constructor(private sanitizer:DomSanitizer){}\r\n\r\n transform(html) {\r\n return this.sanitizer.bypassSecurityTrustHtml(html);\r\n }\r\n}\r\n\r\n\r\n","
\r\n
\r\n {{ \"orderSummary\" | translate }}\r\n
\r\n \r\n {{ \"checkYourActivityBeforeBooking\" | translate }}\r\n \r\n
\r\n\r\n
\r\n {{ \"cartLockWarningMessage\" | translate }}\r\n
\r\n
\r\n {{ infoMessage }}\r\n
\r\n
\r\n
\r\n\r\n
0\" [hidden]=\"activityService?.DisableCustomTermsAndConditions && isValidateTerms\">\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n card_travel\r\n
\r\n {{ slot.ActivityName }}\r\n
\r\n
\r\n
\r\n \r\n person\r\n
{{ slot.Size }}
\r\n
\r\n
\r\n \r\n calendar_today\r\n
\r\n {{\r\n (slot?.TimeRange?.Start\r\n ? slot?.TimeRange?.Start\r\n : slot.FormattedLocalTime\r\n )\r\n | date\r\n : \"dd MMM yyyy\"\r\n }}\r\n
\r\n
\r\n
\r\n \r\n access_time\r\n
\r\n \r\n {{\r\n (slot?.TimeRange?.Start\r\n ? slot?.TimeRange?.Start\r\n : slot.FormattedLocalTime\r\n ) | date : \"hh:mm a\"\r\n }}\r\n \r\n
\r\n
\r\n
\r\n \r\n delete\r\n \r\n
\r\n
\r\n \"agilysys-logo\"\r\n
\r\n \r\n
\r\n \r\n {{'noShowFee' | translate}}\r\n \r\n \r\n {{ operationCurrency\r\n }} {{slot.NoShowFeeAmount | number : \"1.2-2\"}}\r\n
\r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {{ _MESSAGES.Labels.description | translate }}\r\n
\r\n
\r\n
\r\n
\r\n {{ _MESSAGES.Labels.quantity | translate }}\r\n
\r\n
\r\n
\r\n
\r\n {{ _MESSAGES.Labels.grossPrice | translate }}\r\n
\r\n
\r\n
\r\n
\r\n {{ _MESSAGES.Labels.totalPrice | translate }}\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n {{ slot.ActivityName }} \r\n \r\n
\r\n
\r\n
\r\n
\r\n {{ operationCurrency\r\n }}{{\r\n (slot.SubTotal ? slot.SubTotal : 0)\r\n | currencyDecimalFormatter\r\n }}\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n {{ lineItem.Name }}\r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n {{ lineItem | groupItemByType: slot : 'Count' }}\r\n
\r\n
\r\n
\r\n
\r\n {{ operationCurrency\r\n }}\r\n {{\r\n (lineItem.PayableUnitPrice ? ( lineItem.PayableUnitPrice ) : 0) | currencyDecimalFormatter\r\n }}\r\n
\r\n
\r\n
\r\n
\r\n {{ operationCurrency\r\n }}{{\r\n (lineItem.SubTotal ? ( lineItem | groupItemByType: slot : 'SubTotal' ) : 0)\r\n | currencyDecimalFormatter\r\n }}\r\n
\r\n \r\n
\r\n\r\n
\r\n\r\n 0 || slot.Tax > 0) && ((showDetailedView && taxTypeForBooking) )\">\r\n \r\n \r\n \r\n \r\n 0 \">\r\n \r\n \r\n \r\n 0 || slot.Tax > 0) && !taxTypeForBooking\">\r\n \r\n \r\n \r\n
0\">\r\n
\r\n
\r\n {{ _MESSAGES.Labels.minRateAdjustment | translate }}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {{ operationCurrency\r\n }}{{\r\n (slot?.RatePlanTotal?.MinRateAdjustmentAmount\r\n ? slot?.RatePlanTotal?.MinRateAdjustmentAmount\r\n : 0\r\n ) | currencyDecimalFormatter\r\n }}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n {{\r\n taxTypeForBooking ? \"VAT\" : (\"Tax\" | translate)\r\n }}\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n {{ operationCurrency }}\r\n {{\r\n taxTypeForBooking\r\n ? paymentData?.VAT\r\n : (paymentData?.Tax | currencyDecimalFormatter)\r\n }}\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n {{ taxItem.ChargeName }} @ {{ taxItem.ChargeValue }}%\r\n \r\n {{ taxItem.ChargeName }}\r\n \r\n
\r\n
\r\n
\r\n
\r\n {{ operationCurrency }}\r\n {{ taxItem.Amount | currencyDecimalFormatter }}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n
\r\n
\r\n
\r\n {{\"serviceCharges\" | translate}}\r\n
\r\n
\r\n
\r\n
\r\n {{ operationCurrency }}\r\n {{ paymentData.ServiceCharge | currencyDecimalFormatter }}\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n {{ serviceItem.ChargeName }} @ {{ serviceItem.ChargeValue }}%\r\n \r\n {{ serviceItem.ChargeName }}\r\n \r\n
\r\n
\r\n
\r\n
\r\n {{ operationCurrency }}\r\n {{ serviceItem.Amount | currencyDecimalFormatter }}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {{ taxItem.ChargeName }} @ {{ taxItem.ChargeValue }}%\r\n \r\n {{ taxItem.ChargeName }}\r\n \r\n
\r\n
\r\n
\r\n
\r\n {{ operationCurrency }}\r\n {{ taxItem.Amount | currencyDecimalFormatter }}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n {{ \"noGuestsSelected\" | translate }}\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n {{ \"SubTotal\" | translate }}\r\n
\r\n
\r\n
\r\n
\r\n {{ operationCurrency }}\r\n {{ paymentData.SubTotal | currencyDecimalFormatter }}\r\n
\r\n
\r\n
\r\n
\r\n \r\n 0 && !taxTypeForBooking\r\n \">\r\n \r\n \r\n \r\n\r\n 0 && !taxTypeForBooking\">\r\n \r\n \r\n \r\n\r\n 0\">\r\n
\r\n
\r\n
\r\n {{ \"taxOnserviceCharge\" | translate }}\r\n
\r\n
\r\n
\r\n
\r\n {{ operationCurrency }}\r\n {{paymentData.TaxOnServiceChargeAmount | currencyDecimalFormatter}}\r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n\r\n \r\n\r\n 0\">\r\n
\r\n
\r\n
\r\n {{ \"serviceCharges\" | translate }}\r\n
\r\n
\r\n
\r\n
\r\n {{ operationCurrency }}\r\n {{ paymentData?.ServiceCharge | currencyDecimalFormatter }}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n {{ \"grandTotal\" | translate\r\n }}\r\n info\r\n \r\n
\r\n
\r\n
\r\n
\r\n {{ operationCurrency }}\r\n {{ (TotalAmount ? TotalAmount.valueOf() : 0) | currencyDecimalFormatter }}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {{ \"AmountPayable\" | translate\r\n }}\r\n info\r\n \r\n
\r\n
\r\n
\r\n
\r\n {{ operationCurrency }}\r\n {{ PayableAmount | currencyDecimalFormatter }}\r\n
\r\n
\r\n
\r\n
0\" class=\"px-3 m-2 d-flex flex-row justify-content-between\">\r\n
\r\n
\r\n {{ \"amountPaid\" | translate }}\r\n
\r\n
\r\n
\r\n
\r\n {{ operationCurrency\r\n }}{{\r\n (TotalAmount\r\n ? TotalAmount.valueOf() -\r\n (!refundAmount ? balanceAmount.valueOf() : 0)\r\n : 0\r\n ) | currencyDecimalFormatter\r\n }}\r\n
\r\n
\r\n
\r\n
0\" class=\"px-3 m-2 d-flex flex-row justify-content-between\">\r\n
\r\n
\r\n {{\r\n (!refundAmount ? \"balancePendingAmount\" : \"refundAmount\")\r\n | translate\r\n }}\r\n
\r\n
\r\n
\r\n
\r\n {{ operationCurrency\r\n }}{{ balanceAmount.valueOf() | currencyDecimalFormatter }}\r\n
\r\n
\r\n
\r\n
\r\n \"agilysys-logo\"\r\n
\r\n
\r\n {{ \"authCardInfoMessageInfo\" | translate }}\r\n \r\n {{ \"authCardInfoMessageOption\" | translate }}\r\n \r\n {{ \"authCardInfoMessageValue\" | translate }}\r\n
\r\n
\r\n {{ activityService.widgetSettings?.AuthorizeAndPayLaterNote }}\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n {{'saveCardToPayer' |\r\n translate}}\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n\r\n \r\n
\r\n \r\n
\r\n
\r\n {{ \"enterNecessaryDetailsForPayment\" | translate }}\r\n
\r\n
\r\n
\r\n
\r\n\r\n\r\n\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n {{ checkBoxErrorMessages }}\r\n \r\n \r\n \r\n
    1\">\r\n
  • \r\n
\r\n
\r\n
\r\n
","import { Component, HostListener, OnInit, Pipe, PipeTransform, ViewChild } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport moment from 'moment';\r\nimport { Subscription } from 'rxjs';\r\nimport { PopupMessageComponent } from 'src/app/shared/components/popup-message/popup-message.component';\r\nimport { ActionControl, AuthorizePaymentType, BookingBehavior, ComponentTypes } from 'src/app/shared/constants/commonenums';\r\nimport { ComponentDetails } from 'src/app/shared/dynamicform/models/popup.interface';\r\nimport { DynamicFormService } from 'src/app/shared/dynamicform/service/dynamic-form.service';\r\nimport {\r\n CustomFieldsDTO, FinancialEffectForUpdatedReservationDTO,\r\n PaymentGateways, PaymentStates, RegisterReservationAttemptResponseDTO, SecondaryContactDTO, FinancialEffectType, PaymentMethod, PaymentMode, PricingStrategy\r\n} from 'src/app/shared/Models/PartyModels';\r\nimport { BookingActivity } from 'src/app/shared/Models/SessionBookingDTO';\r\nimport { SlotLockResultDTO } from 'src/app/shared/Models/SlotLockModels';\r\nimport { ConfirmationVia, TaxType, operationType } from 'src/app/shared/Models/WidgetSettingsModels';\r\nimport { GuestService } from 'src/app/shared/services/guest.service';\r\nimport { Utilities } from 'src/app/shared/utilities/utilities';\r\nimport { environment } from 'src/environments/environment';\r\nimport { Validators } from '@angular/forms';\r\nimport { ValidationMessageType } from 'src/app/shared/Models/ResultModels';\r\nimport * as _ from 'lodash';\r\nimport { ActivitiesDataDic } from '../activities-lite.data';\r\n\r\n@Component({\r\n selector: 'app-activities-lite-order-summary',\r\n templateUrl: './activities-lite-order-summary.component.html',\r\n styleUrls: ['./activities-lite-order-summary.component.scss', './../activities-lite.component.scss']\r\n})\r\nexport class ActivitiesLiteOrderSummaryComponent implements OnInit {\r\n\r\n operationCurrency: any;\r\n isSessionClass: boolean;\r\n subscriptions: Subscription = new Subscription();\r\n guestDetails: any = [];\r\n selectedAdditionalGuest = 1;\r\n taxType = TaxType;\r\n @ViewChild('guestDetailsForm') guestDetailsForm;\r\n saveCardToContact = false;\r\n showIframe = false;\r\n IframeURL = '';\r\n urlSafe: SafeResourceUrl;\r\n waiverForm: boolean;\r\n operationType = operationType;\r\n applyToAllGuests = false;\r\n showDetailedView = false;\r\n paymentGateway: number;\r\n taxTypeForBooking = TaxType.Tax;\r\n waiverFormTrancationId = null;\r\n paymentData: any;\r\n TotalAmount: number = 0;\r\n PayableAmount: number = 0;\r\n isUserAllowedToclickConfirm: boolean;\r\n components: any;\r\n freeTextIdList = [];\r\n isSplitPayment: boolean;\r\n formSubmitted = false;\r\n customTerms = [];\r\n reminderSmsEmailChecks = [];\r\n bookingCompleted: boolean;\r\n creditCardPaid: boolean;\r\n confToken: any;\r\n popUpMessage = '';\r\n financialData: FinancialEffectForUpdatedReservationDTO;\r\n refundData: any;\r\n isAuthRefund: boolean;\r\n financialPopUpRef: MatDialogRef;\r\n clearCartDialogRef: MatDialogRef;\r\n bookingErrorDialogRef: MatDialogRef;\r\n checkBoxErrorMessages = '';\r\n countryList = [];\r\n mobileNumberLength = 10;\r\n widgetSettings: any = {};\r\n totalActivitiesRegistered = [];\r\n cartItems = [];\r\n isEdit = false;\r\n balanceAmount: Number = 0;\r\n refundAmount = false;\r\n noteType: number;\r\n guestPartySize = 0;\r\n enableSubmit = false;\r\n showCartLockWarning = false;\r\n restaurantData: any;\r\n totalTax: number = 0;\r\n totalServiceCharge: number = 0;\r\n subTotal: number = 0;\r\n taxOnServiceCharge: number = 0;\r\n financialEffectId:number= 0;\r\n AuthOnlyPaymentMode: 6 = 6;\r\n transactions = []\r\n rGuestPayResponseData: any;\r\n infoMessage: string = '';\r\n showCardOnFileInformation = false;\r\n paymentOffline: boolean = false;\r\n overallBookings = [];\r\n _MESSAGES = MESSAGES;\r\n showSCDetails = false;\r\n showTaxDetails = false;\r\n showVATDetails = false;\r\n disableSubmitButton : boolean = true;\r\n validationMessageList: string[] = [];;\r\n isValidateTerms: boolean= false;\r\n handleInterval;\r\n\r\n constructor(\r\n private ts: TranslateService,\r\n private router: Router,\r\n private route: ActivatedRoute,\r\n public activityService: GuestService,\r\n public sanitizer: DomSanitizer,\r\n public dfs: DynamicFormService,\r\n private activitiesDataDic: ActivitiesDataDic\r\n ) {\r\n\r\n }\r\n\r\n @HostListener('window:message', ['$event'])\r\n onMessage({ origin, data }) {\r\n if (origin !== environment.authorizeIframeResponseOrigin && origin !== environment.rGuestPayIframeResponsOrigin) { // set your origin\r\n return false;\r\n }\r\n this.rGuestPayResponseData = null;\r\n let rGuestPayRespose = data;\r\n const payResponse = data;\r\n if (typeof data !== 'object') {\r\n rGuestPayRespose = JSON.parse(data);\r\n }\r\n if ((data.type === 'txn-completed' && data.transactionInfo\r\n && data.transactionInfo.transactionInfo && data.transactionInfo.transactionInfo.payments)\r\n || (rGuestPayRespose && (rGuestPayRespose.code || rGuestPayRespose.gatewayResponseData))) {\r\n this.transactions = [];\r\n \r\n if (data?.transactionInfo?.transactionInfo && data.transactionInfo.transactionInfo.successCode === 1 &&\r\n data.transactionInfo.transactionInfo.payments.length > 0 &&\r\n data.transactionInfo.transactionInfo.payments[0].paymentType === 7) { // Waiver form\r\n this.proceedReservation(data.transactionInfo.transactionInfo.payments[0].authorizeTransactionID);\r\n return;\r\n }\r\n\r\n if (this.paymentGateway === PaymentGateways.AuthorizePay) { // Authorize Pay\r\n\r\n const transInfo = payResponse.transactionInfo.transactionInfo;\r\n\r\n if (transInfo.errorMessage || transInfo.successCode !== 1) {\r\n if (transInfo.errorMessage) {\r\n this.activityService.openSnackBar\r\n (transInfo.errorMessage, this.ts.instant('close'), 15000, 'error-snackbar');\r\n }\r\n else {\r\n this.activityService.openSnackBar\r\n (this.ts.instant('CardInformationProcessNotCompleted'),\r\n this.ts.instant('close'), this.activityService.ConfigSettings.snackBarTime, 'error-snackbar');\r\n }\r\n } else if (payResponse && transInfo && transInfo.successCode === 1) {\r\n\r\n this.transactions = this.processTransactions(transInfo);\r\n this.rGuestPayResponseData = data.transactionInfo.transactionInfo.payments[0].rGuestPayResponseData;\r\n let isCreditcardPayment = !!this.transactions.find(payment => payment.PaymentType == AuthorizePaymentType.CreditCardToken || payment.PaymentType == AuthorizePaymentType.Payment_Only || payment.PaymentType == AuthorizePaymentType.Authorize_Only);\r\n let cart = this.buildReservationRequest(true);\r\n const dto = {\r\n PartyId: this.activityService.successBookRes?.PartyId || this.activityService?.editData?.Id || null,\r\n SlotLockIds: [],\r\n BookingID: null,\r\n PayResponse : this.rGuestPayResponseData,\r\n TokenType: '',\r\n PaymentAmount: transInfo.paidAmount,\r\n PaymentGateway: this.paymentGateway,\r\n AuthorizeTransactions: this.transactions,\r\n ReservationAttemptIds: this.activityService.operation === operationType.edit ?\r\n this.paymentData?.AttemptIds || [this.paymentData.ReservationAttemptId] :\r\n this.paymentData.ResponseDTOs?.filter(x => x.ReservationAttemptId > 0).map(x => x.ReservationAttemptId),\r\n SplitPaymentReload: this.isSplitPayment,\r\n CardOnFileRequired : !!cart.find(f=> f.PaymentMethod == PaymentMethod.Authorize) && !isCreditcardPayment,\r\n CardOnFileAmount : this.TotalAmount - this.PayableAmount \r\n };\r\n this.creditCardPaid = true;\r\n\r\n //Credit card authorization/payment has not occurred.\r\n //Only the credit card token has been collected.\r\n this.transactions.forEach(f=>\r\n {\r\n if(f.PaymentType == AuthorizePaymentType.CreditCardToken){\r\n dto.PaymentAmount -= f.Amount;\r\n f.Amount = 0;\r\n }\r\n });\r\n\r\n if(this.transactions.every(e=>e.PaymentType == AuthorizePaymentType.CreditCardToken)){\r\n this.reservationConfirm(true);\r\n }else{\r\n this.UpdateMultiCartReservationAttempt(dto);\r\n }\r\n\r\n } else {\r\n this.activityService.openSnackBar\r\n (this.ts.instant('CardInformationProcessNotCompleted'),\r\n this.ts.instant('close'), this.activityService.ConfigSettings.snackBarTime, 'error-snackbar');\r\n }\r\n }\r\n else {\r\n if (rGuestPayRespose.code && rGuestPayRespose.code !== '100') {\r\n rGuestPayRespose = JSON.parse(data);\r\n if (rGuestPayRespose.validationErrors && rGuestPayRespose.validationErrors.length > 0) {\r\n let errorString = '';\r\n rGuestPayRespose.validationErrors.forEach((error, i, arr) => {\r\n errorString = error.fieldName + ' ' + error.value + '\\n';\r\n });\r\n this.activityService.openSnackBar(errorString, this.ts.instant('close'), this.activityService.ConfigSettings.snackBarTime, 'error-snackbar');\r\n }\r\n else if (rGuestPayRespose && rGuestPayRespose.gatewayResponseData && rGuestPayRespose.gatewayResponseData.message) {\r\n alert(rGuestPayRespose.gatewayResponseData.message);\r\n }\r\n else {\r\n this.activityService.openSnackBar(this.ts.instant('CardInformationProcessNotCompleted'),\r\n this.ts.instant('close'), this.activityService.ConfigSettings.snackBarTime, 'error-snackbar');\r\n }\r\n }\r\n else if (rGuestPayRespose && rGuestPayRespose.gatewayResponseData && rGuestPayRespose.gatewayResponseData.code === '100') {\r\n const callbackDto = {\r\n ReservationAttemptIds: this.paymentData.ResponseDTOs?.filter(x => x.ReservationAttemptId > 0).map(x => x.ReservationAttemptId),\r\n CardNumber: rGuestPayRespose.cardInfo.accountNumberMasked,\r\n ExpirationDate: new Date(data.cardInfo.expirationYearMonth.substring(0, 4) + '-' +\r\n data.cardInfo.expirationYearMonth.substring(4) + '-01'),\r\n CVC: '',\r\n FirstNameHolder: '',\r\n LastNameHolder: '',\r\n AddressLine1: '',\r\n AddressLine2: '',\r\n City: '',\r\n State: '',\r\n PostalCode: '',\r\n TokenType: '',\r\n Token: data.token\r\n };\r\n this.creditCardPaid = true;\r\n this.UpdateMultiCartReservationAttempt(callbackDto);\r\n }\r\n else {\r\n this.activityService.openSnackBar(this.ts.instant('CardInformationProcessNotCompleted'),\r\n this.ts.instant('close'), this.activityService.ConfigSettings.snackBarTime, 'error-snackbar');\r\n }\r\n }\r\n }\r\n else if (data.type === 'txn-completed' && data.transactionInfo) {\r\n\r\n } else {\r\n // Show Error Message\r\n }\r\n }\r\n\r\n preloadCartData() {\r\n // Taking 0th index restaurant details since merchant API does not support merchant level configuration for tems and currency\r\n this.operationCurrency = this.cartItems[0].SelectedActivityInfo.OperationCurrency;\r\n this.findPartySize();\r\n if (this.customTerms.length === 0) {\r\n if (!this.isEdit) {\r\n if(!this.activityService.DisableCustomTermsAndConditions) {\r\n this.basicTerm();\r\n }\r\n else {\r\n if(this.activityService.DisableCustomTermsAndConditions && this.cartItems[0].SelectedActivityInfo?.CustomTermsOfService?.length > 0 ) {\r\n this.validationMessageList.push(this.ts.instant('By click next, you agree to the following'));\r\n this.validationMessageList.push(`${this.ts.instant('termsOfUse')}` + this.ts.instant('and') + `${this.ts.instant('privacyPolicy')}`);\r\n const customTermsList = this.cartItems[0].SelectedActivityInfo.CustomTermsOfService;\r\n customTermsList.forEach((customTerms) => {\r\n this.validationMessageList.push(customTerms);\r\n })\r\n }\r\n else {\r\n this.validationMessageList.push(this.getAgreeTermsAndConditionsText());\r\n }\r\n }\r\n if (this.cartItems[0].SelectedActivityInfo?.CustomTermsOfService?.length > 0 && !this.activityService.DisableCustomTermsAndConditions) {\r\n const customTerms = this.cartItems[0].SelectedActivityInfo.CustomTermsOfService;\r\n this.processCustomTermsConditions(customTerms);\r\n }\r\n }\r\n this.processOtherCheckBoxes();\r\n }\r\n }\r\n\r\n applyDefaultGuestDetails(event) {\r\n this.applyToAllGuests = event.checked;\r\n if (this.applyToAllGuests) {\r\n this.processGuestAutoFill();\r\n }\r\n }\r\n\r\n processGuestAutoFill() {\r\n this.guestDetails.forEach((guest, i) => {\r\n if (i > 0) {\r\n guest.mobile = this.guestDetails[0].mobile;\r\n guest.email = this.guestDetails[0].email;\r\n }\r\n });\r\n }\r\n\r\n applyToOtherGuestDetails(guestIndex) {\r\n if (this.applyToAllGuests && guestIndex === 0) {\r\n this.processGuestAutoFill();\r\n }\r\n }\r\n\r\n addNewGuest() {\r\n this.guestDetails.push({\r\n firstName: '',\r\n lastName: '',\r\n email: '',\r\n mobile: ''\r\n });\r\n this.selectedAdditionalGuest = this.guestDetails.length - 1;\r\n if (this.applyToAllGuests) {\r\n this.processGuestAutoFill();\r\n }\r\n }\r\n\r\n removeAdditionalGuest(guestIndex) {\r\n this.guestDetails.splice(guestIndex, 1);\r\n }\r\n\r\n openCloseAdditionalGuest(i) {\r\n this.selectedAdditionalGuest = (i === this.selectedAdditionalGuest) ? 0 : i;\r\n }\r\n\r\n getPhoneCountryCodes() {\r\n const restaurantSettings = this.widgetSettings.DefaultMobileCountryCode;\r\n if (restaurantSettings) {\r\n this.activityService.GetCountries().subscribe(data => {\r\n if (data) {\r\n this.activityService.countriesList = data;\r\n this.dfs.countriesList = data;\r\n this.countryList = [];\r\n data.forEach(element => {\r\n this.countryList.push({ id: element.Id, value: element.CountryPhoneCode + ' (' + element.Name + ' )' });\r\n });\r\n if (data && data.length > 0) {\r\n const countrySelected = Utilities.getDefaultCountry(data, restaurantSettings);\r\n this.countryList = [];\r\n data.forEach(element => {\r\n this.countryList.push({ id: element.Id, value: element.CountryPhoneCode + ' (' + element.Name + ' )' });\r\n });\r\n this.guestDetails[0].countryId = this.activityService.selectedCountryId ?\r\n this.activityService.selectedCountryId : (this.isEdit ? this.guestDetails[0].countryId : (countrySelected.Id));\r\n }\r\n }\r\n });\r\n } else { this.guestDetails[0].countryId = 1; }\r\n }\r\n\r\n isValidURL(val) {\r\n const res = val.match(/(http(s)?:\\/\\/.)?(www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{2,256}\\.[a-z]{2,6}\\b([-a-zA-Z0-9@:%_\\+.~#?&//=]*)/g);\r\n return (res !== null);\r\n }\r\n\r\n processCustomTermsConditions(termsarray) {\r\n // \"please [Terms & Conditions | https://www.google.com] \"] shd be in this format\r\n\r\n termsarray.forEach((terms, i) => {\r\n this.customTerms.push({ labelText: terms, labelValue: false, name: `customTerm_${i}`, required: true });\r\n });\r\n }\r\n\r\n basicTerm() {\r\n if (this.activityService?.ConfigSettings?.termsUrl && this.activityService?.ConfigSettings?.privacyUrl) {\r\n this.customTerms.push({ labelText: this.getAgreeTermsAndConditionsText(), labelValue: false, name: 'agreeTerms', required: true });\r\n }\r\n }\r\n\r\n checkSubmitValidation() {\r\n let disableSubmit = !this.guestDetailsForm?.valid || (!this.isEdit && this.checkBoxErrorMessages) || (this.waiverForm && !this.isUserAllowedToclickConfirm ) || (this.activityService?.reservationAttemptInfo?.CreditCardIframeUrl && !this.creditCardPaid && this.activityService?.reservationAttemptInfo?.ShouldCreditCardBeEntered) || (this.financialData?.RedirectUrl && !this.creditCardPaid) || this.showCartLockWarning || this.paymentOffline\r\n this.disableSubmitButton = disableSubmit;\r\n }\r\n checkTermsValidation() {\r\n let validTerms = true;\r\n this.customTerms.forEach(terms => {\r\n if (terms.required && (terms.required !== terms.labelValue)) {\r\n validTerms = false;\r\n }\r\n });\r\n return validTerms;\r\n }\r\n\r\n saveCardInfo(){\r\n\r\n }\r\n\r\n processOtherCheckBoxes() {\r\n this.reminderSmsEmailChecks = [];\r\n if (this.cartItems[0]?.SelectedActivityInfo.IsSmsReminderSupported) {\r\n if (this.cartItems[0]?.SelectedActivityInfo.IsReservationReminderMandatory) {\r\n this.reminderSmsEmailChecks.push(\r\n { labelText: this.ts.instant('SmsMessageReminderText'), labelValue: true, name: 'reservationBySMS', disabled: true });\r\n } else {\r\n this.reminderSmsEmailChecks.push(\r\n { labelText: this.ts.instant('SmsMessageReminderText'), labelValue: false, name: 'reservationBySMS' });\r\n }\r\n }\r\n this.reminderSmsEmailChecks.push({\r\n labelText: this.ts.instant('emailReminderText'), labelValue: false, name: 'reservationByEmail', required: true\r\n });\r\n if (this.cartItems[0]?.SelectedActivityInfo.ConfirmationVia === ConfirmationVia.Both) {\r\n this.reminderSmsEmailChecks.push(\r\n { labelText: this.ts.instant('smsConfirmationText'), labelValue: false, name: 'reservationConfirmationBySMS' });\r\n this.reminderSmsEmailChecks.push(\r\n { labelText: this.ts.instant('emailConfirmationText'), labelValue: false, name: 'reservationConfirmationByEmail' });\r\n }\r\n }\r\n\r\n getAgreeTermsAndConditionsText(): string {\r\n let text = '';\r\n text = this.ts.instant('By clicking next, you agree to the terms of use and privacyPolicy', {terms: `${this.ts.instant('termsOfUse')}`, privacyPolicy: `${this.ts.instant('privacyPolicy')}`})\r\n // text = `${this.ts.instant('agree')}${this.ts.instant('termsOfUse')}${this.ts.instant('and')}\r\n // ${this.ts.instant('privacyPolicy')}`;\r\n return text;\r\n }\r\n\r\n ngOnInit(): void {\r\n let restaurantId = this.activityService.isDining ? this.activityService.selectedDining.RestaurantId : this.activityService.isNonDining ? this.activityService.selectedNonDining.RestaurantId : this.activityService.selectedActivities.RestaurantId;\r\n if(!restaurantId && !this.activityService.widgetSettings.PropertyWidgetSettings){\r\n this.activityService.navigateToHome();\r\n }\r\n this.restaurantData = this.activityService.widgetSettings.PropertyWidgetSettings.find(property => property.RestaurantId == restaurantId);\r\n this.balanceAmount = 0;\r\n this.financialEffectId = 0;\r\n this.customTerms = [];\r\n this.enableSubmit = false;\r\n this.activityService.operation = window.location.pathname.split('/').indexOf('edit') !== -1 ? operationType.edit : operationType.create;\r\n this.isEdit = this.activityService.operation === operationType.edit ? true : false;\r\n this.activityService.hideCart.next(true);\r\n this.activityService.startTimer();\r\n let cartList = JSON.parse(sessionStorage.getItem('CartList_' + this.activityService.restaurantMerchantCode));\r\n if(cartList?.length){\r\n this.taxTypeForBooking = this.activityService.widgetSettings.PropertyWidgetSettings.find((property) => property.RestaurantId == cartList[0].PropertyId).TaxType;\r\n }\r\n if(!this.activityService.mealWithConfig)\r\n this.activityService.showBackNav();\r\n this.activityService.currentNavURL = 'order-summary';\r\n this.activityService.prevNavURL = 'slot-selection/' + this.activityService.restaurantWidgetId;\r\n this.activityService.restaurantMerchantCode = this.route.snapshot.params.merchantId;\r\n this.widgetSettings = this.activityService.\r\n getSessionData('rGuestActivitesWidgetSettings_' + this.activityService.restaurantMerchantCode, true);\r\n this.activityService.getWidgetImagesMerchantLevel(this.widgetSettings.MerchantId);\r\n this.cartItems = this.activityService.getSessionData('CartList_' + this.activityService.restaurantMerchantCode, true) || [];\r\n if (this.cartItems?.length === 0 || this.widgetSettings.MerchantCode !== this.activityService.restaurantMerchantCode) { // if cart length avaiallbe set cartItems\r\n this.activityService.navigateToUrl('list');\r\n }\r\n if (this.isEdit) {\r\n this.activityService.restaurantWidgetId = this.route.snapshot.params.restaurantId;\r\n }\r\n if (Object.keys(this.activityService?.editData)?.length === 0 && this.activityService.getSessionData('activityEditData_' + this.activityService.restaurantMerchantCode)) {\r\n this.activityService.editData = this.activityService.getSessionData('activityEditData_' + this.activityService.restaurantMerchantCode, true);\r\n }\r\n if (this.guestDetails.length === 0) {\r\n this.addNewGuest();\r\n }\r\n this.getPhoneCountryCodes();\r\n\r\n this.cartItems.forEach(element => {\r\n if(!this.showCardOnFileInformation){\r\n this.showCardOnFileInformation = this.isCardOnFilePayment(element.SpecialMealId,element.PropertyId);\r\n }else{\r\n return;\r\n }\r\n });\r\n\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.activityService.DisableCustomTermsAndConditions = this.activityService.widgetSettings?.PropertyWidgetSettings?.every(({DisableCustomTermsAndConditions}) => DisableCustomTermsAndConditions);\r\n\r\n if(!this.activityService.DisableCustomTermsAndConditions) {\r\n this.isValidateTerms = true;\r\n }\r\n this.isEdit ? this.setEditData(true) : this.RegisterReservationMerchantLevelAttempt(true);\r\n this.preloadCartData();\r\n this.checkCustomTermsAndMessageOptionValidation();\r\n }\r\n setEditData(initial = true) {\r\n if (Object.keys(this.activityService?.editData)?.length && this.guestDetails?.length) {\r\n this.guestDetails[0].firstName = this.activityService?.editData?.Contact?.FirstName;\r\n this.guestDetails[0].lastName = this.activityService?.editData?.Contact?.LastName;\r\n this.guestDetails[0].mobile = this.activityService?.editData?.Contact?.PhoneNumber;\r\n this.guestDetails[0].email = this.activityService?.editData?.Contact?.EmailAddress;\r\n this.guestDetails[0].countryId = this.activityService?.editData?.Contact?.CountryId;\r\n }\r\n // this.RegisterReservationMerchantLevelAttempt(true);\r\n this.setRatePlanCalculation(initial);\r\n }\r\n\r\n setRatePlanCalculation(initial) {\r\n const cartObj = this.activityService.getSessionData('CartList_' + this.activityService.restaurantMerchantCode, true) || [];\r\n const cartLockList = this.activityService.getSessionData('CartLockList_' + this.activityService.restaurantMerchantCode, true) || [];\r\n this.showCartLockWarning = true;\r\n if (cartLockList.length == cartLockList.filter(x => x.isAvailable).length) {\r\n this.showCartLockWarning = false;\r\n }\r\n const multiRegPayload = [];\r\n if (cartObj && cartObj.length > 0) {\r\n cartObj.forEach(eachActivities => {\r\n let coverTypeTotal = 0;\r\n if (eachActivities?.CoverTypes?.length) {\r\n eachActivities?.CoverTypes.forEach(coverType => {\r\n coverTypeTotal += coverType.Covers;\r\n });\r\n }\r\n else {\r\n coverTypeTotal = eachActivities?.Size || 0;\r\n }\r\n const registerReservationAttemptRequestDTO = {\r\n Slots: eachActivities?.isNonDining ? eachActivities.Slots : eachActivities.isDining && !eachActivities.SpecialMealId ? [{LocalTime : eachActivities.Slot.Time}] : [],\r\n ActivityId: eachActivities?.SpecialMealId,\r\n GuestTypes: eachActivities?.CoverTypes,\r\n BookingTypes: eachActivities?.BookingTypes,\r\n Size: coverTypeTotal == eachActivities?.Size ? eachActivities?.Size : coverTypeTotal,\r\n SessionSlot: eachActivities?.Sessions,\r\n BookingBehavior: eachActivities?.BookingBehavior,\r\n CoverTypes: eachActivities?.CoverTypes,\r\n TableIds: eachActivities?.isNonDining ? eachActivities?.TableIds : eachActivities?.TableId,\r\n RestaurantId: +eachActivities?.PropertyId,\r\n DoesRequirePrepayment: eachActivities?.DoesRequirePrepayment,\r\n IsCommunalTable: this.activityService.isDining || eachActivities?.isNonDining ? eachActivities?.IsCommunalTable : null,\r\n LocalTime: this.activityService.isDining ? eachActivities?.LocalTime : null,\r\n SeatingAreaId: this.activityService.isDining || eachActivities?.isNonDining ? eachActivities?.SeatingArea : null,\r\n SeatingTypeId: this.activityService.isDining || eachActivities?.isNonDining ? eachActivities?.SeatingType : null,\r\n TableId: this.activityService.isDining ? eachActivities?.TableId : null,\r\n AddOns: eachActivities?.isNonDining ? eachActivities?.AddOns : eachActivities?.AddOns,\r\n StartDate: eachActivities?.StartDate || null,\r\n EndDate: eachActivities?.EndDate || null,\r\n Contact:this.activityService?.editData?.Contact || null,\r\n BookingContacts : this.activityService?.editData?.BookingContacts || null,\r\n PartyId:this.activityService?.editData?.Id || null\r\n };\r\n\r\n multiRegPayload.push(registerReservationAttemptRequestDTO);\r\n });\r\n }\r\n\r\n const request = multiRegPayload[0];\r\n let cartId = cartObj[0].CartId; \r\n\r\n if (this.activityService.isDining) {\r\n this.RegisterReservationAttemptEdit(true, true, request);\r\n } else {\r\n this.activityService.startLoader();\r\n // this.subscriptions.add(\r\n this.activityService.GetSessionRatePlanCalculated(request).subscribe(response => {\r\n this.activityService.stopLoader();\r\n\r\n const multiCartRegisterResponse = response?.Payload.RatePlan.Reservations || [];\r\n // const multiCartRegisterResponse = response?.Payload.RatePlanCalculations || [];\r\n if (multiCartRegisterResponse.length > 0) {\r\n multiCartRegisterResponse[0].CartId = cartId;\r\n this.totalActivitiesRegistered = this.processOrderSummatyList(multiCartRegisterResponse,\r\n request.GuestTypes,\r\n request.BookingTypes,\r\n request.Size,\r\n response);\r\n this.financialEffectId = response.Payload.FinancialEffectId;\r\n console.log(this.totalActivitiesRegistered);\r\n }\r\n else {\r\n this.totalActivitiesRegistered.push(this.formOrderSummaryForNoRatePlanBookings(request));\r\n\r\n }\r\n //this.RegisterReservationAttemptEdit(true, true, request);\r\n this.invokeFinancialEffect(request,true);\r\n }, () => {\r\n this.activityService.stopLoader();\r\n });\r\n }\r\n // );\r\n }\r\n invokeFinancialEffect(request,isIframeToBeDisplayed){\r\n if (this.activityService.operation === operationType.edit &&\r\n Object.keys(this.activityService.editData)?.length && this.activityService.editData?.Id ) {\r\n\r\n this.activityService.isDining \r\n ? this.getFinancialEffectCalculation() \r\n : this.UpdateActivityFinancialEffect(request,isIframeToBeDisplayed);\r\n }}\r\n\r\n UpdateActivityFinancialEffect(request,isIframeToBeDisplayed){\r\n \r\n const bookingData = {\r\n Slots: request?.Slots || [],\r\n ActivityId: request?.ActivityId,\r\n CoverTypes: request?.CoverTypes,\r\n BookingTypes: request?.BookingTypes,\r\n Size: +request?.Size,\r\n SessionSlot: request?.SessionSlot,\r\n BookingBehavior: request?.BookingBehavior,\r\n TableIds: request?.TableIds,\r\n RestaurantId: +request?.RestaurantId,\r\n PartyId: this.activityService?.editData?.Id || null,\r\n Sessions: request?.SessionSlot,\r\n InstructorIds: [],\r\n FromWebsite: true,\r\n IsCommunalTable: this.activityService.isDining ? request?.IsCommunalTable : null,\r\n LocalTime: this.activityService.isDining ? request?.LocalTime : null,\r\n SeatingAreaId: this.activityService.isDining ? request?.SeatingArea : null,\r\n SeatingTypeId: this.activityService.isDining ? request?.SeatingType : null,\r\n TableId: this.activityService.isDining ? request?.TableIds : null,\r\n AddOns: request?.AddOns,\r\n Contact: request?.Contact,\r\n BookingContacts: request?.BookingContacts,\r\n };\r\n \r\n let payload ={\r\n \"PropertyId\": +request?.RestaurantId,\r\n \"ReservationId\": this.activityService?.editData?.Id || null,\r\n \"Source\": 1,\r\n \"BookAttemptRequest\": bookingData,\r\n }\r\n this.activityService.startLoader();\r\n this.activityService.UpdateReservationFinancialEffect(payload).subscribe((response: any) => {\r\n this.updateBookingForFinancialEffect(response.Payload)\r\n }, error => {\r\n this.activityService.stopLoader();\r\n });\r\n this.checkSubmitValidation();\r\n }\r\n\r\n updateBookingForFinancialEffect(data){\r\n this.activityService.stopLoader();\r\n data.PaymentAmount = data.Amount;\r\n \r\n let bookings = [];\r\n data.RatePlan?.Reservations?.forEach((eachItem) => {\r\n eachItem.Sessions.forEach(session => {\r\n bookings.push({\r\n Items: session.GuestPrices[0].Items,\r\n date: session.Date,\r\n SubTotal: session.SubTotal,\r\n Total: session.Total,\r\n TimeRange: session.TimeRange,\r\n ActivityName: this.isEdit ? (this.activityService.editData?.SpecialMealName || '') : data?.ActivityName ? data.ActivityName : this.restaurantData?.RestaurantName || null,\r\n Size: data.Size ? data.Size : this.guestPartySize,\r\n WidgetPrePaymentMode: null,\r\n ServiceCharge: session.ServiceCharge,\r\n ServiceCharges: session.ServiceCharges,\r\n VAT: session.VAT,\r\n Tax: session.Tax,\r\n Taxes: session.Taxes,\r\n NoShowFeeAmount: eachItem.NoShowFeeAmount\r\n })\r\n })\r\n })\r\n this.overallBookings = bookings;\r\n this.activityService.stopLoader();\r\n if (data) {\r\n this.financialData = data;\r\n if (data.PaymentGateway) {\r\n this.paymentGateway = data.PaymentGateway;\r\n }\r\n this.financialEffectId = data.FinancialEffectId;\r\n this.paymentData = this.activityService.reservationAttemptInfo = data;\r\n if(data.RatePlan.SubTotal > 0) {\r\n this.paymentData.SubTotal = data.RatePlan.SubTotal;\r\n this.paymentData.ServiceCharge = data.RatePlan.ServiceCharge;\r\n this.paymentData.ServiceCharges = data.RatePlan.ServiceCharges;\r\n this.paymentData.TaxOnServiceChargeAmount = data.RatePlan.TaxOnServiceChargeAmount;\r\n this.paymentData.Tax = data.RatePlan.Tax;\r\n this.paymentData.Taxes = data.RatePlan.Taxes;\r\n this.TotalAmount = data.RatePlan.Total;\r\n this.PayableAmount = data.RatePlan.Unpaid;\r\n }\r\n // this.paymentData.ReservationAttemptId = data.RatePlan?.Reservations?.length ? data.RatePlan?.Reservations[0]?.ReservationAttemptId : null;\r\n if (data.RedirectUrl) {\r\n this.isSplitPayment = false;\r\n this.isUserAllowedToclickConfirm = false;\r\n // this.confirmButton.disbaledproperity = true;\r\n this.LoadIframe(data.RedirectUrl);\r\n } // else {\r\n switch (data.PartyPaymentType) {\r\n case 0: // NotSupported\r\n this.activityService.setMessageState(this.ts.instant('ReservationBetweenLocationPrePaidNotSupported'), 0);\r\n this.isUserAllowedToclickConfirm = false;\r\n // this.confirmButton.disbaledproperity = true;\r\n return;\r\n break;\r\n case 1: // NoPaymentsInvolved\r\n // No messaging in this case\r\n break;\r\n case 2: // NoEffect\r\n if(data.RetailCreditCardPaymentTokenId){\r\n this.infoMessage = this.ts.instant('SavedCardInfoMessageForCharge');\r\n }else{\r\n this.showFinancialEffectPopUp(this.ts.instant('NoChargeOrRefundForThisReservation'));\r\n }\r\n break;\r\n case 3: // NewReservationAttempt\r\n // paymentIframeRequired = true;\r\n if (this.isSelectedMealDefferedPayment()) {\r\n this.popUpMessage = this.ts.instant('yourCardWillBeChargedPriorToYourMealTime');\r\n } else {\r\n this.popUpMessage = this.ts.instant('NoRefundYourPrePayment') + ' ' + this.operationCurrency + data.PaymentAmount.toFixed(this.widgetSettings.NumberOfFractionalDigits);\r\n }\r\n this.showFinancialEffectPopUp(this.popUpMessage);\r\n break;\r\n case 4: // NoFullRefund\r\n if (data.TotalAmount != null && (data.TotalAmount > 0)) {\r\n this.popUpMessage = this.ts.instant('NoRefundYourPrePayment') + ' ' + this.operationCurrency + data.PaymentAmount.toFixed(this.widgetSettings.NumberOfFractionalDigits);\r\n }\r\n else {\r\n // There was no prepayment to mention in text (or it was already refunded)\r\n this.popUpMessage = this.ts.instant('NoChargeOrRefundForThisReservation');\r\n }\r\n this.showFinancialEffectPopUp(this.popUpMessage);\r\n break;\r\n case 5: // FullRefund\r\n this.popUpMessage = this.ts.instant('CardUsedForOriginalReservationWillBeRefunded') + ' '\r\n + this.operationCurrency + data.PaymentAmount.toFixed(this.widgetSettings.NumberOfFractionalDigits) + ' ' + this.ts.instant('severBusinessDays');\r\n this.showFinancialEffectPopUp(this.popUpMessage);\r\n break;\r\n case 6: // NoFullRefundAndNewReservationAttempt\r\n if (data.PaymentAmount != null && (data.PaymentAmount > 0)) {\r\n this.popUpMessage = this.ts.instant('NoRefundYourPrePayment') + ' ' + this.operationCurrency + data.PaymentAmount.toFixed(this.widgetSettings.NumberOfFractionalDigits);\r\n }\r\n else {\r\n // There was no prepayment to mention in text (or it was already refunded)\r\n this.popUpMessage = this.ts.instant('noRefundMessage');\r\n }\r\n this.showFinancialEffectPopUp(this.popUpMessage);\r\n break;\r\n case 7: // FullRefundAndNewReservationAttempt\r\n this.popUpMessage = this.ts.instant('CardUsedForOriginalReservationWillBeRefunded') + ' '\r\n + this.operationCurrency + data.PaymentAmount.toFixed(this.widgetSettings.NumberOfFractionalDigits) + ' ' + this.ts.instant('severBusinessDays');\r\n this.showFinancialEffectPopUp(this.popUpMessage);\r\n break;\r\n case 8: // PartialCharge\r\n if (this.activityService.reservationAttemptInfo?.ShouldCreditCardBeEntered) {\r\n this.popUpMessage = this.ts.instant('CardNeededToUpdateThisReservation') + ' '\r\n + this.operationCurrency + data.PaymentAmount.toFixed(this.widgetSettings.NumberOfFractionalDigits) + ' ' + this.ts.instant('enterCreditCard');\r\n }\r\n else {\r\n this.popUpMessage = this.ts.instant('CardUsedForTheOriginalBookingWillCharged') + ' '\r\n + this.operationCurrency + data.PaymentAmount.toFixed(this.widgetSettings.NumberOfFractionalDigits);\r\n }\r\n this.showFinancialEffectPopUp(this.popUpMessage);\r\n break;\r\n case 9:\r\n case 14: // PartialRefund \r\n this.refundAmount = true;\r\n if (this.financialData.RefundOption && this.financialData.RefundOption.length > 0) {\r\n // this.popUpMessage = this.ts.instant('Refund request of ') +\r\n // this.operationCurrency + data.PaymentAmount + this.ts.instant(' has been initiated');\r\n this.popUpMessage = this.ts.instant('refundRequestOf') + this.operationCurrency + data.PaymentAmount.toFixed(this.widgetSettings.NumberOfFractionalDigits) + this.ts.instant('hasBeenProcessed');\r\n } else {\r\n this.popUpMessage = this.ts.instant('refundMessage') + this.operationCurrency + Math.abs(data.PaymentAmount).toFixed(this.widgetSettings.NumberOfFractionalDigits) + '.
'\r\n + this.ts.instant('severalDaysMessage');\r\n }\r\n this.showFinancialEffectPopUp(this.popUpMessage);\r\n break;\r\n case 10: // NoShowFeeUpdated\r\n this.popUpMessage = this.ts.instant('IfDonotShowYouWillBeCharged') + ' ' +\r\n this.operationCurrency +data.PaymentAmount.toFixed(this.widgetSettings.NumberOfFractionalDigits);\r\n this.showFinancialEffectPopUp(this.popUpMessage);\r\n break;\r\n case 11: // Authorize\r\n\r\n if (data.PaymentAmount > 0) {\r\n this.popUpMessage = this.ts.instant('CardUsedAtBookingWillBeChargedAtMealTime') + ' ' +\r\n this.operationCurrency + data.PaymentAmount.toFixed(this.widgetSettings.NumberOfFractionalDigits);\r\n this.showFinancialEffectPopUp(this.popUpMessage);\r\n }\r\n break;\r\n case 12: // Authorize updated\r\n\r\n if (data.PaymentAmount > 0) {\r\n this.popUpMessage = this.ts.instant('CardUsedAtBookingWillBeChargedAtMealTime') + ' ' +\r\n this.operationCurrency + data.PaymentAmount.toFixed(this.widgetSettings.NumberOfFractionalDigits);\r\n this.showFinancialEffectPopUp(this.popUpMessage);\r\n }\r\n break;\r\n }\r\n if (this.isEdit && this.activityService.isDining && this.activityService.selectedSpecialMeal) {\r\n this.totalActivitiesRegistered = this.processEditOrderSummaryList(data);\r\n }\r\n // this.bindPaymentAmountAndMessage(data.RatePlanAmount, data.SpecialMealAmount, data.TotalAmount)\r\n // need to check how to find deferred payment mode\r\n if (this.activityService.reservationAttemptInfo?.ShouldCreditCardBeEntered) {\r\n this.isUserAllowedToclickConfirm = false;\r\n // this.confirmButton.disbaledproperity = true;\r\n this.LoadIframe(this.activityService.reservationAttemptInfo?.CreditCardIframeUrl);\r\n }\r\n else {\r\n if (!data.RedirectUrl) {\r\n this.isUserAllowedToclickConfirm = true;\r\n // this.confirmButton.disbaledproperity =\r\n // this.activityService.restaurantWidgetSettings$.value.WidgetCustomization.ConfirmationVia == ConfirmationVia.Both;\r\n }\r\n }\r\n // }\r\n }\r\n setTimeout(() => {\r\n this.checkSubmitValidation();\r\n }, 200)\r\n }\r\n\r\n RegisterReservationAttemptEdit(isIframeToBeDisplayed: boolean, fromEdit = false, request) {\r\n const registerReservationAttemptRequestDTO = {\r\n Slots: request?.Slots || [],\r\n ActivityId: request?.ActivityId,\r\n CoverTypes: request?.CoverTypes,\r\n BookingTypes: request?.BookingTypes,\r\n Size: +request?.Size,\r\n SessionSlot: request?.SessionSlot,\r\n BookingBehavior: request?.BookingBehavior,\r\n TableIds: request?.TableIds,\r\n RestaurantId: +request?.RestaurantId,\r\n PartyId: this.activityService?.editData?.Id || null,\r\n Sessions: request?.SessionSlot,\r\n InstructorIds: [],\r\n FromWebsite: true,\r\n IsCommunalTable: this.activityService.isDining ? request?.IsCommunalTable : null,\r\n LocalTime: this.activityService.isDining ? request?.LocalTime : null,\r\n SeatingAreaId: this.activityService.isDining ? request?.SeatingArea : null,\r\n SeatingTypeId: this.activityService.isDining ? request?.SeatingType : null,\r\n TableId: this.activityService.isDining ? request?.TableIds : null,\r\n AddOns: request?.AddOns\r\n };\r\n\r\n if (registerReservationAttemptRequestDTO.BookingBehavior === BookingBehavior.ClassOrSession) {\r\n registerReservationAttemptRequestDTO.Slots = [];\r\n }\r\n else {\r\n registerReservationAttemptRequestDTO.Sessions = null;\r\n }\r\n\r\n this.activityService.startLoader();\r\n this.activityService.RegisterReservationAttempt(registerReservationAttemptRequestDTO, this.activityService.isDining).subscribe((response: any) => {\r\n this.activityService.stopLoader();\r\n this.updateBooking(response,isIframeToBeDisplayed)\r\n }, error => {\r\n this.activityService.stopLoader();\r\n });\r\n\r\n }\r\n\r\n\r\n updateBooking(response,isIframeToBeDisplayed){\r\n if (response) {\r\n this.checkCustomTermsAndMessageOptionValidation();\r\n this.paymentData = this.activityService.reservationAttemptInfo = response;\r\n this.paymentGateway = response.PaymentGateway;\r\n this.TotalAmount = response.PaymentAmount;\r\n this.PayableAmount = response.PayableAmount;\r\n if (response.ShouldCreditCardBeEntered && isIframeToBeDisplayed) {\r\n if (this.activityService.reservationAttemptInfo?.CreditCardIframeUrl) {\r\n this.LoadIframe(this.activityService.reservationAttemptInfo?.CreditCardIframeUrl);\r\n this.paymentOffline = false;\r\n }\r\n else {\r\n this.paymentOffline = true;\r\n this.activityService.openSnackBar(\r\n this.ts.instant('SorryForPaymentOffline'), this.ts.instant('close'), this.activityService.ConfigSettings.snackBarTime, 'error-snackbar');\r\n\r\n\r\n \r\n\r\n }\r\n }\r\n if (this.activityService.operation === operationType.edit &&\r\n Object.keys(this.activityService.editData)?.length && this.activityService.editData?.Id) {\r\n this.getFinancialEffectCalculation();\r\n }\r\n }\r\n }\r\n\r\n processOrderSummatyList(multiCartRegisterResponse, GuestTypes, BookingTypes, Size, response) {\r\n\r\n console.log(multiCartRegisterResponse);\r\n multiCartRegisterResponse = this.setCartItemForIndividualSessions(multiCartRegisterResponse);\r\n console.log(GuestTypes);\r\n this.subTotal = 0;\r\n\r\n return multiCartRegisterResponse.map((eachRegisterResponse, respIndex) => {\r\n let argGuestTypes = [];\r\n let argBookingTypes = [];\r\n let argSize = 1;\r\n\r\n const eachGuestTypes = this.activityService.findRegistrationAttemptArrayData(GuestTypes, eachRegisterResponse.CartId || GuestTypes[respIndex]?.CartId);\r\n\r\n if (!this.isEdit) {\r\n argGuestTypes = eachGuestTypes.CoverTypes;\r\n argBookingTypes = eachGuestTypes.BookingTypes;\r\n argSize = eachGuestTypes.PartySize;\r\n } else {\r\n argGuestTypes = GuestTypes;\r\n argBookingTypes = BookingTypes;\r\n argSize = Size;\r\n }\r\n if(eachGuestTypes.isDining && eachGuestTypes.SpecialMealId) {\r\n if (eachRegisterResponse) {\r\n eachRegisterResponse = this.formDiningOrderList(eachRegisterResponse,\r\n eachGuestTypes,\r\n +argSize,\r\n eachGuestTypes?.SpecialMealName,\r\n eachRegisterResponse?.RateplanAmountinfo,\r\n eachRegisterResponse?.SpecialMealAmountinfo);\r\n }\r\n }\r\n else {\r\n console.log(GuestTypes, BookingTypes, Size);\r\n if (eachRegisterResponse) {\r\n let reconstructRatePlan: any;\r\n if (this.isEdit) {\r\n reconstructRatePlan = eachRegisterResponse;\r\n } else if (eachRegisterResponse.RatePlanTotal) {\r\n reconstructRatePlan = eachRegisterResponse?.RatePlanTotal.RatePlanCalculations[0];\r\n }\r\n if (reconstructRatePlan) {\r\n eachRegisterResponse.TimeRange = reconstructRatePlan.TimeRange;\r\n eachRegisterResponse.PaymentAmount = (reconstructRatePlan.TotalAmount + reconstructRatePlan.TotalAddOnAmount)\r\n eachRegisterResponse.AddonAttemptDetails = reconstructRatePlan.AddonAttemptDetails;\r\n eachRegisterResponse.TotalAddonAmount = reconstructRatePlan.TotalAddOnAmount;\r\n if (reconstructRatePlan?.RatePlanVariants?.GuestTypeVariant?.length) {\r\n eachRegisterResponse.MinRateAdjustmentAmount = _.sumBy(reconstructRatePlan.RatePlanVariants.GuestTypeVariant, 'MinCoverRateAdjustment');\r\n } else {\r\n eachRegisterResponse.MinRateAdjustmentAmount = 0;\r\n }\r\n \r\n eachRegisterResponse.SlotList =\r\n eachRegisterResponse.LocationVariant = reconstructRatePlan?.RatePlanVariants?.OriginalLocationVariant;\r\n eachRegisterResponse.LocationAmount = reconstructRatePlan?.RatePlanVariants?.LocationVariant;\r\n eachRegisterResponse.InstructorVariant = reconstructRatePlan?.RatePlanVariants?.OriginalInstructorVariant;\r\n eachRegisterResponse.InstructorAmount = reconstructRatePlan?.RatePlanVariants?.InstructorVariant;\r\n eachRegisterResponse.BaseVariant = reconstructRatePlan?.RatePlanVariants?.OriginalBaseRate;\r\n eachRegisterResponse.BaseAmount = reconstructRatePlan?.RatePlanVariants?.TotalBaseRate;\r\n eachRegisterResponse.coverTypeVariants = reconstructRatePlan?.RatePlanVariants?.GuestTypeVariant ?\r\n reconstructRatePlan.RatePlanVariants.GuestTypeVariant.map(coverVariant => {\r\n const guestType = argGuestTypes?.\r\n find(coverType => coverType.CoverTypeId === coverVariant.CoverTypeId);\r\n coverVariant.CoverTypeName = guestType && guestType?.Name ? guestType.Name : '';\r\n coverVariant.coverTotal = (reconstructRatePlan.RatePlanVariants.TotalBaseRate / +argSize) * coverVariant.covers + coverVariant.Variant;\r\n coverVariant.defaultPrice = coverVariant.coverTotal / coverVariant.covers;\r\n coverVariant.coverTotal =\r\n // (((reconstructRatePlan.RatePlanVariants.TotalBaseRate / +argSize) +\r\n // (reconstructRatePlan.RatePlanVariants.InstructorVariant / +argSize) +\r\n // (reconstructRatePlan.RatePlanVariants.LocationVariant / +argSize)) *\r\n // coverVariant.covers) +\r\n coverVariant.Variant;\r\n coverVariant.defaultPrice = coverVariant.OriginalVariant;\r\n return coverVariant;\r\n }).filter(bookingTypeVariant => bookingTypeVariant.covers) : [];\r\n eachRegisterResponse.bookingTypeVariants = reconstructRatePlan?.RatePlanVariants?.BookingTypeVariant ?\r\n reconstructRatePlan.RatePlanVariants.BookingTypeVariant?.map(bookingTypeVariant => {\r\n bookingTypeVariant.BookingTypeName = argBookingTypes?.\r\n find(bookingType => bookingType.BookingTypeId === bookingTypeVariant.BookingTypeId)?.Name;\r\n bookingTypeVariant.bookingTotal = (reconstructRatePlan.RatePlanVariants.TotalBaseRate / +argSize) * bookingTypeVariant.bookingTypes + bookingTypeVariant.Variant;\r\n bookingTypeVariant.defaultPrice = bookingTypeVariant.bookingTotal / bookingTypeVariant.bookingTypes;\r\n return bookingTypeVariant;\r\n }).filter(bookingTypeVariant => bookingTypeVariant.bookingTypes) : [];\r\n \r\n eachRegisterResponse.locationTypeVariants = reconstructRatePlan?.RatePlanVariants?.LocationVariant ?\r\n reconstructRatePlan.RatePlanVariants.LocationVariant?.map(locationTypeVariant => {\r\n locationTypeVariant.LocationName = eachGuestTypes.isDining ?(this.restaurantData.SeatingTypeList?.find(type => type.Id == locationTypeVariant?.SeatingTypeId)?.Description ) : this.ts.instant('location');\r\n locationTypeVariant.locationTotal = locationTypeVariant.Variant;\r\n locationTypeVariant.Count = locationTypeVariant.Count;\r\n locationTypeVariant.defaultPrice = locationTypeVariant.locationTotal / locationTypeVariant.Count;\r\n return locationTypeVariant;\r\n }).filter(bookingTypeVariant => bookingTypeVariant.Count) : [];\r\n\r\n if (eachRegisterResponse?.RatePlanTotal?.SpecialMealVariant && eachRegisterResponse?.RatePlanTotal?.SpecialMealVariant.SpecialMealAmount > 0) {\r\n eachRegisterResponse.coverTypeVariants = eachRegisterResponse.RatePlanTotal.SpecialMealVariant.GuestTypeVariants?.map(coverVariant => {\r\n const guestType = argGuestTypes?.find(coverType => coverType.CoverTypeId === coverVariant.CoverTypeId);\r\n coverVariant.CoverTypeName = guestType && guestType?.Name ? guestType.Name : '';\r\n coverVariant.coverTotal = coverVariant.OriginalVariant * coverVariant.covers;\r\n coverVariant.defaultPrice = coverVariant.OriginalVariant;\r\n return coverVariant;\r\n }).filter(bookingTypeVariant => bookingTypeVariant.covers);\r\n\r\n\r\n reconstructRatePlan.RatePlanVariants.LocationVariant?.map(locationTypeVariant => {\r\n locationTypeVariant.LocationName = eachGuestTypes.isDining ?(this.restaurantData.SeatingTypeList?.find(type => type.Id == locationTypeVariant?.SeatingTypeId)?.Description ) : this.ts.instant('location');\r\n locationTypeVariant.locationTotal = (locationTypeVariant.Variant + reconstructRatePlan.RatePlanVariants.OriginalBaseRate )* locationTypeVariant.Count ;\r\n locationTypeVariant.Count = locationTypeVariant.Count;\r\n locationTypeVariant.defaultPrice = locationTypeVariant.Variant + reconstructRatePlan.RatePlanVariants.OriginalBaseRate;\r\n return locationTypeVariant;\r\n })\r\n }\r\n eachRegisterResponse.TotalAmount = reconstructRatePlan.TotalAmount;\r\n this.subTotal += (reconstructRatePlan.TotalAmount + reconstructRatePlan.TotalAddOnAmount);\r\n }\r\n else {\r\n eachRegisterResponse = this.formOrderSummaryForNoRatePlanBookings(eachRegisterResponse)\r\n }\r\n } else {\r\n eachRegisterResponse.SlotList = response?.Slots;\r\n }\r\n \r\n }\r\n // common bindings for dining and non-dining\r\n eachRegisterResponse.Size = argSize;\r\n eachRegisterResponse.isDining = eachGuestTypes.isDining;\r\n eachRegisterResponse.isNonDining = eachGuestTypes.isNonDining;\r\n let cartItems = this.activityService.getSessionData('CartList_' + this.activityService.restaurantMerchantCode, true);\r\n let cartLockList = this.activityService.getSessionData('CartLockList_' + this.activityService.restaurantMerchantCode, true);\r\n let cartItem = cartItems.find(item => item.CartId === eachRegisterResponse.CartId);\r\n if(!cartItem){\r\n cartItem = cartItems.find(item => item.CartId === eachRegisterResponse.LockCartId);\r\n }\r\n let cartLockItem = cartLockList.find(item => item.CartId === eachRegisterResponse.LockCartId);\r\n eachRegisterResponse.SelectedActivityInfo = cartItem?.SelectedActivityInfo;\r\n if(cartLockItem?.ActivityId){\r\n eachRegisterResponse.WidgetPrePaymentMode = this.activitiesDataDic.Property[cartLockItem.propertyId].Activity[cartLockItem.ActivityId].WidgetPrePaymentMode;\r\n }else{\r\n eachRegisterResponse.WidgetPrePaymentMode = this.activitiesDataDic.Property[cartLockItem.propertyId].WidgetPrePaymentMode;\r\n }\r\n eachRegisterResponse.isAvailable = cartLockItem?.isAvailable;\r\n // if (!this.restaurantData) {\r\n eachRegisterResponse.restaurantData = this.activityService?.widgetSettings?.PropertyWidgetSettings?.find(property => property.RestaurantId == eachRegisterResponse.PropertyId);\r\n // }\r\n return eachRegisterResponse;\r\n });\r\n }\r\n setCartItemForIndividualSessions(cartItems) {\r\n this.totalServiceCharge = 0;\r\n let individual = [];\r\n let cartLockList = this.activityService.getSessionData('CartLockList_' + this.activityService.restaurantMerchantCode, true);\r\n let newCartItems = _.cloneDeep(cartItems)\r\n newCartItems?.forEach((item, index) => {\r\n this.totalTax = this.totalTax + (item.RatePlanTotal?.MinRateAdjustment?.TaxAmount || 0) + (item.RatePlanTotal?.TotalAddonTaxAmount || 0)\r\n this.totalServiceCharge = this.totalServiceCharge + (item.RatePlanTotal?.TotalServiceChargeAmount || 0) + (item.RatePlanTotal?.MinRateAdjustment?.ServiceChargeAmount || 0) + (item.RatePlanTotal?.TotalAddonServiceChargeAmount || 0);\r\n this.taxOnServiceCharge = this.taxOnServiceCharge + (item.RatePlanTotal?.TotalTaxOnServiceChargeAmount || 0) + (item.RatePlanTotal?.MinRateAdjustment?.TaxOnServiceChargeAmount || 0) + (item.RatePlanTotal?.TotalAddonTaxOnServiceChargeAmount || 0);\r\n if (item?.RatePlanTotal?.RatePlanCalculations) {\r\n item.RatePlanTotal.RatePlanCalculations.forEach(ratePlan => {\r\n let summary = _.cloneDeep(cartItems);\r\n let session = summary[index];\r\n session.RatePlanTotal.RatePlanCalculations = [ratePlan]\r\n session.LockCartId = cartLockList[index]?.CartId;\r\n individual.push(session);\r\n })\r\n } else {\r\n let summary = _.cloneDeep(cartItems);\r\n let session = summary[index];\r\n session.LockCartId = cartLockList[index]?.CartId;\r\n individual.push(session);\r\n }\r\n\r\n })\r\n return individual || [];\r\n }\r\n formDiningOrderList(registerResponse, diningDetails, size, specialMealName, ratePlanAmount, specialMealAmount, noShowFeeAmount?) {\r\n registerResponse.bookingTypeVariants = [];\r\n registerResponse.LocalTime = diningDetails.LocalTime;\r\n if (!ratePlanAmount && !specialMealAmount && (registerResponse.PaymentAmount > 0 || noShowFeeAmount)) {\r\n registerResponse.coverTypeVariants = [{\r\n CoverTypeName: this.ts.instant('noShowFee') + ' ' + this.ts.instant('authorizedFee'),\r\n covers: size,\r\n defaultPrice: registerResponse.PaymentAmount || noShowFeeAmount,\r\n coverTotal: registerResponse.PaymentAmount || noShowFeeAmount\r\n }];\r\n } else if (diningDetails?.CoverTypes && diningDetails.CoverTypes.length > 0) {\r\n registerResponse.coverTypeVariants = diningDetails.CoverTypes ? diningDetails.CoverTypes.map(cover => {\r\n return {\r\n CoverTypeName: (specialMealName ? (specialMealName + ' - ') : '') + cover.Name + (registerResponse?.IsImmediatePaymentMode === false && specialMealName ? (' ' + this.ts.instant('authorizedFee')) : ''),\r\n covers: cover.Covers,\r\n defaultPrice: diningDetails.DoesRequirePrepayment ? cover.Price : 0,\r\n coverTotal: diningDetails.DoesRequirePrepayment ? cover.Covers * cover.Price : 0\r\n }\r\n }).filter(coverType => coverType.covers !== 0) : [];\r\n } else if (diningDetails?.CoverTypes.length === 0 && specialMealName && size > 0) {\r\n registerResponse.coverTypeVariants = [{\r\n CoverTypeName: specialMealName,\r\n covers: size,\r\n defaultPrice: diningDetails.DoesRequirePrepayment ? diningDetails.Price : 0,\r\n coverTotal: diningDetails.DoesRequirePrepayment ? diningDetails.Price * size : 0\r\n }];\r\n } else {\r\n registerResponse.coverTypeVariants = [];\r\n }\r\n registerResponse.TotalAmount = (ratePlanAmount ? ratePlanAmount : 0) + (specialMealAmount ? specialMealAmount : 0);\r\n registerResponse.FormattedLocalTime = moment(new Date(diningDetails.LocalTime)).format('YYYY-MM-DDTHH:mm:ss');\r\n return registerResponse;\r\n }\r\n\r\n formOrderSummaryForNoRatePlanBookings(eachRegisterResponse) {\r\n let object = {};\r\n const cartList = this.activityService.getSessionData('CartList_' + this.activityService.restaurantMerchantCode, true) || [];\r\n let cartObj = null;\r\n if (!this.isEdit) {\r\n cartObj = cartList.find(cartData => eachRegisterResponse.CartId == cartData.CartId);\r\n object = eachRegisterResponse;\r\n }\r\n else {\r\n cartObj = cartList.find(cartData => eachRegisterResponse.Id == cartData.ActivityId);\r\n object['Size'] = eachRegisterResponse.Size;\r\n object['BookingTypes'] = eachRegisterResponse.BookingTypes;\r\n object['SelectedActivityInfo'] = cartObj.SelectedActivityInfo;\r\n }\r\n\r\n object['TimeRange'] = {\r\n End: cartObj?.SelectedTimeSlots?.[0].End,\r\n Start: cartObj.SelectedTimeSlots?.[0].Start\r\n }\r\n let cartLockList = this.activityService.getSessionData('CartLockList_' + this.activityService.restaurantMerchantCode, true);\r\n let cartLock = cartLockList.find(cartData => eachRegisterResponse.ActivityId == cartData.ActivityId);\r\n if (cartLock) {\r\n object['isAvailable'] = cartLock?.isAvailable;\r\n }\r\n return object;\r\n }\r\n\r\n deleteCartItem(cartIndex, event: Event) {\r\n event.stopPropagation();\r\n this.unLockMultiCart(cartIndex);\r\n }\r\n\r\n deleteAllCartItem() {\r\n this.unLockMultiCart();\r\n }\r\n\r\n findPartySize() {\r\n let size = 0;\r\n this.cartItems.forEach(cartItem => {\r\n size += cartItem?.Size ? cartItem.Size : 0;\r\n });\r\n this.guestPartySize = size;\r\n }\r\n\r\n resetCartData(cartIndex, modifiedLockCart) {\r\n let cartBookObj = this.activityService.getSessionData('CartList_' + this.activityService.restaurantMerchantCode, true);\r\n cartBookObj = cartBookObj.filter((eachCartObj, index) => {\r\n return cartIndex !== index;\r\n });\r\n // cartBookObj = cartBookObj.slice(cartIndex,1);\r\n this.activityService.setSessionData('CartList_' + this.activityService.restaurantMerchantCode, cartBookObj, true);\r\n let cartLockObj = this.activityService.getSessionData('CartLockList_' + this.activityService.restaurantMerchantCode, true);\r\n cartLockObj = cartLockObj.filter((eachCartObj, index) => {\r\n return cartIndex !== index;\r\n });\r\n // cartLockObj = cartLockObj.slice(cartIndex,1);\r\n this.activityService.setSessionData('CartLockList_' + this.activityService.restaurantMerchantCode, cartLockObj, true);\r\n this.activityService.triggerCartUpdate();\r\n this.activityService.operation === operationType.edit ? this.setRatePlanCalculation(true) :\r\n this.RegisterReservationMerchantLevelAttempt(true);\r\n }\r\n\r\n unLockMultiCart(cartIndex = null) {\r\n const modifiedLockCart = [];\r\n\r\n const CartLockList = this.activityService.getSessionData('CartLockList_' + this.activityService.restaurantMerchantCode, true) || [];\r\n\r\n if (cartIndex !== null) {\r\n modifiedLockCart.push(CartLockList[cartIndex].slotLockResp);\r\n } else {\r\n CartLockList.forEach(cartlock => {\r\n modifiedLockCart.push(cartlock.slotLockResp);\r\n });\r\n }\r\n let filteredItems = this.activityService.lockMultipleResult ? [].concat.apply([], this.activityService.lockMultipleResult).filter(x => x.SlotLockResultDTO && x.SlotLockResultDTO.SlotLockIdDTO) : [];\r\n if (filteredItems) {\r\n CartLockList.forEach(item => {\r\n let filteredObjects = filteredItems.filter(listObj => listObj.CartId == item.CartId)\r\n\r\n item.isAvailable = filteredObjects.length > 0 ? true : false;\r\n\r\n });\r\n }\r\n this.activityService.setSessionData('CartLockList_' + this.activityService.restaurantMerchantCode, CartLockList, true);\r\n\r\n\r\n this.activityService.startLoader();\r\n this.subscriptions.add(\r\n this.activityService\r\n .unLockMultiPropertySessions(modifiedLockCart).subscribe(response => {\r\n // this.activityService.stopLoader();\r\n this.activityService.lockMultipleResult = null;\r\n if (cartIndex !== null) {\r\n this.resetCartData(cartIndex, modifiedLockCart);\r\n } else {\r\n this.activityService.emptyCartData();\r\n }\r\n }, () => {\r\n this.activityService.stopLoader();\r\n })\r\n );\r\n }\r\n\r\n lockMultiPropertySessions() {\r\n const modifiedLockCart = this.activityService.formCartLockPayLoad(this.activityService.restaurantMerchantCode);\r\n this.activityService.startLoader();\r\n this.subscriptions.add(\r\n this.activityService\r\n .lockMultiPropertySessions(modifiedLockCart).subscribe(response => {\r\n this.activityService.stopLoader();\r\n this.activityService.setLockIdsResponse(response.Payload, this.activityService.restaurantMerchantCode);\r\n this.activityService.lockMultipleResult = response.Payload;\r\n })\r\n );\r\n }\r\n\r\n RegisterReservationMerchantLevelAttempt(isIframeToBeDisplayed: boolean, fromEdit = false) {\r\n const cartObj = this.activityService.getSessionData('CartList_' + this.activityService.restaurantMerchantCode, true) || [];\r\n const cartLockList = this.activityService.getSessionData('CartLockList_' + this.activityService.restaurantMerchantCode, true) || [];\r\n this.showCartLockWarning = true;\r\n if (cartLockList.length == cartLockList.filter(x => x.isAvailable).length) {\r\n this.showCartLockWarning = false;\r\n }\r\n const multiRegPayload = [];\r\n if (cartObj && cartObj.length > 0) {\r\n cartObj.forEach(eachActivities => {\r\n const registerReservationAttemptRequestDTO: any = {\r\n CartId: eachActivities.CartId,\r\n Size: +eachActivities?.Size,\r\n ActivityId: eachActivities?.SpecialMealId,\r\n CoverTypes: eachActivities?.CoverTypes,\r\n TableIds: eachActivities?.isNonDining ? eachActivities?.TableIds : eachActivities?.TableId,\r\n InstructorIds: [], // eachActivities?.InstructorIds\r\n BookingTypes: eachActivities?.BookingTypes,\r\n FromWebsite: true,\r\n BookingBehavior: eachActivities?.BookingBehavior,\r\n PartyId: this.activityService.operation === operationType.edit ? (this.activityService?.editData?.Id || null) : null,\r\n MemberType: this.activityService.selectedGuest?.MembershipType,\r\n MemberActive: this.activityService.selectedGuest?.MemberActive,\r\n PropertyId: +eachActivities?.PropertyId,\r\n RestaurantId: +eachActivities?.PropertyId,\r\n LocalTime: eachActivities?.LocalTime,\r\n SpecialMealId: eachActivities?.SpecialMealId,\r\n SeatingTypeId: eachActivities?.SeatingTypeId,\r\n isDining: eachActivities.isDining,\r\n isNonDining: eachActivities.isNonDining,\r\n Slots: !eachActivities.isNonDining ? [{\r\n LocalTime: eachActivities?.LocalTime,\r\n }] : eachActivities.Slots,\r\n SpecialMealName: eachActivities?.SelectedActivityInfo?.Name,\r\n DoesRequirePrepayment: eachActivities?.DoesRequirePrepayment,\r\n Price: eachActivities?.Price,\r\n AddOns: eachActivities.AddOns || Utilities.getSelectedAddOns(this.activityService.addOnList),\r\n BookingTypeInfo :eachActivities.BookingTypeInfo || null\r\n };\r\n\r\n if (!eachActivities.isDining && !eachActivities.isNonDining) {\r\n registerReservationAttemptRequestDTO.SessionSlot = eachActivities?.Sessions;\r\n if (eachActivities.AddOns?.length > 0 && (registerReservationAttemptRequestDTO.AddOns?.length == 0)) {\r\n registerReservationAttemptRequestDTO.AddOns = eachActivities.AddOns;\r\n }\r\n if (registerReservationAttemptRequestDTO.BookingBehavior === BookingBehavior.ClassOrSession) {\r\n registerReservationAttemptRequestDTO.Slots = [];\r\n }\r\n else {\r\n registerReservationAttemptRequestDTO.SessionSlot = null;\r\n }\r\n }\r\n\r\n multiRegPayload.push(registerReservationAttemptRequestDTO);\r\n }); \r\n \r\n this.activityService.bannerImageHandler(multiRegPayload);\r\n this.activityService.startLoader();\r\n this.activityService.RegisterReservationAttemptMerchantLevelUniversalCart(multiRegPayload).subscribe((response: any) => {\r\n if (response) {\r\n if(!this.activityService.loaderRunning) {\r\n this.activityService.startLoader();\r\n }\r\n //this.preloadCartData();\r\n console.log(response);\r\n this.paymentData = this.activityService.reservationAttemptInfo = response;\r\n this.financialEffectId = this.activityService.reservationAttemptInfo.FinancialEffectId;\r\n this.paymentGateway = response.PaymentGateway;\r\n this.TotalAmount = response.Total;\r\n this.PayableAmount = response.Unpaid;\r\n this.totalTax = response.TaxAmount;\r\n if (response.ShouldCreditCardBeEntered && isIframeToBeDisplayed) {\r\n if (this.activityService.reservationAttemptInfo?.CreditCardIframeUrl) {\r\n this.LoadIframe(this.activityService.reservationAttemptInfo?.CreditCardIframeUrl);\r\n this.paymentOffline = false;\r\n }\r\n else {\r\n this.paymentOffline = true;\r\n this.activityService.openSnackBar(\r\n this.ts.instant('SorryForPaymentOffline'), this.ts.instant('close'), this.activityService.ConfigSettings.snackBarTime, 'error-snackbar');\r\n }\r\n }\r\n this.mapSummaryDetails(response.ResponseDTOs);\r\n // response.ResponseDTOs[0].RatePlanTotal = {\"RatePlanCalculations\":[{\"TimeRange\":{\"Start\":\"2023-11-02T18:00:00\",\"End\":\"2023-11-02T20:00:00\",\"Length\":\"02:00:00\",\"memberDetails\":[{\"GuestId\":12458,\"GuestName\":\"Guest 1\",\"RateType\":\"RT1\",\"SessionCharges\":260,\"LineItems\":[{\"LineItemId\":187,\"Description\":\"Hotel guest\",\"Quantity\":1,\"PreviousGrossPrice\":0,\"RetailPrice\":100,\"ItemTotal\":100},{\" LineItemId \":154,\"Description\":\"Adult\",\"Quantity\":1,\"PreviousGrossPrice\":0,\"RetailPrice\":100,\"ItemTotal\":100},{\"LineItemId\":158,\"Description\":\"Gross Court\",\"Quantity\":1,\"PreviousGrossPrice\":0,\"RetailPrice\":100,\"ItemTotal\":100},{\"LineItemId\":190,\"Description\":\"tennis racquet\",\"Quantity\":1,\"PreviousGrossPrice\":0,\"RetailPrice\":60,\"ItemTotal\":60}]}]}}],\"Tax\":[{\"TotalAmount\":100,\"Amount\":10,\"Percentage\":10,\"Description\":\"VAT\"},{\"TotalAmount\":250,\"Amount\":15,\"Percentage\":5,\"Description\":\"VAT\"}],\"TaxOnServiceCharge\":[{\"Amount\":10,\"Percentage\":5,\"Description\":\"Service Charge VAT\"}],\"MinRateAdjustment\":0,\"ActivitiesAmount\":520,\"NegotiatedDiscount\":0,\"Subtotal\":520,\"ServiceCharge\":0,\"GrandTotal\":520,\"RecalculateServiceCharge\":true,\"negotiatedReason\":\"Test Description\"};\r\n // this.totalActivitiesRegistered = response.ResponseDTOs || [];\r\n this.totalActivitiesRegistered.map((activity, index) => {\r\n let cartItems = this.activityService.getSessionData('CartList_' + this.activityService.restaurantMerchantCode, true);\r\n let cartLockList = this.activityService.getSessionData('CartLockList_' + this.activityService.restaurantMerchantCode, true);\r\n let cartItem = cartItems.find(item => item.CartId === activity.CartId);\r\n activity.TimeRange = activity.RatePlanTotal.RatePlanCalculations[index].TimeRange;\r\n activity.Size = cartItem.Size;\r\n activity.isDining = cartItem.isDining;\r\n activity.isNonDining = cartItem.isNonDining;\r\n if (!cartItem) {\r\n cartItem = cartItems.find(item => item.CartId === activity.LockCartId);\r\n }\r\n let cartLockItem = cartLockList.find(item => item.CartId === activity.LockCartId);\r\n activity.SelectedActivityInfo = cartItem?.SelectedActivityInfo;\r\n if (cartLockItem.ActivityId) {\r\n activity.WidgetPrePaymentMode = this.activitiesDataDic.Property[cartLockItem.propertyId].Activity[cartLockItem.ActivityId].WidgetPrePaymentMode;\r\n } else {\r\n activity.WidgetPrePaymentMode = this.activitiesDataDic.Property[cartLockItem.propertyId].WidgetPrePaymentMode;\r\n }\r\n activity.isAvailable = cartLockItem?.isAvailable;\r\n activity.restaurantData = this.activityService?.widgetSettings?.PropertyWidgetSettings?.find(property => property.RestaurantId == activity.PropertyId);\r\n })\r\n this.activityService?.stopLoader();\r\n }\r\n if (this.activityService.operation === operationType.edit &&\r\n Object.keys(this.activityService.editData)?.length && this.activityService.editData?.Id) {\r\n this.getFinancialEffectCalculation();\r\n }\r\n console.log(this.totalActivitiesRegistered);\r\n }, () => { // error handling\r\n this.totalActivitiesRegistered = [];\r\n this.activityService.stopLoader();\r\n });\r\n } else {\r\n this.totalActivitiesRegistered = [];\r\n this.activityService.navigateToUrl('list');\r\n this.activityService.openSnackBar(\r\n this.ts.instant('noItemsAvailable'), this.ts.instant('close'), this.activityService.ConfigSettings.snackBarTime, 'error-snackbar');\r\n }\r\n }\r\n mapSummaryDetails(response){\r\n let bookings = [];\r\n response.forEach((eachBooking) =>{\r\n let cartItem = this.cartItems.find(cart => cart.CartId == eachBooking?.CartId);\r\n eachBooking.RatePlanTotal.Reservations?.forEach((eachItem) =>{\r\n eachItem.Sessions.forEach(session =>{\r\n bookings.push({\r\n Items:session.GuestPrices.length ? session.GuestPrices[0].Items : [],\r\n date:session.Date,\r\n SubTotal:session.SubTotal,\r\n Total:session.Total || 0,\r\n TimeRange:session.TimeRange,\r\n ActivityName:eachBooking.ActivityName,\r\n Size:eachBooking.Size ? eachBooking.Size : this.guestPartySize,\r\n WidgetPrePaymentMode : cartItem?.SpecialMealId ? this.activitiesDataDic.Property[eachBooking.PropertyId].Activity[cartItem.SpecialMealId].WidgetPrePaymentMode : this.activitiesDataDic.Property[eachBooking.PropertyId].WidgetPrePaymentMode,\r\n ServiceCharge: session.ServiceCharge,\r\n ServiceCharges: session.ServiceCharges,\r\n VAT: session.VAT,\r\n Tax: session.Tax,\r\n Taxes: session.Taxes,\r\n TotalItems: session.GuestPrices.length ? _.map(session.GuestPrices,'Items').flat() : [],\r\n NoShowFeeAmount: eachItem.NoShowFeeAmount\r\n })\r\n })\r\n })\r\n });\r\n this.overallBookings = bookings;\r\n\r\n \r\n }\r\n getFinancialEffectCalculation() { // need this call for single edit\r\n this.infoMessage = '';\r\n this.balanceAmount = 0;\r\n this.refundAmount = false;\r\n const partyDTO = this.buildReservationRequest();\r\n this.activityService.startLoader();\r\n this.activityService.GetFinancialEffectCalculation(partyDTO[0], this.activityService.isDining).subscribe((data: any) => {\r\n this.activityService.stopLoader();\r\n if (data) {\r\n this.financialData = data;\r\n if (data.PaymentGateway) {\r\n this.paymentGateway = data.PaymentGateway;\r\n }\r\n if (data.RefundOption) {\r\n this.refundData = data.RefundOption;\r\n }\r\n if (data.TotalAmount) {\r\n this.TotalAmount = data.TotalAmount;\r\n this.PayableAmount = data.PaymentAmount;\r\n this.balanceAmount = data.PaymentAmount;\r\n this.totalTax = (data.TaxAmount || 0);\r\n this.totalServiceCharge = (data.ServiceChargeAmount || 0);\r\n this.taxOnServiceCharge = (data.TaxOnServiceCharge || 0);\r\n }\r\n if(data.RatePlanTotal){\r\n this.totalTax = 0;\r\n this.totalServiceCharge = 0;\r\n let ratePlan = data.RatePlanTotal\r\n this.totalTax = (ratePlan?.TotalTaxAmount || 0) + (ratePlan?.TotalAddonTaxAmount || 0) + (ratePlan?.MinRateAdjustment?.TaxAmount || 0);\r\n this.totalServiceCharge = (ratePlan?.TotalServiceChargeAmount || 0) + (ratePlan?.TotalAddonServiceChargeAmount || 0) + ( ratePlan?.MinRateAdjustment?.ServiceChargeAmount || 0);\r\n this.taxOnServiceCharge = (ratePlan.TotalTaxOnServiceChargeAmount || 0) + (ratePlan?.TotalAddonTaxOnServiceChargeAmount || 0) + ( ratePlan?.MinRateAdjustment?.TaxOnServiceChargeAmount || 0);\r\n }\r\n if (this.financialData) {\r\n let financeEffects = this.financialData?.FinancialEffects?.[0]?.RatePlanTotal?.RatePlanCalculations?.[0];\r\n if (financeEffects && this.isEdit && !this.activityService.isDining && financeEffects.AddonAttemptDetails) {\r\n this.totalActivitiesRegistered[0].AddonAttemptDetails = financeEffects.AddonAttemptDetails;\r\n this.totalActivitiesRegistered[0].TotalAddonAmount = financeEffects.TotalAddOnAmount;\r\n this.totalActivitiesRegistered[0].TotalAmount = financeEffects.TotalAmount;\r\n this.totalActivitiesRegistered[0].TaxAmount = this.totalActivitiesRegistered[0].TaxAmount + financeEffects.TotalAddOnTaxAmount;\r\n }\r\n }\r\n let bookings = [];\r\n data.RatePlan?.Reservations?.forEach((eachItem) =>{\r\n eachItem.Sessions.forEach(session =>{\r\n bookings.push({\r\n Items:session.GuestPrices[0].Items,\r\n date:session.Date,\r\n SubTotal:session.SubTotal,\r\n Total:session.Total,\r\n TimeRange:session.TimeRange,\r\n ActivityName:data?.ActivityName ? data.ActivityName : this.restaurantData?.RestaurantName || null,\r\n Size:data.Size ? data.Size : this.guestPartySize,\r\n WidgetPrePaymentMode : null,\r\n ServiceCharge: session.ServiceCharge,\r\n ServiceCharges: session.ServiceCharges,\r\n VAT: session.VAT,\r\n Tax: session.Tax,\r\n Taxes: session.Taxes,\r\n NoShowFeeAmount: eachItem.NoShowFeeAmount\r\n })\r\n })\r\n });\r\n this.overallBookings = bookings;\r\n if (data.RedirectUrl) {\r\n this.isSplitPayment = false;\r\n this.isUserAllowedToclickConfirm = false;\r\n this.paymentData.ReservationAttemptId = data.ReservationAttemptId;\r\n // this.confirmButton.disbaledproperity = true;\r\n this.LoadIframe(data.RedirectUrl);\r\n } // else {\r\n switch (data.PartyPaymentType) {\r\n case 0: // NotSupported\r\n this.activityService.setMessageState(this.ts.instant('ReservationBetweenLocationPrePaidNotSupported'), 0);\r\n this.isUserAllowedToclickConfirm = false;\r\n // this.confirmButton.disbaledproperity = true;\r\n return;\r\n break;\r\n case 1: // NoPaymentsInvolved\r\n // No messaging in this case\r\n break;\r\n case 2: // NoEffect\r\n if(data.RetailCreditCardPaymentTokenId){\r\n this.infoMessage = this.ts.instant('SavedCardInfoMessageForCharge');\r\n }else{\r\n this.showFinancialEffectPopUp(this.ts.instant('NoChargeOrRefundForThisReservation'));\r\n }\r\n break;\r\n case 3: // NewReservationAttempt\r\n // paymentIframeRequired = true;\r\n if (this.isSelectedMealDefferedPayment()) {\r\n this.popUpMessage = this.ts.instant('yourCardWillBeChargedPriorToYourMealTime');\r\n } else {\r\n this.popUpMessage = this.ts.instant('NoRefundYourPrePayment') + ' ' + this.operationCurrency + data.TotalAmount.toFixed(this.widgetSettings.NumberOfFractionalDigits);\r\n }\r\n this.showFinancialEffectPopUp(this.popUpMessage);\r\n break;\r\n case 4: // NoFullRefund\r\n if (data.TotalAmount != null && (data.TotalAmount > 0)) {\r\n this.popUpMessage = this.ts.instant('NoRefundYourPrePayment') + ' ' + this.operationCurrency + data.TotalAmount.toFixed(this.widgetSettings.NumberOfFractionalDigits);\r\n }\r\n else {\r\n // There was no prepayment to mention in text (or it was already refunded)\r\n this.popUpMessage = this.ts.instant('NoChargeOrRefundForThisReservation');\r\n }\r\n this.showFinancialEffectPopUp(this.popUpMessage);\r\n break;\r\n case 5: // FullRefund\r\n this.popUpMessage = this.ts.instant('CardUsedForOriginalReservationWillBeRefunded') + ' '\r\n + this.operationCurrency + data.TotalAmount.toFixed(this.widgetSettings.NumberOfFractionalDigits) + ' ' + this.ts.instant('severBusinessDays');\r\n this.showFinancialEffectPopUp(this.popUpMessage);\r\n break;\r\n case 6: // NoFullRefundAndNewReservationAttempt\r\n if (data.TotalAmount != null && (data.TotalAmount > 0)) {\r\n this.popUpMessage = this.ts.instant('NoRefundYourPrePayment') + ' ' + this.operationCurrency + data.PaymentAmount.toFixed(this.widgetSettings.NumberOfFractionalDigits);\r\n }\r\n else {\r\n // There was no prepayment to mention in text (or it was already refunded)\r\n this.popUpMessage = this.ts.instant('noRefundMessage');\r\n }\r\n this.showFinancialEffectPopUp(this.popUpMessage);\r\n break;\r\n case 7: // FullRefundAndNewReservationAttempt\r\n this.popUpMessage = this.ts.instant('CardUsedForOriginalReservationWillBeRefunded') + ' '\r\n + this.operationCurrency + data.TotalAmount.toFixed(this.widgetSettings.NumberOfFractionalDigits) + ' ' + this.ts.instant('severBusinessDays');\r\n this.showFinancialEffectPopUp(this.popUpMessage);\r\n break;\r\n case 8: // PartialCharge\r\n if (this.activityService.reservationAttemptInfo?.ShouldCreditCardBeEntered || this.financialData?.IsCreditCardNeeded) {\r\n this.popUpMessage = this.ts.instant('CardNeededToUpdateThisReservation') + ' '\r\n + this.operationCurrency + data.PaymentAmount.toFixed(this.widgetSettings.NumberOfFractionalDigits) + ' ' + this.ts.instant('enterCreditCard');\r\n }\r\n else {\r\n this.popUpMessage = this.ts.instant('CardUsedForTheOriginalBookingWillCharged') + ' '\r\n + this.operationCurrency + data.PaymentAmount.toFixed(this.widgetSettings.NumberOfFractionalDigits);\r\n }\r\n this.showFinancialEffectPopUp(this.popUpMessage);\r\n break;\r\n case 9:\r\n case 14: // PartialRefund \r\n this.refundAmount = true;\r\n if (this.financialData.RefundOption && this.financialData.RefundOption.length > 0) {\r\n // this.popUpMessage = this.ts.instant('Refund request of ') +\r\n // this.operationCurrency + data.PaymentAmount + this.ts.instant(' has been initiated');\r\n this.popUpMessage = this.ts.instant('refundRequestOf') + this.operationCurrency + data.PaymentAmount.toFixed(this.widgetSettings.NumberOfFractionalDigits) + this.ts.instant('hasBeenProcessed');\r\n } else {\r\n this.popUpMessage = this.ts.instant('refundMessage') + this.operationCurrency + Math.abs(data.PaymentAmount).toFixed(this.widgetSettings.NumberOfFractionalDigits) + '.
'\r\n + this.ts.instant('severalDaysMessage');\r\n }\r\n this.showFinancialEffectPopUp(this.popUpMessage);\r\n break;\r\n case 10: // NoShowFeeUpdated\r\n this.popUpMessage = this.ts.instant('IfDonotShowYouWillBeCharged') + ' ' +\r\n this.operationCurrency + data.TotalAmount.toFixed(this.widgetSettings.NumberOfFractionalDigits);\r\n this.showFinancialEffectPopUp(this.popUpMessage);\r\n break;\r\n case 11: // Authorize\r\n\r\n if (data.TotalAmount > 0) {\r\n this.popUpMessage = this.ts.instant('CardUsedAtBookingWillBeChargedAtMealTime') + ' ' +\r\n this.operationCurrency + data.TotalAmount.toFixed(this.widgetSettings.NumberOfFractionalDigits);\r\n this.showFinancialEffectPopUp(this.popUpMessage);\r\n }\r\n break;\r\n case 12: // Authorize updated\r\n\r\n if (data.TotalAmount > 0) {\r\n this.popUpMessage = this.ts.instant('CardUsedAtBookingWillBeChargedAtMealTime') + ' ' +\r\n this.operationCurrency + data.TotalAmount.toFixed(this.widgetSettings.NumberOfFractionalDigits);\r\n this.showFinancialEffectPopUp(this.popUpMessage);\r\n }\r\n break;\r\n }\r\n if (this.isEdit && this.activityService.isDining && this.activityService.selectedSpecialMeal) {\r\n this.totalActivitiesRegistered = this.processEditOrderSummaryList(data);\r\n }\r\n // this.bindPaymentAmountAndMessage(data.RatePlanAmount, data.SpecialMealAmount, data.TotalAmount)\r\n // need to check how to find deferred payment mode\r\n if (this.activityService.reservationAttemptInfo?.ShouldCreditCardBeEntered) {\r\n this.isUserAllowedToclickConfirm = false;\r\n // this.confirmButton.disbaledproperity = true;\r\n this.LoadIframe(this.activityService.reservationAttemptInfo?.CreditCardIframeUrl);\r\n }\r\n else {\r\n if (!data.RedirectUrl) {\r\n this.isUserAllowedToclickConfirm = true;\r\n // this.confirmButton.disbaledproperity =\r\n // this.activityService.restaurantWidgetSettings$.value.WidgetCustomization.ConfirmationVia == ConfirmationVia.Both;\r\n }\r\n }\r\n // }\r\n }\r\n setTimeout(() => {\r\n this.checkSubmitValidation();\r\n }, 200)\r\n });\r\n }\r\n\r\n showFinancialEffectPopUp(Message: string) {\r\n const popUpMessage = [{\r\n confirmationMessage: Message,\r\n dialogTitle: this.ts.instant('paymentInfo'),\r\n showAlert: true\r\n }];\r\n const componentDetails: ComponentDetails = Utilities.setComponentDetails(PopupMessageComponent, 'small', '', popUpMessage,\r\n popUpMessage[0].dialogTitle);\r\n this.financialPopUpRef = this.activityService.openCustomPopup(componentDetails, ComponentTypes.financialEffectCalculation, '450px', '260px', true, 'No', this.ts.instant('confirm'),\r\n this.ts.instant('cancel'), true, '90vw');\r\n this.financialPopUpRef.afterClosed().subscribe(data => {\r\n this.checkSubmitValidation();\r\n if (data?.cancel) {\r\n // unlock session\r\n this.unlockSessions();\r\n this.activityService.emptyCartData();\r\n }\r\n });\r\n }\r\n\r\n // Order Summary List formation for dining edit scenario\r\n processEditOrderSummaryList(financialEffect) {\r\n let diningCartItem = this.activityService.getSessionData('CartList_' + this.activityService.restaurantMerchantCode, true)[0] || [];\r\n let editedDiningItem: any = {};\r\n let noShowFee: any = 0;\r\n if (diningCartItem?.CoverTypes && diningCartItem.CoverTypes.length > 0) {\r\n diningCartItem.CoverTypes = diningCartItem.CoverTypes.map(cover => {\r\n return {\r\n ...cover,\r\n Price: this.activityService.editData?.SpecialMeal?.CoverTypePrices.find(coverPrice => coverPrice.Id == cover.CoverTypeId)?.Price || 0\r\n }\r\n });\r\n }\r\n if (financialEffect?.PartyPaymentType == FinancialEffectType.NoShowFeeUpdated) {\r\n noShowFee = financialEffect?.TotalAmount\r\n }\r\n editedDiningItem = this.formDiningOrderList(editedDiningItem, diningCartItem,\r\n diningCartItem.Size,\r\n diningCartItem?.SelectedActivityInfo?.Name,\r\n financialEffect?.SpecialMealAmount,\r\n financialEffect?.RatePlanAmount,\r\n noShowFee);\r\n editedDiningItem.PaymentAmount = financialEffect.PaymentAmount;\r\n editedDiningItem.Size = diningCartItem.Size;\r\n editedDiningItem.isDining = diningCartItem.isDining;\r\n editedDiningItem.SelectedActivityInfo = diningCartItem.SelectedActivityInfo;\r\n return [editedDiningItem];\r\n }\r\n\r\n unlockSessions() {\r\n if (this.activityService.lockResult && this.activityService.lockResult.SlotLockIdDTO) {\r\n this.activityService.unlockSessionsUrl(this.activityService.lockResult.SlotLockIdDTO.Id).subscribe(data => {\r\n this.activityService.lockResult = null;\r\n this.activityService.offTimer();\r\n this.activityService.navigateToUrl('slot-selection/' + this.activityService.restaurantWidgetId);\r\n });\r\n } else if (this.activityService.lockMultipleResult) {\r\n const lockData = Object.values(this.activityService.lockMultipleResult);\r\n const LockIds: number[] = [];\r\n lockData.forEach((innerArray:any) => {\r\n innerArray?.forEach(item => {\r\n const id = item?.SlotLockResultDTO?.SlotLockIdDTO?.Id;\r\n if (id !== undefined) {\r\n LockIds.push(id);\r\n }\r\n });\r\n });\r\n\r\n this.activityService.releaseMultiple(LockIds).subscribe(data => {\r\n this.activityService.lockMultipleResult = null;\r\n this.activityService.offTimer();\r\n this.activityService.navigateToUrl('slot-selection/' + this.activityService.restaurantWidgetId);\r\n });\r\n } else {\r\n this.activityService.offTimer();\r\n this.activityService.navigateToUrl('slot-selection/' + this.activityService.restaurantWidgetId);\r\n }\r\n }\r\n\r\n isSelectedMealDefferedPayment(): boolean {\r\n const isDeffered = false;\r\n // if (this.gs.reservationFormGroup.get('reservationDetailsForm').get('specialMeal').value) {\r\n // isDeffered = (this.gs.reservationFormGroup.get('reservationDetailsForm')\r\n // .get('specialMeal').value.DoesRequirePrepayment &&\r\n // !this.gs.reservationFormGroup.get('reservationDetailsForm').get('specialMeal').value.ChargeOnBooking) ? true : false;\r\n // }\r\n return isDeffered;\r\n }\r\n\r\n LoadGuestWaiverForm(formCode) {\r\n this.activityService.startLoader();\r\n this.activityService.GetAuthWaiverForm(this.activityService?.selectedActivities?.restaurantWidgetId, formCode).subscribe(data => {\r\n this.activityService.stopLoader();\r\n if (data) {\r\n this.LoadIframe(data.formURL);\r\n this.waiverForm = true;\r\n this.activityService.operation === operationType.edit ? this.setRatePlanCalculation(true) :\r\n this.RegisterReservationMerchantLevelAttempt(true);\r\n }\r\n else {\r\n this.activityService.operation === operationType.edit ? this.setRatePlanCalculation(true) :\r\n this.RegisterReservationMerchantLevelAttempt(true);\r\n this.activityService\r\n .openSnackBar(this.ts.instant('somethingWentWrong'), this.ts.instant('close'), this.activityService.ConfigSettings.snackBarTime, 'error-snackbar');\r\n }\r\n }, error => {\r\n this.activityService.stopLoader();\r\n });\r\n }\r\n\r\n LoadIframe(iframeURl: string) {\r\n if (iframeURl) {\r\n this.urlSafe = this.sanitizer.bypassSecurityTrustResourceUrl(iframeURl + '&origin=' + window.location.origin);\r\n this.showIframe = true;\r\n }\r\n else {\r\n this.activityService.\r\n openSnackBar(this.ts.instant('somethingWentWrong'), this.ts.instant('close'), this.activityService.ConfigSettings.snackBarTime, 'error-snackbar');\r\n }\r\n }\r\n\r\n clickToPayment() {\r\n console.log(this.guestDetails);\r\n this.formSubmitted = true;\r\n let action: ActionControl = this.getBookingActions(this.activityService.widgetSettings); \r\n if (this.confToken) {\r\n this.router.navigate([`/v2/activities/confirmation/${this.activityService.restaurantMerchantCode || ''}/${this.confToken || ''}`] , {queryParams : {actionControl : action}});\r\n } else {\r\n this.reservationConfirm(true);\r\n }\r\n }\r\n getBookingActions(widgetSettings): ActionControl {\r\n if (widgetSettings?.DisplayModifyButton && widgetSettings?.DisplayCancelButton) {\r\n return ActionControl.CanModifyAndCancel;\r\n } else if (widgetSettings?.DisplayModifyButton) {\r\n return ActionControl.CanModify;\r\n } else if (widgetSettings?.DisplayCancelButton) {\r\n return ActionControl.CanCancel;\r\n } else {\r\n return ActionControl.None\r\n }\r\n }\r\n\r\n proceedReservation(waiverFormTrancationId) {\r\n this.showIframe = false;\r\n this.waiverFormTrancationId = waiverFormTrancationId;\r\n if (this.activityService.reservationAttemptInfo) {\r\n if (this.activityService.reservationAttemptInfo?.ShouldCreditCardBeEntered) {\r\n if (this.activityService.reservationAttemptInfo?.CreditCardIframeUrl) {\r\n this.LoadIframe(this.activityService.reservationAttemptInfo?.CreditCardIframeUrl);\r\n this.paymentOffline = false;\r\n }\r\n else {\r\n this.paymentOffline = true;\r\n this.activityService.openSnackBar(this.ts.instant('SorryForPaymentOffline'),\r\n this.ts.instant('close'), this.activityService.ConfigSettings.snackBarTime, 'error-snackbar');\r\n }\r\n }\r\n else {\r\n this.isUserAllowedToclickConfirm = true;\r\n if (this.guestDetailsForm.invalid || !this.checkCustomTermsAndMessageOptionValidation()) {\r\n this.activityService.openSnackBar(this.ts.instant('completeAllFields'),\r\n this.ts.instant('close'), this.activityService.ConfigSettings.snackBarTime, 'error-snackbar');\r\n this.showIframe = false;\r\n }\r\n else {\r\n this.reservationConfirm();\r\n }\r\n }\r\n } else {\r\n this.activityService.operation === operationType.edit ? this.setRatePlanCalculation(true) :\r\n this.RegisterReservationMerchantLevelAttempt(true);\r\n }\r\n\r\n }\r\n\r\n UpdateMultiCartReservationAttempt(Dto) {\r\n this.activityService.startLoader();\r\n this.activityService.UpdateMultiCartReservationAttempt(Dto).subscribe(data => {\r\n this.activityService.stopLoader();\r\n let url = '';\r\n const sorrysomethingwentwromg = this.ts.instant('SorryWeGotSomeErrorWhileProcessing');\r\n const CCUprocessableTryAgainErrorMessage = this.ts.instant('CCUprocessableTryAgainErrorMessage');\r\n const ImportantErrorMessage = this.ts.instant('ImportantErrorMessage');\r\n const CreditCardAuthorizationError = this.ts.instant('CreditCardAuthorizationError');\r\n const TryAgainMessage = this.ts.instant('TryAgainMessage');\r\n const CardNumbershouldContainOnlyDigits = this.ts.instant('CardNumbershouldContainOnlyDigits');\r\n const CardNumberShouldConsists13To16Digits = this.ts.instant('CardNumberShouldConsists13To16Digits');\r\n const CardNumberShouldNotBlank = this.ts.instant('CardNumberShouldNotBlank');\r\n const SorryWeGotSomeErrorCardExpired = this.ts.instant('SorryWeGotSomeErrorWhileProcessingCardExpired');\r\n if (data && (data.ErrorMessage || data.ExceptionMessage ||\r\n (data.ValidationMessages && data.ValidationMessages.length > 0) || data.length === 0)) {\r\n if (data.ErrorMessage && data.ErrorMessage.length > 0) {\r\n if (data.ErrorMessage === 'Please try it one more time, if the problem repeats, contact to rGuestSeat@Agilysys.com') {\r\n url = sorrysomethingwentwromg + TryAgainMessage;\r\n }\r\n else if (data.ErrorMessage === 'We\\'re sorry, but we couldn\\'t process your credit card based on the information you provided. Please try again.') {\r\n url = sorrysomethingwentwromg + CCUprocessableTryAgainErrorMessage;\r\n }\r\n else if (data.ErrorMessage === '[IMPORTANT] Some error happens at the moment of database saving. There is a probability that the payment transaction has performed successfully but this fact hasn\\'t been saved properly. Don\\'t try to do it one more time. Please, contact rGuestSeat@Agilysys.com regarding this error') {\r\n url = sorrysomethingwentwromg + ImportantErrorMessage;\r\n }\r\n else if (data.ErrorMessage === 'The provided credit card hasn\\'t been authorized succesfully') {\r\n url = sorrysomethingwentwromg + CreditCardAuthorizationError;\r\n }\r\n else if (data.ErrorMessage.indexOf('The card is expired') > 0) {\r\n url = SorryWeGotSomeErrorCardExpired;\r\n }\r\n else if (data.ErrorMessage === 'The card number should consist of only digits') {\r\n url = sorrysomethingwentwromg + CardNumbershouldContainOnlyDigits;\r\n }\r\n else if (data.ErrorMessage === 'The card number should consist of from 13 to 16 digits') {\r\n url = sorrysomethingwentwromg + CardNumberShouldConsists13To16Digits;\r\n }\r\n else if (data.ErrorMessage === 'The card number shouldn\\'t be blank') {\r\n url = sorrysomethingwentwromg + CardNumberShouldNotBlank;\r\n }\r\n else {\r\n url = sorrysomethingwentwromg + data.ErrorMessage;\r\n }\r\n this.activityService.openSnackBar(url, this.ts.instant('close'), this.activityService.ConfigSettings.snackBarTime, 'error-snackbar');\r\n }\r\n else {\r\n url = sorrysomethingwentwromg + TryAgainMessage;\r\n this.activityService.openSnackBar(url, this.ts.instant('close'), this.activityService.ConfigSettings.snackBarTime, 'error-snackbar');\r\n }\r\n this.activityService.\r\n openSnackBar(url, this.ts.instant('close'), this.activityService.ConfigSettings.snackBarTime, 'error-snackbar');\r\n } else if (data.RedirectUrl) {\r\n this.activityService.offTimer();\r\n this.LoadIframe(data.RedirectUrl);\r\n setTimeout(() => {\r\n let msg = '';\r\n if(data.PendingAmount){\r\n msg = this.ts.instant('yourCurrentPaymentOf') + ' ' +\r\n this.operationCurrency + Dto.PaymentAmount.toFixed(this.widgetSettings.NumberOfFractionalDigits) + this.ts.instant('isProcessedSuccessfullyPleaseProceedToPay') + this.operationCurrency + data.PendingAmount.toFixed(this.widgetSettings.NumberOfFractionalDigits) + this.ts.instant('toPlaceYourReservation');\r\n this.activityService.openSnackBar(msg, this.ts.instant('close'), this.activityService.ConfigSettings.snackBarTime, 'success-snackbar'); \r\n }else{\r\n msg = this.ts.instant('authCompleteMessageInfo');\r\n this.openInfoMessage(msg);\r\n }\r\n }, 1);\r\n // if (!this.isSplitPayment) {\r\n const timer = moment(data.ExtendedSlotLockResultDTO.ExpiresAt).diff(moment(data.ExtendedSlotLockResultDTO.LockedAt), 'seconds');\r\n this.activityService.showTimer = true;\r\n this.activityService.runTimer(timer);\r\n this.isSplitPayment = true;\r\n this.activityService.isSplitPayment$.next(true);\r\n // }\r\n }\r\n else {\r\n this.activityService.isSplitPayment$.next(false);\r\n const ReservationIds = this.activityService.operation === operationType.edit ?\r\n this.paymentData.AttemptIds ||[this.paymentData?.ReservationAttemptId || this.paymentData.ResponseDTOs?.filter(x => x.ReservationAttemptId > 0).map(x => x.ReservationAttemptId)] :\r\n this.paymentData.ResponseDTOs?.filter(x => x.ReservationAttemptId > 0).map(x => x.ReservationAttemptId);\r\n \r\n this.activityService.startLoader();\r\n this.activityService.GetRegisterMultipleReservationAttempt(ReservationIds).subscribe(regAtmptData => {\r\n this.activityService.stopLoader();\r\n if (regAtmptData) {\r\n let isAuthorized = true;\r\n regAtmptData.forEach(reservationData => {\r\n if (reservationData.State !== PaymentStates.Authorized && reservationData.State !== PaymentStates.ChargeCaptured) {\r\n isAuthorized = false;\r\n }\r\n });\r\n\r\n if (isAuthorized) {\r\n this.isUserAllowedToclickConfirm = true;\r\n if (!this.checkCustomTermsAndMessageOptionValidation()) {\r\n this.activityService.openSnackBar\r\n (this.ts.instant('completeAllFields'), this.ts.instant('close'), this.activityService.ConfigSettings.snackBarTime, 'error-snackbar');\r\n this.showIframe = false;\r\n }\r\n else {\r\n this.reservationConfirm();\r\n }\r\n } else {\r\n this.activityService.openSnackBar\r\n (this.ts.instant('CreditCardNotBeProcessed'), this.ts.instant('close'), this.activityService.ConfigSettings.snackBarTime, 'error-snackbar');\r\n }\r\n }\r\n }, error => {\r\n this.activityService.stopLoader();\r\n });\r\n }\r\n }, error => {\r\n this.activityService.stopLoader();\r\n });\r\n }\r\n\r\n checkCustomTermsAndMessageOptionValidation() {\r\n this.formSubmitted = true;\r\n let isApproved = true;\r\n this.checkBoxErrorMessages = '';\r\n if (this.activityService.additionalGuestPage) {\r\n return true;\r\n }\r\n if (!this.checkTermsValidation()) {\r\n isApproved = false;\r\n this.checkBoxErrorMessages = this.ts.instant('pleaseCheckRequiredTermsAndConditions');\r\n }\r\n \r\n\r\n if (this.activityService.selectedActivities.ConfirmationVia === ConfirmationVia.Both\r\n && (\r\n !this.guestDetailsForm?.form?.value?.reservationConfirmationByEmail ||\r\n !this.guestDetailsForm?.form?.value?.reservationConfirmationBySMS)) {\r\n isApproved = false;\r\n this.checkBoxErrorMessages = (this.checkBoxErrorMessages !== '') ? this.checkBoxErrorMessages + ', ' : '';\r\n this.checkBoxErrorMessages += this.ts.instant('mustSelectEitherSMS OrEmailConfirmation');\r\n }\r\n this.checkSubmitValidation();\r\n return isApproved;\r\n }\r\n\r\n reservationConfirm(fromSubmit = false, isOverlapBooking: boolean = false) {\r\n\r\n if (!this.checkCustomTermsAndMessageOptionValidation()) {\r\n this.activityService.openSnackBar(this.ts.instant('completeAllFields'),\r\n this.ts.instant('close'), this.activityService.ConfigSettings.snackBarTime, 'error-snackbar');\r\n return;\r\n }\r\n\r\n const partyDtoRequired = this.buildReservationRequest(true);\r\n\r\n if (this.activityService.operation === operationType.edit && this.activityService.editData) {\r\n if (!this.isPartySizeMatchSecondaryContactList()) {\r\n this.activityService.openSnackBar(this.ts.instant('partySizeMisMatchError'),\r\n this.ts.instant('close'), this.activityService.ConfigSettings.snackBarTime, 'error-snackbar');\r\n return;\r\n }\r\n this.updateReservation(partyDtoRequired, fromSubmit, isOverlapBooking);\r\n } else {\r\n this.CreateReservation(partyDtoRequired, fromSubmit, isOverlapBooking);\r\n }\r\n }\r\n\r\n getReminderChecksValue(reminderName: string): boolean{\r\n return this.reminderSmsEmailChecks?.find(({name}) => name === reminderName)?.labelValue || false;\r\n }\r\n\r\n remindVisitBySMS(){\r\n if(this.activityService.selectedActivities?.IsSmsReminderSupported){\r\n return (this.activityService.selectedActivities?.IsReservationReminderMandatory || this.getReminderChecksValue(\"reservationBySMS\"))\r\n }\r\n return this.getReminderChecksValue(\"reservationBySMS\");\r\n }\r\n\r\n buildReservationRequest(isBookingApiRequest?: boolean) {\r\n const partyDTOArray = [];\r\n const cartItems = this.activityService.getSessionData('CartList_' + this.activityService.restaurantMerchantCode, true) || [];\r\n cartItems.forEach((eachItem, index) => {\r\n const partyDTO: any = {\r\n CartId: eachItem.CartId,\r\n PropertyId: eachItem.PropertyId,\r\n RestaurantId: eachItem.PropertyId,\r\n Id: this.activityService.operation === operationType.edit ?\r\n (this.activityService.successBookRes?.PartyId || this.activityService?.editData?.Id || null) : null,\r\n Size: eachItem.Size,\r\n RemindAboutVisit: this.remindVisitBySMS(), // get Value froom form\r\n RemindAboutVisitEmail: this.getReminderChecksValue(\"reservationByEmail\"), //\r\n AgreedWithTermsOfUse: true,\r\n Contact:this.activityService?.editData?.Contact ? Object.assign( this.activityService?.editData?.Contact, eachItem.Contact) : eachItem.Contact,\r\n BookingTypes: eachItem.BookingTypes,\r\n CoverTypes: eachItem.CoverTypes,\r\n Slot: !eachItem.isNonDining ? eachItem.Slot : eachItem.Slots[0],\r\n Slots: eachItem.Slots, // : this.buildNonDiningSLots(eachItem),\r\n Sessions: eachItem.Sessions,\r\n PartyId: this.activityService.operation === operationType.edit ?\r\n (this.activityService.successBookRes?.PartyId || this.activityService?.editData?.Id || null) : null,\r\n BookingId: this.activityService.operation === operationType.edit ?\r\n this.activityService.editData?.BookingId : null,\r\n SpecialMealId: eachItem.SpecialMealId,\r\n ConfirmationMessageOption: eachItem.ConfirmationVia,\r\n TableIds: !eachItem.isNonDining ? eachItem.TableId : eachItem.TableIds,\r\n InstructorIds: eachItem.StaffId?.filter(id => id > 0),\r\n Notes: eachItem.Notes,\r\n FromWebsite: true,\r\n LanguageId: Number(sessionStorage.getItem('languageId')),\r\n Language: this.activityService.language, // get language id\r\n ReservationAttemptId: this.activityService.operation === operationType.edit ?\r\n (this.paymentData?.ReservationAttemptId || ((!this.activityService.isDining && this.activityService.reservationAttemptInfo?.RatePlan.Reservations.filter(reservation => reservation.Id == eachItem.SpecialMealId)?.length) ? this.activityService.reservationAttemptInfo?.RatePlan.Reservations.find(reservation => reservation.Id == eachItem.SpecialMealId)?.ReservationAttemptId : this.getAttemptIdsForOpenBooking())) : (this.activityService.reservationAttemptInfo?.ResponseDTOs &&\r\n this.activityService.reservationAttemptInfo?.ResponseDTOs.find(x => x.CartId === eachItem.CartId)?.ReservationAttemptId ?\r\n this.activityService.reservationAttemptInfo?.ResponseDTOs.find(x => x.CartId === eachItem.CartId)?.ReservationAttemptId : null),\r\n WaiverFormTransactionId: this.waiverFormTrancationId ? this.waiverFormTrancationId :\r\n (this.activityService.operation === operationType.edit && this.activityService.editData?.WaiverFormTransactionId) ?\r\n this.activityService.editData?.WaiverFormTransactionId : null,\r\n BookingBehavior: eachItem.BookingBehavior,\r\n StartDate: eachItem.StartDate ? new Date(eachItem.StartDate).toDateString() : null,\r\n EndDate: eachItem.EndDate ? new Date(eachItem.EndDate).toDateString() : null,\r\n ReservationAttemptIdWithSlotDTOList: (eachItem.BookingBehavior !== BookingActivity.ClassBooking)\r\n ? this.getOpenbookingSlotwithIds(eachItem) : [],\r\n // SecondaryContactsList: this.activityService.operation === operationType.edit ? this.buildSecondaryContactList() : null,\r\n BookingContacts: this.getBookingContacts(eachItem),\r\n IsForStandbyReservations: this.activityService.selectedSpecialMeal?.IsForStandbyReservations || null,\r\n SeatingAreaId: eachItem.isDining || eachItem.isNonDining ? eachItem.SeatingAreaId : null,\r\n SeatingTypeId: eachItem.isDining || eachItem.isNonDining ? eachItem.SeatingTypeId : null,\r\n IsCommunalTable: eachItem.isDining || eachItem.isNonDining ? eachItem.IsCommunalTable : false,\r\n // SelectedAddOns: eachItem.AddOns || Utilities.getSelectedAddOns(this.activityService.addOnList),\r\n AddOns: eachItem.AddOns || Utilities.getSelectedAddOns(this.activityService.addOnList),\r\n FinancialEffectId : this.financialEffectId > 0 ? this.financialEffectId : this.getFinancialEffectId(eachItem.CartId),\r\n isBookingApiRequest: (isBookingApiRequest || this.activityService.bShowOverbookingErrorDialog),\r\n PaymentMethod : PaymentMethod.Prepayment,\r\n AuthorizeTransaction : this.transactions[0],\r\n rGuestPayResponseData: this.rGuestPayResponseData,\r\n };\r\n\r\n if(eachItem.BookingTypeInfo){\r\n let BookingTypeInfo = {\r\n \"BookingGuestTypes\" : eachItem.BookingTypeInfo.BookingGuestType,\r\n \"Input\" : eachItem.BookingTypeInfo.Input\r\n } \r\n partyDTO[\"BookingTypeInfo\"] = BookingTypeInfo;\r\n }\r\n \r\n if(this.isCardOnFilePayment(eachItem.SpecialMealId, eachItem.PropertyId)){\r\n partyDTO['PaymentMethod'] = PaymentMethod.Authorize;\r\n };\r\n \r\n if (eachItem && this.waiverFormTrancationId) {\r\n eachItem.WaiverFormTransactionId = this.waiverFormTrancationId ? this.waiverFormTrancationId :\r\n (this.activityService.operation === operationType.edit && this.activityService.editData?.WaiverFormTransactionId)\r\n ? this.activityService.editData?.WaiverFormTransactionId : null;\r\n }\r\n\r\n partyDTOArray.push(partyDTO);\r\n });\r\n \r\n return partyDTOArray;\r\n }\r\n\r\n getBookingContacts(contactItem){\r\n if(this.activityService?.editData?.BookingContacts?.length){\r\n return this.activityService.operation === operationType.edit ? this.activityService?.editData?.BookingContacts : this.activityService?.editData?.BookingContacts.filter(data => data.ContactId != this.activityService.editData?.Contact.Id);\r\n }\r\n \r\n return (contactItem.Contact.SecondaryContactsList?.length ? contactItem.Contact.SecondaryContactsList : [])\r\n }\r\n\r\n sanitizeCoverTypes(coverTypes){\r\n if(coverTypes?.length > 0){\r\n coverTypes = coverTypes.filter(c=>c.Covers > 0);\r\n\r\n coverTypes.forEach(element => {\r\n if(!(element?.BookingTypeId > 0)){\r\n element.BookingTypeId = null;\r\n }\r\n if(!(element?.CoverTypeId > 0)){\r\n element.CoverTypeId = null;\r\n }\r\n });\r\n }\r\n\r\n return coverTypes;\r\n }\r\n\r\n getAttemptIdsForOpenBooking(){\r\n return this.activityService.reservationAttemptInfo?.RatePlan?.Reservations?.find(booking => booking.Id == 0)?.ReservationAttemptId || null\r\n }\r\n private isCardOnFilePayment(specialMealId,propertyId) : boolean {\r\n let selectedProperty = this.activityService.widgetSettings?.PropertyWidgetSettings.find(f => f.RestaurantId == propertyId);\r\n if (selectedProperty) {\r\n if (specialMealId) {\r\n let availableSpecialMeals = selectedProperty.AvailableSpecialMeals as any[];\r\n if (availableSpecialMeals) {\r\n let specialMeal = availableSpecialMeals.find(f => f.Id == specialMealId);\r\n if (specialMeal && specialMeal.WidgetPrePaymentMode == PaymentMode.CardOnFile) {\r\n return true;\r\n }\r\n }\r\n } else if (selectedProperty.WidgetPrePaymentMode == PaymentMode.CardOnFile) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n getFinancialEffectId(cartid){\r\n if(this.paymentData && this.paymentData.ResponseDTOs && this.paymentData.ResponseDTOs.length){\r\n var attemptResponse = this.paymentData.ResponseDTOs.find(r=>r.CartId == cartid);\r\n if(attemptResponse){\r\n return attemptResponse.FinancialEffectId;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n isPartySizeMatchSecondaryContactList(): boolean {\r\n if (this.activityService.operation === operationType.edit && this.activityService.editData?.SecondaryContacts\r\n && this.activityService.editData?.SecondaryContacts.length > 0\r\n && this.activityService.SaveBookingObj.Size < this.components?.toArray().length) {\r\n return false;\r\n }\r\n else {\r\n return true;\r\n }\r\n }\r\n\r\n buildSecondaryContactList() {\r\n const secondaryContactList: SecondaryContactDTO[] = [];\r\n for (let i = 0; i < this.components?.length; i++) {\r\n const secondaryContact = new SecondaryContactDTO();\r\n if (this.activityService.additionalGuestPage ||\r\n (!this.activityService.additionalGuestPage && this.activityService.operation === operationType.edit && i !== 0)) {\r\n const FormValue = this.components.toArray()[i].form.value;\r\n secondaryContact.FirstName = FormValue.firstName;\r\n secondaryContact.LastName = FormValue.lastName;\r\n secondaryContact.EmailAddress = FormValue.email;\r\n secondaryContact.PhoneNumber = FormValue.phone;\r\n secondaryContact.CountryId = this.components.last.config[2].value;\r\n secondaryContact.PartyId = this.activityService.successBookRes?.PartyId || this.activityService?.editData?.Id || null;\r\n secondaryContact.Notes = []; //this.getCategoryPreferencesNotes(this.components.toArray()[i].form.value, NoteType.guestNote);\r\n secondaryContact.Id = FormValue.id ? FormValue.id : null;\r\n secondaryContactList.push(secondaryContact);\r\n }\r\n }\r\n return secondaryContactList;\r\n }\r\n\r\n getConfirmationMessageOption() {\r\n if (this.activityService.selectedActivities?.ConfirmationVia === ConfirmationVia.Both) {\r\n if (this.guestDetailsForm?.form?.value?.reservationConfirmationByEmail\r\n && this.guestDetailsForm?.form?.value?.reservationConfirmationBySMS) {\r\n return ConfirmationVia.Both;\r\n }\r\n else if (this.guestDetailsForm?.form?.value?.reservationConfirmationByEmail) {\r\n return ConfirmationVia.Email;\r\n }\r\n else if (this.guestDetailsForm?.form?.value?.reservationConfirmationBySMS) {\r\n return ConfirmationVia.Sms;\r\n }\r\n else {\r\n return this.activityService?.selectedActivities?.ConfirmationVia;\r\n }\r\n }\r\n else {\r\n return this.activityService?.selectedActivities?.ConfirmationVia;\r\n }\r\n }\r\n\r\n getCoverTypes(): any {\r\n return this.activityService.SaveBookingObj?.CoverTypes;\r\n }\r\n\r\n getBookingTypes(): any {\r\n return this.activityService.SaveBookingObj?.BookingTypes;\r\n }\r\n\r\n updateReservation(partyDto, fromSubmit = false, isOverlapBooking: boolean = false) {\r\n if (partyDto[0]) {\r\n this.activityService.startLoader();\r\n this.activityService.updateSessionBooking(partyDto[0], this.activityService.isDining, isOverlapBooking).subscribe(data => { \r\n if (data?.ValidationMessages?.filter(msg => msg.Type == ValidationMessageType.Error || msg.Type == ValidationMessageType.Consent).length === 0 && !data?.ExceptionMessage) {\r\n this.completeReservation(false, data?.Payload, fromSubmit);\r\n } else {\r\n this.bookingErrorHandler(data?.ExceptionMessage \r\n || data?.ValidationMessages?.filter(msg => msg.Type == ValidationMessageType.Error)[0]?.Message \r\n || this.ts.instant('errorWhileUpdatingReservation'), data?.ValidationMessages);\r\n this.enableSubmit = true;\r\n }\r\n }, error => {\r\n this.activityService.stopLoader();\r\n }, () => {\r\n this.activityService.stopLoader();\r\n });\r\n }\r\n }\r\n\r\n completeReservation(data, responseData, fromSubmit = false) {\r\n // this.bookingCompleted = true;\r\n // ------------------ Temporary Fix for edit scenario as cart booking id is not available on Update API ---------------------\r\n let isDining = this.activityService.isDining || false;\r\n this.confToken = responseData[0]?.CartBookingId || this.activityService.editData?.CartBookingId || '';\r\n this.activityService.emptyCartData();\r\n this.activityService.stopTimer();\r\n this.activityService.offTimer();\r\n this.activityService.openSnackBar\r\n (!this.isEdit ? this.ts.instant(isDining ? 'diningBookedSuccessfully' : 'activityBookedSuccessfully')\r\n : this.ts.instant(isDining ? 'diningUpdatedSuccessfully' : 'activityUpdatedSuccessfully'),\r\n this.ts.instant('close'), this.activityService.ConfigSettings.snackBarTime, 'success-snackbar');\r\n this.clickToPayment();\r\n this.transactions = [];\r\n }\r\n\r\n CreateReservation(partyDto, fromSubmit = false, isOverlapBooking: boolean = false) {\r\n // have to check\r\n // this.activityService.SaveBookingObj.Contact = {\r\n // FirstName: this.guestDetailsForm.value.primaryGuest.firstName,\r\n // LastName: this.guestDetailsForm.value.primaryGuest.lastName,\r\n // EmailAddress: this.guestDetailsForm.value.primaryGuest.email,\r\n // PhoneNumber: this.guestDetailsForm.value.primaryGuest.phone,\r\n // PIILastUsedDate: moment(new Date()).format('YYYY-MM-DDTHH:mm:ss'),\r\n // ContactCustomFields: this.getCustomGuestFieldsValue(),\r\n // CountryId: this.activityService.selectedCountryId, // map country code\r\n // Notes: this.getCategoryPreferencesNotes(this.guestDetailsForm.value.primaryGuest),\r\n // MarketingOptedIn: this.guestDetailsForm.value.primaryGuest.marketingFlag ?\r\n // this.guestDetailsForm.value.primaryGuest.marketingFlag :\r\n // (this.activityService.operation == operationType.edit &&\r\n // (!this.activityService.restaurantWidgetSettings$?.value?.MarketingFlagEnabled ||\r\n // !this.activityService.restaurantWidgetSettings$?.value?.MarketingFlagDescription)\r\n // && this.activityService.editPartyData$?.value?.Contact.MarketingOptedIn) ?\r\n // this.activityService.editPartyData$?.value?.Contact.MarketingOptedIn : null\r\n // }\r\n // this.activityService.TabChange$.next(4);\r\n if (partyDto.length > 0) {\r\n this.activityService.startLoader();\r\n this.activityService.createMultiSessionBookingrequest(partyDto, isOverlapBooking, this.saveCardToContact).subscribe((data: any) => {\r\n this.activityService.stopLoader();\r\n if (data?.Payload[0] && data?.Payload[0]?.length > 0 && data?.ValidationMessages?.filter(msg => msg.Type == ValidationMessageType.Error || msg.Type == ValidationMessageType.Consent).length === 0 && !data?.ExceptionMessage) {\r\n data = data.Payload[0];\r\n this.activityService.successBookRes = data;\r\n this.activityService.createActivityResponse$.next(data);\r\n this.activityService.primaryContact = partyDto.Contact;\r\n this.completeReservation(true, data, fromSubmit);\r\n this.transactions = [];\r\n } else {\r\n this.bookingErrorHandler(data?.ExceptionMessage \r\n || data?.ValidationMessages?.filter(msg => msg.Type == ValidationMessageType.Error)[0]?.Message \r\n || this.ts.instant('errorWhileCreatingReservation'), data?.ValidationMessages);\r\n this.enableSubmit = true;\r\n }\r\n }, error => {\r\n this.activityService.stopLoader();\r\n }, () => {\r\n this.activityService.stopLoader();\r\n });\r\n }\r\n }\r\n\r\n bookingErrorHandler(errorText: string, ValidationMessages?: any[]) {\r\n\r\n const isOverlapBookError = ValidationMessages?.filter(x => x.Type == 2).length ? true : false;\r\n if(isOverlapBookError) {\r\n errorText = ValidationMessages.find(x => x.Type == 2)?.Message || this.ts.instant('errorWhileCreatingReservation');\r\n }\r\n\r\n const popUpMessage = [{\r\n confirmationMessage: errorText,\r\n dialogTitle: this.ts.instant('warningText'),\r\n showAlert: true,\r\n isScrolable: true\r\n }];\r\n const height = '330px';\r\n const componentDetails: ComponentDetails = Utilities.setComponentDetails(PopupMessageComponent, 'small', '', popUpMessage,\r\n popUpMessage[0].dialogTitle);\r\n this.activityService.bShowOverbookingErrorDialog = false;\r\n this.bookingErrorDialogRef = this.activityService.openCustomPopup(componentDetails, ComponentTypes.clearCart, '400px', height, true, '',\r\n this.getErrorDialogPrimaryBtnLabel(isOverlapBookError), this.getErrorDialogSecondryBtnLabel(isOverlapBookError), true, '90vw');\r\n this.bookingErrorDialogRef.afterClosed().subscribe(data => {\r\n if (data.ok && !isOverlapBookError) {\r\n this.activityService.navigateToUrl('list');\r\n } else if(data.ok && isOverlapBookError){\r\n //TODO\r\n this.reservationConfirm(true, true);\r\n }\r\n });\r\n }\r\n\r\n openInfoMessage(errorText){\r\n\r\n const popUpMessage = [{\r\n confirmationMessage: errorText,\r\n dialogTitle: this.ts.instant('paymentInfo'),\r\n showAlert: true,\r\n isScrolable: true\r\n }];\r\n const height = '330px';\r\n const componentDetails: ComponentDetails = Utilities.setComponentDetails(PopupMessageComponent, 'small', '', popUpMessage,\r\n popUpMessage[0].dialogTitle);\r\n this.activityService.openCustomPopup(componentDetails, ComponentTypes.InfoPopup, '400px', height, false, '', 'Ok'); \r\n }\r\n\r\n getOpenbookingSlotwithIds(item?: any) {\r\n if(!item.isNonDining || this.isEdit)\r\n return this.paymentData?.Slots?.map(data => {\r\n return {\r\n ReservationAttemptId: data.ReservationAttemptId,\r\n SlotTime: data.LocalTime\r\n };\r\n });\r\n else \r\n return this.paymentData?.ResponseDTOs.find(y => y.CartId == item.CartId)?.Slots?.map(data => {\r\n return {\r\n ReservationAttemptId: data.ReservationAttemptId,\r\n SlotTime: data.LocalTime\r\n };\r\n });\r\n }\r\n\r\n processTransactions(transInfo) {\r\n const transactions = transInfo.payments;\r\n const authorizeTransactions = [];\r\n\r\n if (transactions && transactions.length > 0) {\r\n transactions.forEach(transaction => {\r\n if (transaction.successCode === 1) {\r\n let name = '';\r\n const paymentDetail = transaction.paymentDetail;\r\n const roomDetails = {\r\n RoomNumber: null,\r\n ConfirmationNumber: null,\r\n LastName: null\r\n };\r\n const pointsDetails = {\r\n AccountNumber: null,\r\n BucketName: null,\r\n Name: null,\r\n LoyaltyTransactionId: null\r\n };\r\n\r\n if (transaction.paymentType === 1 || transaction.paymentType === 2) { // credit card\r\n name = paymentDetail.accountName;\r\n }\r\n\r\n if (transaction.paymentType === 3) { // Post to room charges\r\n roomDetails.RoomNumber = paymentDetail.cardIssuer;\r\n roomDetails.ConfirmationNumber = paymentDetail.cardNumber;\r\n roomDetails.LastName = paymentDetail.accountName;\r\n name = paymentDetail.accountName;\r\n }\r\n if (transaction.paymentType === 5) { // Loyalty\r\n pointsDetails.BucketName = paymentDetail.tender;\r\n pointsDetails.AccountNumber = paymentDetail.cardNumber;\r\n pointsDetails.Name = paymentDetail.accountName;\r\n pointsDetails.LoyaltyTransactionId = paymentDetail.followOnData;\r\n name = paymentDetail.accountName;\r\n }\r\n const dto = {\r\n CardNumber: paymentDetail.cardNumber ? paymentDetail.cardNumber : '',\r\n ExpirationDate: paymentDetail.expirationDate ? paymentDetail.expirationDate.substring(0, 4) + paymentDetail.expirationDate.substring(4) : '',\r\n Name: name ? name : '',\r\n Token: paymentDetail.token ? paymentDetail.token : null,\r\n CardExpirationYearMonth: paymentDetail.cardExpiry ? paymentDetail.cardExpiry : null,\r\n TokenExpirationDate: paymentDetail.expirationDate ? paymentDetail.expirationDate : null,\r\n TransactionFollowOnData: paymentDetail.followOnData ? paymentDetail.followOnData : null,\r\n AuthorizeTransactionID: transaction.authorizeTransactionID,\r\n Amount: transaction.paidAmount,\r\n PaymentType: transaction.paymentType ? transaction.paymentType : null,\r\n InvoiceID: transaction?.invoiceID,\r\n TransactionDate: transaction.transactionsDate ? transaction.transactionsDate : null,\r\n RoomNumber: roomDetails?.RoomNumber,\r\n ConfirmationNumber: roomDetails?.ConfirmationNumber,\r\n BucketName: pointsDetails?.BucketName,\r\n LoyaltyAccountNumber: pointsDetails?.AccountNumber,\r\n LoyaltyTransactionId: pointsDetails?.LoyaltyTransactionId,\r\n IssuerType: paymentDetail?.tender,\r\n AuthCode : paymentDetail?.authCode,\r\n CCType : paymentDetail?.cardIssuerType,\r\n CCTransactionId : paymentDetail?.payTransactionID,\r\n };\r\n authorizeTransactions.push(dto);\r\n } else if (transaction.errorMessage) {\r\n this.activityService.openSnackBar\r\n (transaction.errorMessage, this.ts.instant('close'), this.activityService.ConfigSettings.snackBarTime, 'error-snackbar');\r\n }\r\n });\r\n return authorizeTransactions;\r\n }\r\n }\r\n\r\n clearCart() {\r\n const popUpMessage = [{\r\n confirmationMessage: this.ts.instant('confirmClearCartMessage'),\r\n dialogTitle: this.ts.instant('clearCart'),\r\n showAlert: true,\r\n isScrolable: true\r\n }];\r\n const height = '250px';\r\n const componentDetails: ComponentDetails = Utilities.setComponentDetails(PopupMessageComponent, 'small', '', popUpMessage,\r\n popUpMessage[0].dialogTitle);\r\n this.clearCartDialogRef = this.activityService.openCustomPopup(componentDetails, ComponentTypes.clearCart, '400px', height, true, '', this.ts.instant('confirm'),\r\n this.ts.instant('cancel'), true, '90vw');\r\n this.clearCartDialogRef.afterClosed().subscribe(data => {\r\n if (data.ok) {\r\n this.deleteAllCartItem();\r\n this.activityService.navigateToPage();\r\n // this.activityService.navigateToUrl('list');\r\n }\r\n });\r\n }\r\n\r\n buildNonDiningSLots(item: any){\r\n const reservationAttemptId = this.totalActivitiesRegistered.find(x => x.CartId == item.CartId)?.ReservationAttemptId;\r\n if(reservationAttemptId) {\r\n item.Slots[0]= {\r\n ...item.Slots[0],\r\n ReservationAttemptId: reservationAttemptId \r\n }\r\n }\r\n return item.Slots;\r\n }\r\n\r\n getErrorDialogPrimaryBtnLabel(isOverlapBookError: boolean) {\r\n if (isOverlapBookError)\r\n return this.ts.instant('Yes');\r\n else if (this.isEdit)\r\n return this.ts.instant('retryUpdate');\r\n else\r\n return this.ts.instant('bookAgain');\r\n }\r\n\r\n getErrorDialogSecondryBtnLabel(isOverlapBookError: boolean) {\r\n if (isOverlapBookError)\r\n return this.ts.instant('No');\r\n else\r\n return this.ts.instant('cancel');\r\n }\r\n\r\n validateForm() {\r\n if(this.checkBoxErrorMessages || this.showCartLockWarning) {\r\n this.isValidateTerms = false;\r\n }\r\n else {\r\n this.isValidateTerms = true;\r\n }\r\n }\r\n\r\n}\r\n\r\nconst MESSAGES = {\r\n Labels: {\r\n description: 'description',\r\n quantity: 'qty',\r\n grossPrice: 'grossPrice',\r\n minRateAdjustment: 'MinRateAdjustment',\r\n serviceCharge: 'serviceCharges',\r\n totalPrice: 'totalPrice',\r\n tax: 'tax',\r\n }\r\n}\r\n\r\n@Pipe({\r\n name: 'getAddonName'\r\n})\r\nexport class GetAddonNamePipe implements PipeTransform {\r\n transform(addOn: any, settings, restData): any {\r\n\r\n if (!settings) {\r\n settings = restData;\r\n }\r\n return (settings?.Addons?.find(addOnItem => addOnItem.AddonId == addOn.AddonId)?.AddonName ||\r\n restData?.Addons?.find(addOnItem => addOnItem.AddonId == addOn.AddonId)?.AddonName || '')\r\n\r\n }\r\n}\r\n\r\n@Pipe({\r\n name: 'getTaxDescription'\r\n})\r\nexport class GetTaxDescriptionPipe implements PipeTransform {\r\n constructor(private ts: TranslateService) { }\r\n transform(data): string {\r\n let msg;\r\n if (data.TotalAmount) {\r\n this.ts.get('taxDescription', { description: data.Description, percentage: data.Percentage, amount: data.TotalAmount }).subscribe((res: string) => msg = res);\r\n }\r\n else {\r\n this.ts.get('serviceChargeTaxDescription', { description: data.Description, percentage: data.Percentage }).subscribe((res: string) => msg = res);\r\n }\r\n return msg;\r\n }\r\n}\r\n\r\n@Pipe({\r\n name: 'filterTaxType'\r\n})\r\nexport class FilterTaxTypePipe implements PipeTransform {\r\n constructor(private ts: TranslateService) { }\r\n transform(taxArray, taxType): string {\r\n \r\n return taxArray.filter(tax => tax.BookingChargeType == taxType);\r\n }\r\n}\r\n\r\n\r\n@Pipe({\r\n name: 'groupItemByType'\r\n})\r\nexport class GroupItemByType implements PipeTransform {\r\n constructor() { }\r\n transform(lineItem, slot, type) {\r\n return _.sumBy(_.groupBy(slot.TotalItems || slot.Items, 'Id')?.[lineItem.Id], type) || 0;\r\n }\r\n}\r\n\r\n","\r\n
\r\n
{{'cartSummary' | translate}}
\r\n
{{'finalizeYourInterestsHere' | translate}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
{{'grandTotal' | translate}}
\r\n
$20.00
\r\n
\r\n
\r\n
{{'timeLeft' | translate}}
\r\n
09:00
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
Historic Day Tour
\r\n
\r\n
\r\n place2A\r\n
\r\n
\r\n person2 {{'people' | translate}}\r\n
\r\n
\r\n
\r\n
12/12/2021 - 12/4/2021
\r\n
\r\n
\r\n
{{'sessionCharges' | translate}} X 2
\r\n
$10.00
\r\n
\r\n
\r\n
{{'total' | translate}}
\r\n
$10.00
\r\n
\r\n
\r\n
\r\n
\r\n edit\r\n
{{'edit' | translate}}
\r\n
\r\n
\r\n delete\r\n
{{'remove' | translate}}
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
Historic Day Tour
\r\n
\r\n
\r\n place2A\r\n
\r\n
\r\n person2 {{'people' | translate}}\r\n
\r\n
\r\n
\r\n
12/12/2021 - 12/4/2021
\r\n
\r\n
\r\n
{{'sessionCharges' | translate}} X 2
\r\n
$10.00
\r\n
\r\n
\r\n
{{'total' | translate}}
\r\n
$10.00
\r\n
\r\n
\r\n
\r\n
\r\n edit\r\n
{{'edit' | translate}}
\r\n
\r\n
\r\n delete\r\n
{{'remove' | translate}}
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
Historic Day Tour
\r\n
\r\n
\r\n place2A\r\n
\r\n
\r\n person2 {{'people' | translate}}\r\n
\r\n
\r\n
\r\n
12/12/2021 - 12/4/2021
\r\n
\r\n
\r\n
{{'sessionCharges' | translate}} X 2
\r\n
$10.00
\r\n
\r\n
\r\n
{{'total' | translate}}
\r\n
$10.00
\r\n
\r\n
\r\n
\r\n
\r\n edit\r\n
{{'edit' | translate}}
\r\n
\r\n
\r\n delete\r\n
{{'remove' | translate}}
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
Historic Day Tour
\r\n
\r\n
\r\n place2A\r\n
\r\n
\r\n person2 {{'people' | translate}}\r\n
\r\n
\r\n
\r\n
12/12/2021 - 12/4/2021
\r\n
\r\n
\r\n
{{'sessionCharges' | translate}} X 2
\r\n
$10.00
\r\n
\r\n
\r\n
{{'total' | translate}}
\r\n
$10.00
\r\n
\r\n
\r\n
\r\n
\r\n edit\r\n
{{'edit' | translate}}
\r\n
\r\n
\r\n delete\r\n
{{'remove' | translate}}
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
Historic Day Tour
\r\n
\r\n
\r\n place2A\r\n
\r\n
\r\n person2 {{'people' | translate}}\r\n
\r\n
\r\n
\r\n
12/12/2021 - 12/4/2021
\r\n
\r\n
\r\n
{{'sessionCharges' | translate}} X 2
\r\n
$10.00
\r\n
\r\n
\r\n
{{'total' | translate}}
\r\n
$10.00
\r\n
\r\n
\r\n
\r\n
\r\n edit\r\n
{{'edit' | translate}}
\r\n
\r\n
\r\n delete\r\n
{{'remove' | translate}}
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
Historic Day Tour
\r\n
\r\n
\r\n place2A\r\n
\r\n
\r\n person2 {{'people' | translate}}\r\n
\r\n
\r\n
\r\n
12/12/2021 - 12/4/2021
\r\n
\r\n
\r\n
{{'sessionCharges' | translate}} X 2
\r\n
$10.00
\r\n
\r\n
\r\n
{{'total' | translate}}
\r\n
$10.00
\r\n
\r\n
\r\n
\r\n
\r\n edit\r\n
{{'edit' | translate}}
\r\n
\r\n
\r\n delete\r\n
{{'remove' | translate}}
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
Historic Day Tour
\r\n
\r\n
\r\n place2A\r\n
\r\n
\r\n person2 {{'people' | translate}}\r\n
\r\n
\r\n
\r\n
12/12/2021 - 12/4/2021
\r\n
\r\n
\r\n
{{'sessionCharges' | translate}} X 2
\r\n
$10.00
\r\n
\r\n
\r\n
{{'total' | translate}}
\r\n
$10.00
\r\n
\r\n
\r\n
\r\n
\r\n edit\r\n
{{'edit' | translate}}
\r\n
\r\n
\r\n delete\r\n
{{'remove' | translate}}
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
Historic Day Tour
\r\n
\r\n
\r\n place2A\r\n
\r\n
\r\n person2 {{'people' | translate}}\r\n
\r\n
\r\n
\r\n
12/12/2021 - 12/4/2021
\r\n
\r\n
\r\n
{{'sessionCharges' | translate}} X 2
\r\n
$10.00
\r\n
\r\n
\r\n
{{'total' | translate}}
\r\n
$10.00
\r\n
\r\n
\r\n
\r\n
\r\n edit\r\n
{{'edit' | translate}}
\r\n
\r\n
\r\n delete\r\n
{{'remove' | translate}}
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
{{'clicKToPay' | translate}}
\r\n
\r\n
\r\n
{{'continueShopping' | translate}}
\r\n
\r\n
\r\n
{{'clearCart' | translate}}
\r\n
\r\n
\r\n
\r\n\r\n
\r\n \r\n
{{'removeConfirmationDialog' | translate}}
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
","import { Component, OnInit, ViewChild} from '@angular/core';\r\nimport {MatDialog, MatDialogConfig} from '@angular/material/dialog';\r\n\r\n@Component({\r\n selector: 'app-activity-cart',\r\n templateUrl: './activity-cart.component.html',\r\n styleUrls: ['./activity-cart.component.scss', './../activities-lite.component.scss']\r\n})\r\nexport class ActivityCartComponent implements OnInit {\r\n @ViewChild('deleteConfirmationDialog') deleteConfirmationDialog;\r\n constructor(public dialog: MatDialog) { }\r\n ngOnInit(): void {\r\n }\r\n getPopup() {\r\n const dialogConfig = new MatDialogConfig();\r\n this.dialog.open(this.deleteConfirmationDialog, dialogConfig);\r\n }\r\n onNoClick() {\r\n this.dialog.closeAll();\r\n }\r\n \r\n \r\n}\r\n","import { ValidatorFn } from '@angular/forms';\r\nimport { Observable } from 'rxjs';\r\nimport { buttonTypes } from '../../constants/commonenums';\r\n//import { buttonTypes, InputImages } from '../../constants/commonenums';\r\n\r\n\r\nexport interface FieldConfig {\r\n minTime?: string;\r\n disabled?: boolean;\r\n buttonType?: string;\r\n label?: string;\r\n name: string;\r\n options?: any[];\r\n autoOptions?: any[];\r\n placeholder?: string;\r\n type: string;\r\n validation?: ValidatorFn[];\r\n value?: any;\r\n class?: any;\r\n changeEvent?: any;\r\n hide?: boolean;\r\n showErrorText?: boolean;\r\n maxDate?: any;\r\n minDate?: any;\r\n autocomplete?: string;\r\n autocompleteOptions?: any[];\r\n inputType?: string;\r\n maxLengthHint?: boolean;\r\n maxLengthCount?: number;\r\n maxLengthText?: string;\r\n function?: any;\r\n panelClass?: string;\r\n allowDuplicate?: boolean;\r\n iClass?: string;\r\n hintText?: string;\r\n hintRight?: boolean;\r\n hint?: boolean;\r\n directive?: any;\r\n inputClassName?: any;\r\n returnFunction?: (event) => {};\r\n cellClick?: (event, ctrlName?) => {};\r\n blurClick?: (event) => {};\r\n icon?: string;\r\n icon1?: string;\r\n charLength?: number;\r\n showHint?: boolean;\r\n showNumbers?: boolean;\r\n appearance?: boolean;\r\n showNavigation?: boolean;\r\n multipleChip?: boolean;\r\n addBtnConfig?: FieldConfig;\r\n errorMessage?: string;\r\n isTranslate?: boolean;\r\n isPhoneNumber?: boolean;\r\n id?: number;\r\n isDateTime?: boolean;\r\n checked?: boolean;\r\n min?: number;\r\n pattern?: any;\r\n formInputIcon?: string;\r\n showIconAlways?: boolean;\r\n partySize?: boolean;\r\n isTooltip?: boolean;\r\n isNewPhoneNumber?: boolean;\r\n isConciergeNumber?: boolean;\r\n onfocusOutClick?: (event, ctrlName?) => {};\r\n multiSelectvalue?: any[];\r\n groupLabel?: string;\r\n isFormArray: boolean;\r\n inputControls?: boolean;\r\n increaseDisabled?: boolean;\r\n decreaseDisabled?: boolean;\r\n decreaseClicked?: (event, ctrlName?) => {};\r\n increaseClicked?: (event, ctrlName?) => {};\r\n innerHTMLdata?: boolean;\r\n toolTip?: string;\r\n disableSelect?: boolean;\r\n selectValue?: any;\r\n multiCheck?: boolean;\r\n prefix?: any;\r\n isMandatory?: boolean;\r\n showOption?: boolean;\r\n FrequencyTypeIds ?:any;\r\n isNativeControl?: boolean;\r\n appearanceOutline?:boolean;\r\n numberFormat?:string;\r\n}\r\nexport interface ButtonValue {\r\n label?: any;\r\n type: buttonTypes;\r\n disbaledproperity?: any;\r\n customclass?: string;\r\n icon?: string;\r\n additionalText?: string;\r\n customStyle?: string;\r\n}\r\n\r\nexport interface MessageInfo {\r\n message: string,\r\n alert?: boolean;\r\n}\r\n\r\nexport interface FloorPlanImagesDto {\r\n LayoutImages: InputImages[];\r\n ObjectImages: InputImages[];\r\n CustomImages: InputImages[];\r\n}\r\n\r\nexport enum BookingChargeType\r\n{\r\n Tax,\r\n ServiceCharge,\r\n Negotiation,\r\n MinRateCoverTypeAdjustment,\r\n BasePrice,\r\n Location,\r\n Staff,\r\n /// \r\n /// Guest type\r\n /// \r\n CoverType,\r\n BookingType,\r\n Addon,\r\n SpecialMeal,\r\n SpecialMealCovers,\r\n MembershipDiscount,\r\n AdditionalRate,\r\n CancellationFee,\r\n NoShowFee,\r\n MembershipRound,\r\n PackageDiscount,\r\n PromoCodeDiscount\r\n\r\n}\r\n\r\nexport interface InputImages {\r\n ImageId: string;\r\n bytes: string;\r\n isImageSelected?: boolean;\r\n}\r\n\r\nexport interface DropDownConfig {\r\n id: any;\r\n value: string | number;\r\n}[];\r\n\r\n\r\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n","import { __awaiter } from 'tslib';\nimport * as i0 from '@angular/core';\nimport { EventEmitter, Component, ChangeDetectionStrategy, Input, Output, ViewChild, NgModule } from '@angular/core';\nimport * as QRCode from '@cordobo/qrcode';\nimport * as i1 from '@angular/platform-browser';\n\nclass QRCodeComponent {\n constructor(renderer, sanitizer) {\n this.renderer = renderer;\n this.sanitizer = sanitizer;\n this.allowEmptyString = false;\n this.colorDark = \"#000000ff\";\n this.colorLight = \"#ffffffff\";\n this.cssClass = \"qrcode\";\n this.elementType = \"canvas\";\n this.errorCorrectionLevel = \"M\";\n this.margin = 4;\n this.qrdata = \"\";\n this.scale = 4;\n this.width = 10;\n this.qrCodeURL = new EventEmitter();\n this.context = null;\n }\n ngOnChanges() {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.createQRCode();\n });\n }\n isValidQrCodeText(data) {\n if (this.allowEmptyString === false) {\n return !(typeof data === \"undefined\" ||\n data === \"\" ||\n data === \"null\" ||\n data === null);\n }\n return !(typeof data === \"undefined\");\n }\n toDataURL(qrCodeConfig) {\n return new Promise((resolve, reject) => {\n QRCode.toDataURL(this.qrdata, qrCodeConfig, (err, url) => {\n if (err) {\n reject(err);\n }\n else {\n resolve(url);\n }\n });\n });\n }\n toCanvas(canvas, qrCodeConfig) {\n return new Promise((resolve, reject) => {\n QRCode.toCanvas(canvas, this.qrdata, qrCodeConfig, (error) => {\n if (error) {\n reject(error);\n }\n else {\n resolve(\"success\");\n }\n });\n });\n }\n toSVG(qrCodeConfig) {\n return new Promise((resolve, reject) => {\n QRCode.toString(this.qrdata, qrCodeConfig, (err, url) => {\n if (err) {\n reject(err);\n }\n else {\n resolve(url);\n }\n });\n });\n }\n renderElement(element) {\n for (const node of this.qrcElement.nativeElement.childNodes) {\n this.renderer.removeChild(this.qrcElement.nativeElement, node);\n }\n this.renderer.appendChild(this.qrcElement.nativeElement, element);\n }\n createQRCode() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.version && this.version > 40) {\n console.warn(\"[angularx-qrcode] max value for `version` is 40\");\n this.version = 40;\n }\n else if (this.version && this.version < 1) {\n console.warn(\"[angularx-qrcode]`min value for `version` is 1\");\n this.version = 1;\n }\n else if (this.version !== undefined && isNaN(this.version)) {\n console.warn(\"[angularx-qrcode] version should be a number, defaulting to auto.\");\n this.version = undefined;\n }\n try {\n if (!this.isValidQrCodeText(this.qrdata)) {\n throw new Error(\"[angularx-qrcode] Field `qrdata` is empty, set 'allowEmptyString=\\\"true\\\"' to overwrite this behaviour.\");\n }\n if (this.isValidQrCodeText(this.qrdata) && this.qrdata === \"\") {\n this.qrdata = \" \";\n }\n const config = {\n color: {\n dark: this.colorDark,\n light: this.colorLight,\n },\n errorCorrectionLevel: this.errorCorrectionLevel,\n margin: this.margin,\n scale: this.scale,\n type: this.elementType,\n version: this.version,\n width: this.width,\n };\n const centerImageSrc = this.imageSrc;\n const centerImageHeight = this.imageHeight || 40;\n const centerImageWidth = this.imageWidth || 40;\n switch (this.elementType) {\n case \"canvas\":\n const canvasElement = this.renderer.createElement(\"canvas\");\n this.context = canvasElement.getContext(\"2d\");\n this.toCanvas(canvasElement, config)\n .then(() => {\n if (this.ariaLabel) {\n this.renderer.setAttribute(canvasElement, \"aria-label\", `${this.ariaLabel}`);\n }\n if (this.title) {\n this.renderer.setAttribute(canvasElement, \"title\", `${this.title}`);\n }\n if (centerImageSrc && this.context) {\n this.centerImage = new Image(centerImageWidth, centerImageHeight);\n if (centerImageSrc !== this.centerImage.src) {\n this.centerImage.src = centerImageSrc;\n }\n if (centerImageHeight !== this.centerImage.height) {\n this.centerImage.height = centerImageHeight;\n }\n if (centerImageWidth !== this.centerImage.width) {\n this.centerImage.width = centerImageWidth;\n }\n const centerImage = this.centerImage;\n if (centerImage) {\n centerImage.onload = () => {\n var _a;\n (_a = this.context) === null || _a === void 0 ? void 0 : _a.drawImage(centerImage, canvasElement.width / 2 - centerImageWidth / 2, canvasElement.height / 2 - centerImageHeight / 2, centerImageWidth, centerImageHeight);\n };\n }\n }\n this.renderElement(canvasElement);\n this.emitQRCodeURL(canvasElement);\n })\n .catch((e) => {\n console.error(\"[angularx-qrcode] canvas error:\", e);\n });\n break;\n case \"svg\":\n const svgParentElement = this.renderer.createElement(\"div\");\n this.toSVG(config)\n .then((svgString) => {\n this.renderer.setProperty(svgParentElement, \"innerHTML\", svgString);\n const svgElement = svgParentElement.firstChild;\n this.renderer.setAttribute(svgElement, \"height\", `${this.width}`);\n this.renderer.setAttribute(svgElement, \"width\", `${this.width}`);\n this.renderElement(svgElement);\n this.emitQRCodeURL(svgElement);\n })\n .catch((e) => {\n console.error(\"[angularx-qrcode] svg error:\", e);\n });\n break;\n case \"url\":\n case \"img\":\n default:\n const imgElement = this.renderer.createElement(\"img\");\n this.toDataURL(config)\n .then((dataUrl) => {\n if (this.alt) {\n imgElement.setAttribute(\"alt\", this.alt);\n }\n if (this.ariaLabel) {\n imgElement.setAttribute(\"aria-label\", this.ariaLabel);\n }\n imgElement.setAttribute(\"src\", dataUrl);\n if (this.title) {\n imgElement.setAttribute(\"title\", this.title);\n }\n this.renderElement(imgElement);\n this.emitQRCodeURL(imgElement);\n })\n .catch((e) => {\n console.error(\"[angularx-qrcode] img/url error:\", e);\n });\n }\n }\n catch (e) {\n console.error(\"[angularx-qrcode] Error generating QR Code:\", e.message);\n }\n });\n }\n emitQRCodeURL(element) {\n const className = element.constructor.name;\n if (className === SVGSVGElement.name) {\n const svgHTML = element.outerHTML;\n const blob = new Blob([svgHTML], { type: \"image/svg+xml\" });\n const urlSvg = URL.createObjectURL(blob);\n const urlSanitized = this.sanitizer.bypassSecurityTrustUrl(urlSvg);\n this.qrCodeURL.emit(urlSanitized);\n return;\n }\n let urlImage = \"\";\n if (className === HTMLCanvasElement.name) {\n urlImage = element.toDataURL(\"image/png\");\n }\n if (className === HTMLImageElement.name) {\n urlImage = element.src;\n }\n fetch(urlImage)\n .then((urlResponse) => urlResponse.blob())\n .then((blob) => URL.createObjectURL(blob))\n .then((url) => this.sanitizer.bypassSecurityTrustUrl(url))\n .then((urlSanitized) => {\n this.qrCodeURL.emit(urlSanitized);\n })\n .catch((error) => {\n console.error(\"[angularx-qrcode] Error when fetching image/png URL: \" + error);\n });\n }\n}\nQRCodeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.1.1\", ngImport: i0, type: QRCodeComponent, deps: [{ token: i0.Renderer2 }, { token: i1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component });\nQRCodeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"13.1.1\", type: QRCodeComponent, selector: \"qrcode\", inputs: { allowEmptyString: \"allowEmptyString\", colorDark: \"colorDark\", colorLight: \"colorLight\", cssClass: \"cssClass\", elementType: \"elementType\", errorCorrectionLevel: \"errorCorrectionLevel\", imageSrc: \"imageSrc\", imageHeight: \"imageHeight\", imageWidth: \"imageWidth\", margin: \"margin\", qrdata: \"qrdata\", scale: \"scale\", version: \"version\", width: \"width\", alt: \"alt\", ariaLabel: \"ariaLabel\", title: \"title\" }, outputs: { qrCodeURL: \"qrCodeURL\" }, viewQueries: [{ propertyName: \"qrcElement\", first: true, predicate: [\"qrcElement\"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: `
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.1.1\", ngImport: i0, type: QRCodeComponent, decorators: [{\n type: Component,\n args: [{\n selector: \"qrcode\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `
`,\n }]\n }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i1.DomSanitizer }]; }, propDecorators: { allowEmptyString: [{\n type: Input\n }], colorDark: [{\n type: Input\n }], colorLight: [{\n type: Input\n }], cssClass: [{\n type: Input\n }], elementType: [{\n type: Input\n }], errorCorrectionLevel: [{\n type: Input\n }], imageSrc: [{\n type: Input\n }], imageHeight: [{\n type: Input\n }], imageWidth: [{\n type: Input\n }], margin: [{\n type: Input\n }], qrdata: [{\n type: Input\n }], scale: [{\n type: Input\n }], version: [{\n type: Input\n }], width: [{\n type: Input\n }], alt: [{\n type: Input\n }], ariaLabel: [{\n type: Input\n }], title: [{\n type: Input\n }], qrCodeURL: [{\n type: Output\n }], qrcElement: [{\n type: ViewChild,\n args: [\"qrcElement\", { static: true }]\n }] } });\n\nclass QRCodeModule {\n}\nQRCodeModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.1.1\", ngImport: i0, type: QRCodeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nQRCodeModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"13.1.1\", ngImport: i0, type: QRCodeModule, declarations: [QRCodeComponent], exports: [QRCodeComponent] });\nQRCodeModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"13.1.1\", ngImport: i0, type: QRCodeModule, providers: [] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.1.1\", ngImport: i0, type: QRCodeModule, decorators: [{\n type: NgModule,\n args: [{\n providers: [],\n declarations: [QRCodeComponent],\n exports: [QRCodeComponent],\n }]\n }] });\n\nexport { QRCodeComponent, QRCodeModule };\n","
0 || !activityService.loaderRunning\" class=\"page-title-section row px-3 m-0 pt-5 pb-4 flex-column\">\r\n
\r\n {{(bookedReservations.length > 0 ? 'confirmation' : 'noBookings') | translate}}
\r\n
\r\n {{(bookedReservations.length > 0 ? 'bookingIsConfirmed' : 'hopeYouVisitUsAgain') | translate}}\r\n
\r\n
\r\n
\r\n
\r\n
0\" class=\"p-0 col-lg-7 col-12\">\r\n
0\"\r\n class=\"d-flex justify-content-center\">\r\n \r\n
\r\n \r\n\r\n \r\n \r\n \r\n
\r\n
\r\n {{'confirmationCode' | translate}}: \r\n {{bookingDetail.ConfirmationCode}}\r\n {{'bookingReferenceId' | translate}}: \r\n {{bookingDetail.BookingReferenceId}}\r\n
\r\n \r\n \r\n \r\n \r\n \r\n card_travel\r\n
\r\n {{ bookingDetail.isDining || bookingDetail.isOpenBooking ? bookingDetail.RestaurantName : bookingDetail.SpecialMeal?.Name}}
\r\n
\r\n
\r\n \r\n person\r\n
{{bookingDetail.Size}}
\r\n
\r\n
\r\n \r\n calendar_today\r\n
{{(bookingDetail.StartDate | localizeDate: 'DD MMMM YYYY')}}
\r\n
\r\n
\r\n
\r\n access_time\r\n
{{(bookingDetail.activityStartTime || bookingDetail.SeatingTime) | localizeDate:'LT'}}\r\n \r\n {{'to' | translate}} {{(bookingDetail.activityEndTime || bookingDetail.DepartureTime) | localizeDate:'LT'}}\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n mode_edit\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n highlight_off\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
0\"\r\n class=\"py-1 price-table-header d-flex flex-row justify-content-start\">\r\n
\r\n
{{'description' | translate}}
\r\n
\r\n
\r\n
{{'qty' |\r\n translate}}
\r\n
\r\n
\r\n
\r\n
\r\n
{{cover.CoverTypeName}}
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {{cover.Covers}}
\r\n
\r\n
\r\n
0}\">\r\n
\r\n
\r\n
{{'totalCancellationCharges' |\r\n translate}}
\r\n
\r\n
\r\n
\r\n {{bookingDetail.OperationCurrency}}{{bookingDetail.cancellationCharges | currencyDecimalFormatter}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
{{(bookingDetail.isDining ? (bookingDetail.SpecialMeal?.Name || ('BasePrice' | translate) ) : 'sessionCharges') | translate}}
\r\n
\r\n
\r\n
{{bookingDetail.OperationCurrency}}{{\r\n (bookingDetail.isDining ? (bookingDetail.NoShowFeeAmount ? bookingDetail.NoShowFeeAmount : (bookingDetail?.SpecialMealAmount ? bookingDetail?.SpecialMealAmount : 0) +\r\n bookingDetail?.RatePlanAmount) : bookingDetail.RatePlanAmount) |\r\n currencyDecimalFormatter}}
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
Addon Amount
\r\n
\r\n
\r\n
{{bookingDetail.OperationCurrency}}{{\r\n (bookingDetail.AddonItemAmount ? bookingDetail.AddonItemAmount : 0) |\r\n currencyDecimalFormatter}}
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
{{'MinRateAdjustment' | translate}}
\r\n
\r\n
\r\n
{{bookingDetail.OperationCurrency}}{{\r\n bookingDetail.minRateAdjustmentAmount |\r\n currencyDecimalFormatter}}
\r\n
\r\n
\r\n
0\"\r\n class=\"py-3 order-summary-total-price d-flex flex-row justify-content-start\">\r\n
\r\n
{{'serviceCharges'| translate}}
\r\n
\r\n
\r\n
\r\n {{bookingDetail.OperationCurrency}}{{bookingDetail.serviceChargeAmount |\r\n currencyDecimalFormatter}}
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
{{'taxOnserviceCharge' | translate}}
\r\n
\r\n
\r\n
\r\n {{bookingDetail.OperationCurrency}}{{(bookingDetail.TaxOnServiceChargeAmount || 0) |\r\n currencyDecimalFormatter}}
\r\n
\r\n
\r\n
\r\n
\r\n
{{'VATOnserviceCharge' | translate}}
\r\n
\r\n
\r\n
\r\n {{bookingDetail.OperationCurrency}}{{(bookingDetail.VATOnServiceChargeAmount || 0) |\r\n currencyDecimalFormatter}}
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
{{'taxAmount' | translate}}
\r\n
\r\n
\r\n
\r\n {{bookingDetail.OperationCurrency}}{{((bookingDetail.TaxAmount || 0) + (bookingDetail.AddonItemTaxAmount || 0) + \r\n (bookingDetail.minRateAdjustmentTaxAmount || 0))| currencyDecimalFormatter}}
\r\n
\r\n
\r\n
\r\n
\r\n
{{'VAT' | translate}}
\r\n
\r\n
\r\n
\r\n {{bookingDetail.OperationCurrency}}{{(bookingDetail.VAT || 0) | currencyDecimalFormatter}}
\r\n
\r\n
\r\n \r\n\r\n \r\n \r\n \r\n
\r\n
\r\n
{{(bookingDetail.State === 4 ?\r\n 'totalRefundAmount'\r\n :\r\n 'totalSessionCharges') | translate}}
\r\n
\r\n
\r\n
{{bookingDetail.OperationCurrency}}{{\r\n bookingDetail?.GrandTotalSummary?.GrandTotal | currencyDecimalFormatter}}
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
{{'grandTotal' | translate}}
\r\n
\r\n
\r\n
{{currency}}{{\r\n grandTotal | currencyDecimalFormatter}}\r\n
\r\n
\r\n
\r\n \r\n
\r\n {{'noBookingCurrently' | translate}}

{{ 'clickToContinueShopping' | translate }}\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n","import { NgModule } from '@angular/core';\r\nimport { Routes, RouterModule } from '@angular/router';\r\nimport { ActivitiesListComponent } from './activities-list/activities-list.component';\r\nimport { ActivitiesLiteCheckOutComponent } from './activities-lite-check-out/activities-lite-check-out.component';\r\nimport { ActivitiesLiteOrderSummaryComponent } from './activities-lite-order-summary/activities-lite-order-summary.component';\r\nimport { ActivityCartComponent } from './activity-cart/activity-cart.component';\r\nimport { ActivitySessionSelectionComponent } from './activity-session-selection/activity-session-selection.component';\r\nimport { ActivityBookingConfirmationComponent } from './activity-booking-confirmation/activity-booking-confirmation.component';\r\n\r\nconst routes: Routes = [\r\n {\r\n path: '',\r\n component: ActivitiesListComponent\r\n },\r\n {\r\n path: 'list/:merchantId',\r\n component: ActivitiesListComponent\r\n },\r\n {\r\n path: 'slot-selection/:restaurantId/:merchantId',\r\n component: ActivitySessionSelectionComponent\r\n },\r\n {\r\n path: 'order-summary/:merchantId',\r\n component: ActivitiesLiteOrderSummaryComponent\r\n },\r\n {\r\n path: 'order-summary/edit/:restaurantId/:merchantId',\r\n component: ActivitiesLiteOrderSummaryComponent\r\n },\r\n {\r\n path: 'cart-summary/:merchantId',\r\n component: ActivityCartComponent\r\n },\r\n {\r\n path: 'confirmation/:merchantId/:token',\r\n component: ActivityBookingConfirmationComponent\r\n },\r\n {\r\n path: 'checkout/:merchantId',\r\n component: ActivitiesLiteCheckOutComponent\r\n },\r\n {\r\n path: 'list/:merchantId/:activityId',\r\n component: ActivitiesListComponent \r\n }\r\n];\r\n\r\n@NgModule({\r\n imports: [RouterModule.forChild(routes)],\r\n exports: [RouterModule]\r\n})\r\nexport class ActivitiesLiteRoutingModule { }\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport moment from 'moment';\r\nimport { PopupMessageComponent } from 'src/app/shared/components/popup-message/popup-message.component';\r\nimport { ComponentTypes, PropertyTypeId , ActionControl, Status } from 'src/app/shared/constants/commonenums';\r\nimport { BookingChargeType } from 'src/app/shared/dynamicform/models/common-models';\r\nimport { ComponentDetails } from 'src/app/shared/dynamicform/models/popup.interface';\r\nimport { OperationResultState } from 'src/app/shared/Models/ResultModels';\r\nimport { LanguageFileName, operationType } from 'src/app/shared/Models/WidgetSettingsModels';\r\nimport { Utilities } from 'src/app/shared/utilities/utilities';\r\nimport { ActivitiesListComponent } from '../activities-list/activities-list.component';\r\nimport * as _ from 'lodash';\r\n\r\n@Component({\r\n selector: 'app-activity-booking-confirmation',\r\n templateUrl: './activity-booking-confirmation.component.html',\r\n styleUrls: ['./activity-booking-confirmation.component.scss', './../activities-lite.component.scss']\r\n})\r\nexport class ActivityBookingConfirmationComponent extends ActivitiesListComponent implements OnInit {\r\n bookedReservations = [];\r\n grandTotal = 0;\r\n cancellationCharges = 0;\r\n currency :string;\r\n cancellationMessage = this.ts.instant('doYouWantToCancelThisReservation');\r\n bookingToken = '';\r\n cartBookingId = '';\r\n cancelSuccessful = false;\r\n taxIncluded = false;\r\n cancelRes: any = {};\r\n bookedActivityCount = 0;\r\n cancelDialogRef: MatDialogRef;\r\n noReservationDialog: MatDialogRef;\r\n widgetSettings: any = {};\r\n showQRCode = false;\r\n displayModifyButton : boolean = true;\r\n displayCancelButton : boolean = true;\r\n\r\n ngOnInit(): void {\r\n this.activityService.fromConfirmation = false;\r\n this.activityService.hideBackNav();\r\n this.activityService.showLanguageOption = false;\r\n this.activityService.emptyCartData();\r\n this.activityService.currentNavURL = 'confirmation';\r\n this.activityService.hideCart.next(true);\r\n this.activityService.selectedDiningSpecialMeal = null;\r\n this.bookingToken = this.route.snapshot.params.token;\r\n this.activityService.restaurantMerchantCode = this.route.snapshot.params.merchantId;\r\n this.activityService.setSessionData('activityEditData_' + this.activityService.restaurantMerchantCode, {}, true);\r\n this.currency = this.activityService.OperationCurrency;\r\n this.getOrderDetails();\r\n this.getBookingActions();\r\n }\r\n getBookingActions(){\r\n this.displayModifyButton = this.activityService.widgetSettings?.DisplayModifyButton;\r\n this.displayCancelButton = this.activityService.widgetSettings?.DisplayCancelButton;\r\n this.route.queryParams\r\n .subscribe(params => {\r\n console.log(params);\r\n if(params?.actionControl !== null && params?.actionControl !== undefined) {\r\n this.displayModifyButton = Number(params.actionControl) == ActionControl.CanModify || Number(params.actionControl) == ActionControl.CanModifyAndCancel;\r\n this.displayCancelButton = Number(params.actionControl) == ActionControl.CanCancel || Number(params.actionControl) == ActionControl.CanModifyAndCancel;\r\n }\r\n })\r\n }\r\n\r\n continueToBooking(){\r\n this.activityService.mealWithConfig = this.activityService.mealWithConfig ? this.activityService.mealWithConfig : (this.activityService.editData?.SpecialMealId && !this.activityService.editData?.SpecialMeal?.ShowOtherActivities ? this.activityService.editData.SpecialMeal : null);\r\n if(this.activityService.editData){\r\n this.activityService.editData = null;\r\n }\r\n\r\n this.activityService.navigateToPage();\r\n }\r\n\r\n\r\n getOrderDetails(editModify = false, action = '', activityDetails?: any) {\r\n this.activityService.startLoader();\r\n this.activityService.byPassValidation = true;\r\n this.activityService.getByCartId(this.bookingToken, 0).subscribe(result => {\r\n this.activityService.setLanguageIdFromUrl();\r\n this.activityService.stopLoader();\r\n this.activityService.byPassValidation = false;\r\n if (result) { \r\n if (editModify && this.bookedActivityCount > 0 && result.length != this.bookedActivityCount) {\r\n this.bookedReservations = result;\r\n this.retryCancelActivity();\r\n } else if (editModify && this.bookedReservations.length === this.bookedActivityCount) {\r\n if (action === 'cancel') {\r\n this.cancelRes = activityDetails;\r\n if (!activityDetails.isDining && !activityDetails.isOpenBooking) { \r\n this.getCancellationCharges(activityDetails);\r\n }\r\n else {\r\n this.cancelReservationConfirmation((activityDetails.isDining ? this.ts.instant('Are you sure you want to cancel the reservation?') : this.ts.instant('Are you sure you want to cancel the activity?')) + '
', '250px',this.ts.instant('Cancel Reservation'));\r\n }\r\n } else if (action === 'modify') {\r\n this.modifyBooking(activityDetails);\r\n }\r\n } else {\r\n this.bookedReservations = result;\r\n }\r\n this.bookedReservations?.forEach(data =>{\r\n if(data.BookingAmounts.length > 0){\r\n data.serviceChargeAmount = _.sumBy(_.filter(data.BookingAmounts, ['BookingChargeType', BookingChargeType.ServiceCharge]), 'Amount');\r\n data.minRateAdjustmentAmount = _.sumBy(_.filter(data.BookingAmounts, ['BookingChargeType', BookingChargeType.MinRateCoverTypeAdjustment]), 'Amount');\r\n data.minRateAdjustmentTaxAmount = _.sumBy(_.filter(data.BookingAmounts, ['BookingChargeType', BookingChargeType.MinRateCoverTypeAdjustment]), 'NegotiatedAmount');\r\n // data.TaxOnServiceChargeAmount = _.sumBy(_.filter(data.BookingAmounts, ['BookingChargeType', BookingChargeType.ServiceCharge]), 'BookingChargeTaxAmount');\r\n }\r\n else{\r\n data.serviceChargeAmount = 0;\r\n }\r\n })\r\n let index= this.bookedReservations.findIndex(res => !res.CanBeCancel);\r\n if(index != -1) {\r\n this.activityService.\r\n openSnackBar(this.bookedReservations[index]?.CancellationCutOffDescription, this.ts.instant('close'), this.activityService.ConfigSettings.snackBarTime);\r\n // return false;\r\n }\r\n this.bookedReservations = _.orderBy(this.bookedReservations,'SeatingTime','asc');\r\n this.bookedActivityCount = this.bookedReservations.length;\r\n this.activityService.getWidgetImagesMerchantLevel(activityDetails?.MerchantId || result[0].MerchantId);\r\n \r\n this.cartBookingId = activityDetails?.CartBookingId || result[0].CartBookingId;\r\n this.activityService.editData = activityDetails || result[0];\r\n if(this.activityService.editData.SpecialMeal && !this.activityService.editData.SpecialMeal.ShowOtherActivities && result?.length == 1){\r\n this.activityService.mealWithConfig = this.activityService.editData.SpecialMeal;\r\n this.activityService.loadConfigBasedStyles(this.activityService.mealWithConfig);\r\n }else{\r\n this.activityService.bannerImageHandler(result);\r\n }\r\n this.grandTotalCalculation();\r\n if(this.activityService.editData.BookedSessions?.length){\r\n let bookedSessionIds = _.map(this.activityService.editData.BookedSessions,'ActivitySessionId');\r\n bookedSessionIds.forEach(sessionId => {\r\n let cancelledSession = _.map(this.activityService.editData.SpecialMeal.ActivitySessions.filter(data => data.StatusCode == Status.Cancelled),'ActivitySessionId').includes(sessionId)\r\n if(cancelledSession){\r\n this.activityService.editData.BookedSessions.find(sessionItem => sessionItem.ActivitySessionId == sessionId).State = Status.Cancelled;\r\n this.toastr.error(`${this.ts.instant('sessionCancellationMsg')} ${this.activityService.editData.SpecialMeal.ActivitySessions.find(data => data.ActivitySessionId == sessionId)?.Reason || ''}.${this.ts.instant('pleaseContact')}`);\r\n return;\r\n }\r\n return;\r\n })\r\n\r\n }\r\n this.bookedReservations.map(reservation => {\r\n if(!reservation.isDining && !reservation.CoverTypeQuantities?.length && reservation.Size) {\r\n reservation.CoverTypeQuantities = [ {CoverTypeName : (reservation.SpecialMeal?.Name || this.ts.instant('GroupSize')) , CoverTypeId: null, Covers: reservation.Size} ];\r\n }else if(reservation.isDining && !reservation.CoverTypeQuantities?.length && reservation.Size){\r\n reservation.CoverTypeQuantities = [ {CoverTypeName : (reservation.SpecialMeal?.Name || this.ts.instant('GroupSize')),CoverTypeId: null, Covers: reservation.Size} ];\r\n }\r\n })\r\n } else {\r\n this.bookedReservations = [];\r\n if (editModify) {\r\n this.retryCancelActivity();\r\n }\r\n }\r\n }, err => {\r\n this.activityService.stopLoader();\r\n this.activityService.byPassValidation = false;\r\n this.bookedReservations = [];\r\n });\r\n }\r\n\r\n grandTotalCalculation() {\r\n this.grandTotal = 0;\r\n this.showQRCode = false;\r\n this.bookedReservations.forEach(reservation => {\r\n reservation.isDining = this.isDining(reservation?.PropertyTypeId);\r\n reservation.isOpenBooking = this.isOpenBooking(reservation);\r\n const currentTime =\r\n Utilities.getRestaurantDateTime(reservation.DaylightDelta);\r\n const currentDateTime = moment(currentTime);\r\n const currentDate = moment(currentDateTime.format(moment.HTML5_FMT.DATE));\r\n reservation.Notes = reservation.Notes.filter(note => note.Type !== 4);\r\n reservation.cancellationCharges = reservation?.CancellationFeeAmount ? reservation?.CancellationFeeAmount : 0.00;\r\n reservation.CoverTypeQuantities = reservation.CoverTypeQuantities.filter(cover => { return cover.Covers > 0 });\r\n reservation.activityStartTime = reservation.isDining || reservation.isOpenBooking ? reservation.ReservedFor : this.findSlot(reservation).startTime;\r\n reservation.activityEndTime = reservation.isDining || reservation.isOpenBooking ? reservation.DepartureTime : this.findSlot(reservation).endTime;\r\n reservation.StartDate = reservation.isDining || reservation.isOpenBooking ? reservation.ReservedFor : reservation.StartDate;\r\n reservation.hideEditCancel = moment(reservation.StartDate) < currentDate ? true : false;\r\n this.currency = reservation.OperationCurrency;\r\n // this.grandTotal += ((reservation?.SpecialMealAmount ? reservation?.SpecialMealAmount : reservation?.NoShowFeeAmount)) + (reservation && (reservation.RatePlanAmount ? reservation.RatePlanAmount : 0) + (reservation.AddonItemAmount ? reservation.AddonItemAmount : 0));\r\n // this.grandTotal += reservation && (reservation.TaxAmount ? reservation.TaxAmount : 0) + (reservation.AddonItemTaxAmount ? reservation.AddonItemTaxAmount : 0) + (reservation.serviceChargeAmount || 0) + (reservation.minRateAdjustmentAmount || 0) + (reservation.minRateAdjustmentTaxAmount || 0) + (reservation.TaxOnServiceChargeAmount || 0);\r\n this.grandTotal += reservation.GrandTotal;\r\n this.taxIncluded = reservation.TaxAmount ? true : false;\r\n });\r\n }\r\n\r\n findSlot(reservationDetails) { \r\n let bookedSessionId = reservationDetails.BookedSessions && reservationDetails.BookedSessions[0] ? reservationDetails.BookedSessions[0].ActivitySessionId : 0;\r\n let session = reservationDetails.SpecialMeal.ActivitySessions ? reservationDetails.SpecialMeal.ActivitySessions.find(widget => { return widget.ActivitySessionId === bookedSessionId }) : {};\r\n let activityStartDateTime = session && session.StartTime ? moment(moment().format(moment.HTML5_FMT.DATE) + ' ' + session.StartTime) : '';\r\n let activityEndDateTime = session && session.EndTime ? moment(moment().format(moment.HTML5_FMT.DATE) + ' ' + session.EndTime) : '';\r\n return { startTime: activityStartDateTime, endTime: activityEndDateTime };\r\n }\r\n\r\n isDining(propertyType): boolean {\r\n if (propertyType && (propertyType === PropertyTypeId.Restaurant || propertyType === PropertyTypeId.Auditorium || propertyType === PropertyTypeId.Cabana || propertyType === PropertyTypeId.MovieTheatre)) {\r\n return true;\r\n } else {\r\n this.showQRCode = true;\r\n return false;\r\n }\r\n }\r\n\r\n isOpenBooking(reservationData: any): boolean {\r\n if (reservationData \r\n && (reservationData.PropertyTypeId === PropertyTypeId.TennisCenter || reservationData.PropertyTypeId === PropertyTypeId.General) \r\n && !reservationData.SpecialMealId) {\r\n this.showQRCode = true;\r\n return true;\r\n } else { \r\n return false;\r\n }\r\n }\r\n\r\n\r\n cancelReservationConfirmation(message, height = '250px',headerTitle?) {\r\n const popUpMessage = [{\r\n confirmationMessage: message,\r\n dialogTitle: headerTitle ? headerTitle : this.ts.instant('cancelActivity'),\r\n showAlert: true,\r\n isScrolable: true\r\n }];\r\n const componentDetails: ComponentDetails = Utilities.setComponentDetails(PopupMessageComponent, 'small', '', popUpMessage,\r\n popUpMessage[0].dialogTitle);\r\n this.cancelDialogRef = this.activityService.openCustomPopup(componentDetails, ComponentTypes.cancelReservation, '400px', height, true, '', this.ts.instant('Yes'),\r\n this.ts.instant('No'), true, '90vw');\r\n this.cancelDialogRef.afterClosed().subscribe(data => {\r\n if (data.ok) {\r\n if (!this.cancelRes.isDining && !this.cancelRes.isOpenBooking) { this.confirmCancellation(this.cancelRes); }\r\n else if (this.cancelRes.isDining) { this.confirmDiningCancellation(this.cancelRes); }\r\n else if (this.cancelRes.isOpenBooking) { this.confirmNonDiningCancellation(this.cancelRes); }\r\n }\r\n });\r\n }\r\n\r\n retryCancelActivity(height = '270px') {\r\n const popUpMessage = [{\r\n confirmationMessage: this.ts.instant('retryActivityModify'),\r\n dialogTitle: this.ts.instant('retryModifyCancel'),\r\n showAlert: true,\r\n isScrolable: true\r\n }];\r\n const componentDetails: ComponentDetails = Utilities.setComponentDetails(PopupMessageComponent, 'small', '', popUpMessage,\r\n popUpMessage[0].dialogTitle);\r\n this.cancelDialogRef = this.activityService.openCustomPopup(componentDetails, ComponentTypes.cancelReservation, '400px', height, true, '', this.ts.instant('continue'),\r\n this.ts.instant('cancel'), true, '90vw');\r\n }\r\n\r\n getCancellationCharges(cancelReservation) {\r\n let alertmsg = this.ts.instant('cancelEntireReservation') + '
';\r\n let height = '250px';\r\n this.cancellationCharges = 0; \r\n this.activityService.startLoader();\r\n this.activityService.getCancellationCharge(cancelReservation.RestaurantId, cancelReservation.Id, []).subscribe(result => {\r\n this.activityService.stopLoader();\r\n if (result && result.Payload && result.Payload.CancellationCharge > 0) {\r\n this.cancellationCharges = result.Payload.CancellationCharge ? result.Payload.CancellationCharge : 0.00;\r\n this.ts.get('cancellationFeeInfoMessage', { cancellationcharge: this.currency + this.cancellationCharges, collectTypeInfo: '' }).subscribe(result => {\r\n this.cancellationMessage = result ? result : this.ts.instant('cancellationFeeInfoMessage') + this.currency + this.cancellationCharges + this.ts.instant('doYouWishToProceed');\r\n });\r\n alertmsg += this.cancellationMessage;\r\n height = '270px';\r\n }\r\n this.cancelReservationConfirmation(alertmsg, height);\r\n });\r\n }\r\n\r\n confirmCancellation(reservation) {\r\n this.activityService.startLoader();\r\n this.activityService.CancelBooking(reservation.RestaurantId, reservation.Id, this.activityService.language, []).subscribe(data => {\r\n this.activityService.openSnackBar\r\n (this.ts.instant('reservationCancelledSuccessfully'),\r\n this.ts.instant('close'), this.activityService.ConfigSettings.snackBarTime, 'success-snackbar');\r\n this.getOrderDetails();\r\n }, err => {\r\n this.activityService.stopLoader();\r\n });\r\n }\r\n\r\n confirmDiningCancellation(reservation) {\r\n this.activityService.startLoader();\r\n this.reservationService.CancelReservation(reservation.RestaurantId, reservation.Id, this.activityService.language).subscribe(data => {\r\n if (data.State == OperationResultState.Success) {\r\n this.activityService.openSnackBar\r\n (this.ts.instant('reservationCancelledSuccessfully'),\r\n this.ts.instant('close'), this.activityService.ConfigSettings.snackBarTime, 'success-snackbar');\r\n this.getOrderDetails();\r\n }\r\n }, err => {\r\n this.activityService.stopLoader();\r\n });\r\n }\r\n\r\n confirmNonDiningCancellation(reservation) {\r\n this.activityService.startLoader();\r\n this.activityService.CancelNonDiningBooking(reservation.RestaurantId, reservation.Id).subscribe(data => {\r\n if (data.State == OperationResultState.Success) {\r\n this.activityService.openSnackBar\r\n (this.ts.instant('reservationCancelledSuccessfully'),\r\n this.ts.instant('close'), this.activityService.ConfigSettings.snackBarTime, 'success-snackbar');\r\n this.getOrderDetails();\r\n }\r\n }, err => {\r\n this.activityService.stopLoader();\r\n });\r\n }\r\n\r\n modifyBooking(reservationDetail) {\r\n this.activityService.operation = operationType.edit;\r\n this.activityService.editData = reservationDetail || {};\r\n this.activityService.setSessionData('activityEditData_' + this.activityService.restaurantMerchantCode, reservationDetail, true);\r\n this.activityService.isDining = reservationDetail.isDining;\r\n this.activityService.isNonDining = reservationDetail.isOpenBooking;\r\n this.activityService.fromConfirmation = true;\r\n this.activityService.sessionFilterValue = {};\r\n this.getRestaurantWidgetSettings();\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n// import { LessonType, PartyState, ShapeTypeEnum } from '@constants/commonenums';\r\n// import { CacheService } from '@core/services/cache.service';\r\n// import { TableShapeType } from '@models/RestaurantDTO';\r\n// import { Utilities } from '@utilities/utilities';\r\nimport { fabric } from 'fabric';\r\nimport _ from 'lodash';\r\nimport moment from 'moment';\r\nimport { ShapeTypeEnum } from 'src/app/shared/constants/commonenums';\r\n// import { controlSettings } from '../constants/globalConstants';\r\n// import { LayoutConfig } from '../models/global.interface';\r\n\r\n@Injectable()\r\nexport class LayoutFunctions {\r\n propertyChanges = ['Walls', 'Shapes', 'Labels'];\r\n vipIcon: any = '';\r\n linkIcon: any = '';\r\n partyNotesWithSpecialIcon: any = '';\r\n partyNotesWithoutSpecialMealIcon: any = '';\r\n favIcon: any = '';\r\n blockIcon: any = '';\r\n TableselectIcon: any = '';\r\n\r\n public constructor() {\r\n }\r\n\r\n\r\n findminObject(tables?, labels?, walls?, shapes?) {\r\n const newtables = _.cloneDeep(tables.map(obj => ({ ...obj, tempname: 'table' })));\r\n const newlabels = _.cloneDeep(labels.map(obj => ({ ...obj, tempname: 'label' })));\r\n const newwalls = _.cloneDeep(walls.map(obj => ({ ...obj, tempname: 'wall' })));\r\n const newshapes = _.cloneDeep(shapes.map(obj => ({ ...obj, tempname: 'area' })));\r\n\r\n const allObjects = _.cloneDeep(newtables.concat(newlabels, newwalls, newshapes));\r\n allObjects.forEach(element => {\r\n if (element.tempname == 'wall') {\r\n const minx = _.minBy(element.Points, (e) => { return e['X']; });\r\n const miny = _.minBy(element.Points, (e) => { return e['Y']; });\r\n element.totalminDataHeight = miny['Y'];\r\n element.totalminDataWidth = minx['X'];\r\n }\r\n else if (element.tempname == 'label') {\r\n const findstringlength = element.Text.length;\r\n let getwidth = 2;\r\n let getHeight = 2;\r\n const angles = element.Angle;\r\n if ((angles >= 0 && angles <= 20) || (angles >= 160 && angles <= 200) || (angles >= 340 && angles <= 360)) {\r\n getwidth = findstringlength / 2;\r\n } else {\r\n getHeight = findstringlength / 2;\r\n }\r\n element.totalminDataHeight = element.Top - (getHeight);\r\n element.totalminDataWidth = element.Left - (getwidth);\r\n }\r\n else if (element.tempname == 'table') {\r\n element.totalminDataHeight = element.Top - ((element.Height / 2) + 14);\r\n element.totalminDataWidth = element.Left - ((element.Width / 2) + 14);\r\n } else if (element.tempname == 'area') {\r\n element.totalminDataHeight = element.Top;\r\n element.totalminDataWidth = element.Left;\r\n } else {\r\n element.totalminDataHeight = element.Top - element.Height;\r\n element.totalminDataWidth = element.Left - element.Width;\r\n }\r\n });\r\n\r\n return allObjects;\r\n\r\n }\r\n\r\n findmaxObject(tables?, labels?, walls?, shapes?) {\r\n const afternewtables = _.cloneDeep(tables.map(obj => ({ ...obj, tempname: 'table' })));\r\n const afternewlabels = _.cloneDeep(labels.map(obj => ({ ...obj, tempname: 'label' })));\r\n const afternewwalls = _.cloneDeep(walls.map(obj => ({ ...obj, tempname: 'wall' })));\r\n const afternewshapes = _.cloneDeep(shapes.map(obj => ({ ...obj, tempname: 'area' })));\r\n\r\n const allObjects = _.cloneDeep(afternewtables.concat(afternewlabels, afternewwalls, afternewshapes));\r\n // basicTables = _.cloneDeep(tables.concat(labels, walls, shapes));\r\n\r\n allObjects.forEach(element => {\r\n if (element.tempname == 'wall') {\r\n const maxx = _.maxBy(element.Points, (e) => { return e['X']; });\r\n const maxy = _.maxBy(element.Points, (e) => { return e['Y']; });\r\n element.totalDataHeight = maxy['Y'] + 10;\r\n element.totalDataWidth = maxx['X'] + 10;\r\n }\r\n else if (element.tempname == 'label') {\r\n const findstringlength = element.Text.length;\r\n let getwidth = 11;\r\n let getHeight = 11;\r\n const angles = element.Angle;\r\n if ((angles >= 0 && angles <= 20) || (angles >= 160 && angles <= 200) || (angles >= 340 && angles <= 360)) {\r\n getwidth = findstringlength * 10.2 / 2;\r\n } else {\r\n getHeight = findstringlength * 10.2 / 2;\r\n }\r\n element.totalDataHeight = getHeight + element.Top;\r\n element.totalDataWidth = getwidth + element.Left;\r\n }\r\n else if (element.tempname == 'table') {\r\n element.totalDataHeight = (element.Height) + element.Top;\r\n element.totalDataWidth = (element.Width) + element.Left;\r\n } else if (element.tempname == 'area') {\r\n element.totalDataHeight = element.Height + element.Top + 15;\r\n element.totalDataWidth = element.Width + element.Left + 15;\r\n } else {\r\n element.totalDataHeight = element.Height / 2 + element.Top;\r\n element.totalDataWidth = element.Width / 2 + element.Left;\r\n }\r\n\r\n });\r\n\r\n return allObjects;\r\n }\r\n\r\n \r\n\r\n drawRectangleSeat(obj, that, colorData) {\r\n const color = '#444444';\r\n const objectWidth = obj.width;\r\n const objectHeight = obj.height;\r\n let setArray;\r\n const partySize = obj.MaxPartySize > 6 ? 6 : obj.MaxPartySize;\r\n switch (partySize) {\r\n case 1:\r\n setArray = ['left'];\r\n break;\r\n case 2:\r\n setArray = ['left', 'right'];\r\n break;\r\n case 3:\r\n setArray = ['left', 'top', 'right'];\r\n break;\r\n case 4:\r\n setArray = ['left', 'top', 'right', 'bottom'];\r\n break;\r\n case 5:\r\n setArray = ['left', 'top-right', 'top-left', 'right', 'bottom'];\r\n break;\r\n case 6:\r\n setArray = ['left', 'top-right', 'top-left', 'right', 'bottom-left', 'bottom-right'];\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n return this.drawSeat(obj, setArray, this, color);\r\n }\r\n\r\n \r\n drawSeat(obj, seatArray, that, color) {\r\n const tableObj = [];\r\n const strokeWidth = 4;\r\n // tableObj.push(obj);\r\n const scale = obj._objects.filter(x => x.name == 'shape')[0].scaleX;\r\n const shape = obj._objects.filter(x => x.name == 'shape')[0]\r\n seatArray.forEach(element => {\r\n switch (element) {\r\n case 'top': {\r\n const ff = this.rectSeat(obj.left - (obj.width / 4), (obj.top - (obj.height / 2) - 6), obj.left + (obj.width / 4), (obj.top - (obj.height / 2) - 6), scale, color);\r\n tableObj.push(ff);\r\n break;\r\n // obj.addWithUpdate(ff);\r\n }\r\n\r\n case 'left': {\r\n // const ff = this.rectSeat((obj.left - 6), (obj.top + obj.height / 2) - (obj.height / 4) - 5, (obj.left - 6), (obj.top + obj.height / 2) + (obj.height / 4), scale, color);\r\n // tslint:disable-next-line: max-line-length\r\n const ff = this.rectSeat((obj.left - (obj.width / 2) - 4), (obj.top - (obj.height / 4) - 4), (obj.left - (obj.width / 2) - 4), (obj.top + obj.height / 4), scale, color);\r\n tableObj.push(ff);\r\n break;\r\n // obj.addWithUpdate(ff);\r\n }\r\n\r\n case 'right': {\r\n const ff = this.rectSeat((obj.left + (obj.width / 2) - 1), (obj.top - (obj.height / 4) - 4), (obj.left + (obj.width / 2) - 1), (obj.top + obj.height / 4), scale, color);\r\n tableObj.push(ff);\r\n break;\r\n // obj.addWithUpdate(ff);\r\n\r\n }\r\n\r\n case 'bottom': {\r\n const ff = this.rectSeat((obj.left - (obj.width / 4)), (obj.top + (obj.height / 2)), obj.left + (obj.width / 4), (obj.top + (obj.height / 2)), scale, color);\r\n tableObj.push(ff);\r\n break;\r\n // obj.addWithUpdate(ff);\r\n\r\n }\r\n\r\n case 'top-right': {\r\n const ff = this.rectSeat(obj.left + (obj.width / 8), (obj.top - (obj.height / 2) - 6), obj.left + (obj.width / 2) - (obj.width / 8), (obj.top - (obj.height / 2) - 6), scale, color);\r\n tableObj.push(ff);\r\n break;\r\n // obj.addWithUpdate(ff);\r\n }\r\n\r\n case 'top-left': {\r\n const ff = this.rectSeat(obj.left - (obj.width / 2) + (obj.width / 8), (obj.top - (obj.height / 2) - 6), obj.left - (obj.width / 8), (obj.top - (obj.height / 2) - 6), scale, color);\r\n tableObj.push(ff);\r\n break;\r\n // obj.addWithUpdate(ff);\r\n }\r\n\r\n case 'bottom-right': {\r\n const ff = this.rectSeat(obj.left + (obj.width / 8), (obj.top + (obj.height / 2)), obj.left + (obj.width / 2) - (obj.width / 8), (obj.top + (obj.height / 2)), scale, color);\r\n tableObj.push(ff);\r\n break;\r\n // obj.addWithUpdate(ff);\r\n }\r\n\r\n case 'bottom-left': {\r\n const ff = this.rectSeat(obj.left - (obj.width / 2) + (obj.width / 8), (obj.top + (obj.height / 2)), obj.left - (obj.width / 8), (obj.top + (obj.height / 2)), scale, color);\r\n tableObj.push(ff);\r\n break;\r\n // obj.addWithUpdate(ff);\r\n }\r\n break;\r\n\r\n case 'top-right': {\r\n const ff = this.rectSeat(obj.left + (obj.width / 2) + (obj.width / 8), (obj.top - 6), obj.left + (obj.width) - (obj.width / 8), (obj.top - 6), scale, color);\r\n tableObj.push(ff);\r\n break;\r\n // obj.addWithUpdate(ff);\r\n }\r\n\r\n case 'top-left': {\r\n const ff = this.rectSeat(obj.left + (obj.width / 8), (obj.top - 6), obj.left + (obj.width / 2) - (obj.width / 8), (obj.top - 6), scale, color);\r\n tableObj.push(ff);\r\n break;\r\n // obj.addWithUpdate(ff);\r\n }\r\n\r\n case 'bottom-right': {\r\n const ff = this.rectSeat(obj.left + (obj.width / 2) + (obj.width / 8), (obj.top + (obj.height)), obj.left + (obj.width) - (obj.width / 8), (obj.top + (obj.height)), scale, color);\r\n tableObj.push(ff);\r\n break;\r\n // obj.addWithUpdate(ff);\r\n }\r\n\r\n case 'bottom-left': {\r\n const ff = this.rectSeat(obj.left + (obj.width / 8), (obj.top + (obj.height)), obj.left + (obj.width / 2) - (obj.width / 8), (obj.top + (obj.height)), scale, color);\r\n tableObj.push(ff);\r\n break;\r\n // obj.addWithUpdate(ff);\r\n }\r\n }\r\n\r\n });\r\n // that.tableObj = [];\r\n // that.tableObj = tableObj;\r\n return tableObj;\r\n // that.canvas.renderAll();\r\n\r\n\r\n }\r\n\r\n drawSeatEllipse(obj, seatArray, that, color) {\r\n const tableObj = [];\r\n const strokeWidth = 4;\r\n // tableObj.push(obj);\r\n const scale = obj._objects.filter(x => x.name == 'shape')[0].scaleX;\r\n const shape = obj._objects.filter(x => x.name == 'shape')[0];\r\n const radius = obj.radius;\r\n const seat = obj.MaxPartySize > 6 ? 6 : obj.MaxPartySize;\r\n const myTotal = seat * 8;\r\n var startAngle = Math.PI * 2 * ((myTotal / seat) / myTotal);\r\n\r\n seatArray.forEach(element => {\r\n switch (element) {\r\n case 'top': {\r\n const ff = this.curvedSeat(obj.MaxPartySize > 6 ? 6 : obj.MaxPartySize, radius, color, 'green', this, obj, startAngle, color);\r\n tableObj.push(ff);\r\n break;\r\n }\r\n\r\n case 'bottom': {\r\n const ff = this.curvedSeat(obj.MaxPartySize > 6 ? 6 : obj.MaxPartySize, radius, color, 'green', this, obj, startAngle, color);\r\n tableObj.push(ff);\r\n break;\r\n }\r\n\r\n }\r\n startAngle += Math.PI * 2 * ((myTotal / seat) / myTotal);\r\n\r\n });\r\n // that.tableObj = [];\r\n // that.tableObj = tableObj;\r\n return tableObj;\r\n // that.canvas.renderAll();\r\n\r\n\r\n }\r\n rectSeat(x1, y1, x2, y2, scale, color) {\r\n scale = 1;\r\n const rectangleSeatObj = new fabric.Line([x1, y1, x2, y2], {\r\n stroke: color,\r\n strokeWidth: (5),\r\n //strokeLineCap: 'round'\r\n });\r\n rectangleSeatObj.set({\r\n name: 'seat'\r\n });\r\n return rectangleSeatObj;\r\n }\r\n\r\n curvedSeat(seat, radius, seatColor, tblFillColor, that, obj, startAngle, color?) {\r\n const seatWidth = seat * 25;\r\n const lastend = 0;\r\n const myTotal = seat * 8;\r\n const tableObj1 = [];\r\n const strokeColor = '';\r\n const table = obj._objects.filter(x => x.name == 'shape')[0];\r\n const radiusAssigned = ((table.width * table.scaleX) / 2) + (6.5);\r\n const circleSeat = new fabric.Ellipse({\r\n left: obj.Left > 14 ? obj.Left : 14,\r\n top: obj.Top > 14 ? obj.Top : 14,\r\n height: (obj.Height - 16) < 60 ? (60 + 3) : obj.MaxPartySize > 2 ? obj.Height - 16 + 3 : obj.Height + 3,\r\n width: (obj.Width - 16) < 60 ? (60 + 3) : obj.Width - 16 + 3,\r\n fill: color,\r\n stroke: strokeColor,\r\n strokeWidth: 5\r\n });\r\n\r\n circleSeat.set({\r\n name: 'seat',\r\n });\r\n\r\n return circleSeat;\r\n }\r\n\r\n drawCircleSeat(obj, that, colorData) {\r\n const color = '#444444';\r\n const seatWidth = 5 * 5;\r\n const radius = obj.radius;\r\n return this.roundSeatDraw(obj.MaxPartySize > 6 ? 6 : obj.MaxPartySize, radius, color, 'green', this, obj, color); // green,blue\r\n }\r\n\r\n roundSeatDraw(seat, radius, seatColor, tblFillColor, that, obj, color?) {\r\n const seatWidth = seat * 25;\r\n const lastend = 0;\r\n const myTotal = seat * 8;\r\n let startAngle = 0;\r\n const tableObj1 = [];\r\n const strokeColor = '';\r\n const table = obj._objects.filter(x => x.name == 'shape')[0];\r\n for (let i = 0; i < seat; i++) {\r\n const circleSeat = new fabric.Circle({\r\n radius: ((table.width * table.scaleX) / 2) + 3,\r\n startAngle: startAngle - ((Math.PI * 2) / myTotal),\r\n endAngle: startAngle + ((Math.PI * 2) / myTotal),\r\n stroke: seatColor,\r\n strokeWidth: (5),\r\n fill: '',\r\n //strokeLineCap: 'round',\r\n // cornerSize: 25,\r\n //cornerStyle: 'circle',\r\n top: obj.top,\r\n left: obj.left,\r\n originX: 'center',\r\n originY: 'center',\r\n });\r\n\r\n circleSeat.set({\r\n name: 'seat',\r\n });\r\n\r\n startAngle += Math.PI * 2 * ((myTotal / seat) / myTotal);\r\n tableObj1.push(circleSeat);\r\n }\r\n return tableObj1;\r\n }\r\n\r\n drawEllipseSeat(obj, that, color) {\r\n const objectWidth = obj.width;\r\n const objectHeight = obj.height;\r\n let setArray;\r\n const partySize = obj.MaxPartySize > 6 ? 6 : obj.MaxPartySize;\r\n setArray = ['top', 'bottom'];\r\n const radius = obj.radius;\r\n const seat = obj.MaxPartySize > 6 ? 6 : obj.MaxPartySize;\r\n const myTotal = seat * 8;\r\n var startAngle = Math.PI * 2 * ((myTotal / seat) / myTotal);\r\n\r\n return this.curvedSeat(obj.MaxPartySize > 6 ? 6 : obj.MaxPartySize, radius, color, 'green', this, obj, startAngle, color);\r\n }\r\n\r\n checkTableiscircle(object) {\r\n const checkdiff = object.Width - object.Height;\r\n return Math.abs(checkdiff) < 15 ? ShapeTypeEnum.Circle : ShapeTypeEnum.Ellipse;\r\n }\r\n\r\n scaleObjects(canvas, scaleFactorX, scaleFactorY, scaleFactor, BasedOn?, isImage?) {\r\n const objects = canvas.getObjects();\r\n for (const i in objects) {\r\n this.scaleObject(objects[i], scaleFactorX, scaleFactorY, scaleFactor, BasedOn);\r\n }\r\n canvas.renderAll();\r\n canvas.calcOffset();\r\n }\r\n\r\n scaleObject(object, scaleFactorX, scaleFactorY, scaleFactor, BasedOn?) {\r\n const scaleX = object.scaleX;\r\n const scaleY = object.scaleY;\r\n const left = object.left;\r\n const top = object.top;\r\n const shapetype = object.name == 'area';\r\n let scalefactorneed = false;\r\n if (object._objects) {\r\n let shape = object._objects.filter(x => x.name == 'shape');\r\n if (shape && shape.length) {\r\n let shapetypetable = shape[0].get('type');\r\n scalefactorneed = false;\r\n if (!shapetype && shapetypetable == ShapeTypeEnum.Rectangle && BasedOn == undefined) {\r\n scalefactorneed = this.getbigRectangle(object.width, object.height);\r\n }\r\n }\r\n }\r\n const tempScaleX = scaleX * (shapetype || scalefactorneed ? scaleFactorX : scaleFactor);\r\n const tempScaleY = scaleY * (shapetype || scalefactorneed ? scaleFactorY : scaleFactor);\r\n const tempLeft = left * scaleFactorX;\r\n const tempTop = top * scaleFactorY;\r\n if (object.points) {\r\n\r\n object.scaleX = scaleFactorX;\r\n object.scaleY = scaleFactorY;\r\n object.left = tempLeft;\r\n object.top = tempTop;\r\n } else {\r\n object.scaleX = tempScaleX;\r\n object.scaleY = tempScaleY;\r\n object.left = tempLeft;\r\n object.top = tempTop;\r\n }\r\n object.setCoords();\r\n }\r\n \r\n getbigRectangle(Width, Height) {\r\n const checkdiff = Width < Height;\r\n let finalval = Height / Width;\r\n if (!checkdiff) {\r\n finalval = Width / Height;\r\n }\r\n return Math.abs(finalval) > (1.25);\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ActivitiesLiteComponent } from './activities-lite.component';\r\nimport { ActivitiesListComponent, checkAcceptReservationsPipe } from './activities-list/activities-list.component';\r\nimport { ActivitiesLiteRoutingModule } from './activities-lite-routing.module';\r\nimport { MaterialModule } from '../material-module';\r\nimport { SharedModule } from '../shared/shared.module';\r\nimport { TranslateModule } from '@ngx-translate/core';\r\nimport { ActivitySessionSelectionComponent, SafeHtmlPipe } from './activity-session-selection/activity-session-selection.component';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\n// import { OwlDateTimeModule, OwlNativeDateTimeModule } from 'ng-pick-datetime';\r\nimport { ActivitiesLiteOrderSummaryComponent, FilterTaxTypePipe, GetAddonNamePipe, GetTaxDescriptionPipe, GroupItemByType } from './activities-lite-order-summary/activities-lite-order-summary.component';\r\nimport { ActivityCartComponent } from './activity-cart/activity-cart.component';\r\nimport { ActivityBookingConfirmationComponent } from './activity-booking-confirmation/activity-booking-confirmation.component';\r\nimport { ActivitiesLiteCheckOutComponent } from './activities-lite-check-out/activities-lite-check-out.component';\r\nimport { QRCodeModule } from 'angularx-qrcode';\r\nimport { ActivitiesLiteGuestDataComponent, GetCategoryDataPipe, viewMorePipe } from './activities-lite-guest-data/activities-lite-guest-data.component';\r\nimport { ActivitiesLayoutComponent } from './activities-layout/activities-layout.component';\r\nimport { LayoutFunctions } from './activities-layout/layout-functions';\r\nimport { DurationValueDirective } from '../shared/directives/duration-value.directive';\r\nimport { ActivitiesLiteSecondaryGuestDataComponent } from './activities-lite-secondary-guest-data/activities-lite-secondary-guest-data.component';\r\nimport { GroupByPipe, SizeMappingComponent } from './size-mapping/size-mapping.component';\r\nimport { ActivitesGuestPriceSummaryComponent } from './activites-guest-price-summary/activites-guest-price-summary.component';\r\n\r\n@NgModule({\r\n declarations: [\r\n ActivitiesLiteComponent,\r\n ActivitiesListComponent,\r\n ActivitySessionSelectionComponent,\r\n ActivitiesLayoutComponent,\r\n ActivitiesLiteOrderSummaryComponent,\r\n ActivityCartComponent,\r\n ActivityBookingConfirmationComponent,\r\n ActivitiesLiteCheckOutComponent,\r\n checkAcceptReservationsPipe,\r\n ActivitiesLiteGuestDataComponent,\r\n viewMorePipe,\r\n GetCategoryDataPipe,\r\n GetAddonNamePipe,\r\n DurationValueDirective,\r\n ActivitiesLiteSecondaryGuestDataComponent,\r\n GetTaxDescriptionPipe,\r\n FilterTaxTypePipe,\r\n GroupItemByType,\r\n SafeHtmlPipe,\r\n SizeMappingComponent,\r\n GroupByPipe,\r\n ActivitesGuestPriceSummaryComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n TranslateModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MaterialModule,\r\n SharedModule,\r\n // OwlDateTimeModule,\r\n ActivitiesLiteRoutingModule,\r\n // OwlNativeDateTimeModule,\r\n QRCodeModule\r\n ],\r\n providers: [\r\n LayoutFunctions,\r\n GetCategoryDataPipe\r\n ]\r\n})\r\nexport class ActivitiesLiteModule { }\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject, Observable, Subject, Subscription } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { urlConfig } from '../shared/constants/url-config';\r\nimport { FloorPlanImagesDto } from '../shared/dynamicform/models/common-models';\r\nimport { CustomGuestFieldsModel, FinancialEffectForUpdatedReservationDTO, RegisterReservationAttemptResponseDTO, ReservationAttemptBasicInfo, ReservationDTO, ReservationInfoDTO } from '../shared/Models/PartyModels';\r\nimport { SessionBookingDTO } from '../shared/Models/SessionBookingDTO';\r\nimport { operationType, WidgetSettingsDTO } from '../shared/Models/WidgetSettingsModels';\r\nimport { HttpService } from '../shared/services/http.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ActivitiesService {\r\n public restaurantWidgetName: string;\r\n public restaurantWidgetId: number;\r\n public reservationToken: any;\r\n public operation = operationType.create;\r\n public language: any;\r\n public countriesList: any[];\r\n public LocationList: any[];\r\n public InstructorList: any[];\r\n public customGuestFields: any;\r\n public SessionBookingObj: SessionBookingDTO;\r\n public SaveBookingObj: any = {};\r\n public SelectedActivity: any;\r\n public selectedGuest: any;\r\n public ispaymentInvolvedInfo: any;\r\n public reservationAttemptInfo: any;\r\n public message: string;\r\n public reservationConfirmationText: string;\r\n public additionalGuestPage: any;\r\n slotLockId: number;\r\n public restaurantImages: BehaviorSubject = new BehaviorSubject(null);\r\n restaurantWidgetSettings$ = new BehaviorSubject(null);\r\n allClassActivitiesAvailable$ = new BehaviorSubject(null);\r\n editPartyData$ = new BehaviorSubject(null);\r\n createActivityResponse$ = new BehaviorSubject(null);\r\n RatePlanList$ = new BehaviorSubject(null);\r\n formValid$: Subject = new Subject();\r\n TabChange$: Subject = new Subject();\r\n bookingType$: Subject = new Subject();\r\n dataRetentionPolicy$: Subject = new Subject();\r\n globaactivityServiceeatingAreaId: number;\r\n subscriptions: Subscription = new Subscription();\r\n partySize: number;\r\n PaymentData$: Subject = new Subject();\r\n FormChanged: Subject = new Subject();\r\n constructor(private httpService: HttpService) { }\r\n\r\n getRestaurantImages(restaurantId) {\r\n this.httpService.get(urlConfig.getImages + restaurantId).subscribe((images) => {\r\n const allAvailableImages = images.Payload as FloorPlanImagesDto;\r\n this.restaurantImages.next(allAvailableImages);\r\n });\r\n }\r\n\r\n getWidgetSettingsByRestaurantName(restaurantName: string) {\r\n return this.httpService.get(`${urlConfig.getWidgetSettings}?restaurantName=${restaurantName}`).pipe(\r\n map((data: any) => data.Payload as WidgetSettingsDTO));\r\n }\r\n\r\n lockSessions(restaurantId, reqObj) {\r\n return this.httpService.post(`${urlConfig.lockSessionsURL}?restaurantId=${restaurantId}`, reqObj)\r\n }\r\n\r\n getWidgetSettingsByRestaurantId(restaurantId: Number) {\r\n return this.httpService.get(`${urlConfig.getWidgetSettings}?restaurantId=${restaurantId}`).pipe(\r\n map((data: any) => data.Payload as WidgetSettingsDTO));\r\n }\r\n\r\n GetCustomFields(restaurantId: Number) {\r\n return this.httpService.get(`${urlConfig.getCustomGuestFields}?restaurantId=${restaurantId}`).pipe(map((data: any) => data.Payload as CustomGuestFieldsModel));\r\n }\r\n\r\n getByToken(token: string) {\r\n return this.httpService.get(`${urlConfig.getByToken}?token=${token}`).pipe(map((data: any) => data.Payload as ReservationDTO));\r\n }\r\n GetCountries() {\r\n return this.httpService.get(`${urlConfig.getCountries}`).pipe(map((data: any) => data.Payload));\r\n }\r\n\r\n GetClassSlots(req): Observable {\r\n return this.httpService.post(`${urlConfig.GetSlotsForActivityURL}?restaurantId=${req.PropertyId}&options=0`, req);\r\n }\r\n\r\n GetSessionRatePlanCalculated(RestaurantId, request) {\r\n return this.httpService.post(`${urlConfig.GetRatePlanCalculatedURL}?restaurantId=${RestaurantId}&options=0`, request)\r\n }\r\n\r\n GetPreliminaryReservationInformation(SpecialMealId) {\r\n return this.httpService.post(`${urlConfig.GetPreliminaryActivityInformationURL}?restaurantId=${this.restaurantWidgetId}&specialMealId=${SpecialMealId}`, '').pipe(map((data: any) => data.Payload as ReservationInfoDTO));\r\n\r\n }\r\n GetRegisterReservationAttempt(reservationAttemptId: Number) {\r\n return this.httpService.get(`${urlConfig.getReservationAttemptState}?reservationAttemptId=${reservationAttemptId}`).pipe(map((data: any) => data.Payload as ReservationAttemptBasicInfo));\r\n }\r\n\r\n UpdateReservationAttempt(PaymentCallbackRequest) {\r\n return this.httpService.post(urlConfig.updateReservationAttempt, PaymentCallbackRequest)\r\n }\r\n\r\n\r\n RegisterReservationAttempt(RegisterReservationAttemptRequestDTO) {\r\n return this.httpService.post(urlConfig.registerBookActivityAttempt + '?restaurantId=' + this.restaurantWidgetId, RegisterReservationAttemptRequestDTO).pipe(map((data: any) => data.Payload as RegisterReservationAttemptResponseDTO))\r\n }\r\n\r\n\r\n createSessionBooking(request) {\r\n request.PageMethod = request.Contact.PreferredPageMethod;\r\n return this.httpService.post(`${urlConfig.createSessionBookingURL}?restaurantId=${this.restaurantWidgetId}`,\r\n request).pipe(map((data: any) => data.Payload));\r\n }\r\n\r\n updateSessionBooking(request) {\r\n request.PageMethod = request.Contact.PreferredPageMethod;\r\n return this.httpService.post(`${urlConfig.updateSessionBookingURL}?restaurantId=${this.restaurantWidgetId}`,\r\n request).pipe(map((data: any) => data.Payload));\r\n }\r\n GetFilterValues(req): Observable {\r\n // return;\r\n return this.httpService.post(`${urlConfig.getGetFilteredLessonsActivityURL}?restaurantId=${this.restaurantWidgetId}`, req);\r\n }\r\n\r\n GetFinancialEffectCalculation(reservationDTO) {\r\n return this.httpService.post(urlConfig.getFinancialEffectForUpdatedActivityDTO + '?restaurantId=' + this.restaurantWidgetId, reservationDTO).pipe(map((data: any) => data.Payload as FinancialEffectForUpdatedReservationDTO));\r\n }\r\n\r\n CancelBooking(restaurantId:Number,partyId:Number,language:Number){\r\n return this.httpService.post(`${urlConfig.cancelSessionBooking}?restaurantId=${restaurantId}&partyId=${partyId}&cancelAllOrRemainingSessions=true&language=${language}`);\r\n }\r\n\r\n getCancellationCharge(restaurantId:Number,partyId: number, cancelAllOrRemainingSessions: boolean, bookedSessionId: number = null) {\r\n return this.httpService.get(\r\n `${urlConfig.GetCancellationChargeURL}?restaurantId=${restaurantId}&partyId=${partyId}&cancelAllOrRemainingSessions=${cancelAllOrRemainingSessions}&bookedSessionId=${bookedSessionId}`);\r\n }\r\n\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { environment } from 'src/environments/environment';\r\nimport { setURLConfig } from './shared/constants/url-config';\r\nimport { Language, LanguageCode, LanguageFileName } from 'src/app/shared/Models/WidgetSettingsModels';\r\nimport { LayoutService } from './layout/layout.service';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { GuestService } from './shared/services/guest.service';\r\nimport { LocalizeService } from './shared/services/localize.service';\r\nimport { DEFAULT_LANGUAGE_CODE } from './shared/constants/commonenums';\r\n\r\n\r\n@Injectable()\r\nexport class AppInitializer {\r\n\r\n configSettings: any;\r\n\r\n constructor(\r\n private httpClient: HttpClient,\r\n public translateService: TranslateService,\r\n public ls: LayoutService,\r\n private route: ActivatedRoute,\r\n private gs: GuestService,\r\n public localizeService: LocalizeService) { }\r\n\r\n public appConfigSettings() {\r\n return this.configSettings;\r\n }\r\n\r\n\r\n initializeApp(): Promise {\r\n const isVersion2 = window.location.pathname;\r\n if (isVersion2.length && isVersion2.includes('/v2/')) {\r\n this.gs.isVersion2 = true;\r\n } else {\r\n this.gs.isVersion2 = false;\r\n }\r\n\r\n const configGet = new Promise((resolve, reject) => {\r\n this.httpClient.get('assets/config/' + environment.configLocation).subscribe((response: any) => {\r\n this.configSettings = response;\r\n environment.BaseUrl = this.configSettings.BaseUrl + '/api/widget';\r\n environment.authorizeIframeResponseOrigin = this.configSettings.authorizeIframeResponseOrigin;\r\n environment.rGuestPayIframeResponsOrigin = this.configSettings.rGuestPayIframeResponsOrigin;\r\n environment.redirectToAdminPortal = this.configSettings.redirectToAdminPortal;\r\n setURLConfig();\r\n this.setMerchantCode();\r\n let feedbackURLSegements = window.location.pathname.split('/feedback/');\r\n if (this.gs.isVersion2) {\r\n const url = new URL(window.location.href);\r\n const language = url.searchParams.get('language');\r\n this.localizeService.setLanguage(language ? language : Language[Number(Language.English)], 'universal', this.gs.restaurantMerchantCode)\r\n } else if (feedbackURLSegements?.length === 2) {\r\n const propertyNameSegment = window.location.pathname.split(\"/feedback/\")[1].split(\"/\")[0];\r\n const url = new URL(window.location.href);\r\n const language = url.searchParams.get('language');\r\n this.localizeService.setLanguage(language ? language : Language[Number(Language.English)], 'commentcard', `commentcard/${propertyNameSegment}`)\r\n }\r\n this.httpClient.get(`assets/customerThemes/config/config_${this.gs.restaurantMerchantCode}.json`).subscribe((response: any) => {\r\n this.configSettings.enableDining = response.enableDining;\r\n this.configSettings.enableActivities = response.enableActivities;\r\n resolve();\r\n }, (err) => {\r\n this.configSettings.enableDining = true;\r\n this.configSettings.enableActivities = true;\r\n resolve();\r\n });\r\n\r\n });\r\n });\r\n\r\n return Promise.all([configGet]);\r\n }\r\n\r\n setMerchantCode() {\r\n if (this.gs.isVersion2) {\r\n\r\n this.gs.restaurantMerchantCode = this.getMerchantCode();\r\n sessionStorage.setItem('restaurantMerchantCode', this.gs.restaurantMerchantCode);\r\n this.processThemeService(); // to set client specific theme from external link\r\n }\r\n }\r\n\r\n\r\n getMerchantCode(): string {\r\n const browserUrl = window.location.href;\r\n let merchantCode = \"\";\r\n const pathList = browserUrl.split(\"/\");\r\n if (browserUrl.includes('/activities/list/')) {\r\n let index = pathList.findIndex(path => path == 'list');\r\n merchantCode = pathList[index + 1];\r\n } else {\r\n merchantCode = browserUrl.includes(\"confirmation\") ? pathList[pathList.length - 2] : pathList[pathList.length - 1];\r\n }\r\n [merchantCode] = merchantCode.split(\"?\");\r\n return merchantCode;\r\n }\r\n\r\n\r\n\r\n processThemeService() {\r\n if (this.configSettings.styleURL && this.gs.isVersion2) {\r\n this.httpClient\r\n .get(this.configSettings.styleURL + `/styles_${this.gs.restaurantMerchantCode}.css` + '?t=' + new Date().getTime(), { responseType: 'text' })\r\n .subscribe((val: any) => {\r\n this.injectStylesheet(val, 'appthemes');\r\n });\r\n }\r\n }\r\n\r\n injectStylesheet(css, id) {\r\n const head = document.head || document.getElementsByTagName('head')[0];\r\n const styleTag: any = document.createElement('style');\r\n styleTag.type = 'text/css';\r\n styleTag.id = id;\r\n styleTag.innerHTML = css;\r\n head.appendChild(styleTag);\r\n }\r\n\r\n public defaultLocale(): string {\r\n this.setLanguage();\r\n let localeValue = sessionStorage.getItem('languageCode');\r\n if (localeValue == LanguageCode.chinesesimplified) {\r\n return \"zh-cn\"\r\n }else if (localeValue == LanguageCode.chinesetraditional) {\r\n return \"zh-tw\";\r\n }\r\n return sessionStorage.getItem('languageCode') || DEFAULT_LANGUAGE_CODE;\r\n }\r\n\r\n setLanguage(){\r\n let url = new URL(window.location.href);\r\n\r\n const language = getLanguageFromRouteParam(url) || getLanguageFromQueryParam(url); \r\n\r\n if(language){\r\n sessionStorage.setItem('languageCode', LanguageCode[language]);\r\n }\r\n }\r\n\r\n \r\n}\r\n\r\n\r\nexport function getLanguageFromQueryParam(url){\r\n\r\n let params = new URLSearchParams(url.search);\r\n\r\n return params.get('language')\r\n}\r\n\r\nexport function getLanguageFromRouteParam(url){\r\n\r\n const segments = url.pathname.split('/').filter(Boolean);\r\n if (segments.length === 4 && segments[0].match('orders') && segments[1] && segments[2] && segments[3]){\r\n return segments[3].toLowerCase();\r\n }\r\n return null;\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject, interval, Subject, Subscription } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { componentName } from '../shared/constants/commonenums';\r\nimport { urlConfig } from '../shared/constants/url-config';\r\nimport { FloorPlanImagesDto } from '../shared/dynamicform/models/common-models';\r\nimport { CustomGuestFieldsModel, ReservationDTO } from '../shared/Models/PartyModels';\r\nimport { SlotLockResultDTO } from '../shared/Models/SlotLockModels';\r\nimport { DataRetentionPolicy, operationType, WidgetSettingsDTO } from '../shared/Models/WidgetSettingsModels';\r\nimport { HttpService } from '../shared/services/http.service';\r\n\r\n\r\n\r\nvar intervalID;\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LayoutService {\r\n curentComponent: any;\r\n //@Output() closeEvent = new EventEmitter();\r\n\r\n\r\n\r\n nextButton = new Subject();\r\n previousButton = new Subject();\r\n\r\n restaurantWidgetSettings$ = new BehaviorSubject(null);\r\n editPartyData$ = new BehaviorSubject(null);\r\n showTimer = false;\r\n timerSubscription: Subscription = new Subscription();\r\n minutes: Number;\r\n seconds: Number;\r\n totalTime: number;\r\n lockResult: SlotLockResultDTO;\r\n customGuestFields: CustomGuestFieldsModel;\r\n showMessage: boolean;\r\n message: string;\r\n language: Number;\r\n editPartyData: any;\r\n reservationToken: string;\r\n specialMealIdFromURL : number;\r\n operation: operationType = operationType.create;\r\n \r\n dataRetentionPolicy$ = new BehaviorSubject(null);\r\n;\r\n countriesList: any;\r\n globalSeatingAreaId: number;\r\n restaurantWidgetName: string;\r\n fromclient = false;\r\n byPassValidation = false;\r\n public restaurantImages: BehaviorSubject = new BehaviorSubject(null);\r\n isMobileBrowser = false;\r\n refundData: any;\r\n OperationCurrency:string;\r\n isCommunalTableSelected: boolean;\r\n constructor(private httpService: HttpService) {\r\n this.findUserAgent();\r\n }\r\n\r\n // getSpecialMeal() {\r\n // this.httpService.get(urlConfig.specialMealsUrl + 'Blue-Beach-Cabanas-xxx').subscribe(response =>\r\n // {\r\n // return response.Payload;\r\n // }\r\n // );\r\n // }\r\n findUserAgent() {\r\n const objAgent = navigator.userAgent;\r\n if (objAgent.indexOf(\"Mobile\") !== -1) {\r\n this.isMobileBrowser = true;\r\n }\r\n }\r\n\r\n getRestaurantImages(restaurantId) {\r\n this.httpService.get(urlConfig.getImages + restaurantId).subscribe((images) => {\r\n const allAvailableImages = images.Payload as FloorPlanImagesDto;\r\n this.restaurantImages.next(allAvailableImages);\r\n });\r\n }\r\n\r\n getWidgetSettingsByRestaurantName(restaurantName: string, languageId: number = 1) {\r\n return this.httpService.get(`${urlConfig.getWidgetSettings}?restaurantName=${restaurantName}&languageId=${sessionStorage.getItem('languageId')}`).pipe(\r\n map((data: any) => data.Payload as WidgetSettingsDTO));\r\n }\r\n\r\n getWidgetSettingsByRestaurantId(restaurantId: Number) {\r\n return this.httpService.get(`${urlConfig.getWidgetSettings}?restaurantId=${restaurantId}`).pipe(\r\n map((data: any) => data.Payload as WidgetSettingsDTO));\r\n }\r\n\r\n GetCustomFields(restaurantId: Number) {\r\n return this.httpService.get(`${urlConfig.getCustomGuestFields}?restaurantId=${restaurantId}`).pipe(map((data: any) => data.Payload as CustomGuestFieldsModel));\r\n }\r\n\r\n getByToken(token: string) {\r\n return this.httpService.get(`${urlConfig.getByToken}?token=${token}`).pipe(map((data: any) => data.Payload as ReservationDTO));\r\n }\r\n\r\n getBannerImage(restaurantId: Number) {\r\n return this.httpService.get(`${urlConfig.bannerImageUrl}?Id=${restaurantId}`);\r\n }\r\n\r\n getBackgroundImage(restaurantId: Number) {\r\n return this.httpService.get(`${urlConfig.backgroundImageUrl}?restaurantId=${restaurantId}`);\r\n }\r\n\r\n GetRestaurantPolicy(restaurantId: Number) {\r\n return this.httpService.get(`${urlConfig.restaurantPolicy}?restaurantId=${restaurantId}`).pipe(map((data: any) => data.Payload as DataRetentionPolicy));\r\n }\r\n\r\n\r\n GetCountries() {\r\n return this.httpService.get(`${urlConfig.getCountries}`).pipe(map((data: any) => data.Payload));\r\n }\r\n\r\n\r\n\r\n runTimer(timerValue) {\r\n this.totalTime = timerValue;\r\n this.minutes = Math.floor(this.totalTime / 60);\r\n this.seconds = Number(this.totalTime % 60);\r\n this.timerSubscription = interval(1000 * 1).subscribe(() => {\r\n this.totalTime = this.totalTime - 1;\r\n this.minutes = Math.floor(this.totalTime / 60);\r\n this.seconds = Number(this.totalTime % 60);\r\n if (this.totalTime == 0) {\r\n this.UnSubscribeTimerAndRedirectToHome();\r\n }\r\n })\r\n }\r\n\r\n UnSubscribeTimerAndRedirectToHome() {\r\n this.offTimer();\r\n this.editPartyData = '';\r\n this.nextButton.next(componentName.reservationDetails);\r\n //Discard all form Details;\r\n }\r\n\r\n offTimer() {\r\n this.showTimer = false;\r\n if (this.timerSubscription) {\r\n this.timerSubscription.unsubscribe();\r\n }\r\n }\r\n\r\n getDateFormats(){\r\n let myFormats = {\r\n display: {\r\n dateInput: this.restaurantWidgetSettings$.value.DateFormat, \r\n monthYearLabel: this.restaurantWidgetSettings$.value.DateFormat,\r\n dateA11yLabel: this.restaurantWidgetSettings$.value.DateFormat,\r\n monthYearA11yLabel: this.restaurantWidgetSettings$.value.DateFormat,\r\n }\r\n };\r\n return myFormats;\r\n }\r\n}\r\n\r\n\r\n","import { Injectable, OnDestroy } from '@angular/core';\r\nimport { FormBuilder, FormGroup } from '@angular/forms';\r\nimport { map } from 'rxjs/operators';\r\nimport { urlConfig } from '../shared/constants/url-config';\r\nimport { FieldConfig } from '../shared/dynamicform/models/common-models';\r\nimport { AuthorizeIFrameInfoDTO, ContactDTO, FinancialEffectForUpdatedReservationDTO, NewPartyDetailsDTO, RegisterReservationAttemptResponseDTO, ReservationAttemptBasicInfo, ReservationInfoDTO, SecondaryContactDTO } from '../shared/Models/PartyModels';\r\nimport { PayloadOperationResultDTO } from '../shared/Models/ResultModels';\r\nimport { SlotLockResultDTO } from '../shared/Models/SlotLockModels';\r\nimport { WidgetSettingsDTO } from '../shared/Models/WidgetSettingsModels';\r\nimport { HttpService } from '../shared/services/http.service';\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ReservationService {\r\n restaurantName:string;\r\n reservationFormGroup:FormGroup;\r\n reservationConfimationDetails: NewPartyDetailsDTO;\r\n isDeferredPaymentMode:boolean=false;\r\n reservationAttemptInfo:RegisterReservationAttemptResponseDTO;\r\n additionalGuestPage:boolean = false;\r\n ispaymentInvolvedInfo:ReservationInfoDTO;\r\n additionalGuestRequired:number=0;\r\n selectedCountryId:number;\r\n showPaymentSummary=false;\r\n reservationConfirmationText='';\r\n primaryContact:ContactDTO;\r\n secondaryContactList:SecondaryContactDTO[];\r\n lockCallRequired = false;\r\n constructor(private httpService: HttpService, private fb:FormBuilder) {\r\n this.reservationFormGroup = this.fb.group({\r\n })\r\n\r\n }\r\n\r\n // getSpecialMeal(restaurantName:string) {\r\n // return this.httpService.get(urlConfig.getWidgetSettings + 'Blue-Beach-Cabanas-xxx').pipe(\r\n // map((data: any) => data.Payload as WidgetSettingsDTO));\r\n // }\r\n\r\n getLayoutData(restaurantId:Number,partySize:Number,isCommunalTable:boolean,timeSlot,seatingAreaId=null,seatingTypeId=null,reservationIdToIgnore=null , eventId:number = null) {\r\n seatingTypeId = null;\r\n return this.httpService.get(`${urlConfig.layoutUrl}?restaurantId=${restaurantId}&timeSlot=${timeSlot}&partySize=${partySize}&showCommunalTable=${isCommunalTable}&seatingareaid=${seatingAreaId}&reservationIdToIgnore=${reservationIdToIgnore}&seatingtypeid=${seatingTypeId}&eventId=${eventId}`);\r\n }\r\n\r\n \r\n getOpenBookingLayoutData(reqObj: any) {\r\n return this.httpService.post(`${urlConfig.openBookingLayoutUrl}`, reqObj);\r\n }\r\n\r\n getLayoutBackgroundImage(restaurantId:Number){\r\n return this.httpService.get(urlConfig.layoutImageUrl +restaurantId)\r\n }\r\n\r\n getOpenBookingAddOns(reqObj: any, specialMealId: number) {\r\n return this.httpService.post(`${urlConfig.openBookingAddOnsUrl}?specialMealId=${specialMealId}`, reqObj);\r\n }\r\n\r\n\r\n GetRestaurantDateAvailability(restaurantId:Number,partySize:Number,isCommunalTable:boolean,fromWidget:boolean,date,seatingAreaId=null,reservationIdToIgnore=null,specialMealId=null,seatingTypeId=null){\r\n\r\n // return this.httpService.get(urlConfig.dateAvailabilityUrl+\r\n // '?restaurantId='+restaurantId+\r\n // &date=${date}\r\n // &partySize=${partySize}\r\n // &isCommunalTable=${isCommunalTable}\r\n // &fromWidget=${fromWidget}\r\n // &seatingAreaId=${seatingAreaId}\r\n // &reservationIdToIgnore=${reservationIdToIgnore}\r\n // &specialMealId=${specialMealId}\r\n // &seatingTypeId=${seatingTypeId}`);\r\n\r\n return this.httpService.get(`${urlConfig.dateAvailabilityUrl}?restaurantId=${restaurantId}&date=${date}&partySize=${partySize}&isCommunalTable=${isCommunalTable}&fromWidget=${fromWidget}&seatingAreaId=${seatingAreaId}&reservationIdToIgnore=${reservationIdToIgnore}&specialMealId=${specialMealId}&seatingTypeId=${seatingTypeId}`).pipe(map((data:any)=> data.Payload));\r\n }\r\n\r\n GetLockSlot(restaurantId,lockSlotDto){\r\n return this.httpService.post(urlConfig.acquireLock +'?restaurantId='+restaurantId,lockSlotDto).pipe(\r\n map((data: any) => ((data as PayloadOperationResultDTO).Payload as SlotLockResultDTO)\r\n //data.Payload as SlotLockResultDTO;\r\n ));\r\n }\r\n\r\n GetRegisterReservationAttempt(reservationAttemptId:Number){\r\n return this.httpService.get(`${urlConfig.getReservationAttemptState}?reservationAttemptId=${reservationAttemptId}`).pipe(map((data:any) =>data.Payload as ReservationAttemptBasicInfo));\r\n }\r\n\r\n GetRestaurantAvailableDates(restaurantId:Number,partySize:Number,date,seatingAreaId=null,reservationIdToIgnore=null,specialMealId=null,seatingTypeId=null){\r\n seatingTypeId = seatingTypeId && seatingTypeId > 0 ? seatingTypeId : null;\r\n return this.httpService.get(`${urlConfig.availableDateUrl}?restaurantId=${restaurantId}&date=${date}&partySize=${partySize}&seatingAreaId=${seatingAreaId}&reservationIdToIgnore=${reservationIdToIgnore}&specialMealId=${specialMealId}&seatingTypeId=${seatingTypeId}`).pipe(map((data:any)=> data.Payload));\r\n }\r\n\r\n\r\n\r\n GetCustomFields(restaurantId:Number){\r\n return this.httpService.get(`${urlConfig.getCustomGuestFields}?restaurantId=${restaurantId}`);\r\n }\r\n\r\n\r\n ReleaseLockSlot(restaurantId:Number,lockId:Number){\r\n return this.httpService.post(`${urlConfig.releaseLock}?restaurantId=${restaurantId}&lockId=${lockId}`);\r\n }\r\n\r\n GetPreliminaryReservationInformation(restaurantId: Number, partySize: Number, date, specialMealId = null, tableId = null, seatingAreaId = null,seatingTypeId=null){\r\n seatingTypeId = null;\r\n return this.httpService.get(`${urlConfig.getPreliminaryReservationInformation}?restaurantId=${restaurantId}&localDateTime=${date}&partySize=${partySize}&specialMealId=${specialMealId}&tableId=${tableId}&seatingAreaId=${seatingAreaId}&seatingTypeId=${seatingTypeId}`).pipe(map((data:any)=> data.Payload as ReservationInfoDTO));\r\n }\r\n\r\n GetCoverTypePricing(restaurantId:Number,specialMealId:Number){\r\n return this.httpService.get(`${urlConfig.getCoverTypePricing}?restaurantId=${restaurantId}&specialMealId=${specialMealId}`);\r\n }\r\n\r\n CreateReservation(restaurantId:Number,reservationDTO, overlapBooking: boolean = false){\r\n return this.httpService.post(urlConfig.createReservation +'?restaurantId='+restaurantId + `&allowOverlapBookings=${overlapBooking}`,reservationDTO ).pipe(map((data:any)=> data.Payload as NewPartyDetailsDTO))\r\n }\r\n\r\n UpdateReservation(restaurantId:Number,reservationDTO, overlapBooking: boolean = false){\r\n return this.httpService.post(urlConfig.updateReservation +'?restaurantId='+restaurantId + `&allowOverlapBookings=${overlapBooking}`,reservationDTO).pipe(map((data:any)=> data.Payload as NewPartyDetailsDTO))\r\n }\r\n\r\n CancelReservation(restaurantId:Number,partyId:Number,language:Number){\r\n return this.httpService.post(`${urlConfig.cancelReservation}?restaurantId=${restaurantId}&partyId=${partyId}&language=${language}`);\r\n }\r\n\r\n RegisterReservationAttempt(restaurantId:Number,RegisterReservationAttemptRequestDTO){\r\n return this.httpService.post(urlConfig.registerReservationAttempt +'?restaurantId='+restaurantId,RegisterReservationAttemptRequestDTO).pipe(map((data:any)=> data.Payload as RegisterReservationAttemptResponseDTO))\r\n }\r\n\r\n UpdateReservationAttempt(PaymentCallbackRequest){\r\n return this.httpService.post(urlConfig.updateReservationAttempt,PaymentCallbackRequest)\r\n }\r\n\r\n GetFinancialEffectCalculation(restaurantId:Number,reservationDTO){\r\n return this.httpService.post(urlConfig.getFinancialEffectForUpdatedReservationDTO +'?restaurantId='+restaurantId,reservationDTO).pipe(map((data:any)=>data.Payload as FinancialEffectForUpdatedReservationDTO));\r\n }\r\n\r\n GetAuthWaiverForm(restaurantId:Number,formCode:string){\r\n return this.httpService.get(urlConfig.getAuthWaiverForm +'?restaurantId='+restaurantId + '&formCode=' + formCode).pipe(\r\n map((data:any) => data.Payload as AuthorizeIFrameInfoDTO)\r\n );\r\n }\r\n\r\n CreateSecondaryContacts(restaurantId:Number,partyId:Number,contactList){\r\n return this.httpService.post(urlConfig.createSecondaryContacts + '?restaurantId='+restaurantId+'&partyId='+partyId,contactList).pipe(\r\n map((data:any)=>data.Payload as Number)\r\n );\r\n }\r\n\r\n getBookingTypesDetails(restaurantId : Number , memberId: string , bookingGuestTypes : Number, activityId: number){\r\n return this.httpService.post(`${urlConfig.SearchByBookingType}?restaurantId=${restaurantId}&inputstring=${memberId}&bookingGuestTypes=${bookingGuestTypes}&activityId=${activityId}`).pipe(map((data:any)=>data.Payload ));\r\n }\r\n\r\n getLocationRateplanCalculated(restaurantId, request){\r\n return this.httpService.post(`${urlConfig.getRateplan}?restaurantId=${restaurantId}`, request).pipe(map(({Payload: data})=>{\r\n //Charge Split is for Single Guest and Single Slot with duration.\r\n let _rawRateSplit = data.RatePlan.Reservations[0].Sessions[0].GuestPrices[0];\r\n let _chargeSplit = {\r\n Items: _rawRateSplit.Items,\r\n ServiceCharge: _rawRateSplit.ServiceCharge,\r\n SubTotal: _rawRateSplit.SubTotal,\r\n Tax: _rawRateSplit.Tax,\r\n TaxOnServiceChargeAmount: _rawRateSplit.TaxOnServiceChargeAmount,\r\n Total: _rawRateSplit.Total,\r\n VAT: _rawRateSplit.VAT,\r\n VATOnServiceChargeAmount: _rawRateSplit.VATOnServiceChargeAmount\r\n }\r\n return _chargeSplit;\r\n } ));\r\n }\r\n}\r\n","import * as i0 from '@angular/core';\nimport { InjectionToken, Component, ViewEncapsulation, ChangeDetectionStrategy, Optional, Inject, Input, ContentChildren, Directive, NgModule } from '@angular/core';\nimport { setLines, MatLine, MatLineModule, MatCommonModule } from '@angular/material/core';\nimport { coerceNumberProperty } from '@angular/cdk/coercion';\nimport * as i1 from '@angular/cdk/bidi';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Class for determining, from a list of tiles, the (row, col) position of each of those tiles\n * in the grid. This is necessary (rather than just rendering the tiles in normal document flow)\n * because the tiles can have a rowspan.\n *\n * The positioning algorithm greedily places each tile as soon as it encounters a gap in the grid\n * large enough to accommodate it so that the tiles still render in the same order in which they\n * are given.\n *\n * The basis of the algorithm is the use of an array to track the already placed tiles. Each\n * element of the array corresponds to a column, and the value indicates how many cells in that\n * column are already occupied; zero indicates an empty cell. Moving \"down\" to the next row\n * decrements each value in the tracking array (indicating that the column is one cell closer to\n * being free).\n *\n * @docs-private\n */\nclass TileCoordinator {\n constructor() {\n /** Index at which the search for the next gap will start. */\n this.columnIndex = 0;\n /** The current row index. */\n this.rowIndex = 0;\n }\n /** Gets the total number of rows occupied by tiles */\n get rowCount() {\n return this.rowIndex + 1;\n }\n /**\n * Gets the total span of rows occupied by tiles.\n * Ex: A list with 1 row that contains a tile with rowspan 2 will have a total rowspan of 2.\n */\n get rowspan() {\n const lastRowMax = Math.max(...this.tracker);\n // if any of the tiles has a rowspan that pushes it beyond the total row count,\n // add the difference to the rowcount\n return lastRowMax > 1 ? this.rowCount + lastRowMax - 1 : this.rowCount;\n }\n /**\n * Updates the tile positions.\n * @param numColumns Amount of columns in the grid.\n * @param tiles Tiles to be positioned.\n */\n update(numColumns, tiles) {\n this.columnIndex = 0;\n this.rowIndex = 0;\n this.tracker = new Array(numColumns);\n this.tracker.fill(0, 0, this.tracker.length);\n this.positions = tiles.map(tile => this._trackTile(tile));\n }\n /** Calculates the row and col position of a tile. */\n _trackTile(tile) {\n // Find a gap large enough for this tile.\n const gapStartIndex = this._findMatchingGap(tile.colspan);\n // Place tile in the resulting gap.\n this._markTilePosition(gapStartIndex, tile);\n // The next time we look for a gap, the search will start at columnIndex, which should be\n // immediately after the tile that has just been placed.\n this.columnIndex = gapStartIndex + tile.colspan;\n return new TilePosition(this.rowIndex, gapStartIndex);\n }\n /** Finds the next available space large enough to fit the tile. */\n _findMatchingGap(tileCols) {\n if (tileCols > this.tracker.length && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error(`mat-grid-list: tile with colspan ${tileCols} is wider than ` +\n `grid with cols=\"${this.tracker.length}\".`);\n }\n // Start index is inclusive, end index is exclusive.\n let gapStartIndex = -1;\n let gapEndIndex = -1;\n // Look for a gap large enough to fit the given tile. Empty spaces are marked with a zero.\n do {\n // If we've reached the end of the row, go to the next row.\n if (this.columnIndex + tileCols > this.tracker.length) {\n this._nextRow();\n gapStartIndex = this.tracker.indexOf(0, this.columnIndex);\n gapEndIndex = this._findGapEndIndex(gapStartIndex);\n continue;\n }\n gapStartIndex = this.tracker.indexOf(0, this.columnIndex);\n // If there are no more empty spaces in this row at all, move on to the next row.\n if (gapStartIndex == -1) {\n this._nextRow();\n gapStartIndex = this.tracker.indexOf(0, this.columnIndex);\n gapEndIndex = this._findGapEndIndex(gapStartIndex);\n continue;\n }\n gapEndIndex = this._findGapEndIndex(gapStartIndex);\n // If a gap large enough isn't found, we want to start looking immediately after the current\n // gap on the next iteration.\n this.columnIndex = gapStartIndex + 1;\n // Continue iterating until we find a gap wide enough for this tile. Since gapEndIndex is\n // exclusive, gapEndIndex is 0 means we didn't find a gap and should continue.\n } while (gapEndIndex - gapStartIndex < tileCols || gapEndIndex == 0);\n // If we still didn't manage to find a gap, ensure that the index is\n // at least zero so the tile doesn't get pulled out of the grid.\n return Math.max(gapStartIndex, 0);\n }\n /** Move \"down\" to the next row. */\n _nextRow() {\n this.columnIndex = 0;\n this.rowIndex++;\n // Decrement all spaces by one to reflect moving down one row.\n for (let i = 0; i < this.tracker.length; i++) {\n this.tracker[i] = Math.max(0, this.tracker[i] - 1);\n }\n }\n /**\n * Finds the end index (exclusive) of a gap given the index from which to start looking.\n * The gap ends when a non-zero value is found.\n */\n _findGapEndIndex(gapStartIndex) {\n for (let i = gapStartIndex + 1; i < this.tracker.length; i++) {\n if (this.tracker[i] != 0) {\n return i;\n }\n }\n // The gap ends with the end of the row.\n return this.tracker.length;\n }\n /** Update the tile tracker to account for the given tile in the given space. */\n _markTilePosition(start, tile) {\n for (let i = 0; i < tile.colspan; i++) {\n this.tracker[start + i] = tile.rowspan;\n }\n }\n}\n/**\n * Simple data structure for tile position (row, col).\n * @docs-private\n */\nclass TilePosition {\n constructor(row, col) {\n this.row = row;\n this.col = col;\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Injection token used to provide a grid list to a tile and to avoid circular imports.\n * @docs-private\n */\nconst MAT_GRID_LIST = new InjectionToken('MAT_GRID_LIST');\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass MatGridTile {\n constructor(_element, _gridList) {\n this._element = _element;\n this._gridList = _gridList;\n this._rowspan = 1;\n this._colspan = 1;\n }\n /** Amount of rows that the grid tile takes up. */\n get rowspan() {\n return this._rowspan;\n }\n set rowspan(value) {\n this._rowspan = Math.round(coerceNumberProperty(value));\n }\n /** Amount of columns that the grid tile takes up. */\n get colspan() {\n return this._colspan;\n }\n set colspan(value) {\n this._colspan = Math.round(coerceNumberProperty(value));\n }\n /**\n * Sets the style of the grid-tile element. Needs to be set manually to avoid\n * \"Changed after checked\" errors that would occur with HostBinding.\n */\n _setStyle(property, value) {\n this._element.nativeElement.style[property] = value;\n }\n}\nMatGridTile.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatGridTile, deps: [{ token: i0.ElementRef }, { token: MAT_GRID_LIST, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nMatGridTile.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"13.2.0\", type: MatGridTile, selector: \"mat-grid-tile\", inputs: { rowspan: \"rowspan\", colspan: \"colspan\" }, host: { properties: { \"attr.rowspan\": \"rowspan\", \"attr.colspan\": \"colspan\" }, classAttribute: \"mat-grid-tile\" }, exportAs: [\"matGridTile\"], ngImport: i0, template: \"
\\n \\n
\\n\", styles: [\".mat-grid-list{display:block;position:relative}.mat-grid-tile{display:block;position:absolute;overflow:hidden}.mat-grid-tile .mat-grid-tile-header,.mat-grid-tile .mat-grid-tile-footer{display:flex;align-items:center;height:48px;color:#fff;background:rgba(0,0,0,.38);overflow:hidden;padding:0 16px;position:absolute;left:0;right:0}.mat-grid-tile .mat-grid-tile-header>*,.mat-grid-tile .mat-grid-tile-footer>*{margin:0;padding:0;font-weight:normal;font-size:inherit}.mat-grid-tile .mat-grid-tile-header.mat-2-line,.mat-grid-tile .mat-grid-tile-footer.mat-2-line{height:68px}.mat-grid-tile .mat-grid-list-text{display:flex;flex-direction:column;flex:auto;box-sizing:border-box;overflow:hidden}.mat-grid-tile .mat-grid-list-text>*{margin:0;padding:0;font-weight:normal;font-size:inherit}.mat-grid-tile .mat-grid-list-text:empty{display:none}.mat-grid-tile .mat-grid-tile-header{top:0}.mat-grid-tile .mat-grid-tile-footer{bottom:0}.mat-grid-tile .mat-grid-avatar{padding-right:16px}[dir=rtl] .mat-grid-tile .mat-grid-avatar{padding-right:0;padding-left:16px}.mat-grid-tile .mat-grid-avatar:empty{display:none}.mat-grid-tile-content{top:0;left:0;right:0;bottom:0;position:absolute;display:flex;align-items:center;justify-content:center;height:100%;padding:0;margin:0}\\n\"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatGridTile, decorators: [{\n type: Component,\n args: [{ selector: 'mat-grid-tile', exportAs: 'matGridTile', host: {\n 'class': 'mat-grid-tile',\n // Ensures that the \"rowspan\" and \"colspan\" input value is reflected in\n // the DOM. This is needed for the grid-tile harness.\n '[attr.rowspan]': 'rowspan',\n '[attr.colspan]': 'colspan',\n }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: \"
\\n \\n
\\n\", styles: [\".mat-grid-list{display:block;position:relative}.mat-grid-tile{display:block;position:absolute;overflow:hidden}.mat-grid-tile .mat-grid-tile-header,.mat-grid-tile .mat-grid-tile-footer{display:flex;align-items:center;height:48px;color:#fff;background:rgba(0,0,0,.38);overflow:hidden;padding:0 16px;position:absolute;left:0;right:0}.mat-grid-tile .mat-grid-tile-header>*,.mat-grid-tile .mat-grid-tile-footer>*{margin:0;padding:0;font-weight:normal;font-size:inherit}.mat-grid-tile .mat-grid-tile-header.mat-2-line,.mat-grid-tile .mat-grid-tile-footer.mat-2-line{height:68px}.mat-grid-tile .mat-grid-list-text{display:flex;flex-direction:column;flex:auto;box-sizing:border-box;overflow:hidden}.mat-grid-tile .mat-grid-list-text>*{margin:0;padding:0;font-weight:normal;font-size:inherit}.mat-grid-tile .mat-grid-list-text:empty{display:none}.mat-grid-tile .mat-grid-tile-header{top:0}.mat-grid-tile .mat-grid-tile-footer{bottom:0}.mat-grid-tile .mat-grid-avatar{padding-right:16px}[dir=rtl] .mat-grid-tile .mat-grid-avatar{padding-right:0;padding-left:16px}.mat-grid-tile .mat-grid-avatar:empty{display:none}.mat-grid-tile-content{top:0;left:0;right:0;bottom:0;position:absolute;display:flex;align-items:center;justify-content:center;height:100%;padding:0;margin:0}\\n\"] }]\n }], ctorParameters: function () {\n return [{ type: i0.ElementRef }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_GRID_LIST]\n }] }];\n }, propDecorators: { rowspan: [{\n type: Input\n }], colspan: [{\n type: Input\n }] } });\nclass MatGridTileText {\n constructor(_element) {\n this._element = _element;\n }\n ngAfterContentInit() {\n setLines(this._lines, this._element);\n }\n}\nMatGridTileText.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatGridTileText, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });\nMatGridTileText.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"13.2.0\", type: MatGridTileText, selector: \"mat-grid-tile-header, mat-grid-tile-footer\", queries: [{ propertyName: \"_lines\", predicate: MatLine, descendants: true }], ngImport: i0, template: \"\\n
\\n\\n\", changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatGridTileText, decorators: [{\n type: Component,\n args: [{ selector: 'mat-grid-tile-header, mat-grid-tile-footer', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: \"\\n
\\n\\n\" }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { _lines: [{\n type: ContentChildren,\n args: [MatLine, { descendants: true }]\n }] } });\n/**\n * Directive whose purpose is to add the mat- CSS styling to this selector.\n * @docs-private\n */\nclass MatGridAvatarCssMatStyler {\n}\nMatGridAvatarCssMatStyler.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatGridAvatarCssMatStyler, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nMatGridAvatarCssMatStyler.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.2.0\", type: MatGridAvatarCssMatStyler, selector: \"[mat-grid-avatar], [matGridAvatar]\", host: { classAttribute: \"mat-grid-avatar\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatGridAvatarCssMatStyler, decorators: [{\n type: Directive,\n args: [{\n selector: '[mat-grid-avatar], [matGridAvatar]',\n host: { 'class': 'mat-grid-avatar' },\n }]\n }] });\n/**\n * Directive whose purpose is to add the mat- CSS styling to this selector.\n * @docs-private\n */\nclass MatGridTileHeaderCssMatStyler {\n}\nMatGridTileHeaderCssMatStyler.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatGridTileHeaderCssMatStyler, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nMatGridTileHeaderCssMatStyler.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.2.0\", type: MatGridTileHeaderCssMatStyler, selector: \"mat-grid-tile-header\", host: { classAttribute: \"mat-grid-tile-header\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatGridTileHeaderCssMatStyler, decorators: [{\n type: Directive,\n args: [{\n selector: 'mat-grid-tile-header',\n host: { 'class': 'mat-grid-tile-header' },\n }]\n }] });\n/**\n * Directive whose purpose is to add the mat- CSS styling to this selector.\n * @docs-private\n */\nclass MatGridTileFooterCssMatStyler {\n}\nMatGridTileFooterCssMatStyler.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatGridTileFooterCssMatStyler, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nMatGridTileFooterCssMatStyler.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.2.0\", type: MatGridTileFooterCssMatStyler, selector: \"mat-grid-tile-footer\", host: { classAttribute: \"mat-grid-tile-footer\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatGridTileFooterCssMatStyler, decorators: [{\n type: Directive,\n args: [{\n selector: 'mat-grid-tile-footer',\n host: { 'class': 'mat-grid-tile-footer' },\n }]\n }] });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * RegExp that can be used to check whether a value will\n * be allowed inside a CSS `calc()` expression.\n */\nconst cssCalcAllowedValue = /^-?\\d+((\\.\\d+)?[A-Za-z%$]?)+$/;\n/**\n * Sets the style properties for an individual tile, given the position calculated by the\n * Tile Coordinator.\n * @docs-private\n */\nclass TileStyler {\n constructor() {\n this._rows = 0;\n this._rowspan = 0;\n }\n /**\n * Adds grid-list layout info once it is available. Cannot be processed in the constructor\n * because these properties haven't been calculated by that point.\n *\n * @param gutterSize Size of the grid's gutter.\n * @param tracker Instance of the TileCoordinator.\n * @param cols Amount of columns in the grid.\n * @param direction Layout direction of the grid.\n */\n init(gutterSize, tracker, cols, direction) {\n this._gutterSize = normalizeUnits(gutterSize);\n this._rows = tracker.rowCount;\n this._rowspan = tracker.rowspan;\n this._cols = cols;\n this._direction = direction;\n }\n /**\n * Computes the amount of space a single 1x1 tile would take up (width or height).\n * Used as a basis for other calculations.\n * @param sizePercent Percent of the total grid-list space that one 1x1 tile would take up.\n * @param gutterFraction Fraction of the gutter size taken up by one 1x1 tile.\n * @return The size of a 1x1 tile as an expression that can be evaluated via CSS calc().\n */\n getBaseTileSize(sizePercent, gutterFraction) {\n // Take the base size percent (as would be if evenly dividing the size between cells),\n // and then subtracting the size of one gutter. However, since there are no gutters on the\n // edges, each tile only uses a fraction (gutterShare = numGutters / numCells) of the gutter\n // size. (Imagine having one gutter per tile, and then breaking up the extra gutter on the\n // edge evenly among the cells).\n return `(${sizePercent}% - (${this._gutterSize} * ${gutterFraction}))`;\n }\n /**\n * Gets The horizontal or vertical position of a tile, e.g., the 'top' or 'left' property value.\n * @param offset Number of tiles that have already been rendered in the row/column.\n * @param baseSize Base size of a 1x1 tile (as computed in getBaseTileSize).\n * @return Position of the tile as a CSS calc() expression.\n */\n getTilePosition(baseSize, offset) {\n // The position comes the size of a 1x1 tile plus gutter for each previous tile in the\n // row/column (offset).\n return offset === 0 ? '0' : calc(`(${baseSize} + ${this._gutterSize}) * ${offset}`);\n }\n /**\n * Gets the actual size of a tile, e.g., width or height, taking rowspan or colspan into account.\n * @param baseSize Base size of a 1x1 tile (as computed in getBaseTileSize).\n * @param span The tile's rowspan or colspan.\n * @return Size of the tile as a CSS calc() expression.\n */\n getTileSize(baseSize, span) {\n return `(${baseSize} * ${span}) + (${span - 1} * ${this._gutterSize})`;\n }\n /**\n * Sets the style properties to be applied to a tile for the given row and column index.\n * @param tile Tile to which to apply the styling.\n * @param rowIndex Index of the tile's row.\n * @param colIndex Index of the tile's column.\n */\n setStyle(tile, rowIndex, colIndex) {\n // Percent of the available horizontal space that one column takes up.\n let percentWidthPerTile = 100 / this._cols;\n // Fraction of the vertical gutter size that each column takes up.\n // For example, if there are 5 columns, each column uses 4/5 = 0.8 times the gutter width.\n let gutterWidthFractionPerTile = (this._cols - 1) / this._cols;\n this.setColStyles(tile, colIndex, percentWidthPerTile, gutterWidthFractionPerTile);\n this.setRowStyles(tile, rowIndex, percentWidthPerTile, gutterWidthFractionPerTile);\n }\n /** Sets the horizontal placement of the tile in the list. */\n setColStyles(tile, colIndex, percentWidth, gutterWidth) {\n // Base horizontal size of a column.\n let baseTileWidth = this.getBaseTileSize(percentWidth, gutterWidth);\n // The width and horizontal position of each tile is always calculated the same way, but the\n // height and vertical position depends on the rowMode.\n let side = this._direction === 'rtl' ? 'right' : 'left';\n tile._setStyle(side, this.getTilePosition(baseTileWidth, colIndex));\n tile._setStyle('width', calc(this.getTileSize(baseTileWidth, tile.colspan)));\n }\n /**\n * Calculates the total size taken up by gutters across one axis of a list.\n */\n getGutterSpan() {\n return `${this._gutterSize} * (${this._rowspan} - 1)`;\n }\n /**\n * Calculates the total size taken up by tiles across one axis of a list.\n * @param tileHeight Height of the tile.\n */\n getTileSpan(tileHeight) {\n return `${this._rowspan} * ${this.getTileSize(tileHeight, 1)}`;\n }\n /**\n * Calculates the computed height and returns the correct style property to set.\n * This method can be implemented by each type of TileStyler.\n * @docs-private\n */\n getComputedHeight() {\n return null;\n }\n}\n/**\n * This type of styler is instantiated when the user passes in a fixed row height.\n * Example ``\n * @docs-private\n */\nclass FixedTileStyler extends TileStyler {\n constructor(fixedRowHeight) {\n super();\n this.fixedRowHeight = fixedRowHeight;\n }\n init(gutterSize, tracker, cols, direction) {\n super.init(gutterSize, tracker, cols, direction);\n this.fixedRowHeight = normalizeUnits(this.fixedRowHeight);\n if (!cssCalcAllowedValue.test(this.fixedRowHeight) &&\n (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error(`Invalid value \"${this.fixedRowHeight}\" set as rowHeight.`);\n }\n }\n setRowStyles(tile, rowIndex) {\n tile._setStyle('top', this.getTilePosition(this.fixedRowHeight, rowIndex));\n tile._setStyle('height', calc(this.getTileSize(this.fixedRowHeight, tile.rowspan)));\n }\n getComputedHeight() {\n return ['height', calc(`${this.getTileSpan(this.fixedRowHeight)} + ${this.getGutterSpan()}`)];\n }\n reset(list) {\n list._setListStyle(['height', null]);\n if (list._tiles) {\n list._tiles.forEach(tile => {\n tile._setStyle('top', null);\n tile._setStyle('height', null);\n });\n }\n }\n}\n/**\n * This type of styler is instantiated when the user passes in a width:height ratio\n * for the row height. Example ``\n * @docs-private\n */\nclass RatioTileStyler extends TileStyler {\n constructor(value) {\n super();\n this._parseRatio(value);\n }\n setRowStyles(tile, rowIndex, percentWidth, gutterWidth) {\n let percentHeightPerTile = percentWidth / this.rowHeightRatio;\n this.baseTileHeight = this.getBaseTileSize(percentHeightPerTile, gutterWidth);\n // Use padding-top and margin-top to maintain the given aspect ratio, as\n // a percentage-based value for these properties is applied versus the *width* of the\n // containing block. See http://www.w3.org/TR/CSS2/box.html#margin-properties\n tile._setStyle('marginTop', this.getTilePosition(this.baseTileHeight, rowIndex));\n tile._setStyle('paddingTop', calc(this.getTileSize(this.baseTileHeight, tile.rowspan)));\n }\n getComputedHeight() {\n return [\n 'paddingBottom',\n calc(`${this.getTileSpan(this.baseTileHeight)} + ${this.getGutterSpan()}`),\n ];\n }\n reset(list) {\n list._setListStyle(['paddingBottom', null]);\n list._tiles.forEach(tile => {\n tile._setStyle('marginTop', null);\n tile._setStyle('paddingTop', null);\n });\n }\n _parseRatio(value) {\n const ratioParts = value.split(':');\n if (ratioParts.length !== 2 && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error(`mat-grid-list: invalid ratio given for row-height: \"${value}\"`);\n }\n this.rowHeightRatio = parseFloat(ratioParts[0]) / parseFloat(ratioParts[1]);\n }\n}\n/**\n * This type of styler is instantiated when the user selects a \"fit\" row height mode.\n * In other words, the row height will reflect the total height of the container divided\n * by the number of rows. Example ``\n *\n * @docs-private\n */\nclass FitTileStyler extends TileStyler {\n setRowStyles(tile, rowIndex) {\n // Percent of the available vertical space that one row takes up.\n let percentHeightPerTile = 100 / this._rowspan;\n // Fraction of the horizontal gutter size that each column takes up.\n let gutterHeightPerTile = (this._rows - 1) / this._rows;\n // Base vertical size of a column.\n let baseTileHeight = this.getBaseTileSize(percentHeightPerTile, gutterHeightPerTile);\n tile._setStyle('top', this.getTilePosition(baseTileHeight, rowIndex));\n tile._setStyle('height', calc(this.getTileSize(baseTileHeight, tile.rowspan)));\n }\n reset(list) {\n if (list._tiles) {\n list._tiles.forEach(tile => {\n tile._setStyle('top', null);\n tile._setStyle('height', null);\n });\n }\n }\n}\n/** Wraps a CSS string in a calc function */\nfunction calc(exp) {\n return `calc(${exp})`;\n}\n/** Appends pixels to a CSS string if no units are given. */\nfunction normalizeUnits(value) {\n return value.match(/([A-Za-z%]+)$/) ? value : `${value}px`;\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n// TODO(kara): Conditional (responsive) column count / row size.\n// TODO(kara): Re-layout on window resize / media change (debounced).\n// TODO(kara): gridTileHeader and gridTileFooter.\nconst MAT_FIT_MODE = 'fit';\nclass MatGridList {\n constructor(_element, _dir) {\n this._element = _element;\n this._dir = _dir;\n /** The amount of space between tiles. This will be something like '5px' or '2em'. */\n this._gutter = '1px';\n }\n /** Amount of columns in the grid list. */\n get cols() {\n return this._cols;\n }\n set cols(value) {\n this._cols = Math.max(1, Math.round(coerceNumberProperty(value)));\n }\n /** Size of the grid list's gutter in pixels. */\n get gutterSize() {\n return this._gutter;\n }\n set gutterSize(value) {\n this._gutter = `${value == null ? '' : value}`;\n }\n /** Set internal representation of row height from the user-provided value. */\n get rowHeight() {\n return this._rowHeight;\n }\n set rowHeight(value) {\n const newValue = `${value == null ? '' : value}`;\n if (newValue !== this._rowHeight) {\n this._rowHeight = newValue;\n this._setTileStyler(this._rowHeight);\n }\n }\n ngOnInit() {\n this._checkCols();\n this._checkRowHeight();\n }\n /**\n * The layout calculation is fairly cheap if nothing changes, so there's little cost\n * to run it frequently.\n */\n ngAfterContentChecked() {\n this._layoutTiles();\n }\n /** Throw a friendly error if cols property is missing */\n _checkCols() {\n if (!this.cols && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error(`mat-grid-list: must pass in number of columns. ` + `Example: `);\n }\n }\n /** Default to equal width:height if rowHeight property is missing */\n _checkRowHeight() {\n if (!this._rowHeight) {\n this._setTileStyler('1:1');\n }\n }\n /** Creates correct Tile Styler subtype based on rowHeight passed in by user */\n _setTileStyler(rowHeight) {\n if (this._tileStyler) {\n this._tileStyler.reset(this);\n }\n if (rowHeight === MAT_FIT_MODE) {\n this._tileStyler = new FitTileStyler();\n }\n else if (rowHeight && rowHeight.indexOf(':') > -1) {\n this._tileStyler = new RatioTileStyler(rowHeight);\n }\n else {\n this._tileStyler = new FixedTileStyler(rowHeight);\n }\n }\n /** Computes and applies the size and position for all children grid tiles. */\n _layoutTiles() {\n if (!this._tileCoordinator) {\n this._tileCoordinator = new TileCoordinator();\n }\n const tracker = this._tileCoordinator;\n const tiles = this._tiles.filter(tile => !tile._gridList || tile._gridList === this);\n const direction = this._dir ? this._dir.value : 'ltr';\n this._tileCoordinator.update(this.cols, tiles);\n this._tileStyler.init(this.gutterSize, tracker, this.cols, direction);\n tiles.forEach((tile, index) => {\n const pos = tracker.positions[index];\n this._tileStyler.setStyle(tile, pos.row, pos.col);\n });\n this._setListStyle(this._tileStyler.getComputedHeight());\n }\n /** Sets style on the main grid-list element, given the style name and value. */\n _setListStyle(style) {\n if (style) {\n this._element.nativeElement.style[style[0]] = style[1];\n }\n }\n}\nMatGridList.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatGridList, deps: [{ token: i0.ElementRef }, { token: i1.Directionality, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nMatGridList.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"13.2.0\", type: MatGridList, selector: \"mat-grid-list\", inputs: { cols: \"cols\", gutterSize: \"gutterSize\", rowHeight: \"rowHeight\" }, host: { properties: { \"attr.cols\": \"cols\" }, classAttribute: \"mat-grid-list\" }, providers: [\n {\n provide: MAT_GRID_LIST,\n useExisting: MatGridList,\n },\n ], queries: [{ propertyName: \"_tiles\", predicate: MatGridTile, descendants: true }], exportAs: [\"matGridList\"], ngImport: i0, template: \"
\\n \\n
\", styles: [\".mat-grid-list{display:block;position:relative}.mat-grid-tile{display:block;position:absolute;overflow:hidden}.mat-grid-tile .mat-grid-tile-header,.mat-grid-tile .mat-grid-tile-footer{display:flex;align-items:center;height:48px;color:#fff;background:rgba(0,0,0,.38);overflow:hidden;padding:0 16px;position:absolute;left:0;right:0}.mat-grid-tile .mat-grid-tile-header>*,.mat-grid-tile .mat-grid-tile-footer>*{margin:0;padding:0;font-weight:normal;font-size:inherit}.mat-grid-tile .mat-grid-tile-header.mat-2-line,.mat-grid-tile .mat-grid-tile-footer.mat-2-line{height:68px}.mat-grid-tile .mat-grid-list-text{display:flex;flex-direction:column;flex:auto;box-sizing:border-box;overflow:hidden}.mat-grid-tile .mat-grid-list-text>*{margin:0;padding:0;font-weight:normal;font-size:inherit}.mat-grid-tile .mat-grid-list-text:empty{display:none}.mat-grid-tile .mat-grid-tile-header{top:0}.mat-grid-tile .mat-grid-tile-footer{bottom:0}.mat-grid-tile .mat-grid-avatar{padding-right:16px}[dir=rtl] .mat-grid-tile .mat-grid-avatar{padding-right:0;padding-left:16px}.mat-grid-tile .mat-grid-avatar:empty{display:none}.mat-grid-tile-content{top:0;left:0;right:0;bottom:0;position:absolute;display:flex;align-items:center;justify-content:center;height:100%;padding:0;margin:0}\\n\"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatGridList, decorators: [{\n type: Component,\n args: [{ selector: 'mat-grid-list', exportAs: 'matGridList', host: {\n 'class': 'mat-grid-list',\n // Ensures that the \"cols\" input value is reflected in the DOM. This is\n // needed for the grid-list harness.\n '[attr.cols]': 'cols',\n }, providers: [\n {\n provide: MAT_GRID_LIST,\n useExisting: MatGridList,\n },\n ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: \"
\\n \\n
\", styles: [\".mat-grid-list{display:block;position:relative}.mat-grid-tile{display:block;position:absolute;overflow:hidden}.mat-grid-tile .mat-grid-tile-header,.mat-grid-tile .mat-grid-tile-footer{display:flex;align-items:center;height:48px;color:#fff;background:rgba(0,0,0,.38);overflow:hidden;padding:0 16px;position:absolute;left:0;right:0}.mat-grid-tile .mat-grid-tile-header>*,.mat-grid-tile .mat-grid-tile-footer>*{margin:0;padding:0;font-weight:normal;font-size:inherit}.mat-grid-tile .mat-grid-tile-header.mat-2-line,.mat-grid-tile .mat-grid-tile-footer.mat-2-line{height:68px}.mat-grid-tile .mat-grid-list-text{display:flex;flex-direction:column;flex:auto;box-sizing:border-box;overflow:hidden}.mat-grid-tile .mat-grid-list-text>*{margin:0;padding:0;font-weight:normal;font-size:inherit}.mat-grid-tile .mat-grid-list-text:empty{display:none}.mat-grid-tile .mat-grid-tile-header{top:0}.mat-grid-tile .mat-grid-tile-footer{bottom:0}.mat-grid-tile .mat-grid-avatar{padding-right:16px}[dir=rtl] .mat-grid-tile .mat-grid-avatar{padding-right:0;padding-left:16px}.mat-grid-tile .mat-grid-avatar:empty{display:none}.mat-grid-tile-content{top:0;left:0;right:0;bottom:0;position:absolute;display:flex;align-items:center;justify-content:center;height:100%;padding:0;margin:0}\\n\"] }]\n }], ctorParameters: function () {\n return [{ type: i0.ElementRef }, { type: i1.Directionality, decorators: [{\n type: Optional\n }] }];\n }, propDecorators: { _tiles: [{\n type: ContentChildren,\n args: [MatGridTile, { descendants: true }]\n }], cols: [{\n type: Input\n }], gutterSize: [{\n type: Input\n }], rowHeight: [{\n type: Input\n }] } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass MatGridListModule {\n}\nMatGridListModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatGridListModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nMatGridListModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatGridListModule, declarations: [MatGridList,\n MatGridTile,\n MatGridTileText,\n MatGridTileHeaderCssMatStyler,\n MatGridTileFooterCssMatStyler,\n MatGridAvatarCssMatStyler], imports: [MatLineModule, MatCommonModule], exports: [MatGridList,\n MatGridTile,\n MatGridTileText,\n MatLineModule,\n MatCommonModule,\n MatGridTileHeaderCssMatStyler,\n MatGridTileFooterCssMatStyler,\n MatGridAvatarCssMatStyler] });\nMatGridListModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatGridListModule, imports: [[MatLineModule, MatCommonModule], MatLineModule,\n MatCommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatGridListModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [MatLineModule, MatCommonModule],\n exports: [\n MatGridList,\n MatGridTile,\n MatGridTileText,\n MatLineModule,\n MatCommonModule,\n MatGridTileHeaderCssMatStyler,\n MatGridTileFooterCssMatStyler,\n MatGridAvatarCssMatStyler,\n ],\n declarations: [\n MatGridList,\n MatGridTile,\n MatGridTileText,\n MatGridTileHeaderCssMatStyler,\n MatGridTileFooterCssMatStyler,\n MatGridAvatarCssMatStyler,\n ],\n }]\n }] });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n// Privately exported for the grid-list harness.\nconst ɵTileCoordinator = TileCoordinator;\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MatGridAvatarCssMatStyler, MatGridList, MatGridListModule, MatGridTile, MatGridTileFooterCssMatStyler, MatGridTileHeaderCssMatStyler, MatGridTileText, ɵTileCoordinator };\n","import * as i2 from '@angular/common';\nimport { CommonModule } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { InjectionToken, Component, ViewEncapsulation, ChangeDetectionStrategy, Directive, Optional, Inject, ContentChildren, ContentChild, Input, forwardRef, EventEmitter, Output, ViewChild, Attribute, NgModule } from '@angular/core';\nimport * as i1 from '@angular/material/core';\nimport { mixinDisabled, mixinDisableRipple, setLines, MatLine, MatLineModule, MatRippleModule, MatCommonModule, MatPseudoCheckboxModule } from '@angular/material/core';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { Subject } from 'rxjs';\nimport { takeUntil, startWith } from 'rxjs/operators';\nimport * as i3 from '@angular/cdk/a11y';\nimport { FocusKeyManager } from '@angular/cdk/a11y';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { hasModifierKey, A, ENTER, SPACE, UP_ARROW, DOWN_ARROW } from '@angular/cdk/keycodes';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { MatDividerModule } from '@angular/material/divider';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n// Boilerplate for applying mixins to MatList.\n/** @docs-private */\nconst _MatListBase = mixinDisabled(mixinDisableRipple(class {\n}));\n// Boilerplate for applying mixins to MatListItem.\n/** @docs-private */\nconst _MatListItemMixinBase = mixinDisableRipple(class {\n});\n/**\n * Injection token that can be used to inject instances of `MatList`. It serves as\n * alternative token to the actual `MatList` class which could cause unnecessary\n * retention of the class and its component metadata.\n */\nconst MAT_LIST = new InjectionToken('MatList');\n/**\n * Injection token that can be used to inject instances of `MatNavList`. It serves as\n * alternative token to the actual `MatNavList` class which could cause unnecessary\n * retention of the class and its component metadata.\n */\nconst MAT_NAV_LIST = new InjectionToken('MatNavList');\nclass MatNavList extends _MatListBase {\n constructor() {\n super(...arguments);\n /** Emits when the state of the list changes. */\n this._stateChanges = new Subject();\n }\n ngOnChanges() {\n this._stateChanges.next();\n }\n ngOnDestroy() {\n this._stateChanges.complete();\n }\n}\nMatNavList.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatNavList, deps: null, target: i0.ɵɵFactoryTarget.Component });\nMatNavList.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"13.2.0\", type: MatNavList, selector: \"mat-nav-list\", inputs: { disableRipple: \"disableRipple\", disabled: \"disabled\" }, host: { attributes: { \"role\": \"navigation\" }, classAttribute: \"mat-nav-list mat-list-base\" }, providers: [{ provide: MAT_NAV_LIST, useExisting: MatNavList }], exportAs: [\"matNavList\"], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: \"\\n\\n\", styles: [\".mat-subheader{display:flex;box-sizing:border-box;padding:16px;align-items:center}.mat-list-base .mat-subheader{margin:0}.mat-list-base{padding-top:8px;display:block;-webkit-tap-highlight-color:transparent}.mat-list-base .mat-subheader{height:48px;line-height:16px}.mat-list-base .mat-subheader:first-child{margin-top:-8px}.mat-list-base .mat-list-item,.mat-list-base .mat-list-option{display:block;height:48px;-webkit-tap-highlight-color:transparent;width:100%;padding:0}.mat-list-base .mat-list-item .mat-list-item-content,.mat-list-base .mat-list-option .mat-list-item-content{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;padding:0 16px;position:relative;height:inherit}.mat-list-base .mat-list-item .mat-list-item-content-reverse,.mat-list-base .mat-list-option .mat-list-item-content-reverse{display:flex;align-items:center;padding:0 16px;flex-direction:row-reverse;justify-content:space-around}.mat-list-base .mat-list-item .mat-list-item-ripple,.mat-list-base .mat-list-option .mat-list-item-ripple{display:block;top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-list-base .mat-list-item.mat-list-item-with-avatar,.mat-list-base .mat-list-option.mat-list-item-with-avatar{height:56px}.mat-list-base .mat-list-item.mat-2-line,.mat-list-base .mat-list-option.mat-2-line{height:72px}.mat-list-base .mat-list-item.mat-3-line,.mat-list-base .mat-list-option.mat-3-line{height:88px}.mat-list-base .mat-list-item.mat-multi-line,.mat-list-base .mat-list-option.mat-multi-line{height:auto}.mat-list-base .mat-list-item.mat-multi-line .mat-list-item-content,.mat-list-base .mat-list-option.mat-multi-line .mat-list-item-content{padding-top:16px;padding-bottom:16px}.mat-list-base .mat-list-item .mat-list-text,.mat-list-base .mat-list-option .mat-list-text{display:flex;flex-direction:column;flex:auto;box-sizing:border-box;overflow:hidden;padding:0}.mat-list-base .mat-list-item .mat-list-text>*,.mat-list-base .mat-list-option .mat-list-text>*{margin:0;padding:0;font-weight:normal;font-size:inherit}.mat-list-base .mat-list-item .mat-list-text:empty,.mat-list-base .mat-list-option .mat-list-text:empty{display:none}.mat-list-base .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-list-base .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,.mat-list-base .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-list-base .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text{padding-right:0;padding-left:16px}[dir=rtl] .mat-list-base .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text{padding-right:16px;padding-left:0}.mat-list-base .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text{padding-left:0;padding-right:16px}[dir=rtl] .mat-list-base .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text{padding-right:0;padding-left:16px}.mat-list-base .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text,.mat-list-base .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text{padding-right:16px;padding-left:16px}.mat-list-base .mat-list-item .mat-list-avatar,.mat-list-base .mat-list-option .mat-list-avatar{flex-shrink:0;width:40px;height:40px;border-radius:50%;object-fit:cover}.mat-list-base .mat-list-item .mat-list-avatar~.mat-divider-inset,.mat-list-base .mat-list-option .mat-list-avatar~.mat-divider-inset{margin-left:72px;width:calc(100% - 72px)}[dir=rtl] .mat-list-base .mat-list-item .mat-list-avatar~.mat-divider-inset,[dir=rtl] .mat-list-base .mat-list-option .mat-list-avatar~.mat-divider-inset{margin-left:auto;margin-right:72px}.mat-list-base .mat-list-item .mat-list-icon,.mat-list-base .mat-list-option .mat-list-icon{flex-shrink:0;width:24px;height:24px;font-size:24px;box-sizing:content-box;border-radius:50%;padding:4px}.mat-list-base .mat-list-item .mat-list-icon~.mat-divider-inset,.mat-list-base .mat-list-option .mat-list-icon~.mat-divider-inset{margin-left:64px;width:calc(100% - 64px)}[dir=rtl] .mat-list-base .mat-list-item .mat-list-icon~.mat-divider-inset,[dir=rtl] .mat-list-base .mat-list-option .mat-list-icon~.mat-divider-inset{margin-left:auto;margin-right:64px}.mat-list-base .mat-list-item .mat-divider,.mat-list-base .mat-list-option .mat-divider{position:absolute;bottom:0;left:0;width:100%;margin:0}[dir=rtl] .mat-list-base .mat-list-item .mat-divider,[dir=rtl] .mat-list-base .mat-list-option .mat-divider{margin-left:auto;margin-right:0}.mat-list-base .mat-list-item .mat-divider.mat-divider-inset,.mat-list-base .mat-list-option .mat-divider.mat-divider-inset{position:absolute}.mat-list-base[dense]{padding-top:4px;display:block}.mat-list-base[dense] .mat-subheader{height:40px;line-height:8px}.mat-list-base[dense] .mat-subheader:first-child{margin-top:-4px}.mat-list-base[dense] .mat-list-item,.mat-list-base[dense] .mat-list-option{display:block;height:40px;-webkit-tap-highlight-color:transparent;width:100%;padding:0}.mat-list-base[dense] .mat-list-item .mat-list-item-content,.mat-list-base[dense] .mat-list-option .mat-list-item-content{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;padding:0 16px;position:relative;height:inherit}.mat-list-base[dense] .mat-list-item .mat-list-item-content-reverse,.mat-list-base[dense] .mat-list-option .mat-list-item-content-reverse{display:flex;align-items:center;padding:0 16px;flex-direction:row-reverse;justify-content:space-around}.mat-list-base[dense] .mat-list-item .mat-list-item-ripple,.mat-list-base[dense] .mat-list-option .mat-list-item-ripple{display:block;top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar{height:48px}.mat-list-base[dense] .mat-list-item.mat-2-line,.mat-list-base[dense] .mat-list-option.mat-2-line{height:60px}.mat-list-base[dense] .mat-list-item.mat-3-line,.mat-list-base[dense] .mat-list-option.mat-3-line{height:76px}.mat-list-base[dense] .mat-list-item.mat-multi-line,.mat-list-base[dense] .mat-list-option.mat-multi-line{height:auto}.mat-list-base[dense] .mat-list-item.mat-multi-line .mat-list-item-content,.mat-list-base[dense] .mat-list-option.mat-multi-line .mat-list-item-content{padding-top:16px;padding-bottom:16px}.mat-list-base[dense] .mat-list-item .mat-list-text,.mat-list-base[dense] .mat-list-option .mat-list-text{display:flex;flex-direction:column;flex:auto;box-sizing:border-box;overflow:hidden;padding:0}.mat-list-base[dense] .mat-list-item .mat-list-text>*,.mat-list-base[dense] .mat-list-option .mat-list-text>*{margin:0;padding:0;font-weight:normal;font-size:inherit}.mat-list-base[dense] .mat-list-item .mat-list-text:empty,.mat-list-base[dense] .mat-list-option .mat-list-text:empty{display:none}.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-list-base[dense] .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text{padding-right:0;padding-left:16px}[dir=rtl] .mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text{padding-right:16px;padding-left:0}.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text{padding-left:0;padding-right:16px}[dir=rtl] .mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text{padding-right:0;padding-left:16px}.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text{padding-right:16px;padding-left:16px}.mat-list-base[dense] .mat-list-item .mat-list-avatar,.mat-list-base[dense] .mat-list-option .mat-list-avatar{flex-shrink:0;width:36px;height:36px;border-radius:50%;object-fit:cover}.mat-list-base[dense] .mat-list-item .mat-list-avatar~.mat-divider-inset,.mat-list-base[dense] .mat-list-option .mat-list-avatar~.mat-divider-inset{margin-left:68px;width:calc(100% - 68px)}[dir=rtl] .mat-list-base[dense] .mat-list-item .mat-list-avatar~.mat-divider-inset,[dir=rtl] .mat-list-base[dense] .mat-list-option .mat-list-avatar~.mat-divider-inset{margin-left:auto;margin-right:68px}.mat-list-base[dense] .mat-list-item .mat-list-icon,.mat-list-base[dense] .mat-list-option .mat-list-icon{flex-shrink:0;width:20px;height:20px;font-size:20px;box-sizing:content-box;border-radius:50%;padding:4px}.mat-list-base[dense] .mat-list-item .mat-list-icon~.mat-divider-inset,.mat-list-base[dense] .mat-list-option .mat-list-icon~.mat-divider-inset{margin-left:60px;width:calc(100% - 60px)}[dir=rtl] .mat-list-base[dense] .mat-list-item .mat-list-icon~.mat-divider-inset,[dir=rtl] .mat-list-base[dense] .mat-list-option .mat-list-icon~.mat-divider-inset{margin-left:auto;margin-right:60px}.mat-list-base[dense] .mat-list-item .mat-divider,.mat-list-base[dense] .mat-list-option .mat-divider{position:absolute;bottom:0;left:0;width:100%;margin:0}[dir=rtl] .mat-list-base[dense] .mat-list-item .mat-divider,[dir=rtl] .mat-list-base[dense] .mat-list-option .mat-divider{margin-left:auto;margin-right:0}.mat-list-base[dense] .mat-list-item .mat-divider.mat-divider-inset,.mat-list-base[dense] .mat-list-option .mat-divider.mat-divider-inset{position:absolute}.mat-nav-list a{text-decoration:none;color:inherit}.mat-nav-list .mat-list-item{cursor:pointer;outline:none}mat-action-list button{background:none;color:inherit;border:none;font:inherit;outline:inherit;-webkit-tap-highlight-color:transparent;text-align:left}[dir=rtl] mat-action-list button{text-align:right}mat-action-list button::-moz-focus-inner{border:0}mat-action-list .mat-list-item{cursor:pointer;outline:inherit}.mat-list-option:not(.mat-list-item-disabled){cursor:pointer;outline:none}.mat-list-item-disabled{pointer-events:none}.cdk-high-contrast-active .mat-list-item-disabled{opacity:.5}.cdk-high-contrast-active :host .mat-list-item-disabled{opacity:.5}.cdk-high-contrast-active .mat-selection-list:focus{outline-style:dotted}.cdk-high-contrast-active .mat-list-option:hover,.cdk-high-contrast-active .mat-list-option:focus,.cdk-high-contrast-active .mat-nav-list .mat-list-item:hover,.cdk-high-contrast-active .mat-nav-list .mat-list-item:focus,.cdk-high-contrast-active mat-action-list .mat-list-item:hover,.cdk-high-contrast-active mat-action-list .mat-list-item:focus{outline:dotted 1px;z-index:1}.cdk-high-contrast-active .mat-list-single-selected-option::after{content:\\\"\\\";position:absolute;top:50%;right:16px;transform:translateY(-50%);width:10px;height:0;border-bottom:solid 10px;border-radius:10px}.cdk-high-contrast-active [dir=rtl] .mat-list-single-selected-option::after{right:auto;left:16px}@media(hover: none){.mat-list-option:not(.mat-list-single-selected-option):not(.mat-list-item-disabled):hover,.mat-nav-list .mat-list-item:not(.mat-list-item-disabled):hover,.mat-action-list .mat-list-item:not(.mat-list-item-disabled):hover{background:none}}\\n\"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatNavList, decorators: [{\n type: Component,\n args: [{ selector: 'mat-nav-list', exportAs: 'matNavList', host: {\n 'role': 'navigation',\n 'class': 'mat-nav-list mat-list-base',\n }, inputs: ['disableRipple', 'disabled'], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [{ provide: MAT_NAV_LIST, useExisting: MatNavList }], template: \"\\n\\n\", styles: [\".mat-subheader{display:flex;box-sizing:border-box;padding:16px;align-items:center}.mat-list-base .mat-subheader{margin:0}.mat-list-base{padding-top:8px;display:block;-webkit-tap-highlight-color:transparent}.mat-list-base .mat-subheader{height:48px;line-height:16px}.mat-list-base .mat-subheader:first-child{margin-top:-8px}.mat-list-base .mat-list-item,.mat-list-base .mat-list-option{display:block;height:48px;-webkit-tap-highlight-color:transparent;width:100%;padding:0}.mat-list-base .mat-list-item .mat-list-item-content,.mat-list-base .mat-list-option .mat-list-item-content{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;padding:0 16px;position:relative;height:inherit}.mat-list-base .mat-list-item .mat-list-item-content-reverse,.mat-list-base .mat-list-option .mat-list-item-content-reverse{display:flex;align-items:center;padding:0 16px;flex-direction:row-reverse;justify-content:space-around}.mat-list-base .mat-list-item .mat-list-item-ripple,.mat-list-base .mat-list-option .mat-list-item-ripple{display:block;top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-list-base .mat-list-item.mat-list-item-with-avatar,.mat-list-base .mat-list-option.mat-list-item-with-avatar{height:56px}.mat-list-base .mat-list-item.mat-2-line,.mat-list-base .mat-list-option.mat-2-line{height:72px}.mat-list-base .mat-list-item.mat-3-line,.mat-list-base .mat-list-option.mat-3-line{height:88px}.mat-list-base .mat-list-item.mat-multi-line,.mat-list-base .mat-list-option.mat-multi-line{height:auto}.mat-list-base .mat-list-item.mat-multi-line .mat-list-item-content,.mat-list-base .mat-list-option.mat-multi-line .mat-list-item-content{padding-top:16px;padding-bottom:16px}.mat-list-base .mat-list-item .mat-list-text,.mat-list-base .mat-list-option .mat-list-text{display:flex;flex-direction:column;flex:auto;box-sizing:border-box;overflow:hidden;padding:0}.mat-list-base .mat-list-item .mat-list-text>*,.mat-list-base .mat-list-option .mat-list-text>*{margin:0;padding:0;font-weight:normal;font-size:inherit}.mat-list-base .mat-list-item .mat-list-text:empty,.mat-list-base .mat-list-option .mat-list-text:empty{display:none}.mat-list-base .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-list-base .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,.mat-list-base .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-list-base .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text{padding-right:0;padding-left:16px}[dir=rtl] .mat-list-base .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text{padding-right:16px;padding-left:0}.mat-list-base .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text{padding-left:0;padding-right:16px}[dir=rtl] .mat-list-base .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text{padding-right:0;padding-left:16px}.mat-list-base .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text,.mat-list-base .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text{padding-right:16px;padding-left:16px}.mat-list-base .mat-list-item .mat-list-avatar,.mat-list-base .mat-list-option .mat-list-avatar{flex-shrink:0;width:40px;height:40px;border-radius:50%;object-fit:cover}.mat-list-base .mat-list-item .mat-list-avatar~.mat-divider-inset,.mat-list-base .mat-list-option .mat-list-avatar~.mat-divider-inset{margin-left:72px;width:calc(100% - 72px)}[dir=rtl] .mat-list-base .mat-list-item .mat-list-avatar~.mat-divider-inset,[dir=rtl] .mat-list-base .mat-list-option .mat-list-avatar~.mat-divider-inset{margin-left:auto;margin-right:72px}.mat-list-base .mat-list-item .mat-list-icon,.mat-list-base .mat-list-option .mat-list-icon{flex-shrink:0;width:24px;height:24px;font-size:24px;box-sizing:content-box;border-radius:50%;padding:4px}.mat-list-base .mat-list-item .mat-list-icon~.mat-divider-inset,.mat-list-base .mat-list-option .mat-list-icon~.mat-divider-inset{margin-left:64px;width:calc(100% - 64px)}[dir=rtl] .mat-list-base .mat-list-item .mat-list-icon~.mat-divider-inset,[dir=rtl] .mat-list-base .mat-list-option .mat-list-icon~.mat-divider-inset{margin-left:auto;margin-right:64px}.mat-list-base .mat-list-item .mat-divider,.mat-list-base .mat-list-option .mat-divider{position:absolute;bottom:0;left:0;width:100%;margin:0}[dir=rtl] .mat-list-base .mat-list-item .mat-divider,[dir=rtl] .mat-list-base .mat-list-option .mat-divider{margin-left:auto;margin-right:0}.mat-list-base .mat-list-item .mat-divider.mat-divider-inset,.mat-list-base .mat-list-option .mat-divider.mat-divider-inset{position:absolute}.mat-list-base[dense]{padding-top:4px;display:block}.mat-list-base[dense] .mat-subheader{height:40px;line-height:8px}.mat-list-base[dense] .mat-subheader:first-child{margin-top:-4px}.mat-list-base[dense] .mat-list-item,.mat-list-base[dense] .mat-list-option{display:block;height:40px;-webkit-tap-highlight-color:transparent;width:100%;padding:0}.mat-list-base[dense] .mat-list-item .mat-list-item-content,.mat-list-base[dense] .mat-list-option .mat-list-item-content{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;padding:0 16px;position:relative;height:inherit}.mat-list-base[dense] .mat-list-item .mat-list-item-content-reverse,.mat-list-base[dense] .mat-list-option .mat-list-item-content-reverse{display:flex;align-items:center;padding:0 16px;flex-direction:row-reverse;justify-content:space-around}.mat-list-base[dense] .mat-list-item .mat-list-item-ripple,.mat-list-base[dense] .mat-list-option .mat-list-item-ripple{display:block;top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar{height:48px}.mat-list-base[dense] .mat-list-item.mat-2-line,.mat-list-base[dense] .mat-list-option.mat-2-line{height:60px}.mat-list-base[dense] .mat-list-item.mat-3-line,.mat-list-base[dense] .mat-list-option.mat-3-line{height:76px}.mat-list-base[dense] .mat-list-item.mat-multi-line,.mat-list-base[dense] .mat-list-option.mat-multi-line{height:auto}.mat-list-base[dense] .mat-list-item.mat-multi-line .mat-list-item-content,.mat-list-base[dense] .mat-list-option.mat-multi-line .mat-list-item-content{padding-top:16px;padding-bottom:16px}.mat-list-base[dense] .mat-list-item .mat-list-text,.mat-list-base[dense] .mat-list-option .mat-list-text{display:flex;flex-direction:column;flex:auto;box-sizing:border-box;overflow:hidden;padding:0}.mat-list-base[dense] .mat-list-item .mat-list-text>*,.mat-list-base[dense] .mat-list-option .mat-list-text>*{margin:0;padding:0;font-weight:normal;font-size:inherit}.mat-list-base[dense] .mat-list-item .mat-list-text:empty,.mat-list-base[dense] .mat-list-option .mat-list-text:empty{display:none}.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-list-base[dense] .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text{padding-right:0;padding-left:16px}[dir=rtl] .mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text{padding-right:16px;padding-left:0}.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text{padding-left:0;padding-right:16px}[dir=rtl] .mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text{padding-right:0;padding-left:16px}.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text{padding-right:16px;padding-left:16px}.mat-list-base[dense] .mat-list-item .mat-list-avatar,.mat-list-base[dense] .mat-list-option .mat-list-avatar{flex-shrink:0;width:36px;height:36px;border-radius:50%;object-fit:cover}.mat-list-base[dense] .mat-list-item .mat-list-avatar~.mat-divider-inset,.mat-list-base[dense] .mat-list-option .mat-list-avatar~.mat-divider-inset{margin-left:68px;width:calc(100% - 68px)}[dir=rtl] .mat-list-base[dense] .mat-list-item .mat-list-avatar~.mat-divider-inset,[dir=rtl] .mat-list-base[dense] .mat-list-option .mat-list-avatar~.mat-divider-inset{margin-left:auto;margin-right:68px}.mat-list-base[dense] .mat-list-item .mat-list-icon,.mat-list-base[dense] .mat-list-option .mat-list-icon{flex-shrink:0;width:20px;height:20px;font-size:20px;box-sizing:content-box;border-radius:50%;padding:4px}.mat-list-base[dense] .mat-list-item .mat-list-icon~.mat-divider-inset,.mat-list-base[dense] .mat-list-option .mat-list-icon~.mat-divider-inset{margin-left:60px;width:calc(100% - 60px)}[dir=rtl] .mat-list-base[dense] .mat-list-item .mat-list-icon~.mat-divider-inset,[dir=rtl] .mat-list-base[dense] .mat-list-option .mat-list-icon~.mat-divider-inset{margin-left:auto;margin-right:60px}.mat-list-base[dense] .mat-list-item .mat-divider,.mat-list-base[dense] .mat-list-option .mat-divider{position:absolute;bottom:0;left:0;width:100%;margin:0}[dir=rtl] .mat-list-base[dense] .mat-list-item .mat-divider,[dir=rtl] .mat-list-base[dense] .mat-list-option .mat-divider{margin-left:auto;margin-right:0}.mat-list-base[dense] .mat-list-item .mat-divider.mat-divider-inset,.mat-list-base[dense] .mat-list-option .mat-divider.mat-divider-inset{position:absolute}.mat-nav-list a{text-decoration:none;color:inherit}.mat-nav-list .mat-list-item{cursor:pointer;outline:none}mat-action-list button{background:none;color:inherit;border:none;font:inherit;outline:inherit;-webkit-tap-highlight-color:transparent;text-align:left}[dir=rtl] mat-action-list button{text-align:right}mat-action-list button::-moz-focus-inner{border:0}mat-action-list .mat-list-item{cursor:pointer;outline:inherit}.mat-list-option:not(.mat-list-item-disabled){cursor:pointer;outline:none}.mat-list-item-disabled{pointer-events:none}.cdk-high-contrast-active .mat-list-item-disabled{opacity:.5}.cdk-high-contrast-active :host .mat-list-item-disabled{opacity:.5}.cdk-high-contrast-active .mat-selection-list:focus{outline-style:dotted}.cdk-high-contrast-active .mat-list-option:hover,.cdk-high-contrast-active .mat-list-option:focus,.cdk-high-contrast-active .mat-nav-list .mat-list-item:hover,.cdk-high-contrast-active .mat-nav-list .mat-list-item:focus,.cdk-high-contrast-active mat-action-list .mat-list-item:hover,.cdk-high-contrast-active mat-action-list .mat-list-item:focus{outline:dotted 1px;z-index:1}.cdk-high-contrast-active .mat-list-single-selected-option::after{content:\\\"\\\";position:absolute;top:50%;right:16px;transform:translateY(-50%);width:10px;height:0;border-bottom:solid 10px;border-radius:10px}.cdk-high-contrast-active [dir=rtl] .mat-list-single-selected-option::after{right:auto;left:16px}@media(hover: none){.mat-list-option:not(.mat-list-single-selected-option):not(.mat-list-item-disabled):hover,.mat-nav-list .mat-list-item:not(.mat-list-item-disabled):hover,.mat-action-list .mat-list-item:not(.mat-list-item-disabled):hover{background:none}}\\n\"] }]\n }] });\nclass MatList extends _MatListBase {\n constructor(_elementRef) {\n super();\n this._elementRef = _elementRef;\n /** Emits when the state of the list changes. */\n this._stateChanges = new Subject();\n if (this._getListType() === 'action-list') {\n _elementRef.nativeElement.classList.add('mat-action-list');\n }\n }\n _getListType() {\n const nodeName = this._elementRef.nativeElement.nodeName.toLowerCase();\n if (nodeName === 'mat-list') {\n return 'list';\n }\n if (nodeName === 'mat-action-list') {\n return 'action-list';\n }\n return null;\n }\n ngOnChanges() {\n this._stateChanges.next();\n }\n ngOnDestroy() {\n this._stateChanges.complete();\n }\n}\nMatList.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatList, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });\nMatList.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"13.2.0\", type: MatList, selector: \"mat-list, mat-action-list\", inputs: { disableRipple: \"disableRipple\", disabled: \"disabled\" }, host: { classAttribute: \"mat-list mat-list-base\" }, providers: [{ provide: MAT_LIST, useExisting: MatList }], exportAs: [\"matList\"], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: \"\\n\\n\", styles: [\".mat-subheader{display:flex;box-sizing:border-box;padding:16px;align-items:center}.mat-list-base .mat-subheader{margin:0}.mat-list-base{padding-top:8px;display:block;-webkit-tap-highlight-color:transparent}.mat-list-base .mat-subheader{height:48px;line-height:16px}.mat-list-base .mat-subheader:first-child{margin-top:-8px}.mat-list-base .mat-list-item,.mat-list-base .mat-list-option{display:block;height:48px;-webkit-tap-highlight-color:transparent;width:100%;padding:0}.mat-list-base .mat-list-item .mat-list-item-content,.mat-list-base .mat-list-option .mat-list-item-content{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;padding:0 16px;position:relative;height:inherit}.mat-list-base .mat-list-item .mat-list-item-content-reverse,.mat-list-base .mat-list-option .mat-list-item-content-reverse{display:flex;align-items:center;padding:0 16px;flex-direction:row-reverse;justify-content:space-around}.mat-list-base .mat-list-item .mat-list-item-ripple,.mat-list-base .mat-list-option .mat-list-item-ripple{display:block;top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-list-base .mat-list-item.mat-list-item-with-avatar,.mat-list-base .mat-list-option.mat-list-item-with-avatar{height:56px}.mat-list-base .mat-list-item.mat-2-line,.mat-list-base .mat-list-option.mat-2-line{height:72px}.mat-list-base .mat-list-item.mat-3-line,.mat-list-base .mat-list-option.mat-3-line{height:88px}.mat-list-base .mat-list-item.mat-multi-line,.mat-list-base .mat-list-option.mat-multi-line{height:auto}.mat-list-base .mat-list-item.mat-multi-line .mat-list-item-content,.mat-list-base .mat-list-option.mat-multi-line .mat-list-item-content{padding-top:16px;padding-bottom:16px}.mat-list-base .mat-list-item .mat-list-text,.mat-list-base .mat-list-option .mat-list-text{display:flex;flex-direction:column;flex:auto;box-sizing:border-box;overflow:hidden;padding:0}.mat-list-base .mat-list-item .mat-list-text>*,.mat-list-base .mat-list-option .mat-list-text>*{margin:0;padding:0;font-weight:normal;font-size:inherit}.mat-list-base .mat-list-item .mat-list-text:empty,.mat-list-base .mat-list-option .mat-list-text:empty{display:none}.mat-list-base .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-list-base .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,.mat-list-base .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-list-base .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text{padding-right:0;padding-left:16px}[dir=rtl] .mat-list-base .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text{padding-right:16px;padding-left:0}.mat-list-base .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text{padding-left:0;padding-right:16px}[dir=rtl] .mat-list-base .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text{padding-right:0;padding-left:16px}.mat-list-base .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text,.mat-list-base .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text{padding-right:16px;padding-left:16px}.mat-list-base .mat-list-item .mat-list-avatar,.mat-list-base .mat-list-option .mat-list-avatar{flex-shrink:0;width:40px;height:40px;border-radius:50%;object-fit:cover}.mat-list-base .mat-list-item .mat-list-avatar~.mat-divider-inset,.mat-list-base .mat-list-option .mat-list-avatar~.mat-divider-inset{margin-left:72px;width:calc(100% - 72px)}[dir=rtl] .mat-list-base .mat-list-item .mat-list-avatar~.mat-divider-inset,[dir=rtl] .mat-list-base .mat-list-option .mat-list-avatar~.mat-divider-inset{margin-left:auto;margin-right:72px}.mat-list-base .mat-list-item .mat-list-icon,.mat-list-base .mat-list-option .mat-list-icon{flex-shrink:0;width:24px;height:24px;font-size:24px;box-sizing:content-box;border-radius:50%;padding:4px}.mat-list-base .mat-list-item .mat-list-icon~.mat-divider-inset,.mat-list-base .mat-list-option .mat-list-icon~.mat-divider-inset{margin-left:64px;width:calc(100% - 64px)}[dir=rtl] .mat-list-base .mat-list-item .mat-list-icon~.mat-divider-inset,[dir=rtl] .mat-list-base .mat-list-option .mat-list-icon~.mat-divider-inset{margin-left:auto;margin-right:64px}.mat-list-base .mat-list-item .mat-divider,.mat-list-base .mat-list-option .mat-divider{position:absolute;bottom:0;left:0;width:100%;margin:0}[dir=rtl] .mat-list-base .mat-list-item .mat-divider,[dir=rtl] .mat-list-base .mat-list-option .mat-divider{margin-left:auto;margin-right:0}.mat-list-base .mat-list-item .mat-divider.mat-divider-inset,.mat-list-base .mat-list-option .mat-divider.mat-divider-inset{position:absolute}.mat-list-base[dense]{padding-top:4px;display:block}.mat-list-base[dense] .mat-subheader{height:40px;line-height:8px}.mat-list-base[dense] .mat-subheader:first-child{margin-top:-4px}.mat-list-base[dense] .mat-list-item,.mat-list-base[dense] .mat-list-option{display:block;height:40px;-webkit-tap-highlight-color:transparent;width:100%;padding:0}.mat-list-base[dense] .mat-list-item .mat-list-item-content,.mat-list-base[dense] .mat-list-option .mat-list-item-content{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;padding:0 16px;position:relative;height:inherit}.mat-list-base[dense] .mat-list-item .mat-list-item-content-reverse,.mat-list-base[dense] .mat-list-option .mat-list-item-content-reverse{display:flex;align-items:center;padding:0 16px;flex-direction:row-reverse;justify-content:space-around}.mat-list-base[dense] .mat-list-item .mat-list-item-ripple,.mat-list-base[dense] .mat-list-option .mat-list-item-ripple{display:block;top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar{height:48px}.mat-list-base[dense] .mat-list-item.mat-2-line,.mat-list-base[dense] .mat-list-option.mat-2-line{height:60px}.mat-list-base[dense] .mat-list-item.mat-3-line,.mat-list-base[dense] .mat-list-option.mat-3-line{height:76px}.mat-list-base[dense] .mat-list-item.mat-multi-line,.mat-list-base[dense] .mat-list-option.mat-multi-line{height:auto}.mat-list-base[dense] .mat-list-item.mat-multi-line .mat-list-item-content,.mat-list-base[dense] .mat-list-option.mat-multi-line .mat-list-item-content{padding-top:16px;padding-bottom:16px}.mat-list-base[dense] .mat-list-item .mat-list-text,.mat-list-base[dense] .mat-list-option .mat-list-text{display:flex;flex-direction:column;flex:auto;box-sizing:border-box;overflow:hidden;padding:0}.mat-list-base[dense] .mat-list-item .mat-list-text>*,.mat-list-base[dense] .mat-list-option .mat-list-text>*{margin:0;padding:0;font-weight:normal;font-size:inherit}.mat-list-base[dense] .mat-list-item .mat-list-text:empty,.mat-list-base[dense] .mat-list-option .mat-list-text:empty{display:none}.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-list-base[dense] .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text{padding-right:0;padding-left:16px}[dir=rtl] .mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text{padding-right:16px;padding-left:0}.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text{padding-left:0;padding-right:16px}[dir=rtl] .mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text{padding-right:0;padding-left:16px}.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text{padding-right:16px;padding-left:16px}.mat-list-base[dense] .mat-list-item .mat-list-avatar,.mat-list-base[dense] .mat-list-option .mat-list-avatar{flex-shrink:0;width:36px;height:36px;border-radius:50%;object-fit:cover}.mat-list-base[dense] .mat-list-item .mat-list-avatar~.mat-divider-inset,.mat-list-base[dense] .mat-list-option .mat-list-avatar~.mat-divider-inset{margin-left:68px;width:calc(100% - 68px)}[dir=rtl] .mat-list-base[dense] .mat-list-item .mat-list-avatar~.mat-divider-inset,[dir=rtl] .mat-list-base[dense] .mat-list-option .mat-list-avatar~.mat-divider-inset{margin-left:auto;margin-right:68px}.mat-list-base[dense] .mat-list-item .mat-list-icon,.mat-list-base[dense] .mat-list-option .mat-list-icon{flex-shrink:0;width:20px;height:20px;font-size:20px;box-sizing:content-box;border-radius:50%;padding:4px}.mat-list-base[dense] .mat-list-item .mat-list-icon~.mat-divider-inset,.mat-list-base[dense] .mat-list-option .mat-list-icon~.mat-divider-inset{margin-left:60px;width:calc(100% - 60px)}[dir=rtl] .mat-list-base[dense] .mat-list-item .mat-list-icon~.mat-divider-inset,[dir=rtl] .mat-list-base[dense] .mat-list-option .mat-list-icon~.mat-divider-inset{margin-left:auto;margin-right:60px}.mat-list-base[dense] .mat-list-item .mat-divider,.mat-list-base[dense] .mat-list-option .mat-divider{position:absolute;bottom:0;left:0;width:100%;margin:0}[dir=rtl] .mat-list-base[dense] .mat-list-item .mat-divider,[dir=rtl] .mat-list-base[dense] .mat-list-option .mat-divider{margin-left:auto;margin-right:0}.mat-list-base[dense] .mat-list-item .mat-divider.mat-divider-inset,.mat-list-base[dense] .mat-list-option .mat-divider.mat-divider-inset{position:absolute}.mat-nav-list a{text-decoration:none;color:inherit}.mat-nav-list .mat-list-item{cursor:pointer;outline:none}mat-action-list button{background:none;color:inherit;border:none;font:inherit;outline:inherit;-webkit-tap-highlight-color:transparent;text-align:left}[dir=rtl] mat-action-list button{text-align:right}mat-action-list button::-moz-focus-inner{border:0}mat-action-list .mat-list-item{cursor:pointer;outline:inherit}.mat-list-option:not(.mat-list-item-disabled){cursor:pointer;outline:none}.mat-list-item-disabled{pointer-events:none}.cdk-high-contrast-active .mat-list-item-disabled{opacity:.5}.cdk-high-contrast-active :host .mat-list-item-disabled{opacity:.5}.cdk-high-contrast-active .mat-selection-list:focus{outline-style:dotted}.cdk-high-contrast-active .mat-list-option:hover,.cdk-high-contrast-active .mat-list-option:focus,.cdk-high-contrast-active .mat-nav-list .mat-list-item:hover,.cdk-high-contrast-active .mat-nav-list .mat-list-item:focus,.cdk-high-contrast-active mat-action-list .mat-list-item:hover,.cdk-high-contrast-active mat-action-list .mat-list-item:focus{outline:dotted 1px;z-index:1}.cdk-high-contrast-active .mat-list-single-selected-option::after{content:\\\"\\\";position:absolute;top:50%;right:16px;transform:translateY(-50%);width:10px;height:0;border-bottom:solid 10px;border-radius:10px}.cdk-high-contrast-active [dir=rtl] .mat-list-single-selected-option::after{right:auto;left:16px}@media(hover: none){.mat-list-option:not(.mat-list-single-selected-option):not(.mat-list-item-disabled):hover,.mat-nav-list .mat-list-item:not(.mat-list-item-disabled):hover,.mat-action-list .mat-list-item:not(.mat-list-item-disabled):hover{background:none}}\\n\"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatList, decorators: [{\n type: Component,\n args: [{ selector: 'mat-list, mat-action-list', exportAs: 'matList', host: {\n 'class': 'mat-list mat-list-base',\n }, inputs: ['disableRipple', 'disabled'], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [{ provide: MAT_LIST, useExisting: MatList }], template: \"\\n\\n\", styles: [\".mat-subheader{display:flex;box-sizing:border-box;padding:16px;align-items:center}.mat-list-base .mat-subheader{margin:0}.mat-list-base{padding-top:8px;display:block;-webkit-tap-highlight-color:transparent}.mat-list-base .mat-subheader{height:48px;line-height:16px}.mat-list-base .mat-subheader:first-child{margin-top:-8px}.mat-list-base .mat-list-item,.mat-list-base .mat-list-option{display:block;height:48px;-webkit-tap-highlight-color:transparent;width:100%;padding:0}.mat-list-base .mat-list-item .mat-list-item-content,.mat-list-base .mat-list-option .mat-list-item-content{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;padding:0 16px;position:relative;height:inherit}.mat-list-base .mat-list-item .mat-list-item-content-reverse,.mat-list-base .mat-list-option .mat-list-item-content-reverse{display:flex;align-items:center;padding:0 16px;flex-direction:row-reverse;justify-content:space-around}.mat-list-base .mat-list-item .mat-list-item-ripple,.mat-list-base .mat-list-option .mat-list-item-ripple{display:block;top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-list-base .mat-list-item.mat-list-item-with-avatar,.mat-list-base .mat-list-option.mat-list-item-with-avatar{height:56px}.mat-list-base .mat-list-item.mat-2-line,.mat-list-base .mat-list-option.mat-2-line{height:72px}.mat-list-base .mat-list-item.mat-3-line,.mat-list-base .mat-list-option.mat-3-line{height:88px}.mat-list-base .mat-list-item.mat-multi-line,.mat-list-base .mat-list-option.mat-multi-line{height:auto}.mat-list-base .mat-list-item.mat-multi-line .mat-list-item-content,.mat-list-base .mat-list-option.mat-multi-line .mat-list-item-content{padding-top:16px;padding-bottom:16px}.mat-list-base .mat-list-item .mat-list-text,.mat-list-base .mat-list-option .mat-list-text{display:flex;flex-direction:column;flex:auto;box-sizing:border-box;overflow:hidden;padding:0}.mat-list-base .mat-list-item .mat-list-text>*,.mat-list-base .mat-list-option .mat-list-text>*{margin:0;padding:0;font-weight:normal;font-size:inherit}.mat-list-base .mat-list-item .mat-list-text:empty,.mat-list-base .mat-list-option .mat-list-text:empty{display:none}.mat-list-base .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-list-base .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,.mat-list-base .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-list-base .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text{padding-right:0;padding-left:16px}[dir=rtl] .mat-list-base .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text{padding-right:16px;padding-left:0}.mat-list-base .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text{padding-left:0;padding-right:16px}[dir=rtl] .mat-list-base .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text{padding-right:0;padding-left:16px}.mat-list-base .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text,.mat-list-base .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text{padding-right:16px;padding-left:16px}.mat-list-base .mat-list-item .mat-list-avatar,.mat-list-base .mat-list-option .mat-list-avatar{flex-shrink:0;width:40px;height:40px;border-radius:50%;object-fit:cover}.mat-list-base .mat-list-item .mat-list-avatar~.mat-divider-inset,.mat-list-base .mat-list-option .mat-list-avatar~.mat-divider-inset{margin-left:72px;width:calc(100% - 72px)}[dir=rtl] .mat-list-base .mat-list-item .mat-list-avatar~.mat-divider-inset,[dir=rtl] .mat-list-base .mat-list-option .mat-list-avatar~.mat-divider-inset{margin-left:auto;margin-right:72px}.mat-list-base .mat-list-item .mat-list-icon,.mat-list-base .mat-list-option .mat-list-icon{flex-shrink:0;width:24px;height:24px;font-size:24px;box-sizing:content-box;border-radius:50%;padding:4px}.mat-list-base .mat-list-item .mat-list-icon~.mat-divider-inset,.mat-list-base .mat-list-option .mat-list-icon~.mat-divider-inset{margin-left:64px;width:calc(100% - 64px)}[dir=rtl] .mat-list-base .mat-list-item .mat-list-icon~.mat-divider-inset,[dir=rtl] .mat-list-base .mat-list-option .mat-list-icon~.mat-divider-inset{margin-left:auto;margin-right:64px}.mat-list-base .mat-list-item .mat-divider,.mat-list-base .mat-list-option .mat-divider{position:absolute;bottom:0;left:0;width:100%;margin:0}[dir=rtl] .mat-list-base .mat-list-item .mat-divider,[dir=rtl] .mat-list-base .mat-list-option .mat-divider{margin-left:auto;margin-right:0}.mat-list-base .mat-list-item .mat-divider.mat-divider-inset,.mat-list-base .mat-list-option .mat-divider.mat-divider-inset{position:absolute}.mat-list-base[dense]{padding-top:4px;display:block}.mat-list-base[dense] .mat-subheader{height:40px;line-height:8px}.mat-list-base[dense] .mat-subheader:first-child{margin-top:-4px}.mat-list-base[dense] .mat-list-item,.mat-list-base[dense] .mat-list-option{display:block;height:40px;-webkit-tap-highlight-color:transparent;width:100%;padding:0}.mat-list-base[dense] .mat-list-item .mat-list-item-content,.mat-list-base[dense] .mat-list-option .mat-list-item-content{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;padding:0 16px;position:relative;height:inherit}.mat-list-base[dense] .mat-list-item .mat-list-item-content-reverse,.mat-list-base[dense] .mat-list-option .mat-list-item-content-reverse{display:flex;align-items:center;padding:0 16px;flex-direction:row-reverse;justify-content:space-around}.mat-list-base[dense] .mat-list-item .mat-list-item-ripple,.mat-list-base[dense] .mat-list-option .mat-list-item-ripple{display:block;top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar{height:48px}.mat-list-base[dense] .mat-list-item.mat-2-line,.mat-list-base[dense] .mat-list-option.mat-2-line{height:60px}.mat-list-base[dense] .mat-list-item.mat-3-line,.mat-list-base[dense] .mat-list-option.mat-3-line{height:76px}.mat-list-base[dense] .mat-list-item.mat-multi-line,.mat-list-base[dense] .mat-list-option.mat-multi-line{height:auto}.mat-list-base[dense] .mat-list-item.mat-multi-line .mat-list-item-content,.mat-list-base[dense] .mat-list-option.mat-multi-line .mat-list-item-content{padding-top:16px;padding-bottom:16px}.mat-list-base[dense] .mat-list-item .mat-list-text,.mat-list-base[dense] .mat-list-option .mat-list-text{display:flex;flex-direction:column;flex:auto;box-sizing:border-box;overflow:hidden;padding:0}.mat-list-base[dense] .mat-list-item .mat-list-text>*,.mat-list-base[dense] .mat-list-option .mat-list-text>*{margin:0;padding:0;font-weight:normal;font-size:inherit}.mat-list-base[dense] .mat-list-item .mat-list-text:empty,.mat-list-base[dense] .mat-list-option .mat-list-text:empty{display:none}.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-list-base[dense] .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text{padding-right:0;padding-left:16px}[dir=rtl] .mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-item.mat-list-option .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-option.mat-list-option .mat-list-item-content .mat-list-text{padding-right:16px;padding-left:0}.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text{padding-left:0;padding-right:16px}[dir=rtl] .mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-item.mat-list-option .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar .mat-list-item-content-reverse .mat-list-text,[dir=rtl] .mat-list-base[dense] .mat-list-option.mat-list-option .mat-list-item-content-reverse .mat-list-text{padding-right:0;padding-left:16px}.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-item.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content-reverse .mat-list-text,.mat-list-base[dense] .mat-list-option.mat-list-item-with-avatar.mat-list-option .mat-list-item-content .mat-list-text{padding-right:16px;padding-left:16px}.mat-list-base[dense] .mat-list-item .mat-list-avatar,.mat-list-base[dense] .mat-list-option .mat-list-avatar{flex-shrink:0;width:36px;height:36px;border-radius:50%;object-fit:cover}.mat-list-base[dense] .mat-list-item .mat-list-avatar~.mat-divider-inset,.mat-list-base[dense] .mat-list-option .mat-list-avatar~.mat-divider-inset{margin-left:68px;width:calc(100% - 68px)}[dir=rtl] .mat-list-base[dense] .mat-list-item .mat-list-avatar~.mat-divider-inset,[dir=rtl] .mat-list-base[dense] .mat-list-option .mat-list-avatar~.mat-divider-inset{margin-left:auto;margin-right:68px}.mat-list-base[dense] .mat-list-item .mat-list-icon,.mat-list-base[dense] .mat-list-option .mat-list-icon{flex-shrink:0;width:20px;height:20px;font-size:20px;box-sizing:content-box;border-radius:50%;padding:4px}.mat-list-base[dense] .mat-list-item .mat-list-icon~.mat-divider-inset,.mat-list-base[dense] .mat-list-option .mat-list-icon~.mat-divider-inset{margin-left:60px;width:calc(100% - 60px)}[dir=rtl] .mat-list-base[dense] .mat-list-item .mat-list-icon~.mat-divider-inset,[dir=rtl] .mat-list-base[dense] .mat-list-option .mat-list-icon~.mat-divider-inset{margin-left:auto;margin-right:60px}.mat-list-base[dense] .mat-list-item .mat-divider,.mat-list-base[dense] .mat-list-option .mat-divider{position:absolute;bottom:0;left:0;width:100%;margin:0}[dir=rtl] .mat-list-base[dense] .mat-list-item .mat-divider,[dir=rtl] .mat-list-base[dense] .mat-list-option .mat-divider{margin-left:auto;margin-right:0}.mat-list-base[dense] .mat-list-item .mat-divider.mat-divider-inset,.mat-list-base[dense] .mat-list-option .mat-divider.mat-divider-inset{position:absolute}.mat-nav-list a{text-decoration:none;color:inherit}.mat-nav-list .mat-list-item{cursor:pointer;outline:none}mat-action-list button{background:none;color:inherit;border:none;font:inherit;outline:inherit;-webkit-tap-highlight-color:transparent;text-align:left}[dir=rtl] mat-action-list button{text-align:right}mat-action-list button::-moz-focus-inner{border:0}mat-action-list .mat-list-item{cursor:pointer;outline:inherit}.mat-list-option:not(.mat-list-item-disabled){cursor:pointer;outline:none}.mat-list-item-disabled{pointer-events:none}.cdk-high-contrast-active .mat-list-item-disabled{opacity:.5}.cdk-high-contrast-active :host .mat-list-item-disabled{opacity:.5}.cdk-high-contrast-active .mat-selection-list:focus{outline-style:dotted}.cdk-high-contrast-active .mat-list-option:hover,.cdk-high-contrast-active .mat-list-option:focus,.cdk-high-contrast-active .mat-nav-list .mat-list-item:hover,.cdk-high-contrast-active .mat-nav-list .mat-list-item:focus,.cdk-high-contrast-active mat-action-list .mat-list-item:hover,.cdk-high-contrast-active mat-action-list .mat-list-item:focus{outline:dotted 1px;z-index:1}.cdk-high-contrast-active .mat-list-single-selected-option::after{content:\\\"\\\";position:absolute;top:50%;right:16px;transform:translateY(-50%);width:10px;height:0;border-bottom:solid 10px;border-radius:10px}.cdk-high-contrast-active [dir=rtl] .mat-list-single-selected-option::after{right:auto;left:16px}@media(hover: none){.mat-list-option:not(.mat-list-single-selected-option):not(.mat-list-item-disabled):hover,.mat-nav-list .mat-list-item:not(.mat-list-item-disabled):hover,.mat-action-list .mat-list-item:not(.mat-list-item-disabled):hover{background:none}}\\n\"] }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }]; } });\n/**\n * Directive whose purpose is to add the mat- CSS styling to this selector.\n * @docs-private\n */\nclass MatListAvatarCssMatStyler {\n}\nMatListAvatarCssMatStyler.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatListAvatarCssMatStyler, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nMatListAvatarCssMatStyler.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.2.0\", type: MatListAvatarCssMatStyler, selector: \"[mat-list-avatar], [matListAvatar]\", host: { classAttribute: \"mat-list-avatar\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatListAvatarCssMatStyler, decorators: [{\n type: Directive,\n args: [{\n selector: '[mat-list-avatar], [matListAvatar]',\n host: { 'class': 'mat-list-avatar' },\n }]\n }] });\n/**\n * Directive whose purpose is to add the mat- CSS styling to this selector.\n * @docs-private\n */\nclass MatListIconCssMatStyler {\n}\nMatListIconCssMatStyler.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatListIconCssMatStyler, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nMatListIconCssMatStyler.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.2.0\", type: MatListIconCssMatStyler, selector: \"[mat-list-icon], [matListIcon]\", host: { classAttribute: \"mat-list-icon\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatListIconCssMatStyler, decorators: [{\n type: Directive,\n args: [{\n selector: '[mat-list-icon], [matListIcon]',\n host: { 'class': 'mat-list-icon' },\n }]\n }] });\n/**\n * Directive whose purpose is to add the mat- CSS styling to this selector.\n * @docs-private\n */\nclass MatListSubheaderCssMatStyler {\n}\nMatListSubheaderCssMatStyler.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatListSubheaderCssMatStyler, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nMatListSubheaderCssMatStyler.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.2.0\", type: MatListSubheaderCssMatStyler, selector: \"[mat-subheader], [matSubheader]\", host: { classAttribute: \"mat-subheader\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatListSubheaderCssMatStyler, decorators: [{\n type: Directive,\n args: [{\n selector: '[mat-subheader], [matSubheader]',\n host: { 'class': 'mat-subheader' },\n }]\n }] });\n/** An item within a Material Design list. */\nclass MatListItem extends _MatListItemMixinBase {\n constructor(_element, _changeDetectorRef, navList, list) {\n super();\n this._element = _element;\n this._isInteractiveList = false;\n this._destroyed = new Subject();\n this._disabled = false;\n this._isInteractiveList = !!(navList || (list && list._getListType() === 'action-list'));\n this._list = navList || list;\n // If no type attribute is specified for \\n \\n \\n \\n \\n \\n\\n\", styles: [\".mat-paginator{display:block}.mat-paginator-outer-container{display:flex}.mat-paginator-container{display:flex;align-items:center;justify-content:flex-end;padding:0 8px;flex-wrap:wrap-reverse;width:100%}.mat-paginator-page-size{display:flex;align-items:baseline;margin-right:8px}[dir=rtl] .mat-paginator-page-size{margin-right:0;margin-left:8px}.mat-paginator-page-size-label{margin:0 4px}.mat-paginator-page-size-select{margin:6px 4px 0 4px;width:56px}.mat-paginator-page-size-select.mat-form-field-appearance-outline{width:64px}.mat-paginator-page-size-select.mat-form-field-appearance-fill{width:64px}.mat-paginator-range-label{margin:0 32px 0 24px}.mat-paginator-range-actions{display:flex;align-items:center}.mat-paginator-icon{width:28px;fill:currentColor}[dir=rtl] .mat-paginator-icon{transform:rotate(180deg)}.cdk-high-contrast-active .mat-paginator-icon{fill:CanvasText}\\n\"], components: [{ type: i2.MatFormField, selector: \"mat-form-field\", inputs: [\"color\", \"appearance\", \"hideRequiredMarker\", \"hintLabel\", \"floatLabel\"], exportAs: [\"matFormField\"] }, { type: i3.MatSelect, selector: \"mat-select\", inputs: [\"disabled\", \"disableRipple\", \"tabIndex\"], exportAs: [\"matSelect\"] }, { type: i4.MatOption, selector: \"mat-option\", exportAs: [\"matOption\"] }, { type: i5.MatButton, selector: \"button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]\", inputs: [\"disabled\", \"disableRipple\", \"color\"], exportAs: [\"matButton\"] }], directives: [{ type: i6.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { type: i6.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { type: i7.MatTooltip, selector: \"[matTooltip]\", exportAs: [\"matTooltip\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatPaginator, decorators: [{\n type: Component,\n args: [{ selector: 'mat-paginator', exportAs: 'matPaginator', inputs: ['disabled'], host: {\n 'class': 'mat-paginator',\n 'role': 'group',\n }, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: \"
\\n
\\n
\\n
\\n {{_intl.itemsPerPageLabel}}\\n
\\n\\n 1\\\"\\n [appearance]=\\\"_formFieldAppearance!\\\"\\n [color]=\\\"color\\\"\\n class=\\\"mat-paginator-page-size-select\\\">\\n \\n \\n {{pageSizeOption}}\\n \\n \\n \\n\\n {{pageSize}}
\\n
\\n\\n
\\n
\\n {{_intl.getRangeLabel(pageIndex, pageSize, length)}}\\n
\\n\\n \\n \\n \\n \\n
\\n
\\n\\n\", styles: [\".mat-paginator{display:block}.mat-paginator-outer-container{display:flex}.mat-paginator-container{display:flex;align-items:center;justify-content:flex-end;padding:0 8px;flex-wrap:wrap-reverse;width:100%}.mat-paginator-page-size{display:flex;align-items:baseline;margin-right:8px}[dir=rtl] .mat-paginator-page-size{margin-right:0;margin-left:8px}.mat-paginator-page-size-label{margin:0 4px}.mat-paginator-page-size-select{margin:6px 4px 0 4px;width:56px}.mat-paginator-page-size-select.mat-form-field-appearance-outline{width:64px}.mat-paginator-page-size-select.mat-form-field-appearance-fill{width:64px}.mat-paginator-range-label{margin:0 32px 0 24px}.mat-paginator-range-actions{display:flex;align-items:center}.mat-paginator-icon{width:28px;fill:currentColor}[dir=rtl] .mat-paginator-icon{transform:rotate(180deg)}.cdk-high-contrast-active .mat-paginator-icon{fill:CanvasText}\\n\"] }]\n }], ctorParameters: function () {\n return [{ type: MatPaginatorIntl }, { type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_PAGINATOR_DEFAULT_OPTIONS]\n }] }];\n } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass MatPaginatorModule {\n}\nMatPaginatorModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatPaginatorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nMatPaginatorModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatPaginatorModule, declarations: [MatPaginator], imports: [CommonModule, MatButtonModule, MatSelectModule, MatTooltipModule, MatCommonModule], exports: [MatPaginator] });\nMatPaginatorModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatPaginatorModule, providers: [MAT_PAGINATOR_INTL_PROVIDER], imports: [[CommonModule, MatButtonModule, MatSelectModule, MatTooltipModule, MatCommonModule]] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatPaginatorModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [CommonModule, MatButtonModule, MatSelectModule, MatTooltipModule, MatCommonModule],\n exports: [MatPaginator],\n declarations: [MatPaginator],\n providers: [MAT_PAGINATOR_INTL_PROVIDER],\n }]\n }] });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_PAGINATOR_DEFAULT_OPTIONS, MAT_PAGINATOR_INTL_PROVIDER, MAT_PAGINATOR_INTL_PROVIDER_FACTORY, MatPaginator, MatPaginatorIntl, MatPaginatorModule, PageEvent, _MatPaginatorBase };\n","import * as i0 from '@angular/core';\nimport { InjectionToken, inject, EventEmitter, Component, ChangeDetectionStrategy, ViewEncapsulation, Optional, Inject, Input, ViewChild, Output, NgModule } from '@angular/core';\nimport * as i1 from '@angular/common';\nimport { DOCUMENT, CommonModule } from '@angular/common';\nimport { mixinColor, MatCommonModule } from '@angular/material/core';\nimport { coerceNumberProperty } from '@angular/cdk/coercion';\nimport { ANIMATION_MODULE_TYPE } from '@angular/platform-browser/animations';\nimport { Subscription, fromEvent } from 'rxjs';\nimport { filter } from 'rxjs/operators';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n// Boilerplate for applying mixins to MatProgressBar.\n/** @docs-private */\nconst _MatProgressBarBase = mixinColor(class {\n constructor(_elementRef) {\n this._elementRef = _elementRef;\n }\n}, 'primary');\n/**\n * Injection token used to provide the current location to `MatProgressBar`.\n * Used to handle server-side rendering and to stub out during unit tests.\n * @docs-private\n */\nconst MAT_PROGRESS_BAR_LOCATION = new InjectionToken('mat-progress-bar-location', { providedIn: 'root', factory: MAT_PROGRESS_BAR_LOCATION_FACTORY });\n/** @docs-private */\nfunction MAT_PROGRESS_BAR_LOCATION_FACTORY() {\n const _document = inject(DOCUMENT);\n const _location = _document ? _document.location : null;\n return {\n // Note that this needs to be a function, rather than a property, because Angular\n // will only resolve it once, but we want the current path on each call.\n getPathname: () => (_location ? _location.pathname + _location.search : ''),\n };\n}\n/** Injection token to be used to override the default options for `mat-progress-bar`. */\nconst MAT_PROGRESS_BAR_DEFAULT_OPTIONS = new InjectionToken('MAT_PROGRESS_BAR_DEFAULT_OPTIONS');\n/** Counter used to generate unique IDs for progress bars. */\nlet progressbarId = 0;\n/**\n * `` component.\n */\nclass MatProgressBar extends _MatProgressBarBase {\n constructor(elementRef, _ngZone, _animationMode, \n /**\n * @deprecated `location` parameter to be made required.\n * @breaking-change 8.0.0\n */\n location, defaults, \n /**\n * @deprecated `_changeDetectorRef` parameter to be made required.\n * @breaking-change 11.0.0\n */\n _changeDetectorRef) {\n super(elementRef);\n this._ngZone = _ngZone;\n this._animationMode = _animationMode;\n this._changeDetectorRef = _changeDetectorRef;\n /** Flag that indicates whether NoopAnimations mode is set to true. */\n this._isNoopAnimation = false;\n this._value = 0;\n this._bufferValue = 0;\n /**\n * Event emitted when animation of the primary progress bar completes. This event will not\n * be emitted when animations are disabled, nor will it be emitted for modes with continuous\n * animations (indeterminate and query).\n */\n this.animationEnd = new EventEmitter();\n /** Reference to animation end subscription to be unsubscribed on destroy. */\n this._animationEndSubscription = Subscription.EMPTY;\n /**\n * Mode of the progress bar.\n *\n * Input must be one of these values: determinate, indeterminate, buffer, query, defaults to\n * 'determinate'.\n * Mirrored to mode attribute.\n */\n this.mode = 'determinate';\n /** ID of the progress bar. */\n this.progressbarId = `mat-progress-bar-${progressbarId++}`;\n // We need to prefix the SVG reference with the current path, otherwise they won't work\n // in Safari if the page has a `` tag. Note that we need quotes inside the `url()`,\n // because named route URLs can contain parentheses (see #12338). Also we don't use `Location`\n // since we can't tell the difference between whether the consumer is using the hash location\n // strategy or not, because `Location` normalizes both `/#/foo/bar` and `/foo/bar` to\n // the same thing.\n const path = location ? location.getPathname().split('#')[0] : '';\n this._rectangleFillValue = `url('${path}#${this.progressbarId}')`;\n this._isNoopAnimation = _animationMode === 'NoopAnimations';\n if (defaults) {\n if (defaults.color) {\n this.color = this.defaultColor = defaults.color;\n }\n this.mode = defaults.mode || this.mode;\n }\n }\n /** Value of the progress bar. Defaults to zero. Mirrored to aria-valuenow. */\n get value() {\n return this._value;\n }\n set value(v) {\n var _a;\n this._value = clamp(coerceNumberProperty(v) || 0);\n // @breaking-change 11.0.0 Remove null check for _changeDetectorRef.\n (_a = this._changeDetectorRef) === null || _a === void 0 ? void 0 : _a.markForCheck();\n }\n /** Buffer value of the progress bar. Defaults to zero. */\n get bufferValue() {\n return this._bufferValue;\n }\n set bufferValue(v) {\n var _a;\n this._bufferValue = clamp(v || 0);\n // @breaking-change 11.0.0 Remove null check for _changeDetectorRef.\n (_a = this._changeDetectorRef) === null || _a === void 0 ? void 0 : _a.markForCheck();\n }\n /** Gets the current transform value for the progress bar's primary indicator. */\n _primaryTransform() {\n // We use a 3d transform to work around some rendering issues in iOS Safari. See #19328.\n const scale = this.value / 100;\n return { transform: `scale3d(${scale}, 1, 1)` };\n }\n /**\n * Gets the current transform value for the progress bar's buffer indicator. Only used if the\n * progress mode is set to buffer, otherwise returns an undefined, causing no transformation.\n */\n _bufferTransform() {\n if (this.mode === 'buffer') {\n // We use a 3d transform to work around some rendering issues in iOS Safari. See #19328.\n const scale = this.bufferValue / 100;\n return { transform: `scale3d(${scale}, 1, 1)` };\n }\n return null;\n }\n ngAfterViewInit() {\n // Run outside angular so change detection didn't get triggered on every transition end\n // instead only on the animation that we care about (primary value bar's transitionend)\n this._ngZone.runOutsideAngular(() => {\n const element = this._primaryValueBar.nativeElement;\n this._animationEndSubscription = fromEvent(element, 'transitionend')\n .pipe(filter((e) => e.target === element))\n .subscribe(() => {\n if (this.mode === 'determinate' || this.mode === 'buffer') {\n this._ngZone.run(() => this.animationEnd.next({ value: this.value }));\n }\n });\n });\n }\n ngOnDestroy() {\n this._animationEndSubscription.unsubscribe();\n }\n}\nMatProgressBar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatProgressBar, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: ANIMATION_MODULE_TYPE, optional: true }, { token: MAT_PROGRESS_BAR_LOCATION, optional: true }, { token: MAT_PROGRESS_BAR_DEFAULT_OPTIONS, optional: true }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\nMatProgressBar.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"13.2.0\", type: MatProgressBar, selector: \"mat-progress-bar\", inputs: { color: \"color\", value: \"value\", bufferValue: \"bufferValue\", mode: \"mode\" }, outputs: { animationEnd: \"animationEnd\" }, host: { attributes: { \"role\": \"progressbar\", \"aria-valuemin\": \"0\", \"aria-valuemax\": \"100\", \"tabindex\": \"-1\" }, properties: { \"attr.aria-valuenow\": \"(mode === \\\"indeterminate\\\" || mode === \\\"query\\\") ? null : value\", \"attr.mode\": \"mode\", \"class._mat-animation-noopable\": \"_isNoopAnimation\" }, classAttribute: \"mat-progress-bar\" }, viewQueries: [{ propertyName: \"_primaryValueBar\", first: true, predicate: [\"primaryValueBar\"], descendants: true }], exportAs: [\"matProgressBar\"], usesInheritance: true, ngImport: i0, template: \"\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n
\\n
\\n
\\n\", styles: [\".mat-progress-bar{display:block;height:4px;overflow:hidden;position:relative;transition:opacity 250ms linear;width:100%}._mat-animation-noopable.mat-progress-bar{transition:none;animation:none}.mat-progress-bar .mat-progress-bar-element,.mat-progress-bar .mat-progress-bar-fill::after{height:100%;position:absolute;width:100%}.mat-progress-bar .mat-progress-bar-background{width:calc(100% + 10px)}.cdk-high-contrast-active .mat-progress-bar .mat-progress-bar-background{display:none}.mat-progress-bar .mat-progress-bar-buffer{transform-origin:top left;transition:transform 250ms ease}.cdk-high-contrast-active .mat-progress-bar .mat-progress-bar-buffer{border-top:solid 5px;opacity:.5}.mat-progress-bar .mat-progress-bar-secondary{display:none}.mat-progress-bar .mat-progress-bar-fill{animation:none;transform-origin:top left;transition:transform 250ms ease}.cdk-high-contrast-active .mat-progress-bar .mat-progress-bar-fill{border-top:solid 4px}.mat-progress-bar .mat-progress-bar-fill::after{animation:none;content:\\\"\\\";display:inline-block;left:0}.mat-progress-bar[dir=rtl],[dir=rtl] .mat-progress-bar{transform:rotateY(180deg)}.mat-progress-bar[mode=query]{transform:rotateZ(180deg)}.mat-progress-bar[mode=query][dir=rtl],[dir=rtl] .mat-progress-bar[mode=query]{transform:rotateZ(180deg) rotateY(180deg)}.mat-progress-bar[mode=indeterminate] .mat-progress-bar-fill,.mat-progress-bar[mode=query] .mat-progress-bar-fill{transition:none}.mat-progress-bar[mode=indeterminate] .mat-progress-bar-primary,.mat-progress-bar[mode=query] .mat-progress-bar-primary{-webkit-backface-visibility:hidden;backface-visibility:hidden;animation:mat-progress-bar-primary-indeterminate-translate 2000ms infinite linear;left:-145.166611%}.mat-progress-bar[mode=indeterminate] .mat-progress-bar-primary.mat-progress-bar-fill::after,.mat-progress-bar[mode=query] .mat-progress-bar-primary.mat-progress-bar-fill::after{-webkit-backface-visibility:hidden;backface-visibility:hidden;animation:mat-progress-bar-primary-indeterminate-scale 2000ms infinite linear}.mat-progress-bar[mode=indeterminate] .mat-progress-bar-secondary,.mat-progress-bar[mode=query] .mat-progress-bar-secondary{-webkit-backface-visibility:hidden;backface-visibility:hidden;animation:mat-progress-bar-secondary-indeterminate-translate 2000ms infinite linear;left:-54.888891%;display:block}.mat-progress-bar[mode=indeterminate] .mat-progress-bar-secondary.mat-progress-bar-fill::after,.mat-progress-bar[mode=query] .mat-progress-bar-secondary.mat-progress-bar-fill::after{-webkit-backface-visibility:hidden;backface-visibility:hidden;animation:mat-progress-bar-secondary-indeterminate-scale 2000ms infinite linear}.mat-progress-bar[mode=buffer] .mat-progress-bar-background{-webkit-backface-visibility:hidden;backface-visibility:hidden;animation:mat-progress-bar-background-scroll 250ms infinite linear;display:block}.mat-progress-bar._mat-animation-noopable .mat-progress-bar-fill,.mat-progress-bar._mat-animation-noopable .mat-progress-bar-fill::after,.mat-progress-bar._mat-animation-noopable .mat-progress-bar-buffer,.mat-progress-bar._mat-animation-noopable .mat-progress-bar-primary,.mat-progress-bar._mat-animation-noopable .mat-progress-bar-primary.mat-progress-bar-fill::after,.mat-progress-bar._mat-animation-noopable .mat-progress-bar-secondary,.mat-progress-bar._mat-animation-noopable .mat-progress-bar-secondary.mat-progress-bar-fill::after,.mat-progress-bar._mat-animation-noopable .mat-progress-bar-background{animation:none;transition-duration:1ms}@keyframes mat-progress-bar-primary-indeterminate-translate{0%{transform:translateX(0)}20%{animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);transform:translateX(0)}59.15%{animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);transform:translateX(83.67142%)}100%{transform:translateX(200.611057%)}}@keyframes mat-progress-bar-primary-indeterminate-scale{0%{transform:scaleX(0.08)}36.65%{animation-timing-function:cubic-bezier(0.334731, 0.12482, 0.785844, 1);transform:scaleX(0.08)}69.15%{animation-timing-function:cubic-bezier(0.06, 0.11, 0.6, 1);transform:scaleX(0.661479)}100%{transform:scaleX(0.08)}}@keyframes mat-progress-bar-secondary-indeterminate-translate{0%{animation-timing-function:cubic-bezier(0.15, 0, 0.515058, 0.409685);transform:translateX(0)}25%{animation-timing-function:cubic-bezier(0.31033, 0.284058, 0.8, 0.733712);transform:translateX(37.651913%)}48.35%{animation-timing-function:cubic-bezier(0.4, 0.627035, 0.6, 0.902026);transform:translateX(84.386165%)}100%{transform:translateX(160.277782%)}}@keyframes mat-progress-bar-secondary-indeterminate-scale{0%{animation-timing-function:cubic-bezier(0.15, 0, 0.515058, 0.409685);transform:scaleX(0.08)}19.15%{animation-timing-function:cubic-bezier(0.31033, 0.284058, 0.8, 0.733712);transform:scaleX(0.457104)}44.15%{animation-timing-function:cubic-bezier(0.4, 0.627035, 0.6, 0.902026);transform:scaleX(0.72796)}100%{transform:scaleX(0.08)}}@keyframes mat-progress-bar-background-scroll{to{transform:translateX(-8px)}}\\n\"], directives: [{ type: i1.NgStyle, selector: \"[ngStyle]\", inputs: [\"ngStyle\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatProgressBar, decorators: [{\n type: Component,\n args: [{ selector: 'mat-progress-bar', exportAs: 'matProgressBar', host: {\n 'role': 'progressbar',\n 'aria-valuemin': '0',\n 'aria-valuemax': '100',\n // set tab index to -1 so screen readers will read the aria-label\n // Note: there is a known issue with JAWS that does not read progressbar aria labels on FireFox\n 'tabindex': '-1',\n '[attr.aria-valuenow]': '(mode === \"indeterminate\" || mode === \"query\") ? null : value',\n '[attr.mode]': 'mode',\n 'class': 'mat-progress-bar',\n '[class._mat-animation-noopable]': '_isNoopAnimation',\n }, inputs: ['color'], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: \"\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\\n
\\n
\\n
\\n\", styles: [\".mat-progress-bar{display:block;height:4px;overflow:hidden;position:relative;transition:opacity 250ms linear;width:100%}._mat-animation-noopable.mat-progress-bar{transition:none;animation:none}.mat-progress-bar .mat-progress-bar-element,.mat-progress-bar .mat-progress-bar-fill::after{height:100%;position:absolute;width:100%}.mat-progress-bar .mat-progress-bar-background{width:calc(100% + 10px)}.cdk-high-contrast-active .mat-progress-bar .mat-progress-bar-background{display:none}.mat-progress-bar .mat-progress-bar-buffer{transform-origin:top left;transition:transform 250ms ease}.cdk-high-contrast-active .mat-progress-bar .mat-progress-bar-buffer{border-top:solid 5px;opacity:.5}.mat-progress-bar .mat-progress-bar-secondary{display:none}.mat-progress-bar .mat-progress-bar-fill{animation:none;transform-origin:top left;transition:transform 250ms ease}.cdk-high-contrast-active .mat-progress-bar .mat-progress-bar-fill{border-top:solid 4px}.mat-progress-bar .mat-progress-bar-fill::after{animation:none;content:\\\"\\\";display:inline-block;left:0}.mat-progress-bar[dir=rtl],[dir=rtl] .mat-progress-bar{transform:rotateY(180deg)}.mat-progress-bar[mode=query]{transform:rotateZ(180deg)}.mat-progress-bar[mode=query][dir=rtl],[dir=rtl] .mat-progress-bar[mode=query]{transform:rotateZ(180deg) rotateY(180deg)}.mat-progress-bar[mode=indeterminate] .mat-progress-bar-fill,.mat-progress-bar[mode=query] .mat-progress-bar-fill{transition:none}.mat-progress-bar[mode=indeterminate] .mat-progress-bar-primary,.mat-progress-bar[mode=query] .mat-progress-bar-primary{-webkit-backface-visibility:hidden;backface-visibility:hidden;animation:mat-progress-bar-primary-indeterminate-translate 2000ms infinite linear;left:-145.166611%}.mat-progress-bar[mode=indeterminate] .mat-progress-bar-primary.mat-progress-bar-fill::after,.mat-progress-bar[mode=query] .mat-progress-bar-primary.mat-progress-bar-fill::after{-webkit-backface-visibility:hidden;backface-visibility:hidden;animation:mat-progress-bar-primary-indeterminate-scale 2000ms infinite linear}.mat-progress-bar[mode=indeterminate] .mat-progress-bar-secondary,.mat-progress-bar[mode=query] .mat-progress-bar-secondary{-webkit-backface-visibility:hidden;backface-visibility:hidden;animation:mat-progress-bar-secondary-indeterminate-translate 2000ms infinite linear;left:-54.888891%;display:block}.mat-progress-bar[mode=indeterminate] .mat-progress-bar-secondary.mat-progress-bar-fill::after,.mat-progress-bar[mode=query] .mat-progress-bar-secondary.mat-progress-bar-fill::after{-webkit-backface-visibility:hidden;backface-visibility:hidden;animation:mat-progress-bar-secondary-indeterminate-scale 2000ms infinite linear}.mat-progress-bar[mode=buffer] .mat-progress-bar-background{-webkit-backface-visibility:hidden;backface-visibility:hidden;animation:mat-progress-bar-background-scroll 250ms infinite linear;display:block}.mat-progress-bar._mat-animation-noopable .mat-progress-bar-fill,.mat-progress-bar._mat-animation-noopable .mat-progress-bar-fill::after,.mat-progress-bar._mat-animation-noopable .mat-progress-bar-buffer,.mat-progress-bar._mat-animation-noopable .mat-progress-bar-primary,.mat-progress-bar._mat-animation-noopable .mat-progress-bar-primary.mat-progress-bar-fill::after,.mat-progress-bar._mat-animation-noopable .mat-progress-bar-secondary,.mat-progress-bar._mat-animation-noopable .mat-progress-bar-secondary.mat-progress-bar-fill::after,.mat-progress-bar._mat-animation-noopable .mat-progress-bar-background{animation:none;transition-duration:1ms}@keyframes mat-progress-bar-primary-indeterminate-translate{0%{transform:translateX(0)}20%{animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);transform:translateX(0)}59.15%{animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);transform:translateX(83.67142%)}100%{transform:translateX(200.611057%)}}@keyframes mat-progress-bar-primary-indeterminate-scale{0%{transform:scaleX(0.08)}36.65%{animation-timing-function:cubic-bezier(0.334731, 0.12482, 0.785844, 1);transform:scaleX(0.08)}69.15%{animation-timing-function:cubic-bezier(0.06, 0.11, 0.6, 1);transform:scaleX(0.661479)}100%{transform:scaleX(0.08)}}@keyframes mat-progress-bar-secondary-indeterminate-translate{0%{animation-timing-function:cubic-bezier(0.15, 0, 0.515058, 0.409685);transform:translateX(0)}25%{animation-timing-function:cubic-bezier(0.31033, 0.284058, 0.8, 0.733712);transform:translateX(37.651913%)}48.35%{animation-timing-function:cubic-bezier(0.4, 0.627035, 0.6, 0.902026);transform:translateX(84.386165%)}100%{transform:translateX(160.277782%)}}@keyframes mat-progress-bar-secondary-indeterminate-scale{0%{animation-timing-function:cubic-bezier(0.15, 0, 0.515058, 0.409685);transform:scaleX(0.08)}19.15%{animation-timing-function:cubic-bezier(0.31033, 0.284058, 0.8, 0.733712);transform:scaleX(0.457104)}44.15%{animation-timing-function:cubic-bezier(0.4, 0.627035, 0.6, 0.902026);transform:scaleX(0.72796)}100%{transform:scaleX(0.08)}}@keyframes mat-progress-bar-background-scroll{to{transform:translateX(-8px)}}\\n\"] }]\n }], ctorParameters: function () {\n return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_PROGRESS_BAR_LOCATION]\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_PROGRESS_BAR_DEFAULT_OPTIONS]\n }] }, { type: i0.ChangeDetectorRef }];\n }, propDecorators: { value: [{\n type: Input\n }], bufferValue: [{\n type: Input\n }], _primaryValueBar: [{\n type: ViewChild,\n args: ['primaryValueBar']\n }], animationEnd: [{\n type: Output\n }], mode: [{\n type: Input\n }] } });\n/** Clamps a value to be between two numbers, by default 0 and 100. */\nfunction clamp(v, min = 0, max = 100) {\n return Math.max(min, Math.min(max, v));\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass MatProgressBarModule {\n}\nMatProgressBarModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatProgressBarModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nMatProgressBarModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatProgressBarModule, declarations: [MatProgressBar], imports: [CommonModule, MatCommonModule], exports: [MatProgressBar, MatCommonModule] });\nMatProgressBarModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatProgressBarModule, imports: [[CommonModule, MatCommonModule], MatCommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatProgressBarModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [CommonModule, MatCommonModule],\n exports: [MatProgressBar, MatCommonModule],\n declarations: [MatProgressBar],\n }]\n }] });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_PROGRESS_BAR_DEFAULT_OPTIONS, MAT_PROGRESS_BAR_LOCATION, MAT_PROGRESS_BAR_LOCATION_FACTORY, MatProgressBar, MatProgressBarModule };\n","import { coerceNumberProperty } from '@angular/cdk/coercion';\nimport * as i1 from '@angular/cdk/platform';\nimport { _getShadowRoot } from '@angular/cdk/platform';\nimport * as i3 from '@angular/common';\nimport { DOCUMENT, CommonModule } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { InjectionToken, Component, ChangeDetectionStrategy, ViewEncapsulation, Optional, Inject, Input, NgModule } from '@angular/core';\nimport { mixinColor, MatCommonModule } from '@angular/material/core';\nimport { ANIMATION_MODULE_TYPE } from '@angular/platform-browser/animations';\nimport { Subscription } from 'rxjs';\nimport * as i2 from '@angular/cdk/scrolling';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Base reference size of the spinner.\n * @docs-private\n */\nconst BASE_SIZE = 100;\n/**\n * Base reference stroke width of the spinner.\n * @docs-private\n */\nconst BASE_STROKE_WIDTH = 10;\n// Boilerplate for applying mixins to MatProgressSpinner.\n/** @docs-private */\nconst _MatProgressSpinnerBase = mixinColor(class {\n constructor(_elementRef) {\n this._elementRef = _elementRef;\n }\n}, 'primary');\n/** Injection token to be used to override the default options for `mat-progress-spinner`. */\nconst MAT_PROGRESS_SPINNER_DEFAULT_OPTIONS = new InjectionToken('mat-progress-spinner-default-options', {\n providedIn: 'root',\n factory: MAT_PROGRESS_SPINNER_DEFAULT_OPTIONS_FACTORY,\n});\n/** @docs-private */\nfunction MAT_PROGRESS_SPINNER_DEFAULT_OPTIONS_FACTORY() {\n return { diameter: BASE_SIZE };\n}\n// .0001 percentage difference is necessary in order to avoid unwanted animation frames\n// for example because the animation duration is 4 seconds, .1% accounts to 4ms\n// which are enough to see the flicker described in\n// https://github.com/angular/components/issues/8984\nconst INDETERMINATE_ANIMATION_TEMPLATE = `\n @keyframes mat-progress-spinner-stroke-rotate-DIAMETER {\n 0% { stroke-dashoffset: START_VALUE; transform: rotate(0); }\n 12.5% { stroke-dashoffset: END_VALUE; transform: rotate(0); }\n 12.5001% { stroke-dashoffset: END_VALUE; transform: rotateX(180deg) rotate(72.5deg); }\n 25% { stroke-dashoffset: START_VALUE; transform: rotateX(180deg) rotate(72.5deg); }\n\n 25.0001% { stroke-dashoffset: START_VALUE; transform: rotate(270deg); }\n 37.5% { stroke-dashoffset: END_VALUE; transform: rotate(270deg); }\n 37.5001% { stroke-dashoffset: END_VALUE; transform: rotateX(180deg) rotate(161.5deg); }\n 50% { stroke-dashoffset: START_VALUE; transform: rotateX(180deg) rotate(161.5deg); }\n\n 50.0001% { stroke-dashoffset: START_VALUE; transform: rotate(180deg); }\n 62.5% { stroke-dashoffset: END_VALUE; transform: rotate(180deg); }\n 62.5001% { stroke-dashoffset: END_VALUE; transform: rotateX(180deg) rotate(251.5deg); }\n 75% { stroke-dashoffset: START_VALUE; transform: rotateX(180deg) rotate(251.5deg); }\n\n 75.0001% { stroke-dashoffset: START_VALUE; transform: rotate(90deg); }\n 87.5% { stroke-dashoffset: END_VALUE; transform: rotate(90deg); }\n 87.5001% { stroke-dashoffset: END_VALUE; transform: rotateX(180deg) rotate(341.5deg); }\n 100% { stroke-dashoffset: START_VALUE; transform: rotateX(180deg) rotate(341.5deg); }\n }\n`;\n/**\n * `` component.\n */\nclass MatProgressSpinner extends _MatProgressSpinnerBase {\n constructor(elementRef, _platform, _document, animationMode, defaults, \n /**\n * @deprecated `changeDetectorRef`, `viewportRuler` and `ngZone`\n * parameters to become required.\n * @breaking-change 14.0.0\n */\n changeDetectorRef, viewportRuler, ngZone) {\n super(elementRef);\n this._document = _document;\n this._diameter = BASE_SIZE;\n this._value = 0;\n this._resizeSubscription = Subscription.EMPTY;\n /** Mode of the progress circle */\n this.mode = 'determinate';\n const trackedDiameters = MatProgressSpinner._diameters;\n this._spinnerAnimationLabel = this._getSpinnerAnimationLabel();\n // The base size is already inserted via the component's structural styles. We still\n // need to track it so we don't end up adding the same styles again.\n if (!trackedDiameters.has(_document.head)) {\n trackedDiameters.set(_document.head, new Set([BASE_SIZE]));\n }\n this._noopAnimations =\n animationMode === 'NoopAnimations' && !!defaults && !defaults._forceAnimations;\n if (elementRef.nativeElement.nodeName.toLowerCase() === 'mat-spinner') {\n this.mode = 'indeterminate';\n }\n if (defaults) {\n if (defaults.diameter) {\n this.diameter = defaults.diameter;\n }\n if (defaults.strokeWidth) {\n this.strokeWidth = defaults.strokeWidth;\n }\n }\n // Safari has an issue where the circle isn't positioned correctly when the page has a\n // different zoom level from the default. This handler triggers a recalculation of the\n // `transform-origin` when the page zoom level changes.\n // See `_getCircleTransformOrigin` for more info.\n // @breaking-change 14.0.0 Remove null checks for `_changeDetectorRef`,\n // `viewportRuler` and `ngZone`.\n if (_platform.isBrowser && _platform.SAFARI && viewportRuler && changeDetectorRef && ngZone) {\n this._resizeSubscription = viewportRuler.change(150).subscribe(() => {\n // When the window is resize while the spinner is in `indeterminate` mode, we\n // have to mark for check so the transform origin of the circle can be recomputed.\n if (this.mode === 'indeterminate') {\n ngZone.run(() => changeDetectorRef.markForCheck());\n }\n });\n }\n }\n /** The diameter of the progress spinner (will set width and height of svg). */\n get diameter() {\n return this._diameter;\n }\n set diameter(size) {\n this._diameter = coerceNumberProperty(size);\n this._spinnerAnimationLabel = this._getSpinnerAnimationLabel();\n // If this is set before `ngOnInit`, the style root may not have been resolved yet.\n if (this._styleRoot) {\n this._attachStyleNode();\n }\n }\n /** Stroke width of the progress spinner. */\n get strokeWidth() {\n return this._strokeWidth || this.diameter / 10;\n }\n set strokeWidth(value) {\n this._strokeWidth = coerceNumberProperty(value);\n }\n /** Value of the progress circle. */\n get value() {\n return this.mode === 'determinate' ? this._value : 0;\n }\n set value(newValue) {\n this._value = Math.max(0, Math.min(100, coerceNumberProperty(newValue)));\n }\n ngOnInit() {\n const element = this._elementRef.nativeElement;\n // Note that we need to look up the root node in ngOnInit, rather than the constructor, because\n // Angular seems to create the element outside the shadow root and then moves it inside, if the\n // node is inside an `ngIf` and a ShadowDom-encapsulated component.\n this._styleRoot = _getShadowRoot(element) || this._document.head;\n this._attachStyleNode();\n element.classList.add('mat-progress-spinner-indeterminate-animation');\n }\n ngOnDestroy() {\n this._resizeSubscription.unsubscribe();\n }\n /** The radius of the spinner, adjusted for stroke width. */\n _getCircleRadius() {\n return (this.diameter - BASE_STROKE_WIDTH) / 2;\n }\n /** The view box of the spinner's svg element. */\n _getViewBox() {\n const viewBox = this._getCircleRadius() * 2 + this.strokeWidth;\n return `0 0 ${viewBox} ${viewBox}`;\n }\n /** The stroke circumference of the svg circle. */\n _getStrokeCircumference() {\n return 2 * Math.PI * this._getCircleRadius();\n }\n /** The dash offset of the svg circle. */\n _getStrokeDashOffset() {\n if (this.mode === 'determinate') {\n return (this._getStrokeCircumference() * (100 - this._value)) / 100;\n }\n return null;\n }\n /** Stroke width of the circle in percent. */\n _getCircleStrokeWidth() {\n return (this.strokeWidth / this.diameter) * 100;\n }\n /** Gets the `transform-origin` for the inner circle element. */\n _getCircleTransformOrigin(svg) {\n var _a;\n // Safari has an issue where the `transform-origin` doesn't work as expected when the page\n // has a different zoom level from the default. The problem appears to be that a zoom\n // is applied on the `svg` node itself. We can work around it by calculating the origin\n // based on the zoom level. On all other browsers the `currentScale` appears to always be 1.\n const scale = ((_a = svg.currentScale) !== null && _a !== void 0 ? _a : 1) * 50;\n return `${scale}% ${scale}%`;\n }\n /** Dynamically generates a style tag containing the correct animation for this diameter. */\n _attachStyleNode() {\n const styleRoot = this._styleRoot;\n const currentDiameter = this._diameter;\n const diameters = MatProgressSpinner._diameters;\n let diametersForElement = diameters.get(styleRoot);\n if (!diametersForElement || !diametersForElement.has(currentDiameter)) {\n const styleTag = this._document.createElement('style');\n styleTag.setAttribute('mat-spinner-animation', this._spinnerAnimationLabel);\n styleTag.textContent = this._getAnimationText();\n styleRoot.appendChild(styleTag);\n if (!diametersForElement) {\n diametersForElement = new Set();\n diameters.set(styleRoot, diametersForElement);\n }\n diametersForElement.add(currentDiameter);\n }\n }\n /** Generates animation styles adjusted for the spinner's diameter. */\n _getAnimationText() {\n const strokeCircumference = this._getStrokeCircumference();\n return (INDETERMINATE_ANIMATION_TEMPLATE\n // Animation should begin at 5% and end at 80%\n .replace(/START_VALUE/g, `${0.95 * strokeCircumference}`)\n .replace(/END_VALUE/g, `${0.2 * strokeCircumference}`)\n .replace(/DIAMETER/g, `${this._spinnerAnimationLabel}`));\n }\n /** Returns the circle diameter formatted for use with the animation-name CSS property. */\n _getSpinnerAnimationLabel() {\n // The string of a float point number will include a period ‘.’ character,\n // which is not valid for a CSS animation-name.\n return this.diameter.toString().replace('.', '_');\n }\n}\n/**\n * Tracks diameters of existing instances to de-dupe generated styles (default d = 100).\n * We need to keep track of which elements the diameters were attached to, because for\n * elements in the Shadow DOM the style tags are attached to the shadow root, rather\n * than the document head.\n */\nMatProgressSpinner._diameters = new WeakMap();\nMatProgressSpinner.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatProgressSpinner, deps: [{ token: i0.ElementRef }, { token: i1.Platform }, { token: DOCUMENT, optional: true }, { token: ANIMATION_MODULE_TYPE, optional: true }, { token: MAT_PROGRESS_SPINNER_DEFAULT_OPTIONS }, { token: i0.ChangeDetectorRef }, { token: i2.ViewportRuler }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });\nMatProgressSpinner.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"13.2.0\", type: MatProgressSpinner, selector: \"mat-progress-spinner, mat-spinner\", inputs: { color: \"color\", diameter: \"diameter\", strokeWidth: \"strokeWidth\", mode: \"mode\", value: \"value\" }, host: { attributes: { \"role\": \"progressbar\", \"tabindex\": \"-1\" }, properties: { \"class._mat-animation-noopable\": \"_noopAnimations\", \"style.width.px\": \"diameter\", \"style.height.px\": \"diameter\", \"attr.aria-valuemin\": \"mode === \\\"determinate\\\" ? 0 : null\", \"attr.aria-valuemax\": \"mode === \\\"determinate\\\" ? 100 : null\", \"attr.aria-valuenow\": \"mode === \\\"determinate\\\" ? value : null\", \"attr.mode\": \"mode\" }, classAttribute: \"mat-progress-spinner mat-spinner\" }, exportAs: [\"matProgressSpinner\"], usesInheritance: true, ngImport: i0, template: \"\\n\\n\\n\\n \\n \\n\\n \\n\\n\", styles: [\".mat-progress-spinner{display:block;position:relative;overflow:hidden}.mat-progress-spinner svg{position:absolute;transform:rotate(-90deg);top:0;left:0;transform-origin:center;overflow:visible}.mat-progress-spinner circle{fill:transparent;transition:stroke-dashoffset 225ms linear}._mat-animation-noopable.mat-progress-spinner circle{transition:none;animation:none}.cdk-high-contrast-active .mat-progress-spinner circle{stroke:CanvasText}.mat-progress-spinner.mat-progress-spinner-indeterminate-animation[mode=indeterminate] svg{animation:mat-progress-spinner-linear-rotate 2000ms linear infinite}._mat-animation-noopable.mat-progress-spinner.mat-progress-spinner-indeterminate-animation[mode=indeterminate] svg{transition:none;animation:none}.mat-progress-spinner.mat-progress-spinner-indeterminate-animation[mode=indeterminate] circle{transition-property:stroke;animation-duration:4000ms;animation-timing-function:cubic-bezier(0.35, 0, 0.25, 1);animation-iteration-count:infinite}._mat-animation-noopable.mat-progress-spinner.mat-progress-spinner-indeterminate-animation[mode=indeterminate] circle{transition:none;animation:none}@keyframes mat-progress-spinner-linear-rotate{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}@keyframes mat-progress-spinner-stroke-rotate-100{0%{stroke-dashoffset:268.606171575px;transform:rotate(0)}12.5%{stroke-dashoffset:56.5486677px;transform:rotate(0)}12.5001%{stroke-dashoffset:56.5486677px;transform:rotateX(180deg) rotate(72.5deg)}25%{stroke-dashoffset:268.606171575px;transform:rotateX(180deg) rotate(72.5deg)}25.0001%{stroke-dashoffset:268.606171575px;transform:rotate(270deg)}37.5%{stroke-dashoffset:56.5486677px;transform:rotate(270deg)}37.5001%{stroke-dashoffset:56.5486677px;transform:rotateX(180deg) rotate(161.5deg)}50%{stroke-dashoffset:268.606171575px;transform:rotateX(180deg) rotate(161.5deg)}50.0001%{stroke-dashoffset:268.606171575px;transform:rotate(180deg)}62.5%{stroke-dashoffset:56.5486677px;transform:rotate(180deg)}62.5001%{stroke-dashoffset:56.5486677px;transform:rotateX(180deg) rotate(251.5deg)}75%{stroke-dashoffset:268.606171575px;transform:rotateX(180deg) rotate(251.5deg)}75.0001%{stroke-dashoffset:268.606171575px;transform:rotate(90deg)}87.5%{stroke-dashoffset:56.5486677px;transform:rotate(90deg)}87.5001%{stroke-dashoffset:56.5486677px;transform:rotateX(180deg) rotate(341.5deg)}100%{stroke-dashoffset:268.606171575px;transform:rotateX(180deg) rotate(341.5deg)}}\\n\"], directives: [{ type: i3.NgSwitch, selector: \"[ngSwitch]\", inputs: [\"ngSwitch\"] }, { type: i3.NgSwitchCase, selector: \"[ngSwitchCase]\", inputs: [\"ngSwitchCase\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatProgressSpinner, decorators: [{\n type: Component,\n args: [{ selector: 'mat-progress-spinner, mat-spinner', exportAs: 'matProgressSpinner', host: {\n 'role': 'progressbar',\n // `mat-spinner` is here for backward compatibility.\n 'class': 'mat-progress-spinner mat-spinner',\n // set tab index to -1 so screen readers will read the aria-label\n // Note: there is a known issue with JAWS that does not read progressbar aria labels on FireFox\n 'tabindex': '-1',\n '[class._mat-animation-noopable]': `_noopAnimations`,\n '[style.width.px]': 'diameter',\n '[style.height.px]': 'diameter',\n '[attr.aria-valuemin]': 'mode === \"determinate\" ? 0 : null',\n '[attr.aria-valuemax]': 'mode === \"determinate\" ? 100 : null',\n '[attr.aria-valuenow]': 'mode === \"determinate\" ? value : null',\n '[attr.mode]': 'mode',\n }, inputs: ['color'], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: \"\\n\\n\\n\\n \\n \\n\\n \\n\\n\", styles: [\".mat-progress-spinner{display:block;position:relative;overflow:hidden}.mat-progress-spinner svg{position:absolute;transform:rotate(-90deg);top:0;left:0;transform-origin:center;overflow:visible}.mat-progress-spinner circle{fill:transparent;transition:stroke-dashoffset 225ms linear}._mat-animation-noopable.mat-progress-spinner circle{transition:none;animation:none}.cdk-high-contrast-active .mat-progress-spinner circle{stroke:CanvasText}.mat-progress-spinner.mat-progress-spinner-indeterminate-animation[mode=indeterminate] svg{animation:mat-progress-spinner-linear-rotate 2000ms linear infinite}._mat-animation-noopable.mat-progress-spinner.mat-progress-spinner-indeterminate-animation[mode=indeterminate] svg{transition:none;animation:none}.mat-progress-spinner.mat-progress-spinner-indeterminate-animation[mode=indeterminate] circle{transition-property:stroke;animation-duration:4000ms;animation-timing-function:cubic-bezier(0.35, 0, 0.25, 1);animation-iteration-count:infinite}._mat-animation-noopable.mat-progress-spinner.mat-progress-spinner-indeterminate-animation[mode=indeterminate] circle{transition:none;animation:none}@keyframes mat-progress-spinner-linear-rotate{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}@keyframes mat-progress-spinner-stroke-rotate-100{0%{stroke-dashoffset:268.606171575px;transform:rotate(0)}12.5%{stroke-dashoffset:56.5486677px;transform:rotate(0)}12.5001%{stroke-dashoffset:56.5486677px;transform:rotateX(180deg) rotate(72.5deg)}25%{stroke-dashoffset:268.606171575px;transform:rotateX(180deg) rotate(72.5deg)}25.0001%{stroke-dashoffset:268.606171575px;transform:rotate(270deg)}37.5%{stroke-dashoffset:56.5486677px;transform:rotate(270deg)}37.5001%{stroke-dashoffset:56.5486677px;transform:rotateX(180deg) rotate(161.5deg)}50%{stroke-dashoffset:268.606171575px;transform:rotateX(180deg) rotate(161.5deg)}50.0001%{stroke-dashoffset:268.606171575px;transform:rotate(180deg)}62.5%{stroke-dashoffset:56.5486677px;transform:rotate(180deg)}62.5001%{stroke-dashoffset:56.5486677px;transform:rotateX(180deg) rotate(251.5deg)}75%{stroke-dashoffset:268.606171575px;transform:rotateX(180deg) rotate(251.5deg)}75.0001%{stroke-dashoffset:268.606171575px;transform:rotate(90deg)}87.5%{stroke-dashoffset:56.5486677px;transform:rotate(90deg)}87.5001%{stroke-dashoffset:56.5486677px;transform:rotateX(180deg) rotate(341.5deg)}100%{stroke-dashoffset:268.606171575px;transform:rotateX(180deg) rotate(341.5deg)}}\\n\"] }]\n }], ctorParameters: function () {\n return [{ type: i0.ElementRef }, { type: i1.Platform }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }, { type: undefined, decorators: [{\n type: Inject,\n args: [MAT_PROGRESS_SPINNER_DEFAULT_OPTIONS]\n }] }, { type: i0.ChangeDetectorRef }, { type: i2.ViewportRuler }, { type: i0.NgZone }];\n }, propDecorators: { diameter: [{\n type: Input\n }], strokeWidth: [{\n type: Input\n }], mode: [{\n type: Input\n }], value: [{\n type: Input\n }] } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass MatProgressSpinnerModule {\n}\nMatProgressSpinnerModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatProgressSpinnerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nMatProgressSpinnerModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatProgressSpinnerModule, declarations: [MatProgressSpinner], imports: [MatCommonModule, CommonModule], exports: [MatProgressSpinner, MatCommonModule] });\nMatProgressSpinnerModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatProgressSpinnerModule, imports: [[MatCommonModule, CommonModule], MatCommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatProgressSpinnerModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [MatCommonModule, CommonModule],\n exports: [MatProgressSpinner, MatCommonModule],\n declarations: [MatProgressSpinner],\n }]\n }] });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * @deprecated Import `MatProgressSpinner` instead. Note that the\n * `mat-spinner` selector isn't deprecated.\n * @breaking-change 8.0.0\n */\n// tslint:disable-next-line:variable-name\nconst MatSpinner = MatProgressSpinner;\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_PROGRESS_SPINNER_DEFAULT_OPTIONS, MAT_PROGRESS_SPINNER_DEFAULT_OPTIONS_FACTORY, MatProgressSpinner, MatProgressSpinnerModule, MatSpinner };\n","import * as i1 from '@angular/cdk/scrolling';\nimport { CdkScrollable, CdkScrollableModule } from '@angular/cdk/scrolling';\nimport * as i5 from '@angular/common';\nimport { DOCUMENT, CommonModule } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { InjectionToken, forwardRef, Component, ChangeDetectionStrategy, ViewEncapsulation, Inject, EventEmitter, Optional, Input, Output, ViewChild, QueryList, ContentChildren, ContentChild, NgModule } from '@angular/core';\nimport { MatCommonModule } from '@angular/material/core';\nimport { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';\nimport { ESCAPE, hasModifierKey } from '@angular/cdk/keycodes';\nimport { Subject, fromEvent, merge } from 'rxjs';\nimport { filter, map, mapTo, takeUntil, distinctUntilChanged, take, startWith, debounceTime } from 'rxjs/operators';\nimport { trigger, state, style, transition, animate } from '@angular/animations';\nimport { ANIMATION_MODULE_TYPE } from '@angular/platform-browser/animations';\nimport * as i2 from '@angular/cdk/a11y';\nimport * as i3 from '@angular/cdk/platform';\nimport * as i4 from '@angular/cdk/bidi';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Animations used by the Material drawers.\n * @docs-private\n */\nconst matDrawerAnimations = {\n /** Animation that slides a drawer in and out. */\n transformDrawer: trigger('transform', [\n // We remove the `transform` here completely, rather than setting it to zero, because:\n // 1. Having a transform can cause elements with ripples or an animated\n // transform to shift around in Chrome with an RTL layout (see #10023).\n // 2. 3d transforms causes text to appear blurry on IE and Edge.\n state('open, open-instant', style({\n 'transform': 'none',\n 'visibility': 'visible',\n })),\n state('void', style({\n // Avoids the shadow showing up when closed in SSR.\n 'box-shadow': 'none',\n 'visibility': 'hidden',\n })),\n transition('void => open-instant', animate('0ms')),\n transition('void <=> open, open-instant => void', animate('400ms cubic-bezier(0.25, 0.8, 0.25, 1)')),\n ]),\n};\n\n/**\n * Throws an exception when two MatDrawer are matching the same position.\n * @docs-private\n */\nfunction throwMatDuplicatedDrawerError(position) {\n throw Error(`A drawer was already declared for 'position=\"${position}\"'`);\n}\n/** Configures whether drawers should use auto sizing by default. */\nconst MAT_DRAWER_DEFAULT_AUTOSIZE = new InjectionToken('MAT_DRAWER_DEFAULT_AUTOSIZE', {\n providedIn: 'root',\n factory: MAT_DRAWER_DEFAULT_AUTOSIZE_FACTORY,\n});\n/**\n * Used to provide a drawer container to a drawer while avoiding circular references.\n * @docs-private\n */\nconst MAT_DRAWER_CONTAINER = new InjectionToken('MAT_DRAWER_CONTAINER');\n/** @docs-private */\nfunction MAT_DRAWER_DEFAULT_AUTOSIZE_FACTORY() {\n return false;\n}\nclass MatDrawerContent extends CdkScrollable {\n constructor(_changeDetectorRef, _container, elementRef, scrollDispatcher, ngZone) {\n super(elementRef, scrollDispatcher, ngZone);\n this._changeDetectorRef = _changeDetectorRef;\n this._container = _container;\n }\n ngAfterContentInit() {\n this._container._contentMarginChanges.subscribe(() => {\n this._changeDetectorRef.markForCheck();\n });\n }\n}\nMatDrawerContent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatDrawerContent, deps: [{ token: i0.ChangeDetectorRef }, { token: forwardRef(() => MatDrawerContainer) }, { token: i0.ElementRef }, { token: i1.ScrollDispatcher }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });\nMatDrawerContent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"13.2.0\", type: MatDrawerContent, selector: \"mat-drawer-content\", host: { properties: { \"style.margin-left.px\": \"_container._contentMargins.left\", \"style.margin-right.px\": \"_container._contentMargins.right\" }, classAttribute: \"mat-drawer-content\" }, providers: [\n {\n provide: CdkScrollable,\n useExisting: MatDrawerContent,\n },\n ], usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatDrawerContent, decorators: [{\n type: Component,\n args: [{\n selector: 'mat-drawer-content',\n template: '',\n host: {\n 'class': 'mat-drawer-content',\n '[style.margin-left.px]': '_container._contentMargins.left',\n '[style.margin-right.px]': '_container._contentMargins.right',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: CdkScrollable,\n useExisting: MatDrawerContent,\n },\n ],\n }]\n }], ctorParameters: function () {\n return [{ type: i0.ChangeDetectorRef }, { type: MatDrawerContainer, decorators: [{\n type: Inject,\n args: [forwardRef(() => MatDrawerContainer)]\n }] }, { type: i0.ElementRef }, { type: i1.ScrollDispatcher }, { type: i0.NgZone }];\n } });\n/**\n * This component corresponds to a drawer that can be opened on the drawer container.\n */\nclass MatDrawer {\n constructor(_elementRef, _focusTrapFactory, _focusMonitor, _platform, _ngZone, _interactivityChecker, _doc, _container) {\n this._elementRef = _elementRef;\n this._focusTrapFactory = _focusTrapFactory;\n this._focusMonitor = _focusMonitor;\n this._platform = _platform;\n this._ngZone = _ngZone;\n this._interactivityChecker = _interactivityChecker;\n this._doc = _doc;\n this._container = _container;\n this._elementFocusedBeforeDrawerWasOpened = null;\n /** Whether the drawer is initialized. Used for disabling the initial animation. */\n this._enableAnimations = false;\n this._position = 'start';\n this._mode = 'over';\n this._disableClose = false;\n this._opened = false;\n /** Emits whenever the drawer has started animating. */\n this._animationStarted = new Subject();\n /** Emits whenever the drawer is done animating. */\n this._animationEnd = new Subject();\n /** Current state of the sidenav animation. */\n this._animationState = 'void';\n /** Event emitted when the drawer open state is changed. */\n this.openedChange =\n // Note this has to be async in order to avoid some issues with two-bindings (see #8872).\n new EventEmitter(/* isAsync */ true);\n /** Event emitted when the drawer has been opened. */\n this._openedStream = this.openedChange.pipe(filter(o => o), map(() => { }));\n /** Event emitted when the drawer has started opening. */\n this.openedStart = this._animationStarted.pipe(filter(e => e.fromState !== e.toState && e.toState.indexOf('open') === 0), mapTo(undefined));\n /** Event emitted when the drawer has been closed. */\n this._closedStream = this.openedChange.pipe(filter(o => !o), map(() => { }));\n /** Event emitted when the drawer has started closing. */\n this.closedStart = this._animationStarted.pipe(filter(e => e.fromState !== e.toState && e.toState === 'void'), mapTo(undefined));\n /** Emits when the component is destroyed. */\n this._destroyed = new Subject();\n /** Event emitted when the drawer's position changes. */\n // tslint:disable-next-line:no-output-on-prefix\n this.onPositionChanged = new EventEmitter();\n /**\n * An observable that emits when the drawer mode changes. This is used by the drawer container to\n * to know when to when the mode changes so it can adapt the margins on the content.\n */\n this._modeChanged = new Subject();\n this.openedChange.subscribe((opened) => {\n if (opened) {\n if (this._doc) {\n this._elementFocusedBeforeDrawerWasOpened = this._doc.activeElement;\n }\n this._takeFocus();\n }\n else if (this._isFocusWithinDrawer()) {\n this._restoreFocus(this._openedVia || 'program');\n }\n });\n /**\n * Listen to `keydown` events outside the zone so that change detection is not run every\n * time a key is pressed. Instead we re-enter the zone only if the `ESC` key is pressed\n * and we don't have close disabled.\n */\n this._ngZone.runOutsideAngular(() => {\n fromEvent(this._elementRef.nativeElement, 'keydown')\n .pipe(filter(event => {\n return event.keyCode === ESCAPE && !this.disableClose && !hasModifierKey(event);\n }), takeUntil(this._destroyed))\n .subscribe(event => this._ngZone.run(() => {\n this.close();\n event.stopPropagation();\n event.preventDefault();\n }));\n });\n // We need a Subject with distinctUntilChanged, because the `done` event\n // fires twice on some browsers. See https://github.com/angular/angular/issues/24084\n this._animationEnd\n .pipe(distinctUntilChanged((x, y) => {\n return x.fromState === y.fromState && x.toState === y.toState;\n }))\n .subscribe((event) => {\n const { fromState, toState } = event;\n if ((toState.indexOf('open') === 0 && fromState === 'void') ||\n (toState === 'void' && fromState.indexOf('open') === 0)) {\n this.openedChange.emit(this._opened);\n }\n });\n }\n /** The side that the drawer is attached to. */\n get position() {\n return this._position;\n }\n set position(value) {\n // Make sure we have a valid value.\n value = value === 'end' ? 'end' : 'start';\n if (value !== this._position) {\n // Static inputs in Ivy are set before the element is in the DOM.\n if (this._isAttached) {\n this._updatePositionInParent(value);\n }\n this._position = value;\n this.onPositionChanged.emit();\n }\n }\n /** Mode of the drawer; one of 'over', 'push' or 'side'. */\n get mode() {\n return this._mode;\n }\n set mode(value) {\n this._mode = value;\n this._updateFocusTrapState();\n this._modeChanged.next();\n }\n /** Whether the drawer can be closed with the escape key or by clicking on the backdrop. */\n get disableClose() {\n return this._disableClose;\n }\n set disableClose(value) {\n this._disableClose = coerceBooleanProperty(value);\n }\n /**\n * Whether the drawer should focus the first focusable element automatically when opened.\n * Defaults to false in when `mode` is set to `side`, otherwise defaults to `true`. If explicitly\n * enabled, focus will be moved into the sidenav in `side` mode as well.\n * @breaking-change 14.0.0 Remove boolean option from autoFocus. Use string or AutoFocusTarget\n * instead.\n */\n get autoFocus() {\n const value = this._autoFocus;\n // Note that usually we don't allow autoFocus to be set to `first-tabbable` in `side` mode,\n // because we don't know how the sidenav is being used, but in some cases it still makes\n // sense to do it. The consumer can explicitly set `autoFocus`.\n if (value == null) {\n if (this.mode === 'side') {\n return 'dialog';\n }\n else {\n return 'first-tabbable';\n }\n }\n return value;\n }\n set autoFocus(value) {\n if (value === 'true' || value === 'false' || value == null) {\n value = coerceBooleanProperty(value);\n }\n this._autoFocus = value;\n }\n /**\n * Whether the drawer is opened. We overload this because we trigger an event when it\n * starts or end.\n */\n get opened() {\n return this._opened;\n }\n set opened(value) {\n this.toggle(coerceBooleanProperty(value));\n }\n /**\n * Focuses the provided element. If the element is not focusable, it will add a tabIndex\n * attribute to forcefully focus it. The attribute is removed after focus is moved.\n * @param element The element to focus.\n */\n _forceFocus(element, options) {\n if (!this._interactivityChecker.isFocusable(element)) {\n element.tabIndex = -1;\n // The tabindex attribute should be removed to avoid navigating to that element again\n this._ngZone.runOutsideAngular(() => {\n element.addEventListener('blur', () => element.removeAttribute('tabindex'));\n element.addEventListener('mousedown', () => element.removeAttribute('tabindex'));\n });\n }\n element.focus(options);\n }\n /**\n * Focuses the first element that matches the given selector within the focus trap.\n * @param selector The CSS selector for the element to set focus to.\n */\n _focusByCssSelector(selector, options) {\n let elementToFocus = this._elementRef.nativeElement.querySelector(selector);\n if (elementToFocus) {\n this._forceFocus(elementToFocus, options);\n }\n }\n /**\n * Moves focus into the drawer. Note that this works even if\n * the focus trap is disabled in `side` mode.\n */\n _takeFocus() {\n if (!this._focusTrap) {\n return;\n }\n const element = this._elementRef.nativeElement;\n // When autoFocus is not on the sidenav, if the element cannot be focused or does\n // not exist, focus the sidenav itself so the keyboard navigation still works.\n // We need to check that `focus` is a function due to Universal.\n switch (this.autoFocus) {\n case false:\n case 'dialog':\n return;\n case true:\n case 'first-tabbable':\n this._focusTrap.focusInitialElementWhenReady().then(hasMovedFocus => {\n if (!hasMovedFocus && typeof this._elementRef.nativeElement.focus === 'function') {\n element.focus();\n }\n });\n break;\n case 'first-heading':\n this._focusByCssSelector('h1, h2, h3, h4, h5, h6, [role=\"heading\"]');\n break;\n default:\n this._focusByCssSelector(this.autoFocus);\n break;\n }\n }\n /**\n * Restores focus to the element that was originally focused when the drawer opened.\n * If no element was focused at that time, the focus will be restored to the drawer.\n */\n _restoreFocus(focusOrigin) {\n if (this.autoFocus === 'dialog') {\n return;\n }\n if (this._elementFocusedBeforeDrawerWasOpened) {\n this._focusMonitor.focusVia(this._elementFocusedBeforeDrawerWasOpened, focusOrigin);\n }\n else {\n this._elementRef.nativeElement.blur();\n }\n this._elementFocusedBeforeDrawerWasOpened = null;\n }\n /** Whether focus is currently within the drawer. */\n _isFocusWithinDrawer() {\n const activeEl = this._doc.activeElement;\n return !!activeEl && this._elementRef.nativeElement.contains(activeEl);\n }\n ngAfterViewInit() {\n this._isAttached = true;\n this._focusTrap = this._focusTrapFactory.create(this._elementRef.nativeElement);\n this._updateFocusTrapState();\n // Only update the DOM position when the sidenav is positioned at\n // the end since we project the sidenav before the content by default.\n if (this._position === 'end') {\n this._updatePositionInParent('end');\n }\n }\n ngAfterContentChecked() {\n // Enable the animations after the lifecycle hooks have run, in order to avoid animating\n // drawers that are open by default. When we're on the server, we shouldn't enable the\n // animations, because we don't want the drawer to animate the first time the user sees\n // the page.\n if (this._platform.isBrowser) {\n this._enableAnimations = true;\n }\n }\n ngOnDestroy() {\n var _a;\n if (this._focusTrap) {\n this._focusTrap.destroy();\n }\n (_a = this._anchor) === null || _a === void 0 ? void 0 : _a.remove();\n this._anchor = null;\n this._animationStarted.complete();\n this._animationEnd.complete();\n this._modeChanged.complete();\n this._destroyed.next();\n this._destroyed.complete();\n }\n /**\n * Open the drawer.\n * @param openedVia Whether the drawer was opened by a key press, mouse click or programmatically.\n * Used for focus management after the sidenav is closed.\n */\n open(openedVia) {\n return this.toggle(true, openedVia);\n }\n /** Close the drawer. */\n close() {\n return this.toggle(false);\n }\n /** Closes the drawer with context that the backdrop was clicked. */\n _closeViaBackdropClick() {\n // If the drawer is closed upon a backdrop click, we always want to restore focus. We\n // don't need to check whether focus is currently in the drawer, as clicking on the\n // backdrop causes blurs the active element.\n return this._setOpen(/* isOpen */ false, /* restoreFocus */ true, 'mouse');\n }\n /**\n * Toggle this drawer.\n * @param isOpen Whether the drawer should be open.\n * @param openedVia Whether the drawer was opened by a key press, mouse click or programmatically.\n * Used for focus management after the sidenav is closed.\n */\n toggle(isOpen = !this.opened, openedVia) {\n // If the focus is currently inside the drawer content and we are closing the drawer,\n // restore the focus to the initially focused element (when the drawer opened).\n if (isOpen && openedVia) {\n this._openedVia = openedVia;\n }\n const result = this._setOpen(isOpen, \n /* restoreFocus */ !isOpen && this._isFocusWithinDrawer(), this._openedVia || 'program');\n if (!isOpen) {\n this._openedVia = null;\n }\n return result;\n }\n /**\n * Toggles the opened state of the drawer.\n * @param isOpen Whether the drawer should open or close.\n * @param restoreFocus Whether focus should be restored on close.\n * @param focusOrigin Origin to use when restoring focus.\n */\n _setOpen(isOpen, restoreFocus, focusOrigin) {\n this._opened = isOpen;\n if (isOpen) {\n this._animationState = this._enableAnimations ? 'open' : 'open-instant';\n }\n else {\n this._animationState = 'void';\n if (restoreFocus) {\n this._restoreFocus(focusOrigin);\n }\n }\n this._updateFocusTrapState();\n return new Promise(resolve => {\n this.openedChange.pipe(take(1)).subscribe(open => resolve(open ? 'open' : 'close'));\n });\n }\n _getWidth() {\n return this._elementRef.nativeElement ? this._elementRef.nativeElement.offsetWidth || 0 : 0;\n }\n /** Updates the enabled state of the focus trap. */\n _updateFocusTrapState() {\n if (this._focusTrap) {\n // The focus trap is only enabled when the drawer is open in any mode other than side.\n this._focusTrap.enabled = this.opened && this.mode !== 'side';\n }\n }\n /**\n * Updates the position of the drawer in the DOM. We need to move the element around ourselves\n * when it's in the `end` position so that it comes after the content and the visual order\n * matches the tab order. We also need to be able to move it back to `start` if the sidenav\n * started off as `end` and was changed to `start`.\n */\n _updatePositionInParent(newPosition) {\n const element = this._elementRef.nativeElement;\n const parent = element.parentNode;\n if (newPosition === 'end') {\n if (!this._anchor) {\n this._anchor = this._doc.createComment('mat-drawer-anchor');\n parent.insertBefore(this._anchor, element);\n }\n parent.appendChild(element);\n }\n else if (this._anchor) {\n this._anchor.parentNode.insertBefore(element, this._anchor);\n }\n }\n}\nMatDrawer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatDrawer, deps: [{ token: i0.ElementRef }, { token: i2.FocusTrapFactory }, { token: i2.FocusMonitor }, { token: i3.Platform }, { token: i0.NgZone }, { token: i2.InteractivityChecker }, { token: DOCUMENT, optional: true }, { token: MAT_DRAWER_CONTAINER, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nMatDrawer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"13.2.0\", type: MatDrawer, selector: \"mat-drawer\", inputs: { position: \"position\", mode: \"mode\", disableClose: \"disableClose\", autoFocus: \"autoFocus\", opened: \"opened\" }, outputs: { openedChange: \"openedChange\", _openedStream: \"opened\", openedStart: \"openedStart\", _closedStream: \"closed\", closedStart: \"closedStart\", onPositionChanged: \"positionChanged\" }, host: { attributes: { \"tabIndex\": \"-1\" }, listeners: { \"@transform.start\": \"_animationStarted.next($event)\", \"@transform.done\": \"_animationEnd.next($event)\" }, properties: { \"attr.align\": \"null\", \"class.mat-drawer-end\": \"position === \\\"end\\\"\", \"class.mat-drawer-over\": \"mode === \\\"over\\\"\", \"class.mat-drawer-push\": \"mode === \\\"push\\\"\", \"class.mat-drawer-side\": \"mode === \\\"side\\\"\", \"class.mat-drawer-opened\": \"opened\", \"@transform\": \"_animationState\" }, classAttribute: \"mat-drawer\" }, viewQueries: [{ propertyName: \"_content\", first: true, predicate: [\"content\"], descendants: true }], exportAs: [\"matDrawer\"], ngImport: i0, template: \"
\\r\\n \\r\\n
\\r\\n\", directives: [{ type: i1.CdkScrollable, selector: \"[cdk-scrollable], [cdkScrollable]\" }], animations: [matDrawerAnimations.transformDrawer], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatDrawer, decorators: [{\n type: Component,\n args: [{ selector: 'mat-drawer', exportAs: 'matDrawer', animations: [matDrawerAnimations.transformDrawer], host: {\n 'class': 'mat-drawer',\n // must prevent the browser from aligning text based on value\n '[attr.align]': 'null',\n '[class.mat-drawer-end]': 'position === \"end\"',\n '[class.mat-drawer-over]': 'mode === \"over\"',\n '[class.mat-drawer-push]': 'mode === \"push\"',\n '[class.mat-drawer-side]': 'mode === \"side\"',\n '[class.mat-drawer-opened]': 'opened',\n 'tabIndex': '-1',\n '[@transform]': '_animationState',\n '(@transform.start)': '_animationStarted.next($event)',\n '(@transform.done)': '_animationEnd.next($event)',\n }, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: \"
\\r\\n \\r\\n
\\r\\n\" }]\n }], ctorParameters: function () {\n return [{ type: i0.ElementRef }, { type: i2.FocusTrapFactory }, { type: i2.FocusMonitor }, { type: i3.Platform }, { type: i0.NgZone }, { type: i2.InteractivityChecker }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: MatDrawerContainer, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_DRAWER_CONTAINER]\n }] }];\n }, propDecorators: { position: [{\n type: Input\n }], mode: [{\n type: Input\n }], disableClose: [{\n type: Input\n }], autoFocus: [{\n type: Input\n }], opened: [{\n type: Input\n }], openedChange: [{\n type: Output\n }], _openedStream: [{\n type: Output,\n args: ['opened']\n }], openedStart: [{\n type: Output\n }], _closedStream: [{\n type: Output,\n args: ['closed']\n }], closedStart: [{\n type: Output\n }], onPositionChanged: [{\n type: Output,\n args: ['positionChanged']\n }], _content: [{\n type: ViewChild,\n args: ['content']\n }] } });\n/**\n * `` component.\n *\n * This is the parent component to one or two ``s that validates the state internally\n * and coordinates the backdrop and content styling.\n */\nclass MatDrawerContainer {\n constructor(_dir, _element, _ngZone, _changeDetectorRef, viewportRuler, defaultAutosize = false, _animationMode) {\n this._dir = _dir;\n this._element = _element;\n this._ngZone = _ngZone;\n this._changeDetectorRef = _changeDetectorRef;\n this._animationMode = _animationMode;\n /** Drawers that belong to this container. */\n this._drawers = new QueryList();\n /** Event emitted when the drawer backdrop is clicked. */\n this.backdropClick = new EventEmitter();\n /** Emits when the component is destroyed. */\n this._destroyed = new Subject();\n /** Emits on every ngDoCheck. Used for debouncing reflows. */\n this._doCheckSubject = new Subject();\n /**\n * Margins to be applied to the content. These are used to push / shrink the drawer content when a\n * drawer is open. We use margin rather than transform even for push mode because transform breaks\n * fixed position elements inside of the transformed element.\n */\n this._contentMargins = { left: null, right: null };\n this._contentMarginChanges = new Subject();\n // If a `Dir` directive exists up the tree, listen direction changes\n // and update the left/right properties to point to the proper start/end.\n if (_dir) {\n _dir.change.pipe(takeUntil(this._destroyed)).subscribe(() => {\n this._validateDrawers();\n this.updateContentMargins();\n });\n }\n // Since the minimum width of the sidenav depends on the viewport width,\n // we need to recompute the margins if the viewport changes.\n viewportRuler\n .change()\n .pipe(takeUntil(this._destroyed))\n .subscribe(() => this.updateContentMargins());\n this._autosize = defaultAutosize;\n }\n /** The drawer child with the `start` position. */\n get start() {\n return this._start;\n }\n /** The drawer child with the `end` position. */\n get end() {\n return this._end;\n }\n /**\n * Whether to automatically resize the container whenever\n * the size of any of its drawers changes.\n *\n * **Use at your own risk!** Enabling this option can cause layout thrashing by measuring\n * the drawers on every change detection cycle. Can be configured globally via the\n * `MAT_DRAWER_DEFAULT_AUTOSIZE` token.\n */\n get autosize() {\n return this._autosize;\n }\n set autosize(value) {\n this._autosize = coerceBooleanProperty(value);\n }\n /**\n * Whether the drawer container should have a backdrop while one of the sidenavs is open.\n * If explicitly set to `true`, the backdrop will be enabled for drawers in the `side`\n * mode as well.\n */\n get hasBackdrop() {\n if (this._backdropOverride == null) {\n return !this._start || this._start.mode !== 'side' || !this._end || this._end.mode !== 'side';\n }\n return this._backdropOverride;\n }\n set hasBackdrop(value) {\n this._backdropOverride = value == null ? null : coerceBooleanProperty(value);\n }\n /** Reference to the CdkScrollable instance that wraps the scrollable content. */\n get scrollable() {\n return this._userContent || this._content;\n }\n ngAfterContentInit() {\n this._allDrawers.changes\n .pipe(startWith(this._allDrawers), takeUntil(this._destroyed))\n .subscribe((drawer) => {\n this._drawers.reset(drawer.filter(item => !item._container || item._container === this));\n this._drawers.notifyOnChanges();\n });\n this._drawers.changes.pipe(startWith(null)).subscribe(() => {\n this._validateDrawers();\n this._drawers.forEach((drawer) => {\n this._watchDrawerToggle(drawer);\n this._watchDrawerPosition(drawer);\n this._watchDrawerMode(drawer);\n });\n if (!this._drawers.length ||\n this._isDrawerOpen(this._start) ||\n this._isDrawerOpen(this._end)) {\n this.updateContentMargins();\n }\n this._changeDetectorRef.markForCheck();\n });\n // Avoid hitting the NgZone through the debounce timeout.\n this._ngZone.runOutsideAngular(() => {\n this._doCheckSubject\n .pipe(debounceTime(10), // Arbitrary debounce time, less than a frame at 60fps\n takeUntil(this._destroyed))\n .subscribe(() => this.updateContentMargins());\n });\n }\n ngOnDestroy() {\n this._contentMarginChanges.complete();\n this._doCheckSubject.complete();\n this._drawers.destroy();\n this._destroyed.next();\n this._destroyed.complete();\n }\n /** Calls `open` of both start and end drawers */\n open() {\n this._drawers.forEach(drawer => drawer.open());\n }\n /** Calls `close` of both start and end drawers */\n close() {\n this._drawers.forEach(drawer => drawer.close());\n }\n /**\n * Recalculates and updates the inline styles for the content. Note that this should be used\n * sparingly, because it causes a reflow.\n */\n updateContentMargins() {\n // 1. For drawers in `over` mode, they don't affect the content.\n // 2. For drawers in `side` mode they should shrink the content. We do this by adding to the\n // left margin (for left drawer) or right margin (for right the drawer).\n // 3. For drawers in `push` mode the should shift the content without resizing it. We do this by\n // adding to the left or right margin and simultaneously subtracting the same amount of\n // margin from the other side.\n let left = 0;\n let right = 0;\n if (this._left && this._left.opened) {\n if (this._left.mode == 'side') {\n left += this._left._getWidth();\n }\n else if (this._left.mode == 'push') {\n const width = this._left._getWidth();\n left += width;\n right -= width;\n }\n }\n if (this._right && this._right.opened) {\n if (this._right.mode == 'side') {\n right += this._right._getWidth();\n }\n else if (this._right.mode == 'push') {\n const width = this._right._getWidth();\n right += width;\n left -= width;\n }\n }\n // If either `right` or `left` is zero, don't set a style to the element. This\n // allows users to specify a custom size via CSS class in SSR scenarios where the\n // measured widths will always be zero. Note that we reset to `null` here, rather\n // than below, in order to ensure that the types in the `if` below are consistent.\n left = left || null;\n right = right || null;\n if (left !== this._contentMargins.left || right !== this._contentMargins.right) {\n this._contentMargins = { left, right };\n // Pull back into the NgZone since in some cases we could be outside. We need to be careful\n // to do it only when something changed, otherwise we can end up hitting the zone too often.\n this._ngZone.run(() => this._contentMarginChanges.next(this._contentMargins));\n }\n }\n ngDoCheck() {\n // If users opted into autosizing, do a check every change detection cycle.\n if (this._autosize && this._isPushed()) {\n // Run outside the NgZone, otherwise the debouncer will throw us into an infinite loop.\n this._ngZone.runOutsideAngular(() => this._doCheckSubject.next());\n }\n }\n /**\n * Subscribes to drawer events in order to set a class on the main container element when the\n * drawer is open and the backdrop is visible. This ensures any overflow on the container element\n * is properly hidden.\n */\n _watchDrawerToggle(drawer) {\n drawer._animationStarted\n .pipe(filter((event) => event.fromState !== event.toState), takeUntil(this._drawers.changes))\n .subscribe((event) => {\n // Set the transition class on the container so that the animations occur. This should not\n // be set initially because animations should only be triggered via a change in state.\n if (event.toState !== 'open-instant' && this._animationMode !== 'NoopAnimations') {\n this._element.nativeElement.classList.add('mat-drawer-transition');\n }\n this.updateContentMargins();\n this._changeDetectorRef.markForCheck();\n });\n if (drawer.mode !== 'side') {\n drawer.openedChange\n .pipe(takeUntil(this._drawers.changes))\n .subscribe(() => this._setContainerClass(drawer.opened));\n }\n }\n /**\n * Subscribes to drawer onPositionChanged event in order to\n * re-validate drawers when the position changes.\n */\n _watchDrawerPosition(drawer) {\n if (!drawer) {\n return;\n }\n // NOTE: We need to wait for the microtask queue to be empty before validating,\n // since both drawers may be swapping positions at the same time.\n drawer.onPositionChanged.pipe(takeUntil(this._drawers.changes)).subscribe(() => {\n this._ngZone.onMicrotaskEmpty.pipe(take(1)).subscribe(() => {\n this._validateDrawers();\n });\n });\n }\n /** Subscribes to changes in drawer mode so we can run change detection. */\n _watchDrawerMode(drawer) {\n if (drawer) {\n drawer._modeChanged\n .pipe(takeUntil(merge(this._drawers.changes, this._destroyed)))\n .subscribe(() => {\n this.updateContentMargins();\n this._changeDetectorRef.markForCheck();\n });\n }\n }\n /** Toggles the 'mat-drawer-opened' class on the main 'mat-drawer-container' element. */\n _setContainerClass(isAdd) {\n const classList = this._element.nativeElement.classList;\n const className = 'mat-drawer-container-has-open';\n if (isAdd) {\n classList.add(className);\n }\n else {\n classList.remove(className);\n }\n }\n /** Validate the state of the drawer children components. */\n _validateDrawers() {\n this._start = this._end = null;\n // Ensure that we have at most one start and one end drawer.\n this._drawers.forEach(drawer => {\n if (drawer.position == 'end') {\n if (this._end != null && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throwMatDuplicatedDrawerError('end');\n }\n this._end = drawer;\n }\n else {\n if (this._start != null && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throwMatDuplicatedDrawerError('start');\n }\n this._start = drawer;\n }\n });\n this._right = this._left = null;\n // Detect if we're LTR or RTL.\n if (this._dir && this._dir.value === 'rtl') {\n this._left = this._end;\n this._right = this._start;\n }\n else {\n this._left = this._start;\n this._right = this._end;\n }\n }\n /** Whether the container is being pushed to the side by one of the drawers. */\n _isPushed() {\n return ((this._isDrawerOpen(this._start) && this._start.mode != 'over') ||\n (this._isDrawerOpen(this._end) && this._end.mode != 'over'));\n }\n _onBackdropClicked() {\n this.backdropClick.emit();\n this._closeModalDrawersViaBackdrop();\n }\n _closeModalDrawersViaBackdrop() {\n // Close all open drawers where closing is not disabled and the mode is not `side`.\n [this._start, this._end]\n .filter(drawer => drawer && !drawer.disableClose && this._canHaveBackdrop(drawer))\n .forEach(drawer => drawer._closeViaBackdropClick());\n }\n _isShowingBackdrop() {\n return ((this._isDrawerOpen(this._start) && this._canHaveBackdrop(this._start)) ||\n (this._isDrawerOpen(this._end) && this._canHaveBackdrop(this._end)));\n }\n _canHaveBackdrop(drawer) {\n return drawer.mode !== 'side' || !!this._backdropOverride;\n }\n _isDrawerOpen(drawer) {\n return drawer != null && drawer.opened;\n }\n}\nMatDrawerContainer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatDrawerContainer, deps: [{ token: i4.Directionality, optional: true }, { token: i0.ElementRef }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i1.ViewportRuler }, { token: MAT_DRAWER_DEFAULT_AUTOSIZE }, { token: ANIMATION_MODULE_TYPE, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nMatDrawerContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"13.2.0\", type: MatDrawerContainer, selector: \"mat-drawer-container\", inputs: { autosize: \"autosize\", hasBackdrop: \"hasBackdrop\" }, outputs: { backdropClick: \"backdropClick\" }, host: { properties: { \"class.mat-drawer-container-explicit-backdrop\": \"_backdropOverride\" }, classAttribute: \"mat-drawer-container\" }, providers: [\n {\n provide: MAT_DRAWER_CONTAINER,\n useExisting: MatDrawerContainer,\n },\n ], queries: [{ propertyName: \"_content\", first: true, predicate: MatDrawerContent, descendants: true }, { propertyName: \"_allDrawers\", predicate: MatDrawer, descendants: true }], viewQueries: [{ propertyName: \"_userContent\", first: true, predicate: MatDrawerContent, descendants: true }], exportAs: [\"matDrawerContainer\"], ngImport: i0, template: \"
\\n\\n\\n\\n\\n\\n\\n \\n\\n\", styles: [\".mat-drawer-container{position:relative;z-index:1;box-sizing:border-box;-webkit-overflow-scrolling:touch;display:block;overflow:hidden}.mat-drawer-container[fullscreen]{top:0;left:0;right:0;bottom:0;position:absolute}.mat-drawer-container[fullscreen].mat-drawer-container-has-open{overflow:hidden}.mat-drawer-container.mat-drawer-container-explicit-backdrop .mat-drawer-side{z-index:3}.mat-drawer-container.ng-animate-disabled .mat-drawer-backdrop,.mat-drawer-container.ng-animate-disabled .mat-drawer-content,.ng-animate-disabled .mat-drawer-container .mat-drawer-backdrop,.ng-animate-disabled .mat-drawer-container .mat-drawer-content{transition:none}.mat-drawer-backdrop{top:0;left:0;right:0;bottom:0;position:absolute;display:block;z-index:3;visibility:hidden}.mat-drawer-backdrop.mat-drawer-shown{visibility:visible}.mat-drawer-transition .mat-drawer-backdrop{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:background-color,visibility}.cdk-high-contrast-active .mat-drawer-backdrop{opacity:.5}.mat-drawer-content{position:relative;z-index:1;display:block;height:100%;overflow:auto}.mat-drawer-transition .mat-drawer-content{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:transform,margin-left,margin-right}.mat-drawer{position:relative;z-index:4;display:block;position:absolute;top:0;bottom:0;z-index:3;outline:0;box-sizing:border-box;overflow-y:auto;transform:translate3d(-100%, 0, 0)}.cdk-high-contrast-active .mat-drawer,.cdk-high-contrast-active [dir=rtl] .mat-drawer.mat-drawer-end{border-right:solid 1px currentColor}.cdk-high-contrast-active [dir=rtl] .mat-drawer,.cdk-high-contrast-active .mat-drawer.mat-drawer-end{border-left:solid 1px currentColor;border-right:none}.mat-drawer.mat-drawer-side{z-index:2}.mat-drawer.mat-drawer-end{right:0;transform:translate3d(100%, 0, 0)}[dir=rtl] .mat-drawer{transform:translate3d(100%, 0, 0)}[dir=rtl] .mat-drawer.mat-drawer-end{left:0;right:auto;transform:translate3d(-100%, 0, 0)}.mat-drawer[style*=\\\"visibility: hidden\\\"]{display:none}.mat-drawer-inner-container{width:100%;height:100%;overflow:auto;-webkit-overflow-scrolling:touch}.mat-sidenav-fixed{position:fixed}\\n\"], components: [{ type: MatDrawerContent, selector: \"mat-drawer-content\" }], directives: [{ type: i5.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatDrawerContainer, decorators: [{\n type: Component,\n args: [{ selector: 'mat-drawer-container', exportAs: 'matDrawerContainer', host: {\n 'class': 'mat-drawer-container',\n '[class.mat-drawer-container-explicit-backdrop]': '_backdropOverride',\n }, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [\n {\n provide: MAT_DRAWER_CONTAINER,\n useExisting: MatDrawerContainer,\n },\n ], template: \"
\\n\\n\\n\\n\\n\\n\\n \\n\\n\", styles: [\".mat-drawer-container{position:relative;z-index:1;box-sizing:border-box;-webkit-overflow-scrolling:touch;display:block;overflow:hidden}.mat-drawer-container[fullscreen]{top:0;left:0;right:0;bottom:0;position:absolute}.mat-drawer-container[fullscreen].mat-drawer-container-has-open{overflow:hidden}.mat-drawer-container.mat-drawer-container-explicit-backdrop .mat-drawer-side{z-index:3}.mat-drawer-container.ng-animate-disabled .mat-drawer-backdrop,.mat-drawer-container.ng-animate-disabled .mat-drawer-content,.ng-animate-disabled .mat-drawer-container .mat-drawer-backdrop,.ng-animate-disabled .mat-drawer-container .mat-drawer-content{transition:none}.mat-drawer-backdrop{top:0;left:0;right:0;bottom:0;position:absolute;display:block;z-index:3;visibility:hidden}.mat-drawer-backdrop.mat-drawer-shown{visibility:visible}.mat-drawer-transition .mat-drawer-backdrop{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:background-color,visibility}.cdk-high-contrast-active .mat-drawer-backdrop{opacity:.5}.mat-drawer-content{position:relative;z-index:1;display:block;height:100%;overflow:auto}.mat-drawer-transition .mat-drawer-content{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:transform,margin-left,margin-right}.mat-drawer{position:relative;z-index:4;display:block;position:absolute;top:0;bottom:0;z-index:3;outline:0;box-sizing:border-box;overflow-y:auto;transform:translate3d(-100%, 0, 0)}.cdk-high-contrast-active .mat-drawer,.cdk-high-contrast-active [dir=rtl] .mat-drawer.mat-drawer-end{border-right:solid 1px currentColor}.cdk-high-contrast-active [dir=rtl] .mat-drawer,.cdk-high-contrast-active .mat-drawer.mat-drawer-end{border-left:solid 1px currentColor;border-right:none}.mat-drawer.mat-drawer-side{z-index:2}.mat-drawer.mat-drawer-end{right:0;transform:translate3d(100%, 0, 0)}[dir=rtl] .mat-drawer{transform:translate3d(100%, 0, 0)}[dir=rtl] .mat-drawer.mat-drawer-end{left:0;right:auto;transform:translate3d(-100%, 0, 0)}.mat-drawer[style*=\\\"visibility: hidden\\\"]{display:none}.mat-drawer-inner-container{width:100%;height:100%;overflow:auto;-webkit-overflow-scrolling:touch}.mat-sidenav-fixed{position:fixed}\\n\"] }]\n }], ctorParameters: function () {\n return [{ type: i4.Directionality, decorators: [{\n type: Optional\n }] }, { type: i0.ElementRef }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: i1.ViewportRuler }, { type: undefined, decorators: [{\n type: Inject,\n args: [MAT_DRAWER_DEFAULT_AUTOSIZE]\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }];\n }, propDecorators: { _allDrawers: [{\n type: ContentChildren,\n args: [MatDrawer, {\n // We need to use `descendants: true`, because Ivy will no longer match\n // indirect descendants if it's left as false.\n descendants: true,\n }]\n }], _content: [{\n type: ContentChild,\n args: [MatDrawerContent]\n }], _userContent: [{\n type: ViewChild,\n args: [MatDrawerContent]\n }], autosize: [{\n type: Input\n }], hasBackdrop: [{\n type: Input\n }], backdropClick: [{\n type: Output\n }] } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass MatSidenavContent extends MatDrawerContent {\n constructor(changeDetectorRef, container, elementRef, scrollDispatcher, ngZone) {\n super(changeDetectorRef, container, elementRef, scrollDispatcher, ngZone);\n }\n}\nMatSidenavContent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatSidenavContent, deps: [{ token: i0.ChangeDetectorRef }, { token: forwardRef(() => MatSidenavContainer) }, { token: i0.ElementRef }, { token: i1.ScrollDispatcher }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });\nMatSidenavContent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"13.2.0\", type: MatSidenavContent, selector: \"mat-sidenav-content\", host: { properties: { \"style.margin-left.px\": \"_container._contentMargins.left\", \"style.margin-right.px\": \"_container._contentMargins.right\" }, classAttribute: \"mat-drawer-content mat-sidenav-content\" }, providers: [\n {\n provide: CdkScrollable,\n useExisting: MatSidenavContent,\n },\n ], usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatSidenavContent, decorators: [{\n type: Component,\n args: [{\n selector: 'mat-sidenav-content',\n template: '',\n host: {\n 'class': 'mat-drawer-content mat-sidenav-content',\n '[style.margin-left.px]': '_container._contentMargins.left',\n '[style.margin-right.px]': '_container._contentMargins.right',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: CdkScrollable,\n useExisting: MatSidenavContent,\n },\n ],\n }]\n }], ctorParameters: function () {\n return [{ type: i0.ChangeDetectorRef }, { type: MatSidenavContainer, decorators: [{\n type: Inject,\n args: [forwardRef(() => MatSidenavContainer)]\n }] }, { type: i0.ElementRef }, { type: i1.ScrollDispatcher }, { type: i0.NgZone }];\n } });\nclass MatSidenav extends MatDrawer {\n constructor() {\n super(...arguments);\n this._fixedInViewport = false;\n this._fixedTopGap = 0;\n this._fixedBottomGap = 0;\n }\n /** Whether the sidenav is fixed in the viewport. */\n get fixedInViewport() {\n return this._fixedInViewport;\n }\n set fixedInViewport(value) {\n this._fixedInViewport = coerceBooleanProperty(value);\n }\n /**\n * The gap between the top of the sidenav and the top of the viewport when the sidenav is in fixed\n * mode.\n */\n get fixedTopGap() {\n return this._fixedTopGap;\n }\n set fixedTopGap(value) {\n this._fixedTopGap = coerceNumberProperty(value);\n }\n /**\n * The gap between the bottom of the sidenav and the bottom of the viewport when the sidenav is in\n * fixed mode.\n */\n get fixedBottomGap() {\n return this._fixedBottomGap;\n }\n set fixedBottomGap(value) {\n this._fixedBottomGap = coerceNumberProperty(value);\n }\n}\nMatSidenav.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatSidenav, deps: null, target: i0.ɵɵFactoryTarget.Component });\nMatSidenav.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"13.2.0\", type: MatSidenav, selector: \"mat-sidenav\", inputs: { fixedInViewport: \"fixedInViewport\", fixedTopGap: \"fixedTopGap\", fixedBottomGap: \"fixedBottomGap\" }, host: { attributes: { \"tabIndex\": \"-1\" }, properties: { \"attr.align\": \"null\", \"class.mat-drawer-end\": \"position === \\\"end\\\"\", \"class.mat-drawer-over\": \"mode === \\\"over\\\"\", \"class.mat-drawer-push\": \"mode === \\\"push\\\"\", \"class.mat-drawer-side\": \"mode === \\\"side\\\"\", \"class.mat-drawer-opened\": \"opened\", \"class.mat-sidenav-fixed\": \"fixedInViewport\", \"style.top.px\": \"fixedInViewport ? fixedTopGap : null\", \"style.bottom.px\": \"fixedInViewport ? fixedBottomGap : null\" }, classAttribute: \"mat-drawer mat-sidenav\" }, exportAs: [\"matSidenav\"], usesInheritance: true, ngImport: i0, template: \"
\\r\\n \\r\\n
\\r\\n\", directives: [{ type: i1.CdkScrollable, selector: \"[cdk-scrollable], [cdkScrollable]\" }], animations: [matDrawerAnimations.transformDrawer], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatSidenav, decorators: [{\n type: Component,\n args: [{ selector: 'mat-sidenav', exportAs: 'matSidenav', animations: [matDrawerAnimations.transformDrawer], host: {\n 'class': 'mat-drawer mat-sidenav',\n 'tabIndex': '-1',\n // must prevent the browser from aligning text based on value\n '[attr.align]': 'null',\n '[class.mat-drawer-end]': 'position === \"end\"',\n '[class.mat-drawer-over]': 'mode === \"over\"',\n '[class.mat-drawer-push]': 'mode === \"push\"',\n '[class.mat-drawer-side]': 'mode === \"side\"',\n '[class.mat-drawer-opened]': 'opened',\n '[class.mat-sidenav-fixed]': 'fixedInViewport',\n '[style.top.px]': 'fixedInViewport ? fixedTopGap : null',\n '[style.bottom.px]': 'fixedInViewport ? fixedBottomGap : null',\n }, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: \"
\\r\\n \\r\\n
\\r\\n\" }]\n }], propDecorators: { fixedInViewport: [{\n type: Input\n }], fixedTopGap: [{\n type: Input\n }], fixedBottomGap: [{\n type: Input\n }] } });\nclass MatSidenavContainer extends MatDrawerContainer {\n}\nMatSidenavContainer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatSidenavContainer, deps: null, target: i0.ɵɵFactoryTarget.Component });\nMatSidenavContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"13.2.0\", type: MatSidenavContainer, selector: \"mat-sidenav-container\", host: { properties: { \"class.mat-drawer-container-explicit-backdrop\": \"_backdropOverride\" }, classAttribute: \"mat-drawer-container mat-sidenav-container\" }, providers: [\n {\n provide: MAT_DRAWER_CONTAINER,\n useExisting: MatSidenavContainer,\n },\n ], queries: [{ propertyName: \"_content\", first: true, predicate: MatSidenavContent, descendants: true }, { propertyName: \"_allDrawers\", predicate: MatSidenav, descendants: true }], exportAs: [\"matSidenavContainer\"], usesInheritance: true, ngImport: i0, template: \"
\\n\\n\\n\\n\\n\\n\\n \\n\\n\", styles: [\".mat-drawer-container{position:relative;z-index:1;box-sizing:border-box;-webkit-overflow-scrolling:touch;display:block;overflow:hidden}.mat-drawer-container[fullscreen]{top:0;left:0;right:0;bottom:0;position:absolute}.mat-drawer-container[fullscreen].mat-drawer-container-has-open{overflow:hidden}.mat-drawer-container.mat-drawer-container-explicit-backdrop .mat-drawer-side{z-index:3}.mat-drawer-container.ng-animate-disabled .mat-drawer-backdrop,.mat-drawer-container.ng-animate-disabled .mat-drawer-content,.ng-animate-disabled .mat-drawer-container .mat-drawer-backdrop,.ng-animate-disabled .mat-drawer-container .mat-drawer-content{transition:none}.mat-drawer-backdrop{top:0;left:0;right:0;bottom:0;position:absolute;display:block;z-index:3;visibility:hidden}.mat-drawer-backdrop.mat-drawer-shown{visibility:visible}.mat-drawer-transition .mat-drawer-backdrop{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:background-color,visibility}.cdk-high-contrast-active .mat-drawer-backdrop{opacity:.5}.mat-drawer-content{position:relative;z-index:1;display:block;height:100%;overflow:auto}.mat-drawer-transition .mat-drawer-content{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:transform,margin-left,margin-right}.mat-drawer{position:relative;z-index:4;display:block;position:absolute;top:0;bottom:0;z-index:3;outline:0;box-sizing:border-box;overflow-y:auto;transform:translate3d(-100%, 0, 0)}.cdk-high-contrast-active .mat-drawer,.cdk-high-contrast-active [dir=rtl] .mat-drawer.mat-drawer-end{border-right:solid 1px currentColor}.cdk-high-contrast-active [dir=rtl] .mat-drawer,.cdk-high-contrast-active .mat-drawer.mat-drawer-end{border-left:solid 1px currentColor;border-right:none}.mat-drawer.mat-drawer-side{z-index:2}.mat-drawer.mat-drawer-end{right:0;transform:translate3d(100%, 0, 0)}[dir=rtl] .mat-drawer{transform:translate3d(100%, 0, 0)}[dir=rtl] .mat-drawer.mat-drawer-end{left:0;right:auto;transform:translate3d(-100%, 0, 0)}.mat-drawer[style*=\\\"visibility: hidden\\\"]{display:none}.mat-drawer-inner-container{width:100%;height:100%;overflow:auto;-webkit-overflow-scrolling:touch}.mat-sidenav-fixed{position:fixed}\\n\"], components: [{ type: MatSidenavContent, selector: \"mat-sidenav-content\" }], directives: [{ type: i5.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatSidenavContainer, decorators: [{\n type: Component,\n args: [{ selector: 'mat-sidenav-container', exportAs: 'matSidenavContainer', host: {\n 'class': 'mat-drawer-container mat-sidenav-container',\n '[class.mat-drawer-container-explicit-backdrop]': '_backdropOverride',\n }, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [\n {\n provide: MAT_DRAWER_CONTAINER,\n useExisting: MatSidenavContainer,\n },\n ], template: \"
\\n\\n\\n\\n\\n\\n\\n \\n\\n\", styles: [\".mat-drawer-container{position:relative;z-index:1;box-sizing:border-box;-webkit-overflow-scrolling:touch;display:block;overflow:hidden}.mat-drawer-container[fullscreen]{top:0;left:0;right:0;bottom:0;position:absolute}.mat-drawer-container[fullscreen].mat-drawer-container-has-open{overflow:hidden}.mat-drawer-container.mat-drawer-container-explicit-backdrop .mat-drawer-side{z-index:3}.mat-drawer-container.ng-animate-disabled .mat-drawer-backdrop,.mat-drawer-container.ng-animate-disabled .mat-drawer-content,.ng-animate-disabled .mat-drawer-container .mat-drawer-backdrop,.ng-animate-disabled .mat-drawer-container .mat-drawer-content{transition:none}.mat-drawer-backdrop{top:0;left:0;right:0;bottom:0;position:absolute;display:block;z-index:3;visibility:hidden}.mat-drawer-backdrop.mat-drawer-shown{visibility:visible}.mat-drawer-transition .mat-drawer-backdrop{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:background-color,visibility}.cdk-high-contrast-active .mat-drawer-backdrop{opacity:.5}.mat-drawer-content{position:relative;z-index:1;display:block;height:100%;overflow:auto}.mat-drawer-transition .mat-drawer-content{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:transform,margin-left,margin-right}.mat-drawer{position:relative;z-index:4;display:block;position:absolute;top:0;bottom:0;z-index:3;outline:0;box-sizing:border-box;overflow-y:auto;transform:translate3d(-100%, 0, 0)}.cdk-high-contrast-active .mat-drawer,.cdk-high-contrast-active [dir=rtl] .mat-drawer.mat-drawer-end{border-right:solid 1px currentColor}.cdk-high-contrast-active [dir=rtl] .mat-drawer,.cdk-high-contrast-active .mat-drawer.mat-drawer-end{border-left:solid 1px currentColor;border-right:none}.mat-drawer.mat-drawer-side{z-index:2}.mat-drawer.mat-drawer-end{right:0;transform:translate3d(100%, 0, 0)}[dir=rtl] .mat-drawer{transform:translate3d(100%, 0, 0)}[dir=rtl] .mat-drawer.mat-drawer-end{left:0;right:auto;transform:translate3d(-100%, 0, 0)}.mat-drawer[style*=\\\"visibility: hidden\\\"]{display:none}.mat-drawer-inner-container{width:100%;height:100%;overflow:auto;-webkit-overflow-scrolling:touch}.mat-sidenav-fixed{position:fixed}\\n\"] }]\n }], propDecorators: { _allDrawers: [{\n type: ContentChildren,\n args: [MatSidenav, {\n // We need to use `descendants: true`, because Ivy will no longer match\n // indirect descendants if it's left as false.\n descendants: true,\n }]\n }], _content: [{\n type: ContentChild,\n args: [MatSidenavContent]\n }] } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass MatSidenavModule {\n}\nMatSidenavModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatSidenavModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nMatSidenavModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatSidenavModule, declarations: [MatDrawer,\n MatDrawerContainer,\n MatDrawerContent,\n MatSidenav,\n MatSidenavContainer,\n MatSidenavContent], imports: [CommonModule, MatCommonModule, CdkScrollableModule], exports: [CdkScrollableModule,\n MatCommonModule,\n MatDrawer,\n MatDrawerContainer,\n MatDrawerContent,\n MatSidenav,\n MatSidenavContainer,\n MatSidenavContent] });\nMatSidenavModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatSidenavModule, imports: [[CommonModule, MatCommonModule, CdkScrollableModule], CdkScrollableModule,\n MatCommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatSidenavModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [CommonModule, MatCommonModule, CdkScrollableModule],\n exports: [\n CdkScrollableModule,\n MatCommonModule,\n MatDrawer,\n MatDrawerContainer,\n MatDrawerContent,\n MatSidenav,\n MatSidenavContainer,\n MatSidenavContent,\n ],\n declarations: [\n MatDrawer,\n MatDrawerContainer,\n MatDrawerContent,\n MatSidenav,\n MatSidenavContainer,\n MatSidenavContent,\n ],\n }]\n }] });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_DRAWER_DEFAULT_AUTOSIZE, MAT_DRAWER_DEFAULT_AUTOSIZE_FACTORY, MatDrawer, MatDrawerContainer, MatDrawerContent, MatSidenav, MatSidenavContainer, MatSidenavContent, MatSidenavModule, matDrawerAnimations, throwMatDuplicatedDrawerError };\n","import * as i3 from '@angular/cdk/observers';\nimport { ObserversModule } from '@angular/cdk/observers';\nimport * as i0 from '@angular/core';\nimport { InjectionToken, forwardRef, EventEmitter, Component, ViewEncapsulation, ChangeDetectionStrategy, Attribute, Inject, Optional, ViewChild, Input, Output, Directive, NgModule } from '@angular/core';\nimport * as i2 from '@angular/material/core';\nimport { mixinTabIndex, mixinColor, mixinDisableRipple, mixinDisabled, MatRippleModule, MatCommonModule } from '@angular/material/core';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { NG_VALUE_ACCESSOR, NG_VALIDATORS, CheckboxRequiredValidator } from '@angular/forms';\nimport { ANIMATION_MODULE_TYPE } from '@angular/platform-browser/animations';\nimport * as i1 from '@angular/cdk/a11y';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Injection token to be used to override the default options for `mat-slide-toggle`. */\nconst MAT_SLIDE_TOGGLE_DEFAULT_OPTIONS = new InjectionToken('mat-slide-toggle-default-options', {\n providedIn: 'root',\n factory: () => ({ disableToggleValue: false }),\n});\n\n// Increasing integer for generating unique ids for slide-toggle components.\nlet nextUniqueId = 0;\n/** @docs-private */\nconst MAT_SLIDE_TOGGLE_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MatSlideToggle),\n multi: true,\n};\n/** Change event object emitted by a MatSlideToggle. */\nclass MatSlideToggleChange {\n constructor(\n /** The source MatSlideToggle of the event. */\n source, \n /** The new `checked` value of the MatSlideToggle. */\n checked) {\n this.source = source;\n this.checked = checked;\n }\n}\n// Boilerplate for applying mixins to MatSlideToggle.\n/** @docs-private */\nconst _MatSlideToggleBase = mixinTabIndex(mixinColor(mixinDisableRipple(mixinDisabled(class {\n constructor(_elementRef) {\n this._elementRef = _elementRef;\n }\n}))));\n/** Represents a slidable \"switch\" toggle that can be moved between on and off. */\nclass MatSlideToggle extends _MatSlideToggleBase {\n constructor(elementRef, _focusMonitor, _changeDetectorRef, tabIndex, defaults, animationMode) {\n super(elementRef);\n this._focusMonitor = _focusMonitor;\n this._changeDetectorRef = _changeDetectorRef;\n this.defaults = defaults;\n this._onChange = (_) => { };\n this._onTouched = () => { };\n this._uniqueId = `mat-slide-toggle-${++nextUniqueId}`;\n this._required = false;\n this._checked = false;\n /** Name value will be applied to the input element if present. */\n this.name = null;\n /** A unique id for the slide-toggle input. If none is supplied, it will be auto-generated. */\n this.id = this._uniqueId;\n /** Whether the label should appear after or before the slide-toggle. Defaults to 'after'. */\n this.labelPosition = 'after';\n /** Used to set the aria-label attribute on the underlying input element. */\n this.ariaLabel = null;\n /** Used to set the aria-labelledby attribute on the underlying input element. */\n this.ariaLabelledby = null;\n /** An event will be dispatched each time the slide-toggle changes its value. */\n this.change = new EventEmitter();\n /**\n * An event will be dispatched each time the slide-toggle input is toggled.\n * This event is always emitted when the user toggles the slide toggle, but this does not mean\n * the slide toggle's value has changed.\n */\n this.toggleChange = new EventEmitter();\n this.tabIndex = parseInt(tabIndex) || 0;\n this.color = this.defaultColor = defaults.color || 'accent';\n this._noopAnimations = animationMode === 'NoopAnimations';\n }\n /** Whether the slide-toggle is required. */\n get required() {\n return this._required;\n }\n set required(value) {\n this._required = coerceBooleanProperty(value);\n }\n /** Whether the slide-toggle element is checked or not. */\n get checked() {\n return this._checked;\n }\n set checked(value) {\n this._checked = coerceBooleanProperty(value);\n this._changeDetectorRef.markForCheck();\n }\n /** Returns the unique id for the visual hidden input. */\n get inputId() {\n return `${this.id || this._uniqueId}-input`;\n }\n ngAfterContentInit() {\n this._focusMonitor.monitor(this._elementRef, true).subscribe(focusOrigin => {\n if (!focusOrigin) {\n // When a focused element becomes disabled, the browser *immediately* fires a blur event.\n // Angular does not expect events to be raised during change detection, so any state\n // change (such as a form control's 'ng-touched') will cause a changed-after-checked\n // error. See https://github.com/angular/angular/issues/17793. To work around this,\n // we defer telling the form control it has been touched until the next tick.\n Promise.resolve().then(() => this._onTouched());\n }\n });\n }\n ngOnDestroy() {\n this._focusMonitor.stopMonitoring(this._elementRef);\n }\n /** Method being called whenever the underlying input emits a change event. */\n _onChangeEvent(event) {\n // We always have to stop propagation on the change event.\n // Otherwise the change event, from the input element, will bubble up and\n // emit its event object to the component's `change` output.\n event.stopPropagation();\n this.toggleChange.emit();\n // When the slide toggle's config disables toggle change event by setting\n // `disableToggleValue: true`, the slide toggle's value does not change, and the\n // checked state of the underlying input needs to be changed back.\n if (this.defaults.disableToggleValue) {\n this._inputElement.nativeElement.checked = this.checked;\n return;\n }\n // Sync the value from the underlying input element with the component instance.\n this.checked = this._inputElement.nativeElement.checked;\n // Emit our custom change event only if the underlying input emitted one. This ensures that\n // there is no change event, when the checked state changes programmatically.\n this._emitChangeEvent();\n }\n /** Method being called whenever the slide-toggle has been clicked. */\n _onInputClick(event) {\n // We have to stop propagation for click events on the visual hidden input element.\n // By default, when a user clicks on a label element, a generated click event will be\n // dispatched on the associated input element. Since we are using a label element as our\n // root container, the click event on the `slide-toggle` will be executed twice.\n // The real click event will bubble up, and the generated click event also tries to bubble up.\n // This will lead to multiple click events.\n // Preventing bubbling for the second event will solve that issue.\n event.stopPropagation();\n }\n /** Implemented as part of ControlValueAccessor. */\n writeValue(value) {\n this.checked = !!value;\n }\n /** Implemented as part of ControlValueAccessor. */\n registerOnChange(fn) {\n this._onChange = fn;\n }\n /** Implemented as part of ControlValueAccessor. */\n registerOnTouched(fn) {\n this._onTouched = fn;\n }\n /** Implemented as a part of ControlValueAccessor. */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n this._changeDetectorRef.markForCheck();\n }\n /** Focuses the slide-toggle. */\n focus(options, origin) {\n if (origin) {\n this._focusMonitor.focusVia(this._inputElement, origin, options);\n }\n else {\n this._inputElement.nativeElement.focus(options);\n }\n }\n /** Toggles the checked state of the slide-toggle. */\n toggle() {\n this.checked = !this.checked;\n this._onChange(this.checked);\n }\n /**\n * Emits a change event on the `change` output. Also notifies the FormControl about the change.\n */\n _emitChangeEvent() {\n this._onChange(this.checked);\n this.change.emit(new MatSlideToggleChange(this, this.checked));\n }\n /** Method being called whenever the label text changes. */\n _onLabelTextChange() {\n // Since the event of the `cdkObserveContent` directive runs outside of the zone, the\n // slide-toggle component will be only marked for check, but no actual change detection runs\n // automatically. Instead of going back into the zone in order to trigger a change detection\n // which causes *all* components to be checked (if explicitly marked or not using OnPush),\n // we only trigger an explicit change detection for the slide-toggle view and its children.\n this._changeDetectorRef.detectChanges();\n }\n}\nMatSlideToggle.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatSlideToggle, deps: [{ token: i0.ElementRef }, { token: i1.FocusMonitor }, { token: i0.ChangeDetectorRef }, { token: 'tabindex', attribute: true }, { token: MAT_SLIDE_TOGGLE_DEFAULT_OPTIONS }, { token: ANIMATION_MODULE_TYPE, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nMatSlideToggle.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"13.2.0\", type: MatSlideToggle, selector: \"mat-slide-toggle\", inputs: { disabled: \"disabled\", disableRipple: \"disableRipple\", color: \"color\", tabIndex: \"tabIndex\", name: \"name\", id: \"id\", labelPosition: \"labelPosition\", ariaLabel: [\"aria-label\", \"ariaLabel\"], ariaLabelledby: [\"aria-labelledby\", \"ariaLabelledby\"], ariaDescribedby: [\"aria-describedby\", \"ariaDescribedby\"], required: \"required\", checked: \"checked\" }, outputs: { change: \"change\", toggleChange: \"toggleChange\" }, host: { properties: { \"id\": \"id\", \"attr.tabindex\": \"null\", \"attr.aria-label\": \"null\", \"attr.aria-labelledby\": \"null\", \"attr.name\": \"null\", \"class.mat-checked\": \"checked\", \"class.mat-disabled\": \"disabled\", \"class.mat-slide-toggle-label-before\": \"labelPosition == \\\"before\\\"\", \"class._mat-animation-noopable\": \"_noopAnimations\" }, classAttribute: \"mat-slide-toggle\" }, providers: [MAT_SLIDE_TOGGLE_VALUE_ACCESSOR], viewQueries: [{ propertyName: \"_thumbEl\", first: true, predicate: [\"thumbContainer\"], descendants: true }, { propertyName: \"_thumbBarEl\", first: true, predicate: [\"toggleBar\"], descendants: true }, { propertyName: \"_inputElement\", first: true, predicate: [\"input\"], descendants: true }], exportAs: [\"matSlideToggle\"], usesInheritance: true, ngImport: i0, template: \"\\n\", styles: [\".mat-slide-toggle{display:inline-block;height:24px;max-width:100%;line-height:24px;white-space:nowrap;outline:none;-webkit-tap-highlight-color:transparent}.mat-slide-toggle.mat-checked .mat-slide-toggle-thumb-container{transform:translate3d(16px, 0, 0)}[dir=rtl] .mat-slide-toggle.mat-checked .mat-slide-toggle-thumb-container{transform:translate3d(-16px, 0, 0)}.mat-slide-toggle.mat-disabled{opacity:.38}.mat-slide-toggle.mat-disabled .mat-slide-toggle-label,.mat-slide-toggle.mat-disabled .mat-slide-toggle-thumb-container{cursor:default}.mat-slide-toggle-label{-webkit-user-select:none;-moz-user-select:none;user-select:none;display:flex;flex:1;flex-direction:row;align-items:center;height:inherit;cursor:pointer}.mat-slide-toggle-content{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mat-slide-toggle-label-before .mat-slide-toggle-label{order:1}.mat-slide-toggle-label-before .mat-slide-toggle-bar{order:2}[dir=rtl] .mat-slide-toggle-label-before .mat-slide-toggle-bar,.mat-slide-toggle-bar{margin-right:8px;margin-left:0}[dir=rtl] .mat-slide-toggle-bar,.mat-slide-toggle-label-before .mat-slide-toggle-bar{margin-left:8px;margin-right:0}.mat-slide-toggle-bar-no-side-margin{margin-left:0;margin-right:0}.mat-slide-toggle-thumb-container{position:absolute;z-index:1;width:20px;height:20px;top:-3px;left:0;transform:translate3d(0, 0, 0);transition:all 80ms linear;transition-property:transform}._mat-animation-noopable .mat-slide-toggle-thumb-container{transition:none}[dir=rtl] .mat-slide-toggle-thumb-container{left:auto;right:0}.mat-slide-toggle-thumb{height:20px;width:20px;border-radius:50%;display:block}.mat-slide-toggle-bar{position:relative;width:36px;height:14px;flex-shrink:0;border-radius:8px}.mat-slide-toggle-input{bottom:0;left:10px}[dir=rtl] .mat-slide-toggle-input{left:auto;right:10px}.mat-slide-toggle-bar,.mat-slide-toggle-thumb{transition:all 80ms linear;transition-property:background-color;transition-delay:50ms}._mat-animation-noopable .mat-slide-toggle-bar,._mat-animation-noopable .mat-slide-toggle-thumb{transition:none}.mat-slide-toggle .mat-slide-toggle-ripple{position:absolute;top:calc(50% - 20px);left:calc(50% - 20px);height:40px;width:40px;z-index:1;pointer-events:none}.mat-slide-toggle .mat-slide-toggle-ripple .mat-ripple-element:not(.mat-slide-toggle-persistent-ripple){opacity:.12}.mat-slide-toggle-persistent-ripple{width:100%;height:100%;transform:none}.mat-slide-toggle-bar:hover .mat-slide-toggle-persistent-ripple{opacity:.04}.mat-slide-toggle:not(.mat-disabled).cdk-keyboard-focused .mat-slide-toggle-persistent-ripple{opacity:.12}.mat-slide-toggle-persistent-ripple,.mat-slide-toggle.mat-disabled .mat-slide-toggle-bar:hover .mat-slide-toggle-persistent-ripple{opacity:0}@media(hover: none){.mat-slide-toggle-bar:hover .mat-slide-toggle-persistent-ripple{display:none}}.cdk-high-contrast-active .mat-slide-toggle-thumb,.cdk-high-contrast-active .mat-slide-toggle-bar{border:1px solid}.cdk-high-contrast-active .mat-slide-toggle.cdk-keyboard-focused .mat-slide-toggle-bar{outline:2px dotted;outline-offset:5px}\\n\"], directives: [{ type: i2.MatRipple, selector: \"[mat-ripple], [matRipple]\", inputs: [\"matRippleColor\", \"matRippleUnbounded\", \"matRippleCentered\", \"matRippleRadius\", \"matRippleAnimation\", \"matRippleDisabled\", \"matRippleTrigger\"], exportAs: [\"matRipple\"] }, { type: i3.CdkObserveContent, selector: \"[cdkObserveContent]\", inputs: [\"cdkObserveContentDisabled\", \"debounce\"], outputs: [\"cdkObserveContent\"], exportAs: [\"cdkObserveContent\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatSlideToggle, decorators: [{\n type: Component,\n args: [{ selector: 'mat-slide-toggle', exportAs: 'matSlideToggle', host: {\n 'class': 'mat-slide-toggle',\n '[id]': 'id',\n // Needs to be removed since it causes some a11y issues (see #21266).\n '[attr.tabindex]': 'null',\n '[attr.aria-label]': 'null',\n '[attr.aria-labelledby]': 'null',\n '[attr.name]': 'null',\n '[class.mat-checked]': 'checked',\n '[class.mat-disabled]': 'disabled',\n '[class.mat-slide-toggle-label-before]': 'labelPosition == \"before\"',\n '[class._mat-animation-noopable]': '_noopAnimations',\n }, providers: [MAT_SLIDE_TOGGLE_VALUE_ACCESSOR], inputs: ['disabled', 'disableRipple', 'color', 'tabIndex'], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: \"\\n\", styles: [\".mat-slide-toggle{display:inline-block;height:24px;max-width:100%;line-height:24px;white-space:nowrap;outline:none;-webkit-tap-highlight-color:transparent}.mat-slide-toggle.mat-checked .mat-slide-toggle-thumb-container{transform:translate3d(16px, 0, 0)}[dir=rtl] .mat-slide-toggle.mat-checked .mat-slide-toggle-thumb-container{transform:translate3d(-16px, 0, 0)}.mat-slide-toggle.mat-disabled{opacity:.38}.mat-slide-toggle.mat-disabled .mat-slide-toggle-label,.mat-slide-toggle.mat-disabled .mat-slide-toggle-thumb-container{cursor:default}.mat-slide-toggle-label{-webkit-user-select:none;-moz-user-select:none;user-select:none;display:flex;flex:1;flex-direction:row;align-items:center;height:inherit;cursor:pointer}.mat-slide-toggle-content{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mat-slide-toggle-label-before .mat-slide-toggle-label{order:1}.mat-slide-toggle-label-before .mat-slide-toggle-bar{order:2}[dir=rtl] .mat-slide-toggle-label-before .mat-slide-toggle-bar,.mat-slide-toggle-bar{margin-right:8px;margin-left:0}[dir=rtl] .mat-slide-toggle-bar,.mat-slide-toggle-label-before .mat-slide-toggle-bar{margin-left:8px;margin-right:0}.mat-slide-toggle-bar-no-side-margin{margin-left:0;margin-right:0}.mat-slide-toggle-thumb-container{position:absolute;z-index:1;width:20px;height:20px;top:-3px;left:0;transform:translate3d(0, 0, 0);transition:all 80ms linear;transition-property:transform}._mat-animation-noopable .mat-slide-toggle-thumb-container{transition:none}[dir=rtl] .mat-slide-toggle-thumb-container{left:auto;right:0}.mat-slide-toggle-thumb{height:20px;width:20px;border-radius:50%;display:block}.mat-slide-toggle-bar{position:relative;width:36px;height:14px;flex-shrink:0;border-radius:8px}.mat-slide-toggle-input{bottom:0;left:10px}[dir=rtl] .mat-slide-toggle-input{left:auto;right:10px}.mat-slide-toggle-bar,.mat-slide-toggle-thumb{transition:all 80ms linear;transition-property:background-color;transition-delay:50ms}._mat-animation-noopable .mat-slide-toggle-bar,._mat-animation-noopable .mat-slide-toggle-thumb{transition:none}.mat-slide-toggle .mat-slide-toggle-ripple{position:absolute;top:calc(50% - 20px);left:calc(50% - 20px);height:40px;width:40px;z-index:1;pointer-events:none}.mat-slide-toggle .mat-slide-toggle-ripple .mat-ripple-element:not(.mat-slide-toggle-persistent-ripple){opacity:.12}.mat-slide-toggle-persistent-ripple{width:100%;height:100%;transform:none}.mat-slide-toggle-bar:hover .mat-slide-toggle-persistent-ripple{opacity:.04}.mat-slide-toggle:not(.mat-disabled).cdk-keyboard-focused .mat-slide-toggle-persistent-ripple{opacity:.12}.mat-slide-toggle-persistent-ripple,.mat-slide-toggle.mat-disabled .mat-slide-toggle-bar:hover .mat-slide-toggle-persistent-ripple{opacity:0}@media(hover: none){.mat-slide-toggle-bar:hover .mat-slide-toggle-persistent-ripple{display:none}}.cdk-high-contrast-active .mat-slide-toggle-thumb,.cdk-high-contrast-active .mat-slide-toggle-bar{border:1px solid}.cdk-high-contrast-active .mat-slide-toggle.cdk-keyboard-focused .mat-slide-toggle-bar{outline:2px dotted;outline-offset:5px}\\n\"] }]\n }], ctorParameters: function () {\n return [{ type: i0.ElementRef }, { type: i1.FocusMonitor }, { type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{\n type: Attribute,\n args: ['tabindex']\n }] }, { type: undefined, decorators: [{\n type: Inject,\n args: [MAT_SLIDE_TOGGLE_DEFAULT_OPTIONS]\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }];\n }, propDecorators: { _thumbEl: [{\n type: ViewChild,\n args: ['thumbContainer']\n }], _thumbBarEl: [{\n type: ViewChild,\n args: ['toggleBar']\n }], name: [{\n type: Input\n }], id: [{\n type: Input\n }], labelPosition: [{\n type: Input\n }], ariaLabel: [{\n type: Input,\n args: ['aria-label']\n }], ariaLabelledby: [{\n type: Input,\n args: ['aria-labelledby']\n }], ariaDescribedby: [{\n type: Input,\n args: ['aria-describedby']\n }], required: [{\n type: Input\n }], checked: [{\n type: Input\n }], change: [{\n type: Output\n }], toggleChange: [{\n type: Output\n }], _inputElement: [{\n type: ViewChild,\n args: ['input']\n }] } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nconst MAT_SLIDE_TOGGLE_REQUIRED_VALIDATOR = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MatSlideToggleRequiredValidator),\n multi: true,\n};\n/**\n * Validator for Material slide-toggle components with the required attribute in a\n * template-driven form. The default validator for required form controls asserts\n * that the control value is not undefined but that is not appropriate for a slide-toggle\n * where the value is always defined.\n *\n * Required slide-toggle form controls are valid when checked.\n */\nclass MatSlideToggleRequiredValidator extends CheckboxRequiredValidator {\n}\nMatSlideToggleRequiredValidator.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatSlideToggleRequiredValidator, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nMatSlideToggleRequiredValidator.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.2.0\", type: MatSlideToggleRequiredValidator, selector: \"mat-slide-toggle[required][formControlName],\\n mat-slide-toggle[required][formControl], mat-slide-toggle[required][ngModel]\", providers: [MAT_SLIDE_TOGGLE_REQUIRED_VALIDATOR], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatSlideToggleRequiredValidator, decorators: [{\n type: Directive,\n args: [{\n selector: `mat-slide-toggle[required][formControlName],\n mat-slide-toggle[required][formControl], mat-slide-toggle[required][ngModel]`,\n providers: [MAT_SLIDE_TOGGLE_REQUIRED_VALIDATOR],\n }]\n }] });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** This module is used by both original and MDC-based slide-toggle implementations. */\nclass _MatSlideToggleRequiredValidatorModule {\n}\n_MatSlideToggleRequiredValidatorModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: _MatSlideToggleRequiredValidatorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\n_MatSlideToggleRequiredValidatorModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: _MatSlideToggleRequiredValidatorModule, declarations: [MatSlideToggleRequiredValidator], exports: [MatSlideToggleRequiredValidator] });\n_MatSlideToggleRequiredValidatorModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: _MatSlideToggleRequiredValidatorModule });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: _MatSlideToggleRequiredValidatorModule, decorators: [{\n type: NgModule,\n args: [{\n exports: [MatSlideToggleRequiredValidator],\n declarations: [MatSlideToggleRequiredValidator],\n }]\n }] });\nclass MatSlideToggleModule {\n}\nMatSlideToggleModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatSlideToggleModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nMatSlideToggleModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatSlideToggleModule, declarations: [MatSlideToggle], imports: [_MatSlideToggleRequiredValidatorModule, MatRippleModule,\n MatCommonModule,\n ObserversModule], exports: [_MatSlideToggleRequiredValidatorModule, MatSlideToggle, MatCommonModule] });\nMatSlideToggleModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatSlideToggleModule, imports: [[\n _MatSlideToggleRequiredValidatorModule,\n MatRippleModule,\n MatCommonModule,\n ObserversModule,\n ], _MatSlideToggleRequiredValidatorModule, MatCommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatSlideToggleModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [\n _MatSlideToggleRequiredValidatorModule,\n MatRippleModule,\n MatCommonModule,\n ObserversModule,\n ],\n exports: [_MatSlideToggleRequiredValidatorModule, MatSlideToggle, MatCommonModule],\n declarations: [MatSlideToggle],\n }]\n }] });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_SLIDE_TOGGLE_DEFAULT_OPTIONS, MAT_SLIDE_TOGGLE_REQUIRED_VALIDATOR, MAT_SLIDE_TOGGLE_VALUE_ACCESSOR, MatSlideToggle, MatSlideToggleChange, MatSlideToggleModule, MatSlideToggleRequiredValidator, _MatSlideToggleRequiredValidatorModule };\n","import * as i3 from '@angular/common';\nimport { DOCUMENT, CommonModule } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { forwardRef, EventEmitter, Component, ViewEncapsulation, ChangeDetectionStrategy, Optional, Attribute, Inject, Input, Output, ViewChild, NgModule } from '@angular/core';\nimport { mixinTabIndex, mixinColor, mixinDisabled, MatCommonModule } from '@angular/material/core';\nimport { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';\nimport { hasModifierKey, DOWN_ARROW, RIGHT_ARROW, UP_ARROW, LEFT_ARROW, HOME, END, PAGE_DOWN, PAGE_UP } from '@angular/cdk/keycodes';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { ANIMATION_MODULE_TYPE } from '@angular/platform-browser/animations';\nimport { normalizePassiveListenerOptions } from '@angular/cdk/platform';\nimport { Subscription } from 'rxjs';\nimport * as i1 from '@angular/cdk/a11y';\nimport * as i2 from '@angular/cdk/bidi';\n\nconst activeEventOptions = normalizePassiveListenerOptions({ passive: false });\n/**\n * Visually, a 30px separation between tick marks looks best. This is very subjective but it is\n * the default separation we chose.\n */\nconst MIN_AUTO_TICK_SEPARATION = 30;\n/** The thumb gap size for a disabled slider. */\nconst DISABLED_THUMB_GAP = 7;\n/** The thumb gap size for a non-active slider at its minimum value. */\nconst MIN_VALUE_NONACTIVE_THUMB_GAP = 7;\n/** The thumb gap size for an active slider at its minimum value. */\nconst MIN_VALUE_ACTIVE_THUMB_GAP = 10;\n/**\n * Provider Expression that allows mat-slider to register as a ControlValueAccessor.\n * This allows it to support [(ngModel)] and [formControl].\n * @docs-private\n */\nconst MAT_SLIDER_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MatSlider),\n multi: true,\n};\n/** A simple change event emitted by the MatSlider component. */\nclass MatSliderChange {\n}\n// Boilerplate for applying mixins to MatSlider.\n/** @docs-private */\nconst _MatSliderBase = mixinTabIndex(mixinColor(mixinDisabled(class {\n constructor(_elementRef) {\n this._elementRef = _elementRef;\n }\n}), 'accent'));\n/**\n * Allows users to select from a range of values by moving the slider thumb. It is similar in\n * behavior to the native `` element.\n */\nclass MatSlider extends _MatSliderBase {\n constructor(elementRef, _focusMonitor, _changeDetectorRef, _dir, tabIndex, _ngZone, _document, _animationMode) {\n super(elementRef);\n this._focusMonitor = _focusMonitor;\n this._changeDetectorRef = _changeDetectorRef;\n this._dir = _dir;\n this._ngZone = _ngZone;\n this._animationMode = _animationMode;\n this._invert = false;\n this._max = 100;\n this._min = 0;\n this._step = 1;\n this._thumbLabel = false;\n this._tickInterval = 0;\n this._value = null;\n this._vertical = false;\n /** Event emitted when the slider value has changed. */\n this.change = new EventEmitter();\n /** Event emitted when the slider thumb moves. */\n this.input = new EventEmitter();\n /**\n * Emits when the raw value of the slider changes. This is here primarily\n * to facilitate the two-way binding for the `value` input.\n * @docs-private\n */\n this.valueChange = new EventEmitter();\n /** onTouch function registered via registerOnTouch (ControlValueAccessor). */\n this.onTouched = () => { };\n this._percent = 0;\n /**\n * Whether or not the thumb is sliding and what the user is using to slide it with.\n * Used to determine if there should be a transition for the thumb and fill track.\n */\n this._isSliding = null;\n /**\n * Whether or not the slider is active (clicked or sliding).\n * Used to shrink and grow the thumb as according to the Material Design spec.\n */\n this._isActive = false;\n /** The size of a tick interval as a percentage of the size of the track. */\n this._tickIntervalPercent = 0;\n /** The dimensions of the slider. */\n this._sliderDimensions = null;\n this._controlValueAccessorChangeFn = () => { };\n /** Subscription to the Directionality change EventEmitter. */\n this._dirChangeSubscription = Subscription.EMPTY;\n /** Called when the user has put their pointer down on the slider. */\n this._pointerDown = (event) => {\n // Don't do anything if the slider is disabled or the\n // user is using anything other than the main mouse button.\n if (this.disabled || this._isSliding || (!isTouchEvent(event) && event.button !== 0)) {\n return;\n }\n this._ngZone.run(() => {\n this._touchId = isTouchEvent(event)\n ? getTouchIdForSlider(event, this._elementRef.nativeElement)\n : undefined;\n const pointerPosition = getPointerPositionOnPage(event, this._touchId);\n if (pointerPosition) {\n const oldValue = this.value;\n this._isSliding = 'pointer';\n this._lastPointerEvent = event;\n this._focusHostElement();\n this._onMouseenter(); // Simulate mouseenter in case this is a mobile device.\n this._bindGlobalEvents(event);\n this._focusHostElement();\n this._updateValueFromPosition(pointerPosition);\n this._valueOnSlideStart = oldValue;\n // Despite the fact that we explicitly bind active events, in some cases the browser\n // still dispatches non-cancelable events which cause this call to throw an error.\n // There doesn't appear to be a good way of avoiding them. See #23820.\n if (event.cancelable) {\n event.preventDefault();\n }\n // Emit a change and input event if the value changed.\n if (oldValue != this.value) {\n this._emitInputEvent();\n }\n }\n });\n };\n /**\n * Called when the user has moved their pointer after\n * starting to drag. Bound on the document level.\n */\n this._pointerMove = (event) => {\n if (this._isSliding === 'pointer') {\n const pointerPosition = getPointerPositionOnPage(event, this._touchId);\n if (pointerPosition) {\n // Prevent the slide from selecting anything else.\n event.preventDefault();\n const oldValue = this.value;\n this._lastPointerEvent = event;\n this._updateValueFromPosition(pointerPosition);\n // Native range elements always emit `input` events when the value changed while sliding.\n if (oldValue != this.value) {\n this._emitInputEvent();\n }\n }\n }\n };\n /** Called when the user has lifted their pointer. Bound on the document level. */\n this._pointerUp = (event) => {\n if (this._isSliding === 'pointer') {\n if (!isTouchEvent(event) ||\n typeof this._touchId !== 'number' ||\n // Note that we use `changedTouches`, rather than `touches` because it\n // seems like in most cases `touches` is empty for `touchend` events.\n findMatchingTouch(event.changedTouches, this._touchId)) {\n event.preventDefault();\n this._removeGlobalEvents();\n this._isSliding = null;\n this._touchId = undefined;\n if (this._valueOnSlideStart != this.value && !this.disabled) {\n this._emitChangeEvent();\n }\n this._valueOnSlideStart = this._lastPointerEvent = null;\n }\n }\n };\n /** Called when the window has lost focus. */\n this._windowBlur = () => {\n // If the window is blurred while dragging we need to stop dragging because the\n // browser won't dispatch the `mouseup` and `touchend` events anymore.\n if (this._lastPointerEvent) {\n this._pointerUp(this._lastPointerEvent);\n }\n };\n this._document = _document;\n this.tabIndex = parseInt(tabIndex) || 0;\n _ngZone.runOutsideAngular(() => {\n const element = elementRef.nativeElement;\n element.addEventListener('mousedown', this._pointerDown, activeEventOptions);\n element.addEventListener('touchstart', this._pointerDown, activeEventOptions);\n });\n }\n /** Whether the slider is inverted. */\n get invert() {\n return this._invert;\n }\n set invert(value) {\n this._invert = coerceBooleanProperty(value);\n }\n /** The maximum value that the slider can have. */\n get max() {\n return this._max;\n }\n set max(v) {\n this._max = coerceNumberProperty(v, this._max);\n this._percent = this._calculatePercentage(this._value);\n // Since this also modifies the percentage, we need to let the change detection know.\n this._changeDetectorRef.markForCheck();\n }\n /** The minimum value that the slider can have. */\n get min() {\n return this._min;\n }\n set min(v) {\n this._min = coerceNumberProperty(v, this._min);\n this._percent = this._calculatePercentage(this._value);\n // Since this also modifies the percentage, we need to let the change detection know.\n this._changeDetectorRef.markForCheck();\n }\n /** The values at which the thumb will snap. */\n get step() {\n return this._step;\n }\n set step(v) {\n this._step = coerceNumberProperty(v, this._step);\n if (this._step % 1 !== 0) {\n this._roundToDecimal = this._step.toString().split('.').pop().length;\n }\n // Since this could modify the label, we need to notify the change detection.\n this._changeDetectorRef.markForCheck();\n }\n /** Whether or not to show the thumb label. */\n get thumbLabel() {\n return this._thumbLabel;\n }\n set thumbLabel(value) {\n this._thumbLabel = coerceBooleanProperty(value);\n }\n /**\n * How often to show ticks. Relative to the step so that a tick always appears on a step.\n * Ex: Tick interval of 4 with a step of 3 will draw a tick every 4 steps (every 12 values).\n */\n get tickInterval() {\n return this._tickInterval;\n }\n set tickInterval(value) {\n if (value === 'auto') {\n this._tickInterval = 'auto';\n }\n else if (typeof value === 'number' || typeof value === 'string') {\n this._tickInterval = coerceNumberProperty(value, this._tickInterval);\n }\n else {\n this._tickInterval = 0;\n }\n }\n /** Value of the slider. */\n get value() {\n // If the value needs to be read and it is still uninitialized, initialize it to the min.\n if (this._value === null) {\n this.value = this._min;\n }\n return this._value;\n }\n set value(v) {\n if (v !== this._value) {\n let value = coerceNumberProperty(v, 0);\n // While incrementing by a decimal we can end up with values like 33.300000000000004.\n // Truncate it to ensure that it matches the label and to make it easier to work with.\n if (this._roundToDecimal && value !== this.min && value !== this.max) {\n value = parseFloat(value.toFixed(this._roundToDecimal));\n }\n this._value = value;\n this._percent = this._calculatePercentage(this._value);\n // Since this also modifies the percentage, we need to let the change detection know.\n this._changeDetectorRef.markForCheck();\n }\n }\n /** Whether the slider is vertical. */\n get vertical() {\n return this._vertical;\n }\n set vertical(value) {\n this._vertical = coerceBooleanProperty(value);\n }\n /** The value to be used for display purposes. */\n get displayValue() {\n if (this.displayWith) {\n // Value is never null but since setters and getters cannot have\n // different types, the value getter is also typed to return null.\n return this.displayWith(this.value);\n }\n // Note that this could be improved further by rounding something like 0.999 to 1 or\n // 0.899 to 0.9, however it is very performance sensitive, because it gets called on\n // every change detection cycle.\n if (this._roundToDecimal && this.value && this.value % 1 !== 0) {\n return this.value.toFixed(this._roundToDecimal);\n }\n return this.value || 0;\n }\n /** set focus to the host element */\n focus(options) {\n this._focusHostElement(options);\n }\n /** blur the host element */\n blur() {\n this._blurHostElement();\n }\n /** The percentage of the slider that coincides with the value. */\n get percent() {\n return this._clamp(this._percent);\n }\n /**\n * Whether the axis of the slider is inverted.\n * (i.e. whether moving the thumb in the positive x or y direction decreases the slider's value).\n */\n _shouldInvertAxis() {\n // Standard non-inverted mode for a vertical slider should be dragging the thumb from bottom to\n // top. However from a y-axis standpoint this is inverted.\n return this.vertical ? !this.invert : this.invert;\n }\n /** Whether the slider is at its minimum value. */\n _isMinValue() {\n return this.percent === 0;\n }\n /**\n * The amount of space to leave between the slider thumb and the track fill & track background\n * elements.\n */\n _getThumbGap() {\n if (this.disabled) {\n return DISABLED_THUMB_GAP;\n }\n if (this._isMinValue() && !this.thumbLabel) {\n return this._isActive ? MIN_VALUE_ACTIVE_THUMB_GAP : MIN_VALUE_NONACTIVE_THUMB_GAP;\n }\n return 0;\n }\n /** CSS styles for the track background element. */\n _getTrackBackgroundStyles() {\n const axis = this.vertical ? 'Y' : 'X';\n const scale = this.vertical ? `1, ${1 - this.percent}, 1` : `${1 - this.percent}, 1, 1`;\n const sign = this._shouldInvertMouseCoords() ? '-' : '';\n return {\n // scale3d avoids some rendering issues in Chrome. See #12071.\n transform: `translate${axis}(${sign}${this._getThumbGap()}px) scale3d(${scale})`,\n };\n }\n /** CSS styles for the track fill element. */\n _getTrackFillStyles() {\n const percent = this.percent;\n const axis = this.vertical ? 'Y' : 'X';\n const scale = this.vertical ? `1, ${percent}, 1` : `${percent}, 1, 1`;\n const sign = this._shouldInvertMouseCoords() ? '' : '-';\n return {\n // scale3d avoids some rendering issues in Chrome. See #12071.\n transform: `translate${axis}(${sign}${this._getThumbGap()}px) scale3d(${scale})`,\n // iOS Safari has a bug where it won't re-render elements which start of as `scale(0)` until\n // something forces a style recalculation on it. Since we'll end up with `scale(0)` when\n // the value of the slider is 0, we can easily get into this situation. We force a\n // recalculation by changing the element's `display` when it goes from 0 to any other value.\n display: percent === 0 ? 'none' : '',\n };\n }\n /** CSS styles for the ticks container element. */\n _getTicksContainerStyles() {\n let axis = this.vertical ? 'Y' : 'X';\n // For a horizontal slider in RTL languages we push the ticks container off the left edge\n // instead of the right edge to avoid causing a horizontal scrollbar to appear.\n let sign = !this.vertical && this._getDirection() == 'rtl' ? '' : '-';\n let offset = (this._tickIntervalPercent / 2) * 100;\n return {\n 'transform': `translate${axis}(${sign}${offset}%)`,\n };\n }\n /** CSS styles for the ticks element. */\n _getTicksStyles() {\n let tickSize = this._tickIntervalPercent * 100;\n let backgroundSize = this.vertical ? `2px ${tickSize}%` : `${tickSize}% 2px`;\n let axis = this.vertical ? 'Y' : 'X';\n // Depending on the direction we pushed the ticks container, push the ticks the opposite\n // direction to re-center them but clip off the end edge. In RTL languages we need to flip the\n // ticks 180 degrees so we're really cutting off the end edge abd not the start.\n let sign = !this.vertical && this._getDirection() == 'rtl' ? '-' : '';\n let rotate = !this.vertical && this._getDirection() == 'rtl' ? ' rotate(180deg)' : '';\n let styles = {\n 'backgroundSize': backgroundSize,\n // Without translateZ ticks sometimes jitter as the slider moves on Chrome & Firefox.\n 'transform': `translateZ(0) translate${axis}(${sign}${tickSize / 2}%)${rotate}`,\n };\n if (this._isMinValue() && this._getThumbGap()) {\n const shouldInvertAxis = this._shouldInvertAxis();\n let side;\n if (this.vertical) {\n side = shouldInvertAxis ? 'Bottom' : 'Top';\n }\n else {\n side = shouldInvertAxis ? 'Right' : 'Left';\n }\n styles[`padding${side}`] = `${this._getThumbGap()}px`;\n }\n return styles;\n }\n _getThumbContainerStyles() {\n const shouldInvertAxis = this._shouldInvertAxis();\n let axis = this.vertical ? 'Y' : 'X';\n // For a horizontal slider in RTL languages we push the thumb container off the left edge\n // instead of the right edge to avoid causing a horizontal scrollbar to appear.\n let invertOffset = this._getDirection() == 'rtl' && !this.vertical ? !shouldInvertAxis : shouldInvertAxis;\n let offset = (invertOffset ? this.percent : 1 - this.percent) * 100;\n return {\n 'transform': `translate${axis}(-${offset}%)`,\n };\n }\n /**\n * Whether mouse events should be converted to a slider position by calculating their distance\n * from the right or bottom edge of the slider as opposed to the top or left.\n */\n _shouldInvertMouseCoords() {\n const shouldInvertAxis = this._shouldInvertAxis();\n return this._getDirection() == 'rtl' && !this.vertical ? !shouldInvertAxis : shouldInvertAxis;\n }\n /** The language direction for this slider element. */\n _getDirection() {\n return this._dir && this._dir.value == 'rtl' ? 'rtl' : 'ltr';\n }\n ngAfterViewInit() {\n this._focusMonitor.monitor(this._elementRef, true).subscribe((origin) => {\n this._isActive = !!origin && origin !== 'keyboard';\n this._changeDetectorRef.detectChanges();\n });\n if (this._dir) {\n this._dirChangeSubscription = this._dir.change.subscribe(() => {\n this._changeDetectorRef.markForCheck();\n });\n }\n }\n ngOnDestroy() {\n const element = this._elementRef.nativeElement;\n element.removeEventListener('mousedown', this._pointerDown, activeEventOptions);\n element.removeEventListener('touchstart', this._pointerDown, activeEventOptions);\n this._lastPointerEvent = null;\n this._removeGlobalEvents();\n this._focusMonitor.stopMonitoring(this._elementRef);\n this._dirChangeSubscription.unsubscribe();\n }\n _onMouseenter() {\n if (this.disabled) {\n return;\n }\n // We save the dimensions of the slider here so we can use them to update the spacing of the\n // ticks and determine where on the slider click and slide events happen.\n this._sliderDimensions = this._getSliderDimensions();\n this._updateTickIntervalPercent();\n }\n _onFocus() {\n // We save the dimensions of the slider here so we can use them to update the spacing of the\n // ticks and determine where on the slider click and slide events happen.\n this._sliderDimensions = this._getSliderDimensions();\n this._updateTickIntervalPercent();\n }\n _onBlur() {\n this.onTouched();\n }\n _onKeydown(event) {\n if (this.disabled ||\n hasModifierKey(event) ||\n (this._isSliding && this._isSliding !== 'keyboard')) {\n return;\n }\n const oldValue = this.value;\n switch (event.keyCode) {\n case PAGE_UP:\n this._increment(10);\n break;\n case PAGE_DOWN:\n this._increment(-10);\n break;\n case END:\n this.value = this.max;\n break;\n case HOME:\n this.value = this.min;\n break;\n case LEFT_ARROW:\n // NOTE: For a sighted user it would make more sense that when they press an arrow key on an\n // inverted slider the thumb moves in that direction. However for a blind user, nothing\n // about the slider indicates that it is inverted. They will expect left to be decrement,\n // regardless of how it appears on the screen. For speakers ofRTL languages, they probably\n // expect left to mean increment. Therefore we flip the meaning of the side arrow keys for\n // RTL. For inverted sliders we prefer a good a11y experience to having it \"look right\" for\n // sighted users, therefore we do not swap the meaning.\n this._increment(this._getDirection() == 'rtl' ? 1 : -1);\n break;\n case UP_ARROW:\n this._increment(1);\n break;\n case RIGHT_ARROW:\n // See comment on LEFT_ARROW about the conditions under which we flip the meaning.\n this._increment(this._getDirection() == 'rtl' ? -1 : 1);\n break;\n case DOWN_ARROW:\n this._increment(-1);\n break;\n default:\n // Return if the key is not one that we explicitly handle to avoid calling preventDefault on\n // it.\n return;\n }\n if (oldValue != this.value) {\n this._emitInputEvent();\n this._emitChangeEvent();\n }\n this._isSliding = 'keyboard';\n event.preventDefault();\n }\n _onKeyup() {\n if (this._isSliding === 'keyboard') {\n this._isSliding = null;\n }\n }\n /** Use defaultView of injected document if available or fallback to global window reference */\n _getWindow() {\n return this._document.defaultView || window;\n }\n /**\n * Binds our global move and end events. They're bound at the document level and only while\n * dragging so that the user doesn't have to keep their pointer exactly over the slider\n * as they're swiping across the screen.\n */\n _bindGlobalEvents(triggerEvent) {\n // Note that we bind the events to the `document`, because it allows us to capture\n // drag cancel events where the user's pointer is outside the browser window.\n const document = this._document;\n const isTouch = isTouchEvent(triggerEvent);\n const moveEventName = isTouch ? 'touchmove' : 'mousemove';\n const endEventName = isTouch ? 'touchend' : 'mouseup';\n document.addEventListener(moveEventName, this._pointerMove, activeEventOptions);\n document.addEventListener(endEventName, this._pointerUp, activeEventOptions);\n if (isTouch) {\n document.addEventListener('touchcancel', this._pointerUp, activeEventOptions);\n }\n const window = this._getWindow();\n if (typeof window !== 'undefined' && window) {\n window.addEventListener('blur', this._windowBlur);\n }\n }\n /** Removes any global event listeners that we may have added. */\n _removeGlobalEvents() {\n const document = this._document;\n document.removeEventListener('mousemove', this._pointerMove, activeEventOptions);\n document.removeEventListener('mouseup', this._pointerUp, activeEventOptions);\n document.removeEventListener('touchmove', this._pointerMove, activeEventOptions);\n document.removeEventListener('touchend', this._pointerUp, activeEventOptions);\n document.removeEventListener('touchcancel', this._pointerUp, activeEventOptions);\n const window = this._getWindow();\n if (typeof window !== 'undefined' && window) {\n window.removeEventListener('blur', this._windowBlur);\n }\n }\n /** Increments the slider by the given number of steps (negative number decrements). */\n _increment(numSteps) {\n // Pre-clamp the current value since it's allowed to be\n // out of bounds when assigned programmatically.\n const clampedValue = this._clamp(this.value || 0, this.min, this.max);\n this.value = this._clamp(clampedValue + this.step * numSteps, this.min, this.max);\n }\n /** Calculate the new value from the new physical location. The value will always be snapped. */\n _updateValueFromPosition(pos) {\n if (!this._sliderDimensions) {\n return;\n }\n let offset = this.vertical ? this._sliderDimensions.top : this._sliderDimensions.left;\n let size = this.vertical ? this._sliderDimensions.height : this._sliderDimensions.width;\n let posComponent = this.vertical ? pos.y : pos.x;\n // The exact value is calculated from the event and used to find the closest snap value.\n let percent = this._clamp((posComponent - offset) / size);\n if (this._shouldInvertMouseCoords()) {\n percent = 1 - percent;\n }\n // Since the steps may not divide cleanly into the max value, if the user\n // slid to 0 or 100 percent, we jump to the min/max value. This approach\n // is slightly more intuitive than using `Math.ceil` below, because it\n // follows the user's pointer closer.\n if (percent === 0) {\n this.value = this.min;\n }\n else if (percent === 1) {\n this.value = this.max;\n }\n else {\n const exactValue = this._calculateValue(percent);\n // This calculation finds the closest step by finding the closest\n // whole number divisible by the step relative to the min.\n const closestValue = Math.round((exactValue - this.min) / this.step) * this.step + this.min;\n // The value needs to snap to the min and max.\n this.value = this._clamp(closestValue, this.min, this.max);\n }\n }\n /** Emits a change event if the current value is different from the last emitted value. */\n _emitChangeEvent() {\n this._controlValueAccessorChangeFn(this.value);\n this.valueChange.emit(this.value);\n this.change.emit(this._createChangeEvent());\n }\n /** Emits an input event when the current value is different from the last emitted value. */\n _emitInputEvent() {\n this.input.emit(this._createChangeEvent());\n }\n /** Updates the amount of space between ticks as a percentage of the width of the slider. */\n _updateTickIntervalPercent() {\n if (!this.tickInterval || !this._sliderDimensions) {\n return;\n }\n let tickIntervalPercent;\n if (this.tickInterval == 'auto') {\n let trackSize = this.vertical ? this._sliderDimensions.height : this._sliderDimensions.width;\n let pixelsPerStep = (trackSize * this.step) / (this.max - this.min);\n let stepsPerTick = Math.ceil(MIN_AUTO_TICK_SEPARATION / pixelsPerStep);\n let pixelsPerTick = stepsPerTick * this.step;\n tickIntervalPercent = pixelsPerTick / trackSize;\n }\n else {\n tickIntervalPercent = (this.tickInterval * this.step) / (this.max - this.min);\n }\n this._tickIntervalPercent = isSafeNumber(tickIntervalPercent) ? tickIntervalPercent : 0;\n }\n /** Creates a slider change object from the specified value. */\n _createChangeEvent(value = this.value) {\n let event = new MatSliderChange();\n event.source = this;\n event.value = value;\n return event;\n }\n /** Calculates the percentage of the slider that a value is. */\n _calculatePercentage(value) {\n const percentage = ((value || 0) - this.min) / (this.max - this.min);\n return isSafeNumber(percentage) ? percentage : 0;\n }\n /** Calculates the value a percentage of the slider corresponds to. */\n _calculateValue(percentage) {\n return this.min + percentage * (this.max - this.min);\n }\n /** Return a number between two numbers. */\n _clamp(value, min = 0, max = 1) {\n return Math.max(min, Math.min(value, max));\n }\n /**\n * Get the bounding client rect of the slider track element.\n * The track is used rather than the native element to ignore the extra space that the thumb can\n * take up.\n */\n _getSliderDimensions() {\n return this._sliderWrapper ? this._sliderWrapper.nativeElement.getBoundingClientRect() : null;\n }\n /**\n * Focuses the native element.\n * Currently only used to allow a blur event to fire but will be used with keyboard input later.\n */\n _focusHostElement(options) {\n this._elementRef.nativeElement.focus(options);\n }\n /** Blurs the native element. */\n _blurHostElement() {\n this._elementRef.nativeElement.blur();\n }\n /**\n * Sets the model value. Implemented as part of ControlValueAccessor.\n * @param value\n */\n writeValue(value) {\n this.value = value;\n }\n /**\n * Registers a callback to be triggered when the value has changed.\n * Implemented as part of ControlValueAccessor.\n * @param fn Callback to be registered.\n */\n registerOnChange(fn) {\n this._controlValueAccessorChangeFn = fn;\n }\n /**\n * Registers a callback to be triggered when the component is touched.\n * Implemented as part of ControlValueAccessor.\n * @param fn Callback to be registered.\n */\n registerOnTouched(fn) {\n this.onTouched = fn;\n }\n /**\n * Sets whether the component should be disabled.\n * Implemented as part of ControlValueAccessor.\n * @param isDisabled\n */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n }\n}\nMatSlider.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatSlider, deps: [{ token: i0.ElementRef }, { token: i1.FocusMonitor }, { token: i0.ChangeDetectorRef }, { token: i2.Directionality, optional: true }, { token: 'tabindex', attribute: true }, { token: i0.NgZone }, { token: DOCUMENT }, { token: ANIMATION_MODULE_TYPE, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nMatSlider.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"13.2.0\", type: MatSlider, selector: \"mat-slider\", inputs: { disabled: \"disabled\", color: \"color\", tabIndex: \"tabIndex\", invert: \"invert\", max: \"max\", min: \"min\", step: \"step\", thumbLabel: \"thumbLabel\", tickInterval: \"tickInterval\", value: \"value\", displayWith: \"displayWith\", valueText: \"valueText\", vertical: \"vertical\" }, outputs: { change: \"change\", input: \"input\", valueChange: \"valueChange\" }, host: { attributes: { \"role\": \"slider\" }, listeners: { \"focus\": \"_onFocus()\", \"blur\": \"_onBlur()\", \"keydown\": \"_onKeydown($event)\", \"keyup\": \"_onKeyup()\", \"mouseenter\": \"_onMouseenter()\", \"selectstart\": \"$event.preventDefault()\" }, properties: { \"tabIndex\": \"tabIndex\", \"attr.aria-disabled\": \"disabled\", \"attr.aria-valuemax\": \"max\", \"attr.aria-valuemin\": \"min\", \"attr.aria-valuenow\": \"value\", \"attr.aria-valuetext\": \"valueText == null ? displayValue : valueText\", \"attr.aria-orientation\": \"vertical ? \\\"vertical\\\" : \\\"horizontal\\\"\", \"class.mat-slider-disabled\": \"disabled\", \"class.mat-slider-has-ticks\": \"tickInterval\", \"class.mat-slider-horizontal\": \"!vertical\", \"class.mat-slider-axis-inverted\": \"_shouldInvertAxis()\", \"class.mat-slider-invert-mouse-coords\": \"_shouldInvertMouseCoords()\", \"class.mat-slider-sliding\": \"_isSliding\", \"class.mat-slider-thumb-label-showing\": \"thumbLabel\", \"class.mat-slider-vertical\": \"vertical\", \"class.mat-slider-min-value\": \"_isMinValue()\", \"class.mat-slider-hide-last-tick\": \"disabled || _isMinValue() && _getThumbGap() && _shouldInvertAxis()\", \"class._mat-animation-noopable\": \"_animationMode === \\\"NoopAnimations\\\"\" }, classAttribute: \"mat-slider mat-focus-indicator\" }, providers: [MAT_SLIDER_VALUE_ACCESSOR], viewQueries: [{ propertyName: \"_sliderWrapper\", first: true, predicate: [\"sliderWrapper\"], descendants: true }], exportAs: [\"matSlider\"], usesInheritance: true, ngImport: i0, template: \"
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n {{displayValue}}\\n
\\n
\\n
\\n\", styles: [\".mat-slider{display:inline-block;position:relative;box-sizing:border-box;padding:8px;outline:none;vertical-align:middle}.mat-slider:not(.mat-slider-disabled):active,.mat-slider.mat-slider-sliding:not(.mat-slider-disabled){cursor:-webkit-grabbing;cursor:grabbing}.mat-slider-wrapper{-webkit-print-color-adjust:exact;color-adjust:exact;position:absolute}.mat-slider-track-wrapper{position:absolute;top:0;left:0;overflow:hidden}.mat-slider-track-fill{position:absolute;transform-origin:0 0;transition:transform 400ms cubic-bezier(0.25, 0.8, 0.25, 1),background-color 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-slider-track-background{position:absolute;transform-origin:100% 100%;transition:transform 400ms cubic-bezier(0.25, 0.8, 0.25, 1),background-color 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-slider-ticks-container{position:absolute;left:0;top:0;overflow:hidden}.mat-slider-ticks{-webkit-background-clip:content-box;background-clip:content-box;background-repeat:repeat;box-sizing:border-box;opacity:0;transition:opacity 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-slider-thumb-container{position:absolute;z-index:1;transition:transform 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-slider-focus-ring{position:absolute;width:30px;height:30px;border-radius:50%;transform:scale(0);opacity:0;transition:transform 400ms cubic-bezier(0.25, 0.8, 0.25, 1),background-color 400ms cubic-bezier(0.25, 0.8, 0.25, 1),opacity 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-slider.cdk-keyboard-focused .mat-slider-focus-ring,.mat-slider.cdk-program-focused .mat-slider-focus-ring{transform:scale(1);opacity:1}.mat-slider:not(.mat-slider-disabled):not(.mat-slider-sliding) .mat-slider-thumb-label,.mat-slider:not(.mat-slider-disabled):not(.mat-slider-sliding) .mat-slider-thumb{cursor:-webkit-grab;cursor:grab}.mat-slider-thumb{position:absolute;right:-10px;bottom:-10px;box-sizing:border-box;width:20px;height:20px;border:3px solid transparent;border-radius:50%;transform:scale(0.7);transition:transform 400ms cubic-bezier(0.25, 0.8, 0.25, 1),background-color 400ms cubic-bezier(0.25, 0.8, 0.25, 1),border-color 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-slider-thumb-label{display:none;align-items:center;justify-content:center;position:absolute;width:28px;height:28px;border-radius:50%;transition:transform 400ms cubic-bezier(0.25, 0.8, 0.25, 1),border-radius 400ms cubic-bezier(0.25, 0.8, 0.25, 1),background-color 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}.cdk-high-contrast-active .mat-slider-thumb-label{outline:solid 1px}.mat-slider-thumb-label-text{z-index:1;opacity:0;transition:opacity 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-slider-sliding .mat-slider-track-fill,.mat-slider-sliding .mat-slider-track-background,.mat-slider-sliding .mat-slider-thumb-container{transition-duration:0ms}.mat-slider-has-ticks .mat-slider-wrapper::after{content:\\\"\\\";position:absolute;border-width:0;border-style:solid;opacity:0;transition:opacity 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-slider-has-ticks.cdk-focused:not(.mat-slider-hide-last-tick) .mat-slider-wrapper::after,.mat-slider-has-ticks:hover:not(.mat-slider-hide-last-tick) .mat-slider-wrapper::after{opacity:1}.mat-slider-has-ticks.cdk-focused:not(.mat-slider-disabled) .mat-slider-ticks,.mat-slider-has-ticks:hover:not(.mat-slider-disabled) .mat-slider-ticks{opacity:1}.mat-slider-thumb-label-showing .mat-slider-focus-ring{display:none}.mat-slider-thumb-label-showing .mat-slider-thumb-label{display:flex}.mat-slider-axis-inverted .mat-slider-track-fill{transform-origin:100% 100%}.mat-slider-axis-inverted .mat-slider-track-background{transform-origin:0 0}.mat-slider:not(.mat-slider-disabled).cdk-focused.mat-slider-thumb-label-showing .mat-slider-thumb{transform:scale(0)}.mat-slider:not(.mat-slider-disabled).cdk-focused .mat-slider-thumb-label{border-radius:50% 50% 0}.mat-slider:not(.mat-slider-disabled).cdk-focused .mat-slider-thumb-label-text{opacity:1}.mat-slider:not(.mat-slider-disabled).cdk-mouse-focused .mat-slider-thumb,.mat-slider:not(.mat-slider-disabled).cdk-touch-focused .mat-slider-thumb,.mat-slider:not(.mat-slider-disabled).cdk-program-focused .mat-slider-thumb{border-width:2px;transform:scale(1)}.mat-slider-disabled .mat-slider-focus-ring{transform:scale(0);opacity:0}.mat-slider-disabled .mat-slider-thumb{border-width:4px;transform:scale(0.5)}.mat-slider-disabled .mat-slider-thumb-label{display:none}.mat-slider-horizontal{height:48px;min-width:128px}.mat-slider-horizontal .mat-slider-wrapper{height:2px;top:23px;left:8px;right:8px}.mat-slider-horizontal .mat-slider-wrapper::after{height:2px;border-left-width:2px;right:0;top:0}.mat-slider-horizontal .mat-slider-track-wrapper{height:2px;width:100%}.mat-slider-horizontal .mat-slider-track-fill{height:2px;width:100%;transform:scaleX(0)}.mat-slider-horizontal .mat-slider-track-background{height:2px;width:100%;transform:scaleX(1)}.mat-slider-horizontal .mat-slider-ticks-container{height:2px;width:100%}.cdk-high-contrast-active .mat-slider-horizontal .mat-slider-ticks-container{height:0;outline:solid 2px;top:1px}.mat-slider-horizontal .mat-slider-ticks{height:2px;width:100%}.mat-slider-horizontal .mat-slider-thumb-container{width:100%;height:0;top:50%}.mat-slider-horizontal .mat-slider-focus-ring{top:-15px;right:-15px}.mat-slider-horizontal .mat-slider-thumb-label{right:-14px;top:-40px;transform:translateY(26px) scale(0.01) rotate(45deg)}.mat-slider-horizontal .mat-slider-thumb-label-text{transform:rotate(-45deg)}.mat-slider-horizontal.cdk-focused .mat-slider-thumb-label{transform:rotate(45deg)}.cdk-high-contrast-active .mat-slider-horizontal.cdk-focused .mat-slider-thumb-label,.cdk-high-contrast-active .mat-slider-horizontal.cdk-focused .mat-slider-thumb-label-text{transform:none}.mat-slider-vertical{width:48px;min-height:128px}.mat-slider-vertical .mat-slider-wrapper{width:2px;top:8px;bottom:8px;left:23px}.mat-slider-vertical .mat-slider-wrapper::after{width:2px;border-top-width:2px;bottom:0;left:0}.mat-slider-vertical .mat-slider-track-wrapper{height:100%;width:2px}.mat-slider-vertical .mat-slider-track-fill{height:100%;width:2px;transform:scaleY(0)}.mat-slider-vertical .mat-slider-track-background{height:100%;width:2px;transform:scaleY(1)}.mat-slider-vertical .mat-slider-ticks-container{width:2px;height:100%}.cdk-high-contrast-active .mat-slider-vertical .mat-slider-ticks-container{width:0;outline:solid 2px;left:1px}.mat-slider-vertical .mat-slider-focus-ring{bottom:-15px;left:-15px}.mat-slider-vertical .mat-slider-ticks{width:2px;height:100%}.mat-slider-vertical .mat-slider-thumb-container{height:100%;width:0;left:50%}.mat-slider-vertical .mat-slider-thumb{-webkit-backface-visibility:hidden;backface-visibility:hidden}.mat-slider-vertical .mat-slider-thumb-label{bottom:-14px;left:-40px;transform:translateX(26px) scale(0.01) rotate(-45deg)}.mat-slider-vertical .mat-slider-thumb-label-text{transform:rotate(45deg)}.mat-slider-vertical.cdk-focused .mat-slider-thumb-label{transform:rotate(-45deg)}[dir=rtl] .mat-slider-wrapper::after{left:0;right:auto}[dir=rtl] .mat-slider-horizontal .mat-slider-track-fill{transform-origin:100% 100%}[dir=rtl] .mat-slider-horizontal .mat-slider-track-background{transform-origin:0 0}[dir=rtl] .mat-slider-horizontal.mat-slider-axis-inverted .mat-slider-track-fill{transform-origin:0 0}[dir=rtl] .mat-slider-horizontal.mat-slider-axis-inverted .mat-slider-track-background{transform-origin:100% 100%}.mat-slider._mat-animation-noopable .mat-slider-track-fill,.mat-slider._mat-animation-noopable .mat-slider-track-background,.mat-slider._mat-animation-noopable .mat-slider-ticks,.mat-slider._mat-animation-noopable .mat-slider-thumb-container,.mat-slider._mat-animation-noopable .mat-slider-focus-ring,.mat-slider._mat-animation-noopable .mat-slider-thumb,.mat-slider._mat-animation-noopable .mat-slider-thumb-label,.mat-slider._mat-animation-noopable .mat-slider-thumb-label-text,.mat-slider._mat-animation-noopable .mat-slider-has-ticks .mat-slider-wrapper::after{transition:none}\\n\"], directives: [{ type: i3.NgStyle, selector: \"[ngStyle]\", inputs: [\"ngStyle\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatSlider, decorators: [{\n type: Component,\n args: [{ selector: 'mat-slider', exportAs: 'matSlider', providers: [MAT_SLIDER_VALUE_ACCESSOR], host: {\n '(focus)': '_onFocus()',\n '(blur)': '_onBlur()',\n '(keydown)': '_onKeydown($event)',\n '(keyup)': '_onKeyup()',\n '(mouseenter)': '_onMouseenter()',\n // On Safari starting to slide temporarily triggers text selection mode which\n // show the wrong cursor. We prevent it by stopping the `selectstart` event.\n '(selectstart)': '$event.preventDefault()',\n 'class': 'mat-slider mat-focus-indicator',\n 'role': 'slider',\n '[tabIndex]': 'tabIndex',\n '[attr.aria-disabled]': 'disabled',\n '[attr.aria-valuemax]': 'max',\n '[attr.aria-valuemin]': 'min',\n '[attr.aria-valuenow]': 'value',\n // NVDA and Jaws appear to announce the `aria-valuenow` by calculating its percentage based\n // on its value between `aria-valuemin` and `aria-valuemax`. Due to how decimals are handled,\n // it can cause the slider to read out a very long value like 0.20000068 if the current value\n // is 0.2 with a min of 0 and max of 1. We work around the issue by setting `aria-valuetext`\n // to the same value that we set on the slider's thumb which will be truncated.\n '[attr.aria-valuetext]': 'valueText == null ? displayValue : valueText',\n '[attr.aria-orientation]': 'vertical ? \"vertical\" : \"horizontal\"',\n '[class.mat-slider-disabled]': 'disabled',\n '[class.mat-slider-has-ticks]': 'tickInterval',\n '[class.mat-slider-horizontal]': '!vertical',\n '[class.mat-slider-axis-inverted]': '_shouldInvertAxis()',\n // Class binding which is only used by the test harness as there is no other\n // way for the harness to detect if mouse coordinates need to be inverted.\n '[class.mat-slider-invert-mouse-coords]': '_shouldInvertMouseCoords()',\n '[class.mat-slider-sliding]': '_isSliding',\n '[class.mat-slider-thumb-label-showing]': 'thumbLabel',\n '[class.mat-slider-vertical]': 'vertical',\n '[class.mat-slider-min-value]': '_isMinValue()',\n '[class.mat-slider-hide-last-tick]': 'disabled || _isMinValue() && _getThumbGap() && _shouldInvertAxis()',\n '[class._mat-animation-noopable]': '_animationMode === \"NoopAnimations\"',\n }, inputs: ['disabled', 'color', 'tabIndex'], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: \"
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n {{displayValue}}\\n
\\n
\\n
\\n\", styles: [\".mat-slider{display:inline-block;position:relative;box-sizing:border-box;padding:8px;outline:none;vertical-align:middle}.mat-slider:not(.mat-slider-disabled):active,.mat-slider.mat-slider-sliding:not(.mat-slider-disabled){cursor:-webkit-grabbing;cursor:grabbing}.mat-slider-wrapper{-webkit-print-color-adjust:exact;color-adjust:exact;position:absolute}.mat-slider-track-wrapper{position:absolute;top:0;left:0;overflow:hidden}.mat-slider-track-fill{position:absolute;transform-origin:0 0;transition:transform 400ms cubic-bezier(0.25, 0.8, 0.25, 1),background-color 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-slider-track-background{position:absolute;transform-origin:100% 100%;transition:transform 400ms cubic-bezier(0.25, 0.8, 0.25, 1),background-color 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-slider-ticks-container{position:absolute;left:0;top:0;overflow:hidden}.mat-slider-ticks{-webkit-background-clip:content-box;background-clip:content-box;background-repeat:repeat;box-sizing:border-box;opacity:0;transition:opacity 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-slider-thumb-container{position:absolute;z-index:1;transition:transform 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-slider-focus-ring{position:absolute;width:30px;height:30px;border-radius:50%;transform:scale(0);opacity:0;transition:transform 400ms cubic-bezier(0.25, 0.8, 0.25, 1),background-color 400ms cubic-bezier(0.25, 0.8, 0.25, 1),opacity 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-slider.cdk-keyboard-focused .mat-slider-focus-ring,.mat-slider.cdk-program-focused .mat-slider-focus-ring{transform:scale(1);opacity:1}.mat-slider:not(.mat-slider-disabled):not(.mat-slider-sliding) .mat-slider-thumb-label,.mat-slider:not(.mat-slider-disabled):not(.mat-slider-sliding) .mat-slider-thumb{cursor:-webkit-grab;cursor:grab}.mat-slider-thumb{position:absolute;right:-10px;bottom:-10px;box-sizing:border-box;width:20px;height:20px;border:3px solid transparent;border-radius:50%;transform:scale(0.7);transition:transform 400ms cubic-bezier(0.25, 0.8, 0.25, 1),background-color 400ms cubic-bezier(0.25, 0.8, 0.25, 1),border-color 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-slider-thumb-label{display:none;align-items:center;justify-content:center;position:absolute;width:28px;height:28px;border-radius:50%;transition:transform 400ms cubic-bezier(0.25, 0.8, 0.25, 1),border-radius 400ms cubic-bezier(0.25, 0.8, 0.25, 1),background-color 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}.cdk-high-contrast-active .mat-slider-thumb-label{outline:solid 1px}.mat-slider-thumb-label-text{z-index:1;opacity:0;transition:opacity 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-slider-sliding .mat-slider-track-fill,.mat-slider-sliding .mat-slider-track-background,.mat-slider-sliding .mat-slider-thumb-container{transition-duration:0ms}.mat-slider-has-ticks .mat-slider-wrapper::after{content:\\\"\\\";position:absolute;border-width:0;border-style:solid;opacity:0;transition:opacity 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-slider-has-ticks.cdk-focused:not(.mat-slider-hide-last-tick) .mat-slider-wrapper::after,.mat-slider-has-ticks:hover:not(.mat-slider-hide-last-tick) .mat-slider-wrapper::after{opacity:1}.mat-slider-has-ticks.cdk-focused:not(.mat-slider-disabled) .mat-slider-ticks,.mat-slider-has-ticks:hover:not(.mat-slider-disabled) .mat-slider-ticks{opacity:1}.mat-slider-thumb-label-showing .mat-slider-focus-ring{display:none}.mat-slider-thumb-label-showing .mat-slider-thumb-label{display:flex}.mat-slider-axis-inverted .mat-slider-track-fill{transform-origin:100% 100%}.mat-slider-axis-inverted .mat-slider-track-background{transform-origin:0 0}.mat-slider:not(.mat-slider-disabled).cdk-focused.mat-slider-thumb-label-showing .mat-slider-thumb{transform:scale(0)}.mat-slider:not(.mat-slider-disabled).cdk-focused .mat-slider-thumb-label{border-radius:50% 50% 0}.mat-slider:not(.mat-slider-disabled).cdk-focused .mat-slider-thumb-label-text{opacity:1}.mat-slider:not(.mat-slider-disabled).cdk-mouse-focused .mat-slider-thumb,.mat-slider:not(.mat-slider-disabled).cdk-touch-focused .mat-slider-thumb,.mat-slider:not(.mat-slider-disabled).cdk-program-focused .mat-slider-thumb{border-width:2px;transform:scale(1)}.mat-slider-disabled .mat-slider-focus-ring{transform:scale(0);opacity:0}.mat-slider-disabled .mat-slider-thumb{border-width:4px;transform:scale(0.5)}.mat-slider-disabled .mat-slider-thumb-label{display:none}.mat-slider-horizontal{height:48px;min-width:128px}.mat-slider-horizontal .mat-slider-wrapper{height:2px;top:23px;left:8px;right:8px}.mat-slider-horizontal .mat-slider-wrapper::after{height:2px;border-left-width:2px;right:0;top:0}.mat-slider-horizontal .mat-slider-track-wrapper{height:2px;width:100%}.mat-slider-horizontal .mat-slider-track-fill{height:2px;width:100%;transform:scaleX(0)}.mat-slider-horizontal .mat-slider-track-background{height:2px;width:100%;transform:scaleX(1)}.mat-slider-horizontal .mat-slider-ticks-container{height:2px;width:100%}.cdk-high-contrast-active .mat-slider-horizontal .mat-slider-ticks-container{height:0;outline:solid 2px;top:1px}.mat-slider-horizontal .mat-slider-ticks{height:2px;width:100%}.mat-slider-horizontal .mat-slider-thumb-container{width:100%;height:0;top:50%}.mat-slider-horizontal .mat-slider-focus-ring{top:-15px;right:-15px}.mat-slider-horizontal .mat-slider-thumb-label{right:-14px;top:-40px;transform:translateY(26px) scale(0.01) rotate(45deg)}.mat-slider-horizontal .mat-slider-thumb-label-text{transform:rotate(-45deg)}.mat-slider-horizontal.cdk-focused .mat-slider-thumb-label{transform:rotate(45deg)}.cdk-high-contrast-active .mat-slider-horizontal.cdk-focused .mat-slider-thumb-label,.cdk-high-contrast-active .mat-slider-horizontal.cdk-focused .mat-slider-thumb-label-text{transform:none}.mat-slider-vertical{width:48px;min-height:128px}.mat-slider-vertical .mat-slider-wrapper{width:2px;top:8px;bottom:8px;left:23px}.mat-slider-vertical .mat-slider-wrapper::after{width:2px;border-top-width:2px;bottom:0;left:0}.mat-slider-vertical .mat-slider-track-wrapper{height:100%;width:2px}.mat-slider-vertical .mat-slider-track-fill{height:100%;width:2px;transform:scaleY(0)}.mat-slider-vertical .mat-slider-track-background{height:100%;width:2px;transform:scaleY(1)}.mat-slider-vertical .mat-slider-ticks-container{width:2px;height:100%}.cdk-high-contrast-active .mat-slider-vertical .mat-slider-ticks-container{width:0;outline:solid 2px;left:1px}.mat-slider-vertical .mat-slider-focus-ring{bottom:-15px;left:-15px}.mat-slider-vertical .mat-slider-ticks{width:2px;height:100%}.mat-slider-vertical .mat-slider-thumb-container{height:100%;width:0;left:50%}.mat-slider-vertical .mat-slider-thumb{-webkit-backface-visibility:hidden;backface-visibility:hidden}.mat-slider-vertical .mat-slider-thumb-label{bottom:-14px;left:-40px;transform:translateX(26px) scale(0.01) rotate(-45deg)}.mat-slider-vertical .mat-slider-thumb-label-text{transform:rotate(45deg)}.mat-slider-vertical.cdk-focused .mat-slider-thumb-label{transform:rotate(-45deg)}[dir=rtl] .mat-slider-wrapper::after{left:0;right:auto}[dir=rtl] .mat-slider-horizontal .mat-slider-track-fill{transform-origin:100% 100%}[dir=rtl] .mat-slider-horizontal .mat-slider-track-background{transform-origin:0 0}[dir=rtl] .mat-slider-horizontal.mat-slider-axis-inverted .mat-slider-track-fill{transform-origin:0 0}[dir=rtl] .mat-slider-horizontal.mat-slider-axis-inverted .mat-slider-track-background{transform-origin:100% 100%}.mat-slider._mat-animation-noopable .mat-slider-track-fill,.mat-slider._mat-animation-noopable .mat-slider-track-background,.mat-slider._mat-animation-noopable .mat-slider-ticks,.mat-slider._mat-animation-noopable .mat-slider-thumb-container,.mat-slider._mat-animation-noopable .mat-slider-focus-ring,.mat-slider._mat-animation-noopable .mat-slider-thumb,.mat-slider._mat-animation-noopable .mat-slider-thumb-label,.mat-slider._mat-animation-noopable .mat-slider-thumb-label-text,.mat-slider._mat-animation-noopable .mat-slider-has-ticks .mat-slider-wrapper::after{transition:none}\\n\"] }]\n }], ctorParameters: function () {\n return [{ type: i0.ElementRef }, { type: i1.FocusMonitor }, { type: i0.ChangeDetectorRef }, { type: i2.Directionality, decorators: [{\n type: Optional\n }] }, { type: undefined, decorators: [{\n type: Attribute,\n args: ['tabindex']\n }] }, { type: i0.NgZone }, { type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }];\n }, propDecorators: { invert: [{\n type: Input\n }], max: [{\n type: Input\n }], min: [{\n type: Input\n }], step: [{\n type: Input\n }], thumbLabel: [{\n type: Input\n }], tickInterval: [{\n type: Input\n }], value: [{\n type: Input\n }], displayWith: [{\n type: Input\n }], valueText: [{\n type: Input\n }], vertical: [{\n type: Input\n }], change: [{\n type: Output\n }], input: [{\n type: Output\n }], valueChange: [{\n type: Output\n }], _sliderWrapper: [{\n type: ViewChild,\n args: ['sliderWrapper']\n }] } });\n/** Checks if number is safe for calculation */\nfunction isSafeNumber(value) {\n return !isNaN(value) && isFinite(value);\n}\n/** Returns whether an event is a touch event. */\nfunction isTouchEvent(event) {\n // This function is called for every pixel that the user has dragged so we need it to be\n // as fast as possible. Since we only bind mouse events and touch events, we can assume\n // that if the event's name starts with `t`, it's a touch event.\n return event.type[0] === 't';\n}\n/** Gets the coordinates of a touch or mouse event relative to the viewport. */\nfunction getPointerPositionOnPage(event, id) {\n let point;\n if (isTouchEvent(event)) {\n // The `identifier` could be undefined if the browser doesn't support `TouchEvent.identifier`.\n // If that's the case, attribute the first touch to all active sliders. This should still cover\n // the most common case while only breaking multi-touch.\n if (typeof id === 'number') {\n point = findMatchingTouch(event.touches, id) || findMatchingTouch(event.changedTouches, id);\n }\n else {\n // `touches` will be empty for start/end events so we have to fall back to `changedTouches`.\n point = event.touches[0] || event.changedTouches[0];\n }\n }\n else {\n point = event;\n }\n return point ? { x: point.clientX, y: point.clientY } : undefined;\n}\n/** Finds a `Touch` with a specific ID in a `TouchList`. */\nfunction findMatchingTouch(touches, id) {\n for (let i = 0; i < touches.length; i++) {\n if (touches[i].identifier === id) {\n return touches[i];\n }\n }\n return undefined;\n}\n/** Gets the unique ID of a touch that matches a specific slider. */\nfunction getTouchIdForSlider(event, sliderHost) {\n for (let i = 0; i < event.touches.length; i++) {\n const target = event.touches[i].target;\n if (sliderHost === target || sliderHost.contains(target)) {\n return event.touches[i].identifier;\n }\n }\n return undefined;\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass MatSliderModule {\n}\nMatSliderModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatSliderModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nMatSliderModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatSliderModule, declarations: [MatSlider], imports: [CommonModule, MatCommonModule], exports: [MatSlider, MatCommonModule] });\nMatSliderModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatSliderModule, imports: [[CommonModule, MatCommonModule], MatCommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatSliderModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [CommonModule, MatCommonModule],\n exports: [MatSlider, MatCommonModule],\n declarations: [MatSlider],\n }]\n }] });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_SLIDER_VALUE_ACCESSOR, MatSlider, MatSliderChange, MatSliderModule };\n","import { FocusKeyManager } from '@angular/cdk/a11y';\nimport { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';\nimport { hasModifierKey, SPACE, ENTER } from '@angular/cdk/keycodes';\nimport { DOCUMENT } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { Directive, InjectionToken, EventEmitter, forwardRef, TemplateRef, Component, ViewEncapsulation, ChangeDetectionStrategy, Inject, Optional, ContentChild, ViewChild, Input, Output, QueryList, ContentChildren, NgModule } from '@angular/core';\nimport { _getFocusedElementPierceShadowDom } from '@angular/cdk/platform';\nimport { Subject, of } from 'rxjs';\nimport { startWith, takeUntil } from 'rxjs/operators';\nimport * as i1 from '@angular/cdk/bidi';\nimport { BidiModule } from '@angular/cdk/bidi';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass CdkStepHeader {\n constructor(_elementRef) {\n this._elementRef = _elementRef;\n }\n /** Focuses the step header. */\n focus() {\n this._elementRef.nativeElement.focus();\n }\n}\nCdkStepHeader.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: CdkStepHeader, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });\nCdkStepHeader.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.3.0\", type: CdkStepHeader, selector: \"[cdkStepHeader]\", host: { attributes: { \"role\": \"tab\" } }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: CdkStepHeader, decorators: [{\n type: Directive,\n args: [{\n selector: '[cdkStepHeader]',\n host: {\n 'role': 'tab',\n },\n }]\n }], ctorParameters: function () { return [{ type: i0.ElementRef }]; } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass CdkStepLabel {\n constructor(/** @docs-private */ template) {\n this.template = template;\n }\n}\nCdkStepLabel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: CdkStepLabel, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nCdkStepLabel.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.3.0\", type: CdkStepLabel, selector: \"[cdkStepLabel]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: CdkStepLabel, decorators: [{\n type: Directive,\n args: [{\n selector: '[cdkStepLabel]',\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Used to generate unique ID for each stepper component. */\nlet nextId = 0;\n/** Change event emitted on selection changes. */\nclass StepperSelectionEvent {\n}\n/** Enum to represent the different states of the steps. */\nconst STEP_STATE = {\n NUMBER: 'number',\n EDIT: 'edit',\n DONE: 'done',\n ERROR: 'error',\n};\n/** InjectionToken that can be used to specify the global stepper options. */\nconst STEPPER_GLOBAL_OPTIONS = new InjectionToken('STEPPER_GLOBAL_OPTIONS');\nclass CdkStep {\n constructor(_stepper, stepperOptions) {\n this._stepper = _stepper;\n /** Whether user has attempted to move away from the step. */\n this.interacted = false;\n /** Emits when the user has attempted to move away from the step. */\n this.interactedStream = new EventEmitter();\n this._editable = true;\n this._optional = false;\n this._completedOverride = null;\n this._customError = null;\n this._stepperOptions = stepperOptions ? stepperOptions : {};\n this._displayDefaultIndicatorType = this._stepperOptions.displayDefaultIndicatorType !== false;\n }\n /** Whether the user can return to this step once it has been marked as completed. */\n get editable() {\n return this._editable;\n }\n set editable(value) {\n this._editable = coerceBooleanProperty(value);\n }\n /** Whether the completion of step is optional. */\n get optional() {\n return this._optional;\n }\n set optional(value) {\n this._optional = coerceBooleanProperty(value);\n }\n /** Whether step is marked as completed. */\n get completed() {\n return this._completedOverride == null ? this._getDefaultCompleted() : this._completedOverride;\n }\n set completed(value) {\n this._completedOverride = coerceBooleanProperty(value);\n }\n _getDefaultCompleted() {\n return this.stepControl ? this.stepControl.valid && this.interacted : this.interacted;\n }\n /** Whether step has an error. */\n get hasError() {\n return this._customError == null ? this._getDefaultError() : this._customError;\n }\n set hasError(value) {\n this._customError = coerceBooleanProperty(value);\n }\n _getDefaultError() {\n return this.stepControl && this.stepControl.invalid && this.interacted;\n }\n /** Selects this step component. */\n select() {\n this._stepper.selected = this;\n }\n /** Resets the step to its initial state. Note that this includes resetting form data. */\n reset() {\n this.interacted = false;\n if (this._completedOverride != null) {\n this._completedOverride = false;\n }\n if (this._customError != null) {\n this._customError = false;\n }\n if (this.stepControl) {\n this.stepControl.reset();\n }\n }\n ngOnChanges() {\n // Since basically all inputs of the MatStep get proxied through the view down to the\n // underlying MatStepHeader, we have to make sure that change detection runs correctly.\n this._stepper._stateChanged();\n }\n _markAsInteracted() {\n if (!this.interacted) {\n this.interacted = true;\n this.interactedStream.emit(this);\n }\n }\n /** Determines whether the error state can be shown. */\n _showError() {\n var _a;\n // We want to show the error state either if the user opted into/out of it using the\n // global options, or if they've explicitly set it through the `hasError` input.\n return (_a = this._stepperOptions.showError) !== null && _a !== void 0 ? _a : this._customError != null;\n }\n}\nCdkStep.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: CdkStep, deps: [{ token: forwardRef(() => CdkStepper) }, { token: STEPPER_GLOBAL_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nCdkStep.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"13.3.0\", type: CdkStep, selector: \"cdk-step\", inputs: { stepControl: \"stepControl\", label: \"label\", errorMessage: \"errorMessage\", ariaLabel: [\"aria-label\", \"ariaLabel\"], ariaLabelledby: [\"aria-labelledby\", \"ariaLabelledby\"], state: \"state\", editable: \"editable\", optional: \"optional\", completed: \"completed\", hasError: \"hasError\" }, outputs: { interactedStream: \"interacted\" }, queries: [{ propertyName: \"stepLabel\", first: true, predicate: CdkStepLabel, descendants: true }], viewQueries: [{ propertyName: \"content\", first: true, predicate: TemplateRef, descendants: true, static: true }], exportAs: [\"cdkStep\"], usesOnChanges: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: CdkStep, decorators: [{\n type: Component,\n args: [{\n selector: 'cdk-step',\n exportAs: 'cdkStep',\n template: '',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n }]\n }], ctorParameters: function () {\n return [{ type: CdkStepper, decorators: [{\n type: Inject,\n args: [forwardRef(() => CdkStepper)]\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [STEPPER_GLOBAL_OPTIONS]\n }] }];\n }, propDecorators: { stepLabel: [{\n type: ContentChild,\n args: [CdkStepLabel]\n }], content: [{\n type: ViewChild,\n args: [TemplateRef, { static: true }]\n }], stepControl: [{\n type: Input\n }], interactedStream: [{\n type: Output,\n args: ['interacted']\n }], label: [{\n type: Input\n }], errorMessage: [{\n type: Input\n }], ariaLabel: [{\n type: Input,\n args: ['aria-label']\n }], ariaLabelledby: [{\n type: Input,\n args: ['aria-labelledby']\n }], state: [{\n type: Input\n }], editable: [{\n type: Input\n }], optional: [{\n type: Input\n }], completed: [{\n type: Input\n }], hasError: [{\n type: Input\n }] } });\nclass CdkStepper {\n constructor(_dir, _changeDetectorRef, _elementRef, \n /**\n * @deprecated No longer in use, to be removed.\n * @breaking-change 13.0.0\n */\n _document) {\n this._dir = _dir;\n this._changeDetectorRef = _changeDetectorRef;\n this._elementRef = _elementRef;\n /** Emits when the component is destroyed. */\n this._destroyed = new Subject();\n /** Steps that belong to the current stepper, excluding ones from nested steppers. */\n this.steps = new QueryList();\n /** List of step headers sorted based on their DOM order. */\n this._sortedHeaders = new QueryList();\n this._linear = false;\n this._selectedIndex = 0;\n /** Event emitted when the selected step has changed. */\n this.selectionChange = new EventEmitter();\n /**\n * @deprecated To be turned into a private property. Use `orientation` instead.\n * @breaking-change 13.0.0\n */\n this._orientation = 'horizontal';\n this._groupId = nextId++;\n }\n /** Whether the validity of previous steps should be checked or not. */\n get linear() {\n return this._linear;\n }\n set linear(value) {\n this._linear = coerceBooleanProperty(value);\n }\n /** The index of the selected step. */\n get selectedIndex() {\n return this._selectedIndex;\n }\n set selectedIndex(index) {\n var _a;\n const newIndex = coerceNumberProperty(index);\n if (this.steps && this._steps) {\n // Ensure that the index can't be out of bounds.\n if (!this._isValidIndex(newIndex) && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error('cdkStepper: Cannot assign out-of-bounds value to `selectedIndex`.');\n }\n (_a = this.selected) === null || _a === void 0 ? void 0 : _a._markAsInteracted();\n if (this._selectedIndex !== newIndex &&\n !this._anyControlsInvalidOrPending(newIndex) &&\n (newIndex >= this._selectedIndex || this.steps.toArray()[newIndex].editable)) {\n this._updateSelectedItemIndex(newIndex);\n }\n }\n else {\n this._selectedIndex = newIndex;\n }\n }\n /** The step that is selected. */\n get selected() {\n return this.steps ? this.steps.toArray()[this.selectedIndex] : undefined;\n }\n set selected(step) {\n this.selectedIndex = step && this.steps ? this.steps.toArray().indexOf(step) : -1;\n }\n /** Orientation of the stepper. */\n get orientation() {\n return this._orientation;\n }\n set orientation(value) {\n // This is a protected method so that `MatSteppter` can hook into it.\n this._orientation = value;\n if (this._keyManager) {\n this._keyManager.withVerticalOrientation(value === 'vertical');\n }\n }\n ngAfterContentInit() {\n this._steps.changes\n .pipe(startWith(this._steps), takeUntil(this._destroyed))\n .subscribe((steps) => {\n this.steps.reset(steps.filter(step => step._stepper === this));\n this.steps.notifyOnChanges();\n });\n }\n ngAfterViewInit() {\n // If the step headers are defined outside of the `ngFor` that renders the steps, like in the\n // Material stepper, they won't appear in the `QueryList` in the same order as they're\n // rendered in the DOM which will lead to incorrect keyboard navigation. We need to sort\n // them manually to ensure that they're correct. Alternatively, we can change the Material\n // template to inline the headers in the `ngFor`, but that'll result in a lot of\n // code duplciation. See #23539.\n this._stepHeader.changes\n .pipe(startWith(this._stepHeader), takeUntil(this._destroyed))\n .subscribe((headers) => {\n this._sortedHeaders.reset(headers.toArray().sort((a, b) => {\n const documentPosition = a._elementRef.nativeElement.compareDocumentPosition(b._elementRef.nativeElement);\n // `compareDocumentPosition` returns a bitmask so we have to use a bitwise operator.\n // https://developer.mozilla.org/en-US/docs/Web/API/Node/compareDocumentPosition\n // tslint:disable-next-line:no-bitwise\n return documentPosition & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1;\n }));\n this._sortedHeaders.notifyOnChanges();\n });\n // Note that while the step headers are content children by default, any components that\n // extend this one might have them as view children. We initialize the keyboard handling in\n // AfterViewInit so we're guaranteed for both view and content children to be defined.\n this._keyManager = new FocusKeyManager(this._sortedHeaders)\n .withWrap()\n .withHomeAndEnd()\n .withVerticalOrientation(this._orientation === 'vertical');\n (this._dir ? this._dir.change : of())\n .pipe(startWith(this._layoutDirection()), takeUntil(this._destroyed))\n .subscribe(direction => this._keyManager.withHorizontalOrientation(direction));\n this._keyManager.updateActiveItem(this._selectedIndex);\n // No need to `takeUntil` here, because we're the ones destroying `steps`.\n this.steps.changes.subscribe(() => {\n if (!this.selected) {\n this._selectedIndex = Math.max(this._selectedIndex - 1, 0);\n }\n });\n // The logic which asserts that the selected index is within bounds doesn't run before the\n // steps are initialized, because we don't how many steps there are yet so we may have an\n // invalid index on init. If that's the case, auto-correct to the default so we don't throw.\n if (!this._isValidIndex(this._selectedIndex)) {\n this._selectedIndex = 0;\n }\n }\n ngOnDestroy() {\n this.steps.destroy();\n this._sortedHeaders.destroy();\n this._destroyed.next();\n this._destroyed.complete();\n }\n /** Selects and focuses the next step in list. */\n next() {\n this.selectedIndex = Math.min(this._selectedIndex + 1, this.steps.length - 1);\n }\n /** Selects and focuses the previous step in list. */\n previous() {\n this.selectedIndex = Math.max(this._selectedIndex - 1, 0);\n }\n /** Resets the stepper to its initial state. Note that this includes clearing form data. */\n reset() {\n this._updateSelectedItemIndex(0);\n this.steps.forEach(step => step.reset());\n this._stateChanged();\n }\n /** Returns a unique id for each step label element. */\n _getStepLabelId(i) {\n return `cdk-step-label-${this._groupId}-${i}`;\n }\n /** Returns unique id for each step content element. */\n _getStepContentId(i) {\n return `cdk-step-content-${this._groupId}-${i}`;\n }\n /** Marks the component to be change detected. */\n _stateChanged() {\n this._changeDetectorRef.markForCheck();\n }\n /** Returns position state of the step with the given index. */\n _getAnimationDirection(index) {\n const position = index - this._selectedIndex;\n if (position < 0) {\n return this._layoutDirection() === 'rtl' ? 'next' : 'previous';\n }\n else if (position > 0) {\n return this._layoutDirection() === 'rtl' ? 'previous' : 'next';\n }\n return 'current';\n }\n /** Returns the type of icon to be displayed. */\n _getIndicatorType(index, state = STEP_STATE.NUMBER) {\n const step = this.steps.toArray()[index];\n const isCurrentStep = this._isCurrentStep(index);\n return step._displayDefaultIndicatorType\n ? this._getDefaultIndicatorLogic(step, isCurrentStep)\n : this._getGuidelineLogic(step, isCurrentStep, state);\n }\n _getDefaultIndicatorLogic(step, isCurrentStep) {\n if (step._showError() && step.hasError && !isCurrentStep) {\n return STEP_STATE.ERROR;\n }\n else if (!step.completed || isCurrentStep) {\n return STEP_STATE.NUMBER;\n }\n else {\n return step.editable ? STEP_STATE.EDIT : STEP_STATE.DONE;\n }\n }\n _getGuidelineLogic(step, isCurrentStep, state = STEP_STATE.NUMBER) {\n if (step._showError() && step.hasError && !isCurrentStep) {\n return STEP_STATE.ERROR;\n }\n else if (step.completed && !isCurrentStep) {\n return STEP_STATE.DONE;\n }\n else if (step.completed && isCurrentStep) {\n return state;\n }\n else if (step.editable && isCurrentStep) {\n return STEP_STATE.EDIT;\n }\n else {\n return state;\n }\n }\n _isCurrentStep(index) {\n return this._selectedIndex === index;\n }\n /** Returns the index of the currently-focused step header. */\n _getFocusIndex() {\n return this._keyManager ? this._keyManager.activeItemIndex : this._selectedIndex;\n }\n _updateSelectedItemIndex(newIndex) {\n const stepsArray = this.steps.toArray();\n this.selectionChange.emit({\n selectedIndex: newIndex,\n previouslySelectedIndex: this._selectedIndex,\n selectedStep: stepsArray[newIndex],\n previouslySelectedStep: stepsArray[this._selectedIndex],\n });\n // If focus is inside the stepper, move it to the next header, otherwise it may become\n // lost when the active step content is hidden. We can't be more granular with the check\n // (e.g. checking whether focus is inside the active step), because we don't have a\n // reference to the elements that are rendering out the content.\n this._containsFocus()\n ? this._keyManager.setActiveItem(newIndex)\n : this._keyManager.updateActiveItem(newIndex);\n this._selectedIndex = newIndex;\n this._stateChanged();\n }\n _onKeydown(event) {\n const hasModifier = hasModifierKey(event);\n const keyCode = event.keyCode;\n const manager = this._keyManager;\n if (manager.activeItemIndex != null &&\n !hasModifier &&\n (keyCode === SPACE || keyCode === ENTER)) {\n this.selectedIndex = manager.activeItemIndex;\n event.preventDefault();\n }\n else {\n manager.onKeydown(event);\n }\n }\n _anyControlsInvalidOrPending(index) {\n if (this._linear && index >= 0) {\n return this.steps\n .toArray()\n .slice(0, index)\n .some(step => {\n const control = step.stepControl;\n const isIncomplete = control\n ? control.invalid || control.pending || !step.interacted\n : !step.completed;\n return isIncomplete && !step.optional && !step._completedOverride;\n });\n }\n return false;\n }\n _layoutDirection() {\n return this._dir && this._dir.value === 'rtl' ? 'rtl' : 'ltr';\n }\n /** Checks whether the stepper contains the focused element. */\n _containsFocus() {\n const stepperElement = this._elementRef.nativeElement;\n const focusedElement = _getFocusedElementPierceShadowDom();\n return stepperElement === focusedElement || stepperElement.contains(focusedElement);\n }\n /** Checks whether the passed-in index is a valid step index. */\n _isValidIndex(index) {\n return index > -1 && (!this.steps || index < this.steps.length);\n }\n}\nCdkStepper.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: CdkStepper, deps: [{ token: i1.Directionality, optional: true }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Directive });\nCdkStepper.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.3.0\", type: CdkStepper, selector: \"[cdkStepper]\", inputs: { linear: \"linear\", selectedIndex: \"selectedIndex\", selected: \"selected\", orientation: \"orientation\" }, outputs: { selectionChange: \"selectionChange\" }, queries: [{ propertyName: \"_steps\", predicate: CdkStep, descendants: true }, { propertyName: \"_stepHeader\", predicate: CdkStepHeader, descendants: true }], exportAs: [\"cdkStepper\"], ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: CdkStepper, decorators: [{\n type: Directive,\n args: [{\n selector: '[cdkStepper]',\n exportAs: 'cdkStepper',\n }]\n }], ctorParameters: function () {\n return [{ type: i1.Directionality, decorators: [{\n type: Optional\n }] }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }];\n }, propDecorators: { _steps: [{\n type: ContentChildren,\n args: [CdkStep, { descendants: true }]\n }], _stepHeader: [{\n type: ContentChildren,\n args: [CdkStepHeader, { descendants: true }]\n }], linear: [{\n type: Input\n }], selectedIndex: [{\n type: Input\n }], selected: [{\n type: Input\n }], selectionChange: [{\n type: Output\n }], orientation: [{\n type: Input\n }] } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Button that moves to the next step in a stepper workflow. */\nclass CdkStepperNext {\n constructor(_stepper) {\n this._stepper = _stepper;\n /** Type of the next button. Defaults to \"submit\" if not specified. */\n this.type = 'submit';\n }\n}\nCdkStepperNext.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: CdkStepperNext, deps: [{ token: CdkStepper }], target: i0.ɵɵFactoryTarget.Directive });\nCdkStepperNext.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.3.0\", type: CdkStepperNext, selector: \"button[cdkStepperNext]\", inputs: { type: \"type\" }, host: { listeners: { \"click\": \"_stepper.next()\" }, properties: { \"type\": \"type\" } }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: CdkStepperNext, decorators: [{\n type: Directive,\n args: [{\n selector: 'button[cdkStepperNext]',\n host: {\n '[type]': 'type',\n '(click)': '_stepper.next()',\n },\n }]\n }], ctorParameters: function () { return [{ type: CdkStepper }]; }, propDecorators: { type: [{\n type: Input\n }] } });\n/** Button that moves to the previous step in a stepper workflow. */\nclass CdkStepperPrevious {\n constructor(_stepper) {\n this._stepper = _stepper;\n /** Type of the previous button. Defaults to \"button\" if not specified. */\n this.type = 'button';\n }\n}\nCdkStepperPrevious.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: CdkStepperPrevious, deps: [{ token: CdkStepper }], target: i0.ɵɵFactoryTarget.Directive });\nCdkStepperPrevious.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.3.0\", type: CdkStepperPrevious, selector: \"button[cdkStepperPrevious]\", inputs: { type: \"type\" }, host: { listeners: { \"click\": \"_stepper.previous()\" }, properties: { \"type\": \"type\" } }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: CdkStepperPrevious, decorators: [{\n type: Directive,\n args: [{\n selector: 'button[cdkStepperPrevious]',\n host: {\n '[type]': 'type',\n '(click)': '_stepper.previous()',\n },\n }]\n }], ctorParameters: function () { return [{ type: CdkStepper }]; }, propDecorators: { type: [{\n type: Input\n }] } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass CdkStepperModule {\n}\nCdkStepperModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: CdkStepperModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nCdkStepperModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: CdkStepperModule, declarations: [CdkStep,\n CdkStepper,\n CdkStepHeader,\n CdkStepLabel,\n CdkStepperNext,\n CdkStepperPrevious], imports: [BidiModule], exports: [CdkStep, CdkStepper, CdkStepHeader, CdkStepLabel, CdkStepperNext, CdkStepperPrevious] });\nCdkStepperModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: CdkStepperModule, imports: [[BidiModule]] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: CdkStepperModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [BidiModule],\n exports: [CdkStep, CdkStepper, CdkStepHeader, CdkStepLabel, CdkStepperNext, CdkStepperPrevious],\n declarations: [\n CdkStep,\n CdkStepper,\n CdkStepHeader,\n CdkStepLabel,\n CdkStepperNext,\n CdkStepperPrevious,\n ],\n }]\n }] });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { CdkStep, CdkStepHeader, CdkStepLabel, CdkStepper, CdkStepperModule, CdkStepperNext, CdkStepperPrevious, STEPPER_GLOBAL_OPTIONS, STEP_STATE, StepperSelectionEvent };\n","import * as i2$1 from '@angular/cdk/portal';\nimport { TemplatePortal, PortalModule } from '@angular/cdk/portal';\nimport { CdkStepLabel, CdkStepHeader, CdkStep, STEPPER_GLOBAL_OPTIONS, CdkStepper, CdkStepperNext, CdkStepperPrevious, CdkStepperModule } from '@angular/cdk/stepper';\nimport * as i5 from '@angular/common';\nimport { DOCUMENT, CommonModule } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { Directive, Injectable, Optional, SkipSelf, Component, ViewEncapsulation, ChangeDetectionStrategy, Input, forwardRef, Inject, ContentChild, QueryList, EventEmitter, ViewChildren, ContentChildren, Output, NgModule } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport * as i1 from '@angular/material/core';\nimport { mixinColor, ErrorStateMatcher, MatCommonModule, MatRippleModule } from '@angular/material/core';\nimport * as i3 from '@angular/material/icon';\nimport { MatIconModule } from '@angular/material/icon';\nimport { Subject, Subscription } from 'rxjs';\nimport * as i2 from '@angular/cdk/a11y';\nimport { switchMap, map, startWith, takeUntil, distinctUntilChanged } from 'rxjs/operators';\nimport { trigger, state, style, transition, animate } from '@angular/animations';\nimport * as i3$1 from '@angular/cdk/bidi';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass MatStepLabel extends CdkStepLabel {\n}\nMatStepLabel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatStepLabel, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nMatStepLabel.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.2.0\", type: MatStepLabel, selector: \"[matStepLabel]\", usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatStepLabel, decorators: [{\n type: Directive,\n args: [{\n selector: '[matStepLabel]',\n }]\n }] });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Stepper data that is required for internationalization. */\nclass MatStepperIntl {\n constructor() {\n /**\n * Stream that emits whenever the labels here are changed. Use this to notify\n * components if the labels have changed after initialization.\n */\n this.changes = new Subject();\n /** Label that is rendered below optional steps. */\n this.optionalLabel = 'Optional';\n /** Label that is used to indicate step as completed to screen readers. */\n this.completedLabel = 'Completed';\n /** Label that is used to indicate step as editable to screen readers. */\n this.editableLabel = 'Editable';\n }\n}\nMatStepperIntl.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatStepperIntl, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nMatStepperIntl.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatStepperIntl, providedIn: 'root' });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatStepperIntl, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n/** @docs-private */\nfunction MAT_STEPPER_INTL_PROVIDER_FACTORY(parentIntl) {\n return parentIntl || new MatStepperIntl();\n}\n/** @docs-private */\nconst MAT_STEPPER_INTL_PROVIDER = {\n provide: MatStepperIntl,\n deps: [[new Optional(), new SkipSelf(), MatStepperIntl]],\n useFactory: MAT_STEPPER_INTL_PROVIDER_FACTORY,\n};\n\n// Boilerplate for applying mixins to MatStepHeader.\n/** @docs-private */\nconst _MatStepHeaderBase = mixinColor(class MatStepHeaderBase extends CdkStepHeader {\n constructor(elementRef) {\n super(elementRef);\n }\n}, 'primary');\nclass MatStepHeader extends _MatStepHeaderBase {\n constructor(_intl, _focusMonitor, _elementRef, changeDetectorRef) {\n super(_elementRef);\n this._intl = _intl;\n this._focusMonitor = _focusMonitor;\n this._intlSubscription = _intl.changes.subscribe(() => changeDetectorRef.markForCheck());\n }\n ngAfterViewInit() {\n this._focusMonitor.monitor(this._elementRef, true);\n }\n ngOnDestroy() {\n this._intlSubscription.unsubscribe();\n this._focusMonitor.stopMonitoring(this._elementRef);\n }\n /** Focuses the step header. */\n focus(origin, options) {\n if (origin) {\n this._focusMonitor.focusVia(this._elementRef, origin, options);\n }\n else {\n this._elementRef.nativeElement.focus(options);\n }\n }\n /** Returns string label of given step if it is a text label. */\n _stringLabel() {\n return this.label instanceof MatStepLabel ? null : this.label;\n }\n /** Returns MatStepLabel if the label of given step is a template label. */\n _templateLabel() {\n return this.label instanceof MatStepLabel ? this.label : null;\n }\n /** Returns the host HTML element. */\n _getHostElement() {\n return this._elementRef.nativeElement;\n }\n /** Template context variables that are exposed to the `matStepperIcon` instances. */\n _getIconContext() {\n return {\n index: this.index,\n active: this.active,\n optional: this.optional,\n };\n }\n _getDefaultTextForState(state) {\n if (state == 'number') {\n return `${this.index + 1}`;\n }\n if (state == 'edit') {\n return 'create';\n }\n if (state == 'error') {\n return 'warning';\n }\n return state;\n }\n}\nMatStepHeader.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatStepHeader, deps: [{ token: MatStepperIntl }, { token: i2.FocusMonitor }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });\nMatStepHeader.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"13.2.0\", type: MatStepHeader, selector: \"mat-step-header\", inputs: { color: \"color\", state: \"state\", label: \"label\", errorMessage: \"errorMessage\", iconOverrides: \"iconOverrides\", index: \"index\", selected: \"selected\", active: \"active\", optional: \"optional\", disableRipple: \"disableRipple\" }, host: { attributes: { \"role\": \"tab\" }, classAttribute: \"mat-step-header\" }, usesInheritance: true, ngImport: i0, template: \"
\\n\\n
\\n
\\n \\n \\n {{_getDefaultTextForState(state)}}\\n {{_intl.completedLabel}}\\n {{_intl.editableLabel}}\\n {{_getDefaultTextForState(state)}}\\n \\n
\\n
\\n
\\n \\n
\\n \\n
\\n \\n
{{label}}
\\n\\n
{{_intl.optionalLabel}}
\\n
{{errorMessage}}
\\n
\\n\\n\", styles: [\".mat-step-header{overflow:hidden;outline:none;cursor:pointer;position:relative;box-sizing:content-box;-webkit-tap-highlight-color:transparent}.cdk-high-contrast-active .mat-step-header{outline:solid 1px}.cdk-high-contrast-active .mat-step-header.cdk-keyboard-focused,.cdk-high-contrast-active .mat-step-header.cdk-program-focused{outline:solid 3px}.cdk-high-contrast-active .mat-step-header[aria-selected=true] .mat-step-label{text-decoration:underline}.mat-step-optional,.mat-step-sub-label-error{font-size:12px}.mat-step-icon{border-radius:50%;height:24px;width:24px;flex-shrink:0;position:relative}.mat-step-icon-content{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);display:flex}.mat-step-icon .mat-icon{font-size:16px;height:16px;width:16px}.mat-step-icon-state-error .mat-icon{font-size:24px;height:24px;width:24px}.mat-step-label{display:inline-block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:50px;vertical-align:middle}.mat-step-text-label{text-overflow:ellipsis;overflow:hidden}.mat-step-header .mat-step-header-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}\\n\"], components: [{ type: i3.MatIcon, selector: \"mat-icon\", inputs: [\"color\", \"inline\", \"svgIcon\", \"fontSet\", \"fontIcon\"], exportAs: [\"matIcon\"] }], directives: [{ type: i1.MatRipple, selector: \"[mat-ripple], [matRipple]\", inputs: [\"matRippleColor\", \"matRippleUnbounded\", \"matRippleCentered\", \"matRippleRadius\", \"matRippleAnimation\", \"matRippleDisabled\", \"matRippleTrigger\"], exportAs: [\"matRipple\"] }, { type: i5.NgSwitch, selector: \"[ngSwitch]\", inputs: [\"ngSwitch\"] }, { type: i5.NgSwitchCase, selector: \"[ngSwitchCase]\", inputs: [\"ngSwitchCase\"] }, { type: i5.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\"] }, { type: i5.NgSwitchDefault, selector: \"[ngSwitchDefault]\" }, { type: i5.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatStepHeader, decorators: [{\n type: Component,\n args: [{ selector: 'mat-step-header', inputs: ['color'], host: {\n 'class': 'mat-step-header',\n 'role': 'tab',\n }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: \"
\\n\\n
\\n
\\n \\n \\n {{_getDefaultTextForState(state)}}\\n {{_intl.completedLabel}}\\n {{_intl.editableLabel}}\\n {{_getDefaultTextForState(state)}}\\n \\n
\\n
\\n
\\n \\n
\\n \\n
\\n \\n
{{label}}
\\n\\n
{{_intl.optionalLabel}}
\\n
{{errorMessage}}
\\n
\\n\\n\", styles: [\".mat-step-header{overflow:hidden;outline:none;cursor:pointer;position:relative;box-sizing:content-box;-webkit-tap-highlight-color:transparent}.cdk-high-contrast-active .mat-step-header{outline:solid 1px}.cdk-high-contrast-active .mat-step-header.cdk-keyboard-focused,.cdk-high-contrast-active .mat-step-header.cdk-program-focused{outline:solid 3px}.cdk-high-contrast-active .mat-step-header[aria-selected=true] .mat-step-label{text-decoration:underline}.mat-step-optional,.mat-step-sub-label-error{font-size:12px}.mat-step-icon{border-radius:50%;height:24px;width:24px;flex-shrink:0;position:relative}.mat-step-icon-content{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);display:flex}.mat-step-icon .mat-icon{font-size:16px;height:16px;width:16px}.mat-step-icon-state-error .mat-icon{font-size:24px;height:24px;width:24px}.mat-step-label{display:inline-block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:50px;vertical-align:middle}.mat-step-text-label{text-overflow:ellipsis;overflow:hidden}.mat-step-header .mat-step-header-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}\\n\"] }]\n }], ctorParameters: function () { return [{ type: MatStepperIntl }, { type: i2.FocusMonitor }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { state: [{\n type: Input\n }], label: [{\n type: Input\n }], errorMessage: [{\n type: Input\n }], iconOverrides: [{\n type: Input\n }], index: [{\n type: Input\n }], selected: [{\n type: Input\n }], active: [{\n type: Input\n }], optional: [{\n type: Input\n }], disableRipple: [{\n type: Input\n }] } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Animations used by the Material steppers.\n * @docs-private\n */\nconst matStepperAnimations = {\n /** Animation that transitions the step along the X axis in a horizontal stepper. */\n horizontalStepTransition: trigger('horizontalStepTransition', [\n state('previous', style({ transform: 'translate3d(-100%, 0, 0)', visibility: 'hidden' })),\n // Transition to `inherit`, rather than `visible`,\n // because visibility on a child element the one from the parent,\n // making this element focusable inside of a `hidden` element.\n state('current', style({ transform: 'none', visibility: 'inherit' })),\n state('next', style({ transform: 'translate3d(100%, 0, 0)', visibility: 'hidden' })),\n transition('* => *', animate('500ms cubic-bezier(0.35, 0, 0.25, 1)')),\n ]),\n /** Animation that transitions the step along the Y axis in a vertical stepper. */\n verticalStepTransition: trigger('verticalStepTransition', [\n state('previous', style({ height: '0px', visibility: 'hidden' })),\n state('next', style({ height: '0px', visibility: 'hidden' })),\n // Transition to `inherit`, rather than `visible`,\n // because visibility on a child element the one from the parent,\n // making this element focusable inside of a `hidden` element.\n state('current', style({ height: '*', visibility: 'inherit' })),\n transition('* <=> current', animate('225ms cubic-bezier(0.4, 0.0, 0.2, 1)')),\n ]),\n};\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Template to be used to override the icons inside the step header.\n */\nclass MatStepperIcon {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nMatStepperIcon.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatStepperIcon, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nMatStepperIcon.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.2.0\", type: MatStepperIcon, selector: \"ng-template[matStepperIcon]\", inputs: { name: [\"matStepperIcon\", \"name\"] }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatStepperIcon, decorators: [{\n type: Directive,\n args: [{\n selector: 'ng-template[matStepperIcon]',\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; }, propDecorators: { name: [{\n type: Input,\n args: ['matStepperIcon']\n }] } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Content for a `mat-step` that will be rendered lazily.\n */\nclass MatStepContent {\n constructor(_template) {\n this._template = _template;\n }\n}\nMatStepContent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatStepContent, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });\nMatStepContent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.2.0\", type: MatStepContent, selector: \"ng-template[matStepContent]\", ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatStepContent, decorators: [{\n type: Directive,\n args: [{\n selector: 'ng-template[matStepContent]',\n }]\n }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });\n\nclass MatStep extends CdkStep {\n constructor(stepper, _errorStateMatcher, _viewContainerRef, stepperOptions) {\n super(stepper, stepperOptions);\n this._errorStateMatcher = _errorStateMatcher;\n this._viewContainerRef = _viewContainerRef;\n this._isSelected = Subscription.EMPTY;\n }\n ngAfterContentInit() {\n this._isSelected = this._stepper.steps.changes\n .pipe(switchMap(() => {\n return this._stepper.selectionChange.pipe(map(event => event.selectedStep === this), startWith(this._stepper.selected === this));\n }))\n .subscribe(isSelected => {\n if (isSelected && this._lazyContent && !this._portal) {\n this._portal = new TemplatePortal(this._lazyContent._template, this._viewContainerRef);\n }\n });\n }\n ngOnDestroy() {\n this._isSelected.unsubscribe();\n }\n /** Custom error state matcher that additionally checks for validity of interacted form. */\n isErrorState(control, form) {\n const originalErrorState = this._errorStateMatcher.isErrorState(control, form);\n // Custom error state checks for the validity of form that is not submitted or touched\n // since user can trigger a form change by calling for another step without directly\n // interacting with the current form.\n const customErrorState = !!(control && control.invalid && this.interacted);\n return originalErrorState || customErrorState;\n }\n}\nMatStep.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatStep, deps: [{ token: forwardRef(() => MatStepper) }, { token: i1.ErrorStateMatcher, skipSelf: true }, { token: i0.ViewContainerRef }, { token: STEPPER_GLOBAL_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Component });\nMatStep.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"13.2.0\", type: MatStep, selector: \"mat-step\", inputs: { color: \"color\" }, providers: [\n { provide: ErrorStateMatcher, useExisting: MatStep },\n { provide: CdkStep, useExisting: MatStep },\n ], queries: [{ propertyName: \"stepLabel\", first: true, predicate: MatStepLabel, descendants: true }, { propertyName: \"_lazyContent\", first: true, predicate: MatStepContent, descendants: true }], exportAs: [\"matStep\"], usesInheritance: true, ngImport: i0, template: \"\\n \\n \\n\\n\", directives: [{ type: i2$1.CdkPortalOutlet, selector: \"[cdkPortalOutlet]\", inputs: [\"cdkPortalOutlet\"], outputs: [\"attached\"], exportAs: [\"cdkPortalOutlet\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatStep, decorators: [{\n type: Component,\n args: [{ selector: 'mat-step', providers: [\n { provide: ErrorStateMatcher, useExisting: MatStep },\n { provide: CdkStep, useExisting: MatStep },\n ], encapsulation: ViewEncapsulation.None, exportAs: 'matStep', changeDetection: ChangeDetectionStrategy.OnPush, template: \"\\n \\n \\n\\n\" }]\n }], ctorParameters: function () {\n return [{ type: MatStepper, decorators: [{\n type: Inject,\n args: [forwardRef(() => MatStepper)]\n }] }, { type: i1.ErrorStateMatcher, decorators: [{\n type: SkipSelf\n }] }, { type: i0.ViewContainerRef }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [STEPPER_GLOBAL_OPTIONS]\n }] }];\n }, propDecorators: { stepLabel: [{\n type: ContentChild,\n args: [MatStepLabel]\n }], color: [{\n type: Input\n }], _lazyContent: [{\n type: ContentChild,\n args: [MatStepContent, { static: false }]\n }] } });\n/**\n * Proxies the public APIs from `MatStepper` to the deprecated `MatHorizontalStepper` and\n * `MatVerticalStepper`.\n * @deprecated Use `MatStepper` instead.\n * @breaking-change 13.0.0\n * @docs-private\n */\nclass _MatProxyStepperBase extends CdkStepper {\n}\n_MatProxyStepperBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: _MatProxyStepperBase, deps: null, target: i0.ɵɵFactoryTarget.Directive });\n_MatProxyStepperBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.2.0\", type: _MatProxyStepperBase, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: _MatProxyStepperBase, decorators: [{\n type: Directive\n }] });\n/**\n * @deprecated Use `MatStepper` instead.\n * @breaking-change 13.0.0\n */\nclass MatHorizontalStepper extends _MatProxyStepperBase {\n}\nMatHorizontalStepper.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatHorizontalStepper, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nMatHorizontalStepper.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.2.0\", type: MatHorizontalStepper, selector: \"mat-horizontal-stepper\", usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatHorizontalStepper, decorators: [{\n type: Directive,\n args: [{ selector: 'mat-horizontal-stepper' }]\n }] });\n/**\n * @deprecated Use `MatStepper` instead.\n * @breaking-change 13.0.0\n */\nclass MatVerticalStepper extends _MatProxyStepperBase {\n}\nMatVerticalStepper.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatVerticalStepper, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nMatVerticalStepper.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.2.0\", type: MatVerticalStepper, selector: \"mat-vertical-stepper\", usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatVerticalStepper, decorators: [{\n type: Directive,\n args: [{ selector: 'mat-vertical-stepper' }]\n }] });\nclass MatStepper extends CdkStepper {\n constructor(dir, changeDetectorRef, elementRef, _document) {\n super(dir, changeDetectorRef, elementRef, _document);\n /** Steps that belong to the current stepper, excluding ones from nested steppers. */\n this.steps = new QueryList();\n /** Event emitted when the current step is done transitioning in. */\n this.animationDone = new EventEmitter();\n /**\n * Whether the label should display in bottom or end position.\n * Only applies in the `horizontal` orientation.\n */\n this.labelPosition = 'end';\n /** Consumer-specified template-refs to be used to override the header icons. */\n this._iconOverrides = {};\n /** Stream of animation `done` events when the body expands/collapses. */\n this._animationDone = new Subject();\n const nodeName = elementRef.nativeElement.nodeName.toLowerCase();\n this.orientation = nodeName === 'mat-vertical-stepper' ? 'vertical' : 'horizontal';\n }\n ngAfterContentInit() {\n super.ngAfterContentInit();\n this._icons.forEach(({ name, templateRef }) => (this._iconOverrides[name] = templateRef));\n // Mark the component for change detection whenever the content children query changes\n this.steps.changes.pipe(takeUntil(this._destroyed)).subscribe(() => {\n this._stateChanged();\n });\n this._animationDone\n .pipe(\n // This needs a `distinctUntilChanged` in order to avoid emitting the same event twice due\n // to a bug in animations where the `.done` callback gets invoked twice on some browsers.\n // See https://github.com/angular/angular/issues/24084\n distinctUntilChanged((x, y) => x.fromState === y.fromState && x.toState === y.toState), takeUntil(this._destroyed))\n .subscribe(event => {\n if (event.toState === 'current') {\n this.animationDone.emit();\n }\n });\n }\n _stepIsNavigable(index, step) {\n return step.completed || this.selectedIndex === index || !this.linear;\n }\n}\nMatStepper.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatStepper, deps: [{ token: i3$1.Directionality, optional: true }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component });\nMatStepper.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"13.2.0\", type: MatStepper, selector: \"mat-stepper, mat-vertical-stepper, mat-horizontal-stepper, [matStepper]\", inputs: { selectedIndex: \"selectedIndex\", disableRipple: \"disableRipple\", color: \"color\", labelPosition: \"labelPosition\" }, outputs: { animationDone: \"animationDone\" }, host: { attributes: { \"role\": \"tablist\" }, properties: { \"class.mat-stepper-horizontal\": \"orientation === \\\"horizontal\\\"\", \"class.mat-stepper-vertical\": \"orientation === \\\"vertical\\\"\", \"class.mat-stepper-label-position-end\": \"orientation === \\\"horizontal\\\" && labelPosition == \\\"end\\\"\", \"class.mat-stepper-label-position-bottom\": \"orientation === \\\"horizontal\\\" && labelPosition == \\\"bottom\\\"\", \"attr.aria-orientation\": \"orientation\" } }, providers: [\n { provide: CdkStepper, useExisting: MatStepper },\n { provide: MatHorizontalStepper, useExisting: MatStepper },\n { provide: MatVerticalStepper, useExisting: MatStepper },\n ], queries: [{ propertyName: \"_steps\", predicate: MatStep, descendants: true }, { propertyName: \"_icons\", predicate: MatStepperIcon, descendants: true }], viewQueries: [{ propertyName: \"_stepHeader\", predicate: MatStepHeader, descendants: true }], exportAs: [\"matStepper\", \"matVerticalStepper\", \"matHorizontalStepper\"], usesInheritance: true, ngImport: i0, template: \"\\n \\n \\n
\\n \\n \\n
\\n \\n
\\n\\n
\\n
\\n \\n
\\n
\\n
\\n\\n \\n \\n
\\n \\n
\\n
\\n
\\n \\n
\\n
\\n
\\n
\\n
\\n\\n
\\n\\n\\n\\n \\n\\n\", styles: [\".mat-stepper-vertical,.mat-stepper-horizontal{display:block}.mat-horizontal-stepper-header-container{white-space:nowrap;display:flex;align-items:center}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header-container{align-items:flex-start}.mat-stepper-horizontal-line{border-top-width:1px;border-top-style:solid;flex:auto;height:0;margin:0 -16px;min-width:32px}.mat-stepper-label-position-bottom .mat-stepper-horizontal-line{margin:0;min-width:0;position:relative}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::before,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::before,.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::after,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::after{border-top-width:1px;border-top-style:solid;content:\\\"\\\";display:inline-block;height:0;position:absolute;width:calc(50% - 20px)}.mat-horizontal-stepper-header{display:flex;height:72px;overflow:hidden;align-items:center;padding:0 24px}.mat-horizontal-stepper-header .mat-step-icon{margin-right:8px;flex:none}[dir=rtl] .mat-horizontal-stepper-header .mat-step-icon{margin-right:0;margin-left:8px}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header{box-sizing:border-box;flex-direction:column;height:auto}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::after,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::after{right:0}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::before,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::before{left:0}[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:last-child::before,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:first-child::after{display:none}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header .mat-step-icon{margin-right:0;margin-left:0}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header .mat-step-label{padding:16px 0 0 0;text-align:center;width:100%}.mat-vertical-stepper-header{display:flex;align-items:center;height:24px}.mat-vertical-stepper-header .mat-step-icon{margin-right:12px}[dir=rtl] .mat-vertical-stepper-header .mat-step-icon{margin-right:0;margin-left:12px}.mat-horizontal-stepper-content{outline:0}.mat-horizontal-stepper-content[aria-expanded=false]{height:0;overflow:hidden}.mat-horizontal-content-container{overflow:hidden;padding:0 24px 24px 24px}.cdk-high-contrast-active .mat-horizontal-content-container{outline:solid 1px}.mat-vertical-content-container{margin-left:36px;border:0;position:relative}.cdk-high-contrast-active .mat-vertical-content-container{outline:solid 1px}[dir=rtl] .mat-vertical-content-container{margin-left:0;margin-right:36px}.mat-stepper-vertical-line::before{content:\\\"\\\";position:absolute;left:0;border-left-width:1px;border-left-style:solid}[dir=rtl] .mat-stepper-vertical-line::before{left:auto;right:0}.mat-vertical-stepper-content{overflow:hidden;outline:0}.mat-vertical-content{padding:0 24px 24px 24px}.mat-step:last-child .mat-vertical-content-container{border:none}\\n\"], components: [{ type: MatStepHeader, selector: \"mat-step-header\", inputs: [\"color\", \"state\", \"label\", \"errorMessage\", \"iconOverrides\", \"index\", \"selected\", \"active\", \"optional\", \"disableRipple\"] }], directives: [{ type: i5.NgSwitch, selector: \"[ngSwitch]\", inputs: [\"ngSwitch\"] }, { type: i5.NgSwitchCase, selector: \"[ngSwitchCase]\", inputs: [\"ngSwitchCase\"] }, { type: i5.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }, { type: i5.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\"] }, { type: i5.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }], animations: [\n matStepperAnimations.horizontalStepTransition,\n matStepperAnimations.verticalStepTransition,\n ], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatStepper, decorators: [{\n type: Component,\n args: [{ selector: 'mat-stepper, mat-vertical-stepper, mat-horizontal-stepper, [matStepper]', exportAs: 'matStepper, matVerticalStepper, matHorizontalStepper', inputs: ['selectedIndex'], host: {\n '[class.mat-stepper-horizontal]': 'orientation === \"horizontal\"',\n '[class.mat-stepper-vertical]': 'orientation === \"vertical\"',\n '[class.mat-stepper-label-position-end]': 'orientation === \"horizontal\" && labelPosition == \"end\"',\n '[class.mat-stepper-label-position-bottom]': 'orientation === \"horizontal\" && labelPosition == \"bottom\"',\n '[attr.aria-orientation]': 'orientation',\n 'role': 'tablist',\n }, animations: [\n matStepperAnimations.horizontalStepTransition,\n matStepperAnimations.verticalStepTransition,\n ], providers: [\n { provide: CdkStepper, useExisting: MatStepper },\n { provide: MatHorizontalStepper, useExisting: MatStepper },\n { provide: MatVerticalStepper, useExisting: MatStepper },\n ], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: \"\\n \\n \\n
\\n \\n \\n
\\n \\n
\\n\\n
\\n
\\n \\n
\\n
\\n
\\n\\n \\n \\n
\\n \\n
\\n
\\n
\\n \\n
\\n
\\n
\\n
\\n
\\n\\n
\\n\\n\\n\\n \\n\\n\", styles: [\".mat-stepper-vertical,.mat-stepper-horizontal{display:block}.mat-horizontal-stepper-header-container{white-space:nowrap;display:flex;align-items:center}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header-container{align-items:flex-start}.mat-stepper-horizontal-line{border-top-width:1px;border-top-style:solid;flex:auto;height:0;margin:0 -16px;min-width:32px}.mat-stepper-label-position-bottom .mat-stepper-horizontal-line{margin:0;min-width:0;position:relative}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::before,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::before,.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::after,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::after{border-top-width:1px;border-top-style:solid;content:\\\"\\\";display:inline-block;height:0;position:absolute;width:calc(50% - 20px)}.mat-horizontal-stepper-header{display:flex;height:72px;overflow:hidden;align-items:center;padding:0 24px}.mat-horizontal-stepper-header .mat-step-icon{margin-right:8px;flex:none}[dir=rtl] .mat-horizontal-stepper-header .mat-step-icon{margin-right:0;margin-left:8px}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header{box-sizing:border-box;flex-direction:column;height:auto}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::after,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::after{right:0}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:first-child)::before,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:not(:last-child)::before{left:0}[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:last-child::before,[dir=rtl] .mat-stepper-label-position-bottom .mat-horizontal-stepper-header:first-child::after{display:none}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header .mat-step-icon{margin-right:0;margin-left:0}.mat-stepper-label-position-bottom .mat-horizontal-stepper-header .mat-step-label{padding:16px 0 0 0;text-align:center;width:100%}.mat-vertical-stepper-header{display:flex;align-items:center;height:24px}.mat-vertical-stepper-header .mat-step-icon{margin-right:12px}[dir=rtl] .mat-vertical-stepper-header .mat-step-icon{margin-right:0;margin-left:12px}.mat-horizontal-stepper-content{outline:0}.mat-horizontal-stepper-content[aria-expanded=false]{height:0;overflow:hidden}.mat-horizontal-content-container{overflow:hidden;padding:0 24px 24px 24px}.cdk-high-contrast-active .mat-horizontal-content-container{outline:solid 1px}.mat-vertical-content-container{margin-left:36px;border:0;position:relative}.cdk-high-contrast-active .mat-vertical-content-container{outline:solid 1px}[dir=rtl] .mat-vertical-content-container{margin-left:0;margin-right:36px}.mat-stepper-vertical-line::before{content:\\\"\\\";position:absolute;left:0;border-left-width:1px;border-left-style:solid}[dir=rtl] .mat-stepper-vertical-line::before{left:auto;right:0}.mat-vertical-stepper-content{overflow:hidden;outline:0}.mat-vertical-content{padding:0 24px 24px 24px}.mat-step:last-child .mat-vertical-content-container{border:none}\\n\"] }]\n }], ctorParameters: function () {\n return [{ type: i3$1.Directionality, decorators: [{\n type: Optional\n }] }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }];\n }, propDecorators: { _stepHeader: [{\n type: ViewChildren,\n args: [MatStepHeader]\n }], _steps: [{\n type: ContentChildren,\n args: [MatStep, { descendants: true }]\n }], _icons: [{\n type: ContentChildren,\n args: [MatStepperIcon, { descendants: true }]\n }], animationDone: [{\n type: Output\n }], disableRipple: [{\n type: Input\n }], color: [{\n type: Input\n }], labelPosition: [{\n type: Input\n }] } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Button that moves to the next step in a stepper workflow. */\nclass MatStepperNext extends CdkStepperNext {\n}\nMatStepperNext.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatStepperNext, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nMatStepperNext.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.2.0\", type: MatStepperNext, selector: \"button[matStepperNext]\", inputs: { type: \"type\" }, host: { properties: { \"type\": \"type\" }, classAttribute: \"mat-stepper-next\" }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatStepperNext, decorators: [{\n type: Directive,\n args: [{\n selector: 'button[matStepperNext]',\n host: {\n 'class': 'mat-stepper-next',\n '[type]': 'type',\n },\n inputs: ['type'],\n }]\n }] });\n/** Button that moves to the previous step in a stepper workflow. */\nclass MatStepperPrevious extends CdkStepperPrevious {\n}\nMatStepperPrevious.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatStepperPrevious, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nMatStepperPrevious.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.2.0\", type: MatStepperPrevious, selector: \"button[matStepperPrevious]\", inputs: { type: \"type\" }, host: { properties: { \"type\": \"type\" }, classAttribute: \"mat-stepper-previous\" }, usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatStepperPrevious, decorators: [{\n type: Directive,\n args: [{\n selector: 'button[matStepperPrevious]',\n host: {\n 'class': 'mat-stepper-previous',\n '[type]': 'type',\n },\n inputs: ['type'],\n }]\n }] });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass MatStepperModule {\n}\nMatStepperModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatStepperModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nMatStepperModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatStepperModule, declarations: [MatHorizontalStepper,\n MatVerticalStepper,\n MatStep,\n MatStepLabel,\n MatStepper,\n MatStepperNext,\n MatStepperPrevious,\n MatStepHeader,\n MatStepperIcon,\n MatStepContent], imports: [MatCommonModule,\n CommonModule,\n PortalModule,\n MatButtonModule,\n CdkStepperModule,\n MatIconModule,\n MatRippleModule], exports: [MatCommonModule,\n MatStep,\n MatStepLabel,\n MatStepper,\n MatStepperNext,\n MatStepperPrevious,\n MatStepHeader,\n MatStepperIcon,\n MatStepContent] });\nMatStepperModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatStepperModule, providers: [MAT_STEPPER_INTL_PROVIDER, ErrorStateMatcher], imports: [[\n MatCommonModule,\n CommonModule,\n PortalModule,\n MatButtonModule,\n CdkStepperModule,\n MatIconModule,\n MatRippleModule,\n ], MatCommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatStepperModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [\n MatCommonModule,\n CommonModule,\n PortalModule,\n MatButtonModule,\n CdkStepperModule,\n MatIconModule,\n MatRippleModule,\n ],\n exports: [\n MatCommonModule,\n MatStep,\n MatStepLabel,\n MatStepper,\n MatStepperNext,\n MatStepperPrevious,\n MatStepHeader,\n MatStepperIcon,\n MatStepContent,\n ],\n declarations: [\n MatHorizontalStepper,\n MatVerticalStepper,\n MatStep,\n MatStepLabel,\n MatStepper,\n MatStepperNext,\n MatStepperPrevious,\n MatStepHeader,\n MatStepperIcon,\n MatStepContent,\n ],\n providers: [MAT_STEPPER_INTL_PROVIDER, ErrorStateMatcher],\n }]\n }] });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_STEPPER_INTL_PROVIDER, MAT_STEPPER_INTL_PROVIDER_FACTORY, MatHorizontalStepper, MatStep, MatStepContent, MatStepHeader, MatStepLabel, MatStepper, MatStepperIcon, MatStepperIntl, MatStepperModule, MatStepperNext, MatStepperPrevious, MatVerticalStepper, matStepperAnimations };\n","import * as i0 from '@angular/core';\nimport { Directive, Component, ChangeDetectionStrategy, ViewEncapsulation, Inject, ContentChildren, NgModule } from '@angular/core';\nimport { mixinColor, MatCommonModule } from '@angular/material/core';\nimport { DOCUMENT } from '@angular/common';\nimport * as i1 from '@angular/cdk/platform';\n\n// Boilerplate for applying mixins to MatToolbar.\n/** @docs-private */\nconst _MatToolbarBase = mixinColor(class {\n constructor(_elementRef) {\n this._elementRef = _elementRef;\n }\n});\nclass MatToolbarRow {\n}\nMatToolbarRow.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatToolbarRow, deps: [], target: i0.ɵɵFactoryTarget.Directive });\nMatToolbarRow.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.2.0\", type: MatToolbarRow, selector: \"mat-toolbar-row\", host: { classAttribute: \"mat-toolbar-row\" }, exportAs: [\"matToolbarRow\"], ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatToolbarRow, decorators: [{\n type: Directive,\n args: [{\n selector: 'mat-toolbar-row',\n exportAs: 'matToolbarRow',\n host: { 'class': 'mat-toolbar-row' },\n }]\n }] });\nclass MatToolbar extends _MatToolbarBase {\n constructor(elementRef, _platform, document) {\n super(elementRef);\n this._platform = _platform;\n // TODO: make the document a required param when doing breaking changes.\n this._document = document;\n }\n ngAfterViewInit() {\n if (this._platform.isBrowser) {\n this._checkToolbarMixedModes();\n this._toolbarRows.changes.subscribe(() => this._checkToolbarMixedModes());\n }\n }\n /**\n * Throws an exception when developers are attempting to combine the different toolbar row modes.\n */\n _checkToolbarMixedModes() {\n if (this._toolbarRows.length && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n // Check if there are any other DOM nodes that can display content but aren't inside of\n // a element.\n const isCombinedUsage = Array.from(this._elementRef.nativeElement.childNodes)\n .filter(node => !(node.classList && node.classList.contains('mat-toolbar-row')))\n .filter(node => node.nodeType !== (this._document ? this._document.COMMENT_NODE : 8))\n .some(node => !!(node.textContent && node.textContent.trim()));\n if (isCombinedUsage) {\n throwToolbarMixedModesError();\n }\n }\n }\n}\nMatToolbar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatToolbar, deps: [{ token: i0.ElementRef }, { token: i1.Platform }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component });\nMatToolbar.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"13.2.0\", type: MatToolbar, selector: \"mat-toolbar\", inputs: { color: \"color\" }, host: { properties: { \"class.mat-toolbar-multiple-rows\": \"_toolbarRows.length > 0\", \"class.mat-toolbar-single-row\": \"_toolbarRows.length === 0\" }, classAttribute: \"mat-toolbar\" }, queries: [{ propertyName: \"_toolbarRows\", predicate: MatToolbarRow, descendants: true }], exportAs: [\"matToolbar\"], usesInheritance: true, ngImport: i0, template: \"\\n\\n\", styles: [\".cdk-high-contrast-active .mat-toolbar{outline:solid 1px}.mat-toolbar-row,.mat-toolbar-single-row{display:flex;box-sizing:border-box;padding:0 16px;width:100%;flex-direction:row;align-items:center;white-space:nowrap}.mat-toolbar-multiple-rows{display:flex;box-sizing:border-box;flex-direction:column;width:100%}\\n\"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatToolbar, decorators: [{\n type: Component,\n args: [{ selector: 'mat-toolbar', exportAs: 'matToolbar', inputs: ['color'], host: {\n 'class': 'mat-toolbar',\n '[class.mat-toolbar-multiple-rows]': '_toolbarRows.length > 0',\n '[class.mat-toolbar-single-row]': '_toolbarRows.length === 0',\n }, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: \"\\n\\n\", styles: [\".cdk-high-contrast-active .mat-toolbar{outline:solid 1px}.mat-toolbar-row,.mat-toolbar-single-row{display:flex;box-sizing:border-box;padding:0 16px;width:100%;flex-direction:row;align-items:center;white-space:nowrap}.mat-toolbar-multiple-rows{display:flex;box-sizing:border-box;flex-direction:column;width:100%}\\n\"] }]\n }], ctorParameters: function () {\n return [{ type: i0.ElementRef }, { type: i1.Platform }, { type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }];\n }, propDecorators: { _toolbarRows: [{\n type: ContentChildren,\n args: [MatToolbarRow, { descendants: true }]\n }] } });\n/**\n * Throws an exception when attempting to combine the different toolbar row modes.\n * @docs-private\n */\nfunction throwToolbarMixedModesError() {\n throw Error('MatToolbar: Attempting to combine different toolbar modes. ' +\n 'Either specify multiple `` elements explicitly or just place content ' +\n 'inside of a `` for a single row.');\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass MatToolbarModule {\n}\nMatToolbarModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatToolbarModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nMatToolbarModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatToolbarModule, declarations: [MatToolbar, MatToolbarRow], imports: [MatCommonModule], exports: [MatToolbar, MatToolbarRow, MatCommonModule] });\nMatToolbarModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatToolbarModule, imports: [[MatCommonModule], MatCommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatToolbarModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [MatCommonModule],\n exports: [MatToolbar, MatToolbarRow, MatCommonModule],\n declarations: [MatToolbar, MatToolbarRow],\n }]\n }] });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MatToolbar, MatToolbarModule, MatToolbarRow, throwToolbarMixedModesError };\n","import * as i1$1 from '@angular/cdk/overlay';\nimport { OverlayModule, OverlayConfig } from '@angular/cdk/overlay';\nimport * as i4 from '@angular/cdk/portal';\nimport { BasePortalOutlet, CdkPortalOutlet, PortalModule, TemplatePortal, ComponentPortal } from '@angular/cdk/portal';\nimport * as i0 from '@angular/core';\nimport { InjectionToken, EventEmitter, Component, ChangeDetectionStrategy, ViewEncapsulation, Optional, Inject, ViewChild, NgModule, TemplateRef, Injector, InjectFlags, Injectable, SkipSelf } from '@angular/core';\nimport { AnimationDurations, AnimationCurves, MatCommonModule } from '@angular/material/core';\nimport { coerceArray } from '@angular/cdk/coercion';\nimport * as i2 from '@angular/cdk/layout';\nimport { Breakpoints } from '@angular/cdk/layout';\nimport { _getFocusedElementPierceShadowDom } from '@angular/cdk/platform';\nimport { DOCUMENT } from '@angular/common';\nimport { trigger, state, style, transition, group, animate, query, animateChild } from '@angular/animations';\nimport * as i1 from '@angular/cdk/a11y';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { Subject, merge, of } from 'rxjs';\nimport { ESCAPE, hasModifierKey } from '@angular/cdk/keycodes';\nimport { filter, take } from 'rxjs/operators';\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Animations used by the Material bottom sheet. */\nconst matBottomSheetAnimations = {\n /** Animation that shows and hides a bottom sheet. */\n bottomSheetState: trigger('state', [\n state('void, hidden', style({ transform: 'translateY(100%)' })),\n state('visible', style({ transform: 'translateY(0%)' })),\n transition('visible => void, visible => hidden', group([\n animate(`${AnimationDurations.COMPLEX} ${AnimationCurves.ACCELERATION_CURVE}`),\n query('@*', animateChild(), { optional: true }),\n ])),\n transition('void => visible', group([\n animate(`${AnimationDurations.EXITING} ${AnimationCurves.DECELERATION_CURVE}`),\n query('@*', animateChild(), { optional: true }),\n ])),\n ]),\n};\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Injection token that can be used to access the data that was passed in to a bottom sheet. */\nconst MAT_BOTTOM_SHEET_DATA = new InjectionToken('MatBottomSheetData');\n/**\n * Configuration used when opening a bottom sheet.\n */\nclass MatBottomSheetConfig {\n constructor() {\n /** Data being injected into the child component. */\n this.data = null;\n /** Whether the bottom sheet has a backdrop. */\n this.hasBackdrop = true;\n /** Whether the user can use escape or clicking outside to close the bottom sheet. */\n this.disableClose = false;\n /** Aria label to assign to the bottom sheet element. */\n this.ariaLabel = null;\n /**\n * Whether the bottom sheet should close when the user goes backwards/forwards in history.\n * Note that this usually doesn't include clicking on links (unless the user is using\n * the `HashLocationStrategy`).\n */\n this.closeOnNavigation = true;\n // Note that this is set to 'dialog' by default, because while the a11y recommendations\n // are to focus the first focusable element, doing so prevents screen readers from reading out the\n // rest of the bottom sheet content.\n /**\n * Where the bottom sheet should focus on open.\n * @breaking-change 14.0.0 Remove boolean option from autoFocus. Use string or\n * AutoFocusTarget instead.\n */\n this.autoFocus = 'dialog';\n /**\n * Whether the bottom sheet should restore focus to the\n * previously-focused element, after it's closed.\n */\n this.restoreFocus = true;\n }\n}\n\n// TODO(crisbeto): consolidate some logic between this, MatDialog and MatSnackBar\n/**\n * Internal component that wraps user-provided bottom sheet content.\n * @docs-private\n */\nclass MatBottomSheetContainer extends BasePortalOutlet {\n constructor(_elementRef, _changeDetectorRef, _focusTrapFactory, _interactivityChecker, _ngZone, breakpointObserver, document, \n /** The bottom sheet configuration. */\n bottomSheetConfig) {\n super();\n this._elementRef = _elementRef;\n this._changeDetectorRef = _changeDetectorRef;\n this._focusTrapFactory = _focusTrapFactory;\n this._interactivityChecker = _interactivityChecker;\n this._ngZone = _ngZone;\n this.bottomSheetConfig = bottomSheetConfig;\n /** The state of the bottom sheet animations. */\n this._animationState = 'void';\n /** Emits whenever the state of the animation changes. */\n this._animationStateChanged = new EventEmitter();\n /** Element that was focused before the bottom sheet was opened. */\n this._elementFocusedBeforeOpened = null;\n /**\n * Attaches a DOM portal to the bottom sheet container.\n * @deprecated To be turned into a method.\n * @breaking-change 10.0.0\n */\n this.attachDomPortal = (portal) => {\n this._validatePortalAttached();\n this._setPanelClass();\n this._savePreviouslyFocusedElement();\n return this._portalOutlet.attachDomPortal(portal);\n };\n this._document = document;\n this._breakpointSubscription = breakpointObserver\n .observe([Breakpoints.Medium, Breakpoints.Large, Breakpoints.XLarge])\n .subscribe(() => {\n this._toggleClass('mat-bottom-sheet-container-medium', breakpointObserver.isMatched(Breakpoints.Medium));\n this._toggleClass('mat-bottom-sheet-container-large', breakpointObserver.isMatched(Breakpoints.Large));\n this._toggleClass('mat-bottom-sheet-container-xlarge', breakpointObserver.isMatched(Breakpoints.XLarge));\n });\n }\n /** Attach a component portal as content to this bottom sheet container. */\n attachComponentPortal(portal) {\n this._validatePortalAttached();\n this._setPanelClass();\n this._savePreviouslyFocusedElement();\n return this._portalOutlet.attachComponentPortal(portal);\n }\n /** Attach a template portal as content to this bottom sheet container. */\n attachTemplatePortal(portal) {\n this._validatePortalAttached();\n this._setPanelClass();\n this._savePreviouslyFocusedElement();\n return this._portalOutlet.attachTemplatePortal(portal);\n }\n /** Begin animation of bottom sheet entrance into view. */\n enter() {\n if (!this._destroyed) {\n this._animationState = 'visible';\n this._changeDetectorRef.detectChanges();\n }\n }\n /** Begin animation of the bottom sheet exiting from view. */\n exit() {\n if (!this._destroyed) {\n this._animationState = 'hidden';\n this._changeDetectorRef.markForCheck();\n }\n }\n ngOnDestroy() {\n this._breakpointSubscription.unsubscribe();\n this._destroyed = true;\n }\n _onAnimationDone(event) {\n if (event.toState === 'hidden') {\n this._restoreFocus();\n }\n else if (event.toState === 'visible') {\n this._trapFocus();\n }\n this._animationStateChanged.emit(event);\n }\n _onAnimationStart(event) {\n this._animationStateChanged.emit(event);\n }\n _toggleClass(cssClass, add) {\n this._elementRef.nativeElement.classList.toggle(cssClass, add);\n }\n _validatePortalAttached() {\n if (this._portalOutlet.hasAttached() && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error('Attempting to attach bottom sheet content after content is already attached');\n }\n }\n _setPanelClass() {\n const element = this._elementRef.nativeElement;\n element.classList.add(...coerceArray(this.bottomSheetConfig.panelClass || []));\n }\n /**\n * Focuses the provided element. If the element is not focusable, it will add a tabIndex\n * attribute to forcefully focus it. The attribute is removed after focus is moved.\n * @param element The element to focus.\n */\n _forceFocus(element, options) {\n if (!this._interactivityChecker.isFocusable(element)) {\n element.tabIndex = -1;\n // The tabindex attribute should be removed to avoid navigating to that element again\n this._ngZone.runOutsideAngular(() => {\n element.addEventListener('blur', () => element.removeAttribute('tabindex'));\n element.addEventListener('mousedown', () => element.removeAttribute('tabindex'));\n });\n }\n element.focus(options);\n }\n /**\n * Focuses the first element that matches the given selector within the focus trap.\n * @param selector The CSS selector for the element to set focus to.\n */\n _focusByCssSelector(selector, options) {\n let elementToFocus = this._elementRef.nativeElement.querySelector(selector);\n if (elementToFocus) {\n this._forceFocus(elementToFocus, options);\n }\n }\n /**\n * Moves the focus inside the focus trap. When autoFocus is not set to 'bottom-sheet',\n * if focus cannot be moved then focus will go to the bottom sheet container.\n */\n _trapFocus() {\n const element = this._elementRef.nativeElement;\n if (!this._focusTrap) {\n this._focusTrap = this._focusTrapFactory.create(element);\n }\n // If were to attempt to focus immediately, then the content of the bottom sheet would not\n // yet be ready in instances where change detection has to run first. To deal with this,\n // we simply wait for the microtask queue to be empty when setting focus when autoFocus\n // isn't set to bottom sheet. If the element inside the bottom sheet can't be focused,\n // then the container is focused so the user can't tab into other elements behind it.\n switch (this.bottomSheetConfig.autoFocus) {\n case false:\n case 'dialog':\n const activeElement = _getFocusedElementPierceShadowDom();\n // Ensure that focus is on the bottom sheet container. It's possible that a different\n // component tried to move focus while the open animation was running. See:\n // https://github.com/angular/components/issues/16215. Note that we only want to do this\n // if the focus isn't inside the bottom sheet already, because it's possible that the\n // consumer specified `autoFocus` in order to move focus themselves.\n if (activeElement !== element && !element.contains(activeElement)) {\n element.focus();\n }\n break;\n case true:\n case 'first-tabbable':\n this._focusTrap.focusInitialElementWhenReady();\n break;\n case 'first-heading':\n this._focusByCssSelector('h1, h2, h3, h4, h5, h6, [role=\"heading\"]');\n break;\n default:\n this._focusByCssSelector(this.bottomSheetConfig.autoFocus);\n break;\n }\n }\n /** Restores focus to the element that was focused before the bottom sheet was opened. */\n _restoreFocus() {\n const toFocus = this._elementFocusedBeforeOpened;\n // We need the extra check, because IE can set the `activeElement` to null in some cases.\n if (this.bottomSheetConfig.restoreFocus && toFocus && typeof toFocus.focus === 'function') {\n const activeElement = _getFocusedElementPierceShadowDom();\n const element = this._elementRef.nativeElement;\n // Make sure that focus is still inside the bottom sheet or is on the body (usually because a\n // non-focusable element like the backdrop was clicked) before moving it. It's possible that\n // the consumer moved it themselves before the animation was done, in which case we shouldn't\n // do anything.\n if (!activeElement ||\n activeElement === this._document.body ||\n activeElement === element ||\n element.contains(activeElement)) {\n toFocus.focus();\n }\n }\n if (this._focusTrap) {\n this._focusTrap.destroy();\n }\n }\n /** Saves a reference to the element that was focused before the bottom sheet was opened. */\n _savePreviouslyFocusedElement() {\n this._elementFocusedBeforeOpened = _getFocusedElementPierceShadowDom();\n // The `focus` method isn't available during server-side rendering.\n if (this._elementRef.nativeElement.focus) {\n this._ngZone.runOutsideAngular(() => {\n Promise.resolve().then(() => this._elementRef.nativeElement.focus());\n });\n }\n }\n}\nMatBottomSheetContainer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatBottomSheetContainer, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.FocusTrapFactory }, { token: i1.InteractivityChecker }, { token: i0.NgZone }, { token: i2.BreakpointObserver }, { token: DOCUMENT, optional: true }, { token: MatBottomSheetConfig }], target: i0.ɵɵFactoryTarget.Component });\nMatBottomSheetContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"13.2.0\", type: MatBottomSheetContainer, selector: \"mat-bottom-sheet-container\", host: { attributes: { \"tabindex\": \"-1\", \"role\": \"dialog\", \"aria-modal\": \"true\" }, listeners: { \"@state.start\": \"_onAnimationStart($event)\", \"@state.done\": \"_onAnimationDone($event)\" }, properties: { \"attr.aria-label\": \"bottomSheetConfig?.ariaLabel\", \"@state\": \"_animationState\" }, classAttribute: \"mat-bottom-sheet-container\" }, viewQueries: [{ propertyName: \"_portalOutlet\", first: true, predicate: CdkPortalOutlet, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: \"\\r\\n\", styles: [\".mat-bottom-sheet-container{padding:8px 16px;min-width:100vw;box-sizing:border-box;display:block;outline:0;max-height:80vh;overflow:auto}.cdk-high-contrast-active .mat-bottom-sheet-container{outline:1px solid}.mat-bottom-sheet-container-xlarge,.mat-bottom-sheet-container-large,.mat-bottom-sheet-container-medium{border-top-left-radius:4px;border-top-right-radius:4px}.mat-bottom-sheet-container-medium{min-width:384px;max-width:calc(100vw - 128px)}.mat-bottom-sheet-container-large{min-width:512px;max-width:calc(100vw - 256px)}.mat-bottom-sheet-container-xlarge{min-width:576px;max-width:calc(100vw - 384px)}\\n\"], directives: [{ type: i4.CdkPortalOutlet, selector: \"[cdkPortalOutlet]\", inputs: [\"cdkPortalOutlet\"], outputs: [\"attached\"], exportAs: [\"cdkPortalOutlet\"] }], animations: [matBottomSheetAnimations.bottomSheetState], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatBottomSheetContainer, decorators: [{\n type: Component,\n args: [{ selector: 'mat-bottom-sheet-container', changeDetection: ChangeDetectionStrategy.Default, encapsulation: ViewEncapsulation.None, animations: [matBottomSheetAnimations.bottomSheetState], host: {\n 'class': 'mat-bottom-sheet-container',\n 'tabindex': '-1',\n 'role': 'dialog',\n 'aria-modal': 'true',\n '[attr.aria-label]': 'bottomSheetConfig?.ariaLabel',\n '[@state]': '_animationState',\n '(@state.start)': '_onAnimationStart($event)',\n '(@state.done)': '_onAnimationDone($event)',\n }, template: \"\\r\\n\", styles: [\".mat-bottom-sheet-container{padding:8px 16px;min-width:100vw;box-sizing:border-box;display:block;outline:0;max-height:80vh;overflow:auto}.cdk-high-contrast-active .mat-bottom-sheet-container{outline:1px solid}.mat-bottom-sheet-container-xlarge,.mat-bottom-sheet-container-large,.mat-bottom-sheet-container-medium{border-top-left-radius:4px;border-top-right-radius:4px}.mat-bottom-sheet-container-medium{min-width:384px;max-width:calc(100vw - 128px)}.mat-bottom-sheet-container-large{min-width:512px;max-width:calc(100vw - 256px)}.mat-bottom-sheet-container-xlarge{min-width:576px;max-width:calc(100vw - 384px)}\\n\"] }]\n }], ctorParameters: function () {\n return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.FocusTrapFactory }, { type: i1.InteractivityChecker }, { type: i0.NgZone }, { type: i2.BreakpointObserver }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: MatBottomSheetConfig }];\n }, propDecorators: { _portalOutlet: [{\n type: ViewChild,\n args: [CdkPortalOutlet, { static: true }]\n }] } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass MatBottomSheetModule {\n}\nMatBottomSheetModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatBottomSheetModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nMatBottomSheetModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatBottomSheetModule, declarations: [MatBottomSheetContainer], imports: [OverlayModule, MatCommonModule, PortalModule], exports: [MatBottomSheetContainer, MatCommonModule] });\nMatBottomSheetModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatBottomSheetModule, imports: [[OverlayModule, MatCommonModule, PortalModule], MatCommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatBottomSheetModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [OverlayModule, MatCommonModule, PortalModule],\n exports: [MatBottomSheetContainer, MatCommonModule],\n declarations: [MatBottomSheetContainer],\n }]\n }] });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Reference to a bottom sheet dispatched from the bottom sheet service.\n */\nclass MatBottomSheetRef {\n constructor(containerInstance, _overlayRef) {\n this._overlayRef = _overlayRef;\n /** Subject for notifying the user that the bottom sheet has been dismissed. */\n this._afterDismissed = new Subject();\n /** Subject for notifying the user that the bottom sheet has opened and appeared. */\n this._afterOpened = new Subject();\n this.containerInstance = containerInstance;\n this.disableClose = containerInstance.bottomSheetConfig.disableClose;\n // Emit when opening animation completes\n containerInstance._animationStateChanged\n .pipe(filter(event => event.phaseName === 'done' && event.toState === 'visible'), take(1))\n .subscribe(() => {\n this._afterOpened.next();\n this._afterOpened.complete();\n });\n // Dispose overlay when closing animation is complete\n containerInstance._animationStateChanged\n .pipe(filter(event => event.phaseName === 'done' && event.toState === 'hidden'), take(1))\n .subscribe(() => {\n clearTimeout(this._closeFallbackTimeout);\n _overlayRef.dispose();\n });\n _overlayRef\n .detachments()\n .pipe(take(1))\n .subscribe(() => {\n this._afterDismissed.next(this._result);\n this._afterDismissed.complete();\n });\n merge(_overlayRef.backdropClick(), _overlayRef.keydownEvents().pipe(filter(event => event.keyCode === ESCAPE))).subscribe(event => {\n if (!this.disableClose &&\n (event.type !== 'keydown' || !hasModifierKey(event))) {\n event.preventDefault();\n this.dismiss();\n }\n });\n }\n /**\n * Dismisses the bottom sheet.\n * @param result Data to be passed back to the bottom sheet opener.\n */\n dismiss(result) {\n if (!this._afterDismissed.closed) {\n // Transition the backdrop in parallel to the bottom sheet.\n this.containerInstance._animationStateChanged\n .pipe(filter(event => event.phaseName === 'start'), take(1))\n .subscribe(event => {\n // The logic that disposes of the overlay depends on the exit animation completing, however\n // it isn't guaranteed if the parent view is destroyed while it's running. Add a fallback\n // timeout which will clean everything up if the animation hasn't fired within the specified\n // amount of time plus 100ms. We don't need to run this outside the NgZone, because for the\n // vast majority of cases the timeout will have been cleared before it has fired.\n this._closeFallbackTimeout = setTimeout(() => {\n this._overlayRef.dispose();\n }, event.totalTime + 100);\n this._overlayRef.detachBackdrop();\n });\n this._result = result;\n this.containerInstance.exit();\n }\n }\n /** Gets an observable that is notified when the bottom sheet is finished closing. */\n afterDismissed() {\n return this._afterDismissed;\n }\n /** Gets an observable that is notified when the bottom sheet has opened and appeared. */\n afterOpened() {\n return this._afterOpened;\n }\n /**\n * Gets an observable that emits when the overlay's backdrop has been clicked.\n */\n backdropClick() {\n return this._overlayRef.backdropClick();\n }\n /**\n * Gets an observable that emits when keydown events are targeted on the overlay.\n */\n keydownEvents() {\n return this._overlayRef.keydownEvents();\n }\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/** Injection token that can be used to specify default bottom sheet options. */\nconst MAT_BOTTOM_SHEET_DEFAULT_OPTIONS = new InjectionToken('mat-bottom-sheet-default-options');\n/**\n * Service to trigger Material Design bottom sheets.\n */\nclass MatBottomSheet {\n constructor(_overlay, _injector, _parentBottomSheet, _defaultOptions) {\n this._overlay = _overlay;\n this._injector = _injector;\n this._parentBottomSheet = _parentBottomSheet;\n this._defaultOptions = _defaultOptions;\n this._bottomSheetRefAtThisLevel = null;\n }\n /** Reference to the currently opened bottom sheet. */\n get _openedBottomSheetRef() {\n const parent = this._parentBottomSheet;\n return parent ? parent._openedBottomSheetRef : this._bottomSheetRefAtThisLevel;\n }\n set _openedBottomSheetRef(value) {\n if (this._parentBottomSheet) {\n this._parentBottomSheet._openedBottomSheetRef = value;\n }\n else {\n this._bottomSheetRefAtThisLevel = value;\n }\n }\n open(componentOrTemplateRef, config) {\n const _config = _applyConfigDefaults(this._defaultOptions || new MatBottomSheetConfig(), config);\n const overlayRef = this._createOverlay(_config);\n const container = this._attachContainer(overlayRef, _config);\n const ref = new MatBottomSheetRef(container, overlayRef);\n if (componentOrTemplateRef instanceof TemplateRef) {\n container.attachTemplatePortal(new TemplatePortal(componentOrTemplateRef, null, {\n $implicit: _config.data,\n bottomSheetRef: ref,\n }));\n }\n else {\n const portal = new ComponentPortal(componentOrTemplateRef, undefined, this._createInjector(_config, ref));\n const contentRef = container.attachComponentPortal(portal);\n ref.instance = contentRef.instance;\n }\n // When the bottom sheet is dismissed, clear the reference to it.\n ref.afterDismissed().subscribe(() => {\n // Clear the bottom sheet ref if it hasn't already been replaced by a newer one.\n if (this._openedBottomSheetRef == ref) {\n this._openedBottomSheetRef = null;\n }\n });\n if (this._openedBottomSheetRef) {\n // If a bottom sheet is already in view, dismiss it and enter the\n // new bottom sheet after exit animation is complete.\n this._openedBottomSheetRef.afterDismissed().subscribe(() => ref.containerInstance.enter());\n this._openedBottomSheetRef.dismiss();\n }\n else {\n // If no bottom sheet is in view, enter the new bottom sheet.\n ref.containerInstance.enter();\n }\n this._openedBottomSheetRef = ref;\n return ref;\n }\n /**\n * Dismisses the currently-visible bottom sheet.\n * @param result Data to pass to the bottom sheet instance.\n */\n dismiss(result) {\n if (this._openedBottomSheetRef) {\n this._openedBottomSheetRef.dismiss(result);\n }\n }\n ngOnDestroy() {\n if (this._bottomSheetRefAtThisLevel) {\n this._bottomSheetRefAtThisLevel.dismiss();\n }\n }\n /**\n * Attaches the bottom sheet container component to the overlay.\n */\n _attachContainer(overlayRef, config) {\n const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;\n const injector = Injector.create({\n parent: userInjector || this._injector,\n providers: [{ provide: MatBottomSheetConfig, useValue: config }],\n });\n const containerPortal = new ComponentPortal(MatBottomSheetContainer, config.viewContainerRef, injector);\n const containerRef = overlayRef.attach(containerPortal);\n return containerRef.instance;\n }\n /**\n * Creates a new overlay and places it in the correct location.\n * @param config The user-specified bottom sheet config.\n */\n _createOverlay(config) {\n const overlayConfig = new OverlayConfig({\n direction: config.direction,\n hasBackdrop: config.hasBackdrop,\n disposeOnNavigation: config.closeOnNavigation,\n maxWidth: '100%',\n scrollStrategy: config.scrollStrategy || this._overlay.scrollStrategies.block(),\n positionStrategy: this._overlay.position().global().centerHorizontally().bottom('0'),\n });\n if (config.backdropClass) {\n overlayConfig.backdropClass = config.backdropClass;\n }\n return this._overlay.create(overlayConfig);\n }\n /**\n * Creates an injector to be used inside of a bottom sheet component.\n * @param config Config that was used to create the bottom sheet.\n * @param bottomSheetRef Reference to the bottom sheet.\n */\n _createInjector(config, bottomSheetRef) {\n const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;\n const providers = [\n { provide: MatBottomSheetRef, useValue: bottomSheetRef },\n { provide: MAT_BOTTOM_SHEET_DATA, useValue: config.data },\n ];\n if (config.direction &&\n (!userInjector ||\n !userInjector.get(Directionality, null, InjectFlags.Optional))) {\n providers.push({\n provide: Directionality,\n useValue: { value: config.direction, change: of() },\n });\n }\n return Injector.create({ parent: userInjector || this._injector, providers });\n }\n}\nMatBottomSheet.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatBottomSheet, deps: [{ token: i1$1.Overlay }, { token: i0.Injector }, { token: MatBottomSheet, optional: true, skipSelf: true }, { token: MAT_BOTTOM_SHEET_DEFAULT_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });\nMatBottomSheet.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatBottomSheet, providedIn: MatBottomSheetModule });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.2.0\", ngImport: i0, type: MatBottomSheet, decorators: [{\n type: Injectable,\n args: [{ providedIn: MatBottomSheetModule }]\n }], ctorParameters: function () {\n return [{ type: i1$1.Overlay }, { type: i0.Injector }, { type: MatBottomSheet, decorators: [{\n type: Optional\n }, {\n type: SkipSelf\n }] }, { type: MatBottomSheetConfig, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_BOTTOM_SHEET_DEFAULT_OPTIONS]\n }] }];\n } });\n/**\n * Applies default options to the bottom sheet config.\n * @param defaults Object containing the default values to which to fall back.\n * @param config The configuration to which the defaults will be applied.\n * @returns The new configuration object with defaults applied.\n */\nfunction _applyConfigDefaults(defaults, config) {\n return Object.assign(Object.assign({}, defaults), config);\n}\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_BOTTOM_SHEET_DATA, MAT_BOTTOM_SHEET_DEFAULT_OPTIONS, MatBottomSheet, MatBottomSheetConfig, MatBottomSheetContainer, MatBottomSheetModule, MatBottomSheetRef, matBottomSheetAnimations };\n","import { NgModule } from '@angular/core';\r\n\r\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { MatNativeDateModule, MatRippleModule } from '@angular/material/core';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatGridListModule } from '@angular/material/grid-list';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatPaginatorModule } from '@angular/material/paginator';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatRadioModule } from '@angular/material/radio';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatSidenavModule } from '@angular/material/sidenav';\r\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\r\nimport { MatSliderModule } from '@angular/material/slider';\r\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\r\nimport { MatSortModule } from '@angular/material/sort';\r\nimport { MatStepperModule } from '@angular/material/stepper';\r\nimport { MatTableModule } from '@angular/material/table';\r\nimport { MatTabsModule } from '@angular/material/tabs';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n// import { MatTimepickerModule } from 'mat-timepicker';\r\nimport {NgxMaterialTimepickerModule} from 'ngx-material-timepicker';\r\nimport { MatMomentDateModule } from '@angular/material-moment-adapter';\r\nimport { MatBottomSheetModule } from '@angular/material/bottom-sheet';\r\n\r\nexport const dateFormat = {\r\n\r\n display: {\r\n dateInput:\"DD MMM YYYY\",\r\n monthYearLabel: 'MMM YYYY',\r\n dateA11yLabel: 'LL',\r\n monthYearA11yLabel: 'MMMM YYYY',\r\n },\r\n};\r\n@NgModule({\r\n exports: [\r\n MatAutocompleteModule,\r\n MatButtonModule,\r\n MatButtonToggleModule,\r\n MatCardModule,\r\n MatCheckboxModule,\r\n MatChipsModule,\r\n MatStepperModule,\r\n MatDatepickerModule,\r\n MatDialogModule,\r\n MatDividerModule,\r\n MatExpansionModule,\r\n MatFormFieldModule,\r\n MatGridListModule,\r\n MatIconModule,\r\n MatInputModule,\r\n MatListModule,\r\n MatMenuModule,\r\n MatNativeDateModule,\r\n MatPaginatorModule,\r\n MatProgressBarModule,\r\n MatProgressSpinnerModule,\r\n MatRadioModule,\r\n MatRippleModule,\r\n MatSelectModule,\r\n MatSidenavModule,\r\n MatSliderModule,\r\n MatSlideToggleModule,\r\n MatSnackBarModule,\r\n MatSortModule,\r\n MatTableModule,\r\n MatTabsModule,\r\n MatToolbarModule,\r\n MatTooltipModule,\r\n // MatTimepickerModule ,\r\n NgxMaterialTimepickerModule,\r\n MatMomentDateModule,\r\n MatBottomSheetModule\r\n ],\r\n providers: [\r\n // `MomentDateAdapter` can be automatically provided by importing `MomentDateModule` in your\r\n // application's root module. We provide it at the component level here, due to limitations of\r\n // our example generation script.\r\n \r\n\r\n \r\n ],\r\n})\r\nexport class MaterialModule {}\r\n\r\n","import { Time } from \"@angular/common\";\r\nimport { ConfirmationVia, SpecialMealDTO } from \"./WidgetSettingsModels\";\r\nimport { BookingGuestType } from \"../constants/commonenums\";\r\n\r\nexport class UpdatedPartySlotDTO {\r\n Id: number | null;\r\n Time: Date;\r\n IsTimeInUtc: boolean;\r\n Type: UpdatedPartySlotType;\r\n LockId: number | null;\r\n}\r\n\r\nexport enum UpdatedPartySlotType {\r\n AutoSlot,\r\n ManualActualSlot,\r\n ManualDefaultSlot,\r\n OverbookingSlot,\r\n AutodetectSlot,\r\n NoSlot,\r\n}\r\n\r\nexport class IdTechData {\r\n public track1: string;\r\n public track2: string;\r\n public track3: string;\r\n public track1e: string;\r\n public track2e: string;\r\n public tracke: string;\r\n public trackKsn: string;\r\n public track1len: Number\r\n public track2len: Number\r\n public encMode: string;\r\n public msrType: string;\r\n public entryMode: string;\r\n}\r\n\r\n\r\nexport enum PartyType {\r\n Reservation,\r\n WalkIn,\r\n StandBy\r\n}\r\nexport enum PageMethod {\r\n Manual,\r\n Sms,\r\n VoiceCall,\r\n Email,\r\n Sms2,\r\n VoiceCall2,\r\n SMSProxyRelay\r\n}\r\n\r\nexport class UpdatedContactDTO {\r\n public Id?: number;\r\n public FirstName: string;\r\n public LastName: string;\r\n public PhoneNumber: string;\r\n public PhoneNumber2: string;\r\n public EmailAddress: string;\r\n public Birthday: Date;\r\n public Anniversary: Date;\r\n public IsVip: boolean;\r\n public IsFavorite: boolean;\r\n public SiteUserId: number;\r\n public TrackMembershipNumber: string;\r\n public PreferredPageMethod: PageMethod;\r\n public GuestProfileServiceId: string;\r\n public Notes: ContactNoteDTO[];\r\n public ContactCustomFields: CustomFieldsDTO[];\r\n public Photo: string;\r\n public ShouldUpdatePhoto: boolean;\r\n public PIILastUsedDate: string;\r\n public ConsentDate: string;\r\n public ConsentPolicyId: number;\r\n public CountryId?: number;\r\n public MarketingOptedIn?: boolean;\r\n}\r\n\r\nexport class ContactNoteDTO {\r\n public Id: number;\r\n public Text: string;\r\n public RelatedId: number;\r\n public IsDietaryRestriction: boolean;\r\n public RestaurantId: number;\r\n public Icon: string;\r\n}\r\n\r\nexport class CustomFieldsDTO {\r\n public Id: number;\r\n public ContactId: number;\r\n public CustomFieldId: number;\r\n public CustomFieldValue: string;\r\n public CustomFieldName: string;\r\n}\r\n\r\nexport enum PricingStrategy\r\n {\r\n PerPerson,\r\n PerReservation\r\n }\r\n\r\nexport enum RequiredPartyFields {\r\n None = 0,\r\n PhoneNumber = 1,\r\n EmailAddress = 2,\r\n Both = 3,\r\n SecondaryPhoneNumber = 4,\r\n SecondaryEmailAddress = 5,\r\n SecPhoneNumberSecEmailAddress = 6,\r\n PhoneNumberSecPhoneNumber = 7,\r\n PhoneNumberSecEmailAddress = 8,\r\n EmailAddressSecPhoneNumber = 9,\r\n EmailAddressSecEmailAddress = 10,\r\n PhoneNumberEmailAddressSecPhoneNumber = 11,\r\n PhoneNumberEmailAddressSecEmailAddress = 12,\r\n EmailAddressSecPhoneNumberSecEmailAddress = 13,\r\n SecPhoneNumberSecEmailAddressPhoneNumber = 14,\r\n All = 15,\r\n Anyone = 16\r\n}\r\n\r\nexport enum PartyNoteType {\r\n FreeFormNote,\r\n PredefinedNote,\r\n SpecialRequest,\r\n PromoCode,\r\n SpecialMeal\r\n}\r\nexport class PartyNoteDTO {\r\n public Id: number = null;\r\n //public PartyId: number = null;\r\n public Text: string = null;\r\n public Type: PartyNoteType = null;\r\n public RelatedId: number = null;\r\n}\r\nexport class UpdatedPartyDTO {\r\n Id: number;\r\n Type: PartyType;\r\n Size: number;\r\n SeatingAreaId: number;\r\n SeatingTypeId: number;\r\n SeatingTime: Date | null;\r\n PageMethod: PageMethod;\r\n Contact: UpdatedContactDTO;\r\n HostId: number;\r\n TableIds: number[];\r\n PagerNumber: string;\r\n Notes: PartyNoteDTO[];\r\n CartId: string;\r\n}\r\n\r\nexport class CoverTypeQuantityDTO {\r\n public Id: number;\r\n public CoverTypeId: number;\r\n public Covers: number;\r\n public CoverTypeName: string;\r\n public Price: Number;\r\n\r\n}\r\nexport class BookingTypeQuantityDTO {\r\n public Id: number;\r\n public BookingTypeId: number;\r\n public BookingTypes: number;\r\n public BookingTypeName: string;\r\n public Price: Number;\r\n\r\n}\r\nexport class UpdatedReservationDTO extends UpdatedPartyDTO {\r\n public Slot: UpdatedPartySlotDTO;\r\n\r\n public SpecialMealId?: Number;\r\n public OfferId?: Number;\r\n\r\n public HotelId?: Number;\r\n public ConciergeId?: Number;\r\n\r\n //public SpecialMealPaidAmount?: decimal\r\n public ReservationAttemptId?: Number;\r\n\r\n public RemindAboutVisit: boolean;\r\n public RemindAboutVisitEmail: boolean;\r\n public AgreedWithTermsOfUse: boolean;\r\n public ConfirmationMessageOption: ConfirmationVia;\r\n\r\n public OriginalRestaurantId?: Number;\r\n\r\n public IdTechData: IdTechData;\r\n public CoverTypes: CoverTypeQuantityDTO[];\r\n}\r\n\r\n\r\nexport class RegisterReservationAttemptRequestDTO {\r\n public PartySize: Number;\r\n public LocalTime: Date;\r\n public SpecialMealId?: Number;\r\n public TableId: Number[];\r\n public SeatingTypeId?: Number;\r\n public PartyId?: Number;\r\n public ClientIP: string;\r\n public CoverTypes: CoverTypeQuantityDTO[];\r\n public BookingTypes: BookingTypeQuantityDTO[];\r\n public ForceIFrameUrl: Boolean;\r\n}\r\n\r\nexport class NewPartyDetailsDTO {\r\n public PartyId: Number;\r\n public ContactId: Number\r\n public ConfirmationCode: string\r\n public EmailAddress: string\r\n public Token: string\r\n //public PurchaseForm : PurchaseFormDTO\r\n public Shift4CardType: string\r\n public Shift4Invoice: string\r\n public Shift4CustomerReceiptText: string\r\n public Shift4CustomerName: string\r\n public Shift4Clerk: string\r\n public Shift4TransactionDate: string\r\n public Shift4Authorization: string\r\n public FirstName: string\r\n public LastName: string\r\n\r\n}\r\nexport class ReservationInfoDTO {\r\n public CreditCardRequired: boolean;\r\n\r\n public IsDeferredPaymentMode: boolean\r\n}\r\n\r\nexport class RegisterReservationAttemptResponseDTO {\r\n public IsSuccessful: boolean;\r\n public ReservationAttemptId: number;\r\n public CreditCardIFrameURL: string;\r\n public OperationCurrency: string;\r\n public PaymentAmount: Number;\r\n public RateplanAmountinfo: Number;\r\n public SpecialMealAmountinfo: Number;\r\n public ShouldCreditCardBeEntered: boolean;\r\n public PaymentTarget: PaymentTargets;\r\n public PaymentGateway: PaymentGateways;\r\n public Shift4Server: string;\r\n public Shift4AccessBlock: string;\r\n public IsShift4Restaurant: boolean;\r\n public UseIdTech: boolean;\r\n public IsImmediatePaymentMode: boolean;\r\n public RatePlanTotal: any;\r\n public Slots: any;\r\n public ResponseDTOs: any;\r\n public Taxes: any;\r\n public TaxAmount:number;\r\n public ServiceChargeAmount: number;\r\n public ServiceCharges: any;\r\n public Tax :any;\r\n public TaxOnServiceChargeAmount: number;\r\n}\r\n\r\nexport enum PaymentTargets {\r\n None,\r\n SpecialMeal,\r\n NoShowFee,\r\n RatePlan,\r\n SpecialMealAndRatePlan,\r\n NoshowFeeAndRatePlan\r\n}\r\n\r\nexport enum PaymentGateways {\r\n FreedomPay,\r\n rGuestPay,\r\n AuthorizePay\r\n}\r\n\r\nexport class ReservationAttemptBasicInfo {\r\n public State: PaymentStates;\r\n}\r\n\r\nexport class BookingTypeInfo {\r\n BookingGuestType : BookingGuestType;\r\n Input: string;\r\n}\r\n\r\nexport class ReservationMultipleAttemptBasicInfo {\r\n public State: PaymentStates;\r\n public ReservationAttemptId: Number;\r\n}\r\n\r\nexport enum PaymentStates {\r\n PaymentNotRequired,\r\n PaymentPending,\r\n Authorized,\r\n ChargeCaptured\r\n}\r\n\r\nexport class CustomGuestFieldsModel {\r\n public Errors: string[];\r\n public IsUpdated: boolean;\r\n public MasterMerchantId: Number;\r\n public CustomGuestField: CustomGuestFieldDTO[];\r\n}\r\n\r\nexport class CustomGuestFieldDTO {\r\n public Id: Number;\r\n public MasterMerchantId: Number;\r\n public FieldType: string;\r\n public FieldName: string;\r\n public FieldDescription: string;\r\n public IsCustomGuestFieldVisible: boolean;\r\n public FieldOptions: string;\r\n public AvailableForOnlineReservation: boolean;\r\n}\r\n\r\nexport class AuthorizeIFrameInfoDTO {\r\n public formURL: string;\r\n public transactionId: string\r\n public successCode: Number;\r\n public errorCode: string\r\n public token: string;\r\n public Result: object;\r\n}\r\n\r\n\r\nexport class SecondaryContactDTO {\r\n public Id: Number;\r\n public ContactId: Number;\r\n public FirstName: string;\r\n public LastName: string;\r\n public AliasName: string;\r\n public ContactNotes: string;\r\n public PartyId: Number;\r\n public PhoneNumber: string;\r\n public EmailAddress: string;\r\n public Notes: ContactNoteDTO[];\r\n public CountryId: Number;\r\n public ContactCustomFields: CustomFieldsDTO[];\r\n public isValid?: boolean = false;\r\n public count?: number;\r\n}\r\n\r\nexport enum PartyState {\r\n Pending,\r\n Seated,\r\n Left,\r\n NoShowed,\r\n Cancelled,\r\n}\r\nexport enum PartyStateUpdateSource {\r\n TableSaver,\r\n CleanUpScript\r\n}\r\n\r\nexport class ContactDTO {\r\n public Id: number = null;\r\n public FirstName: string = null;\r\n public LastName: string = null;\r\n public AliasName?: string = null;\r\n public IsVip: boolean = null;\r\n public IsFavorite: boolean = null;\r\n public PhoneNumber: string = null;\r\n public PhoneNumber2: string = null;\r\n public EmailAddress: string = null;\r\n public SiteUserId: number = null;\r\n public GuestScore: number = null;\r\n public CreatedAt: Date = null;\r\n public Notes: ContactNoteDTO[] = [];\r\n public CustomGuestField: CustomGuestFieldDTO[] = [];\r\n public ContactCustomFields: CustomFieldsDTO[] = [];\r\n public PIILastUsedDate: Date = null;\r\n public ConsentDate: Date = null;\r\n public ConsentPolicyId: number = null;\r\n public CountryId: number = null;\r\n public MarketingOptedIn?: boolean;\r\n}\r\n\r\nexport class FullContactDTO extends ContactDTO {\r\n public Options: GetContactOptions = null;\r\n public PreferredPageMethod: PageMethod = null;\r\n public SecondaryContactsList: SecondaryContactDTO[] = [];\r\n public Birthday: Date = null;\r\n public Anniversary: Date = null;\r\n public VisitStats: ContactVisitStatsDTO[] = [];\r\n public FutureReservations: ReservationDTO[] = [];\r\n public PastReservations: ReservationDTO[] = [];\r\n public Walkins: WalkInDTO[] = [];\r\n public BillingPreferences: string = null;\r\n public PreferredTableId: number = null;\r\n public PreferredServerId: number = null;\r\n public PartnerName: string = null;\r\n public PartnerBirthday: Date = null;\r\n public TrackMembershipNumber: string = null;\r\n public Addresses: ContactAddressDTO[] = [];\r\n public Photo: string = null;\r\n public ShouldUpdatePhoto: boolean = false;\r\n}\r\nexport class FilterDTO {\r\n public MembershipId: string = null;\r\n public InProgress: number = null;\r\n public LocationId: number = null;\r\n public InstructorId: string = null;\r\n public StartDate: Date = null;\r\n public EndDate: Date = null;\r\n public StartTime: Time = null;\r\n public EndTime: Time = null;\r\n public filteredDays = [];\r\n}\r\n\r\nexport enum GetContactOptions {\r\n None = 0,\r\n BasicContact = 1,\r\n ExtendedContactFields = 2,\r\n Notes = 4,\r\n Photo = 7,\r\n VisitStatsForCurrentRestaurant = 8,\r\n VisitStatsForOtherRestaurants = 16,\r\n Addresses = 32,\r\n PredefinedNotesText = 64,\r\n FutureReservations = 128,\r\n ReservationsAcrossAllRestaurants = 256,\r\n CreditCardsForFutureReservations = 512,\r\n BasicContactWithNotes = BasicContact | Notes,\r\n FullContact = BasicContact | ExtendedContactFields | Notes | Addresses,\r\n FullContactWithPhoto = BasicContact | ExtendedContactFields | Notes | Addresses | Photo,\r\n FullWithStats = FullContact | VisitStatsForCurrentRestaurant | VisitStatsForOtherRestaurants,\r\n FullWithStatsAndPredefinedNotes = FullWithStats | PredefinedNotesText | FutureReservations | ReservationsAcrossAllRestaurants,\r\n FullWithStatsAndPredefinedNotesIncludeCreditCards = FullWithStats | PredefinedNotesText | FutureReservations | ReservationsAcrossAllRestaurants | CreditCardsForFutureReservations,\r\n FullWithStatsAndPredefinedNotesIncludeCreditCardsAndPhoto = FullWithStats | PredefinedNotesText | FutureReservations | ReservationsAcrossAllRestaurants | CreditCardsForFutureReservations | Photo,\r\n ContactCustomFields = 3,\r\n CustomGuestFields = 5,\r\n BasicContactWithNotesAndCustomFields = BasicContact | Notes | ContactCustomFields | CustomGuestFields\r\n}\r\n\r\nexport class ContactVisitStatsDTO {\r\n public RestaurantId: number;\r\n public RestaurantName: string;\r\n public ContactId: number;\r\n public LastVisitedAt: Date;\r\n public NumberOfVisits: number;\r\n public NumberOfVisitsLast30Days: number;\r\n public NumberOfCancellations: number;\r\n public NumberOfCancellationsLast30Days: number;\r\n public NumberOfNoShows: number;\r\n public NumberOfNoShowsLast30Days: number;\r\n public LastServerName: string;\r\n public LastTableNames: string;\r\n public TotalSpend: number;\r\n public AverageSpend: number;\r\n public NumberOfWalkins: number;\r\n public NumberOfVisitsAsReservation: number;\r\n}\r\n\r\nexport class ContactAddressDTO {\r\n public Id: number;\r\n public Name: string;\r\n public Street1: string;\r\n public Street2: string;\r\n public City: string;\r\n public Country: string;\r\n public State: string;\r\n public PostalCode: string;\r\n}\r\n\r\nexport class PartyDTO {\r\n public Id: number;\r\n public RestaurantId: number;\r\n public Type: PartyType;\r\n public State: PartyState;\r\n public StateUpdateSource: PartyStateUpdateSource;\r\n public Size: number;\r\n public SeatingAreaId: number;\r\n public TableIds: number[];\r\n public TableNames: string[];\r\n public SeatingTime: Date;\r\n public DepartureTime: Date;\r\n public NoShowedAt: Date;\r\n public CancelledAt: Date;\r\n public CreatedAt: Date;\r\n public UpdatedAt: Date;\r\n public HostId: number;\r\n public StatusId: number;\r\n public PartySourceId: number;\r\n public CancelationSourceId: number;\r\n public ConfirmationCode: string;\r\n public IsConfirmed: boolean;\r\n public IsVipPartyServed: boolean;\r\n public PagerNumber: string;\r\n public PageMethod: PageMethod;\r\n public LastPagedAt: Date;\r\n public ReservedFor: Date;\r\n public Contact: ContactDTO;\r\n public Notes: PartyNoteDTO[];\r\n public Messages: PartyMessageDTO[];\r\n public CheckSum: number;\r\n public NumberOfChecks: number;\r\n public GuestScore: string;\r\n public ActivityId: string;\r\n public GuestProfileId: string;\r\n public Covers: CoverTypeQuantityDTO[];\r\n public SpecialMealId: number;\r\n public SpecialMeal: SpecialMealDTO;\r\n public ChargeState: PartyChargeState;\r\n public SeatingTypeId: number;\r\n public WaiverFormTransactionId: string;\r\n public BookingContacts: SecondaryContactDTO[];\r\n public CoverTypeQuantities: CoverTypeQuantityDTO[];\r\n public BookingTypeQuantities: BookingTypeQuantityDTO[];\r\n public StaffId: any[];\r\n public StartDate: Date;\r\n public EndDate: Date;\r\n}\r\n\r\nexport class ReservationDTO extends PartyDTO {\r\n public ReservationDate: Date = null;\r\n public ReservedFor: Date = null;\r\n public SlotId: number = null;\r\n public SpecialMealId: number = null;\r\n public HotelId: number = null;\r\n public ConciergeId: number = null;\r\n public Token: string = null;\r\n public IsCommunalTable: boolean = null;\r\n public IsCCAssociated: boolean = null;\r\n public NoShowFeeAmount: number = null;\r\n public ChargedAt: Date = null;\r\n public RefundedAt: Date = null;\r\n public AutomaticallyRefundedAt: Date = null;\r\n public ChargeState: PartyChargeState = null;\r\n public PrepaymentState: PartyPrepaymentState = null;\r\n public ChargeHostName: string = null;\r\n public RefundHostName: string = null;\r\n public RefundCRSUserName: string = null;\r\n public CreditCardId: number = null;\r\n public MaskedCardNumber: string = null;\r\n public SpecialMealAmount: number = null;\r\n public OperationCurrency: string = null;\r\n public RemindAboutVisit: boolean = null;\r\n public RemindAboutVisitEmail: boolean = null;\r\n public TooLateToCancel: boolean = null;\r\n public CoverTypeQuantities: CoverTypeQuantityDTO[] = [];\r\n public BookingTypeQuantities: BookingTypeQuantityDTO[] = [];\r\n public SpecialMealName: string = null;\r\n public OverpaymentAmount: number = null;\r\n public SpecialMeal: SpecialMealDTO = null;\r\n public RatePlanAmount: number = null;\r\n public CheckIconVisibility: boolean = null;\r\n public GuestReservationEmail: GuestReservationEmail;\r\n public GuestReservationPhoneNumber: GuestReservationPhoneNumber;\r\n public CancellationFeeAmount: number = null;\r\n public UniqueId: string = null;\r\n public MerchantId: string = null;\r\n public CartBookingId: string = null;\r\n public BookingReferenceId: string = null;\r\n public TaxAmount?: number = null;\r\n public TotalServiceChargeAmount?: number = null;\r\n public TaxOnServiceChargeAmount?: number = null;\r\n}\r\n\r\nexport enum GuestReservationEmail {\r\n Email,\r\n Email2\r\n}\r\n\r\nexport enum GuestReservationPhoneNumber {\r\n PhoneNumber,\r\n PhoneNumber2\r\n}\r\n\r\nexport enum PartyPrepaymentState {\r\n None,\r\n PrepaymentRequired,\r\n PrepaymentInProgress,\r\n Prepaid,\r\n PrepaymentFailed,\r\n Refunded,\r\n RefundFailed,\r\n PartialPrepayment,\r\n DeferredPayment,\r\n DepositCollected\r\n}\r\nexport enum PartyChargeState {\r\n None,\r\n Pending,\r\n InProgress,\r\n Charged,\r\n ChargeFailed,\r\n Ignored,\r\n Refunded,\r\n RefundFailed\r\n}\r\n\r\nexport enum PaymentMethod\r\n{\r\n None = 0,\r\n Prepayment = 1,\r\n PartialPayment = 2,\r\n Authorize = 3,\r\n SkipPayment = 4\r\n}\r\n\r\nexport enum PaymentMode\r\n{\r\n None,\r\n PrepaidPaymentMode,\r\n DefferredPaymentMode,\r\n DepositPaymentMode,\r\n ChargeduringCheckIn,\r\n ChargeduringCheckOut,\r\n CardOnFile\r\n}\r\n\r\nexport class PartyMessageDTO {\r\n public Id: number = null;\r\n //public PartyId: number = null;\r\n public CreatedAt: Date = null;\r\n public Text: string = null;\r\n public IsIncoming: boolean = null;\r\n public IsPostVisitSMS: boolean = null;\r\n}\r\n\r\nexport class FinancialEffectForUpdatedReservationDTO {\r\n public PartyPaymentType: FinancialEffectType;\r\n public PaymentTarget: PaymentTargets;\r\n public PaymentAmount?: number;\r\n public SpecialMealAmount?: Number;\r\n public RatePlanAmount?: Number\r\n public TotalAmount?: number\r\n public FinancialEffects: FinancialEffectForUpdatedReservationDTO[]\r\n public IsCreditCardNeeded: boolean;\r\n public RedirectUrl: string;\r\n public ReservationAttemptId: number;\r\n public PaymentGateway: PaymentGateways;\r\n public RefundOption: any;\r\n public RatePlanTotal: any;\r\n public ServiceChargeAmount: any;\r\n public TaxAmount: any;\r\n public TaxOnServiceCharge: any;\r\n public RetailCreditCardPaymentTokenId: number;\r\n public CardNumber: string;\r\n}\r\n\r\nexport enum FinancialEffectType {\r\n NotSupported,\r\n NoPaymentsInvolved,\r\n NoEffect,\r\n NewReservationAttempt,\r\n NoFullRefund,\r\n FullRefund,\r\n NoFullRefundAndNewReservationAttempt,\r\n FullRefundAndNewReservationAttempt,\r\n PartialCharge,\r\n PartialRefund,\r\n NoShowFeeUpdated,\r\n Authorize,\r\n AuthorizeUpdated,\r\n ChargeCancellationLater,\r\n FullRefundAndNoShowFee\r\n}\r\n\r\nexport enum SessionAvailabiltyStatus {\r\n Available,\r\n LimitedAvailability,\r\n LessAvailability,\r\n NotAvailable,\r\n PastTime,\r\n Blocked\r\n}\r\n\r\nexport class WalkInDTO extends PartyDTO {\r\n public ArrivedAt: Date;\r\n public QuotedSeatingTime: Date;\r\n public IsSeatingTimeOverriden: boolean;\r\n public Position: number;\r\n public CheckIconVisibility: boolean = null;\r\n}\r\n","\r\nexport enum PermissionType {\r\n AddSlots = 1,\r\n RemoveSlots,\r\n EditSlots,\r\n AddReservations,\r\n EditReservations,\r\n Overbook,\r\n AddToStandByList,\r\n EditStandByParties,\r\n BookInNonWebReservableSlots,\r\n BookInSlotsWithInappropriateSize,\r\n PageParties,\r\n SendFreeformPageMessages,\r\n CancelReservations,\r\n NoShowReservations,\r\n RemoveStandByParties,\r\n ManageTableBlockingRules,\r\n BookOrSeatAtBlockedTables,\r\n ChangeRestaurantSettings,\r\n MoveSeatedParties\r\n }\r\n\r\nexport enum ValidationMessageType {\r\n Error = 0,\r\n Warning = 1,\r\n Consent = 2\r\n }\r\nexport class ValidationMessageDTO {\r\n public Message: string;\r\n public Type: ValidationMessageType;\r\n }\r\n\r\nexport enum OperationResultState {\r\n Success,\r\n ValidationErrors,\r\n ServerException,\r\n InsufficientPermissions,\r\n AccessDenied,\r\n Logout,\r\n Consent = 6\r\n }\r\n\r\nexport class OperationResultDTO {\r\n public State: OperationResultState;\r\n public ExceptionMessage: string;\r\n public ValidationMessages: ValidationMessageDTO[];\r\n public RequiredPermissions: PermissionType[];\r\n public MissingPermissions: PermissionType[];\r\n }\r\n\r\n \r\nexport class PayloadOperationResultDTO extends OperationResultDTO {\r\n public Payload: object;\r\n }","import { PartyState } from \"../constants/commonenums\";\r\nimport { PartyNoteDTO } from \"./PartyModels\";\r\n\r\nexport class SessionBookingDTO {\r\n BookingId: number;\r\n ActivityId: number;\r\n ClassType: number;\r\n FromDate: string;\r\n ToDate: string;\r\n Location: number[];\r\n LocationName: string[];\r\n StaffId: number[];\r\n BookingSize: number;\r\n MembershipDetail: string;\r\n GuestTypes: CoverType[];\r\n BookingTypes: BookingType[];\r\n Slots: any[];\r\n SessionGroupId: number;\r\n AvailabilityCriteria: number;\r\n propertyId: number;\r\n CartId: string;\r\n Notes: PartyNoteDTO[];\r\n SeatingAreaId: number;\r\n SeatingTypeId: number;\r\n LocalTime: string;\r\n isCommunalTable: boolean;\r\n TableIds: number [];\r\n FromWebsite: boolean;\r\n isBookingApiRequest: boolean;\r\n\r\n constructor(bookingId, activityId, classType, fromDate, toDate, location, locationName, staffId,\r\n bookingSize, membershipDetails, guestTypes, bookingTypes, slots, sessionGroupId, propertyId?,\r\n SeatingArea?, SeatingType?, LocalTime?, isCommunalTable?, TableIds?, FromWebsite?) {\r\n this.BookingId = bookingId;\r\n this.ActivityId = activityId;\r\n this.ClassType = classType;\r\n this.FromDate = fromDate;\r\n this.ToDate = toDate;\r\n this.Location = location;\r\n this.LocationName = locationName;\r\n this.StaffId = staffId;\r\n this.BookingSize = bookingSize;\r\n this.MembershipDetail = membershipDetails;\r\n this.GuestTypes = guestTypes;\r\n this.BookingTypes = bookingTypes;\r\n this.Slots = slots;\r\n this.SessionGroupId = sessionGroupId;\r\n this.propertyId = propertyId;\r\n this.SeatingAreaId = SeatingArea;\r\n this.SeatingTypeId = SeatingType;\r\n this.LocalTime = LocalTime;\r\n this.isCommunalTable = isCommunalTable;\r\n this.TableIds = TableIds;\r\n this.FromWebsite = FromWebsite;\r\n }\r\n}\r\n\r\nexport class CoverType {\r\n CoverTypeId: number;\r\n Covers: number;\r\n Name: string;\r\n}\r\nexport class BookingType {\r\n BookingTypeId: number;\r\n BookingTypes: number;\r\n Name: string;\r\n}\r\n\r\nexport class ActivitySessionsDTO {\r\n public SessionGroupId: number;\r\n public ActivitySessionId: number;\r\n public SpecialMealId: number;\r\n public Dayofweek: number;\r\n public SessionName: string;\r\n public SessionDescription: string;\r\n public StartTime: Date;\r\n public EndTime: Date;\r\n public BookedSlots: number;\r\n public RatePlanId: number;\r\n public AllocationTypeId: number;\r\n public IsBooked: boolean;\r\n public SessionStaffMappings: SessionStaffMappingDTO[];\r\n public SessionLocationMappings: SessionLocationMappingDTO[];\r\n public BookedSessions: BookedSessionsDTO[];\r\n}\r\n\r\nexport class SessionStaffMappingDTO {\r\n public Id: number;\r\n public ActivitySessionId: number;\r\n public ServerId: number;\r\n}\r\n\r\nexport class SessionLocationMappingDTO {\r\n public Id: number;\r\n public ActivitySessionId: number;\r\n public StandaloneTableId: number;\r\n}\r\n\r\nexport class BookedSessionsDTO {\r\n public Id: number;\r\n public PartyId: number;\r\n public ActivitySessionId: number;\r\n public BookedDate: Date;\r\n public BookingSize: number;\r\n public SessionState: PartyState;\r\n public RatePlanAmount: number;\r\n}\r\n\r\nexport class ActivitySlotRequestDTO {\r\n ActivityId: number;\r\n AvailabilityCriteria: AvailabilityCriteria;\r\n StartDate: string;\r\n EndDate: string;\r\n PreferredLocationId: number[];\r\n PreferredStaffId: number[];\r\n BookingSize: number;\r\n ClassType: ClassType\r\n}\r\n\r\nexport enum AvailabilityCriteria {\r\n None = 0,\r\n IncludeLocation = 1,\r\n IncludeInstructor = 2,\r\n IncludeLocationAndInstructor = 3,\r\n}\r\n\r\nexport enum ClassType {\r\n Session = 0,\r\n Class = 1\r\n}\r\n\r\nexport enum AvailabilityType {\r\n OpenToAll,\r\n OpenToSpecificMember,\r\n SoldOut,\r\n SelectionCriteriaNotMatched,\r\n Standby,\r\n Blocked,\r\n Cancelled\r\n}\r\n\r\nexport class LockSessionRequestDTO {\r\n public Sessions: SessionDateDTO[];\r\n public ActivityId: number;\r\n public SessionGroupId: number;\r\n public StartDate: string;\r\n public lockIdToIgnore: number;\r\n public BookingSize: number;\r\n public ClassType: ClassType;\r\n public PropertyId?: number;\r\n public PartySize?: number;\r\n public TableIds?: number [];\r\n public SeatingAreaId?: number;\r\n public SeatingTypeId?: number;\r\n public LocalTime?: string;\r\n}\r\n\r\nexport class SessionDateDTO {\r\n Date: string;\r\n SessionIds: number[];\r\n}\r\n\r\nexport enum BookingBehavior {\r\n OpenBooking,\r\n ClassOrSession,\r\n PrivateLesson\r\n}\r\n\r\nexport class ActivityRatePlanRequest {\r\n Slots: any[];\r\n ActivityId: number;\r\n GuestTypes: GuestType[];\r\n BookingTypes: BookingType[];\r\n TableIds: number[];\r\n Size: number;\r\n SessionSlot: SessionSlot;\r\n BookingBehavior: BookingBehavior;\r\n MemberType: string;\r\n IsMemberActive: boolean;\r\n}\r\n\r\nexport enum BookingActivity {\r\n OpenBooking,\r\n ClassBooking,\r\n PrivateLesson\r\n}\r\n\r\nexport enum LessonTypes {\r\n GroupLesson,\r\n PrivateLesson,\r\n SpecialMeal\r\n}\r\n\r\n\r\nexport class GuestType {\r\n CoverTypeId: number;\r\n covers: number;\r\n}\r\n\r\nexport class SessionSlot {\r\n Sessions: Session[];\r\n SessionGroupId: any;\r\n}\r\n\r\nexport class Session {\r\n Date: string;\r\n SessionIds: number[];\r\n}","import { Time } from \"@angular/common\";\r\nimport { DefaultReservationView, Status } from \"../constants/commonenums\";\r\nimport { CategoryDto } from \"./CategoryModel\";\r\nimport { ActivitySessionsDTO } from \"./SessionBookingDTO\";\r\n\r\nexport enum operationType {\r\n edit = 0,\r\n cancel = 1,\r\n create = 2\r\n}\r\n\r\nexport class ColorDTO {\r\n public A: number;\r\n public R: number;\r\n public G: number;\r\n public B: number;\r\n}\r\n\r\n\r\nexport class SeatingAreaDTO {\r\n public Id: number;\r\n public Name: string;\r\n public Abbreviation: string;\r\n public Color?: ColorDTO;\r\n}\r\n\r\nexport class SeatingTypesDTO {\r\n public Id: number;\r\n public Name?: string;\r\n public Abbreviation: string;\r\n public Color?: ColorDTO;\r\n public Description: string;\r\n public IsDeleted: boolean;\r\n public RestaurantId: number;\r\n public SeatingArea: SeatingAreaDTO[];\r\n public SeatingTypeSeatingAreaMappings: SeatingTypeSeatingAreaMappingDTO[];\r\n}\r\n\r\nexport class SeatingTypeSeatingAreaMappingDTO {\r\n public Id: number;\r\n public SeatingAreaId: number;\r\n public SeatingTypeId: number;\r\n}\r\n\r\nexport class CoverTypeQuantitiesDTO {\r\n public Id: number;\r\n public CoverTypeId: number;\r\n public Covers: number;\r\n public CoverTypeName: string;\r\n}\r\n\r\nexport class BookingTypeQuantitiesDTO {\r\n public Id: number;\r\n public BookingTypeId: number;\r\n public BookingTypes: number;\r\n public BookingTypeName: string;\r\n}\r\nexport class CoverTypePriceDTO {\r\n public Id: number;\r\n public Price: number;\r\n public CoverTypeName: string;\r\n}\r\n\r\nexport class SpecialMealDTO {\r\n public ActivitySessions: ActivitySessionsDTO[];\r\n public Id: number;\r\n public Name: string;\r\n public IsPrepaymentRequired: boolean;\r\n public CoverTypePrices: CoverTypePriceDTO[];\r\n public ChargeOnBooking: boolean;\r\n public StartDate: Date;\r\n public EndDate: Date;\r\n public ShiftId: number;\r\n public Price: number;\r\n public WaiverFormCode: string;\r\n public SortOrder: number;\r\n public RestaurantId: number;\r\n public MinPartySize: number;\r\n public MaxPartySize: number;\r\n public SeatingAreaId: number;\r\n public DoesRequirePrepayment: boolean;\r\n public DeferredPaymentInDays: number;\r\n public CutOffMinutes: number;\r\n public CreatedAt: Date;\r\n public UpdatedAt: Date;\r\n public AvailableSlots: number = null;\r\n public ImageData: string;\r\n public CollectType?: CollectType;\r\n public CancellationPolicy: string = null;\r\n public ClassType: number;\r\n public LessonType: number;\r\n public FrequencyTypeIds?: [] = null;\r\n public WidgetPrePaymentMode: number;\r\n}\r\n\r\nexport enum CollectType {\r\n CheckIn = 0,\r\n CheckOut = 1\r\n}\r\n\r\nexport class CustomGuestFieldDTO {\r\n public Id: number = null;\r\n public MasterMerchantId: number = null;\r\n public FieldType: string = null;\r\n public FieldName: string = null;\r\n public FieldDescription: string = null;\r\n public IsCustomGuestFieldVisible: boolean = null;\r\n public FieldOptions: string = null;\r\n public MasterMerchant: MasterMerchant = null;\r\n public ContactCustomFields: any = null;\r\n}\r\nexport class MasterMerchant implements IEntity, ITrackCreatedAtDateTime, ITrackUpdatedAtDateTime, INamedEntity {\r\n public Id: number;\r\n public Name: string;\r\n public CreatedAt: Date;\r\n public UpdatedAt: Date;\r\n public UseGuestScore: boolean;\r\n public GuestScoreVisits: number;\r\n public IntegrationTenantId: string;\r\n public Merchants: Merchant[];\r\n public Restaurants: any[];\r\n public Contacts: any[];\r\n public CustomGuestFields: any[];\r\n}\r\nexport interface IEntity {\r\n Id: number;\r\n}\r\nexport interface ITrackCreatedAtDateTime {\r\n CreatedAt: Date;\r\n}\r\nexport interface ITrackUpdatedAtDateTime {\r\n UpdatedAt: Date;\r\n}\r\nexport interface INamedEntity {\r\n Id: number;\r\n Name: string;\r\n}\r\nexport interface IAuthenticatable extends IEntity {\r\n UserType: UserType;\r\n MerchantId: number;\r\n VerifyPassword(password: String, hashManager: IHashManager): boolean;\r\n}\r\nexport enum UserType {\r\n Admin,\r\n MerchantUser,\r\n CRSUser\r\n}\r\nexport interface IHashManager {\r\n GenerateSalt(): string;\r\n HashPassword(password: string, salt: string): string;\r\n VerifyPassword(password: string, hashedPass: string): boolean;\r\n}\r\nexport interface IRestaurantEntity {\r\n RestaurantId: number;\r\n}\r\n\r\n\r\nexport class Merchant implements IEntity, ITrackCreatedAtDateTime, ITrackUpdatedAtDateTime, INamedEntity {\r\n public Id: number;\r\n public Name: string;\r\n public MasterMerchantId: number;\r\n public CreatedAt: Date;\r\n public UpdatedAt: Date;\r\n public IsOnPremise: boolean;\r\n public LicenseKey: string;\r\n public EncryptedLicense: string;\r\n public MerchantUsers: MerchantUser[];\r\n public Restaurants: any[];\r\n public MasterMerchant: MasterMerchant;\r\n}\r\n\r\nexport class ApnsToken implements IEntity, ITrackCreatedAtDateTime, ITrackUpdatedAtDateTime {\r\n public Id: number;\r\n public RestaurantId: number;\r\n public Token: String;\r\n public MerchantUserId: number;\r\n public CreatedAt: Date;\r\n public UpdatedAt: Date;\r\n public Restaurant: any;\r\n public MerchantUser: MerchantUser;\r\n}\r\n\r\nexport class MerchantUser implements IEntity, INamedEntity, IAuthenticatable, ITrackCreatedAtDateTime, ITrackUpdatedAtDateTime {\r\n constructor() {\r\n this.MerchantUserRestaurants = {} as MerchantUserRestaurant[];\r\n this.ApnsTokens = {} as ApnsToken[];\r\n }\r\n public Id: number;\r\n public MerchantId: number;\r\n public IsSuperAdmin: boolean;\r\n public IsTrained: boolean;\r\n public Name: string;\r\n public Email: string;\r\n public EncryptedPassword: string;\r\n public PasswordSalt: string;\r\n public ResetPasswordToken: string;\r\n public ResetPasswordSentAt: Date;\r\n public CreatedAt: Date;\r\n public UpdatedAt: Date;\r\n public Merchant: Merchant;\r\n public MerchantUserRestaurants: MerchantUserRestaurant[];\r\n public ApnsTokens: ApnsToken[];\r\n public VerifyPassword(password: string, hashManager: IHashManager): boolean {\r\n return hashManager.VerifyPassword(password, this.EncryptedPassword);\r\n }\r\n public get UserType(): UserType {\r\n return UserType.MerchantUser;\r\n }\r\n // public GenerateResetPasswordToken(): void {\r\n // this.ResetPasswordToken = PasswordHelper.GenerateAlphaNumericPassword(32);\r\n // this.ResetPasswordSentAt = Date.UTC;\r\n // }\r\n public ClearResetPasswordToken(): void {\r\n this.ResetPasswordToken = null;\r\n this.ResetPasswordSentAt = null;\r\n }\r\n}\r\n\r\nexport class MerchantUserRestaurant implements IEntity, IRestaurantEntity, ITrackCreatedAtDateTime, ITrackUpdatedAtDateTime {\r\n public Id: number;\r\n public MerchantUserId: number;\r\n public RestaurantId: number;\r\n public IsAdmin: boolean;\r\n public CreatedAt: Date;\r\n public UpdatedAt: Date;\r\n public MerchantUser: MerchantUser;\r\n public Restaurant: any;\r\n}\r\n\r\nexport class CountryDTO {\r\n public Id: number;\r\n public Name: string;\r\n public CountryPhoneCode: string;\r\n}\r\n\r\nexport class WidgetSettingsDTO {\r\n public RestaurantId: Number;\r\n public RestaurantName: string;\r\n public RestaurantUniqueName: string;\r\n public UseUnbrandedLayout: boolean;\r\n public PhoneNumber: string;\r\n public Street1: string;\r\n public Street2: string;\r\n public City: string;\r\n public State: string;\r\n public Country: string;\r\n public AvailableSpecialMeals: SpecialMealDTO[];\r\n public MealTabs: MealTabDTO[];\r\n public ShowMealTabs: boolean;\r\n public MaxPartySize: Number;\r\n public MaxAlternateDays: number;\r\n public AcceptsReservations: boolean;\r\n public DaysForReservation: Number;\r\n public InitialRemoteBookingTime: Date;\r\n public ReservationCutOffMinutes?: Number;\r\n public WidgetCustomization: WidgetCustomizationDTO;\r\n public UseDefaultWidgetCustomizations: boolean;\r\n public IsSmsReminderSupported: boolean;\r\n public IsGDPREnabled: boolean;\r\n public CustomPolicyText: string;\r\n public SlottingModeWidget: string;\r\n public UseMembershipNumber: boolean;\r\n public MembershipNumberName: string;\r\n public MerchantId: number;\r\n public OfflineStartTime?: Date;\r\n public OfflineEndTime?: Date;\r\n public DisableReservations: boolean;\r\n public CancellationTitle: string;\r\n public PropertyTypeId: Number;\r\n public ConfirmationVia: ConfirmationVia;\r\n public SeatingAreaList: SeatingAreaDTO[];\r\n public SeatingTypeList: SeatingTypesDTO[];\r\n public SeatingAreaSeatingTypeMappings: SeatingTypeSeatingAreaMappingDTO[];\r\n public DefaultWaiverForm: WaiverFormDTO;\r\n public PropertyType: string;\r\n public OperationCurrency: string;\r\n public PreferencesCategories: CategoryDto[];\r\n public MarketingFlagEnabled: boolean;\r\n public MarketingFlagHeader: string;\r\n public MarketingFlagDescription: string;\r\n public EnableMultiSlotSelection: boolean;\r\n public AllocationMappings: AllocationPropertyMappingDTO[];\r\n public TimeSlotUnitInMinutes: number;\r\n public MaxPastTimeForReservationsInMinutes: number;\r\n public DaylightDelta: string;\r\n public IsCartEnabled: boolean;\r\n public DateFormat: string;\r\n public customGuestFieldsMappingValidations: CustomGuestFieldsMappingDTO[];\r\n public Addons: AddonDTO[];\r\n public ShowAliasName:boolean;\r\n public NumberOfFractionalDigits: number = 2;\r\n public DisableCustomTermsAndConditions: boolean;\r\n public CopyPrimaryContactDetailsToSecondaryWidget: boolean;\r\n}\r\n\r\nexport class AddonDTO {\r\n AddonId: number;\r\n SelectionType: SelectionType;\r\n IsOpenbookingEnabled: boolean;\r\n AddonName: string;\r\n CategoryId: number;\r\n SubCategoryId: number;\r\n Description: string;\r\n AvailableforWebReservation: boolean;\r\n Quantity: number;\r\n RetailItemId: number;\r\n PricingCategory: PricingCategory;\r\n Duration: number;\r\n PricingType: PricingType\r\n Price: number;\r\n AdditionalPrice: number;\r\n AdditionalMinutes: number;\r\n ImageId: string;\r\n ImageFile: string;\r\n ImageChanged: string;\r\n RestaurantId: number;\r\n StatusMaster: Status;\r\n AddonActivitiesMappings: AddonActivitiesMappingsDTO[];\r\n selectedQuantity?: number;\r\n}\r\n\r\nexport class AddonActivitiesMappingsDTO {\r\n MappingId: number;\r\n AddonId: number;\r\n ActivityId: number;\r\n AvailableForWebReservation: boolean;\r\n IsMandatory: boolean;\r\n IsCategoryLevelMandatory\r\n IsVisible: boolean;\r\n MinQuantity: number;\r\n MaxQuantity: number;\r\n ConsiderForAvailability: boolean;\r\n}\r\n\r\nexport enum TaxType {\r\n Tax = 0,\r\n VAT = 1\r\n}\r\n\r\nexport class AddOnAvailability{\r\n AddonId: number;\r\n SpecialMealId : number;\r\n AvailableQuantity: number;\r\n LockedQuantity: number;\r\n SoldQuantity: number;\r\n OverAllQuantity: number;\r\n IsUnlimited: boolean = false;\r\n}\r\n\r\nexport enum SelectionType // addontype\r\n{\r\n PerGuest = 1,\r\n PerBooking,\r\n PerLesson\r\n}\r\nexport enum PricingCategory {\r\n BySession = 1,\r\n ByDuration\r\n}\r\n\r\nexport enum PricingType {\r\n ByHour = 1,\r\n ByMinutes\r\n}\r\nexport class CustomGuestFieldsMappingDTO {\r\n public ActivityId: number\r\n public CustomFields: CustomFields[] = [];\r\n}\r\nexport class CustomFields {\r\n Id: number;\r\n public FieldId: number;\r\n public IsVisible: boolean;\r\n public AvailableForWebReservation: boolean;\r\n public Validations: ValidationType[] = [];\r\n}\r\nexport class ValidationType {\r\n public Id: number;\r\n public SelectedValidationType: number;\r\n public TargetValue: string;\r\n}\r\n\r\nexport class AllocationPropertyMappingDTO {\r\n public Id: number;\r\n public AllocationTypeId: number;\r\n public AllocationTypeName: string;\r\n public PropertyId: number;\r\n //public StatusCode: StatusMaster;\r\n public Color: ColorDTO;\r\n public BlockType: number;\r\n}\r\n\r\nexport class WaiverFormDTO {\r\n public RestaurantId: Number;\r\n public FormCode: string;\r\n public Applied: boolean;\r\n}\r\n\r\nexport enum ConfirmationVia {\r\n Email,\r\n Sms,\r\n Both\r\n}\r\n\r\nexport class CommentCardCustomizationDTO {\r\n public PropertyId: Number;\r\n public HeaderFont: string;\r\n public HeaderBackground: string;\r\n public FooterBackground: string;\r\n public HeaderTextColor: string;\r\n public FooterTextColor: string;\r\n public CommentCardTextColor: string;\r\n public CommentCardBackgroundColor: string;\r\n public StarBackgroundColor: string;\r\n public ButtonLinkColor: string;\r\n public MainContentTextColor: string;\r\n public SurveyBackgroundColor: string;\r\n}\r\n\r\nexport class WidgetCustomizationDTO {\r\n public Layout: string;\r\n public HeaderFont: string;\r\n public HeaderText: string;\r\n public HeaderStyle: string;\r\n public TopHalfBackgroundColor: string;\r\n public BottomHalfBackgroundColor: string;\r\n public AvailableButtonColor: string;\r\n public TitleTextColor: string;\r\n public BodyTextColor: string;\r\n public EarlierLaterLinkColor: string;\r\n public LineColor: string;\r\n public WidgetFooterLinkColor: string;\r\n public FooterBackgroundColor: string;\r\n public MaincontentTopBackgroundColor: string;\r\n public MaincontentBottomBackgroundColor: string;\r\n public SubheaderBackgroundColor: string;\r\n public SubheaderTextColor: string;\r\n public SubHeaderFontSize: string;\r\n public SubHeaderPosition: string;\r\n public SubHeaderFont: string;\r\n public SubHeaderText: string;\r\n public AvailableButtonHoverColor: string;\r\n public EarlierLaterHoverColor: string;\r\n public EarlierLaterHoverBackgroundColor: string;\r\n public WidgetFooterHoverColor: string;\r\n public FooterTextColor: string;\r\n public WidgetBorderColor: string;\r\n public WidgetLinkColor: string;\r\n public WidgetLinkHoverColor: string;\r\n public WidgetBackgroundColor: string;\r\n public UnavailableButtonBackgroundColor: string;\r\n public AvailableButtonHoverBackgroundColor: string;\r\n public AvailableButtonBackgroundColor: string;\r\n public WidgetExtraMessaging: string;\r\n public PartySizeAndDateDisclaimer: string;\r\n public CustomTermsOfService: string[];\r\n public ConfirmationMessage: string;\r\n public PreReservationMessage: string;\r\n public CustomNoShowFeeTerms: string;\r\n public PromoCodeLabel: string;\r\n public CustomCssUrl: string;\r\n public CustomLayout: string;\r\n public HeaderFontSize: string;\r\n public LocationFilters: number[];\r\n public MainContentFont: string;\r\n public MainContentFontSize: string;\r\n public ButtonFont: string;\r\n public ButtonFontSize: string;\r\n public ButtonStyle: string;\r\n public InputStyle: string;\r\n public HyperlinkFont: string;\r\n public SpecialMealFont: string;\r\n public SpecialMealFontSize: string;\r\n public SMFontColor: string;\r\n public SMSelectedBackgroundColor: string;\r\n public SMBackgroundColor: string;\r\n public PrimaryButtonBGColor: string;\r\n public PrimaryButtonTextColor: string;\r\n public SecondaryButtonBGColor: string;\r\n public SecondaryButtonTextColor: string;\r\n public TimeSlotType: string;\r\n public ShowCommunalTableAvailabilityOption: boolean;\r\n public AllowTableSelection: boolean;\r\n public IsReservationReminderMandatory: boolean;\r\n public ConfirmationVia: ConfirmationVia;\r\n public AllowAdditionalGuestDetails: boolean;\r\n public AllowMultipleTableSelection: boolean;\r\n public GTMCode: string;\r\n public NotesType: number;\r\n public DisplayPromoCode: boolean;\r\n public AllowNewReservations: boolean;\r\n public DisplayRestaurantAddress: boolean;\r\n public DisplayRestaurantName: boolean;\r\n public RestaurantNameFont : string;\r\n public RestaurantNameSize : string;\r\n public RestaurantNameTextColor : string;\r\n public RestaurantAddressFont : string;\r\n public RestaurantAddressSize : string;\r\n public RestaurantAddressTextColor : string;\r\n public DisplayModifyButton : boolean;\r\n public DisplayCancelButton : boolean;\r\n public DefaultReservationView: DefaultReservationView;\r\n}\r\n\r\nexport class MealTabDTO {\r\n public Id: Number\r\n public Name: string\r\n public StartTime: Date\r\n public EndTime: Date\r\n}\r\n\r\nexport enum Language {\r\n 'English' = 1,\r\n 'Chinese Simplified' = 2,\r\n 'Chinese Traditional' = 3,\r\n 'Japanese' = 4,\r\n 'Korean' = 5,\r\n 'French' = 6\r\n}\r\n\r\nexport enum LanguageFileName {\r\n 'english' = 1,\r\n 'chinesesimplified' = 2,\r\n 'chinesetraditional' = 3,\r\n 'japanese' = 4,\r\n 'korean' = 5,\r\n 'french'=6\r\n}\r\n\r\nexport enum LanguageCode {\r\n 'english' = 'en',\r\n 'chinesesimplified' = 'zh-s',\r\n 'chinesetraditional' = 'zh-t',\r\n 'japanese' = 'ja',\r\n 'korean' = 'ko',\r\n 'french'= 'fr'\r\n}\r\n\r\nexport class DataRetentionPolicy {\r\n public Id: number;\r\n\r\n public Tenantid: number;\r\n\r\n public EffectiveDate: Date;\r\n\r\n public CategoryId: number\r\n\r\n public PolicyType: PolicyType;\r\n\r\n public PolicyDetails: DataRetentionPolicyDetails[];\r\n}\r\n\r\nexport enum PolicyType {\r\n Standard = 1,\r\n Consent = 2\r\n}\r\n\r\nexport class DataRetentionPolicyDetails {\r\n public Id: number;\r\n\r\n public DataType: PolicyDataType;\r\n\r\n public RetentionInDays: number;\r\n\r\n public PolicyId: number\r\n\r\n public CreatedDate: Date;\r\n}\r\n\r\nexport enum PolicyDataType {\r\n Name = 1,\r\n EmailAddress = 2,\r\n PhoneNumber = 3,\r\n Address = 4,\r\n GuestImage = 5,\r\n BirthdayAndAnniversary = 6,\r\n CustomGuestFields = 7\r\n}\r\n\r\nexport enum SlottingMode {\r\n Manual,\r\n Automatic\r\n}\r\n\r\nexport enum DayOfWeek {\r\n Sunday = 0,\r\n Monday = 1,\r\n Tuesday = 2,\r\n Wednesday = 3,\r\n Thursday = 4,\r\n Friday = 5,\r\n Saturday = 6\r\n}\r\n\r\nexport class WidgetActivitiesFilterDTO {\r\n public LocationId: number;\r\n public InstructorId: number;\r\n public StartDate: Date;\r\n public EndDate: Date;\r\n public StartTime: Time;\r\n public EndTime: Time;\r\n public filteredDays: DayOfWeek[];\r\n}\r\n\r\n","
\r\n \r\n\r\n \r\n\r\n\r\n \r\n \r\n\r\n\r\n \r\n\r\n\r\n
","import { Component, Input, OnChanges, ViewChild, ElementRef, AfterViewInit, Output, EventEmitter, ViewEncapsulation } from '@angular/core';\r\nimport { ButtonValue } from '../../dynamicform/models/common-models';\r\n@Component({\r\n selector: 'app-button',\r\n templateUrl: './button.component.html',\r\n styleUrls: ['./button.component.scss'],\r\n encapsulation:ViewEncapsulation.None\r\n})\r\n\r\nexport class ButtonComponent implements OnChanges, AfterViewInit {\r\n @ViewChild('dynamicbutton', { read: true }) dynamicbutton: ElementRef;\r\n @Input() buttontype: ButtonValue;\r\n constructor(public _EL: ElementRef) {}\r\n @Output() valueChange = new EventEmitter();\r\n\r\n handleclick(e: ReturnButtonValue): void {\r\n this.valueChange.emit(e);\r\n }\r\n ngAfterViewInit() {\r\n }\r\n /**\r\n * @method function;\r\n * @function ngOnChanges;\r\n * @description change the input value\r\n */\r\n ngOnChanges() {\r\n }\r\n}\r\n\r\n\r\n\r\n\r\nexport interface ReturnButtonValue {\r\n event: object;\r\n buttontype?: string;\r\n value?: number;\r\n}\r\n","
\r\n \r\n
\r\n
\r\n

\r\n
\r\n
\r\n
\r\n\r\n\r\n
","import { Component, Input, OnInit } from '@angular/core';\r\nimport { LayoutService } from 'src/app/layout/layout.service';\r\nimport { PopupService } from '../../services/popup.service';\r\n\r\n@Component({\r\n selector: 'app-popup-message',\r\n templateUrl: './popup-message.component.html',\r\n styleUrls: ['./popup-message.component.scss']\r\n})\r\nexport class PopupMessageComponent implements OnInit {\r\n @Input() data: any;\r\n isScrolable = false;\r\n confirmationMessage: string;\r\n constructor(public ls: LayoutService, public ps: PopupService) { }\r\n\r\n ngOnInit(): void {\r\n this.confirmationMessage = this.data[0].confirmationMessage;\r\n this.isScrolable = this.data[0].isScrolable;\r\n }\r\n\r\n}\r\n","
\r\n
\r\n \r\n
\r\n

{{dialogTitle}}

\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n
\r\n {{dialogTitle}} \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
","import { Component, ComponentFactoryResolver, Inject, OnInit, ViewChild, ViewContainerRef, ViewEncapsulation, OnDestroy } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { Subscription } from 'rxjs';\r\nimport { LayoutService } from 'src/app/layout/layout.service';\r\nimport { buttonTypes, ComponentTypes } from '../../constants/commonenums';\r\nimport { ButtonValue } from '../../dynamicform/models/common-models';\r\nimport { DynamicComponenReference } from '../../dynamicform/models/popup.interface';\r\nimport { GuestService } from '../../services/guest.service';\r\nimport { PopupService } from '../../services/popup.service';\r\n\r\n@Component({\r\n selector: 'app-popup',\r\n templateUrl: './popup.component.html',\r\n styleUrls: ['./popup.component.scss'],\r\n encapsulation:ViewEncapsulation.None\r\n})\r\nexport class PopupComponent implements OnInit, OnDestroy {\r\n okayBtn: ButtonValue;\r\n cancelBtn: ButtonValue;\r\n @ViewChild('dynamicComponent', { read: ViewContainerRef }) dynamicComponent: ViewContainerRef;\r\n dialogTitle:string ='';\r\n actionSubscription: Subscription;\r\n constructor(public dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) public dialogData,\r\n private componentFactoryResolver: ComponentFactoryResolver, public ps: PopupService, public ls:LayoutService, public gs:GuestService) { }\r\n componentName1: any;\r\n ngOnInit(): void {\r\n this.okayBtn = {\r\n type: buttonTypes.confirmBtn,\r\n label: this.dialogData.update,\r\n customclass: 'okay-btn'\r\n };\r\n\r\n this.cancelBtn = {\r\n type: buttonTypes.cancelBtn,\r\n label: this.dialogData.cancel,\r\n customclass: 'cancel-btn'\r\n };\r\n switch (this.dialogData.from) {\r\n case ComponentTypes.AuthRefundPopup:\r\n this.okayBtn.disbaledproperity = true;\r\n break;\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.actionSubscription) { this.actionSubscription.unsubscribe(); }\r\n }\r\n\r\n action(eve){\r\n this.ps.actionEnabled$.next(this.dialogData.from);\r\n this.dialogRef.close({ok: true, cancel: false});\r\n }\r\n\r\n ngAfterViewInit(){\r\n this.actionSubscription = this.ps.actiondisabled$.subscribe(value => {\r\n this.okayBtn.disbaledproperity = !value;\r\n });\r\n this.componentName1 = this.dialogData.componentDetails.componentName;\r\n this.dialogTitle = this.dialogData.componentDetails.popupTitle ? this.dialogData.componentDetails.popupTitle : '';\r\n const componentFactory = this.componentFactoryResolver.resolveComponentFactory(this.componentName1);\r\n const componentRef = this.dynamicComponent.createComponent(componentFactory);\r\n (componentRef.instance as DynamicComponenReference).data = this.dialogData.componentDetails.popupInput;\r\n }\r\n\r\n closeDialog(event){\r\n this.ps.cancelEnabled$.next(this.dialogData.from);\r\n this.dialogRef.close({ok: false, cancel: event});\r\n }\r\n\r\n}\r\n","\r\nexport enum buttonTypes {\r\n confirmBtn = 'confirm',\r\n cancelBtn = 'cancel',\r\n optionBtn = 'option',\r\n primaryGreen = 'primary-green',\r\n primaryRed = 'primary-red',\r\n actionPrimary = 'action-primary',\r\n actionPrimarySmall = 'action-primary-small',\r\n secondary = 'secondary',\r\n actionSecondary = 'action-secondary',\r\n actionSecondarySmall = 'action-secondary-small',\r\n}\r\nexport enum ShapeTypeEnum {\r\n Rectangle = 'rect',\r\n Circle = 'circle',\r\n Text = 'text',\r\n Area = 'area',\r\n Wall = 'wall',\r\n Ellipse = 'ellipse',\r\n BasicRectangle = \"brect\",\r\n BasicCircle = 'bcircle',\r\n Pin = 'pin',\r\n Image = 'image'\r\n}\r\nexport const fieldType: string[] = ['Text Field', 'Drop Down'];\r\n\r\n// export interface InputImages {\r\n// ImageId: string;\r\n// bytes: string;\r\n// isImageSelected?: boolean;\r\n// }\r\n\r\nexport const guestDetails = ['primaryGuest', 'secondaryGuest1', 'secondaryGuest2', 'secondaryGuest3'];\r\n\r\nexport enum componentName {\r\n reservationDetails = 0,\r\n tablesLayout = 1,\r\n guestDetails = 2,\r\n confirmDetails = 3,\r\n terms_of_use = 4,\r\n privacy_policy = 5,\r\n data_rentention_policy = 6,\r\n}\r\n\r\nexport enum ComponentTypes {\r\n cancelReservation,\r\n dataRetentionPolicy,\r\n financialEffectCalculation,\r\n informationPopup,\r\n deleteSecondaryGuest,\r\n seatingTypeInfoPopup,\r\n AuthRefundPopup,\r\n cancellationChargeInfo,\r\n clearCart,\r\n cartLockWarningMessage,\r\n InfoPopup\r\n}\r\n\r\nexport enum BookingBehavior {\r\n OpenBooking,\r\n ClassOrSession,\r\n PrivateLesson\r\n}\r\n\r\nexport enum PartyState {\r\n Pending,\r\n Seated,\r\n Left,\r\n NoShowed,\r\n Cancelled,\r\n Confirmed,\r\n CheckedIn,\r\n CheckedOut,\r\n Open, // not available in API\r\n Blocked // not available in API\r\n}\r\n\r\nexport enum AvailabilityCriteria {\r\n None = 0,\r\n IncludeLocation = 1,\r\n IncludeInstructor = 2,\r\n IncludeLocationAndInstructor = 3,\r\n}\r\n\r\nexport enum Labels {\r\n slotTimeAM = 66,\r\n slotTimePM = 67,\r\n}\r\n\r\nexport enum activityStatus {\r\n All = 0,\r\n InProgress = 1,\r\n Future = 2\r\n}\r\n\r\nexport enum ActivityViewType {\r\nList,\r\nGrid,\r\nBoth\r\n}\r\n\r\nexport enum ActivityTabs {\r\n BookingSelection,\r\n ActvityView,\r\n ActivitySelection,\r\n PrivateLesson,\r\n ReservationDetails,\r\n CartDetails,\r\n ConfirmationSummary,\r\n AdditionalGuest\r\n}\r\nexport enum GuestTitle {\r\n None = 0,\r\n \"Mr\" = 1,\r\n \"Mrs\",\r\n \"Ms\",\r\n \"His Excellency Ambassador\",\r\n \"Your Excellency\",\r\n \"Dame\",\r\n \"Dato\",\r\n \"Dr\",\r\n \"Dr & Mr\",\r\n \"Dr & Mrs\",\r\n \"Governor\",\r\n \"His/Her honourable\",\r\n \"Lady\",\r\n \"Lord\",\r\n \"Madame\",\r\n \"Mayor\",\r\n \"Monsieur\",\r\n \"Mr & Mr\",\r\n \"Mr & Mrs\",\r\n \"Her Royal Highness\",\r\n \"His Royal Highness\",\r\n \"Professor\",\r\n \"Sir\",\r\n \"Miss\",\r\n \"Fr\",\r\n \"Prof\",\r\n \"Rev\",\r\n \"Congrm\",\r\n \"Congrw\",\r\n \"Sen\",\r\n \"Amb\",\r\n \"Sr\",\r\n \"Admin\",\r\n \"Mr/S\",\r\n \"Judge\"\r\n}\r\n\r\nexport enum ManualSlotType {\r\n FromDefaultSlot,\r\n BrandNewSlot,\r\n EditedFromDefaultSlot\r\n}\r\n\r\n\r\nexport enum SlotType {\r\n Time,\r\n ActualSlot,\r\n DefaultSlot\r\n}\r\n\r\nexport enum AutomaticRefundState {\r\n NotApplicable,\r\n Succeeeded,\r\n Failed\r\n}\r\n\r\n\r\n\r\nexport enum PropertyType {\r\n Restaurant = \"Restaurant\",\r\n Auditorium = \"Auditorium\",\r\n Cabana = \"Cabana\",\r\n MovieTheatre = \"MovieTheatre\",\r\n TennisCenter = \"TennisCenter\",\r\n General = \"General\"\r\n}\r\n\r\nexport enum PropertyTypeId {\r\n Restaurant = 1,\r\n Auditorium = 2,\r\n Cabana = 3,\r\n MovieTheatre = 4,\r\n TennisCenter = 5,\r\n General = 6\r\n}\r\n\r\nexport enum AuthorizePaymentType {\r\n Authorize_Only = 1, //(Authorize from CC)\r\n Payment_Only = 2, //(Charge/Sale from CC)\r\n Post_To_RoomCharge = 3,\r\n Recurring_Payment = 4, //(Schedule)\r\n Loyalty_Point = 5,\r\n AuthStripe = 6, //(Gpay/Apple pay)\r\n Authorize_Document = 7, //(Waiver)\r\n Capture_Payment = 8,\r\n CreditCardToken = 13,\r\n GiftCard = 16\r\n}\r\n\r\nexport enum PartyNoteTypes {\r\n FreeFormNote = 0,\r\n PredefinedNote = 1,\r\n SpecialRequest = 2,\r\n PromoCode = 3,\r\n SpecialMeal = 4,\r\n}\r\n\r\nexport enum NoteType {\r\n partyNote,\r\n guestNote\r\n\r\n}\r\n\r\nexport enum HeaderStyle {\r\n none = 'None',\r\n custom = 'Custom',\r\n agilysys = \"Agilysys\",\r\n cityEats = \"CityEats\"\r\n}\r\n\r\nexport enum Status {\r\n New = 0,\r\n Approved = 10,\r\n Inactive = 90,\r\n SoftDelete = 95,\r\n MarkedForPurge = 99,\r\n Cancelled = 11\r\n}\r\n\r\nexport enum AttributeType {\r\n PublicHeadlines = 1,\r\n PrivateHeadlines = 2\r\n}\r\n\r\nexport const AnyVenue = [\r\n PropertyType.Restaurant,\r\n PropertyType.Auditorium,\r\n PropertyType.Cabana,\r\n PropertyType.MovieTheatre\r\n]\r\n\r\nexport enum ScreenType {\r\n ReservationSetting =1,\r\n ReservationMessaging,\r\n MerchantSetting\r\n\r\n\r\n}\r\n\r\nexport const ActivitiesVenue = [\r\n PropertyType.TennisCenter\r\n]\r\n\r\nexport const propertyWithDefaultCourtArea = [\r\n PropertyType.TennisCenter\r\n]\r\n\r\nexport enum LocationViewTypes {\r\n None = 0,\r\n LayoutView = 1,\r\n ListView = 2\r\n}\r\n\r\nexport enum LocationFilter {\r\n ByArea = 1,\r\n ByType = 2\r\n}\r\n\r\nexport enum ActivityBookings {\r\n GroupLessonBooking = 0,\r\n PrivateLessonBooking = 1,\r\n OpenBooking = 2\r\n}\r\n\r\nexport enum BookingGuestType {\r\n None = 0,\r\n HotelGuest = 1,\r\n Member = 2,\r\n Loyalty = 3, \r\n Others = 4\r\n}\r\n\r\nexport enum ActionControl {\r\n None = 0,\r\n CanModify = 1,\r\n CanCancel = 2,\r\n CanModifyAndCancel = 3\r\n}\r\n \r\n\r\nexport const ControlSettings = {\r\n OpenBookingProperties: [\r\n PropertyType.TennisCenter,\r\n PropertyType.General\r\n ],\r\n DiningProperties: [\r\n PropertyType.Restaurant,\r\n PropertyType.Auditorium,\r\n PropertyType.Cabana,\r\n PropertyType.MovieTheatre\r\n ],\r\n VenueBasedActivitiesProperties: [\r\n PropertyType.Restaurant,\r\n PropertyType.Auditorium,\r\n PropertyType.Cabana,\r\n PropertyType.MovieTheatre\r\n ]\r\n}\r\n\r\nexport enum DefaultReservationView {\r\n SpecialMeal,\r\n TableReservation\r\n}\r\n\r\n\r\nexport const chineseLanguageCodes = ['zh-s','zh-t'];\r\nexport const DEFAULT_LANGUAGE_CODE = 'en';\r\nexport const DEFAULT_LANGUAGE_ID = 1;","import { environment } from 'src/environments/environment';\r\n\r\nexport let urlConfig: any = {\r\n};\r\n\r\nexport function setURLConfig() {\r\n urlConfig = {\r\n layoutImageUrl: environment.BaseUrl + '/layout/GetSeatingAreaLayoutImage?restaurantId=',\r\n getWidgetSettings: environment.BaseUrl + '/widget/GetRestaurantWidgetsettings',\r\n getWidgetSettingsByMerchantCode: environment.BaseUrl + '/customwidget/GetMerchantWidgetSettings',\r\n seatingTypesUrl: environment.BaseUrl + '/widget/GetSeatingTypes?restaurantId=',\r\n layoutUrl: environment.BaseUrl + '/layout/GetLayoutInformation',\r\n // ?restaurantId=14&timeSlot=2020-12-14T21%3A00%3A00&partySize=2&seatingareaid=&showCommunalTable=false&_=1607622941552',\r\n bannerImageUrl: environment.BaseUrl + '/widget/GetWidgetImage',\r\n dateAvailabilityUrl: environment.BaseUrl + '/widget/GetRestaurantDateAvailability',\r\n availableDateUrl: environment.BaseUrl + '/widget/GetRestaurantAvailableDates',\r\n restaurantPolicy: environment.BaseUrl + '/widget/GetRestaurantPolicy',\r\n getCustomGuestFields: environment.BaseUrl + '/widget/GetCustomGuestFields',\r\n getCountries: environment.BaseUrl + '/widget/GetCountries',\r\n getContact: environment.BaseUrl + '/widget/Get',\r\n acquireLock: environment.BaseUrl + '/lock/Acquire',\r\n releaseLock: environment.BaseUrl + '/lock/Release',\r\n getPreliminaryReservationInformation: environment.BaseUrl + '/reservation/GetPreliminaryReservationInformation',\r\n getCoverTypePricing: environment.BaseUrl + '/reservation/GetCoverTypePricing',\r\n createReservation: environment.BaseUrl + '/reservation/Create',\r\n updateReservation: environment.BaseUrl + '/reservation/Update',\r\n cancelReservation: environment.BaseUrl + '/reservation/Cancel',\r\n registerReservationAttempt: environment.BaseUrl + '/reservation/RegisterReservationAttempt',\r\n updateReservationAttempt: environment.BaseUrl + '/reservation/UpdateReservationAttempt',\r\n completeShift4Booking: environment.BaseUrl + '/reservation/CompleteShift4Booking',\r\n getReservationAttemptState: environment.BaseUrl + '/reservation/GetReservationAttemptState',\r\n getByToken: environment.BaseUrl + '/reservation/GetByToken',\r\n formatResult: environment.BaseUrl + '/reservation/FormatResult',\r\n getFinancialEffectForUpdatedReservationDTO: environment.BaseUrl + '/reservation/GetFinancialEffectForUpdatedReservationDTO',\r\n getSpecialMeal: environment.BaseUrl + '/reservation/GetSpecialMeal',\r\n getAuthWaiverForm: environment.BaseUrl + '/widget/GetAuthWaiverForm',\r\n getImages: environment.BaseUrl + '/widget/GetImages?restaurantId=',\r\n widgetImageURL: '/widget/GetWidgetImage?id=',\r\n getMerchantLevelImageUrl: environment.BaseUrl + '/widget/GetWidgetImage',\r\n createSecondaryContacts: environment.BaseUrl + '/reservation/SetSecondaryContacts',\r\n backgroundImageUrl: environment.BaseUrl + '/widget/GetWidgetBackgroundImage',\r\n GetSlotsForActivityURL: environment.BaseUrl + '/Activities/GetAvailability',\r\n getGetFilteredLessonsActivityURL: environment.BaseUrl + '/activities/GetFilteredLessons',\r\n lockSessionsURL: environment.BaseUrl + '/Activities/LockSessions',\r\n lockMultiSessionsURL: environment.BaseUrl + '/customwidget/LockCartForMultipleProperties',\r\n unLockMultiSessionsURL: environment.BaseUrl + '/customwidget/UnlockCartForMultipleProperties',\r\n // registerMultiReservationAttempt: environment.BaseUrl + '/customwidget/RegisterMultipleReservationAttemptsForActivitiesCart',\r\n registerMultiReservationAttempt: environment.BaseUrl + '/customwidget/RegisterMultipleReservationAttempts',\r\n registerMultiReservationAttemptUniversalCart: environment.BaseUrl + '/customwidget/RegisterReservationAttempt',\r\n GetRatePlanCalculatedURL: environment.BaseUrl + '/Activities/GetRatePlanCalculated',\r\n createSessionBookingURL: environment.BaseUrl + '/Activities/BookHostActivity',\r\n createMultiSessionBookingURL: environment.BaseUrl + '/customwidget/BookCartForMultipleProperties',\r\n updateSessionBookingURL: environment.BaseUrl + '/Activities/UpdateHostActivity',\r\n GetPreliminaryActivityInformationURL: environment.BaseUrl + '/Activities/GetPreliminaryActivityInformation',\r\n registerBookActivityAttempt: environment.BaseUrl + '/reservation/RegisterBookActivityAttempt',\r\n updateMultipleBookActivityAttempt: environment.BaseUrl + '/reservation/UpdateMultipleReservationAttempts',\r\n getFinancialEffectForUpdatedActivityDTO: environment.BaseUrl + '/activities/FinancialEffect',\r\n cancelSessionBooking: environment.BaseUrl + '/Activities/CancelClassOrSession',\r\n GetCancellationChargeURL: environment.BaseUrl + '/Activities/GetCancellationCharge',\r\n cancelStandByBooking: environment.BaseUrl + '/Activities/CancelStandByClassOrSession',\r\n GetContactFromEngagebyCardnoURL: environment.BaseUrl + '/activities/GetContactFromEngagebyCardno',\r\n GetSlotsForTablesURL: environment.BaseUrl + '/activities/GetOpenBookingSlotsForTables',\r\n getsurveyurl: environment.BaseUrl + '/Feedback/GetSurveyrequest',\r\n updatesurveyurl: environment.BaseUrl + '/Feedback/Update',\r\n layoutseatingImageUrl: environment.BaseUrl + '/Feedback/GetFeedbackLayoutImage?restaurantId=',\r\n lockTablesURL: environment.BaseUrl + '/Activities/AcquireMultiple',\r\n getMultipleReservationAttemptStates: environment.BaseUrl + '/activities/GetMultipleReservationAttemptStates',\r\n BookMultipleActivity: environment.BaseUrl + '/activities/BookMultipleActivity',\r\n getByBookingId: environment.BaseUrl + '/activities/GetByBookingId',\r\n cancelOpenBookingUrl: environment.BaseUrl + '/activities/CancelMultipleOpenBooking',\r\n releaseMultipleLocks: environment.BaseUrl + '/Activities/ReleaseMultiple',\r\n unlockSessionsUrl: environment.BaseUrl + '/Activities/UnLockSessions',\r\n getCommentCardCustomization: environment.BaseUrl + '/Feedback/GetCommentCardCustomization',\r\n deleteCartItem: environment.BaseUrl + '/Activities/deleteCart',\r\n AddToCartItem: environment.BaseUrl + '/Activities/addToCart',\r\n bookSelectedCartItems: environment.BaseUrl + '/Activities/bookSelectedCartItems',\r\n bookPrivateLesson: environment.BaseUrl + '/activities/CreateStandByPrivateLessonWebsiteActivity',\r\n cancelPrivateLessonUrl: environment.BaseUrl + '/activities/CancelPrivateLesson',\r\n LockCartSessionURL: environment.BaseUrl + '/Cart/LockCart',\r\n UnlockCartSessionURL: environment.BaseUrl + '/Cart/UnlockCart',\r\n getCartReservationAttempt: environment.BaseUrl + '/Cart/RegisterCartBookActivityAttempts',\r\n bookCart: environment.BaseUrl + '/Cart/BookCart',\r\n validateCartCustomFields: environment.BaseUrl + '/Cart/ValidateCartItem',\r\n validateCartItem: environment.BaseUrl + '/Cart/ValidateCartItem',\r\n openBookingLayoutUrl: environment.BaseUrl + '/layout/GetOpenBookingLayoutInformation',\r\n openBookingAddOnsUrl: environment.BaseUrl + '/widget/GetAddonsAvailabilityBySlot',\r\n openBookingCancelUrl: environment.BaseUrl + `/Activities/CancelOpenBooking`,\r\n getLanguageConstants : environment.BaseUrl + '/widget/GetLanguageConstant',\r\n SearchByBookingType : environment.BaseUrl + '/Reservation/SearchByBookingType',\r\n getRateplan: environment.BaseUrl + '/Activities/GetRatePlanCalculated',\r\n };\r\n}\r\n\r\nexport enum loaderDisabledUrls {\r\n};\r\n\r\n","import { Injectable } from '@angular/core';\r\nimport { Observable, BehaviorSubject, Subject } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class FormChipService {\r\n formChipChange$: Subject = new Subject();\r\n constructor() { }\r\n}\r\n","\r\nimport { FormControl, FormGroupDirective, NgForm } from '@angular/forms';\r\nimport { ErrorStateMatcher } from '@angular/material/core';\r\n\r\nexport class MyErrorStateMatcher implements ErrorStateMatcher {\r\n isErrorState(control: FormControl | null, form: FormGroupDirective | NgForm | null): boolean {\r\n const isSubmitted = form && form.submitted;\r\n return (control && control.invalid);\r\n }\r\n}\r\n","import { Directive, ElementRef, HostListener } from '@angular/core';\r\n\r\n@Directive({\r\n selector: 'input[appDecimalsOnly]'\r\n})\r\nexport class DecimalsOnlyDirective {\r\n private regex: RegExp = new RegExp(/^(\\d*\\.)?\\d+$/g);\r\n private specialKeys: Array = ['Backspace', 'Tab', 'End', 'Home', 'ArrowLeft', 'ArrowRight', 'ArrowDown', 'ArrowUp', 'Delete'];\r\n constructor(private el: ElementRef) {\r\n }\r\n @HostListener('keydown', ['$event'])\r\n onKeyDown(event: KeyboardEvent) {\r\n if (this.specialKeys.indexOf(event.key) !== -1 || event.ctrlKey) {\r\n return;\r\n }\r\n const current: string = this.el.nativeElement.value;\r\n let next: string = current.concat(event.key);\r\n if (event.key === '.') {\r\n next = next.concat('0');\r\n }\r\n if (next && !String(next).match(this.regex) || event.key === '-') {\r\n event.preventDefault();\r\n }\r\n }\r\n}\r\n","import { Directive, ElementRef, HostListener, Input } from '@angular/core';\r\nimport { NgControl } from '@angular/forms';\r\nimport { DynamicFormService } from '../dynamicform/service/dynamic-form.service';\r\n\r\n\r\n@Directive({\r\n selector: 'input[phoneNumber]'\r\n})\r\nexport class PhoneNumberFormatDirective {\r\n constructor(public ngControl: NgControl, private dfs: DynamicFormService) { }\r\n\r\n @HostListener('ngModelChange', ['$event'])\r\n onModelChange(event) {\r\n if (event) {\r\n const value = this.dfs.onInputChange(event, false);\r\n this.ngControl.valueAccessor.writeValue(value);\r\n }\r\n }\r\n @HostListener('keydown.backspace', ['$event'])\r\n keydownBackspace(event) {\r\n const value = this.dfs.onInputChange(event.target.value, true);\r\n this.ngControl.valueAccessor.writeValue(value);\r\n }\r\n}\r\n","
\r\n \r\n \r\n \r\n
{{config.label | translate}} *
\r\n \r\n \r\n \r\n \r\n {{config.label | translate}} \r\n \r\n {{config.label | translate}}\r\n \r\n \r\n \r\n \r\n \r\n {{'invalidText' | translate}}\r\n \r\n \r\n {{config.errorMessage | translate}}\r\n \r\n \r\n {{'invalidEmail' | translate}}\r\n \r\n \r\n {{'errorPaidAmount' | translate}}\r\n \r\n \r\n {{'minlengthValidationMessage' | translate: {charLength: config.charLength} }}\r\n \r\n \r\n
\r\n\r\n
\r\n
{{config.label | translate}} *
\r\n -\r\n \r\n\r\n \r\n \r\n {{'invalidText' | translate}}\r\n \r\n\r\n \r\n +\r\n
\r\n
\r\n \r\n {{config.label | translate}}\r\n {{prefix}}  \r\n \r\n \r\n {{'invalidText' | translate}}\r\n \r\n \r\n {{config.errorMessage | translate}}\r\n \r\n \r\n Please enter a minimum of {{config.charLength}} characters.\r\n \r\n \r\n {{config.errorMessage | translate}}\r\n \r\n \r\n {{'refundError' | translate}}\r\n \r\n \r\n
\r\n\r\n
\r\n \r\n \r\n \r\n
{{config.label | translate}} *
\r\n \r\n \r\n \r\n \r\n {{config.label | translate}} \r\n \r\n {{config.label | translate}}\r\n \r\n \r\n \r\n \r\n \r\n {{'invalidText' | translate}}\r\n \r\n \r\n {{config.errorMessage | translate}}\r\n \r\n \r\n {{'invalidEmail' | translate}}\r\n \r\n \r\n {{'errorPaidAmount' | translate}}\r\n \r\n \r\n
","import { Component, ViewContainerRef, OnInit, ViewEncapsulation, EventEmitter, Output, AfterViewInit, ChangeDetectorRef } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\n\r\nimport { Field } from '../../models/field.interface';\r\nimport { FieldConfig } from '../../models/common-models';\r\nimport { DynamicFormService } from '../../service/dynamic-form.service';\r\nimport { MyErrorStateMatcher } from '../../models/error-matcher';\r\n\r\n@Component({\r\n selector: 'app-form-input',\r\n templateUrl: './form-input.component.html',\r\n styleUrls: ['form-input.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class FormInputComponent implements Field, OnInit, AfterViewInit {\r\n decimalNumbersOnly: boolean;\r\n // @Output() valueChange EventEmitter = new EventEmitter()\r\n constructor(public dfs: DynamicFormService, private cdf: ChangeDetectorRef) { }\r\n matcher = new MyErrorStateMatcher();\r\n\r\n @Output() valueChange: EventEmitter = new EventEmitter();\r\n\r\n public FormControlName;\r\n config: FieldConfig;\r\n group: FormGroup;\r\n onlyNumber: any;\r\n digitOnly: any;\r\n numbersDotOnly: any;\r\n isPhoneNumber = false;\r\n isAlphaNumeric: any;\r\n isNewPhoneNumber: boolean;\r\n prefix: string;\r\n inputControls: boolean = false;\r\n inputEmiter() {\r\n /* */\r\n this.valueChange.emit('test');\r\n }\r\n\r\n ngOnInit() {\r\n this.FormControlName = this.config.name;\r\n this.onlyNumber = this.config.directive && this.config.directive === 'numberOnly';\r\n this.digitOnly = this.config.directive && this.config.directive === 'digitOnly';\r\n this.numbersDotOnly = this.config.directive && this.config.directive === 'numbersDotOnly';\r\n this.isPhoneNumber = this.config.isPhoneNumber ? this.config.isPhoneNumber : false;\r\n this.isAlphaNumeric = this.config.directive && this.config.directive === 'alphaNumeric';\r\n this.inputControls = this.config.inputControls ? this.config.inputControls : false;\r\n this.decimalNumbersOnly = this.config.directive && this.config.directive === 'appDecimalsOnly';\r\n this.prefix = this.config.prefix || null;\r\n if (this.config.isConciergeNumber) {\r\n this.isNewPhoneNumber = this.config.isNewPhoneNumber;\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.cdf.detectChanges();\r\n }\r\n\r\n increaseClicked(event) {\r\n if (this.config.increaseClicked) {\r\n this.config.increaseClicked(event, this.config.name)\r\n }\r\n }\r\n\r\n decreaseClicked(event) {\r\n if (this.config.decreaseClicked) {\r\n this.config.decreaseClicked(event, this.config.name)\r\n }\r\n }\r\n onKeyup(event) {\r\n if (this.config.blurClick) {\r\n this.config.blurClick(event);\r\n }\r\n\r\n }\r\n\r\n iconClick(event, ctrlName?) {\r\n if (this.config.cellClick) {\r\n this.config.cellClick(event, ctrlName);\r\n }\r\n }\r\n\r\n addNewPhoneNumber(action) {\r\n if (this.config.returnFunction) {\r\n this.config.returnFunction(action);\r\n }\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n\r\n onFocusOut(event, ctrlName?) {\r\n if (this.config.onfocusOutClick) {\r\n this.config.onfocusOutClick(event, ctrlName);\r\n }\r\n }\r\n}\r\n","\r\n
\r\n
\r\n
{{config.groupLabel | translate}}
\r\n
\r\n
\r\n
\r\n \r\n {{option.value}} \r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n \r\n \r\n \r\n {{config.placeholder | translate}}\r\n \r\n
\r\n
\r\n\r\n
\r\n
{{config.label | translate}}
\r\n
\r\n {{option.value}}\r\n
\r\n
\r\n\r\n\r\n","import { Component, OnInit, ViewEncapsulation } from '@angular/core';\r\nimport { FieldConfig } from '../../models/common-models';\r\nimport { FormArray, FormBuilder, FormGroup } from '@angular/forms';\r\nimport { config } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'app-form-checkbox',\r\n templateUrl: './form-checkbox.component.html',\r\n styleUrls: ['./form-checkbox.component.scss'],\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class FormCheckboxComponent implements OnInit {\r\n\r\n config: FieldConfig;\r\n group: FormGroup;\r\n configName: any;\r\n innerHTMLdata: boolean = false;\r\n constructor() { }\r\n\r\n ngOnInit() {\r\n this.configName = this.group.get(this.config.name); \r\n this.innerHTMLdata = this.config.innerHTMLdata ? this.config.innerHTMLdata : false;\r\n }\r\n\r\n}\r\n","\r\n\r\n
\r\n
{{config.label | translate}}
\r\n \r\n \r\n \r\n {{'invalidText' | translate}}\r\n \r\n \r\n
\r\n","import { Component, OnInit, ViewEncapsulation } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\n\r\nimport { Field } from '../../models/field.interface';\r\nimport { FieldConfig } from '../../models/common-models';\r\nimport { MyErrorStateMatcher } from '../../models/error-matcher';\r\n\r\n@Component({\r\n selector: 'app-form-textarea',\r\n templateUrl: './form-textarea.component.html',\r\n styleUrls: ['./form-textarea.component.scss'],\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class FormTextareaComponent implements Field, OnInit {\r\n config: FieldConfig;\r\n group: FormGroup;\r\n FormControlName: string;\r\n constructor() { }\r\n matcher = new MyErrorStateMatcher();\r\n \r\n ngOnInit() {\r\n this.FormControlName = this.config.name;\r\n }\r\n\r\n}\r\n","\r\n
\r\n
\r\n {{config.label | translate}} *\r\n \r\n
\r\n \r\n \r\n {{config.label | translate}}\r\n \r\n \r\n \r\n {{ option.value | translate }}\r\n {{ option.value | localizeDate: 'LT' }}\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n {{config.label | translate}}\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n\r\n \r\n\r\n\r\n\r\n\r\n","import { Component, OnInit, ViewEncapsulation } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\n\r\nimport { Field } from '../../models/field.interface';\r\nimport { FieldConfig } from '../../models/common-models';\r\nimport { DynamicFormService } from '../../service/dynamic-form.service';\r\n// import { CommonService } from '../../../services/common.service';\r\n\r\n\r\n\r\n@Component({\r\n selector: 'app-form-select',\r\n templateUrl: './form-select.component.html',\r\n styleUrls: ['form-select.component.scss'],\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class FormSelectComponent implements Field, OnInit {\r\n config: FieldConfig;\r\n group: FormGroup;\r\n FormControlName:string;\r\n options=[]\r\n constructor(){\r\n\r\n }\r\n ngOnInit(){\r\n this.FormControlName = this.config.name;\r\n this.group.controls[this.config.name].setValue(this.config.value);\r\n }\r\n\r\n\r\n reset(event){\r\n if(this.group.controls[this.config.name].value == \"\"){\r\n event.target.blur();\r\n this.group.controls[this.config.name].setValue(this.config.value)\r\n }\r\n }\r\n\r\n selectedOption(event){\r\n if (this.config.cellClick){\r\n this.config.cellClick(event);\r\n }\r\n\r\n }\r\n\r\n\r\n\r\n}\r\n\r\n","
\r\n
\r\n {{config.label | translate}}\r\n
\r\n \r\n\r\n\r\n {{ config.label | translate}}\r\n \r\n \r\n \r\n\r\n
\r\n","import { Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { Subscription } from 'rxjs';\r\nimport { FieldConfig } from '../../models/common-models';\r\nimport { Field } from '../../models/field.interface';\r\nimport { MAT_DATE_FORMATS } from '@angular/material/core'\r\nimport { LayoutService } from '../../../../layout/layout.service';\r\n@Component({\r\n selector: 'app-form-date',\r\n templateUrl: './form-date.component.html',\r\n styleUrls: ['form-date.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n providers: [{ provide: MAT_DATE_FORMATS, deps: [LayoutService], useFactory: (layoutService) => layoutService.getDateFormats() }] \r\n})\r\n\r\nexport class FormdateComponent implements Field, OnInit, OnDestroy {\r\n public FormControlName;\r\n config: FieldConfig;\r\n group: FormGroup;\r\n _minDate: Date;\r\n today = new Date();\r\n hideTodayButton: boolean = false;\r\n subscriptions: Subscription = new Subscription();\r\n\r\n constructor() { }\r\n\r\n ngOnInit() {\r\n\r\n }\r\n \r\n\r\n ngOnDestroy(): void {\r\n if (this.subscriptions) { this.subscriptions.unsubscribe(); }\r\n }\r\n}\r\n","
\r\n
\r\n {{config.label | translate}} \r\n \r\n \r\n
\r\n {{option.value | translate}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n
\r\n {{option.value}}\r\n
\r\n
\r\n
","import { Component, OnInit, ViewEncapsulation } from '@angular/core';\r\nimport { FieldConfig } from '../../models/common-models';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { DynamicFormService } from '../../service/dynamic-form.service';\r\n\r\n@Component({\r\n selector: 'app-form-radio',\r\n templateUrl: './form-radio.component.html',\r\n styleUrls: ['./form-radio.component.scss'],\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class FormRadioComponent implements OnInit {\r\n config: FieldConfig;\r\n group: FormGroup; \r\n constructor(public dfs:DynamicFormService) { }\r\n\r\n ngOnInit() {\r\n \r\n }\r\n ngOnChanges(){\r\n \r\n }\r\n selectedOption(event){\r\n if (this.config.cellClick){\r\n this.config.cellClick(event);\r\n }\r\n this.dfs.selectedRadioOption = event.value;\r\n }\r\n}\r\n","
\r\n
{{config.label | translate}} *
\r\n
\r\n \r\n \r\n {{option.value}} \r\n \r\n \r\n \r\n \r\n\r\n \r\n {{config.errorMessage | translate}}\r\n \r\n \r\n {{'invalidPhone' | translate}}\r\n \r\n \r\n
\r\n
","import { Component, OnInit, ViewEncapsulation } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { FieldConfig } from '../../models/common-models';\r\nimport { DynamicFormService } from '../../service/dynamic-form.service';\r\n\r\n@Component({\r\n selector: 'app-form-input-select',\r\n templateUrl: './form-input-select.component.html',\r\n styleUrls: ['./form-input-select.component.scss'],\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class FormInputSelectComponent implements OnInit {\r\n config: FieldConfig;\r\n group: FormGroup;\r\n FormControlName: any;\r\n constructor(public dfs: DynamicFormService,) { }\r\n\r\n ngOnInit(): void {\r\n this.FormControlName = this.config.name;\r\n //console.log(this.group)\r\n }\r\n\r\n selectedOption(event){\r\n if (this.config.cellClick){\r\n this.config.cellClick(event);\r\n }\r\n }\r\n\r\n onKeyup(event) {\r\n if (this.config.blurClick) {\r\n this.config.blurClick(event);\r\n }\r\n }\r\n\r\n}\r\n","import { Component, Input, OnInit } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { FieldConfig } from '../../models/common-models';\r\n\r\n@Component({\r\n selector: 'app-form-add-button',\r\n templateUrl: './form-add-button.component.html',\r\n styleUrls: ['./form-add-button.component.scss']\r\n})\r\nexport class FormAddButtonComponent implements OnInit {\r\n config: FieldConfig;\r\n group: FormGroup;\r\n @Input() addBtnConfig: FieldConfig;\r\n constructor() { }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n addData(event) {\r\n if (this.addBtnConfig) {\r\n this.addBtnConfig.cellClick(event);\r\n }\r\n else {\r\n this.config.cellClick(event);\r\n }\r\n\r\n }\r\n}\r\n","\r\n
\r\n \r\n
","
\r\n
\r\n\r\n \r\n {{config.label | translate}}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {{'selectValue' | translate }}\r\n \r\n \r\n {{config.errorMessage | translate}}\r\n \r\n\r\n \r\n \r\n
\r\n \r\n {{config.label | translate}}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n {{'selectValue' | translate }}\r\n \r\n \r\n
\r\n \r\n {{config.label | translate}}\r\n \r\n \r\n \r\n \r\n \r\n {{autocompleteOption.DateTime }}\r\n \r\n \r\n\r\n \r\n \r\n \r\n {{'selectValue' | translate }}\r\n \r\n \r\n {{config.errorMessage | translate}}\r\n \r\n\r\n \r\n
\r\n\r\n
\r\n \r\n {{config.label | translate}}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n {{'selectValue' | translate }}\r\n \r\n \r\n {{ 'emptyPartySize' | translate}}\r\n \r\n \r\n {{'zeroPartySizeValidation' | translate}}\r\n \r\n\r\n \r\n
\r\n
","import { Component, ElementRef, OnInit, Renderer2, ViewChild, ViewEncapsulation } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { MatAutocomplete, MatAutocompleteSelectedEvent, MatAutocompleteTrigger } from '@angular/material/autocomplete';\r\n\r\nimport { FieldConfig } from '../../models/common-models';\r\nimport { SlotTimeFormatter } from '../../../pipes/slot-time-formatter.pipe';\r\n\r\n@Component({\r\n selector: 'app-form-autocomplete',\r\n templateUrl: './form-autocomplete.component.html',\r\n styleUrls: ['./form-autocomplete.component.scss'],\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class FormAutocompleteComponent implements OnInit {\r\n @ViewChild('autoCompleteInput') autoCompleteInput: ElementRef;\r\n @ViewChild('trigger', { read: MatAutocompleteTrigger }) trigger: MatAutocompleteTrigger;\r\n @ViewChild('auto') matAutocomplete: MatAutocomplete;\r\n @ViewChild(MatAutocompleteTrigger) autocomplete: MatAutocompleteTrigger;\r\n public FormControlName;\r\n config: FieldConfig;\r\n group: FormGroup;\r\n selectedOptions: any = [];\r\n autocompleteOptions: any[];\r\n showErrorText: boolean = false;\r\n toHighlight: string;\r\n appearance: boolean;\r\n scroll:any;\r\n constructor(public _eR: ElementRef, public renderer: Renderer2,private slotTimePipe: SlotTimeFormatter) { }\r\n\r\n ngOnInit() {\r\n this.FormControlName = this.config.name;\r\n this.autocompleteOptions = this.config.options;\r\n this.appearance = this.config.appearance ? this.config.appearance : false;\r\n window.addEventListener('scroll', this.scrollEvent, true);\r\n }\r\n\r\n selected(event: MatAutocompleteSelectedEvent): void {\r\n this.selectedOptions.push(event.option.viewValue);\r\n this.toHighlight = \"\";\r\n //this.autoCompleteInput.nativeElement.value = '';\r\n let x = this.FormControlName;\r\n this.group.patchValue({ x: '' })\r\n this.config.cellClick(event);\r\n }\r\n\r\n ngOnChanges() {\r\n }\r\n\r\n ngDoCheck(): void {\r\n // const panel = this.matAutocomplete.panel;\r\n // if (panel) {\r\n // panel.nativeElement.parentElement.classList.add(this.config.panelClass);\r\n // let a= panel.nativeElement.parentElement.parentElement.parentElement.children[0].outerHTML;\r\n // if(a != '
'){\r\n // panel.nativeElement.parentElement.parentElement.insertAdjacentHTML('beforebegin','
');\r\n // }\r\n // }\r\n }\r\n\r\n iconClick(event) {\r\n // this.trigger.openPanel();\r\n if (this.config.cellClick) {\r\n this.config.returnFunction(event);\r\n\r\n }\r\n\r\n }\r\n\r\n validInput(event) {\r\n // const panel = this.matAutocomplete.panel;\r\n // let a= panel.nativeElement.parentElement.parentElement.parentElement.children[0].outerHTML;\r\n // if(a == '
'){\r\n // panel.nativeElement.parentElement.parentElement.parentElement.children[0].remove();\r\n // }\r\n // let filterValue = this.group.value[this.FormControlName],\r\n // selectedOption = this.config.autoOptions.filter(option => option.value.toLowerCase() == filterValue.toLowerCase());\r\n // if(selectedOption.length < 1){\r\n // this.showErrorText = true;\r\n // this.config.value=\"\";\r\n // this.group.controls[this.FormControlName].setErrors({ 'incorrect': true, 'focused': false,'required': true });\r\n // this.group.controls[this.FormControlName].markAsTouched();\r\n // }\r\n // else{\r\n // this.group.controls[this.FormControlName].setErrors(null);\r\n // this.showErrorText = false;\r\n // this.config.value = this.selectedOptions;\r\n // }\r\n }\r\n filterOptions(event) {\r\n if (this.config.isDateTime) {\r\n this.autocompleteOptions = this.config.options.filter(option =>\r\n this.slotTimePipe.transform(option.DateTime).toLowerCase().includes(event.target.value.toLowerCase()));\r\n } else {\r\n const filterValue = event.target.value.toLowerCase();\r\n this.autocompleteOptions = this.config.options.filter(option => option.value.toLowerCase().indexOf(filterValue) != -1);\r\n }\r\n\r\n }\r\n scrollEvent = (event: any): void => {\r\n if(this.autocomplete.panelOpen){\r\n this.autocomplete.updatePosition();\r\n }\r\n // this.autocomplete.closePanel(); \r\n };\r\n\r\n ngAfterViewInit() {\r\n this.autocompleteOptions = this.config.options;\r\n }\r\n ngDestroy(){\r\n window.removeEventListener('scroll', this.scrollEvent, true);\r\n }\r\n\r\n omit_Characters(event) {\r\n let key;\r\n key = event.charCode;\r\n return ((key > 47 && key < 58) || key == 45 || key == 46);\r\n }\r\n\r\n dateSelection(option) {\r\n this.config.cellClick(option);\r\n }\r\n}\r\n","import { Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { Subscription } from 'rxjs';\r\nimport { FieldConfig } from '../../models/common-models';\r\nimport { Field } from '../../models/field.interface';\r\n\r\n@Component({\r\n selector: 'app-form-time',\r\n templateUrl: './form-time.component.html',\r\n styleUrls: ['./form-time.component.scss'],\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class FormTimeComponent implements Field, OnInit, OnDestroy {\r\n public FormControlName;\r\n config: FieldConfig;\r\n group: FormGroup;\r\n _minDate: Date;\r\n today = new Date();\r\n hideTodayButton: boolean = false;\r\n subscriptions: Subscription = new Subscription();\r\n constructor() { }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.subscriptions) { this.subscriptions.unsubscribe(); }\r\n }\r\n}\r\n","
\r\n
\r\n
\r\n {{ config.label | translate}}\r\n \r\n\r\n
\r\n
\r\n
","
\r\n \r\n \r\n \r\n
\r\n  \r\n {{chipItem.Name}}\r\n
\r\n
\r\n {{chipItem.Name}}\r\n
\r\n \r\n
\r\n
\r\n","import { ComponentFactoryResolver, ComponentRef, Directive, Input, OnChanges, OnInit, Type, ViewContainerRef } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { FormInputComponent } from '../form-input/form-input.component';\r\nimport { Field } from '../../models/field.interface';\r\nimport { FieldConfig } from '../../models/common-models';\r\nimport { FormCheckboxComponent } from '../form-checkbox/form-checkbox.component';\r\nimport { FormTextareaComponent } from '../form-textarea/form-textarea.component';\r\nimport { FormSelectComponent } from '../form-select/form-select.component';\r\nimport { FormdateComponent } from '../form-date/form-date.component';\r\nimport { FormRadioComponent } from '../form-radio/form-radio.component';\r\nimport { FormInputSelectComponent } from '../form-input-select/form-input-select.component';\r\nimport { FormAutocompleteComponent } from '../form-autocomplete/form-autocomplete.component'\r\nimport { FormAddButtonComponent } from '../form-add-button/form-add-button.component';\r\nimport { FormTimeComponent } from '../form-time/form-time.component';\r\n// Swire Change\r\nimport { FormChipComponent } from '../form-chip/form-chip.component';\r\n// Swire Change\r\n\r\n\r\n\r\nconst components: {[type: string]: Type} = { \r\n input: FormInputComponent, \r\n checkbox: FormCheckboxComponent,\r\n textarea: FormTextareaComponent,\r\n select: FormSelectComponent,\r\n date: FormdateComponent,\r\n radio: FormRadioComponent,\r\n inputSelect: FormInputSelectComponent,\r\n autocomplete: FormAutocompleteComponent,\r\n addBtn: FormAddButtonComponent,\r\n time: FormTimeComponent,\r\n // Swire Change\r\n chip: FormChipComponent\r\n // Swire Change\r\n};\r\n\r\n@Directive({\r\n selector: '[dynamicField]'\r\n})\r\nexport class DynamicFieldDirective implements Field, OnChanges, OnInit {\r\n @Input()\r\n config: FieldConfig;\r\n\r\n @Input()\r\n group: FormGroup;\r\n\r\n component: ComponentRef;\r\n\r\n constructor(\r\n private resolver: ComponentFactoryResolver,\r\n private container: ViewContainerRef\r\n ) {\r\n }\r\n\r\n ngOnChanges() {\r\n if (this.component) {\r\n this.component.instance.config = this.config;\r\n this.component.instance.group = this.group;\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n if (!components[this.config.type]) {\r\n const supportedTypes = Object.keys(components).join(', ');\r\n throw new Error(\r\n `Trying to use an unsupported type (${this.config.type}).\r\n Supported types: ${supportedTypes}`\r\n );\r\n }\r\n const component = this.resolver.resolveComponentFactory(components[this.config.type]);\r\n this.component = this.container.createComponent(component);\r\n this.component.instance.config = this.config;\r\n this.component.instance.group = this.group;\r\n }\r\n}\r\n","import { Component, OnInit, ViewEncapsulation } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { FieldConfig } from 'src/app/shared/dynamicform/models/common-models';\r\nimport { Field } from 'src/app/shared/dynamicform/models/field.interface';\r\nimport { FormChipService } from './form-chip.service';\r\n\r\n@Component({\r\n selector: 'app-form-chip',\r\n templateUrl: './form-chip.component.html',\r\n styleUrls: ['./form-chip.component.scss'],\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class FormChipComponent implements OnInit, Field {\r\n config: FieldConfig;\r\n group: FormGroup;\r\n multiple: boolean = false;\r\n constructor(private formChipService: FormChipService) { }\r\n\r\n ngOnInit() {\r\n this.multiple = this.config.multipleChip != undefined ? this.config.multipleChip : true;\r\n }\r\n\r\n selectedChip(index) {\r\n if (!this.config.options[index].isDisabled) {\r\n if (this.multiple) {\r\n if (this.config.options[index].setSelected) {\r\n this.config.options[index].setSelected = !this.config.options[index].setSelected;\r\n } else {\r\n this.config.options[index].setSelected = true;\r\n }\r\n } else {\r\n this.config.options.forEach(val => {\r\n val.setSelected = false;\r\n });\r\n this.config.options[index].setSelected = true;\r\n }\r\n this.formChipService.formChipChange$.next({ data: this.config.options, name: this.config.name });\r\n }\r\n }\r\n\r\n}\r\n","
\r\n \r\n \r\n
\r\n","import { Component, EventEmitter, Input, OnChanges, OnInit, Output, ViewEncapsulation } from '@angular/core';\r\nimport { FormGroup, FormBuilder, FormArray,Validators } from '@angular/forms';\r\nimport { FieldConfig } from '../models/common-models';\r\nimport { DynamicFormService } from 'src/app/shared/dynamicform/service/dynamic-form.service';\r\n\r\n@Component({\r\n exportAs: 'dynamicForm',\r\n selector: 'dynamic-form',\r\n templateUrl: './dynamic-form.component.html',\r\n styleUrls: ['dynamic-form.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class DynamicFormComponent implements OnChanges, OnInit {\r\n\r\n @Input() config: FieldConfig[] = [];\r\n @Output() submit: EventEmitter = new EventEmitter();\r\n\r\n form: FormGroup;\r\n\r\n get controls() { return this.config.filter(({ type }) => type !== 'button'); }\r\n get changes() { return this.form.valueChanges; }\r\n get valid() { return this.form.valid; }\r\n get value() { return this.form.value; }\r\n\r\n constructor(private fb: FormBuilder ,private dynamicFormService: DynamicFormService) { }\r\n\r\n ngOnInit() {\r\n this.form = this.createGroup();\r\n }\r\n inputEmiter() {\r\n /* */\r\n\r\n }\r\n\r\n ngOnChanges() {\r\n if (this.form) {\r\n const controls = Object.keys(this.form.controls);\r\n const configControls = this.controls.map((item) => item.name);\r\n\r\n controls\r\n .filter((control) => !configControls.includes(control))\r\n .forEach((control) => this.form.removeControl(control));\r\n\r\n configControls\r\n .filter((control) => !controls.includes(control))\r\n .forEach((name) => {\r\n const config = this.config.find((control) => control.name === name);\r\n if (config) {\r\n this.form.addControl(name, this.createControl(config));\r\n }\r\n });\r\n\r\n configControls\r\n .filter((control) => controls.includes(control))\r\n .forEach((name) => {\r\n const config = this.config.find((control) => control.name === name);\r\n if (config) {\r\n this.updateControl(name, config);\r\n }\r\n });\r\n\r\n }\r\n }\r\n\r\n createGroup() {\r\n const group = this.fb.group({});\r\n // if(this.er){\r\n // this.er.controls.forEach(control => group.addControl(control.name, this.createControl(control)));\r\n // }\r\n // else{\r\n\r\n this.controls.forEach(control => {\r\n if (!control.isFormArray) {\r\n group.addControl(control.name, this.createControl(control))\r\n }\r\n else {\r\n group.addControl(control.name, this.createFormArray(control))\r\n }\r\n });\r\n // }\r\n return group;\r\n }\r\n\r\n createControl(config: FieldConfig) {\r\n if(config.inputType == 'text' || config.type =='input' || config.type == \"textarea\"){\r\n if(config.validation ){\r\n config.validation.push(Validators.pattern(this.dynamicFormService.HTMLPattern));\r\n }else{\r\n config.validation = [Validators.pattern(this.dynamicFormService.HTMLPattern)];\r\n } \r\n }\r\n const { disabled, validation, value } = config;\r\n return this.fb.control({ disabled, value }, validation);\r\n }\r\n\r\n updateControl(control, config: FieldConfig) {\r\n const { disabled } = config;\r\n if (disabled) {\r\n this.form.controls[control].disable()\r\n } else {\r\n this.form.controls[control].enable()\r\n }\r\n }\r\n\r\n createFormArray(config: FieldConfig) {\r\n let formArrayName = config.name;\r\n return (\r\n this.fb.array([this.createItem(config)])\r\n );\r\n\r\n }\r\n\r\n createItem(config): FormGroup {\r\n let group = this.fb.group({});\r\n config.options.forEach(element => {\r\n group.addControl(element.id, this.createControl(config))\r\n });\r\n return group;\r\n }\r\n\r\n handleSubmit(event: Event) {\r\n /* */\r\n event.preventDefault();\r\n event.stopPropagation();\r\n // this.submit.emit(this.value);\r\n if (this.form.valid) {\r\n this.submit.emit(this.form.value);\r\n } else {\r\n this.validateAllFormFields(this.form);\r\n\r\n for (let key in this.form.controls) {\r\n let value = this.form.controls[key];\r\n if (value.status == 'INVALID') {\r\n document.getElementsByName(key)[0].scrollIntoView({ behavior: 'smooth' });\r\n }\r\n }\r\n this.submit.emit(this.form.value);\r\n }\r\n }\r\n validateAllFormFields(formGroup: FormGroup) {\r\n Object.keys(formGroup.controls).forEach(field => {\r\n const control = formGroup.get(field);\r\n control.markAsTouched({ onlySelf: true });\r\n });\r\n }\r\n\r\n setDisabled(name: string, disable: boolean) {\r\n if (this.form.controls[name]) {\r\n const method = disable ? 'disable' : 'enable';\r\n this.form.controls[name][method]();\r\n return;\r\n }\r\n\r\n this.config = this.config.map((item) => {\r\n if (item.name === name) {\r\n item.disabled = disable;\r\n }\r\n return item;\r\n });\r\n }\r\n\r\n setValue(name: string, value: any) {\r\n this.form.controls[name].setValue(value, { emitEvent: true });\r\n }\r\n}\r\n","import { Injectable,SecurityContext } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\nimport { GuestService } from '../../services/guest.service';\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\n\r\nexport class DynamicFormService {\r\n selectedCountryCode: string;\r\n selectedRadioOption: number;\r\n requiredPhoneNumberLength$: number;\r\n HTMLPattern = \"^[^<>]+$\"\r\n selectedCountryId: number;\r\n countriesList = [];\r\n ValidateGuestPhoneNumber: boolean = true;\r\n constructor(private domSanitizer: DomSanitizer,private guestService: GuestService) { }\r\n\r\n onInputChange(event, backspace) {\r\n let newVal = event ? event.replace(/\\D/g, '') : '';\r\n //let newVal = backspace? event:event.replace(/\\D/g, '');\r\n let stringCount;\r\n if (newVal) {\r\n if(backspace){\r\n newVal = newVal.substring(0, newVal.length);\r\n }\r\n else{\r\n stringCount = this.countriesList.find(country => country.Id == (this.guestService.selectedCountryId || this.selectedCountryId))?.PhoneNumberLength;\r\n let phoneNumberFormatArray = (this.countriesList.find(country => country.Id == (this.guestService.selectedCountryId || this.selectedCountryId))?.PhoneNumberPattern.split(', '))\r\n if(phoneNumberFormatArray && phoneNumberFormatArray.length){\r\n newVal = newVal.replace(this.getFormat(phoneNumberFormatArray[0]), this.getFormat(phoneNumberFormatArray[1]));\r\n }\r\n // eval(this.cs.settings.value.Countries.find(country => country.Id == (this.selectedCountryId))?.PhoneNumberPattern.split(', ')[0]), eval(this.cs.settings.value.Countries.find(country => country.Id == this.selectedCountryId)?.PhoneNumberPattern.split(', ')[1])\r\n }\r\n }\r\n\r\n if (this.ValidateGuestPhoneNumber) {\r\n this.requiredPhoneNumberLength$ = stringCount;\r\n } else {\r\n this.requiredPhoneNumberLength$ = null;\r\n }\r\n\r\n return newVal;\r\n }\r\n\r\n getFormat(format){\r\n return new Function( 'return (' + format + ')' )()\r\n }\r\n inputvalidation(value){\r\n let secureText = this.domSanitizer.sanitize(SecurityContext.HTML, value);\r\n if(secureText == value) {\r\n return false;\r\n }else{\r\n return true;\r\n }\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport moment from 'moment';\r\n\r\n@Pipe({\r\n name: 'activityListFilter'\r\n})\r\nexport class ActivityListFilterPipe implements PipeTransform {\r\n\r\n transform(activity: any, params: any): any {\r\n const activities = activity;\r\n const diff = moment(params.endDate ? params.endDate : params.startDate).diff(params.startDate, \"days\");\r\n const firstDay = moment(params.startDate);\r\n let weekdaysBetween = [];\r\n if (diff >= 6) {\r\n weekdaysBetween = [0, 1, 2, 3, 4, 5, 6];\r\n } else {\r\n for (let i = 0; i <= diff; i++) {\r\n weekdaysBetween.push(moment(firstDay).add(i, \"days\").day());\r\n }\r\n }\r\n var dateFilteredActivity = activities;\r\n if (!activities) {\r\n return [];\r\n } else if (!params.startDate && !params.endDate) {\r\n //return activities;\r\n } else if (params.startDate && !params.endDate) {\r\n dateFilteredActivity = activities.filter(eachActivity => {\r\n if (eachActivity.StartDate && eachActivity.EndDate) {\r\n return moment(eachActivity.StartDate?.split('T')[0]).isSameOrBefore(moment(params.startDate)) &&\r\n moment(eachActivity.EndDate?.split('T')[0]).isSameOrAfter(moment(params.startDate)) && eachActivity.ActivityDayOfWeeks?.some(item => weekdaysBetween.includes(item))\r\n } else {\r\n return eachActivity;\r\n }\r\n });\r\n //return filteredActivity;\r\n }\r\n dateFilteredActivity = activities.filter(eachActivity => {\r\n if (eachActivity.StartDate && eachActivity.EndDate) {\r\n return moment(eachActivity.StartDate?.split('T')[0]).isSameOrBefore(moment(params.endDate)) &&\r\n moment(eachActivity.EndDate?.split('T')[0]).isSameOrAfter(moment(params.startDate)) && eachActivity.ActivityDayOfWeeks?.some(item => weekdaysBetween.includes(item))\r\n } else {\r\n return eachActivity;\r\n }\r\n });\r\n //return filteredActivity;\r\n\r\n var nameFilteredActivity = dateFilteredActivity;\r\n if (params.searchText){\r\n nameFilteredActivity = dateFilteredActivity.filter(eachActivity => {\r\n if (eachActivity.Name)\r\n return eachActivity.Name.toLowerCase().includes(params.searchText.toLowerCase())\r\n else \r\n return false;\r\n });\r\n }\r\n \r\n return nameFilteredActivity;\r\n\r\n activity.sort((a: any, b: any) => {\r\n if (a.LessonName.replace(/\\s/g, \"\").toLowerCase() < b.LessonName.replace(/\\s/g, \"\").toLowerCase()) {\r\n return -1;\r\n } else if (a.LessonName.replace(/\\s/g, \"\").toLowerCase() > b.LessonName.replace(/\\s/g, \"\").toLowerCase()) {\r\n return 1;\r\n } else {\r\n return 0;\r\n }\r\n });\r\n return activity;\r\n }\r\n\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { GuestService } from '../services/guest.service';\r\n\r\n@Pipe({\r\n name: 'currencyDecimalFormatter'\r\n})\r\nexport class CurrencyDecimalFormatter implements PipeTransform {\r\n\r\n constructor(public guestService: GuestService) {}\r\n \r\n transform(value: number | string | Number): any {\r\n // Convert value to a number if it's a string or a Number object\r\n let num: number;\r\n if (typeof value === 'string' || value instanceof String) {\r\n num = Number(value);\r\n } else if (value instanceof Number) {\r\n num = value.valueOf();\r\n } else {\r\n num = value;\r\n }\r\n \r\n // Handle invalid number conversion\r\n if (isNaN(num)) {\r\n return value;\r\n }\r\n\r\n return num.toFixed(this.guestService.widgetSettings.NumberOfFractionalDigits || 2);\r\n }\r\n}\r\n\r\n\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { GuestTitle } from '../constants/commonenums';\r\nimport moment from 'moment';\r\n\r\n@Pipe({\r\n name: 'dateCompareByDay'\r\n})\r\nexport class DateComparePipe implements PipeTransform {\r\n\r\n transform(date1, date2): boolean {\r\n if(!date1 || !date2){\r\n return true;\r\n }\r\n let numOfDays = moment(date1).diff(date2, 'days');\r\n return numOfDays > 0;\r\n }\r\n\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport moment from 'moment';\r\nimport { GuestService } from '../services/guest.service';\r\nimport { LanguageCode } from '../Models/WidgetSettingsModels';\r\nimport { DEFAULT_LANGUAGE_ID } from '../constants/commonenums';\r\n\r\n\r\n@Pipe({\r\n name: 'formatSettingsDate'\r\n})\r\nexport class FormatSettingsDatePipe implements PipeTransform {\r\n constructor(private gs: GuestService){}\r\n\r\n transform(value: string | Date, format: string) {\r\n let localeValue = 'en';\r\n let language = this.gs.getLanguageIdFromUrl();\r\n let localMoment = moment(value);\r\n if(language){\r\n localeValue = LanguageCode[language?.toLowerCase()] \r\n }\r\n else {\r\n localeValue = this.gs.availableLanguages ? this.gs.findLocale(sessionStorage.getItem('languageId') || DEFAULT_LANGUAGE_ID) : localeValue;\r\n }\r\n\r\n if(localeValue == LanguageCode.chinesesimplified){\r\n var time = localMoment?.locale(\"zh-cn\")?.format(format);\r\n time = time?.replace(/AM/g, \"上午\").replace(/PM/g, \"下午\");\r\n return time;\r\n }\r\n\r\n if(localeValue == LanguageCode.chinesetraditional){\r\n var time = localMoment?.locale(\"zh-tw\")?.format(format);\r\n time = time?.replace(/AM/g, \"上午\").replace(/PM/g, \"下午\");\r\n return time;\r\n }\r\n\r\n return moment(new Date(value)).locale(localeValue).format(format.toUpperCase());\r\n }\r\n\r\n}\r\n","import { DatePipe } from '@angular/common';\r\nimport { Pipe, PipeTransform } from '@angular/core';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport moment from 'moment';\r\nimport { GuestService } from '../services/guest.service';\r\nimport { DEFAULT_LANGUAGE_CODE, DEFAULT_LANGUAGE_ID } from '../constants/commonenums';\r\nimport { LanguageCode } from '../Models/WidgetSettingsModels';\r\nimport { getLanguageFromQueryParam, getLanguageFromRouteParam } from 'src/app/app-initializer';\r\n\r\n@Pipe({\r\n name: 'localizeDate',\r\n})\r\nexport class LocalizedDatePipe implements PipeTransform {\r\n constructor(private gs: GuestService) {}\r\n\r\n transform(value: Date | string, formatDate = 'mediumDate'): string {\r\n // moment.locale(this.gs.availableLanguages.find(lng => lng.Id == sessionStorage.getItem('languageId'))?.Code || 'en')\r\n let localeValue = 'en';\r\n let localMoment = moment(value);\r\n let url = new URL(window.location.href);\r\n\r\n let language = getLanguageFromRouteParam(url) || getLanguageFromQueryParam(url); \r\n if(language){\r\n localeValue = LanguageCode[language?.toLowerCase()]\r\n \r\n }\r\n else {\r\n localeValue = sessionStorage.getItem('languageCode') || localeValue;\r\n }\r\n\r\n if(localeValue == LanguageCode.chinesesimplified){\r\n localeValue = formatDate === 'dddd' ? \"zh-cn\" : localeValue;\r\n var time = localMoment?.locale(localeValue)?.format(formatDate);\r\n time = time?.replace(/AM/g, \"上午\").replace(/PM/g, \"下午\");\r\n return time;\r\n }\r\n\r\n if(localeValue == LanguageCode.chinesetraditional){\r\n localeValue = formatDate === 'dddd' ? \"zh-tw\" : localeValue;\r\n var time = localMoment?.locale(localeValue)?.format(formatDate);\r\n time = time?.replace(/AM/g, \"上午\").replace(/PM/g, \"下午\");\r\n return time;\r\n }\r\n \r\n return localMoment.locale(localeValue).format(formatDate); \r\n \r\n }\r\n}","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { Labels } from '../../shared/constants/commonenums';\r\nimport { ButtonValue } from 'src/app/shared/dynamicform/models/common-models';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { Utilities } from '../../shared/utilities/utilities';\r\n\r\n@Pipe({\r\n name: 'slotTimeFormatter'\r\n})\r\nexport class SlotTimeFormatter implements PipeTransform {\r\n btnFormat: ButtonValue;\r\n constructor(public translateService: TranslateService) {\r\n }\r\n\r\n transform(data: any): any {\r\n // let timeZoneDate = new Date(data);\r\n // let SlotDate = new Date(timeZoneDate.getTime() + (timeZoneDate.getTimezoneOffset() * 60000));\r\n const SlotDate = Utilities.parseDateString(data);\r\n let amPm = Labels[Labels.slotTimeAM];\r\n let hrs = SlotDate.getHours();\r\n let mins = ('0' + SlotDate.getMinutes()).slice(-2);\r\n if (hrs >= 12) {\r\n hrs = hrs === 12 ? 12 : hrs - 12;\r\n amPm = Labels[Labels.slotTimePM];\r\n }\r\n if(hrs == 0){\r\n hrs=12;\r\n }\r\n const slotTime = hrs + '.' + mins + ' ' + this.translateService.instant(amPm);\r\n return slotTime;\r\n }\r\n\r\n\r\n\r\n}\r\n\r\n\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'textCutter'\r\n})\r\nexport class TextCutterFormater implements PipeTransform {\r\n\r\n transform(text: any, maxLength: number): any {\r\n if(maxLength && text.length > maxLength){\r\n return text.substr(0, maxLength) + \"...\"\r\n }else{\r\n return text;\r\n }\r\n }\r\n}\r\n\r\n\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject, interval, Observable, Subject, Subscription } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { ActivityTabs, BookingBehavior, ComponentTypes, chineseLanguageCodes, LocationFilter, LocationViewTypes, ScreenType, SlotType, DEFAULT_LANGUAGE_CODE } from '../constants/commonenums';\r\nimport { urlConfig } from '../constants/url-config';\r\nimport { FloorPlanImagesDto } from '../dynamicform/models/common-models';\r\nimport { OpenBookingDTO, SlotDTO } from '../Models/OpenBookingDTO';\r\nimport { AuthorizeIFrameInfoDTO, ContactDTO, CustomGuestFieldsModel, FinancialEffectForUpdatedReservationDTO, RegisterReservationAttemptResponseDTO, ReservationAttemptBasicInfo, ReservationDTO, ReservationInfoDTO, ReservationMultipleAttemptBasicInfo, SecondaryContactDTO } from '../Models/PartyModels';\r\nimport { ClassType, LockSessionRequestDTO, SessionBookingDTO } from '../Models/SessionBookingDTO';\r\nimport { SlotLockResultDTO } from '../Models/SlotLockModels';\r\nimport { DataRetentionPolicy, LanguageFileName, operationType, WidgetSettingsDTO } from '../Models/WidgetSettingsModels';\r\nimport { HttpService } from '../services/http.service';\r\nimport { Utilities } from '../utilities/utilities';\r\nimport {\r\n MatSnackBar,\r\n MatSnackBarHorizontalPosition,\r\n MatSnackBarVerticalPosition,\r\n} from '@angular/material/snack-bar';\r\nimport { Router } from '@angular/router';\r\nimport { ComponentDetails } from '../dynamicform/models/popup.interface';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { PopupComponent } from '../components/popup/popup.component';\r\nimport moment, { lang } from 'moment';\r\nimport _ from 'lodash';\r\nimport { GoogleTagManagerService } from 'angular-google-tag-manager';\r\nimport { DEFAULT_LANGUAGE, TranslateService } from '@ngx-translate/core';\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class GuestService {\r\n public restaurantWidgetName: string;\r\n public restaurantWidgetId: number;\r\n public restaurantMerchantCode: any;\r\n public activityIdFromURL : any;\r\n public propertyIdFromURL : number;\r\n public reservationToken: any;\r\n public operation = operationType.create;\r\n public language: any;\r\n public countriesList: any[];\r\n public LocationList: any[];\r\n public InstructorList: any[];\r\n public customGuestFields: any;\r\n public SessionBookingObj: SessionBookingDTO;\r\n public openBookingData: OpenBookingDTO;\r\n public SaveBookingObj: any = {};\r\n public selectedGuest: any;\r\n public ispaymentInvolvedInfo: any;\r\n public reservationAttemptInfo: any;\r\n languageFileChanges = new Subject();\r\n specialMealImage = true;\r\n public message = {\r\n message: '',\r\n state: 0\r\n };\r\n public reservationConfirmationText: string;\r\n public additionalGuestPage: any;\r\n refundData: any;\r\n public ConfigSettings: any;\r\n enableActivities = false;\r\n enableDining = false;\r\n slotLockId: number;\r\n public restaurantImages: BehaviorSubject = new BehaviorSubject(null);\r\n restaurantWidgetSettings$ = new BehaviorSubject(null);\r\n allClassActivitiesAvailable$ = new BehaviorSubject(null);\r\n editPartyData$ = new BehaviorSubject(null);\r\n bookingPartiesData$ = new BehaviorSubject(null);\r\n BookNew$ = new BehaviorSubject(null);\r\n isEditEnable: boolean;\r\n editFromCart: boolean = false;\r\n createActivityResponse$ = new BehaviorSubject(null);\r\n RatePlanList$ = new BehaviorSubject(null);\r\n SelectedClassSchedule$ = new BehaviorSubject(null);\r\n TimerOff$: Subject = new Subject();\r\n formValid$: Subject = new Subject();\r\n TabChange$: Subject = new Subject();\r\n bookingType$: Subject = new Subject();\r\n dataRetentionPolicy$ = new BehaviorSubject(null);\r\n SelectedActivity$ = new BehaviorSubject(null);\r\n globaactivityServiceeatingAreaId: number;\r\n isSplitPayment$ = new Subject();\r\n subscriptions: Subscription = new Subscription();\r\n partySize: number;\r\n PaymentData$: Subject = new Subject();\r\n editPartyData: any;\r\n globalSeatingAreaId: number;\r\n showTimer = false;\r\n timerSubscription: Subscription = new Subscription();\r\n minutes: Number;\r\n seconds: Number;\r\n totalTime: number;\r\n lockResult: SlotLockResultDTO;\r\n lockMultipleResult: any;\r\n lockMultipleIds: any = [];\r\n bookingSection$ = new BehaviorSubject(null);\r\n nextButton = new Subject();\r\n previousButton = new Subject();\r\n FormChanged = new Subject();\r\n showMessage: boolean;\r\n totalSelectedMins = 0;\r\n additionalGuestRequired: Number = 0;\r\n selectedCountryId: number;\r\n showPaymentSummary = false;\r\n primaryContact: ContactDTO;\r\n secondaryContactList: SecondaryContactDTO[];\r\n lockCallRequired = false;\r\n fromclient = false;\r\n selectedOpenBookingSlots: any = {};\r\n SlotIds = 0;\r\n slots_holder: any[];\r\n MultipledaysSlot_holder: any[];\r\n allAvailableSlots: any[];\r\n slotAvailabilitySubject$ = new BehaviorSubject(null);\r\n partySlots$ = new BehaviorSubject(null);\r\n cartCount = 0;\r\n cartListCount = new BehaviorSubject(0);\r\n CartBookingList$: Subject = new Subject();\r\n membershipId: number;\r\n AllocationTypes: any[];\r\n RefundAmount: number = 0;\r\n TotalRefundAmount: number = 0;\r\n availableDates: any[];\r\n isClassBokking = false;\r\n byPassValidation = false;\r\n BookAnotherReservation = new BehaviorSubject(false);\r\n filterAvailabilities = new BehaviorSubject(false);\r\n selectedSpecialMeal: any;\r\n selectedDiningSpecialMeal: any = {};\r\n additionalGuestLength: any;\r\n selectedCartIndex = 0;\r\n isbookingCompleted = false;\r\n isSummaryFromCart = false;\r\n bookedCartList = [];\r\n hideImage = false;\r\n imageUrl: any;\r\n cancelledCartItems$ = new BehaviorSubject(null);\r\n selectedActivities: any = {};\r\n selectedDining:any = {};\r\n selectedRatePlanList: any = {};\r\n editData: any = {};\r\n successBookRes: any = {};\r\n fromConfirmation = false;\r\n prevNavURL = '';\r\n currentNavURL = '';\r\n loaderRunning = false;\r\n isDining = false;\r\n widgetSettings: any = {};\r\n currentDateTime: Date;\r\n dateFilterStartDate: Date;\r\n dateFilterEndDate: Date;\r\n showGuestFields:boolean = false;\r\n languageConstants:any;\r\n public coverTypes: any;\r\n public bookingTypes: any;\r\n sessionFilterValue: any = {};\r\n public loader = new Subject();\r\n public timer = new Subject();\r\n public hideBackNavigation = new Subject();\r\n public backNavigateURL = new Subject();\r\n public timerCompleted = new Subject();\r\n public isVersion2 = true;\r\n public widgetConfigurations = new Subject();\r\n public merchantImgUrl = new Subject();\r\n public hideCart = new Subject();\r\n public selectedLanguage:string;\r\n public selectedLanguageId: number;\r\n public languageChange = new Subject(); \r\n addOnList = [];\r\n selectedSlot;\r\n selectedSize: number = 0;\r\n mealWithConfig: any;\r\n OperationCurrency : string;\r\n showLanguageOption = false;\r\n selectedNonDining: any = {};\r\n isNonDining: boolean = false;\r\n selectedNonDiningLocation: any[]= [];\r\n nonDiningTotalSeatsSelected: number = 0;\r\n displaySeatingArea: boolean = false;\r\n displaySeatingType: boolean = false;\r\n displayLocationType: LocationViewTypes = 0;\r\n bEnableLocationMultiSelect: boolean = false;\r\n validateLocationSize: boolean = false;\r\n chosenStartDate: Date;\r\n\r\n bShowOverbookingErrorDialog: boolean;\r\n overlapBookingproceedEvent = new BehaviorSubject({});\r\n allowOverlapBookings: boolean = false;\r\n isOverlapErrorFromValidateCartApi: boolean = false;\r\n isSpecialMeal: boolean = false;\r\n isTableReservation: boolean = false;\r\n currentComponentName = 0;\r\n availableLanguages: any = [];\r\n numberOfFractionalDigits: number = 2;\r\n DisableCustomTermsAndConditions: boolean = false;\r\n\r\n constructor(\r\n private httpService: HttpService,\r\n public snackBar: MatSnackBar,\r\n private router: Router,\r\n public gtmService:GoogleTagManagerService,\r\n private dialog: MatDialog, private ts: TranslateService) { }\r\n\r\n clickReserveNow_NonDining(data){\r\n const filteredStartDate = new Date(this.dateFilterStartDate).setHours(0, 0, 0, 0);\r\n const userCurrentDate = new Date(new Date(this.currentDateTime).setDate(new Date(this.currentDateTime).getDate() + data?.DaysForReservation - 1)).setHours(0, 0, 0, 0);\r\n if (data?.DaysForReservation && this.operation === operationType.create && filteredStartDate > userCurrentDate) {\r\n if (new Date(this.currentDateTime).setHours(0, 0, 0, 0) === userCurrentDate) {\r\n this.\r\n openSnackBar(this.ts.instant('bookingsOpenOnlyFor') + moment(this.currentDateTime).format('D MMM, YYYY'), this.ts.instant('close'), this.ConfigSettings.snackBarTime);\r\n } else {\r\n this.\r\n openSnackBar(this.ts.instant('bookingsOpenOnlyFor') + moment(this.currentDateTime).format('D MMM, YYYY') + ' - ' + moment(userCurrentDate).format('D MMM, YYYY'), this.ts.instant('close'), this.ConfigSettings.snackBarTime);\r\n }\r\n return;\r\n }\r\n this.selectedNonDining = data;\r\n this.displaySeatingArea = data.WidgetCustomization?.LocationFilters?.filter(x => x == LocationFilter.ByArea).length > 0;\r\n this.displaySeatingType = data.WidgetCustomization?.LocationFilters?.filter(x => x == LocationFilter.ByType).length > 0;\r\n this.displayLocationType = data.WidgetCustomization?.LocationViewType || 0;\r\n this.validateLocationSize = data.AvailabilityOnPartySize || false;\r\n\r\n this.isDining = false;\r\n this.isNonDining = true;\r\n this.restaurantWidgetId = data.RestaurantId;\r\n\r\n }\r\n\r\n navigateToUrl(url, queryParams={}, addnlUrl='', skipLocationChange = false, fromCart = false) {\r\n if(this.showGuestFields && (this.router['location']._platformLocation.location.pathname.indexOf(\"slot-selection\") > -1) && !fromCart) {\r\n this.showGuestFields = false;\r\n }\r\n else{\r\n if (this.operation === operationType.edit && url === 'list') { this.emptyCartData() };\r\n this.router.navigate([`/v2/activities/${url}/${this.restaurantMerchantCode || ''}${addnlUrl}`], {queryParams,skipLocationChange});\r\n } \r\n }\r\n\r\n navigateToHome(){\r\n if(this.widgetSettings?.HomePageUrl){\r\n window.location.href = this.widgetSettings?.HomePageUrl;\r\n }else{\r\n this.router.navigate([`/v2/activities/list/${sessionStorage.getItem('restaurantMerchantCode') || ''}`]);\r\n }\r\n }\r\n\r\n errorImageHandler(event) {\r\n const image = new Image();\r\n image.onload = () => {\r\n event.target.src = image.src;\r\n };\r\n image.onerror = () => {\r\n event.target.src = './assets/images/defaultImage.png';\r\n };\r\n }\r\n\r\n getWidgetImagesMerchantLevel(merchantId = '') {\r\n this.merchantImgUrl.next({\r\n bannerImg: `${urlConfig.getMerchantLevelImageUrl}?Id=${merchantId ? merchantId : this.widgetSettings.MerchantId}&imageType=0&settingsType=1`,\r\n logoImg: `${urlConfig.getMerchantLevelImageUrl}?Id=${merchantId ? merchantId : this.widgetSettings.MerchantId}&imageType=2&settingsType=1`,\r\n backgroundImg: `${urlConfig.getMerchantLevelImageUrl}?Id=${merchantId ? merchantId : this.widgetSettings.MerchantId}&imageType=1&settingsType=1`\r\n });\r\n }\r\n\r\n getRestaurantImages(restaurantId) {\r\n this.httpService.get(urlConfig.getImages + restaurantId).subscribe((images) => {\r\n const allAvailableImages = images.Payload as FloorPlanImagesDto;\r\n this.restaurantImages.next(allAvailableImages);\r\n });\r\n }\r\n\r\n addGoogleTagManager(tagId: string) {\r\n this.gtmService['config'] = {\r\n id : tagId\r\n };\r\n if (tagId) {\r\n this.gtmService.googleTagManagerId = tagId;\r\n this.gtmService.pushTag({\r\n 'gtm.start': new Date().getTime(),\r\n event: 'gtm.js',\r\n })\r\n }\r\n else {\r\n this.gtmService.googleTagManagerId = null;\r\n }\r\n\r\n // this.gtmService.config.id=this.gtmService.googleTagManagerId;\r\n sessionStorage.setItem('GTMCode', this.gtmService.googleTagManagerId)\r\n // this.gtmService.addGtmToDom();\r\n }\r\n\r\n navigateToPage(){\r\n if(this.mealWithConfig){\r\n let mealId= this.mealWithConfig.Id;\r\n this.hideBackNav();\r\n this.navigateToUrl(`list` ,null, \"/\" + mealId, true );\r\n }\r\n else{\r\n this.navigateToUrl(`list`);\r\n }\r\n }\r\n\r\n getWidgetSettingsByRestaurantName(restaurantName: string) {\r\n return this.httpService.get(`${urlConfig.getWidgetSettings}?restaurantName=${restaurantName}&languageId=${this.selectedLanguageId}`).pipe(\r\n map((data: any) => data.Payload as WidgetSettingsDTO));\r\n }\r\n\r\n getWidgetSettingsByMerchantCode(merchantCode: string, requireImage = false , languageId:number = 1) {\r\n\r\n const url = `${urlConfig.getWidgetSettingsByMerchantCode}?merchantCode=${merchantCode}&isImageRequired=${requireImage}&languageId=${sessionStorage.getItem('languageId')}`;\r\n // const url = '../../../assets/config/widgetSettings.json';\r\n return this.httpService.get(url).pipe(\r\n map((data: any) => data));\r\n }\r\n\r\n lockMultiPropertySessions(reqObj) {\r\n return this.httpService.post(`${urlConfig.lockMultiSessionsURL}`, reqObj);\r\n }\r\n\r\n unLockMultiPropertySessions(reqObj) {\r\n return this.httpService.post(`${urlConfig.unLockMultiSessionsURL}`, reqObj);\r\n }\r\n\r\n lockSessions(restaurantId, reqObj) {\r\n return this.httpService.post(`${urlConfig.lockSessionsURL}?restaurantId=${restaurantId}`, reqObj);\r\n }\r\n\r\n getWidgetSettingsByRestaurantId(restaurantId: Number) {\r\n return this.httpService.get(`${urlConfig.getWidgetSettings}?restaurantId=${restaurantId}`).pipe(\r\n map((data: any) => data.Payload as WidgetSettingsDTO));\r\n }\r\n\r\n GetRestaurantPolicy(restaurantId: Number) {\r\n return this.httpService.get(`${urlConfig.restaurantPolicy}?restaurantId=${restaurantId}`).pipe(map((data: any) => data.Payload as DataRetentionPolicy));\r\n }\r\n\r\n GetCustomFields(restaurantId: Number) {\r\n return this.httpService.get(`${urlConfig.getCustomGuestFields}?restaurantId=${restaurantId}`).pipe(map((data: any) => data.Payload as CustomGuestFieldsModel));\r\n }\r\n\r\n getByToken(token: string, bookingId: string, type?: any) {\r\n return this.httpService.get(`${urlConfig.getByToken}?token=${token}&bookingId=${bookingId}&type=${type}`).pipe(map((data: any) => data.Payload as ReservationDTO));\r\n }\r\n\r\n getByCartId(cartBookingId: string, type?: any) {\r\n return this.httpService.get(`${urlConfig.getByToken}?cartBookingId=${cartBookingId}&type=${type}`).pipe(map((data: any) => data.Payload as ReservationDTO[]));\r\n }\r\n\r\n getbyBookingId(bookingId: string) {\r\n return this.httpService.get(`${urlConfig.getByBookingId}?bookingId=${bookingId}`).pipe(map((data: any) => data.Payload as ReservationDTO));\r\n }\r\n\r\n GetCountries() {\r\n return this.httpService.get(`${urlConfig.getCountries}`).pipe(map((data: any) => data.Payload));\r\n }\r\n\r\n GetRestaurantDateAvailability\r\n (restaurantId: Number, partySize: Number, isCommunalTable: boolean, fromWidget: boolean,\r\n date, seatingAreaId = null, reservationIdToIgnore = null, specialMealId = null, seatingTypeId = null) {\r\n return this.httpService.get(`${urlConfig.dateAvailabilityUrl}?restaurantId=${restaurantId}&date=${date}&partySize=${partySize}&isCommunalTable=${isCommunalTable}&fromWidget=${fromWidget}&seatingAreaId=${seatingAreaId}&reservationIdToIgnore=${reservationIdToIgnore}&specialMealId=${specialMealId}&seatingTypeId=${seatingTypeId}`).pipe(map((data: any) => data.Payload));\r\n }\r\n\r\n GetClassSlots(req): Observable {\r\n return this.httpService.post(`${urlConfig.GetSlotsForActivityURL}?restaurantId=${req.PropertyId}&options=0`, req);\r\n }\r\n\r\n GetSessionRatePlanCalculated(request) {\r\n return this.httpService.post(`${urlConfig.GetRatePlanCalculatedURL}?restaurantId=${this.restaurantWidgetId}&options=0`, request)\r\n }\r\n\r\n GetPreliminaryReservationInformation(SpecialMealId) {\r\n return this.httpService.post(`${urlConfig.GetPreliminaryActivityInformationURL}?restaurantId=${this.restaurantWidgetId}&specialMealId=${SpecialMealId}`, '').pipe(map((data: any) => data.Payload as ReservationInfoDTO));\r\n\r\n }\r\n GetRegisterReservationAttempt(reservationAttemptId: Number) {\r\n return this.httpService.get(`${urlConfig.getReservationAttemptState}?reservationAttemptId=${reservationAttemptId}`).pipe(map((data: any) => data.Payload as ReservationAttemptBasicInfo));\r\n }\r\n\r\n RegisterReservationAttemptCart(RegisterReservationAttemptRequest) {\r\n return this.httpService.post(`${urlConfig.getCartReservationAttempt}?propertyId=${this.restaurantWidgetId}`, RegisterReservationAttemptRequest).pipe(map((data: any) => data.Payload));\r\n }\r\n\r\n GetRegisterMultipleReservationAttempt(reservationAttemptIds: Number) {\r\n return this.httpService.post(`${urlConfig.getMultipleReservationAttemptStates}`, reservationAttemptIds).pipe(map((data: any) => data.Payload as ReservationMultipleAttemptBasicInfo[]));\r\n }\r\n\r\n UpdateReservationAttempt(PaymentCallbackRequest) {\r\n const updateUrl = PaymentCallbackRequest.ReservationAttemptIds && PaymentCallbackRequest.ReservationAttemptIds.length > 0 ? urlConfig.updateMultipleBookActivityAttempt : urlConfig.updateReservationAttempt;\r\n return this.httpService.post(updateUrl, PaymentCallbackRequest);\r\n }\r\n\r\n\r\n UpdateMultiCartReservationAttempt(PaymentCallbackRequest) {\r\n const updateUrl = urlConfig.updateMultipleBookActivityAttempt;\r\n return this.httpService.post(updateUrl, PaymentCallbackRequest);\r\n }\r\n\r\n\r\n RegisterReservationAttempt(RegisterReservationAttemptRequestDTO, isDining = false) {\r\n return this.httpService.post((!isDining ? urlConfig.registerBookActivityAttempt : urlConfig.registerReservationAttempt) + '?restaurantId=' + this.restaurantWidgetId, RegisterReservationAttemptRequestDTO).pipe(map((data: any) => data.Payload as RegisterReservationAttemptResponseDTO))\r\n }\r\n \r\n\r\n UpdateReservationFinancialEffect(requestBody, isDining = false) {\r\n return this.httpService.post(urlConfig.getFinancialEffectForUpdatedActivityDTO,requestBody);\r\n }\r\n\r\n RegisterReservationAttemptMerchantLevel(RegisterReservationAttemptMerchantRequestDTO) { // Merchant level multicart process\r\n return this.httpService.post(urlConfig.registerMultiReservationAttempt, RegisterReservationAttemptMerchantRequestDTO)\r\n .pipe(map((data: any) => data.Payload as RegisterReservationAttemptResponseDTO));\r\n }\r\n\r\n RegisterReservationAttemptMerchantLevelUniversalCart(RegisterReservationAttemptMerchantRequestDTO) { // Merchant level multicart process\r\n return this.httpService.post(urlConfig.registerMultiReservationAttemptUniversalCart, RegisterReservationAttemptMerchantRequestDTO)\r\n .pipe(map((data: any) => data.Payload as RegisterReservationAttemptResponseDTO));\r\n }\r\n\r\n bookCart(cartListReqObj, isOverlapBooking: boolean = false) {\r\n return this.httpService.post(`${urlConfig.bookCart}?restaurantId=${this.restaurantWidgetId}&ignoreBookingValidation=${false}&allowOverlapBookings=${isOverlapBooking}`, cartListReqObj).pipe(map((data: any) => data.Payload))\r\n }\r\n\r\n createSessionBooking(request, isOverlapBooking: boolean = false) {\r\n request.PageMethod = request.Contact.PreferredPageMethod;\r\n const url = request.BookingBehavior === BookingBehavior.ClassOrSession && urlConfig.createSessionBookingURL ||\r\n request.BookingBehavior === BookingBehavior.OpenBooking && urlConfig.BookMultipleActivity ||\r\n request.BookingBehavior === BookingBehavior.PrivateLesson && urlConfig.bookPrivateLesson;\r\n return this.httpService.post(`${url}?restaurantId=${this.restaurantWidgetId}&allowOverlapBookings=${isOverlapBooking}`,\r\n request).pipe(map((data: any) => data.Payload))\r\n }\r\n\r\n createMultiSessionBookingrequest(request, isOverlapBooking: boolean = false, saveCardToContact: boolean = false) { \r\n return this.httpService.post(`${urlConfig.createMultiSessionBookingURL}?ignoreBookingValidation=false&allowOverlapBookings=${isOverlapBooking}&saveCardToContact=${saveCardToContact}`,\r\n request);\r\n }\r\n\r\n updateSessionBooking(request, isDining = false, isOverlapBooking: boolean = false) {\r\n request.PageMethod = request.Contact.PreferredPageMethod;\r\n return this.httpService.post(`${(!isDining ? urlConfig.updateSessionBookingURL : urlConfig.updateReservation)}?restaurantId=${this.restaurantWidgetId}&allowOverlapBookings=${isOverlapBooking}`,\r\n request).pipe(map((data: any) => data));\r\n }\r\n GetFilterValues(req): Observable {\r\n // return;\r\n return this.httpService.post(`${urlConfig.getGetFilteredLessonsActivityURL}?restaurantId=${this.restaurantWidgetId}`, req);\r\n }\r\n\r\n GetFinancialEffectCalculation(reservationDTO, isDining = false) {\r\n return this.httpService.post((!isDining ? urlConfig.getFinancialEffectForUpdatedActivityDTO : urlConfig.getFinancialEffectForUpdatedReservationDTO) + '?restaurantId=' + this.restaurantWidgetId, reservationDTO).pipe(map((data: any) => data.Payload as FinancialEffectForUpdatedReservationDTO));\r\n }\r\n\r\n CancelBooking(restaurantId: Number, partyId: Number, language: Number, sessionIds: any = []) {\r\n return this.httpService.post(`${urlConfig.cancelSessionBooking}?restaurantId=${restaurantId}&partyId=${partyId}&cancelAllOrRemainingSessions=${sessionIds.length ? false : true}&language=${language}`, sessionIds);\r\n }\r\n\r\n getCancellationCharge(restaurantId: Number, partyId: Number, sessionIds: any = []) {\r\n return this.httpService.post(`${urlConfig.GetCancellationChargeURL}?restaurantId=${restaurantId}&partyId=${partyId}&cancelAllOrRemainingSessions=${sessionIds.length ? false : true}`, sessionIds);\r\n\r\n // return this.httpService.get(\r\n // `${urlConfig.GetCancellationChargeURL}?restaurantId=${restaurantId}&partyId=${partyId}&cancelAllOrRemainingSessions=${cancelAllOrRemainingSessions}&bookedSessionId=${bookedSessionId}`);\r\n }\r\n\r\n CancelStandByBooking(restaurantId: Number, partyId: Number, language: Number, sessionIds: any = [], bookedSessionId) {\r\n return this.httpService.post(`${urlConfig.cancelStandByBooking}?restaurantId=${restaurantId}&partyId=${partyId}&cancelAllOrRemainingSessions=${sessionIds.length ? false : true}&language=${language}&bookedSessionId=${bookedSessionId}`, sessionIds);\r\n }\r\n\r\n // for discontinous slot booking cancellation\r\n CancelOpenBooking(restaurantId: Number, bookingId: Number, language: Number, partyIds: any = []) {\r\n return this.httpService.post(`${urlConfig.cancelOpenBookingUrl}?restaurantId=${restaurantId}&bookingId=${partyIds.length ? null : bookingId}&language=${language}`, partyIds);\r\n }\r\n\r\n // for continous slot booking cancellation\r\n CancelNonDiningBooking(restaurantId: Number, partyId: Number) {\r\n return this.httpService.post(`${urlConfig.openBookingCancelUrl}?restaurantId=${restaurantId}&partyId=${partyId}&isFromRejectStandBy=false`, {});\r\n }\r\n\r\n CancelPrivateLessonBooking(restaurantId: Number, bookingId: Number, language: Number, partyIds: any = []) {\r\n return this.httpService.post(`${urlConfig.cancelPrivateLessonUrl}?restaurantId=${restaurantId}&bookingId=${partyIds.length ? null : bookingId}&language=${language}`, partyIds);\r\n }\r\n\r\n\r\n\r\n GetAuthWaiverForm(restaurantId: Number, formCode: string) {\r\n return this.httpService.get(urlConfig.getAuthWaiverForm + '?restaurantId=' + restaurantId + '&formCode=' + formCode).pipe(\r\n map((data: any) => data.Payload as AuthorizeIFrameInfoDTO)\r\n );\r\n }\r\n\r\n deleteCartItem(partyId) {\r\n return this.httpService.post(urlConfig.deleteCartItem + '?restaurantId=' + this.restaurantWidgetId + '&PartyId=' + partyId);\r\n }\r\n\r\n addToCartItem(request) {\r\n return this.httpService.post(urlConfig.addToCart + '?restaurantId=' + this.restaurantWidgetId, request);\r\n }\r\n validateCart(request) {\r\n return this.httpService.post(urlConfig.validateCartCustomFields + '?propertyId=' + this.restaurantWidgetId, request);\r\n }\r\n\r\n validateCartItem(request) {\r\n return this.httpService.post(urlConfig.validateCartItem + '?propertyId=' + this.restaurantWidgetId, request);\r\n }\r\n bookSelectedCartItems(PartyIds: []) {\r\n return this.httpService.post(urlConfig.bookSelectedCartItems + '?restaurantId=' + this.restaurantWidgetId, PartyIds);\r\n }\r\n\r\n ReleaseLockSlot(restaurantId: Number, lockId: Number) {\r\n return this.httpService.post(`${urlConfig.releaseLock}?restaurantId=${restaurantId}&lockId=${lockId}`);\r\n }\r\n unlockSessionsUrl(lockId) {\r\n return this.httpService.post(`${urlConfig.unlockSessionsUrl}?restaurantId=${this.restaurantWidgetId}&lockId=${lockId}`);\r\n }\r\n\r\n LockCartSessionSlots(lockreq) {\r\n return this.httpService.post(`${urlConfig.LockCartSessionURL}?restaurantId=${this.restaurantWidgetId}`, lockreq);\r\n }\r\n\r\n UnlockCart(unlockList) {\r\n return this.httpService.post(`${urlConfig.UnlockCartSessionURL}?restaurantId=${this.restaurantWidgetId}`, unlockList);\r\n\r\n }\r\n\r\n releaseMultiple(lockId) {\r\n return this.httpService.post(`${urlConfig.releaseMultipleLocks}?restaurantId=${this.restaurantWidgetId}`, lockId);\r\n }\r\n\r\n getContactFromEngagebyCardno(cardNo) {\r\n return this.httpService.get(`${urlConfig.GetContactFromEngagebyCardnoURL}?restaurantId=${this.restaurantWidgetId}&cardNo=${cardNo}`)\r\n }\r\n\r\n lockTables(slots) {\r\n return this.httpService.post(`${urlConfig.lockTablesURL}?restaurantId=${this.restaurantWidgetId}`, slots)\r\n }\r\n getBackgroundImage(restaurantId: Number) {\r\n return this.httpService.get(`${urlConfig.backgroundImageUrl}?restaurantId=${restaurantId}`);\r\n }\r\n\r\n CreateSecondaryContacts(restaurantId: Number, partyId: Number, contactList) {\r\n return this.httpService.post(urlConfig.createSecondaryContacts + '?restaurantId=' + restaurantId + '&partyId=' + partyId, contactList).pipe(\r\n map((data: any) => data.Payload as Number)\r\n );\r\n }\r\n\r\n setLockIdsResponse(lockResponse, restaurantMerchantCode: string) {\r\n console.log(lockResponse);\r\n const slotIdObj: any = [];\r\n const cartLockObj = this.getSessionData('CartLockList_' + restaurantMerchantCode, true) ? this.getSessionData('CartLockList_' + restaurantMerchantCode, true) : [];\r\n const cartListObj = this.getSessionData('CartList_' + restaurantMerchantCode, true) ? this.getSessionData('CartList_' + restaurantMerchantCode, true) : [];\r\n\r\n cartLockObj.forEach((eachLock, index) => {\r\n let slotResultDto = this.findInnerArrayData(lockResponse, eachLock.CartId);\r\n eachLock.slotLockResp = {\r\n LockId: slotResultDto && slotResultDto?.SlotLockIdDTO?.Id ? slotResultDto?.SlotLockIdDTO?.Id : 0,\r\n PropertyId: eachLock.propertyId,\r\n BookingBehavior: 1\r\n };\r\n if (cartListObj[index].isDining) {\r\n cartListObj[index].TableId = slotResultDto && slotResultDto?.TableLockedDTO?.TableIds ? slotResultDto?.TableLockedDTO?.TableIds : [];\r\n } else if (cartListObj[index].isNonDining && slotResultDto?.TableLockedDTO?.TableIds) {\r\n cartListObj[index].TableId = cartListObj[index].TableIds = slotResultDto && slotResultDto?.TableLockedDTO?.TableIds ? slotResultDto?.TableLockedDTO?.TableIds : [];\r\n eachLock.TableId = eachLock.TableIds = slotResultDto && slotResultDto?.TableLockedDTO?.TableIds ? slotResultDto?.TableLockedDTO?.TableIds : [];\r\n } \r\n \r\n\r\n if(cartListObj[index].Sessions){\r\n cartListObj[index].Sessions.LockId = eachLock.slotLockResp?.LockId;\r\n }\r\n cartListObj[index].Slot = {\r\n Time: cartListObj[index].isDining ? cartListObj[index].LocalTime : (moment(eachLock.FromDate).format()).split('+')[0],\r\n LockId: slotResultDto && slotResultDto?.SlotLockIdDTO?.Id ? slotResultDto?.SlotLockIdDTO?.Id : 0,\r\n Type: cartListObj[index].isDining ? 4 : eachLock.AvailabilityCriteria\r\n };\r\n\r\n eachLock.isNonDining = cartListObj[index].isNonDining;\r\n slotIdObj.push(eachLock);\r\n });\r\n \r\n // let filteredItems = lockResponse ? [].concat.apply([], lockResponse).filter(x => Object.keys(x.SlotLockResultDTO || {}).length) : [];\r\n let filteredItems = lockResponse ? [].concat.apply([], lockResponse).filter(x=> x.SlotLockResultDTO && x.SlotLockResultDTO.SlotLockIdDTO) : [];\r\n if (filteredItems) {\r\n slotIdObj.forEach((item, index) => {\r\n let filteredObjects = filteredItems.filter(listObj => listObj.CartId == item.CartId)\r\n item.isAvailable = filteredObjects.length > 0 ? true : false;\r\n if (item.isNonDining) {\r\n item.Slots = this.setOpenBookingSlotLockIds(item, cartListObj, index, lockResponse);\r\n cartListObj[index].Slots = item.Slots;\r\n }\r\n });\r\n }\r\n this.setSessionData('CartLockList_' + restaurantMerchantCode, slotIdObj, true);\r\n this.setSessionData('CartList_' + restaurantMerchantCode, cartListObj, true);\r\n }\r\n\r\n findInnerArrayData(lockDetails: any[], Id: string) {\r\n let lockObject: any = null;\r\n lockDetails?.forEach(data => {\r\n lockObject = lockObject === null || lockObject === undefined ? data.find(x => { return x.CartId == Id }) : lockObject;\r\n });\r\n return lockObject && lockObject?.SlotLockResultDTO ? lockObject.SlotLockResultDTO : {};\r\n }\r\n\r\n findRegistrationAttemptArrayData(lockDetails: any[], Id: string ) {\r\n let lockObject: any = null;\r\n lockDetails?.forEach(data => {\r\n if (data.CartId === Id) {\r\n lockObject = lockObject === null || lockObject === undefined ? data : lockObject;\r\n }\r\n });\r\n return lockObject || {};\r\n }\r\n\r\n getSlotsForTable(locations, instructors, date, specialMealId?: any): Observable {\r\n return this.httpService.post(`${urlConfig.GetSlotsForTablesURL}?restaurantId=${this.restaurantWidgetId}&options=1`, {\r\n ActivityId: specialMealId ? specialMealId : null,\r\n TableIds: locations,\r\n InstructorIds: instructors,\r\n TimeRange: {\r\n Start: date + \"T00:00:00.000\",\r\n End: date + \"T23:59:59.999\"\r\n }\r\n });\r\n }\r\n\r\n lockMultiPropertySessionsfn(restaurantMerchantCode: string, fromCart = false) {\r\n const modifiedLockCart = this.formCartLockPayLoad(restaurantMerchantCode);\r\n this.startLoader();\r\n this.lockMultiPropertySessions(modifiedLockCart).subscribe(response => {\r\n this.stopLoader();\r\n this.lockMultipleResult = response.Payload; \r\n this.setLockIdsResponse(response.Payload, restaurantMerchantCode);\r\n this.operation === operationType.edit ? this.navigateToUrl('order-summary/edit/' + this.restaurantWidgetId) : this.navigateToUrl('order-summary',null,'',false,fromCart);\r\n });\r\n }\r\n\r\n runTimer(timerValue) {\r\n this.totalTime = timerValue;\r\n this.minutes = Math.floor(this.totalTime / 60);\r\n this.seconds = Number(this.totalTime % 60);\r\n this.timerSubscription = interval(1000 * 1).subscribe(() => {\r\n this.totalTime = this.totalTime - 1;\r\n this.minutes = Math.floor(this.totalTime / 60);\r\n this.seconds = Number(this.totalTime % 60);\r\n if (this.totalTime == 0) {\r\n this.UnSubscribeTimerAndRedirectToHome();\r\n }\r\n })\r\n }\r\n\r\n generateSlot(dateTime): SlotDTO {\r\n const slot: SlotDTO = {};\r\n slot.Id = 0;\r\n slot.IsWebReservable = true;\r\n slot.LimitedMinPartySize = 0;\r\n slot.LimitedMaxPartySize = 0;\r\n slot.ManualSlotType = 0;\r\n slot.OriginalMaxPartySize = 0;\r\n slot.OriginalMinPartySize = 0;\r\n slot.PartyId = null;\r\n slot.LockExpiresAt = null;\r\n slot.LockedAt = null;\r\n slot.SeatingAreaId = null;\r\n slot.Type = SlotType.Time;\r\n slot.UpdatedAt = null;\r\n const slotTime = Utilities.Date(dateTime);\r\n slot.DateTime = slotTime.format('YYYY-MM-DDTHH:mm:ss');\r\n return slot;\r\n }\r\n\r\n allocateTimeUnits(date, currentDate) {\r\n let timeDifference = date.diff(currentDate, 'milliseconds');\r\n let secondsToDday = Math.floor((timeDifference) / (1000) % 60);\r\n let minutesToDday = Math.floor((timeDifference) / (1000 * 60) % 60);\r\n let hoursToDday = Math.floor((timeDifference) / (1000 * 60 * 60) % 24);\r\n let daysToDday = Math.floor((timeDifference) / (1000 * 60 * 60 * 24));\r\n return (daysToDday > 0 ? daysToDday + (daysToDday === 1 ? (' ' + this.ts.instant('dayText') + ' ') : (' ' + this.ts.instant('daysText') + ' ')) : ' ') + \r\n (hoursToDday > 0 ? hoursToDday + (hoursToDday === 1 ? (' ' + this.ts.instant('hrText') + ' ') : (' ' + this.ts.instant('hrsText') + ' ')) : ' ') + \r\n (minutesToDday ? minutesToDday + (minutesToDday === 1 ? (' ' + this.ts.instant('min') + ' ') : (' ' + this.ts.instant('mins') + ' ')) : 'Currently Running');\r\n }\r\n\r\n setAdditionalGuest(noofguest?) {\r\n if (this.operation == operationType.create) {\r\n this.additionalGuestPage = this.restaurantWidgetSettings$.value.WidgetCustomization.AllowAdditionalGuestDetails;\r\n\r\n }\r\n this.additionalGuestRequired = noofguest ? noofguest - 1 : this.editPartyData$.value.Size - 1;\r\n }\r\n\r\n UnSubscribeTimerAndRedirectToHome() {\r\n this.offTimer();\r\n this.editPartyData = '';\r\n //have to check\r\n this.TabChange$.next(ActivityTabs.BookingSelection);\r\n // this.navigateToUrl('list');\r\n //Discard all form Details;\r\n }\r\n\r\n offTimer() {\r\n this.TimerOff$.next(false);\r\n this.showTimer = false;\r\n if (this.timerSubscription) {\r\n this.timerSubscription.unsubscribe();\r\n }\r\n }\r\n\r\n openSnackBar(msg, msgState, duration = 0, panelClass = '') {\r\n const horizontalPosition: MatSnackBarHorizontalPosition = 'center';\r\n const verticalPosition: MatSnackBarVerticalPosition = 'bottom';\r\n const snackConfiguration: any = {\r\n horizontalPosition,\r\n verticalPosition\r\n };\r\n\r\n if (panelClass) {\r\n snackConfiguration.panelClass = panelClass;\r\n }\r\n if (duration > 0) {\r\n snackConfiguration.duration = duration ? duration : 3000;\r\n }\r\n this.snackBar.open(msg, msgState, snackConfiguration);\r\n }\r\n\r\n setMessageState(msg, msgState) {\r\n this.message = {\r\n message: msg,\r\n state: msgState\r\n }\r\n }\r\n\r\n unlockCartURL(unlockCartList) {\r\n this.UnlockCart(unlockCartList).subscribe(data => {\r\n console.log(data);\r\n });\r\n }\r\n getCountryId(code) {\r\n if (code) {\r\n let countryId = this.countriesList.find(country => country.CountryPhoneCode == code)?.Id;\r\n return countryId ? countryId : this.countriesList.find(country => country.Name == \"USA\").Id;\r\n }\r\n }\r\n\r\n loadDefaultImage(event) {\r\n this.hideImage = true;\r\n }\r\n\r\n startLoader() {\r\n this.loaderRunning = true;\r\n this.loader.next(true);\r\n }\r\n\r\n stopLoader() {\r\n this.loaderRunning = false;\r\n this.loader.next(false);\r\n }\r\n\r\n startTimer() {\r\n this.timer.next(true);\r\n }\r\n\r\n stopTimer() {\r\n this.timer.next(false);\r\n }\r\n\r\n hideBackNav() {\r\n this.hideBackNavigation.next(true);\r\n }\r\n\r\n showBackNav() {\r\n this.hideBackNavigation.next(false);\r\n }\r\n\r\n backNavigation() {\r\n this.backNavigateURL.next({ URL: this.prevNavURL });\r\n }\r\n\r\n formCartLockPayLoad(restaurantMerchantCode: string) {\r\n const modifiedLockCart = [];\r\n const cartLockObj = this.getSessionData('CartLockList_' + restaurantMerchantCode, true) ? this.getSessionData('CartLockList_' + restaurantMerchantCode, true) : [];\r\n const cartListObj = this.getSessionData('CartList_' + restaurantMerchantCode, true) ? this.getSessionData('CartList_' + restaurantMerchantCode, true) : [];\r\n cartLockObj.forEach((eachCart, index) => {\r\n const { ActivityId, FromDate, Slots, GuestTypes, BookingTypes, Location, StaffId, BookingSize, SessionGroupId } = eachCart;\r\n const classType = eachCart.ClassType;\r\n const lockRequest = {\r\n ActivityId,\r\n StartDate: (moment(FromDate).format()).split('+')[0],\r\n BookingSize,\r\n ClassType: classType,\r\n lockIdToIgnore: eachCart.slotLockResp?.LockId,\r\n Sessions: classType === ClassType.Class || cartListObj[index].isNonDining ? [] : Slots,\r\n Slots: eachCart.LocalTime && !cartListObj[index].isNonDining ? [{\r\n LocalTime: eachCart.LocalTime\r\n }] : cartListObj[index].isNonDining ? cartListObj[index].Slots : [],\r\n SessionGroupId: classType === ClassType.Class ? SessionGroupId : null,\r\n ReservationIdToIgnore: this.editPartyData$.value?.Id || this.editData?.Id || null,\r\n PropertyId: eachCart.propertyId,\r\n PartySize: BookingSize,\r\n TableIds: eachCart.TableIds || cartListObj[index].TableIds || [],\r\n SeatingAreaId: eachCart.SeatingArea || eachCart.SeatingAreaId || null,\r\n SeatingTypeId: eachCart.SeatingType || eachCart.SeatingTypeId || null,\r\n LocalTime: eachCart.LocalTime,\r\n CartId: eachCart.CartId,\r\n AddOns: cartListObj[index].AddOns || Utilities.getSelectedAddOns(this.addOnList)\r\n } as LockSessionRequestDTO;\r\n\r\n if(!cartListObj[index].UserSelectedTable && cartListObj[index].isNonDining){\r\n lockRequest.TableIds = [];\r\n }\r\n modifiedLockCart.push(lockRequest);\r\n });\r\n return modifiedLockCart;\r\n }\r\n\r\n\r\n openCustomPopup(componentDetails: ComponentDetails, fromComponent: ComponentTypes, width?: string, height?: string,\r\n back?: boolean, title?: string, update?: string, cancel?: string, showAction?: boolean, maxWidth?: string,\r\n panelClass?: string, selectionView?: boolean, disabled?: boolean) {\r\n const dialogRef = this.dialog.open(PopupComponent, {\r\n disableClose: true,\r\n width,\r\n height,\r\n maxWidth,\r\n panelClass,\r\n minHeight: 100,\r\n data: {\r\n title,\r\n update,\r\n cancel,\r\n componentDetails,\r\n from: fromComponent,\r\n back,\r\n standalone: true,\r\n showAction,\r\n selectionView,\r\n disabled\r\n }\r\n });\r\n return dialogRef;\r\n }\r\n\r\n getCartCount() {\r\n this.cartCount = this.getSessionData('CartList_' + this.restaurantMerchantCode, true)?.length ? this.getSessionData('CartList_' + this.restaurantMerchantCode, true).length : 0;\r\n this.cartListCount.next(this.cartCount);\r\n return this.cartCount;\r\n }\r\n\r\n emptyCartData() {\r\n this.setSessionData('CartList_' + this.restaurantMerchantCode, [], true);\r\n this.setSessionData('CartLockList_' + this.restaurantMerchantCode, [], true);\r\n this.triggerCartUpdate();\r\n }\r\n\r\n triggerCartUpdate() {\r\n const crypto = window.crypto;\r\n const array = new Uint32Array(1);\r\n this.CartBookingList$.next(crypto.getRandomValues(array));\r\n }\r\n\r\n setSessionData(key: string, data: any, isObject = false) {\r\n sessionStorage.setItem(key, isObject ? JSON.stringify(data) : data);\r\n }\r\n\r\n getSessionData(key: string, isObject = false) {\r\n return isObject ? (sessionStorage.getItem(key) ? JSON.parse(sessionStorage.getItem(key)) : []) : sessionStorage.getItem(key);\r\n }\r\n\r\n getLanguageIdFromUrl(){\r\n const url = new URL(window.location.href);\r\n return url.searchParams.get('language');\r\n }\r\n\r\n setLanguageIdFromUrl(){\r\n let language = this.getLanguageIdFromUrl()\r\n if(language){\r\n this.language = Number(LanguageFileName[language.toLowerCase().toString()]);\r\n sessionStorage.setItem('languageId', this.language); \r\n }\r\n }\r\n\r\n setWidgetSettings(setting) {\r\n let settings = {\r\n FilterByVenue: setting.FilterByVenue,\r\n PropertiesEnabled: setting.PropertiesEnabled,\r\n ActivityViewType: setting.ActivityViewType, // 0, 1, 2\r\n ViewActivityInfo: setting.ViewActivityInfo,\r\n IsMembershipFilterEnabled: setting.IsMembershipFilterEnabled,\r\n AllowLocationSelectionForActivity: setting.AllowLocationSelectionForActivity,\r\n AllowInstructorSelectionForActivity: setting.AllowInstructorSelectionForActivity,\r\n HeaderText: setting.HeaderText,\r\n IsWidgetHeaderEnabled: setting.IsWidgetHeaderEnabled,\r\n IsWidgetFooterEnabled: setting.IsWidgetFooterEnabled,\r\n MerchantId: setting.MerchantId,\r\n MerchantCode: this.restaurantMerchantCode,\r\n DefaultMobileCountryCode: setting.PropertyWidgetSettings[0].Country || \"USA\", // Getting the first restaurant detail by default as API provides as array of restaurants\r\n Languages: setting.Languages,\r\n IsMultiLanguageSelectionEnabled: setting.IsMultiLanguageSelectionEnabled,\r\n NumberOfFractionalDigits: setting.NumberOfFractionalDigits,\r\n DisplayModifyButton: setting.DisplayModifyButton,\r\n DisplayCancelButton: setting.DisplayCancelButton,\r\n DisableCustomTermsAndConditions: setting.DisableCustomTermsAndConditions || false,\r\n // RestaurantDetails: setting.PropertyWidgetSettings\r\n }\r\n this.numberOfFractionalDigits = settings.NumberOfFractionalDigits;\r\n this.widgetConfigurations.next(settings);\r\n this.setSessionData('rGuestActivitesWidgetSettings_' + this.restaurantMerchantCode, settings, true);\r\n }\r\n\r\n setOpenBookingSlotLockIds(cartLockObj: any, cartObj:any, index: number, lockResponseArr: any[]){\r\n const matchedLockResponseObj = lockResponseArr[0]?.find(x => x.CartId == cartLockObj.CartId)?.SlotLockResultDTO?.SlotLockIdDTO;\r\n return cartObj[index].Slots.map(x => {\r\n return {\r\n LocalTime: x.LocalTime,\r\n Time: x.LocalTime,\r\n LockId: matchedLockResponseObj?.Id,\r\n DurationInMinutes: x.DurationInMinutes, \r\n Type: 4,\r\n Duration: x.DurationInMinutes, \r\n }\r\n }); \r\n }\r\n\r\n checkLanguageAvailabilityOption(){\r\n const browserUrl = window.location.pathname;\r\n const pathList = browserUrl.split(\"/\");\r\n if(browserUrl.includes('/activities/list/') || browserUrl.includes('/online/')){\r\n this.showLanguageOption = true\r\n }\r\n else{\r\n this.showLanguageOption = false;\r\n }\r\n }\r\n\r\n\r\n \r\n getLanguageConstant(merchantId, restaurantId, screenType?){\r\n this.GetLanguageConstants(merchantId).subscribe(data =>{\r\n this.setLanguageConstant(data.Payload,restaurantId,screenType)\r\n })\r\n}\r\n\r\n\r\nGetLanguageConstants(merchantId){\r\n return this.httpService.get(`${urlConfig.getLanguageConstants}?merchantId=${merchantId}&languageId=${this.selectedLanguageId}`);\r\n}\r\n\r\n setLanguageConstant(lngConstants,restaurantId,screenType?){\r\n this.languageConstants =[];\r\n if(screenType)\r\n lngConstants = lngConstants.filter(cnst => cnst.ScreenType == screenType);\r\n else\r\n lngConstants = lngConstants.filter(cnst => cnst.RestaurantId == restaurantId && cnst.ScreenType != ScreenType.MerchantSetting);\r\n lngConstants.forEach(lngConst => {\r\n this.languageConstants[lngConst.LanguageKey] = JSON.parse(lngConst.LanguageValue);\r\n })\r\n \r\n }\r\n\r\n loadLanguageData(data){\r\n this.languageFileChanges.subscribe(langChged =>{\r\n if (langChged && data) {\r\n var currentURL = new URL(window.location.href);\r\n if (currentURL.searchParams.has('language')) {\r\n window.location.href = window.location.origin + window.location.pathname + '?language=' + (langChged ? langChged : data);;\r\n } else {\r\n window.location.reload();\r\n // this.getLanguageConstant(data.MerchantId, data.RestaurantId);\r\n }\r\n }\r\n })\r\n\r\n }\r\n\r\n findLocale(languageId){\r\n if(this.availableLanguages && this.availableLanguages.length){\r\n let locale = this.availableLanguages.find(lang => lang.Id == languageId)?.Code;\r\n if(chineseLanguageCodes.includes(locale)){\r\n return 'zh-cn';\r\n }\r\n return locale;\r\n }\r\n return DEFAULT_LANGUAGE_CODE;\r\n}\r\n\r\nresetConfigBasedStyles(){\r\n this.mealWithConfig = null;\r\n document.body.classList.remove('spl-meal-config');\r\n this.hideBackNavigation.next(false);\r\n this.loadPropertyBannerImage(); \r\n}\r\n\r\nbannerImageHandler(multiRegPayload) {\r\n if (multiRegPayload?.length && _.uniqBy(multiRegPayload, 'SpecialMealId')?.length == 1) {\r\n let cart = _.uniqBy(multiRegPayload, 'SpecialMealId')[0];\r\n let property = this.widgetSettings?.PropertyWidgetSettings?.find(f => f.RestaurantId == cart.PropertyId || f.RestaurantId == cart.RestaurantId);\r\n let meal = property?.AvailableSpecialMeals?.find(f => f.Id == cart.SpecialMealId);\r\n if (meal && !meal.ShowOtherActivities) {\r\n this.loadSpecialMealImage(meal);\r\n } else {\r\n this.loadPropertyBannerImage();\r\n }\r\n } else {\r\n this.loadPropertyBannerImage();\r\n }\r\n}\r\n\r\nloadPropertyBannerImage(){\r\n if(document.querySelector('.special-meal-banner')){\r\n document.querySelector('.special-meal-banner').remove();\r\n let container = document.getElementsByClassName('banner-image');\r\n container[0].classList.add('d-block');\r\n container[0].classList.remove('d-none');\r\n }\r\n}\r\n\r\nloadSpecialMealImage(meal){\r\n document.body.classList.add('spl-meal-config');\r\n document.body.classList.add('spl-meal_'+ meal.Id);\r\n if(meal.BannerImageUrl && meal.BannerImageUrl != '' && !document.querySelector('.special-meal-banner')){\r\n let container = document.getElementsByClassName('banner-image');\r\n container[0].classList.remove('d-block')\r\n container[0].classList.add('d-none');\r\n this.loadBannerImage(meal);\r\n }\r\n}\r\n\r\nloadConfigBasedStyles(meal) {\r\n this.hideBackNavigation.next(true);\r\n this.loadSpecialMealImage(meal)\r\n\r\n}\r\n\r\nloadBannerImage(meal) {\r\n let img = document.createElement('img');\r\n img.classList.add('special-meal-banner');\r\n img.src = meal?.BannerImageUrl;\r\n if(img.src){\r\n let container = document.getElementsByClassName('undernav-image');\r\n container[0].appendChild(img);\r\n }\r\n}\r\n\r\n}\r\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { catchError, map } from 'rxjs/operators';\r\nimport { throwError } from 'rxjs';\r\nimport { DEFAULT_LANGUAGE_ID } from '../constants/commonenums';\r\n const httpOptions = {\r\n headers: new HttpHeaders({ 'Content-Type': 'application/json', 'x-ts-client-uid': localStorage.getItem(\"ClientUid\") ? localStorage.getItem(\"ClientUid\") : '', 'Language-Id': (sessionStorage.getItem('languageId') || DEFAULT_LANGUAGE_ID).toString() })\r\n};\r\n\r\nconst httpOptionsImage = {\r\n headers: new HttpHeaders({ responseType: 'text'})\r\n};\r\n@Injectable({\r\n providedIn: 'root'\r\n}\r\n)\r\nexport class HttpService {\r\n\r\n constructor(public http: HttpClient) {\r\n }\r\n\r\n get(path: string,forImage?:boolean): Observable {\r\n if(forImage)\r\n {\r\n return this.http.get(`${path}`, {responseType: 'text'}).pipe(map(response => response)); \r\n }\r\n else\r\n {\r\n return this.http.get(`${path}`, httpOptions).pipe(map(response => response));\r\n }\r\n }\r\n\r\n put(path: string, body: Object = {}): Observable {\r\n return this.http.put(`${path}`,\r\n body,\r\n httpOptions\r\n ).pipe(map(response => response), catchError(this.handleError));\r\n }\r\n\r\n post(path: string, body: Object = {}): Observable {\r\n return this.http.post(`${path}`,\r\n body,\r\n httpOptions\r\n ).pipe(map(response => response));\r\n }\r\n\r\n delete(path): Observable {\r\n return this.http.delete(`${path}`, httpOptions\r\n ).pipe(map(response => response));\r\n }\r\n\r\n handleError(error: any) {\r\n let errMsg = (error.message) ? error.message :\r\n error.status ? `${error.status} - ${error.statusText}` : \"Server errorsssss\";\r\n console.error(errMsg);\r\n return throwError(errMsg);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { LayoutService } from 'src/app/layout/layout.service';\r\nimport { Language, LanguageCode, LanguageFileName } from '../Models/WidgetSettingsModels';\r\nimport { GuestService } from './guest.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LocalizeService {\r\n\r\n constructor(public translateService: TranslateService,\r\n public ls: LayoutService, private guestService: GuestService) { }\r\n\r\n public setLanguage(language: string, propertyType, literalsFolder?) {\r\n\r\n\r\n let translationPath = '';\r\n if (language) {\r\n let property = literalsFolder ? literalsFolder : window.location.href.split(\"/\")[5];\r\n translationPath = 'customLiterals/' + property + '/' + language.toLowerCase();\r\n let customLiteralsPathAvailable = false;\r\n this.translateService.use(translationPath).subscribe(res => {\r\n customLiteralsPathAvailable = true\r\n this.setTranslatePath(translationPath, language, propertyType, language);\r\n }, err => {\r\n if (!customLiteralsPathAvailable) {\r\n // language = LanguageFileName[(language)];\r\n translationPath = this.getFallbackLangPath(language, propertyType);\r\n this.setTranslatePath(translationPath, language, propertyType, language);\r\n }\r\n })\r\n }\r\n else{\r\n language = LanguageFileName[Number(LanguageFileName.english)];\r\n translationPath = this.getFallbackLangPath(language, propertyType);\r\n\r\n this.setTranslatePath(translationPath, language, propertyType, language);\r\n }\r\n\r\n }\r\n\r\n private setTranslatePath(path, language, propertyType, fallbackLang) {\r\n \r\n this.translateService.use(path).subscribe(res => {\r\n language = language?.toLowerCase()\r\n this.ls.language = Number(LanguageFileName[language]);\r\n sessionStorage.setItem('languageId', LanguageFileName[language]);\r\n sessionStorage.setItem('languageCode', LanguageCode[language]);\r\n }, err => {\r\n if(fallbackLang){\r\n this.setTranslatePath(this.getFallbackLangPath(fallbackLang,propertyType), language, propertyType, null);\r\n }else if(propertyType){\r\n this.setTranslatePath(this.getFallbackLangPath(LanguageFileName[Number(LanguageFileName.english)],propertyType), language, null, null);\r\n }\r\n });\r\n }\r\n\r\n private getFallbackLangPath(language: string, propertyType): string{\r\n this.ls.language = LanguageFileName[language] || LanguageFileName.english;\r\n return propertyType + '/' + language.toLowerCase();\r\n }\r\n}","import { Injectable, Output, EventEmitter, OnDestroy, InjectionToken, Directive } from '@angular/core';\r\nimport { BehaviorSubject, Subject } from 'rxjs';\r\nimport { WidgetSettingsDTO } from '../Models/WidgetSettingsModels';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class PopupService {\r\n actionEnabled$: Subject = new Subject();\r\n cancelEnabled$: Subject = new Subject();\r\n actiondisabled$: Subject = new Subject();\r\n restaurantWidgetSettings$ = new BehaviorSubject(null);\r\n}\r\n","import { isDevMode } from '@angular/core';\n\n/**\n * @copyright Valor Software\n * @copyright Angular ng-bootstrap team\n */\nclass Trigger {\n constructor(open, close) {\n this.open = open;\n this.close = close || open;\n }\n isManual() {\n return this.open === 'manual' || this.close === 'manual';\n }\n}\n\nconst DEFAULT_ALIASES = {\n hover: ['mouseover', 'mouseout'],\n focus: ['focusin', 'focusout']\n};\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction parseTriggers(triggers, aliases = DEFAULT_ALIASES) {\n const trimmedTriggers = (triggers || '').trim();\n if (trimmedTriggers.length === 0) {\n return [];\n }\n const parsedTriggers = trimmedTriggers\n .split(/\\s+/)\n .map((trigger) => trigger.split(':'))\n .map((triggerPair) => {\n const alias = aliases[triggerPair[0]] || triggerPair;\n return new Trigger(alias[0], alias[1]);\n });\n const manualTriggers = parsedTriggers.filter((triggerPair) => triggerPair.isManual());\n if (manualTriggers.length > 1) {\n throw new Error('Triggers parse error: only one manual trigger is allowed');\n }\n if (manualTriggers.length === 1 && parsedTriggers.length > 1) {\n throw new Error('Triggers parse error: manual trigger can\\'t be mixed with other triggers');\n }\n return parsedTriggers;\n}\nfunction listenToTriggers(renderer, \n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntarget, triggers, showFn, hideFn, toggleFn) {\n const parsedTriggers = parseTriggers(triggers);\n const listeners = [];\n if (parsedTriggers.length === 1 && parsedTriggers[0].isManual()) {\n return Function.prototype;\n }\n parsedTriggers.forEach((trigger) => {\n if (trigger.open === trigger.close) {\n listeners.push(renderer.listen(target, trigger.open, toggleFn));\n return;\n }\n listeners.push(renderer.listen(target, trigger.open, showFn));\n if (trigger.close) {\n listeners.push(renderer.listen(target, trigger.close, hideFn));\n }\n });\n return () => {\n listeners.forEach((unsubscribeFn) => unsubscribeFn());\n };\n}\nfunction listenToTriggersV2(renderer, options) {\n const parsedTriggers = parseTriggers(options.triggers);\n const target = options.target;\n // do nothing\n if (parsedTriggers.length === 1 && parsedTriggers[0].isManual()) {\n return Function.prototype;\n }\n // all listeners\n const listeners = [];\n // lazy listeners registration\n const _registerHide = [];\n const registerHide = () => {\n // add hide listeners to unregister array\n _registerHide.forEach((fn) => listeners.push(fn()));\n // register hide events only once\n _registerHide.length = 0;\n };\n // register open\\close\\toggle listeners\n parsedTriggers.forEach((trigger) => {\n const useToggle = trigger.open === trigger.close;\n const showFn = useToggle ? options.toggle : options.show;\n if (!useToggle && trigger.close && options.hide) {\n const _hide = renderer.listen(target, trigger.close, options.hide);\n _registerHide.push(() => _hide);\n }\n if (showFn) {\n listeners.push(renderer.listen(target, trigger.open, () => showFn(registerHide)));\n }\n });\n return () => {\n listeners.forEach((unsubscribeFn) => unsubscribeFn());\n };\n}\nfunction registerOutsideClick(renderer, options) {\n if (!options.outsideClick) {\n return Function.prototype;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return renderer.listen('document', 'click', (event) => {\n if (options.target && options.target.contains(event.target)) {\n return;\n }\n if (options.targets &&\n options.targets.some(target => target.contains(event.target))) {\n return;\n }\n if (options.hide) {\n options.hide();\n }\n });\n}\nfunction registerEscClick(renderer, options) {\n if (!options.outsideEsc) {\n return Function.prototype;\n }\n return renderer.listen('document', 'keyup.esc', (event) => {\n if (options.target && options.target.contains(event.target)) {\n return;\n }\n if (options.targets &&\n options.targets.some(target => target.contains(event.target))) {\n return;\n }\n if (options.hide) {\n options.hide();\n }\n });\n}\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * JS version of browser APIs. This library can only run in the browser.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst win = (typeof window !== 'undefined' && window) || {};\nconst document = win.document;\nconst location = win.location;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst gc = win.gc ? () => win.gc() : () => null;\nconst performance = win.performance ? win.performance : null;\nconst Event = win.Event;\nconst MouseEvent = win.MouseEvent;\nconst KeyboardEvent = win.KeyboardEvent;\nconst EventTarget = win.EventTarget;\nconst History = win.History;\nconst Location = win.Location;\nconst EventListener = win.EventListener;\n\nvar BsVerions;\n(function (BsVerions) {\n BsVerions[\"isBs3\"] = \"bs3\";\n BsVerions[\"isBs4\"] = \"bs4\";\n BsVerions[\"isBs5\"] = \"bs5\";\n})(BsVerions || (BsVerions = {}));\nlet guessedVersion;\nfunction _guessBsVersion() {\n if (typeof win.document === 'undefined') {\n return 'bs4';\n }\n const spanEl = win.document.createElement('span');\n spanEl.innerText = 'testing bs version';\n spanEl.classList.add('d-none');\n spanEl.classList.add('pl-1');\n win.document.head.appendChild(spanEl);\n const rect = spanEl.getBoundingClientRect();\n const checkPadding = win.getComputedStyle(spanEl).paddingLeft;\n if (!rect || (rect && rect.top !== 0)) {\n win.document.head.removeChild(spanEl);\n return 'bs3';\n }\n if (checkPadding && parseFloat(checkPadding)) {\n win.document.head.removeChild(spanEl);\n return 'bs4';\n }\n win.document.head.removeChild(spanEl);\n return 'bs5';\n}\nfunction setTheme(theme) {\n guessedVersion = theme;\n}\n// todo: in ngx-bootstrap, bs4 will became a default one\nfunction isBs3() {\n if (typeof win === 'undefined') {\n return true;\n }\n if (typeof win.__theme === 'undefined') {\n if (guessedVersion) {\n return guessedVersion === 'bs3';\n }\n guessedVersion = _guessBsVersion();\n return guessedVersion === 'bs3';\n }\n return win.__theme === 'bs3';\n}\nfunction isBs4() {\n if (isBs3())\n return false;\n if (guessedVersion)\n return guessedVersion === 'bs4';\n guessedVersion = _guessBsVersion();\n return guessedVersion === 'bs4';\n}\nfunction isBs5() {\n if (isBs3() || isBs4())\n return false;\n if (guessedVersion)\n return guessedVersion === 'bs5';\n guessedVersion = _guessBsVersion();\n return guessedVersion === 'bs5';\n}\nfunction getBsVer() {\n return {\n isBs3: isBs3(),\n isBs4: isBs4(),\n isBs5: isBs5()\n };\n}\nfunction currentBsVersion() {\n const bsVer = getBsVer();\n const resVersion = Object.keys(bsVer).find(key => bsVer[key]);\n return BsVerions[resVersion];\n}\n\nclass LinkedList {\n constructor() {\n this.length = 0;\n this.asArray = [];\n // Array methods overriding END\n }\n get(position) {\n if (this.length === 0 || position < 0 || position >= this.length) {\n return void 0;\n }\n let current = this.head;\n for (let index = 0; index < position; index++) {\n current = current === null || current === void 0 ? void 0 : current.next;\n }\n return current === null || current === void 0 ? void 0 : current.value;\n }\n add(value, position = this.length) {\n if (position < 0 || position > this.length) {\n throw new Error('Position is out of the list');\n }\n const node = {\n value,\n next: undefined,\n previous: undefined\n };\n if (this.length === 0) {\n this.head = node;\n this.tail = node;\n this.current = node;\n }\n else {\n if (position === 0 && this.head) {\n // first node\n node.next = this.head;\n this.head.previous = node;\n this.head = node;\n }\n else if (position === this.length && this.tail) {\n // last node\n this.tail.next = node;\n node.previous = this.tail;\n this.tail = node;\n }\n else {\n // node in middle\n const currentPreviousNode = this.getNode(position - 1);\n const currentNextNode = currentPreviousNode === null || currentPreviousNode === void 0 ? void 0 : currentPreviousNode.next;\n if (currentPreviousNode && currentNextNode) {\n currentPreviousNode.next = node;\n currentNextNode.previous = node;\n node.previous = currentPreviousNode;\n node.next = currentNextNode;\n }\n }\n }\n this.length++;\n this.createInternalArrayRepresentation();\n }\n remove(position = 0) {\n var _a;\n if (this.length === 0 || position < 0 || position >= this.length) {\n throw new Error('Position is out of the list');\n }\n if (position === 0 && this.head) {\n // first node\n this.head = this.head.next;\n if (this.head) {\n // there is no second node\n this.head.previous = undefined;\n }\n else {\n // there is no second node\n this.tail = undefined;\n }\n }\n else if (position === this.length - 1 && ((_a = this.tail) === null || _a === void 0 ? void 0 : _a.previous)) {\n // last node\n this.tail = this.tail.previous;\n this.tail.next = undefined;\n }\n else {\n // middle node\n const removedNode = this.getNode(position);\n if ((removedNode === null || removedNode === void 0 ? void 0 : removedNode.next) && removedNode.previous) {\n removedNode.next.previous = removedNode.previous;\n removedNode.previous.next = removedNode.next;\n }\n }\n this.length--;\n this.createInternalArrayRepresentation();\n }\n set(position, value) {\n if (this.length === 0 || position < 0 || position >= this.length) {\n throw new Error('Position is out of the list');\n }\n const node = this.getNode(position);\n if (node) {\n node.value = value;\n this.createInternalArrayRepresentation();\n }\n }\n toArray() {\n return this.asArray;\n }\n findAll(fn) {\n let current = this.head;\n const result = [];\n if (!current) {\n return result;\n }\n for (let index = 0; index < this.length; index++) {\n if (!current) {\n return result;\n }\n if (fn(current.value, index)) {\n result.push({ index, value: current.value });\n }\n current = current.next;\n }\n return result;\n }\n // Array methods overriding start\n push(...args) {\n args.forEach((arg) => {\n this.add(arg);\n });\n return this.length;\n }\n pop() {\n if (this.length === 0) {\n return undefined;\n }\n const last = this.tail;\n this.remove(this.length - 1);\n return last === null || last === void 0 ? void 0 : last.value;\n }\n unshift(...args) {\n args.reverse();\n args.forEach((arg) => {\n this.add(arg, 0);\n });\n return this.length;\n }\n shift() {\n var _a;\n if (this.length === 0) {\n return undefined;\n }\n const lastItem = (_a = this.head) === null || _a === void 0 ? void 0 : _a.value;\n this.remove();\n return lastItem;\n }\n forEach(fn) {\n let current = this.head;\n for (let index = 0; index < this.length; index++) {\n if (!current) {\n return;\n }\n fn(current.value, index);\n current = current.next;\n }\n }\n indexOf(value) {\n let current = this.head;\n let position = -1;\n for (let index = 0; index < this.length; index++) {\n if (!current) {\n return position;\n }\n if (current.value === value) {\n position = index;\n break;\n }\n current = current.next;\n }\n return position;\n }\n some(fn) {\n let current = this.head;\n let result = false;\n while (current && !result) {\n if (fn(current.value)) {\n result = true;\n break;\n }\n current = current.next;\n }\n return result;\n }\n every(fn) {\n let current = this.head;\n let result = true;\n while (current && result) {\n if (!fn(current.value)) {\n result = false;\n }\n current = current.next;\n }\n return result;\n }\n toString() {\n return '[Linked List]';\n }\n find(fn) {\n let current = this.head;\n for (let index = 0; index < this.length; index++) {\n if (!current) {\n return;\n }\n if (fn(current.value, index)) {\n return current.value;\n }\n current = current.next;\n }\n }\n findIndex(fn) {\n let current = this.head;\n for (let index = 0; index < this.length; index++) {\n if (!current) {\n return -1;\n }\n if (fn(current.value, index)) {\n return index;\n }\n current = current.next;\n }\n return -1;\n }\n getNode(position) {\n if (this.length === 0 || position < 0 || position >= this.length) {\n throw new Error('Position is out of the list');\n }\n let current = this.head;\n for (let index = 0; index < position; index++) {\n current = current === null || current === void 0 ? void 0 : current.next;\n }\n return current;\n }\n createInternalArrayRepresentation() {\n const outArray = [];\n let current = this.head;\n while (current) {\n outArray.push(current.value);\n current = current.next;\n }\n this.asArray = outArray;\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction OnChange() {\n const sufix = 'Change';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return function OnChangeHandler(target, propertyKey) {\n const _key = ` __${propertyKey}Value`;\n Object.defineProperty(target, propertyKey, {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n get() {\n return this[_key];\n },\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n set(value) {\n const prevValue = this[_key];\n this[_key] = value;\n if (prevValue !== value && this[propertyKey + sufix]) {\n this[propertyKey + sufix].emit(value);\n }\n }\n });\n };\n}\n\nclass Utils {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n static reflow(element) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ((bs) => bs)(element.offsetHeight);\n }\n // source: https://github.com/jquery/jquery/blob/master/src/css/var/getStyles.js\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n static getStyles(elem) {\n // Support: IE <=11 only, Firefox <=30 (#15098, #14150)\n // IE throws on elements created in popups\n // FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n let view = elem.ownerDocument.defaultView;\n if (!view || !view.opener) {\n view = win;\n }\n return view.getComputedStyle(elem);\n }\n static stackOverflowConfig() {\n const bsVer = currentBsVersion();\n return {\n crossorigin: bsVer !== 'bs3' ? \"anonymous\" : undefined,\n integrity: bsVer === 'bs5' ? 'sha384-KyZXEAg3QhqLMpG8r+8fhAXLRk2vvoC2f3B09zVXn8CA5QIVfZOJ3BCsw2P0p/We' : bsVer === 'bs4' ? 'sha384-TX8t27EcRE3e/ihU7zmQxVncDAy5uIKz4rEkgIXeMed4M0jlfIDPvg6uqKI2xXr2' : undefined,\n cdnLink: bsVer === 'bs5' ? 'https://cdn.jsdelivr.net/npm/bootstrap@5.1.0/dist/css/bootstrap.min.css' : bsVer === 'bs4' ? 'https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/css/bootstrap.min.css' : 'https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css',\n };\n }\n}\n\nconst _messagesHash = {};\nconst _hideMsg = typeof console === 'undefined' || !('warn' in console);\nfunction warnOnce(msg) {\n if (!isDevMode() || _hideMsg || msg in _messagesHash) {\n return;\n }\n _messagesHash[msg] = true;\n console.warn(msg);\n}\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { BsVerions, LinkedList, OnChange, Trigger, Utils, currentBsVersion, document, getBsVer, isBs3, listenToTriggers, listenToTriggersV2, parseTriggers, registerEscClick, registerOutsideClick, setTheme, warnOnce, win as window };\n","import { getBsVer } from 'ngx-bootstrap/utils';\nimport * as i0 from '@angular/core';\nimport { PLATFORM_ID, Injectable, Inject, ElementRef } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { Subject, merge, fromEvent, of, animationFrameScheduler } from 'rxjs';\n\nvar MapPlacementInToRL;\n(function (MapPlacementInToRL) {\n MapPlacementInToRL[\"top\"] = \"top\";\n MapPlacementInToRL[\"bottom\"] = \"bottom\";\n MapPlacementInToRL[\"left\"] = \"left\";\n MapPlacementInToRL[\"right\"] = \"right\";\n MapPlacementInToRL[\"auto\"] = \"auto\";\n MapPlacementInToRL[\"end\"] = \"right\";\n MapPlacementInToRL[\"start\"] = \"left\";\n MapPlacementInToRL[\"top left\"] = \"top left\";\n MapPlacementInToRL[\"top right\"] = \"top right\";\n MapPlacementInToRL[\"right top\"] = \"right top\";\n MapPlacementInToRL[\"right bottom\"] = \"right bottom\";\n MapPlacementInToRL[\"bottom right\"] = \"bottom right\";\n MapPlacementInToRL[\"bottom left\"] = \"bottom left\";\n MapPlacementInToRL[\"left bottom\"] = \"left bottom\";\n MapPlacementInToRL[\"left top\"] = \"left top\";\n MapPlacementInToRL[\"top start\"] = \"top left\";\n MapPlacementInToRL[\"top end\"] = \"top right\";\n MapPlacementInToRL[\"end top\"] = \"right top\";\n MapPlacementInToRL[\"end bottom\"] = \"right bottom\";\n MapPlacementInToRL[\"bottom end\"] = \"bottom right\";\n MapPlacementInToRL[\"bottom start\"] = \"bottom left\";\n MapPlacementInToRL[\"start bottom\"] = \"start bottom\";\n MapPlacementInToRL[\"start top\"] = \"left top\";\n})(MapPlacementInToRL || (MapPlacementInToRL = {}));\nvar PlacementForBs5;\n(function (PlacementForBs5) {\n PlacementForBs5[\"top\"] = \"top\";\n PlacementForBs5[\"bottom\"] = \"bottom\";\n PlacementForBs5[\"left\"] = \"start\";\n PlacementForBs5[\"right\"] = \"end\";\n PlacementForBs5[\"auto\"] = \"auto\";\n PlacementForBs5[\"end\"] = \"end\";\n PlacementForBs5[\"start\"] = \"start\";\n PlacementForBs5[\"top left\"] = \"top start\";\n PlacementForBs5[\"top right\"] = \"top end\";\n PlacementForBs5[\"right top\"] = \"end top\";\n PlacementForBs5[\"right bottom\"] = \"end bottom\";\n PlacementForBs5[\"bottom right\"] = \"bottom end\";\n PlacementForBs5[\"bottom left\"] = \"bottom start\";\n PlacementForBs5[\"left bottom\"] = \"start bottom\";\n PlacementForBs5[\"left top\"] = \"start top\";\n PlacementForBs5[\"top start\"] = \"top start\";\n PlacementForBs5[\"top end\"] = \"top end\";\n PlacementForBs5[\"end top\"] = \"end top\";\n PlacementForBs5[\"end bottom\"] = \"end bottom\";\n PlacementForBs5[\"bottom end\"] = \"bottom end\";\n PlacementForBs5[\"bottom start\"] = \"bottom start\";\n PlacementForBs5[\"start bottom\"] = \"start bottom\";\n PlacementForBs5[\"start top\"] = \"start top\";\n})(PlacementForBs5 || (PlacementForBs5 = {}));\n\nfunction getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n const window = element.ownerDocument.defaultView;\n const css = window === null || window === void 0 ? void 0 : window.getComputedStyle(element, null);\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return property ? css && css[property] : css;\n}\n\n/**\n * Returns the offset parent of the given element\n */\nfunction getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n const noOffsetParent = null;\n // NOTE: 1 DOM access here\n let offsetParent = element === null || element === void 0 ? void 0 : element.offsetParent;\n // Skip hidden elements which don't have an offsetParent\n let sibling = void 0;\n while (offsetParent === noOffsetParent\n && element.nextElementSibling\n && sibling !== element.nextElementSibling) {\n // todo: valorkin fix\n sibling = element.nextElementSibling;\n offsetParent = sibling.offsetParent;\n }\n const nodeName = offsetParent && offsetParent.nodeName;\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return sibling ? sibling.ownerDocument.documentElement : document.documentElement;\n }\n // .offsetParent will return the closest TH, TD or TABLE in case\n if (offsetParent &&\n ['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 &&\n getStyleComputedProperty(offsetParent, 'position') === 'static') {\n return getOffsetParent(offsetParent);\n }\n return offsetParent;\n}\n\n// todo: valorkin fix\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction isOffsetContainer(element) {\n const { nodeName } = element;\n if (nodeName === 'BODY') {\n return false;\n }\n return (nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element);\n}\n\n/**\n * Finds the root node (document, shadowDOM root) of the given element\n */\nfunction getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n return node;\n}\n\n/**\n * Finds the offset parent common to the two provided nodes\n */\nfunction findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n }\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n const order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;\n const start = order ? element1 : element2;\n const end = order ? element2 : element1;\n // Get common ancestor container\n const range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n // todo: valorkin fix\n const commonAncestorContainer = range.commonAncestorContainer;\n // Both nodes are inside #document\n if ((element1 !== commonAncestorContainer &&\n element2 !== commonAncestorContainer) ||\n start.contains(end)) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n return getOffsetParent(commonAncestorContainer);\n }\n // one of the nodes is inside shadowDOM, find which one\n const element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n }\n else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n\n/**\n * Finds the first parent of an element that has a transformed property defined\n */\nfunction getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement) {\n return document.documentElement;\n }\n let el = element.parentElement;\n while ((el === null || el === void 0 ? void 0 : el.parentElement) && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n}\n\n/**\n * Helper to detect borders of a given element\n */\nfunction getBordersSize(styles, axis) {\n const sideA = axis === 'x' ? 'Left' : 'Top';\n const sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n return (parseFloat(styles[`border${sideA}Width`]) +\n parseFloat(styles[`border${sideB}Width`]));\n}\n\nfunction getSize(axis, body, html, computedStyle) {\n const _body = body;\n const _html = html;\n const _computedStyle = computedStyle;\n return Math.max(_body[`offset${axis}`], _body[`scroll${axis}`], _html[`client${axis}`], _html[`offset${axis}`], _html[`scroll${axis}`], 0);\n}\nfunction getWindowSizes(document) {\n const body = document.body;\n const html = document.documentElement;\n const computedStyle = void 0;\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle)\n };\n}\n\nfunction getClientRect(offsets) {\n return Object.assign(Object.assign({}, offsets), { right: (offsets.left || 0) + offsets.width, bottom: (offsets.top || 0) + offsets.height });\n}\n\n/**\n * Tells if a given input is a number\n */\nfunction isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(Number(n));\n}\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction isNumber(value) {\n return typeof value === 'number' || Object.prototype.toString.call(value) === '[object Number]';\n}\n\n/**\n * Get bounding client rect of given element\n */\nfunction getBoundingClientRect(element) {\n const rect = element.getBoundingClientRect();\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n // try {\n // if (isIE(10)) {\n // const scrollTop = getScroll(element, 'top');\n // const scrollLeft = getScroll(element, 'left');\n // if (rect && isNumber(rect.top) && isNumber(rect.left) && isNumber(rect.bottom) && isNumber(rect.right)) {\n // rect.top += scrollTop;\n // rect.left += scrollLeft;\n // rect.bottom += scrollTop;\n // rect.right += scrollLeft;\n // }\n // }\n // } catch (e) {\n // return rect;\n // }\n if (!(rect && isNumber(rect.top) && isNumber(rect.left) && isNumber(rect.bottom) && isNumber(rect.right))) {\n return rect;\n }\n const result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top\n };\n // subtract scrollbar size from sizes\n const sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : undefined;\n const width = (sizes === null || sizes === void 0 ? void 0 : sizes.width) || element.clientWidth\n || isNumber(rect.right) && isNumber(result.left) && rect.right - result.left || 0;\n const height = (sizes === null || sizes === void 0 ? void 0 : sizes.height) || element.clientHeight\n || isNumber(rect.bottom) && isNumber(result.top) && rect.bottom - result.top || 0;\n let horizScrollbar = element.offsetWidth - width;\n let vertScrollbar = element.offsetHeight - height;\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n const styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n return getClientRect(result);\n}\n\n/**\n * Returns the parentNode or the host of the element\n */\n// todo: valorkin fix\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n\n/**\n * Returns the scrolling parent of the given element\n */\n// todo: valorkin fix\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element) {\n return document.body;\n }\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return element.ownerDocument.body;\n case '#document':\n return element.body;\n default:\n }\n // Firefox want us to check `-x` and `-y` variations as well\n const { overflow, overflowX, overflowY } = getStyleComputedProperty(element);\n if (/(auto|scroll|overlay)/.test(String(overflow) + String(overflowY) + String(overflowX))) {\n return element;\n }\n return getScrollParent(getParentNode(element));\n}\n\nfunction getOffsetRectRelativeToArbitraryNode(children, parent, fixedPosition = false) {\n var _a, _b, _c, _d, _e, _f;\n const isHTML = parent.nodeName === 'HTML';\n const childrenRect = getBoundingClientRect(children);\n const parentRect = getBoundingClientRect(parent);\n const scrollParent = getScrollParent(children);\n const styles = getStyleComputedProperty(parent);\n const borderTopWidth = parseFloat(styles.borderTopWidth);\n const borderLeftWidth = parseFloat(styles.borderLeftWidth);\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if (fixedPosition && isHTML) {\n parentRect.top = Math.max((_a = parentRect.top) !== null && _a !== void 0 ? _a : 0, 0);\n parentRect.left = Math.max((_b = parentRect.left) !== null && _b !== void 0 ? _b : 0, 0);\n }\n const offsets = getClientRect({\n top: ((_c = childrenRect.top) !== null && _c !== void 0 ? _c : 0) - ((_d = parentRect.top) !== null && _d !== void 0 ? _d : 0) - borderTopWidth,\n left: ((_e = childrenRect.left) !== null && _e !== void 0 ? _e : 0) - ((_f = parentRect.left) !== null && _f !== void 0 ? _f : 0) - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0;\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (isHTML) {\n const marginTop = parseFloat(styles.marginTop);\n const marginLeft = parseFloat(styles.marginLeft);\n if (isNumber(offsets.top)) {\n offsets.top -= borderTopWidth - marginTop;\n }\n if (isNumber(offsets.bottom)) {\n offsets.bottom -= borderTopWidth - marginTop;\n }\n if (isNumber(offsets.left)) {\n offsets.left -= borderLeftWidth - marginLeft;\n }\n if (isNumber(offsets.right)) {\n offsets.right -= borderLeftWidth - marginLeft;\n }\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n return offsets;\n}\n\n/**\n * Gets the scroll value of the given element in the given side (top and left)\n */\nfunction getScroll(element, side = 'top') {\n const upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n const nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n const html = element.ownerDocument.documentElement;\n const scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n return element[upperSide];\n}\n\nfunction getViewportOffsetRectRelativeToArtbitraryNode(element, excludeScroll = false) {\n const html = element.ownerDocument.documentElement;\n const relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n const width = Math.max(html.clientWidth, window.innerWidth || 0);\n const height = Math.max(html.clientHeight, window.innerHeight || 0);\n const scrollTop = !excludeScroll ? getScroll(html) : 0;\n const scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n const offset = {\n top: scrollTop - Number(relativeOffset === null || relativeOffset === void 0 ? void 0 : relativeOffset.top) + Number(relativeOffset === null || relativeOffset === void 0 ? void 0 : relativeOffset.marginTop),\n left: scrollLeft - Number(relativeOffset === null || relativeOffset === void 0 ? void 0 : relativeOffset.left) + Number(relativeOffset === null || relativeOffset === void 0 ? void 0 : relativeOffset.marginLeft),\n width,\n height\n };\n return getClientRect(offset);\n}\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n */\nfunction isFixed(element) {\n const nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n return isFixed(getParentNode(element));\n}\n\nfunction getBoundaries(target, host, padding = 0, boundariesElement, fixedPosition = false) {\n // NOTE: 1 DOM access here\n let boundaries = { top: 0, left: 0 };\n const offsetParent = fixedPosition ? getFixedPositionOffsetParent(target) : findCommonOffsetParent(target, host);\n // Handle viewport case\n if (boundariesElement === 'viewport') {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n }\n else {\n // Handle other cases based on DOM element used as boundaries\n let boundariesNode;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(host));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = target.ownerDocument.documentElement;\n }\n }\n else if (boundariesElement === 'window') {\n boundariesNode = target.ownerDocument.documentElement;\n }\n else {\n boundariesNode = boundariesElement;\n }\n const offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);\n // In case of HTML, we need a different computation\n if (offsets && boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n const { height, width } = getWindowSizes(target.ownerDocument);\n if (isNumber(boundaries.top) && isNumber(offsets.top) && isNumber(offsets.marginTop)) {\n boundaries.top += offsets.top - offsets.marginTop;\n }\n if (isNumber(boundaries.top)) {\n boundaries.bottom = Number(height) + Number(offsets.top);\n }\n if (isNumber(boundaries.left) && isNumber(offsets.left) && isNumber(offsets.marginLeft)) {\n boundaries.left += offsets.left - offsets.marginLeft;\n }\n if (isNumber(boundaries.top)) {\n boundaries.right = Number(width) + Number(offsets.left);\n }\n }\n else if (offsets) {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n // Add paddings\n if (isNumber(boundaries.left)) {\n boundaries.left += padding;\n }\n if (isNumber(boundaries.top)) {\n boundaries.top += padding;\n }\n if (isNumber(boundaries.right)) {\n boundaries.right -= padding;\n }\n if (isNumber(boundaries.bottom)) {\n boundaries.bottom -= padding;\n }\n return boundaries;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n */\nfunction getArea({ width, height }) {\n return width * height;\n}\nfunction computeAutoPlacement(placement, refRect, target, host, allowedPositions = ['top', 'bottom', 'right', 'left'], boundariesElement = 'viewport', padding = 0) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n const boundaries = getBoundaries(target, host, padding, boundariesElement);\n const rects = {\n top: {\n width: (_a = boundaries === null || boundaries === void 0 ? void 0 : boundaries.width) !== null && _a !== void 0 ? _a : 0,\n height: ((_b = refRect === null || refRect === void 0 ? void 0 : refRect.top) !== null && _b !== void 0 ? _b : 0) - ((_c = boundaries === null || boundaries === void 0 ? void 0 : boundaries.top) !== null && _c !== void 0 ? _c : 0)\n },\n right: {\n width: ((_d = boundaries === null || boundaries === void 0 ? void 0 : boundaries.right) !== null && _d !== void 0 ? _d : 0) - ((_e = refRect === null || refRect === void 0 ? void 0 : refRect.right) !== null && _e !== void 0 ? _e : 0),\n height: (_f = boundaries === null || boundaries === void 0 ? void 0 : boundaries.height) !== null && _f !== void 0 ? _f : 0\n },\n bottom: {\n width: (_g = boundaries === null || boundaries === void 0 ? void 0 : boundaries.width) !== null && _g !== void 0 ? _g : 0,\n height: ((_h = boundaries === null || boundaries === void 0 ? void 0 : boundaries.bottom) !== null && _h !== void 0 ? _h : 0) - ((_j = refRect === null || refRect === void 0 ? void 0 : refRect.bottom) !== null && _j !== void 0 ? _j : 0)\n },\n left: {\n width: ((_k = refRect.left) !== null && _k !== void 0 ? _k : 0) - ((_l = boundaries === null || boundaries === void 0 ? void 0 : boundaries.left) !== null && _l !== void 0 ? _l : 0),\n height: (_m = boundaries === null || boundaries === void 0 ? void 0 : boundaries.height) !== null && _m !== void 0 ? _m : 0\n }\n };\n const sortedAreas = Object.keys(rects)\n .map((key) => (Object.assign(Object.assign({ position: key }, rects[key]), { area: getArea(rects[key]) })))\n .sort((a, b) => b.area - a.area);\n let filteredAreas = sortedAreas.filter(({ width, height }) => {\n return width >= target.clientWidth && height >= target.clientHeight;\n });\n filteredAreas = filteredAreas.filter(({ position }) => {\n return allowedPositions.some((allowedPosition) => {\n return allowedPosition === position;\n });\n });\n const computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].position : sortedAreas[0].position;\n const variation = placement.split(' ')[1];\n // for tooltip on auto position\n target.className = target.className.replace(/bs-tooltip-auto/g, `bs-tooltip-${getBsVer().isBs5 ? PlacementForBs5[computedPlacement] : computedPlacement}`);\n return computedPlacement + (variation ? `-${variation}` : '');\n}\n\nfunction getOffsets(data) {\n var _a, _b, _c, _d;\n return {\n width: data.offsets.target.width,\n height: data.offsets.target.height,\n left: Math.floor((_a = data.offsets.target.left) !== null && _a !== void 0 ? _a : 0),\n top: Math.round((_b = data.offsets.target.top) !== null && _b !== void 0 ? _b : 0),\n bottom: Math.round((_c = data.offsets.target.bottom) !== null && _c !== void 0 ? _c : 0),\n right: Math.floor((_d = data.offsets.target.right) !== null && _d !== void 0 ? _d : 0)\n };\n}\n\n/**\n * Get the opposite placement of the given one\n */\nfunction getOppositePlacement(placement) {\n const hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, matched => hash[matched]);\n}\n\n/**\n * Get the opposite placement variation of the given one\n */\nfunction getOppositeVariation(variation) {\n if (variation === 'right') {\n return 'left';\n }\n else if (variation === 'left') {\n return 'right';\n }\n return variation;\n}\n\nconst parse = (value, def = 0) => value ? parseFloat(value) : def;\nfunction getOuterSizes(element) {\n const window = element.ownerDocument.defaultView;\n const styles = window === null || window === void 0 ? void 0 : window.getComputedStyle(element);\n const x = parse(styles === null || styles === void 0 ? void 0 : styles.marginTop) + parse(styles === null || styles === void 0 ? void 0 : styles.marginBottom);\n const y = parse(styles === null || styles === void 0 ? void 0 : styles.marginLeft) + parse(styles === null || styles === void 0 ? void 0 : styles.marginRight);\n return {\n width: Number(element.offsetWidth) + y,\n height: Number(element.offsetHeight) + x\n };\n}\n\n/**\n * Get offsets to the reference element\n */\nfunction getReferenceOffsets(target, host, fixedPosition) {\n const commonOffsetParent = fixedPosition\n ? getFixedPositionOffsetParent(target)\n : findCommonOffsetParent(target, host);\n return getOffsetRectRelativeToArbitraryNode(host, commonOffsetParent, fixedPosition);\n}\n\n/**\n * Get offsets to the target\n */\nfunction getTargetOffsets(target, hostOffsets, position) {\n var _a, _b, _c;\n const placement = position.split(' ')[0];\n // Get target node sizes\n const targetRect = getOuterSizes(target);\n // Add position, width and height to our offsets object\n const targetOffsets = {\n width: targetRect.width,\n height: targetRect.height\n };\n // depending by the target placement we have to compute its offsets slightly differently\n const isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n const mainSide = isHoriz ? 'top' : 'left';\n const secondarySide = isHoriz ? 'left' : 'top';\n const measurement = isHoriz ? 'height' : 'width';\n const secondaryMeasurement = !isHoriz ? 'height' : 'width';\n targetOffsets[mainSide] =\n ((_a = hostOffsets[mainSide]) !== null && _a !== void 0 ? _a : 0) +\n hostOffsets[measurement] / 2 -\n targetRect[measurement] / 2;\n targetOffsets[secondarySide] = placement === secondarySide\n ? ((_b = hostOffsets[secondarySide]) !== null && _b !== void 0 ? _b : 0) - targetRect[secondaryMeasurement]\n : (_c = hostOffsets[getOppositePlacement(secondarySide)]) !== null && _c !== void 0 ? _c : 0;\n return targetOffsets;\n}\n\nfunction isModifierEnabled(options, modifierName) {\n var _a;\n return !!((_a = options.modifiers[modifierName]) === null || _a === void 0 ? void 0 : _a.enabled);\n}\n\nconst availablePositions = {\n top: ['top', 'top start', 'top end'],\n bottom: ['bottom', 'bottom start', 'bottom end'],\n start: ['start', 'start top', 'start bottom'],\n end: ['end', 'end top', 'end bottom']\n};\nfunction checkPopoverMargin(placement, checkPosition) {\n if (!getBsVer().isBs5) {\n return false;\n }\n return availablePositions[checkPosition].includes(placement);\n}\nfunction checkMargins(placement) {\n if (!getBsVer().isBs5) {\n return '';\n }\n if (checkPopoverMargin(placement, 'end')) {\n return 'ms-2';\n }\n if (checkPopoverMargin(placement, 'start')) {\n return 'me-2';\n }\n if (checkPopoverMargin(placement, 'top')) {\n return 'mb-2';\n }\n if (checkPopoverMargin(placement, 'bottom')) {\n return 'mt-2';\n }\n return '';\n}\n\nfunction updateContainerClass(data, renderer) {\n const target = data.instance.target;\n let containerClass = target.className;\n const dataPlacement = getBsVer().isBs5 ? PlacementForBs5[data.placement] : data.placement;\n if (data.placementAuto) {\n containerClass = containerClass.replace(/bs-popover-auto/g, `bs-popover-${dataPlacement}`);\n containerClass = containerClass.replace(/ms-2|me-2|mb-2|mt-2/g, '');\n containerClass = containerClass.replace(/bs-tooltip-auto/g, `bs-tooltip-${dataPlacement}`);\n containerClass = containerClass.replace(/\\sauto/g, ` ${dataPlacement}`);\n if (containerClass.indexOf('popover') !== -1) {\n containerClass = containerClass + ' ' + checkMargins(dataPlacement);\n }\n if (containerClass.indexOf('popover') !== -1 && containerClass.indexOf('popover-auto') === -1) {\n containerClass += ' popover-auto';\n }\n if (containerClass.indexOf('tooltip') !== -1 && containerClass.indexOf('tooltip-auto') === -1) {\n containerClass += ' tooltip-auto';\n }\n }\n containerClass = containerClass.replace(/left|right|top|bottom|end|start/g, `${dataPlacement.split(' ')[0]}`);\n if (renderer) {\n renderer.setAttribute(target, 'class', containerClass);\n return;\n }\n target.className = containerClass;\n}\n\nfunction setStyles(element, styles, renderer) {\n if (!element || !styles) {\n return;\n }\n Object.keys(styles).forEach((prop) => {\n let unit = '';\n // add unit if the value is numeric and is one of the following\n if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 &&\n isNumeric(styles[prop])) {\n unit = 'px';\n }\n if (renderer) {\n renderer.setStyle(element, prop, `${String(styles[prop])}${unit}`);\n return;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n element.style[prop] = String(styles[prop]) + unit;\n });\n}\n\nfunction arrow(data) {\n var _a, _b, _c, _d, _e, _f;\n let targetOffsets = data.offsets.target;\n // if arrowElement is a string, suppose it's a CSS selector\n const arrowElement = data.instance.target.querySelector('.arrow');\n // if arrowElement is not found, don't run the modifier\n if (!arrowElement) {\n return data;\n }\n const isVertical = ['left', 'right'].indexOf(data.placement.split(' ')[0]) !== -1;\n const len = isVertical ? 'height' : 'width';\n const sideCapitalized = isVertical ? 'Top' : 'Left';\n const side = sideCapitalized.toLowerCase();\n const altSide = isVertical ? 'left' : 'top';\n const opSide = isVertical ? 'bottom' : 'right';\n const arrowElementSize = getOuterSizes(arrowElement)[len];\n const placementVariation = data.placement.split(' ')[1];\n // top/left side\n if (((_a = data.offsets.host[opSide]) !== null && _a !== void 0 ? _a : 0) - arrowElementSize < ((_b = targetOffsets[side]) !== null && _b !== void 0 ? _b : 0)) {\n (targetOffsets)[side] -=\n ((_c = targetOffsets[side]) !== null && _c !== void 0 ? _c : 0) - (((_d = data.offsets.host[opSide]) !== null && _d !== void 0 ? _d : 0) - arrowElementSize);\n }\n // bottom/right side\n if (Number((data).offsets.host[side]) + Number(arrowElementSize) > ((_e = targetOffsets[opSide]) !== null && _e !== void 0 ? _e : 0)) {\n (targetOffsets)[side] +=\n Number((data).offsets.host[side]) + Number(arrowElementSize) - Number((targetOffsets)[opSide]);\n }\n targetOffsets = getClientRect(targetOffsets);\n // Compute the sideValue using the updated target offsets\n // take target margin in account because we don't have this info available\n const css = getStyleComputedProperty(data.instance.target);\n const targetMarginSide = parseFloat(css[`margin${sideCapitalized}`]) || 0;\n const targetBorderSide = parseFloat(css[`border${sideCapitalized}Width`]) || 0;\n // compute center of the target\n let center;\n if (!placementVariation) {\n center = Number((data).offsets.host[side]) + Number(data.offsets.host[len] / 2 - arrowElementSize / 2);\n }\n else {\n const targetBorderRadius = parseFloat(css[\"borderRadius\"]) || 0;\n const targetSideArrowOffset = Number(targetMarginSide + targetBorderSide + targetBorderRadius);\n center = side === placementVariation ?\n Number((data).offsets.host[side]) + targetSideArrowOffset :\n Number((data).offsets.host[side]) + Number(data.offsets.host[len] - targetSideArrowOffset);\n }\n let sideValue = center - ((_f = targetOffsets[side]) !== null && _f !== void 0 ? _f : 0) - targetMarginSide - targetBorderSide;\n // prevent arrowElement from being placed not contiguously to its target\n sideValue = Math.max(Math.min(targetOffsets[len] - (arrowElementSize + 5), sideValue), 0);\n data.offsets.arrow = {\n [side]: Math.round(sideValue),\n [altSide]: '' // make sure to unset any eventual altSide value from the DOM node\n };\n data.instance.arrow = arrowElement;\n return data;\n}\n\nfunction flip(data) {\n data.offsets.target = getClientRect(data.offsets.target);\n if (!isModifierEnabled(data.options, 'flip')) {\n data.offsets.target = Object.assign(Object.assign({}, data.offsets.target), getTargetOffsets(data.instance.target, data.offsets.host, data.placement));\n return data;\n }\n const boundaries = getBoundaries(data.instance.target, data.instance.host, 0, // padding\n 'viewport', false // positionFixed\n );\n let placement = data.placement.split(' ')[0];\n let variation = data.placement.split(' ')[1] || '';\n const offsetsHost = data.offsets.host;\n const target = data.instance.target;\n const host = data.instance.host;\n const adaptivePosition = computeAutoPlacement('auto', offsetsHost, target, host, data.options.allowedPositions);\n const flipOrder = [placement, adaptivePosition];\n flipOrder.forEach((step, index) => {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r;\n if (placement !== step || flipOrder.length === index + 1) {\n return;\n }\n placement = data.placement.split(' ')[0];\n // using floor because the host offsets may contain decimals we are not going to consider here\n const overlapsRef = (placement === 'left' &&\n Math.floor((_a = data.offsets.target.right) !== null && _a !== void 0 ? _a : 0) > Math.floor((_b = data.offsets.host.left) !== null && _b !== void 0 ? _b : 0)) ||\n (placement === 'right' &&\n Math.floor((_c = data.offsets.target.left) !== null && _c !== void 0 ? _c : 0) < Math.floor((_d = data.offsets.host.right) !== null && _d !== void 0 ? _d : 0)) ||\n (placement === 'top' &&\n Math.floor((_e = data.offsets.target.bottom) !== null && _e !== void 0 ? _e : 0) > Math.floor((_f = data.offsets.host.top) !== null && _f !== void 0 ? _f : 0)) ||\n (placement === 'bottom' &&\n Math.floor((_g = data.offsets.target.top) !== null && _g !== void 0 ? _g : 0) < Math.floor((_h = data.offsets.host.bottom) !== null && _h !== void 0 ? _h : 0));\n const overflowsLeft = Math.floor((_j = data.offsets.target.left) !== null && _j !== void 0 ? _j : 0) < Math.floor((_k = boundaries.left) !== null && _k !== void 0 ? _k : 0);\n const overflowsRight = Math.floor((_l = data.offsets.target.right) !== null && _l !== void 0 ? _l : 0) > Math.floor((_m = boundaries.right) !== null && _m !== void 0 ? _m : 0);\n const overflowsTop = Math.floor((_o = data.offsets.target.top) !== null && _o !== void 0 ? _o : 0) < Math.floor((_p = boundaries.top) !== null && _p !== void 0 ? _p : 0);\n const overflowsBottom = Math.floor((_q = data.offsets.target.bottom) !== null && _q !== void 0 ? _q : 0) > Math.floor((_r = boundaries.bottom) !== null && _r !== void 0 ? _r : 0);\n const overflowsBoundaries = (placement === 'left' && overflowsLeft) ||\n (placement === 'right' && overflowsRight) ||\n (placement === 'top' && overflowsTop) ||\n (placement === 'bottom' && overflowsBottom);\n // flip the variation if required\n const isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n const flippedVariation = ((isVertical && variation === 'left' && overflowsLeft) ||\n (isVertical && variation === 'right' && overflowsRight) ||\n (!isVertical && variation === 'left' && overflowsTop) ||\n (!isVertical && variation === 'right' && overflowsBottom));\n if (overlapsRef || overflowsBoundaries || flippedVariation) {\n if (overlapsRef || overflowsBoundaries) {\n placement = flipOrder[index + 1];\n }\n if (flippedVariation) {\n variation = getOppositeVariation(variation);\n }\n data.placement = placement + (variation ? ` ${variation}` : '');\n data.offsets.target = Object.assign(Object.assign({}, data.offsets.target), getTargetOffsets(data.instance.target, data.offsets.host, data.placement));\n }\n });\n return data;\n}\n\nfunction initData(targetElement, hostElement, position, options) {\n if (!targetElement || !hostElement) {\n return;\n }\n const hostElPosition = getReferenceOffsets(targetElement, hostElement);\n if (!position.match(/^(auto)*\\s*(left|right|top|bottom|start|end)*$/)\n && !position.match(/^(left|right|top|bottom|start|end)*(?: (left|right|top|bottom|start|end))*$/)) {\n position = 'auto';\n }\n const placementAuto = !!position.match(/auto/g);\n // support old placements 'auto left|right|top|bottom'\n let placement = position.match(/auto\\s(left|right|top|bottom|start|end)/)\n ? position.split(' ')[1] || 'auto'\n : position;\n // Normalize placements that have identical main placement and variation (\"right right\" => \"right\").\n const matches = placement.match(/^(left|right|top|bottom|start|end)* ?(?!\\1)(left|right|top|bottom|start|end)?/);\n if (matches) {\n placement = matches[1] + (matches[2] ? ` ${matches[2]}` : '');\n }\n // \"left right\", \"top bottom\" etc. placements also considered incorrect.\n if (['left right', 'right left', 'top bottom', 'bottom top'].indexOf(placement) !== -1) {\n placement = 'auto';\n }\n placement = computeAutoPlacement(placement, hostElPosition, targetElement, hostElement, options ? options.allowedPositions : undefined);\n const targetOffset = getTargetOffsets(targetElement, hostElPosition, placement);\n return {\n options: options || { modifiers: {} },\n instance: {\n target: targetElement,\n host: hostElement,\n arrow: void 0\n },\n offsets: {\n target: targetOffset,\n host: hostElPosition,\n arrow: void 0\n },\n positionFixed: false,\n placement,\n placementAuto\n };\n}\n\nfunction preventOverflow(data) {\n var _a;\n if (!isModifierEnabled(data.options, 'preventOverflow')) {\n return data;\n }\n // NOTE: DOM access here\n // resets the target Offsets's position so that the document size can be calculated excluding\n // the size of the targetOffsets element itself\n const transformProp = 'transform';\n const targetStyles = data.instance.target.style; // assignment to help minification\n const { top, left, [transformProp]: transform } = targetStyles;\n targetStyles.top = '';\n targetStyles.left = '';\n targetStyles[transformProp] = '';\n const boundaries = getBoundaries(data.instance.target, data.instance.host, 0, // padding\n ((_a = data.options.modifiers.preventOverflow) === null || _a === void 0 ? void 0 : _a.boundariesElement) || 'scrollParent', false // positionFixed\n );\n // NOTE: DOM access here\n // restores the original style properties after the offsets have been computed\n targetStyles.top = top;\n targetStyles.left = left;\n targetStyles[transformProp] = transform;\n const order = ['left', 'right', 'top', 'bottom'];\n const check = {\n primary(placement) {\n var _a, _b, _c, _d;\n let value = data.offsets.target[placement];\n // options.escapeWithReference\n if (((_a = data.offsets.target[placement]) !== null && _a !== void 0 ? _a : 0) < ((_b = boundaries[placement]) !== null && _b !== void 0 ? _b : 0)) {\n value = Math.max((_c = data.offsets.target[placement]) !== null && _c !== void 0 ? _c : 0, (_d = boundaries[placement]) !== null && _d !== void 0 ? _d : 0);\n }\n return { [placement]: value };\n },\n secondary(placement) {\n var _a, _b, _c, _d;\n const isPlacementHorizontal = placement === 'right';\n const mainSide = isPlacementHorizontal ? 'left' : 'top';\n const measurement = isPlacementHorizontal ? 'width' : 'height';\n let value = data.offsets.target[mainSide];\n // escapeWithReference\n if (((_a = data.offsets.target[placement]) !== null && _a !== void 0 ? _a : 0) > ((_b = boundaries[placement]) !== null && _b !== void 0 ? _b : 0)) {\n value = Math.min((_c = data.offsets.target[mainSide]) !== null && _c !== void 0 ? _c : 0, ((_d = boundaries[placement]) !== null && _d !== void 0 ? _d : 0) - data.offsets.target[measurement]);\n }\n return { [mainSide]: value };\n }\n };\n order.forEach((placement) => {\n const side = ['left', 'top', 'start'].indexOf(placement) !== -1 ? check['primary'] : check['secondary'];\n data.offsets.target = Object.assign(Object.assign({}, data.offsets.target), side(placement));\n });\n return data;\n}\n\nfunction shift(data) {\n var _a;\n const placement = data.placement;\n const basePlacement = placement.split(' ')[0];\n const shiftVariation = placement.split(' ')[1];\n if (shiftVariation) {\n const { host, target } = data.offsets;\n const isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n const side = isVertical ? 'left' : 'top';\n const measurement = isVertical ? 'width' : 'height';\n const shiftOffsets = {\n start: { [side]: host[side] },\n end: {\n [side]: ((_a = host[side]) !== null && _a !== void 0 ? _a : 0) + host[measurement] - target[measurement]\n }\n };\n data.offsets.target = Object.assign(Object.assign({}, target), {\n [side]: (side === shiftVariation ? shiftOffsets.start[side] : shiftOffsets.end[side])\n });\n }\n return data;\n}\n\nclass Positioning {\n position(hostElement, targetElement /*, round = true*/) {\n return this.offset(hostElement, targetElement /*, false*/);\n }\n offset(hostElement, targetElement /*, round = true*/) {\n return getReferenceOffsets(targetElement, hostElement);\n }\n positionElements(hostElement, targetElement, position, appendToBody, options) {\n const chainOfModifiers = [flip, shift, preventOverflow, arrow];\n const _position = MapPlacementInToRL[position];\n const data = initData(targetElement, hostElement, _position, options);\n if (!data) {\n return;\n }\n return chainOfModifiers.reduce((modifiedData, modifier) => modifier(modifiedData), data);\n }\n}\nconst positionService = new Positioning();\nfunction positionElements(hostElement, targetElement, placement, appendToBody, options, renderer) {\n const data = positionService.positionElements(hostElement, targetElement, placement, appendToBody, options);\n if (!data) {\n return;\n }\n const offsets = getOffsets(data);\n setStyles(targetElement, {\n 'will-change': 'transform',\n top: '0px',\n left: '0px',\n transform: `translate3d(${offsets.left}px, ${offsets.top}px, 0px)`\n }, renderer);\n if (data.instance.arrow) {\n setStyles(data.instance.arrow, data.offsets.arrow, renderer);\n }\n updateContainerClass(data, renderer);\n}\n\nclass PositioningService {\n constructor(ngZone, rendererFactory, platformId) {\n this.update$$ = new Subject();\n this.positionElements = new Map();\n this.isDisabled = false;\n if (isPlatformBrowser(platformId)) {\n ngZone.runOutsideAngular(() => {\n this.triggerEvent$ = merge(fromEvent(window, 'scroll', { passive: true }), fromEvent(window, 'resize', { passive: true }), of(0, animationFrameScheduler), this.update$$);\n this.triggerEvent$.subscribe(() => {\n if (this.isDisabled) {\n return;\n }\n this.positionElements\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .forEach((positionElement) => {\n positionElements(_getHtmlElement(positionElement.target), _getHtmlElement(positionElement.element), positionElement.attachment, positionElement.appendToBody, this.options, rendererFactory.createRenderer(null, null));\n });\n });\n });\n }\n }\n position(options) {\n this.addPositionElement(options);\n }\n get event$() {\n return this.triggerEvent$;\n }\n disable() {\n this.isDisabled = true;\n }\n enable() {\n this.isDisabled = false;\n }\n addPositionElement(options) {\n this.positionElements.set(_getHtmlElement(options.element), options);\n }\n calcPosition() {\n this.update$$.next(null);\n }\n deletePositionElement(elRef) {\n this.positionElements.delete(_getHtmlElement(elRef));\n }\n setOptions(options) {\n this.options = options;\n }\n}\nPositioningService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.1.1\", ngImport: i0, type: PositioningService, deps: [{ token: i0.NgZone }, { token: i0.RendererFactory2 }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Injectable });\nPositioningService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"13.1.1\", ngImport: i0, type: PositioningService, providedIn: 'root' });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.1.1\", ngImport: i0, type: PositioningService, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], ctorParameters: function () {\n return [{ type: i0.NgZone }, { type: i0.RendererFactory2 }, { type: undefined, decorators: [{\n type: Inject,\n args: [PLATFORM_ID]\n }] }];\n } });\nfunction _getHtmlElement(element) {\n // it means that we got a selector\n if (typeof element === 'string') {\n return document.querySelector(element);\n }\n if (element instanceof ElementRef) {\n return element.nativeElement;\n }\n return element !== null && element !== void 0 ? element : null;\n}\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { PlacementForBs5, Positioning, PositioningService, checkMargins, positionElements };\n","import * as i0 from '@angular/core';\nimport { EventEmitter, Injector, ElementRef, TemplateRef, Injectable } from '@angular/core';\nimport { listenToTriggersV2, registerOutsideClick, registerEscClick } from 'ngx-bootstrap/utils';\nimport * as i1 from 'ngx-bootstrap/positioning';\n\nclass BsComponentRef {\n}\n\n/**\n * @copyright Valor Software\n * @copyright Angular ng-bootstrap team\n */\nclass ContentRef {\n constructor(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n nodes, viewRef, \n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n componentRef) {\n this.nodes = nodes;\n this.viewRef = viewRef;\n this.componentRef = componentRef;\n }\n}\n\n// todo: add delay support\nclass ComponentLoader {\n /**\n * Do not use this directly, it should be instanced via\n * `ComponentLoadFactory.attach`\n * @internal\n */\n constructor(_viewContainerRef, _renderer, _elementRef, _injector, _componentFactoryResolver, _ngZone, _applicationRef, _posService) {\n this._viewContainerRef = _viewContainerRef;\n this._renderer = _renderer;\n this._elementRef = _elementRef;\n this._injector = _injector;\n this._componentFactoryResolver = _componentFactoryResolver;\n this._ngZone = _ngZone;\n this._applicationRef = _applicationRef;\n this._posService = _posService;\n this.onBeforeShow = new EventEmitter();\n this.onShown = new EventEmitter();\n this.onBeforeHide = new EventEmitter();\n this.onHidden = new EventEmitter();\n this._providers = [];\n this._isHiding = false;\n /**\n * A selector used if container element was not found\n */\n this.containerDefaultSelector = 'body';\n this._listenOpts = {};\n this._globalListener = Function.prototype;\n }\n get isShown() {\n if (this._isHiding) {\n return false;\n }\n return !!this._componentRef;\n }\n attach(compType) {\n this._componentFactory = this._componentFactoryResolver\n .resolveComponentFactory(compType);\n return this;\n }\n // todo: add behaviour: to target element, `body`, custom element\n to(container) {\n this.container = container || this.container;\n return this;\n }\n position(opts) {\n if (!opts) {\n return this;\n }\n this.attachment = opts.attachment || this.attachment;\n this._elementRef = opts.target || this._elementRef;\n return this;\n }\n provide(provider) {\n this._providers.push(provider);\n return this;\n }\n // todo: appendChild to element or document.querySelector(this.container)\n show(opts = {}) {\n this._subscribePositioning();\n this._innerComponent = void 0;\n if (!this._componentRef) {\n this.onBeforeShow.emit();\n this._contentRef = this._getContentRef(opts.content, opts.context, opts.initialState);\n const injector = Injector.create({\n providers: this._providers,\n parent: this._injector\n });\n if (!this._componentFactory) {\n return;\n }\n this._componentRef = this._componentFactory.create(injector, this._contentRef.nodes);\n this._applicationRef.attachView(this._componentRef.hostView);\n // this._componentRef = this._viewContainerRef\n // .createComponent(this._componentFactory, 0, injector, this._contentRef.nodes);\n this.instance = this._componentRef.instance;\n Object.assign(this._componentRef.instance, opts);\n if (this.container instanceof ElementRef) {\n this.container.nativeElement.appendChild(this._componentRef.location.nativeElement);\n }\n if (typeof this.container === 'string' && typeof document !== 'undefined') {\n const selectedElement = document.querySelector(this.container) ||\n document.querySelector(this.containerDefaultSelector);\n if (!selectedElement) {\n return;\n }\n selectedElement.appendChild(this._componentRef.location.nativeElement);\n }\n if (!this.container &&\n this._elementRef &&\n this._elementRef.nativeElement.parentElement) {\n this._elementRef.nativeElement.parentElement.appendChild(this._componentRef.location.nativeElement);\n }\n // we need to manually invoke change detection since events registered\n // via\n // Renderer::listen() are not picked up by change detection with the\n // OnPush strategy\n if (this._contentRef.componentRef) {\n this._innerComponent = this._contentRef.componentRef.instance;\n this._contentRef.componentRef.changeDetectorRef.markForCheck();\n this._contentRef.componentRef.changeDetectorRef.detectChanges();\n }\n this._componentRef.changeDetectorRef.markForCheck();\n this._componentRef.changeDetectorRef.detectChanges();\n this.onShown.emit(opts.id ? { id: opts.id } : this._componentRef.instance);\n }\n this._registerOutsideClick();\n return this._componentRef;\n }\n hide(id) {\n var _a, _b, _c, _d, _e, _f;\n if (!this._componentRef) {\n return this;\n }\n this._posService.deletePositionElement(this._componentRef.location);\n this.onBeforeHide.emit(this._componentRef.instance);\n const componentEl = this._componentRef.location.nativeElement;\n (_a = componentEl.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(componentEl);\n (_c = (_b = this._contentRef) === null || _b === void 0 ? void 0 : _b.componentRef) === null || _c === void 0 ? void 0 : _c.destroy();\n if (this._viewContainerRef && ((_d = this._contentRef) === null || _d === void 0 ? void 0 : _d.viewRef)) {\n this._viewContainerRef.remove(this._viewContainerRef.indexOf(this._contentRef.viewRef));\n }\n (_f = (_e = this._contentRef) === null || _e === void 0 ? void 0 : _e.viewRef) === null || _f === void 0 ? void 0 : _f.destroy();\n this._contentRef = void 0;\n this._componentRef = void 0;\n this._removeGlobalListener();\n this.onHidden.emit(id ? { id } : null);\n return this;\n }\n toggle() {\n if (this.isShown) {\n this.hide();\n return;\n }\n this.show();\n }\n dispose() {\n if (this.isShown) {\n this.hide();\n }\n this._unsubscribePositioning();\n if (this._unregisterListenersFn) {\n this._unregisterListenersFn();\n }\n }\n listen(listenOpts) {\n var _a;\n this.triggers = listenOpts.triggers || this.triggers;\n this._listenOpts.outsideClick = listenOpts.outsideClick;\n this._listenOpts.outsideEsc = listenOpts.outsideEsc;\n listenOpts.target = listenOpts.target || ((_a = this._elementRef) === null || _a === void 0 ? void 0 : _a.nativeElement);\n const hide = (this._listenOpts.hide = () => listenOpts.hide ? listenOpts.hide() : void this.hide());\n const show = (this._listenOpts.show = (registerHide) => {\n listenOpts.show ? listenOpts.show(registerHide) : this.show(registerHide);\n registerHide();\n });\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const toggle = (registerHide) => {\n this.isShown ? hide() : show(registerHide);\n };\n if (this._renderer) {\n this._unregisterListenersFn = listenToTriggersV2(this._renderer, {\n target: listenOpts.target,\n triggers: listenOpts.triggers,\n show,\n hide,\n toggle\n });\n }\n return this;\n }\n _removeGlobalListener() {\n if (this._globalListener) {\n this._globalListener();\n this._globalListener = Function.prototype;\n }\n }\n attachInline(vRef, \n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n template) {\n if (vRef && template) {\n this._inlineViewRef = vRef.createEmbeddedView(template);\n }\n return this;\n }\n _registerOutsideClick() {\n if (!this._componentRef || !this._componentRef.location) {\n return;\n }\n // why: should run after first event bubble\n if (this._listenOpts.outsideClick) {\n const target = this._componentRef.location.nativeElement;\n setTimeout(() => {\n if (this._renderer && this._elementRef) {\n this._globalListener = registerOutsideClick(this._renderer, {\n targets: [target, this._elementRef.nativeElement],\n outsideClick: this._listenOpts.outsideClick,\n hide: () => this._listenOpts.hide && this._listenOpts.hide()\n });\n }\n });\n }\n if (this._listenOpts.outsideEsc && this._renderer && this._elementRef) {\n const target = this._componentRef.location.nativeElement;\n this._globalListener = registerEscClick(this._renderer, {\n targets: [target, this._elementRef.nativeElement],\n outsideEsc: this._listenOpts.outsideEsc,\n hide: () => this._listenOpts.hide && this._listenOpts.hide()\n });\n }\n }\n getInnerComponent() {\n return this._innerComponent;\n }\n _subscribePositioning() {\n if (this._zoneSubscription || !this.attachment) {\n return;\n }\n this.onShown.subscribe(() => {\n var _a;\n this._posService.position({\n element: (_a = this._componentRef) === null || _a === void 0 ? void 0 : _a.location,\n target: this._elementRef,\n attachment: this.attachment,\n appendToBody: this.container === 'body'\n });\n });\n this._zoneSubscription = this._ngZone.onStable.subscribe(() => {\n if (!this._componentRef) {\n return;\n }\n this._posService.calcPosition();\n });\n }\n _unsubscribePositioning() {\n if (!this._zoneSubscription) {\n return;\n }\n this._zoneSubscription.unsubscribe();\n this._zoneSubscription = void 0;\n }\n _getContentRef(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n content, \n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n context, \n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n initialState) {\n if (!content) {\n return new ContentRef([]);\n }\n if (content instanceof TemplateRef) {\n if (this._viewContainerRef) {\n const _viewRef = this._viewContainerRef\n .createEmbeddedView(content, context);\n _viewRef.markForCheck();\n return new ContentRef([_viewRef.rootNodes], _viewRef);\n }\n const viewRef = content.createEmbeddedView({});\n this._applicationRef.attachView(viewRef);\n return new ContentRef([viewRef.rootNodes], viewRef);\n }\n if (typeof content === 'function') {\n const contentCmptFactory = this._componentFactoryResolver.resolveComponentFactory(content);\n const modalContentInjector = Injector.create({\n providers: this._providers,\n parent: this._injector\n });\n const componentRef = contentCmptFactory.create(modalContentInjector);\n Object.assign(componentRef.instance, initialState);\n this._applicationRef.attachView(componentRef.hostView);\n return new ContentRef([[componentRef.location.nativeElement]], componentRef.hostView, componentRef);\n }\n const nodes = this._renderer\n ? [this._renderer.createText(`${content}`)]\n : [];\n return new ContentRef([nodes]);\n }\n}\n\nclass ComponentLoaderFactory {\n constructor(_componentFactoryResolver, _ngZone, _injector, _posService, _applicationRef) {\n this._componentFactoryResolver = _componentFactoryResolver;\n this._ngZone = _ngZone;\n this._injector = _injector;\n this._posService = _posService;\n this._applicationRef = _applicationRef;\n }\n /**\n *\n * @param _elementRef\n * @param _viewContainerRef\n * @param _renderer\n */\n createLoader(_elementRef, _viewContainerRef, _renderer) {\n return new ComponentLoader(_viewContainerRef, _renderer, _elementRef, this._injector, this._componentFactoryResolver, this._ngZone, this._applicationRef, this._posService);\n }\n}\nComponentLoaderFactory.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.1.1\", ngImport: i0, type: ComponentLoaderFactory, deps: [{ token: i0.ComponentFactoryResolver }, { token: i0.NgZone }, { token: i0.Injector }, { token: i1.PositioningService }, { token: i0.ApplicationRef }], target: i0.ɵɵFactoryTarget.Injectable });\nComponentLoaderFactory.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"13.1.1\", ngImport: i0, type: ComponentLoaderFactory, providedIn: 'root' });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.1.1\", ngImport: i0, type: ComponentLoaderFactory, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], ctorParameters: function () { return [{ type: i0.ComponentFactoryResolver }, { type: i0.NgZone }, { type: i0.Injector }, { type: i1.PositioningService }, { type: i0.ApplicationRef }]; } });\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { BsComponentRef, ComponentLoader, ComponentLoaderFactory, ContentRef };\n","import * as i0 from '@angular/core';\nimport { Injectable, Component, ChangeDetectionStrategy, Input, Directive, Output, NgModule } from '@angular/core';\nimport { getBsVer, parseTriggers } from 'ngx-bootstrap/utils';\nimport * as i3 from 'ngx-bootstrap/positioning';\nimport { PlacementForBs5, checkMargins, PositioningService } from 'ngx-bootstrap/positioning';\nimport * as i2 from '@angular/common';\nimport { CommonModule } from '@angular/common';\nimport { timer } from 'rxjs';\nimport * as i2$1 from 'ngx-bootstrap/component-loader';\nimport { ComponentLoaderFactory } from 'ngx-bootstrap/component-loader';\n\n/**\n * Configuration service for the Popover directive.\n * You can inject this service, typically in your root component, and customize\n * the values of its properties in order to provide default values for all the\n * popovers used in the application.\n */\nclass PopoverConfig {\n constructor() {\n /** sets disable adaptive position */\n this.adaptivePosition = true;\n /**\n * Placement of a popover. Accepts: \"top\", \"bottom\", \"left\", \"right\", \"auto\"\n */\n this.placement = 'top';\n /**\n * Specifies events that should trigger. Supports a space separated list of\n * event names.\n */\n this.triggers = 'click';\n this.outsideClick = false;\n /** delay before showing the tooltip */\n this.delay = 0;\n }\n}\nPopoverConfig.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.1.1\", ngImport: i0, type: PopoverConfig, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nPopoverConfig.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"13.1.1\", ngImport: i0, type: PopoverConfig, providedIn: 'root' });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.1.1\", ngImport: i0, type: PopoverConfig, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }] });\n\nclass PopoverContainerComponent {\n constructor(config) {\n this._placement = 'top';\n Object.assign(this, config);\n }\n set placement(value) {\n if (!this._bsVersions.isBs5) {\n this._placement = value;\n }\n else {\n this._placement = PlacementForBs5[value];\n }\n }\n ;\n get _bsVersions() {\n return getBsVer();\n }\n checkMarginNecessity() {\n return checkMargins(this._placement);\n }\n}\nPopoverContainerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.1.1\", ngImport: i0, type: PopoverContainerComponent, deps: [{ token: PopoverConfig }], target: i0.ɵɵFactoryTarget.Component });\nPopoverContainerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"13.1.1\", type: PopoverContainerComponent, selector: \"popover-container\", inputs: { placement: \"placement\", title: \"title\" }, host: { attributes: { \"role\": \"tooltip\" }, properties: { \"attr.id\": \"popoverId\", \"class\": \"\\\"popover in popover-\\\" + _placement + \\\" \\\" + \\\"bs-popover-\\\" + _placement + \\\" \\\" + _placement + \\\" \\\" + containerClass + \\\" \\\" + checkMarginNecessity()\", \"class.show\": \"!_bsVersions.isBs3\", \"class.bs3\": \"_bsVersions.isBs3\" }, styleAttribute: \"display:block;\" }, ngImport: i0, template: \"
\\n

{{ title }}

\\n
\\n \\n
\\n\", styles: [\":host.bs3.popover-top{margin-bottom:10px}:host.bs3.popover.top>.arrow{margin-left:-2px}:host.bs3.popover.top{margin-bottom:10px}:host.popover.bottom>.arrow{margin-left:-4px}:host.bs3.bs-popover-left{margin-right:.5rem}:host.bs3.bs-popover-right .arrow,:host.bs3.bs-popover-left .arrow{margin:.3rem 0}\\n\"], directives: [{ type: i2.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.1.1\", ngImport: i0, type: PopoverContainerComponent, decorators: [{\n type: Component,\n args: [{ selector: 'popover-container', changeDetection: ChangeDetectionStrategy.OnPush, host: {\n '[attr.id]': 'popoverId',\n '[class]': '\"popover in popover-\" + _placement + \" \" + \"bs-popover-\" + _placement + \" \" + _placement + \" \" + containerClass + \" \" + checkMarginNecessity()',\n '[class.show]': '!_bsVersions.isBs3',\n '[class.bs3]': '_bsVersions.isBs3',\n role: 'tooltip',\n style: 'display:block;'\n }, styles: [\n `\n :host.bs3.popover-top {\n margin-bottom: 10px;\n }\n :host.bs3.popover.top>.arrow {\n margin-left: -2px;\n }\n :host.bs3.popover.top {\n margin-bottom: 10px;\n }\n :host.popover.bottom>.arrow {\n margin-left: -4px;\n }\n :host.bs3.bs-popover-left {\n margin-right: .5rem;\n }\n :host.bs3.bs-popover-right .arrow, :host.bs3.bs-popover-left .arrow{\n margin: .3rem 0;\n }\n `\n ], template: \"
\\n

{{ title }}

\\n
\\n \\n
\\n\" }]\n }], ctorParameters: function () { return [{ type: PopoverConfig }]; }, propDecorators: { placement: [{\n type: Input\n }], title: [{\n type: Input\n }] } });\n\nlet id = 0;\n/**\n * A lightweight, extensible directive for fancy popover creation.\n */\nclass PopoverDirective {\n constructor(_config, _elementRef, _renderer, _viewContainerRef, cis, _positionService) {\n this._elementRef = _elementRef;\n this._renderer = _renderer;\n this._positionService = _positionService;\n /** unique id popover - use for aria-describedby */\n this.popoverId = id++;\n /** sets disable adaptive position */\n this.adaptivePosition = true;\n /**\n * Placement of a popover. Accepts: \"top\", \"bottom\", \"left\", \"right\"\n */\n this.placement = 'top';\n /**\n * Close popover on outside click\n */\n this.outsideClick = false;\n /**\n * Specifies events that should trigger. Supports a space separated list of\n * event names.\n */\n this.triggers = 'click';\n /**\n * Css class for popover container\n */\n this.containerClass = '';\n /**\n * Delay before showing the tooltip\n */\n this.delay = 0;\n this._isInited = false;\n this._popover = cis\n .createLoader(_elementRef, _viewContainerRef, _renderer)\n .provide({ provide: PopoverConfig, useValue: _config });\n Object.assign(this, _config);\n this.onShown = this._popover.onShown;\n this.onHidden = this._popover.onHidden;\n // fix: no focus on button on Mac OS #1795\n if (typeof window !== 'undefined') {\n _elementRef.nativeElement.addEventListener('click', function () {\n try {\n _elementRef.nativeElement.focus();\n }\n catch (err) {\n return;\n }\n });\n }\n }\n /**\n * Returns whether or not the popover is currently being shown\n */\n get isOpen() {\n return this._popover.isShown;\n }\n set isOpen(value) {\n if (value) {\n this.show();\n }\n else {\n this.hide();\n }\n }\n /**\n * Set attribute aria-describedBy for element directive and\n * set id for the popover\n */\n setAriaDescribedBy() {\n this._ariaDescribedby = this.isOpen ? `ngx-popover-${this.popoverId}` : void 0;\n if (this._ariaDescribedby) {\n if (this._popover.instance) {\n this._popover.instance.popoverId = this._ariaDescribedby;\n }\n this._renderer.setAttribute(this._elementRef.nativeElement, 'aria-describedby', this._ariaDescribedby);\n }\n else {\n this._renderer.removeAttribute(this._elementRef.nativeElement, 'aria-describedby');\n }\n }\n /**\n * Opens an element’s popover. This is considered a “manual” triggering of\n * the popover.\n */\n show() {\n if (this._popover.isShown || !this.popover || this._delayTimeoutId) {\n return;\n }\n this._positionService.setOptions({\n modifiers: {\n flip: {\n enabled: this.adaptivePosition\n },\n preventOverflow: {\n enabled: this.adaptivePosition\n }\n }\n });\n const showPopover = () => {\n if (this._delayTimeoutId) {\n this._delayTimeoutId = undefined;\n }\n this._popover\n .attach(PopoverContainerComponent)\n .to(this.container)\n .position({ attachment: this.placement })\n .show({\n content: this.popover,\n context: this.popoverContext,\n placement: this.placement,\n title: this.popoverTitle,\n containerClass: this.containerClass\n });\n if (!this.adaptivePosition && this._popover._componentRef) {\n this._positionService.calcPosition();\n this._positionService.deletePositionElement(this._popover._componentRef.location);\n }\n this.isOpen = true;\n this.setAriaDescribedBy();\n };\n const cancelDelayedTooltipShowing = () => {\n if (this._popoverCancelShowFn) {\n this._popoverCancelShowFn();\n }\n };\n if (this.delay) {\n const _timer = timer(this.delay).subscribe(() => {\n showPopover();\n cancelDelayedTooltipShowing();\n });\n if (this.triggers) {\n parseTriggers(this.triggers)\n .forEach((trigger) => {\n if (!trigger.close) {\n return;\n }\n this._popoverCancelShowFn = this._renderer.listen(this._elementRef.nativeElement, trigger.close, () => {\n _timer.unsubscribe();\n cancelDelayedTooltipShowing();\n });\n });\n }\n }\n else {\n showPopover();\n }\n }\n /**\n * Closes an element’s popover. This is considered a “manual” triggering of\n * the popover.\n */\n hide() {\n if (this._delayTimeoutId) {\n clearTimeout(this._delayTimeoutId);\n this._delayTimeoutId = undefined;\n }\n if (this.isOpen) {\n this._popover.hide();\n this.setAriaDescribedBy();\n this.isOpen = false;\n }\n }\n /**\n * Toggles an element’s popover. This is considered a “manual” triggering of\n * the popover.\n */\n toggle() {\n if (this.isOpen) {\n return this.hide();\n }\n this.show();\n }\n ngOnInit() {\n // fix: seems there are an issue with `routerLinkActive`\n // which result in duplicated call ngOnInit without call to ngOnDestroy\n // read more: https://github.com/valor-software/ngx-bootstrap/issues/1885\n if (this._isInited) {\n return;\n }\n this._isInited = true;\n this._popover.listen({\n triggers: this.triggers,\n outsideClick: this.outsideClick,\n show: () => this.show(),\n hide: () => this.hide()\n });\n }\n ngOnDestroy() {\n this._popover.dispose();\n }\n}\nPopoverDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.1.1\", ngImport: i0, type: PopoverDirective, deps: [{ token: PopoverConfig }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ViewContainerRef }, { token: i2$1.ComponentLoaderFactory }, { token: i3.PositioningService }], target: i0.ɵɵFactoryTarget.Directive });\nPopoverDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.1.1\", type: PopoverDirective, selector: \"[popover]\", inputs: { adaptivePosition: \"adaptivePosition\", popover: \"popover\", popoverContext: \"popoverContext\", popoverTitle: \"popoverTitle\", placement: \"placement\", outsideClick: \"outsideClick\", triggers: \"triggers\", container: \"container\", containerClass: \"containerClass\", isOpen: \"isOpen\", delay: \"delay\" }, outputs: { onShown: \"onShown\", onHidden: \"onHidden\" }, exportAs: [\"bs-popover\"], ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.1.1\", ngImport: i0, type: PopoverDirective, decorators: [{\n type: Directive,\n args: [{ selector: '[popover]', exportAs: 'bs-popover' }]\n }], ctorParameters: function () { return [{ type: PopoverConfig }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ViewContainerRef }, { type: i2$1.ComponentLoaderFactory }, { type: i3.PositioningService }]; }, propDecorators: { adaptivePosition: [{\n type: Input\n }], popover: [{\n type: Input\n }], popoverContext: [{\n type: Input\n }], popoverTitle: [{\n type: Input\n }], placement: [{\n type: Input\n }], outsideClick: [{\n type: Input\n }], triggers: [{\n type: Input\n }], container: [{\n type: Input\n }], containerClass: [{\n type: Input\n }], isOpen: [{\n type: Input\n }], delay: [{\n type: Input\n }], onShown: [{\n type: Output\n }], onHidden: [{\n type: Output\n }] } });\n\nclass PopoverModule {\n static forRoot() {\n return {\n ngModule: PopoverModule,\n providers: [ComponentLoaderFactory, PositioningService]\n };\n }\n}\nPopoverModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.1.1\", ngImport: i0, type: PopoverModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nPopoverModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"13.1.1\", ngImport: i0, type: PopoverModule, declarations: [PopoverDirective, PopoverContainerComponent], imports: [CommonModule], exports: [PopoverDirective] });\nPopoverModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"13.1.1\", ngImport: i0, type: PopoverModule, imports: [[CommonModule]] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.1.1\", ngImport: i0, type: PopoverModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [CommonModule],\n declarations: [PopoverDirective, PopoverContainerComponent],\n exports: [PopoverDirective],\n entryComponents: [PopoverContainerComponent]\n }]\n }] });\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { PopoverConfig, PopoverContainerComponent, PopoverDirective, PopoverModule };\n","import * as i0 from '@angular/core';\nimport { Injectable, Component, ChangeDetectionStrategy, EventEmitter, Directive, Input, Output, NgModule } from '@angular/core';\nimport { getBsVer, warnOnce, parseTriggers, OnChange } from 'ngx-bootstrap/utils';\nimport * as i3 from 'ngx-bootstrap/positioning';\nimport { PlacementForBs5, PositioningService } from 'ngx-bootstrap/positioning';\nimport { __decorate, __metadata } from 'tslib';\nimport { timer } from 'rxjs';\nimport * as i1 from 'ngx-bootstrap/component-loader';\nimport { ComponentLoaderFactory } from 'ngx-bootstrap/component-loader';\nimport { CommonModule } from '@angular/common';\n\n/** Default values provider for tooltip */\nclass TooltipConfig {\n constructor() {\n /** sets disable adaptive position */\n this.adaptivePosition = true;\n /** tooltip placement, supported positions: 'top', 'bottom', 'left', 'right' */\n this.placement = 'top';\n /** array of event names which triggers tooltip opening */\n this.triggers = 'hover focus';\n /** delay before showing the tooltip */\n this.delay = 0;\n }\n}\nTooltipConfig.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.1.1\", ngImport: i0, type: TooltipConfig, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nTooltipConfig.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"13.1.1\", ngImport: i0, type: TooltipConfig, providedIn: 'root' });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.1.1\", ngImport: i0, type: TooltipConfig, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n\nclass TooltipContainerComponent {\n constructor(config) {\n Object.assign(this, config);\n }\n get _bsVersions() {\n return getBsVer();\n }\n ngAfterViewInit() {\n this.classMap = { in: false, fade: false };\n if (this.placement) {\n if (this._bsVersions.isBs5) {\n this.placement = PlacementForBs5[this.placement];\n }\n this.classMap[this.placement] = true;\n }\n this.classMap[`tooltip-${this.placement}`] = true;\n this.classMap[\"in\"] = true;\n if (this.animation) {\n this.classMap[\"fade\"] = true;\n }\n if (this.containerClass) {\n this.classMap[this.containerClass] = true;\n }\n }\n}\nTooltipContainerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.1.1\", ngImport: i0, type: TooltipContainerComponent, deps: [{ token: TooltipConfig }], target: i0.ɵɵFactoryTarget.Component });\nTooltipContainerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"13.1.1\", type: TooltipContainerComponent, selector: \"bs-tooltip-container\", host: { attributes: { \"role\": \"tooltip\" }, properties: { \"class\": \"\\\"tooltip in tooltip-\\\" + placement + \\\" \\\" + \\\"bs-tooltip-\\\" + placement + \\\" \\\" + placement + \\\" \\\" + containerClass\", \"class.show\": \"!_bsVersions.isBs3\", \"class.bs3\": \"_bsVersions.isBs3\", \"attr.id\": \"this.id\" } }, ngImport: i0, template: `\n
\n
\n `, isInline: true, styles: [\":host.tooltip{display:block;pointer-events:none}:host.bs3.tooltip.top>.arrow{margin-left:-2px}:host.bs3.tooltip.bottom{margin-top:0}:host.bs3.bs-tooltip-left,:host.bs3.bs-tooltip-right{margin:0}:host.bs3.bs-tooltip-right .arrow,:host.bs3.bs-tooltip-left .arrow{margin:.3rem 0}\\n\"], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.1.1\", ngImport: i0, type: TooltipContainerComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'bs-tooltip-container',\n changeDetection: ChangeDetectionStrategy.OnPush,\n // eslint-disable-next-line @angular-eslint/no-host-metadata-property\n host: {\n '[class]': '\"tooltip in tooltip-\" + placement + \" \" + \"bs-tooltip-\" + placement + \" \" + placement + \" \" + containerClass',\n '[class.show]': '!_bsVersions.isBs3',\n '[class.bs3]': '_bsVersions.isBs3',\n '[attr.id]': 'this.id',\n role: 'tooltip'\n },\n styles: [\n `\n :host.tooltip {\n display: block;\n pointer-events: none;\n }\n :host.bs3.tooltip.top>.arrow {\n margin-left: -2px;\n }\n :host.bs3.tooltip.bottom {\n margin-top: 0px;\n }\n :host.bs3.bs-tooltip-left, :host.bs3.bs-tooltip-right{\n margin: 0px;\n }\n :host.bs3.bs-tooltip-right .arrow, :host.bs3.bs-tooltip-left .arrow {\n margin: .3rem 0;\n }\n `\n ],\n template: `\n
\n
\n `\n }]\n }], ctorParameters: function () { return [{ type: TooltipConfig }]; } });\n\nlet id = 0;\nclass TooltipDirective {\n constructor(_viewContainerRef, cis, config, _elementRef, _renderer, _positionService) {\n this._elementRef = _elementRef;\n this._renderer = _renderer;\n this._positionService = _positionService;\n this.tooltipId = id++;\n /** sets disable adaptive position */\n this.adaptivePosition = true;\n /** Fired when tooltip content changes */\n this.tooltipChange = new EventEmitter();\n /**\n * Placement of a tooltip. Accepts: \"top\", \"bottom\", \"left\", \"right\"\n */\n this.placement = 'top';\n /**\n * Specifies events that should trigger. Supports a space separated list of\n * event names.\n */\n this.triggers = 'hover focus';\n /**\n * Css class for tooltip container\n */\n this.containerClass = '';\n /**\n * Allows to disable tooltip\n */\n this.isDisabled = false;\n /**\n * Delay before showing the tooltip\n */\n this.delay = 0;\n /** @deprecated - removed, will be added to configuration */\n this.tooltipAnimation = true;\n /** @deprecated */\n this.tooltipFadeDuration = 150;\n /** @deprecated */\n this.tooltipStateChanged = new EventEmitter();\n this._tooltip = cis\n .createLoader(this._elementRef, _viewContainerRef, this._renderer)\n .provide({ provide: TooltipConfig, useValue: config });\n Object.assign(this, config);\n this.onShown = this._tooltip.onShown;\n this.onHidden = this._tooltip.onHidden;\n }\n /**\n * Returns whether or not the tooltip is currently being shown\n */\n get isOpen() {\n return this._tooltip.isShown;\n }\n set isOpen(value) {\n if (value) {\n this.show();\n }\n else {\n this.hide();\n }\n }\n /** @deprecated - please use `tooltip` instead */\n set htmlContent(value) {\n warnOnce('tooltipHtml was deprecated, please use `tooltip` instead');\n this.tooltip = value;\n }\n /** @deprecated - please use `placement` instead */\n // eslint-disable-next-line @angular-eslint/no-input-rename\n set _placement(value) {\n warnOnce('tooltipPlacement was deprecated, please use `placement` instead');\n this.placement = value;\n }\n /** @deprecated - please use `isOpen` instead */\n // eslint-disable-next-line @angular-eslint/no-input-rename\n set _isOpen(value) {\n warnOnce('tooltipIsOpen was deprecated, please use `isOpen` instead');\n this.isOpen = value;\n }\n get _isOpen() {\n warnOnce('tooltipIsOpen was deprecated, please use `isOpen` instead');\n return this.isOpen;\n }\n /** @deprecated - please use `isDisabled` instead */\n // eslint-disable-next-line @angular-eslint/no-input-rename\n set _enable(value) {\n warnOnce('tooltipEnable was deprecated, please use `isDisabled` instead');\n this.isDisabled = !value;\n }\n get _enable() {\n warnOnce('tooltipEnable was deprecated, please use `isDisabled` instead');\n return this.isDisabled;\n }\n /** @deprecated - please use `container=\"body\"` instead */\n // eslint-disable-next-line @angular-eslint/no-input-rename\n set _appendToBody(value) {\n warnOnce('tooltipAppendToBody was deprecated, please use `container=\"body\"` instead');\n this.container = value ? 'body' : this.container;\n }\n get _appendToBody() {\n warnOnce('tooltipAppendToBody was deprecated, please use `container=\"body\"` instead');\n return this.container === 'body';\n }\n /** @deprecated - will replaced with customClass */\n // eslint-disable-next-line @angular-eslint/no-input-rename\n set _popupClass(value) {\n warnOnce('tooltipClass deprecated');\n }\n /** @deprecated - removed */\n // eslint-disable-next-line @angular-eslint/no-input-rename\n set _tooltipContext(value) {\n warnOnce('tooltipContext deprecated');\n }\n /** @deprecated */\n // eslint-disable-next-line @angular-eslint/no-input-rename\n set _tooltipPopupDelay(value) {\n warnOnce('tooltipPopupDelay is deprecated, use `delay` instead');\n this.delay = value;\n }\n /** @deprecated - please use `triggers` instead */\n get _tooltipTrigger() {\n warnOnce('tooltipTrigger was deprecated, please use `triggers` instead');\n return this.triggers;\n }\n set _tooltipTrigger(value) {\n warnOnce('tooltipTrigger was deprecated, please use `triggers` instead');\n this.triggers = (value || '').toString();\n }\n ngOnInit() {\n this._tooltip.listen({\n triggers: this.triggers,\n show: () => this.show()\n });\n this.tooltipChange.subscribe((value) => {\n if (!value) {\n this._tooltip.hide();\n }\n });\n this.onShown.subscribe(() => {\n this.setAriaDescribedBy();\n });\n this.onHidden.subscribe(() => {\n this.setAriaDescribedBy();\n });\n }\n setAriaDescribedBy() {\n this._ariaDescribedby = this.isOpen ? `tooltip-${this.tooltipId}` : void 0;\n if (this._ariaDescribedby) {\n this._renderer.setAttribute(this._elementRef.nativeElement, 'aria-describedby', this._ariaDescribedby);\n }\n else {\n this._renderer.removeAttribute(this._elementRef.nativeElement, 'aria-describedby');\n }\n }\n /**\n * Toggles an element’s tooltip. This is considered a “manual” triggering of\n * the tooltip.\n */\n toggle() {\n if (this.isOpen) {\n return this.hide();\n }\n this.show();\n }\n /**\n * Opens an element’s tooltip. This is considered a “manual” triggering of\n * the tooltip.\n */\n show() {\n this._positionService.setOptions({\n modifiers: {\n flip: {\n enabled: this.adaptivePosition\n },\n preventOverflow: {\n enabled: this.adaptivePosition,\n boundariesElement: this.boundariesElement || 'scrollParent'\n }\n }\n });\n if (this.isOpen ||\n this.isDisabled ||\n this._delayTimeoutId ||\n !this.tooltip) {\n return;\n }\n const showTooltip = () => {\n if (this._delayTimeoutId) {\n this._delayTimeoutId = undefined;\n }\n this._tooltip\n .attach(TooltipContainerComponent)\n .to(this.container)\n .position({ attachment: this.placement })\n .show({\n content: this.tooltip,\n placement: this.placement,\n containerClass: this.containerClass,\n id: `tooltip-${this.tooltipId}`\n });\n };\n const cancelDelayedTooltipShowing = () => {\n if (this._tooltipCancelShowFn) {\n this._tooltipCancelShowFn();\n }\n };\n if (this.delay) {\n if (this._delaySubscription) {\n this._delaySubscription.unsubscribe();\n }\n this._delaySubscription = timer(this.delay).subscribe(() => {\n showTooltip();\n cancelDelayedTooltipShowing();\n });\n if (this.triggers) {\n parseTriggers(this.triggers)\n .forEach((trigger) => {\n if (!trigger.close) {\n return;\n }\n this._tooltipCancelShowFn = this._renderer.listen(this._elementRef.nativeElement, trigger.close, () => {\n var _a;\n (_a = this._delaySubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();\n cancelDelayedTooltipShowing();\n });\n });\n }\n }\n else {\n showTooltip();\n }\n }\n /**\n * Closes an element’s tooltip. This is considered a “manual” triggering of\n * the tooltip.\n */\n hide() {\n var _a;\n if (this._delayTimeoutId) {\n clearTimeout(this._delayTimeoutId);\n this._delayTimeoutId = undefined;\n }\n if (!this._tooltip.isShown) {\n return;\n }\n if ((_a = this._tooltip.instance) === null || _a === void 0 ? void 0 : _a.classMap) {\n this._tooltip.instance.classMap[\"in\"] = false;\n }\n setTimeout(() => {\n this._tooltip.hide();\n }, this.tooltipFadeDuration);\n }\n ngOnDestroy() {\n this._tooltip.dispose();\n this.tooltipChange.unsubscribe();\n if (this._delaySubscription) {\n this._delaySubscription.unsubscribe();\n }\n this.onShown.unsubscribe();\n this.onHidden.unsubscribe();\n }\n}\nTooltipDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.1.1\", ngImport: i0, type: TooltipDirective, deps: [{ token: i0.ViewContainerRef }, { token: i1.ComponentLoaderFactory }, { token: TooltipConfig }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i3.PositioningService }], target: i0.ɵɵFactoryTarget.Directive });\nTooltipDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.1.1\", type: TooltipDirective, selector: \"[tooltip], [tooltipHtml]\", inputs: { adaptivePosition: \"adaptivePosition\", tooltip: \"tooltip\", placement: \"placement\", triggers: \"triggers\", container: \"container\", containerClass: \"containerClass\", boundariesElement: \"boundariesElement\", isOpen: \"isOpen\", isDisabled: \"isDisabled\", delay: \"delay\", htmlContent: [\"tooltipHtml\", \"htmlContent\"], _placement: [\"tooltipPlacement\", \"_placement\"], _isOpen: [\"tooltipIsOpen\", \"_isOpen\"], _enable: [\"tooltipEnable\", \"_enable\"], _appendToBody: [\"tooltipAppendToBody\", \"_appendToBody\"], tooltipAnimation: \"tooltipAnimation\", _popupClass: [\"tooltipClass\", \"_popupClass\"], _tooltipContext: [\"tooltipContext\", \"_tooltipContext\"], _tooltipPopupDelay: [\"tooltipPopupDelay\", \"_tooltipPopupDelay\"], tooltipFadeDuration: \"tooltipFadeDuration\", _tooltipTrigger: [\"tooltipTrigger\", \"_tooltipTrigger\"] }, outputs: { tooltipChange: \"tooltipChange\", onShown: \"onShown\", onHidden: \"onHidden\", tooltipStateChanged: \"tooltipStateChanged\" }, exportAs: [\"bs-tooltip\"], ngImport: i0 });\n__decorate([\n OnChange(),\n __metadata(\"design:type\", Object)\n], TooltipDirective.prototype, \"tooltip\", void 0);\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.1.1\", ngImport: i0, type: TooltipDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[tooltip], [tooltipHtml]',\n exportAs: 'bs-tooltip'\n }]\n }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: i1.ComponentLoaderFactory }, { type: TooltipConfig }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i3.PositioningService }]; }, propDecorators: { adaptivePosition: [{\n type: Input\n }], tooltip: [{\n type: Input\n }], tooltipChange: [{\n type: Output\n }], placement: [{\n type: Input\n }], triggers: [{\n type: Input\n }], container: [{\n type: Input\n }], containerClass: [{\n type: Input\n }], boundariesElement: [{\n type: Input\n }], isOpen: [{\n type: Input\n }], isDisabled: [{\n type: Input\n }], delay: [{\n type: Input\n }], onShown: [{\n type: Output\n }], onHidden: [{\n type: Output\n }], htmlContent: [{\n type: Input,\n args: ['tooltipHtml']\n }], _placement: [{\n type: Input,\n args: ['tooltipPlacement']\n }], _isOpen: [{\n type: Input,\n args: ['tooltipIsOpen']\n }], _enable: [{\n type: Input,\n args: ['tooltipEnable']\n }], _appendToBody: [{\n type: Input,\n args: ['tooltipAppendToBody']\n }], tooltipAnimation: [{\n type: Input\n }], _popupClass: [{\n type: Input,\n args: ['tooltipClass']\n }], _tooltipContext: [{\n type: Input,\n args: ['tooltipContext']\n }], _tooltipPopupDelay: [{\n type: Input,\n args: ['tooltipPopupDelay']\n }], tooltipFadeDuration: [{\n type: Input\n }], _tooltipTrigger: [{\n type: Input,\n args: ['tooltipTrigger']\n }], tooltipStateChanged: [{\n type: Output\n }] } });\n\nclass TooltipModule {\n static forRoot() {\n return {\n ngModule: TooltipModule,\n providers: [ComponentLoaderFactory, PositioningService]\n };\n }\n}\nTooltipModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.1.1\", ngImport: i0, type: TooltipModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nTooltipModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"13.1.1\", ngImport: i0, type: TooltipModule, declarations: [TooltipDirective, TooltipContainerComponent], imports: [CommonModule], exports: [TooltipDirective] });\nTooltipModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"13.1.1\", ngImport: i0, type: TooltipModule, imports: [[CommonModule]] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.1.1\", ngImport: i0, type: TooltipModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [CommonModule],\n declarations: [TooltipDirective, TooltipContainerComponent],\n exports: [TooltipDirective],\n entryComponents: [TooltipContainerComponent]\n }]\n }] });\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { TooltipConfig, TooltipContainerComponent, TooltipDirective, TooltipModule };\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { GuestTitle } from '../constants/commonenums';\r\n\r\n@Pipe({\r\n name: 'guestTitle'\r\n})\r\nexport class GuestTitlePipe implements PipeTransform {\r\n\r\n transform(title: any): any {\r\n return (title > 0) ? GuestTitle[title] : \"\";\r\n }\r\n\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\n\r\n@Pipe({ name: 'safeHtml' })\r\nexport class SafeHtml implements PipeTransform {\r\n constructor(private sanitizer: DomSanitizer) { }\r\n transform(htmlval) {\r\n return this.sanitizer.bypassSecurityTrustHtml(htmlval);\r\n }\r\n}\r\n","import { CommonModule, TitleCasePipe } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { HttpService } from './services/http.service';\r\nimport { DynamicFieldDirective } from './dynamicform/components/dynamic-field/dynamic-field.directive';\r\nimport { DynamicFormComponent } from './dynamicform/dynamic-form/dynamic-form.component';\r\nimport { DynamicFormService } from './dynamicform/service/dynamic-form.service';\r\nimport { MaterialModule } from '../material-module';\r\nimport { TranslateModule } from '@ngx-translate/core';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { FormInputComponent } from './dynamicform/components/form-input/form-input.component';\r\nimport { FormCheckboxComponent } from './dynamicform/components/form-checkbox/form-checkbox.component';\r\nimport { FormTextareaComponent } from './dynamicform/components/form-textarea/form-textarea.component';\r\nimport { FormRadioComponent } from './dynamicform/components/form-radio/form-radio.component';\r\nimport { FormSelectComponent } from './dynamicform/components/form-select/form-select.component';\r\nimport { FormdateComponent } from './dynamicform/components/form-date/form-date.component';\r\nimport { ButtonComponent } from './components/button/button.component';\r\nimport { ButtonInputFormater } from './pipes/button-input-formatter.pipe';\r\nimport { PopoverModule } from 'ngx-bootstrap/popover';\r\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\r\nimport { NgbModule } from '@ng-bootstrap/ng-bootstrap';\r\nimport { NgScrollbarModule } from 'ngx-scrollbar';\r\nimport { SwiperConfigInterface, SwiperModule, SWIPER_CONFIG } from 'ngx-swiper-wrapper';\r\nimport { PopupComponent } from './components/popup/popup.component';\r\nimport { PopupMessageComponent } from './components/popup-message/popup-message.component';\r\nimport { FormInputSelectComponent } from './dynamicform/components/form-input-select/form-input-select.component';\r\nimport { PhoneNumberFormatDirective } from './directives/phone-number-format.directive';\r\nimport { PopupService } from './services/popup.service';\r\nimport { FormAutocompleteComponent } from './dynamicform/components/form-autocomplete/form-autocomplete.component';\r\nimport { FormAddButtonComponent } from './dynamicform/components/form-add-button/form-add-button.component';\r\nimport {\r\n PerfectScrollbarModule, PerfectScrollbarConfigInterface,\r\n PERFECT_SCROLLBAR_CONFIG\r\n} from 'ngx-perfect-scrollbar';\r\nimport { FormTimeComponent } from './dynamicform/components/form-time/form-time.component';\r\nimport { GuestDataComponent } from './components/guest-data/guest-data.component';\r\nimport { TextCutterFormater } from './pipes/text-cutter.piper';\r\nimport { NumberShortNotation } from './pipes/number-short-notation.pipe';\r\nimport { CurrencyDecimalFormatter } from './pipes/currency-decimal.pipe';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { GuestTitlePipe } from './pipes/guest-title.pipe';\r\nimport { CartTemsPopupComponent } from './components/cart-tems-popup/cart-tems-popup.component';\r\nimport { AuthRefundPopupComponent } from './components/auth-refund-popup/auth-refund-popup.component';\r\nimport { DecimalsOnlyDirective } from './directives/decimals-only.directive';\r\nimport { ErrorValidatorComponent } from './components/error-validator/error-validator.component';\r\nimport { SafeHtml } from './pipes/safe-html.pipe';\r\nimport { ActivityListFilterPipe } from './pipes/activity-list-filter.pipe';\r\n// Swire Change\r\nimport { FormChipComponent } from 'src/app/shared/dynamicform/components/form-chip/form-chip.component';\r\nimport { FormatSettingsDatePipe } from './pipes/format-settings-date.pipe';\r\nimport { LocalizeService } from './services/localize.service';\r\nimport { LocalizedDatePipe } from './pipes/localize-date.pipe';\r\nimport { DateComparePipe } from './pipes/date-compare.pipe';\r\n\r\n// Swire Change\r\n\r\nconst DEFAULT_PERFECT_SCROLLBAR_CONFIG: PerfectScrollbarConfigInterface = {\r\n wheelPropagation: true,\r\n minScrollbarLength: 200\r\n};\r\n\r\nconst DEFAULT_SWIPER_CONFIG: SwiperConfigInterface = {\r\n direction: 'horizontal',\r\n slidesPerView: 'auto',\r\n keyboard: {\r\n enabled: true,\r\n },\r\n mousewheel: true,\r\n navigation: {\r\n nextEl: '.swiper-button-next',\r\n prevEl: '.swiper-button-prev',\r\n },\r\n slideToClickedSlide: true,\r\n loop: false,\r\n observer: true\r\n};\r\n\r\n@NgModule({\r\n declarations: [\r\n DynamicFormComponent,\r\n DynamicFieldDirective,\r\n FormInputComponent,\r\n FormCheckboxComponent,\r\n FormTextareaComponent,\r\n FormSelectComponent,\r\n FormdateComponent,\r\n ButtonComponent,\r\n ButtonInputFormater,\r\n TextCutterFormater,\r\n NumberShortNotation,\r\n CurrencyDecimalFormatter,\r\n LocalizedDatePipe,\r\n FormRadioComponent,\r\n PopupComponent,\r\n PopupMessageComponent,\r\n FormInputSelectComponent,\r\n PhoneNumberFormatDirective,\r\n FormAutocompleteComponent,\r\n FormAddButtonComponent,\r\n FormTimeComponent,\r\n GuestDataComponent,\r\n GuestTitlePipe,\r\n SafeHtml,\r\n AuthRefundPopupComponent,\r\n DecimalsOnlyDirective,\r\n CartTemsPopupComponent,\r\n ErrorValidatorComponent,\r\n ActivityListFilterPipe,\r\n // Swire Change\r\n FormChipComponent,\r\n // Swire Change\r\n FormatSettingsDatePipe,\r\n DateComparePipe\r\n ],\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MaterialModule,\r\n TranslateModule,\r\n PopoverModule,\r\n TooltipModule,\r\n NgbModule,\r\n NgScrollbarModule,\r\n PerfectScrollbarModule,\r\n MatIconModule,\r\n SwiperModule\r\n ],\r\n providers: [\r\n HttpService,\r\n DynamicFormService,\r\n PopupService,\r\n LocalizeService,\r\n TitleCasePipe,\r\n GuestTitlePipe,\r\n ActivityListFilterPipe,\r\n FormatSettingsDatePipe,\r\n DateComparePipe,\r\n SafeHtml,\r\n {\r\n provide: PERFECT_SCROLLBAR_CONFIG,\r\n useValue: DEFAULT_PERFECT_SCROLLBAR_CONFIG\r\n },\r\n {\r\n provide: SWIPER_CONFIG,\r\n useValue: DEFAULT_SWIPER_CONFIG,\r\n },\r\n LocalizedDatePipe\r\n ],\r\n exports: [\r\n DynamicFormComponent,\r\n FormInputComponent,\r\n FormCheckboxComponent,\r\n FormTextareaComponent,\r\n FormSelectComponent,\r\n ErrorValidatorComponent,\r\n MaterialModule,\r\n PopoverModule,\r\n TranslateModule,\r\n ButtonComponent,\r\n FormdateComponent,\r\n ButtonInputFormater,\r\n TextCutterFormater,\r\n NumberShortNotation,\r\n CurrencyDecimalFormatter,\r\n LocalizedDatePipe,\r\n TooltipModule, NgbModule,\r\n NgScrollbarModule,\r\n FormRadioComponent,\r\n PopupComponent,\r\n PopupMessageComponent,\r\n PhoneNumberFormatDirective,\r\n FormAutocompleteComponent,\r\n GuestTitlePipe,\r\n SafeHtml,\r\n SwiperModule,\r\n ActivityListFilterPipe,\r\n // Swire Change\r\n FormChipComponent,\r\n // Swire Change\r\n FormatSettingsDatePipe,\r\n DateComparePipe\r\n ]\r\n})\r\nexport class SharedModule { }\r\n","import { MatDialog } from '@angular/material/dialog';\r\nimport _ from 'lodash';\r\nimport { PopupComponent } from '../components/popup/popup.component';\r\nimport { ComponentTypes,ActivitiesVenue,AnyVenue } from '../constants/commonenums';\r\nimport { ComponentDetails } from '../dynamicform/models/popup.interface';\r\nimport { AddonActivitiesMappingsDTO, AddonDTO, AddOnAvailability, SelectionType, WidgetSettingsDTO } from '../Models/WidgetSettingsModels';\r\nimport moment from 'moment';\r\n\r\nexport abstract class Utilities {\r\n constructor(protected dialog: MatDialog,) { }\r\n\r\n public openCustomPopup(componentDetails: ComponentDetails, fromComponent: ComponentTypes, width?: string, height?: string,\r\n back?: boolean, title?: string, update?: string, cancel?: string, showAction?: boolean, maxWidth?: string,\r\n panelClass?: string, selectionView?: boolean, disabled?: boolean) {\r\n const dialogRef = this.dialog.open(PopupComponent, {\r\n disableClose: true,\r\n width,\r\n height,\r\n maxWidth,\r\n panelClass,\r\n minHeight: 100,\r\n data: {\r\n title,\r\n update,\r\n cancel,\r\n componentDetails,\r\n from: fromComponent,\r\n back,\r\n standalone: true,\r\n showAction,\r\n selectionView,\r\n disabled\r\n }\r\n });\r\n return dialogRef;\r\n }\r\n\r\n public static setComponentDetails(componentName: any, dimensionType: string, popupType: string, popupInput?: any,\r\n popupTitle?: any): ComponentDetails {\r\n const componentDetails: ComponentDetails = {\r\n componentName,\r\n dimensionType,\r\n popupType,\r\n popUpDetails: {\r\n eventName: 'notifyParent'\r\n },\r\n popupInput,\r\n popupTitle: popupTitle ? popupTitle : ''\r\n };\r\n return componentDetails;\r\n }\r\n\r\n public static getRandomDecimal(): number {\r\n const crypto = window.crypto;\r\n return crypto.getRandomValues(new Uint32Array(1))[0] / 2 ** 32;\r\n }\r\n\r\n public static getDefaultCountry(countryCodes: any[], country: string) {\r\n let restaurantCountry = country;\r\n let defaultCountry: any;\r\n if (restaurantCountry.toLowerCase() === 'england' ||\r\n restaurantCountry.toLowerCase() === 'scotland' || restaurantCountry.toLowerCase() === 'wales') {\r\n restaurantCountry = 'United kingdom';\r\n }\r\n const matchedCountry = countryCodes.filter((country) => {\r\n return country.Name.toLowerCase() === restaurantCountry.toLowerCase();\r\n });\r\n if (matchedCountry.length > 0) {\r\n defaultCountry = matchedCountry[0];\r\n } else {\r\n defaultCountry = countryCodes.filter((country) => country.Name === 'USA')[0];\r\n }\r\n return defaultCountry;\r\n }\r\n\r\n public static Date(date?: any) {\r\n return date ? moment(date) : moment();\r\n }\r\n\r\n public static datetimeBetween(start: Date, end: Date, date: Date): boolean {\r\n return (new Date(date) >= new Date(start) && new Date(date) <= new Date(end));\r\n }\r\n\r\n public static diffBetweenDates(start, end): number {\r\n return this.Date(start).startOf('d').diff(this.Date(end).startOf('d'), 'd');\r\n }\r\n public static diffBetweenDatesInMinutes(start, end): number {\r\n return this.Date(start).startOf('m').diff(this.Date(end).startOf('m'), 'm');\r\n }\r\n\r\n public static diffBetweenDateTime(start: Date, end: Date) {\r\n return this.Date(start).diff(end);\r\n }\r\n\r\n public static uniqueBy(arr, ...uniqueByArgs) {\r\n let modifiedArray = arr.map(item => {\r\n let res = \"\";\r\n uniqueByArgs.forEach((prop, index) => {\r\n if (index) {\r\n res += \"||\";\r\n }\r\n res += item[prop];\r\n })\r\n return res;\r\n });\r\n var uniqueArray = [...new Set(modifiedArray)];\r\n return uniqueArray.map((item: string) => {\r\n var values = item.split(\"||\");\r\n var output = {};\r\n uniqueByArgs.forEach((prop, index) => {\r\n output[prop] = values[index]\r\n })\r\n return output;\r\n })\r\n }\r\n\r\n public static parseDateString(date: Date | string) {\r\n return new Date(moment(date).valueOf());\r\n }\r\n\r\n public static getRestaurantDateTime(setting: string, customDate?:Date) {\r\n const offset = Number(setting);\r\n const d = customDate ? customDate : new Date();\r\n const utc = d.getTime() + (d.getTimezoneOffset() * 60000);\r\n const nd = new Date(utc + (3600000 * offset));\r\n return customDate ? new Date(nd.valueOf()) : nd;\r\n }\r\n public static IsActivitiesVenues(type){\r\n return ActivitiesVenue.find(x => x == type) ? true : false;\r\n }\r\n public static AnyVenue(type){\r\n return AnyVenue.find(x => x == type) ? true : false;\r\n }\r\n\r\n static getAddons(AddonsList: AddonDTO[], SpecialMeal: any, isNonDining?: boolean) {\r\n let AddonActivitiesMappings: AddonActivitiesMappingsDTO[] = [];\r\n if (!AddonsList) {\r\n return null\r\n }\r\n // let Addons = AddonsList.filter(x => x.AddonActivitiesMappings.some(g => g.ActivityId == SpecialMeal));\r\n if(!isNonDining && SpecialMeal)\r\n AddonsList.forEach(y => {\r\n y.AddonActivitiesMappings.forEach(x => {\r\n if (x.ActivityId == SpecialMeal && x.AvailableForWebReservation)\r\n AddonActivitiesMappings.push(x);\r\n })\r\n });\r\n else \r\n AddonsList.forEach(y => {\r\n y.AddonActivitiesMappings.forEach(x => {\r\n if (!x.ActivityId && x.AvailableForWebReservation)\r\n AddonActivitiesMappings.push(x);\r\n })\r\n });\r\n\r\n return AddonActivitiesMappings;\r\n }\r\n\r\n static getMandatoryAddons(AddonsList: AddonDTO[], SpecialMeal?) {\r\n let AddonActivitiesMappings: AddonActivitiesMappingsDTO[] = [];\r\n // let Addons = AddonsList.filter(x => x.AddonActivitiesMappings.some(g => g.ActivityId == SpecialMeal && g.IsMandatory == true));\r\n if (!AddonsList) {\r\n return null\r\n }\r\n AddonsList.forEach(y => {\r\n y.AddonActivitiesMappings.forEach(x => {\r\n if (x.ActivityId == SpecialMeal && (x.IsMandatory || x.IsCategoryLevelMandatory) && x.AvailableForWebReservation)\r\n AddonActivitiesMappings.push(x);\r\n })\r\n });\r\n return AddonActivitiesMappings;\r\n }\r\n\r\n static getSelectedAddOns(addOnList)\r\n {\r\n let selectedAddOns: any = addOnList.filter(x => x.selectedQuantity > 0);\r\n return selectedAddOns?.map(addOn => { return { AddonId : addOn.AddonId, Quantity: addOn.selectedQuantity, Category: addOn.PricingCategory}});\r\n }\r\n\r\n\r\n static filterSlotsbyAddon(AddonsList: AddonDTO[], OverAllAddon: AddonActivitiesMappingsDTO[], Addons: AddonActivitiesMappingsDTO[], AvailableAddon: AddOnAvailability[], selectedPartySize,SpecialMealId) {\r\n if (!OverAllAddon\r\n || (OverAllAddon && OverAllAddon.length == 0)//When there is no addon-activity mapping, we shouldn't disable slots\r\n || !AvailableAddon || Addons.length == 0\r\n ) {\r\n return true;\r\n } \r\n\r\n let addonvalue = false;\r\n let alreadycheckval = [];\r\n let categoryleveladdons = Addons.filter(x => x.IsCategoryLevelMandatory);\r\n\t Addons = Addons.filter(x => x.AvailableForWebReservation);\r\n for (const addon of Addons) {\r\n if (alreadycheckval.find(x => x.AddonId == addon.AddonId))\r\n continue;\r\n let byPartyType = false;\r\n let byPerBooking = false;\r\n let byLessonType = false;\r\n let anyCategoryforBooking = false;\r\n let addons = AddonsList.filter(x => x.AddonId == addon.AddonId)[0];\r\n const val = AvailableAddon?.filter(z => z.AddonId == addon.AddonId)[0];\r\n if (addons && val && addon.IsMandatory && addons.SelectionType == SelectionType.PerGuest) {\r\n byPartyType = val.AvailableQuantity >= selectedPartySize && (addon.MinQuantity <= selectedPartySize && addon.MaxQuantity >= selectedPartySize);\r\n }\r\n if (addons && val && addon.IsMandatory && addons.SelectionType == SelectionType.PerBooking) {\r\n byPerBooking = val.AvailableQuantity >= addon.MinQuantity;\r\n } \r\n if (addons && val && addon.IsMandatory && addons.SelectionType == SelectionType.PerLesson) {\r\n byLessonType = val.AvailableQuantity <= val.OverAllQuantity && val.AvailableQuantity > 0;\r\n }\r\n if (addons && val && addon.IsCategoryLevelMandatory) {\r\n let Categoryaddons = AddonsList.filter(x => x.CategoryId == addons.CategoryId && categoryleveladdons.filter(y => y.AddonId == x.AddonId));\r\n let tempval = false;\r\n for (let index = 0; index < Categoryaddons.length; index++) {\r\n let cat = Categoryaddons[index];\r\n const catval = AvailableAddon?.filter(z => z.AddonId == cat.AddonId)[0];\r\n\r\n if (cat && catval && cat.SelectionType == SelectionType.PerGuest && !tempval && catval.AvailableQuantity >= selectedPartySize) {\r\n tempval = true;\r\n alreadycheckval.push(Categoryaddons);\r\n break;\r\n }\r\n if (cat && catval && cat.SelectionType == SelectionType.PerBooking && !tempval && catval.AvailableQuantity >= addon.MinQuantity) {\r\n tempval = true;\r\n alreadycheckval.push(Categoryaddons);\r\n break;\r\n }\r\n }\r\n anyCategoryforBooking = tempval;\r\n }\r\n if (val && (val.IsUnlimited || byPartyType || byPerBooking || byLessonType || anyCategoryforBooking)) {\r\n addonvalue = true;\r\n } else {\r\n addonvalue = false;\r\n break;\r\n }\r\n }\r\n return addonvalue;\r\n }\r\n\r\n public static controlValidate(controls, propertyType) {\r\n return controls.find(x => x == propertyType) ? true : false;\r\n }\r\n\r\n\r\n }\r\n","export const environment = {\r\n configLocation: 'config-onprem.json',\r\n production: false,\r\n BaseUrl: \"http://a193.193.123.49/IntegrationAPI\",\r\n authorizeIframeResponseOrigin: \"https://authorize-ui.rguest.com\",\r\n rGuestPayIframeResponsOrigin: 'https://pay-blue.hospitalityrevolution.com',\r\n commonErrorMessage: \"Oops!... Some unexpected error occurred!\",\r\n defaultPropertyName: \"Restaurant\",\r\n generalPropertyName: \"Property\",\r\n redirectToAdminPortal: \"http://193.193.123.49/MP\",\r\n SEAProduction : true,\r\n restaurantIds : [6,7,2156],\r\n app_base_href: \"/Widget\",\r\n NotesAsTagsMerchantIds: [],\r\n restaurantIdshowSMSRemainder: [],\r\n restaurantIdToHideLanguages:[]\r\n};\r\n","import { NgModule } from '@angular/core';\r\nimport { Routes, RouterModule } from '@angular/router';\r\n\r\n\r\nconst routes: Routes = [];\r\n\r\n@NgModule({\r\n imports: [RouterModule.forRoot(routes)],\r\n exports: [RouterModule]\r\n})\r\nexport class AppRoutingModule { }\r\n","import * as i0 from '@angular/core';\nimport { Injectable, Pipe, Component, ChangeDetectionStrategy, Input, ViewChild, HostListener, NgModule } from '@angular/core';\nimport { BehaviorSubject, Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\nimport { trigger, state, style, transition, animate } from '@angular/animations';\nimport * as i2 from '@angular/common';\nimport { CommonModule } from '@angular/common';\nimport * as i1 from '@angular/platform-browser';\n\nconst LOADERS = {\n 'ball-8bits': 16,\n 'ball-atom': 4,\n 'ball-beat': 3,\n 'ball-circus': 5,\n 'ball-climbing-dot': 4,\n 'ball-clip-rotate': 1,\n 'ball-clip-rotate-multiple': 2,\n 'ball-clip-rotate-pulse': 2,\n 'ball-elastic-dots': 5,\n 'ball-fall': 3,\n 'ball-fussion': 4,\n 'ball-grid-beat': 9,\n 'ball-grid-pulse': 9,\n 'ball-newton-cradle': 4,\n 'ball-pulse': 3,\n 'ball-pulse-rise': 5,\n 'ball-pulse-sync': 3,\n 'ball-rotate': 1,\n 'ball-running-dots': 5,\n 'ball-scale': 1,\n 'ball-scale-multiple': 3,\n 'ball-scale-pulse': 2,\n 'ball-scale-ripple': 1,\n 'ball-scale-ripple-multiple': 3,\n 'ball-spin': 8,\n 'ball-spin-clockwise': 8,\n 'ball-spin-clockwise-fade': 8,\n 'ball-spin-clockwise-fade-rotating': 8,\n 'ball-spin-fade': 8,\n 'ball-spin-fade-rotating': 8,\n 'ball-spin-rotate': 2,\n 'ball-square-clockwise-spin': 8,\n 'ball-square-spin': 8,\n 'ball-triangle-path': 3,\n 'ball-zig-zag': 2,\n 'ball-zig-zag-deflect': 2,\n 'cog': 1,\n 'cube-transition': 2,\n 'fire': 3,\n 'line-scale': 5,\n 'line-scale-party': 5,\n 'line-scale-pulse-out': 5,\n 'line-scale-pulse-out-rapid': 5,\n 'line-spin-clockwise-fade': 8,\n 'line-spin-clockwise-fade-rotating': 8,\n 'line-spin-fade': 8,\n 'line-spin-fade-rotating': 8,\n 'pacman': 6,\n 'square-jelly-box': 2,\n 'square-loader': 1,\n 'square-spin': 1,\n 'timer': 1,\n 'triangle-skew-spin': 1\n};\nconst DEFAULTS = {\n BD_COLOR: 'rgba(51,51,51,0.8)',\n SPINNER_COLOR: '#fff',\n Z_INDEX: 99999,\n};\nconst PRIMARY_SPINNER = 'primary';\nclass NgxSpinner {\n constructor(init) {\n Object.assign(this, init);\n }\n static create(init) {\n if ((init === null || init === void 0 ? void 0 : init.type) == null || init.type.length === 0) {\n console.warn(`[ngx-spinner]: Property \"type\" is missed. Please, provide animation type to component\n and ensure css is added to angular.json file`);\n }\n return new NgxSpinner(init);\n }\n}\n\nclass NgxSpinnerService {\n /**\n * Creates an instance of NgxSpinnerService.\n * @memberof NgxSpinnerService\n */\n constructor() {\n /**\n * Spinner observable\n *\n * @memberof NgxSpinnerService\n */\n // private spinnerObservable = new ReplaySubject(1);\n this.spinnerObservable = new BehaviorSubject(null);\n }\n /**\n * Get subscription of desired spinner\n * @memberof NgxSpinnerService\n **/\n getSpinner(name) {\n return this.spinnerObservable.asObservable().pipe(filter((x) => x && x.name === name));\n }\n /**\n * To show spinner\n *\n * @memberof NgxSpinnerService\n */\n show(name = PRIMARY_SPINNER, spinner) {\n return new Promise((resolve, _reject) => {\n setTimeout(() => {\n if (spinner && Object.keys(spinner).length) {\n spinner['name'] = name;\n this.spinnerObservable.next(new NgxSpinner(Object.assign(Object.assign({}, spinner), { show: true })));\n resolve(true);\n }\n else {\n this.spinnerObservable.next(new NgxSpinner({ name, show: true }));\n resolve(true);\n }\n }, 10);\n });\n }\n /**\n * To hide spinner\n *\n * @memberof NgxSpinnerService\n */\n hide(name = PRIMARY_SPINNER, debounce = 10) {\n return new Promise((resolve, _reject) => {\n setTimeout(() => {\n this.spinnerObservable.next(new NgxSpinner({ name, show: false }));\n resolve(true);\n }, debounce);\n });\n }\n}\nNgxSpinnerService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.0.3\", ngImport: i0, type: NgxSpinnerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\nNgxSpinnerService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"13.0.3\", ngImport: i0, type: NgxSpinnerService, providedIn: 'root' });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.0.3\", ngImport: i0, type: NgxSpinnerService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }], ctorParameters: function () { return []; } });\n\nclass SafeHtmlPipe {\n constructor(_sanitizer) {\n this._sanitizer = _sanitizer;\n }\n transform(v) {\n if (v) {\n return this._sanitizer.bypassSecurityTrustHtml(v);\n }\n }\n}\nSafeHtmlPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.0.3\", ngImport: i0, type: SafeHtmlPipe, deps: [{ token: i1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Pipe });\nSafeHtmlPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"12.0.0\", version: \"13.0.3\", ngImport: i0, type: SafeHtmlPipe, name: \"safeHtml\" });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.0.3\", ngImport: i0, type: SafeHtmlPipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'safeHtml'\n }]\n }], ctorParameters: function () { return [{ type: i1.DomSanitizer }]; } });\n\nclass NgxSpinnerComponent {\n /**\n * Creates an instance of NgxSpinnerComponent.\n *\n * @memberof NgxSpinnerComponent\n */\n constructor(spinnerService, changeDetector, elementRef) {\n this.spinnerService = spinnerService;\n this.changeDetector = changeDetector;\n this.elementRef = elementRef;\n /**\n * To enable/disable animation\n *\n * @type {boolean}\n * @memberof NgxSpinnerComponent\n */\n this.disableAnimation = false;\n /**\n * Spinner Object\n *\n * @memberof NgxSpinnerComponent\n */\n this.spinner = new NgxSpinner();\n /**\n * Unsubscribe from spinner's observable\n *\n * @memberof NgxSpinnerComponent\n **/\n this.ngUnsubscribe = new Subject();\n /**\n * To set default ngx-spinner options\n *\n * @memberof NgxSpinnerComponent\n */\n this.setDefaultOptions = () => {\n this.spinner = NgxSpinner.create({\n name: this.name,\n bdColor: this.bdColor,\n size: this.size,\n color: this.color,\n type: this.type,\n fullScreen: this.fullScreen,\n divArray: this.divArray,\n divCount: this.divCount,\n show: this.show,\n zIndex: this.zIndex,\n template: this.template,\n showSpinner: this.showSpinner\n });\n };\n this.bdColor = DEFAULTS.BD_COLOR;\n this.zIndex = DEFAULTS.Z_INDEX;\n this.color = DEFAULTS.SPINNER_COLOR;\n this.size = 'large';\n this.fullScreen = true;\n this.name = PRIMARY_SPINNER;\n this.template = null;\n this.showSpinner = false;\n this.divArray = [];\n this.divCount = 0;\n this.show = false;\n }\n handleKeyboardEvent(event) {\n if (this.spinnerDOM && this.spinnerDOM.nativeElement) {\n if (this.fullScreen || (!this.fullScreen && this.isSpinnerZone(event.target))) {\n event.returnValue = false;\n event.preventDefault();\n }\n }\n }\n initObservable() {\n this.spinnerService.getSpinner(this.name)\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe((spinner) => {\n this.setDefaultOptions();\n Object.assign(this.spinner, spinner);\n if (spinner.show) {\n this.onInputChange();\n }\n this.changeDetector.detectChanges();\n });\n }\n /**\n * Initialization method\n *\n * @memberof NgxSpinnerComponent\n */\n ngOnInit() {\n this.setDefaultOptions();\n this.initObservable();\n }\n /**\n * To check event triggers inside the Spinner Zone\n *\n * @param {*} element\n * @returns {boolean}\n * @memberof NgxSpinnerComponent\n */\n isSpinnerZone(element) {\n if (element === this.elementRef.nativeElement.parentElement) {\n return true;\n }\n return element.parentNode && this.isSpinnerZone(element.parentNode);\n }\n /**\n * On changes event for input variables\n *\n * @memberof NgxSpinnerComponent\n */\n ngOnChanges(changes) {\n for (const propName in changes) {\n if (propName) {\n const changedProp = changes[propName];\n if (changedProp.isFirstChange()) {\n return;\n }\n else if (typeof changedProp.currentValue !== 'undefined' && changedProp.currentValue !== changedProp.previousValue) {\n if (changedProp.currentValue !== '') {\n this.spinner[propName] = changedProp.currentValue;\n if (propName === 'showSpinner') {\n if (changedProp.currentValue) {\n this.spinnerService.show(this.spinner.name, this.spinner);\n }\n else {\n this.spinnerService.hide(this.spinner.name);\n }\n }\n if (propName === 'name') {\n this.initObservable();\n }\n }\n }\n }\n }\n }\n /**\n * To get class for spinner\n *\n * @memberof NgxSpinnerComponent\n */\n getClass(type, size) {\n this.spinner.divCount = LOADERS[type];\n this.spinner.divArray = Array(this.spinner.divCount).fill(0).map((_, i) => i);\n let sizeClass = '';\n switch (size.toLowerCase()) {\n case 'small':\n sizeClass = 'la-sm';\n break;\n case 'medium':\n sizeClass = 'la-2x';\n break;\n case 'large':\n sizeClass = 'la-3x';\n break;\n default:\n break;\n }\n return 'la-' + type + ' ' + sizeClass;\n }\n /**\n * Check if input variables have changed\n *\n * @memberof NgxSpinnerComponent\n */\n onInputChange() {\n this.spinner.class = this.getClass(this.spinner.type, this.spinner.size);\n }\n /**\n * Component destroy event\n *\n * @memberof NgxSpinnerComponent\n */\n ngOnDestroy() {\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n }\n}\nNgxSpinnerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.0.3\", ngImport: i0, type: NgxSpinnerComponent, deps: [{ token: NgxSpinnerService }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });\nNgxSpinnerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"13.0.3\", type: NgxSpinnerComponent, selector: \"ngx-spinner\", inputs: { bdColor: \"bdColor\", size: \"size\", color: \"color\", type: \"type\", fullScreen: \"fullScreen\", name: \"name\", zIndex: \"zIndex\", template: \"template\", showSpinner: \"showSpinner\", disableAnimation: \"disableAnimation\" }, host: { listeners: { \"document:keydown\": \"handleKeyboardEvent($event)\" } }, viewQueries: [{ propertyName: \"spinnerDOM\", first: true, predicate: [\"overlay\"], descendants: true }], usesOnChanges: true, ngImport: i0, template: \"
\\n
\\n
\\n
\\n
\\n
\\n \\n
\\n
\", styles: [\".ngx-spinner-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ngx-spinner-overlay>div:not(.loading-text){top:50%;left:50%;margin:0;position:absolute;transform:translate(-50%,-50%)}.loading-text{position:absolute;top:60%;left:50%;transform:translate(-50%,-60%)}\\n\"], directives: [{ type: i2.NgIf, selector: \"[ngIf]\", inputs: [\"ngIf\", \"ngIfThen\", \"ngIfElse\"] }, { type: i2.NgForOf, selector: \"[ngFor][ngForOf]\", inputs: [\"ngForOf\", \"ngForTrackBy\", \"ngForTemplate\"] }], pipes: { \"safeHtml\": SafeHtmlPipe }, animations: [\n trigger('fadeIn', [\n state('in', style({ opacity: 1 })),\n transition(':enter', [\n style({ opacity: 0 }),\n animate(300)\n ]),\n transition(':leave', animate(200, style({ opacity: 0 })))\n ])\n ], changeDetection: i0.ChangeDetectionStrategy.OnPush });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.0.3\", ngImport: i0, type: NgxSpinnerComponent, decorators: [{\n type: Component,\n args: [{ selector: 'ngx-spinner', changeDetection: ChangeDetectionStrategy.OnPush, animations: [\n trigger('fadeIn', [\n state('in', style({ opacity: 1 })),\n transition(':enter', [\n style({ opacity: 0 }),\n animate(300)\n ]),\n transition(':leave', animate(200, style({ opacity: 0 })))\n ])\n ], template: \"
\\n
\\n
\\n
\\n
\\n
\\n \\n
\\n
\", styles: [\".ngx-spinner-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ngx-spinner-overlay>div:not(.loading-text){top:50%;left:50%;margin:0;position:absolute;transform:translate(-50%,-50%)}.loading-text{position:absolute;top:60%;left:50%;transform:translate(-50%,-60%)}\\n\"] }]\n }], ctorParameters: function () { return [{ type: NgxSpinnerService }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }]; }, propDecorators: { bdColor: [{\n type: Input\n }], size: [{\n type: Input\n }], color: [{\n type: Input\n }], type: [{\n type: Input\n }], fullScreen: [{\n type: Input\n }], name: [{\n type: Input\n }], zIndex: [{\n type: Input\n }], template: [{\n type: Input\n }], showSpinner: [{\n type: Input\n }], disableAnimation: [{\n type: Input\n }], spinnerDOM: [{\n type: ViewChild,\n args: ['overlay']\n }], handleKeyboardEvent: [{\n type: HostListener,\n args: ['document:keydown', ['$event']]\n }] } });\n\nclass NgxSpinnerModule {\n}\nNgxSpinnerModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.0.3\", ngImport: i0, type: NgxSpinnerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nNgxSpinnerModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"13.0.3\", ngImport: i0, type: NgxSpinnerModule, declarations: [NgxSpinnerComponent, SafeHtmlPipe], imports: [CommonModule], exports: [NgxSpinnerComponent] });\nNgxSpinnerModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"13.0.3\", ngImport: i0, type: NgxSpinnerModule, imports: [[\n CommonModule\n ]] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.0.3\", ngImport: i0, type: NgxSpinnerModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [\n CommonModule\n ],\n declarations: [NgxSpinnerComponent, SafeHtmlPipe],\n exports: [NgxSpinnerComponent]\n }]\n }] });\n\n/*\n * Public API Surface of ngx-spinner\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { DEFAULTS, LOADERS, NgxSpinner, NgxSpinnerComponent, NgxSpinnerModule, NgxSpinnerService, PRIMARY_SPINNER };\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject, Subject } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LoaderService { \r\n public isLoading = new BehaviorSubject(false);\r\n constructor() {\r\n }\r\n}\r\n","
\r\n
\r\n
\r\n \r\n
","import { OnInit, Component, ViewEncapsulation } from \"@angular/core\";\r\nimport { MatDialog, MatDialogRef } from \"@angular/material/dialog\";\r\nimport { LoaderService } from \"../services/loader.service\";\r\n\r\n@Component({\r\n selector: 'loader-component',\r\n templateUrl: './loader.component.html',\r\n styleUrls: ['./loader.component.scss'],\r\n encapsulation:ViewEncapsulation.None\r\n})\r\n\r\nexport class LoaderComponent implements OnInit {\r\n public loading$;\r\n constructor(public dialog: MatDialog, private ls:LoaderService){\r\n\r\n }\r\n\r\n ngOnInit(): void {\r\n this.loading$ = this.ls.isLoading; \r\n }\r\n\r\n}","import { EventEmitter, Component, ElementRef, Renderer2, Input, Output, NgModule } from '@angular/core';\n\nimport * as ɵngcc0 from '@angular/core';\n\nconst _c0 = [\"*\"];\nclass CdTimerComponent {\n constructor(elt, renderer) {\n this.elt = elt;\n this.renderer = renderer;\n this.onStart = new EventEmitter();\n this.onStop = new EventEmitter();\n this.onTick = new EventEmitter();\n this.onComplete = new EventEmitter();\n // Initialization\n this.autoStart = true;\n this.startTime = 0;\n this.endTime = 0;\n this.timeoutId = null;\n this.countdown = false;\n this.format = 'default';\n }\n ngAfterViewInit() {\n const ngContentNode = this.elt.nativeElement.lastChild; // Get last child, defined by user or span\n this.ngContentSchema = ngContentNode ? ngContentNode.nodeValue : '';\n if (this.autoStart === undefined || this.autoStart === true) {\n this.start();\n }\n }\n ngOnDestroy() {\n this.resetTimeout();\n }\n /**\n * Start the timer\n */\n start() {\n this.initVar();\n this.resetTimeout();\n this.computeTimeUnits();\n this.startTickCount();\n this.onStart.emit(this);\n }\n /**\n * Resume the timer\n */\n resume() {\n this.resetTimeout();\n this.startTickCount();\n }\n /**\n * Stop the timer\n */\n stop() {\n this.clear();\n this.onStop.emit(this);\n }\n /**\n * Reset the timer\n */\n reset() {\n this.initVar();\n this.resetTimeout();\n this.clear();\n this.computeTimeUnits();\n this.renderText();\n }\n /**\n * Get the time information\n * @returns TimeInterface\n */\n get() {\n return {\n seconds: this.seconds,\n minutes: this.minutes,\n hours: this.hours,\n days: this.days,\n timer: this.timeoutId,\n tick_count: this.tickCounter\n };\n }\n /**\n * Initialize variable before start\n */\n initVar() {\n this.startTime = this.startTime || 0;\n this.endTime = this.endTime || 0;\n this.countdown = this.countdown || false;\n this.tickCounter = this.startTime;\n // Disable countdown if start time not defined\n if (this.countdown && this.startTime === 0) {\n this.countdown = false;\n }\n // Determine auto format\n if (!this.format) {\n this.format = (this.ngContentSchema.length > 5) ? 'user' : 'default';\n }\n }\n /**\n * Reset timeout\n */\n resetTimeout() {\n if (this.timeoutId) {\n clearInterval(this.timeoutId);\n }\n }\n /**\n * Render the time to DOM\n */\n renderText() {\n let outputText;\n if (this.format === 'user') {\n // User presentation\n const items = {\n 'seconds': this.seconds,\n 'minutes': this.minutes,\n 'hours': this.hours,\n 'days': this.days\n };\n outputText = this.ngContentSchema;\n for (const key of Object.keys(items)) {\n outputText = outputText.replace('[' + key + ']', items[key].toString());\n }\n }\n else if (this.format === 'intelli') {\n // Intelli presentation\n outputText = '';\n if (this.days > 0) {\n outputText += this.days.toString() + 'day' + ((this.days > 1) ? 's' : '') + ' ';\n }\n if ((this.hours > 0) || (this.days > 0)) {\n outputText += this.hours.toString() + 'h ';\n }\n if (((this.minutes > 0) || (this.hours > 0)) && (this.days === 0)) {\n outputText += this.minutes.toString().padStart(2, '0') + 'min ';\n }\n if ((this.hours === 0) && (this.days === 0)) {\n outputText += this.seconds.toString().padStart(2, '0') + 's';\n }\n }\n else if (this.format === 'hms') {\n // Hms presentation\n outputText = this.hours.toString().padStart(2, '0') + ':';\n outputText += this.minutes.toString().padStart(2, '0') + ':';\n outputText += this.seconds.toString().padStart(2, '0');\n }\n else {\n // Default presentation\n outputText = this.days.toString() + 'd ';\n outputText += this.hours.toString() + 'h ';\n outputText += this.minutes.toString() + 'm ';\n outputText += this.seconds.toString() + 's';\n }\n this.renderer.setProperty(this.elt.nativeElement, 'innerHTML', outputText);\n }\n clear() {\n this.resetTimeout();\n this.timeoutId = null;\n }\n /**\n * Compute each unit (seconds, minutes, hours, days) for further manipulation\n * @protected\n */\n computeTimeUnits() {\n if (!this.maxTimeUnit || this.maxTimeUnit === 'day') {\n this.seconds = Math.floor(this.tickCounter % 60);\n this.minutes = Math.floor((this.tickCounter / 60) % 60);\n this.hours = Math.floor((this.tickCounter / 3600) % 24);\n this.days = Math.floor((this.tickCounter / 3600) / 24);\n }\n else if (this.maxTimeUnit === 'second') {\n this.seconds = this.tickCounter;\n this.minutes = 0;\n this.hours = 0;\n this.days = 0;\n }\n else if (this.maxTimeUnit === 'minute') {\n this.seconds = Math.floor(this.tickCounter % 60);\n this.minutes = Math.floor(this.tickCounter / 60);\n this.hours = 0;\n this.days = 0;\n }\n else if (this.maxTimeUnit === 'hour') {\n this.seconds = Math.floor(this.tickCounter % 60);\n this.minutes = Math.floor((this.tickCounter / 60) % 60);\n this.hours = Math.floor(this.tickCounter / 3600);\n this.days = 0;\n }\n this.renderText();\n }\n /**\n * Start tick count, base of this component\n * @protected\n */\n startTickCount() {\n const that = this;\n that.timeoutId = setInterval(function () {\n let counter;\n if (that.countdown) {\n // Compute finish counter for countdown\n counter = that.tickCounter;\n if (that.startTime > that.endTime) {\n counter = that.tickCounter - that.endTime - 1;\n }\n }\n else {\n // Compute finish counter for timer\n counter = that.tickCounter - that.startTime;\n if (that.endTime > that.startTime) {\n counter = that.endTime - that.tickCounter - 1;\n }\n }\n that.computeTimeUnits();\n const timer = {\n seconds: that.seconds,\n minutes: that.minutes,\n hours: that.hours,\n days: that.days,\n timer: that.timeoutId,\n tick_count: that.tickCounter\n };\n that.onTick.emit(timer);\n if (counter < 0) {\n that.stop();\n that.onComplete.emit(that);\n return;\n }\n if (that.countdown) {\n that.tickCounter--;\n }\n else {\n that.tickCounter++;\n }\n }, 1000); // Each seconds\n }\n}\nCdTimerComponent.ɵfac = function CdTimerComponent_Factory(t) { return new (t || CdTimerComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2)); };\nCdTimerComponent.ɵcmp = /*@__PURE__*/ ɵngcc0.ɵɵdefineComponent({ type: CdTimerComponent, selectors: [[\"cd-timer\"]], inputs: { autoStart: \"autoStart\", startTime: \"startTime\", endTime: \"endTime\", countdown: \"countdown\", format: \"format\", maxTimeUnit: \"maxTimeUnit\" }, outputs: { onStart: \"onStart\", onStop: \"onStop\", onTick: \"onTick\", onComplete: \"onComplete\" }, ngContentSelectors: _c0, decls: 1, vars: 0, template: function CdTimerComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵprojection(0);\n } }, encapsulation: 2 });\nCdTimerComponent.ctorParameters = () => [\n { type: ElementRef },\n { type: Renderer2 }\n];\nCdTimerComponent.propDecorators = {\n startTime: [{ type: Input }],\n endTime: [{ type: Input }],\n countdown: [{ type: Input }],\n autoStart: [{ type: Input }],\n maxTimeUnit: [{ type: Input }],\n format: [{ type: Input }],\n onStart: [{ type: Output }],\n onStop: [{ type: Output }],\n onTick: [{ type: Output }],\n onComplete: [{ type: Output }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CdTimerComponent, [{\n type: Component,\n args: [{\n selector: 'cd-timer',\n template: ' '\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }]; }, { onStart: [{\n type: Output\n }], onStop: [{\n type: Output\n }], onTick: [{\n type: Output\n }], onComplete: [{\n type: Output\n }], autoStart: [{\n type: Input\n }], startTime: [{\n type: Input\n }], endTime: [{\n type: Input\n }], countdown: [{\n type: Input\n }], format: [{\n type: Input\n }], maxTimeUnit: [{\n type: Input\n }] }); })();\n\nclass CdTimerModule {\n}\nCdTimerModule.ɵfac = function CdTimerModule_Factory(t) { return new (t || CdTimerModule)(); };\nCdTimerModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: CdTimerModule });\nCdTimerModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({ imports: [[]] });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(CdTimerModule, [{\n type: NgModule,\n args: [{\n declarations: [CdTimerComponent],\n imports: [],\n exports: [CdTimerComponent]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(CdTimerModule, { declarations: [CdTimerComponent], exports: [CdTimerComponent] }); })();\n\n/*\n * Public API Surface of angular-cd-timer\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { CdTimerComponent, CdTimerModule };\n\n","","import { Component, Input, OnInit, ViewChild } from '@angular/core';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { LanguageCode, operationType } from 'src/app/shared/Models/WidgetSettingsModels';\r\nimport { GuestService } from 'src/app/shared/services/guest.service';\r\nimport { FieldConfig } from 'src/app/shared/dynamicform/models/common-models';\r\nimport { Language, LanguageFileName } from 'src/app/shared/Models/WidgetSettingsModels';\r\nimport { LocalizeService } from 'src/app/shared/services/localize.service';\r\nimport moment from 'moment';\r\nimport { LayoutService } from 'src/app/layout/layout.service';\r\nimport { DEFAULT_LANGUAGE_ID } from 'src/app/shared/constants/commonenums';\r\n\r\n@Component({\r\n selector: 'app-v2-header',\r\n templateUrl: './v2-header.component.html',\r\n styleUrls: ['./v2-header.component.scss']\r\n})\r\nexport class V2HeaderComponent implements OnInit {\r\n @ViewChild('cdTimer') cdTimer: any;\r\n\r\n showTimer: boolean;\r\n hideArrow = false;\r\n hideCart = false;\r\n initialLanguageChange = true;\r\n languageConfig:FieldConfig[];\r\n languageOptions=[];\r\n IsMultiLanguageSelectionEnabled: boolean;\r\n @Input() logoImg = '';\r\n restaurantId:number;\r\n showLanguageDropDown = true;\r\n\r\n constructor(\r\n public activityService: GuestService,\r\n private ts: TranslateService,\r\n private route: ActivatedRoute,\r\n private router: Router,\r\n private localizeService: LocalizeService,\r\n private ls:LayoutService\r\n ) {\r\n this.activityService.restaurantMerchantCode = this.route.snapshot.params.merchantId;\r\n // this.activityService.loadLanguageData(null);\r\n this.activityService.timer.subscribe(val => {\r\n if (val) {\r\n this.showTimer = true;\r\n this.cdTimer.start();\r\n } else {\r\n this.showTimer = false;\r\n this.cdTimer?.stop();\r\n }\r\n });\r\n\r\n this.activityService.hideBackNavigation.subscribe(val => {\r\n if (val) {\r\n this.hideArrow = true;\r\n this.activityService.showLanguageOption = true;\r\n } else {\r\n this.hideArrow = false;\r\n this.activityService.showLanguageOption = false;\r\n }\r\n });\r\n\r\n this.activityService.backNavigateURL.subscribe((val: any) => {\r\n if (val.URL) {\r\n if(val.URL === 'list' && this.activityService.operation === operationType.edit) { this.activityService.emptyCartData(); }\r\n this.activityService.navigateToUrl(val.URL);\r\n }\r\n });\r\n\r\n this.restaurantId = this.activityService.isDining ? this.activityService.selectedDining.RestaurantId\r\n : this.activityService.isNonDining ? this.activityService.selectedNonDining.RestaurantId : this.activityService.selectedActivities.RestaurantId;\r\n\r\n this.activityService.CartBookingList$.subscribe(data => {\r\n const CartList = sessionStorage.getItem('CartList_' + this.activityService.restaurantMerchantCode) ? JSON.parse(sessionStorage.getItem('CartList_' + this.activityService.restaurantMerchantCode)) : [];\r\n this.activityService.cartCount = CartList.length;\r\n });\r\n\r\n this.activityService.hideCart.subscribe(val => {\r\n if (val) {\r\n this.hideCart = true;\r\n } else {\r\n this.hideCart = false;\r\n }\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n this.activityService.restaurantMerchantCode = this.route.snapshot.params.merchantId;\r\n this.activityService.getCartCount();\r\n this.setLanguageConfig();\r\n }\r\n \r\n\r\n\r\n setLanguageConfig(){\r\n this.generateLanguageOptions();\r\n this.activityService.checkLanguageAvailabilityOption();\r\n this.languageConfig = [\r\n {\r\n type: 'select',\r\n name: 'sortBy',\r\n placeholder: '',\r\n options: this.languageOptions || [],\r\n value: this.activityService.selectedLanguageId ? this.activityService.selectedLanguageId : DEFAULT_LANGUAGE_ID,\r\n showErrorText: true,\r\n isTranslate: true,\r\n appearance: false,\r\n cellClick: this.setDefaultLanguage.bind(this),\r\n class: 'header__language',\r\n isFormArray: false,\r\n appearanceOutline: true,\r\n label: this.ts.instant('language')\r\n }\r\n ];\r\n const url = new URL(window.location.href);\r\n let language = this.route.snapshot.params['language'] || url.searchParams.get('language');\r\n if(language){\r\n this.activityService.selectedLanguageId = Number(LanguageFileName[language]);\r\n this.languageConfig[0].value = this.activityService.selectedLanguageId;\r\n this.languageConfig = [...this.languageConfig];\r\n }\r\n if(!language){\r\n \r\n language = this.route.snapshot.queryParams['language'];\r\n language = language?.toLowerCase();\r\n this.languageConfig[0].value = language ? LanguageFileName[language] : sessionStorage.getItem('languageId') ? Number(sessionStorage.getItem('languageId')): DEFAULT_LANGUAGE_ID ;\r\n this.languageConfig = [...this.languageConfig];\r\n this.setLanguage({value: sessionStorage.getItem('languageId') ? sessionStorage.getItem('languageId') : DEFAULT_LANGUAGE_ID}, language)\r\n }\r\n }\r\n\r\n setDefaultLanguage(event){\r\n if(this.initialLanguageChange){\r\n sessionStorage.setItem('languageId',event.value);\r\n this.activityService.selectedLanguageId = Number(event.value);\r\n this.initialLanguageChange = false;\r\n this.activityService.loadLanguageData(true);\r\n\r\n }\r\n this.setLanguage(event)\r\n }\r\n\r\n navigate(){\r\n if(this.activityService.mealWithConfig){\r\n }\r\n else{\r\n this.activityService.navigateToHome();\r\n }\r\n }\r\n\r\n onTimerComplete(event) {\r\n if (this.activityService.currentNavURL === 'order-summary') {\r\n this.showTimer = false;\r\n this.activityService.navigateToUrl('list');\r\n }\r\n }\r\n\r\n cartProceed() {\r\n if (this.activityService.getCartCount() === 0) {\r\n this.activityService.\r\n openSnackBar(this.ts.instant('addItemstoCarttoProceed'), this.ts.instant('close'), this.activityService.ConfigSettings.snackBarTime);\r\n return false;\r\n }\r\n this.activityService.lockMultiPropertySessionsfn(this.activityService.restaurantMerchantCode, true);\r\n }\r\n generateLanguageOptions(){\r\n this.activityService.widgetConfigurations.subscribe((data : any) => {\r\n this.IsMultiLanguageSelectionEnabled = data.IsMultiLanguageSelectionEnabled;\r\n\r\n if(data.Languages?.length)\r\n this.activityService.availableLanguages = data.Languages;\r\n this.languageOptions = data.Languages.map(language => { return { id: language.Id , value: language.DisplayName}});\r\n this.languageConfig[0].options = this.languageOptions;\r\n this.languageConfig[0].value = this.activityService.selectedLanguageId ? this.activityService.selectedLanguageId : this.languageOptions[0].id;\r\n })\r\n }\r\n\r\n\r\n /* setting language on change of drop down */\r\n setLanguage(event ,language?) {\r\n\r\n if(language && this.activityService.availableLanguages){\r\n event.value = this.activityService.availableLanguages.find(lng => lng.Name.toLowerCase() == language)?.Id || DEFAULT_LANGUAGE_ID\r\n }\r\n\r\n let selectedLanguage=LanguageFileName[event.value];\r\n sessionStorage.setItem('languageId', event.value)\r\n sessionStorage.setItem('languageCode', LanguageCode[selectedLanguage]);\r\n this.activityService.selectedLanguage = selectedLanguage;\r\n this.activityService.languageFileChanges.next(true);\r\n this.activityService.selectedLanguageId = event.value;\r\n this.localizeService.setLanguage(selectedLanguage, 'universal' , sessionStorage.getItem('restaurantMerchantCode'));\r\n \r\n \r\n }\r\n\r\n setLanguageConstant(lngConstants){\r\n this.activityService.languageConstants =[];\r\n lngConstants.forEach(lngConst => {\r\n this.activityService.languageConstants[lngConst.LanguageKey] = JSON.parse(lngConst.LanguageValue);\r\n })\r\n \r\n }\r\n\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-v2-footer',\r\n templateUrl: './v2-footer.component.html',\r\n styleUrls: ['./v2-footer.component.scss']\r\n})\r\nexport class V2FooterComponent implements OnInit {\r\n\r\n constructor() { }\r\n\r\n currentYear: number = (new Date()).getFullYear()\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n}\r\n","
\r\n
","\r\n
\r\n \r\n \r\n
\r\n
\r\n\r\n\r\n
\r\n \r\n
\r\n \"\"\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n\r\n
\r\n \r\n

{{'LoadingText' | translate }}...

\r\n
\r\n
\r\n
\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { NgxSpinnerService } from 'ngx-spinner';\r\nimport { AppInitializer } from './app-initializer';\r\nimport { GuestService } from './shared/services/guest.service';\r\n\r\n@Component({\r\n selector: 'app-root',\r\n templateUrl: './app.component.html',\r\n styleUrls: ['./app.component.scss']\r\n})\r\nexport class AppComponent implements OnInit {\r\n\r\n title = 'seat-widget';\r\n loader: boolean;\r\n bannerImg = '';\r\n logoImg = '';\r\n backgroundImg = '';\r\n widgetSettings: any = {};\r\n\r\n constructor(\r\n private appIntializer: AppInitializer,\r\n public gs: GuestService,\r\n private spinner: NgxSpinnerService\r\n ) {\r\n\r\n const configSettings = this.appIntializer.appConfigSettings();\r\n this.gs.ConfigSettings = configSettings;\r\n this.gs.loader.subscribe(val => {\r\n if (val) {\r\n this.spinner.show();\r\n this.loader = true;\r\n } else {\r\n this.loader = false;\r\n this.spinner.hide();\r\n }\r\n });\r\n\r\n this.gs.merchantImgUrl.subscribe((images: any) => {\r\n this.bannerImg = images.bannerImg;\r\n this.logoImg = images.logoImg;\r\n this.backgroundImg = images.backgroundImg;\r\n });\r\n\r\n }\r\n\r\n ngOnInit() {\r\n this.gs.widgetConfigurations.subscribe(config => { this.widgetSettings = config });\r\n }\r\n}\r\n\r\n","
\r\n \r\n \r\n
\r\n
\r\n
{{activityService.restaurantWidgetName}}
\r\n
\r\n
\r\n location_on\r\n  {{propertyLocation}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n shopping_cart\r\n 0\">{{activityService.cartCount}}\r\n \r\n
\r\n
\r\n
{{'language' | translate}}
\r\n
\r\n \r\n
\r\n
\r\n
","import { Component, Input, OnInit, Output, EventEmitter, OnDestroy } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { ActivityTabs, ComponentTypes, DEFAULT_LANGUAGE_ID } from 'src/app/shared/constants/commonenums';\r\nimport { FieldConfig } from 'src/app/shared/dynamicform/models/common-models';\r\nimport { ComponentDetails } from 'src/app/shared/dynamicform/models/popup.interface';\r\nimport { Language, LanguageFileName } from 'src/app/shared/Models/WidgetSettingsModels';\r\nimport { GuestService } from 'src/app/shared/services/guest.service';\r\nimport { LocalizeService } from 'src/app/shared/services/localize.service';\r\nimport { PopupService } from 'src/app/shared/services/popup.service';\r\nimport { Utilities } from 'src/app/shared/utilities/utilities';\r\nimport { ActivitiesService } from '../../activities.service';\r\nimport { LayoutService } from 'src/app/layout/layout.service';\r\nimport moment from 'moment';\r\n\r\n\r\n@Component({\r\n selector: 'app-activity-common-header',\r\n templateUrl: './activity-common-header.component.html',\r\n styleUrls: ['./activity-common-header.component.scss']\r\n})\r\nexport class ActivityCommonHeaderComponent extends Utilities implements OnInit, OnDestroy {\r\n @Input() propertyName;\r\n @Output() headerData = new EventEmitter();\r\n propertyLocation: string;\r\n propertyInfo: any;\r\n subscriptions: Subscription = new Subscription();\r\n SelectedLanguage: any;\r\n languageConfig: FieldConfig[];\r\n languageOptions = [];\r\n isCartEnabled: boolean;\r\n initialLanguageChange = true;\r\n constructor(private translateService: TranslateService, public activityService: GuestService, public dialog: MatDialog,\r\n public ps: PopupService, private localizeService: LocalizeService, private route: ActivatedRoute,private ls: LayoutService, private router: Router) {\r\n super(dialog);\r\n this.subscriptions.add(this.activityService.CartBookingList$.subscribe(data => {\r\n const CartList = JSON.parse(sessionStorage.getItem('CartList'));\r\n this.activityService.cartCount = CartList.length;\r\n }));\r\n this.subscriptions.add(this.activityService.restaurantWidgetSettings$.subscribe(value => {\r\n if (value) {\r\n this.propertyInfo = value;\r\n this.isCartEnabled = value.IsCartEnabled;\r\n this.getPropLocation(this.propertyInfo);\r\n }\r\n }))\r\n }\r\n\r\n ngOnInit(): void {\r\n this.generateLanguageOptions();\r\n this.SelectedLanguage = this.languageOptions[0].id\r\n this.languageConfig = [\r\n {\r\n type: 'select',\r\n name: 'sortBy',\r\n placeholder: '',\r\n options: this.languageOptions,\r\n value: this.activityService.selectedLanguageId ? this.activityService.selectedLanguageId : this.languageOptions[0].id,\r\n showErrorText: true,\r\n isTranslate: true,\r\n appearance: false,\r\n cellClick: this.setDefaultLanguage.bind(this),\r\n class: 'header__language',\r\n isFormArray: false\r\n }\r\n ];\r\n const url = new URL(window.location.href);\r\n let language = this.route.snapshot.params['language'] || url.searchParams.get('language');\r\n if(language){\r\n this.activityService.selectedLanguageId = Number(LanguageFileName[language]);\r\n this.languageConfig[0].value = this.activityService.selectedLanguageId;\r\n this.languageConfig = [...this.languageConfig];\r\n }\r\n if(!language){\r\n const url = new URL(window.location.href);\r\n language = this.route.snapshot.queryParams['language']; \r\n this.languageConfig[0].value = language ? language.toLowerCase() : sessionStorage.getItem('languageId')? Number(sessionStorage.getItem('languageId')) :LanguageFileName.english;\r\n this.setLanguage({value: sessionStorage.getItem('languageId') ? Number(sessionStorage.getItem('languageId')) : this.languageOptions[0].id},language)\r\n }\r\n }\r\n\r\n setDefaultLanguage(event){\r\n if(this.initialLanguageChange){\r\n sessionStorage.setItem('languageId',event.value)\r\n this.activityService.selectedLanguageId = Number(event.value);\r\n this.activityService.loadLanguageData(true);\r\n this.initialLanguageChange = false;\r\n }\r\n this.setLanguage(event)\r\n }\r\n /* setting language on change of drop down */\r\n setLanguage(event,language?) {\r\n // moment.locale(this.activityService.availableLanguages.find(lang => lang.Id == event.value)?.Code)\r\n if(language && this.activityService.availableLanguages){\r\n event.value = this.activityService.availableLanguages.find(lng => lng.Name.toLowerCase() == language)?.Id || DEFAULT_LANGUAGE_ID\r\n }\r\n this.activityService.selectedLanguageId = event.value;\r\n sessionStorage.setItem('languageId',event.value)\r\n let selectedLanguage=LanguageFileName[event.value];\r\n this.localizeService.setLanguage(selectedLanguage, this.activityService.restaurantWidgetSettings$.value.PropertyType.toLowerCase());\r\n this.activityService.languageFileChanges.next(true);\r\n }\r\n\r\n generateLanguageOptions() {\r\n // Object.keys(Language).map(x => {\r\n // if (!isNaN(Number(x))) {\r\n // this.languageOptions.push({ id: Number(x), value: Language[Number(x)] })\r\n // }\r\n // });\r\n this.activityService.restaurantWidgetSettings$.subscribe((data : any) => {\r\n if(data.Languages?.length)\r\n this.activityService.availableLanguages = data.Languages;\r\n this.languageOptions = data.Languages.map(language => { return { id: language.Id , value: language.DisplayName}});\r\n this.languageConfig[0].options = this.languageOptions;\r\n this.languageConfig[0].value = this.languageOptions[0].id;\r\n })\r\n }\r\n\r\n getPropLocation(propertyInfo) {\r\n if (propertyInfo) {\r\n let headerValue = '';\r\n if (propertyInfo.Street1) {\r\n headerValue = headerValue + propertyInfo.Street1;\r\n }\r\n if (propertyInfo.Street2) {\r\n headerValue = headerValue + ', ' + propertyInfo.Street2;\r\n }\r\n if (propertyInfo.City) {\r\n headerValue = headerValue + ', ' + propertyInfo.City;\r\n }\r\n if (propertyInfo.State) {\r\n headerValue = headerValue + ', ' + propertyInfo.State;\r\n }\r\n if (propertyInfo.Country) {\r\n headerValue = headerValue + ', ' + propertyInfo.Country;\r\n }\r\n this.propertyLocation = headerValue;\r\n\r\n }\r\n }\r\n ngOnDestroy(): void {\r\n if (this.subscriptions) { this.subscriptions.unsubscribe(); }\r\n }\r\n\r\n showCartItems() {\r\n this.activityService.TabChange$.next(ActivityTabs.CartDetails); \r\n }\r\n}\r\n","
\r\n {{message.message | translate}}\r\n\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n\r\n \r\n
","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { buttonTypes } from 'src/app/shared/constants/commonenums';\r\nimport { ButtonValue } from 'src/app/shared/dynamicform/models/common-models';\r\nimport { GuestService } from 'src/app/shared/services/guest.service';\r\n\r\n@Component({\r\n selector: 'app-message',\r\n templateUrl: './message.component.html',\r\n styleUrls: ['./message.component.scss']\r\n})\r\nexport class MessageComponent implements OnInit {\r\n @Output() closeEvent = new EventEmitter();\r\n primaryButton: ButtonValue;\r\n secondaryButton: ButtonValue;\r\n\r\n constructor(public gs: GuestService) { }\r\n\r\n @Input() messageInfo: any;\r\n message: any;\r\n\r\n\r\n closeMessage() {\r\n this.gs.bShowOverbookingErrorDialog = false;\r\n this.closeEvent.emit();\r\n }\r\n ngOnInit(): void {\r\n this.message = this.messageInfo;\r\n // if(this.gs.bShowOverbookingErrorDialog) {\r\n // this.message.message += ' Are you sure you want to proceed?';\r\n // }\r\n this.primaryButton = {\r\n type: buttonTypes.confirmBtn,\r\n label: 'Yes',\r\n customclass: 'guest-details__confirm-btn',\r\n disbaledproperity: false\r\n };\r\n\r\n this.secondaryButton = {\r\n type: buttonTypes.cancelBtn,\r\n label: 'No',\r\n customclass: 'guest-details__cancel-btn',\r\n disbaledproperity: false\r\n };\r\n }\r\n\r\n emitOverlapBookingproceedEvent() {\r\n this.gs.bShowOverbookingErrorDialog = false;\r\n this.gs.allowOverlapBookings = true;\r\n this.gs.overlapBookingproceedEvent.next({proceedOverlapBooking: true, isOverlapErrorFromValidateCartApi: this.gs.isOverlapErrorFromValidateCartApi});\r\n this.closeEvent.emit();\r\n }\r\n\r\n}\r\n","
\r\n \r\n
\r\n \r\n \r\n {{'MemberType'\r\n |\r\n translate}} :\r\n {{activityService.selectedGuest.MembershipType}}\r\n \r\n {{'InvalidMembershipDetail'\r\n | translate}}\r\n ({{membershipStatus}})\r\n \r\n \r\n
\r\n
\r\n
\r\n {{option.day}}\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n\r\n
","import { Component, EventEmitter, OnDestroy, OnInit, Output, QueryList, ViewChild, ViewChildren } from '@angular/core';\r\nimport { Validators } from '@angular/forms';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport * as _ from 'lodash';\r\nimport { Subscription } from 'rxjs';\r\nimport { buttonTypes } from 'src/app/shared/constants/commonenums';\r\nimport { DynamicFormComponent } from 'src/app/shared/dynamicform/dynamic-form/dynamic-form.component';\r\nimport { ButtonValue, FieldConfig } from 'src/app/shared/dynamicform/models/common-models';\r\nimport { FilterDTO } from 'src/app/shared/Models/PartyModels';\r\nimport { GuestService } from 'src/app/shared/services/guest.service';\r\nimport { activityStatus } from '../../../shared/constants/commonenums';\r\nimport { operationType } from 'src/app/shared/Models/WidgetSettingsModels';\r\nimport { DynamicFormService } from 'src/app/shared/dynamicform/service/dynamic-form.service';\r\n\r\n@Component({\r\n selector: 'app-activity-filter',\r\n templateUrl: './activity-filter.component.html',\r\n styleUrls: ['./activity-filter.component.scss']\r\n})\r\nexport class ActivityFilterComponent implements OnInit, OnDestroy {\r\n @Output() filterData = new EventEmitter<[]>();\r\n @Output() resetData = new EventEmitter();\r\n reservationConfig: FieldConfig[];\r\n membershipConfig: FieldConfig[];\r\n previousButton: ButtonValue;\r\n nextButton: ButtonValue;\r\n SelectedActivityData: any;\r\n locationList: any[];\r\n instructorList: any[];\r\n daysCount = [];\r\n hasMembershipValue: boolean = false;\r\n picker: any;\r\n filteredSessions: any = [];\r\n membershipValid: boolean;\r\n membershipStatus: string ;\r\n inputvalidation : boolean = false;\r\n days = [{ id: 1, day: 'Monday' }, { id: 2, day: 'Tuesday' },\r\n { id: 3, day: 'Wednesday' }, { id: 4, day: 'Thursday' },\r\n { id: 5, day: 'Friday' }, { id: 6, day: 'Saturday' }, { id: 0, day: 'Sunday' }];\r\n @ViewChild('reservationConfigForm', { static: true }) reservationConfigForm: DynamicFormComponent;\r\n @ViewChild('coverTypeForm', { static: true }) coverTypeForm: DynamicFormComponent;\r\n @ViewChildren('form') components: QueryList;\r\n Subscriptions: Subscription = new Subscription();\r\n constructor(private ts: TranslateService, public activityService: GuestService, public dynamicFormService: DynamicFormService) {\r\n this.Subscriptions.add(this.activityService.filterAvailabilities.subscribe(data => {\r\n if(data === true && this.filteredSessions && this.filteredSessions.length > 0) {\r\n this.getFilterValues();\r\n }\r\n }))\r\n }\r\n\r\n ngOnInit(): void {\r\n this.locationList = this.activityService.LocationList;\r\n if (this.activityService.InstructorList) {\r\n this.instructorList = _.orderBy(this.activityService.InstructorList, ['Name'], ['asc']);\r\n }\r\n this.createReservationConfig();\r\n this.createActionButtons();\r\n }\r\n ngAfterViewInit() {\r\n this.components.forEach(x => {\r\n x.form.valueChanges.subscribe(value => {\r\n if(value.StartDate){ \r\n this.setMindate(value);\r\n }\r\n if(value.MembershipId){\r\n this.inputvalidation = this.dynamicFormService.inputvalidation(value.MembershipId);\r\n }\r\n if(!this.inputvalidation){\r\n this.nextButton.disbaledproperity = false;\r\n }else{\r\n this.nextButton.disbaledproperity = true;\r\n }\r\n })\r\n });\r\n }\r\n setMindate(value){\r\n this.reservationConfig[4].minDate = value.StartDate;\r\n if(value.EndDate || value.EndDate !== null ){\r\n if(value.EndDate < value.StartDate){\r\n this.reservationConfig[4].value = value.StartDate;\r\n }\r\n }\r\n }\r\n createReservationConfig() {\r\n this.membershipConfig = [{\r\n type: 'input',\r\n label: this.ts.instant('MembershipID'),\r\n name: 'MembershipId',\r\n inputType: 'text',\r\n class: 'guest-details__first-name',\r\n showErrorText: true,\r\n appearance: true,\r\n isFormArray: false,\r\n validation: [Validators.required],\r\n hide: this.activityService.operation == operationType.edit,\r\n }];\r\n this.reservationConfig = [\r\n\r\n {\r\n type: 'select',\r\n name: 'InProgress',\r\n placeholder: '',\r\n options: [{ id: 0, value: activityStatus[0] }, { id: 1, value: activityStatus[1] }, { id: 2, value: activityStatus[2] }],\r\n appearance: true,\r\n isFormArray: false,\r\n label: this.ts.instant('ActivityDates'),\r\n class: \"reservation-details__party-size\",\r\n validation: [Validators.required],\r\n value: 0\r\n },\r\n {\r\n type: 'select',\r\n name: 'LocationId',\r\n placeholder: '',\r\n options: this.locationList.map(x => ({ id: x.Id, value: x.Name })),\r\n appearance: true,\r\n isFormArray: false,\r\n label: this.ts.instant('SelectaLocation'),\r\n class: \"reservation-details__party-size\",\r\n validation: [Validators.required],\r\n },\r\n {\r\n type: 'select',\r\n name: 'InstructorId',\r\n placeholder: '',\r\n options: this.instructorList.map(x => ({ id: x.Id, value: x.Name + ' ' + (x.LastName || '') })),\r\n appearance: true,\r\n isFormArray: false,\r\n label: this.ts.instant('SelectaInstructor'),\r\n class: \"reservation-details__party-size\",\r\n validation: [Validators.required],\r\n },\r\n {\r\n type: 'date',\r\n name: 'StartDate',\r\n placeholder: '',\r\n minDate: new Date(),\r\n appearance: true,\r\n isFormArray: false,\r\n label: this.ts.instant('FromDate'),\r\n class: \"reservation-details__date\",\r\n validation: [Validators.required],\r\n },\r\n {\r\n type: 'date',\r\n name: 'EndDate',\r\n placeholder: '',\r\n minDate: new Date(),\r\n appearance: true,\r\n isFormArray: false,\r\n label: this.ts.instant('ToDate'),\r\n class: \"reservation-details__date\",\r\n validation: [Validators.required],\r\n },\r\n {\r\n type: 'time',\r\n name: 'StartTime',\r\n placeholder: '',\r\n appearance: true,\r\n isFormArray: false,\r\n label: this.ts.instant('StartTime'),\r\n class: \"reservation-details__date\",\r\n validation: [Validators.required],\r\n },\r\n {\r\n type: 'time',\r\n name: 'EndTime',\r\n placeholder: '',\r\n appearance: true,\r\n isFormArray: false,\r\n label: this.ts.instant('EndTime'),\r\n class: \"reservation-details__date\",\r\n validation: [Validators.required],\r\n },\r\n ];\r\n }\r\n createActionButtons() {\r\n this.previousButton = {\r\n type: buttonTypes.cancelBtn,\r\n label: this.ts.instant('clearAll'),\r\n customclass: 'reservation-details__previous-btn',\r\n };\r\n this.nextButton = {\r\n type: buttonTypes.confirmBtn,\r\n label: this.ts.instant('apply'),\r\n customclass: 'guest-details__confirm-btn',\r\n disbaledproperity: true\r\n };\r\n }\r\n getFilterValues() {\r\n const FilterObj = {} as FilterDTO;\r\n const [memberFormGroup, filterFormGroup] = this.components;\r\n FilterObj.MembershipId = memberFormGroup.form.get(\"MembershipId\").value;\r\n if(FilterObj.MembershipId){\r\n this.hasMembershipValue = FilterObj.MembershipId.length > 0;\r\n }\r\n FilterObj.InProgress = filterFormGroup.form.get(\"InProgress\").value;\r\n FilterObj.LocationId = filterFormGroup.form.get(\"LocationId\").value;\r\n FilterObj.InstructorId = filterFormGroup.form.get(\"InstructorId\").value;\r\n FilterObj.StartDate = filterFormGroup.form.get(\"StartDate\").value;\r\n FilterObj.EndDate = filterFormGroup.form.get(\"EndDate\").value;\r\n FilterObj.StartTime = filterFormGroup.form.get(\"StartTime\").value;\r\n FilterObj.EndTime = filterFormGroup.form.get(\"EndTime\").value;\r\n this.filterPayLoad(FilterObj)\r\n }\r\n filterPayLoad(filterObj) {\r\n const requestedObject = {\r\n MembershipId: filterObj.MembershipId,\r\n ActivityState: filterObj.InProgress,\r\n LocationId: filterObj.LocationId,\r\n InstructorId: filterObj.InstructorId,\r\n StartDate: filterObj.StartDate === undefined ? null : new Date(filterObj.StartDate).toDateString() ,//(moment(filterObj.StartDate).format()).split(\"+\")[0],\r\n EndDate: filterObj.EndDate === undefined ? null :new Date(filterObj.EndDate).toDateString() ,//(moment(filterObj.EndDate).format()).split(\"+\")[0],\r\n StartTime: filterObj.StartTime,\r\n EndTime: filterObj.EndTime,\r\n filteredDays: this.daysCount\r\n }\r\n for (let [key, value] of Object.entries(requestedObject)) {\r\n if(value === undefined || value === '' || value === 'Invalid date')\r\n {\r\n requestedObject[key] = null;\r\n }\r\n }\r\n this.Subscriptions.add(this.activityService.GetFilterValues(requestedObject).subscribe(response => {\r\n const memberShipdetail = response.Payload.Contact;\r\n if(this.hasMembershipValue && response.Payload.Contact && response.Payload.Contact.MembershipType){\r\n this.membershipValid = true;\r\n }else{\r\n this.membershipValid = false;\r\n }\r\n if (response.Payload.Contact) {\r\n let editPartyData = {\r\n Contact: {},\r\n };\r\n const memberType = this.activityService.restaurantWidgetSettings$.value.AllocationMappings.find(allocation => allocation.AllocationTypeName.trim().toLocaleLowerCase() === memberShipdetail.MembershipType.trim().toLocaleLowerCase());\r\n const guestObject = {\r\n FirstName: memberShipdetail.FName,\r\n LastName: memberShipdetail.LName,\r\n EmailAddress: memberShipdetail.Email,\r\n PhoneNumber: memberShipdetail.PhoneNumber,\r\n CountryId: this.activityService.getCountryId(memberShipdetail.PhoneCode),\r\n PIILastUsedDate: null,\r\n EmailAddress2: memberShipdetail.EmailList ? memberShipdetail.EmailList[1]?.EmailId : null,\r\n PhoneNumber2:memberShipdetail.PhoneList ? memberShipdetail.PhoneList[1]?.PhoneNumber: memberShipdetail.PhoneNumber,\r\n Birthday: memberShipdetail.Dob,\r\n ContactCustomFields: [],\r\n Notes: [],\r\n VisitStats: [],\r\n MarketingOptedIn: null,\r\n memberShipId: memberShipdetail.CardNo,\r\n MembershipType: memberShipdetail.MembershipType,\r\n MemberActive: memberShipdetail.MembershipStatus?.toLowerCase() === \"active\"\r\n }\r\n this.membershipStatus = memberShipdetail.MembershipStatus;\r\n editPartyData.Contact = guestObject;\r\n this.activityService.editPartyData$.next(editPartyData);\r\n this.activityService.selectedGuest = guestObject;\r\n this.activityService.selectedGuest.TrackMembershipNumber = memberShipdetail.CardNo; //\r\n this.activityService.membershipId = guestObject.MemberActive ? this.activityService.restaurantWidgetSettings$.value.AllocationMappings.find(x => x.AllocationTypeName.trim().toLowerCase() == response.Payload.Contact.MembershipType.trim().toLowerCase())?.AllocationTypeId : null;\r\n } else {\r\n this.activityService.membershipId = null;\r\n }\r\n const lessons = response.Payload.Lessons;\r\n lessons.forEach(lesson => {\r\n lesson.AvailableSlots = this.activityService.restaurantWidgetSettings$.value.AvailableSpecialMeals?.find(x => x.Id == lesson.Id)?.AvailableSlots;\r\n lesson.ImageData = this.activityService.restaurantWidgetSettings$.value.AvailableSpecialMeals?.find(x => x.Id == lesson.Id)?.ImageData;\r\n });\r\n this.filteredSessions = response.Payload.Lessons;\r\n this.filterData.emit(response.Payload.Lessons)\r\n }))\r\n }\r\n getFormValue(formObj, fieldName) {\r\n return formObj && formObj.form.get(fieldName)?.value;\r\n }\r\n getAvailableDays(id) {\r\n let daysArr = [];\r\n if (this.daysCount.includes(id)) {\r\n _.map(this.daysCount, (day) => {\r\n if (day !== id) {\r\n daysArr.push(day)\r\n }\r\n });\r\n this.daysCount = daysArr;\r\n } else {\r\n this.daysCount.push(id);\r\n }\r\n this.nextButton.disbaledproperity = false;\r\n }\r\n resetFilter() {\r\n const [memberFormGroup, filterFormGroup] = this.components;\r\n memberFormGroup.form.reset(\"MembershipId\");\r\n filterFormGroup.form.reset(\"InProgress\");\r\n filterFormGroup.form.reset(\"LocationId\");\r\n filterFormGroup.form.reset(\"InstructorId\");\r\n filterFormGroup.form.reset(\"StartDate\");\r\n filterFormGroup.form.reset(\"EndDate\");\r\n filterFormGroup.form.reset(\"StartTime\");\r\n filterFormGroup.form.reset(\"EndTime\");\r\n this.daysCount = [];\r\n this.activityService.selectedGuest = null;\r\n this. hasMembershipValue = false;\r\n this.activityService.editPartyData$.next(null);\r\n this.activityService.membershipId = null;\r\n this.resetData.emit(true);\r\n this.createReservationConfig();\r\n }\r\n checkAvailability(id) {\r\n return this.daysCount.includes(id) ? true : false;\r\n }\r\n checkAvailableDate(id) {\r\n if (this.daysCount.includes(id)) {\r\n return true;\r\n }\r\n else {\r\n false;\r\n }\r\n }\r\n ngOnDestroy(): void {\r\n if (this.Subscriptions) { this.Subscriptions.unsubscribe(); }\r\n }\r\n}\r\n","
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \"banner-img\"\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n {{'SelectanavailableClass' | translate}}\r\n
\r\n
\r\n\r\n
\r\n
\r\n\r\n
\r\n \r\n \r\n
\r\n
\r\n 0;\">\r\n
\r\n
\r\n
\r\n \r\n  \r\n \r\n {{ 'NotAvailable' | translate }}\r\n
\r\n
\r\n  \r\n \r\n {{ 'available' | translate }}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n 0; else availableResultBlock\">\r\n\r\n\r\n
\r\n
\r\n
\r\n
\r\n {{class.LessonName}}\r\n
\r\n
\r\n {{class.LocationName}}\r\n
\r\n
\r\n {{class.Availability}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n \r\n {{column.header | translate}}\r\n \r\n \r\n \r\n {{element[column.field] |\r\n date:'MM/dd/yyyy'}}\r\n {{element[column.field]}}\r\n {{activityService.OperationCurrency}}{{element[column.field]| currencyDecimalFormatter}}\r\n {{activityService.OperationCurrency}}{{ 0 | currencyDecimalFormatter}}\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n
\r\n {{'Noclassavailable' | translate}}
\r\n
\r\n
\r\n \r\n

{{'Noclassavailable' | translate}}

\r\n
\r\n
\r\n
\r\n
\r\n
","import { AfterViewInit, Component, OnInit, QueryList, ViewChildren, ViewEncapsulation, OnDestroy } from '@angular/core';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport * as _ from 'lodash';\r\nimport { Subscription } from 'rxjs';\r\nimport { ActivityTabs } from 'src/app/shared/constants/commonenums';\r\nimport { DynamicFormComponent } from 'src/app/shared/dynamicform/dynamic-form/dynamic-form.component';\r\nimport { FieldConfig } from 'src/app/shared/dynamicform/models/common-models';\r\nimport { BookingActivity, LessonTypes } from 'src/app/shared/Models/SessionBookingDTO';\r\nimport { operationType } from 'src/app/shared/Models/WidgetSettingsModels';\r\nimport { GuestService } from 'src/app/shared/services/guest.service';\r\n\r\n@Component({\r\n selector: 'app-activity-class-booking',\r\n templateUrl: './activity-class-booking.component.html',\r\n styleUrls: ['./activity-class-booking.component.scss'],\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class ActivityClassBookingComponent implements OnInit, AfterViewInit, OnDestroy {\r\n cols = [\r\n { field: 'LessonName', header: 'ActivityName', style: { 'width': '20%' },availability:true },\r\n { field: 'LocationName', header: 'Location', style: { 'width': '18%' },availability:true },\r\n { field: 'Staffs', header: 'Instructor', style: { 'width': '17%' },availability:true },\r\n { field: 'Availability', header: 'Availability', style: { 'width': '15%' },availability:true },\r\n { field: 'StartDate', header: 'startDate', style: { 'width': '10%' }, alignRight: true, isDate: true,availability:true },\r\n { field: 'EndDate', header: 'endDate', style: { 'width': '10%' }, alignRight: true, isDate: true,availability:true},\r\n { field: 'BaseRate', header: 'BasePrice', style: { 'width': '10%' }, alignRight: true, isCurrency: true ,availability:true },\r\n ];\r\n columnsToDisplay: any = [];\r\n filterDataGridList: MatTableDataSource;\r\n isListView = false;\r\n search_config: FieldConfig[];\r\n availableActivities: any[];\r\n tempAvailableActivities: any[];\r\n lessonType = 0;\r\n Subscriptions: Subscription = new Subscription();\r\n @ViewChildren('form') components: QueryList;\r\n\r\n constructor(public activityService: GuestService, public ts: TranslateService) {\r\n this.Subscriptions.add(this.activityService.allClassActivitiesAvailable$.subscribe(value => {\r\n this.availableActivities = value;\r\n this.tempAvailableActivities = value;\r\n }));\r\n this.Subscriptions.add(this.activityService.bookingSection$.subscribe(data => {\r\n if (data === BookingActivity.ClassBooking) {\r\n this.lessonType = LessonTypes.GroupLesson;\r\n } else if (data === BookingActivity.PrivateLesson) {\r\n this.lessonType = LessonTypes.PrivateLesson;\r\n }\r\n this.availableActivities = this.availableActivities.filter(x => x.LessonType === this.lessonType);\r\n this.tempAvailableActivities = this.tempAvailableActivities.filter(x => x.LessonType === this.lessonType);\r\n }));\r\n }\r\n\r\n ngOnInit(): void {\r\n if(this.lessonType == LessonTypes.PrivateLesson){\r\n this.cols[6].availability = false;\r\n this.cols[1].style = { 'width': '25%' }\r\n this.cols[2].style = { 'width': '24%' }\r\n this.cols[6].style = { 'width': '0%' };\r\n }\r\n this.columnsToDisplay = this.cols.map(x => {\r\n return x.field;\r\n })\r\n\r\n this.search_config = [\r\n {\r\n type: 'input',\r\n label: this.ts.instant(\"SearchbyActivityName\"),\r\n name: 'SearchbyActivityName',\r\n inputType: 'text',\r\n class: 'guest-details__first-name',\r\n showErrorText: true,\r\n icon: 'icon-search',\r\n appearance: true,\r\n isFormArray: false,\r\n value: ''\r\n },\r\n ];\r\n\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.components.first.form.valueChanges.subscribe(value => {\r\n if (this.isListView) {\r\n this.filterDataGridList.filter = value.SearchbyActivityName;\r\n } else {\r\n this.searchOperation(value.SearchbyActivityName);\r\n }\r\n })\r\n }\r\n\r\n changeView(value) {\r\n this.isListView = value;\r\n this.search_config[0].value = '';\r\n if (this.isListView) {\r\n this.filterDataGridList = new MatTableDataSource(this.availableActivities);\r\n }\r\n }\r\n\r\n getInstructor(staffdata) {\r\n const staff = this.activityService.InstructorList.filter(data => data.Id === staffdata.ServerId)[0];\r\n if (staff) {\r\n return staff.Name + ' ' + (staff.LastName || '');\r\n }\r\n else {\r\n return '';\r\n }\r\n }\r\n\r\n\r\n loadClassActivities(data) {\r\n const ActivitiesList = [];\r\n data.forEach(lesson => {\r\n let locationval = [];\r\n let staffval = [];\r\n lesson.ActivitySessions.forEach(session => {\r\n if(session.SessionLocationMappings){\r\n session.SessionLocationMappings.forEach(location => {\r\n if ((locationval && locationval.length == 0) || locationval.length > 0 && !locationval.find(x => x.LocationId == location.StandaloneTableId))\r\n locationval.push({ 'LocationName': this.getLocation(location), 'LocationId': location.StandaloneTableId });\r\n });\r\n }\r\n if(session.SessionStaffMappings){\r\n session.SessionStaffMappings.forEach(staff => {\r\n if ((staffval && staffval.length == 0) || staffval.length > 0 && !staffval.find(x => x.ServerId == staff.ServerId))\r\n staffval.push({ 'ServerId': staff.ServerId, 'StaffName': this.getInstructor(staff) });\r\n });\r\n }\r\n });\r\n\r\n locationval = locationval.sort((a, b) => (a.LocationName > b.LocationName) ? 1 : ((b.LocationName > a.LocationName) ? -1 : 0))\r\n lesson['LocationName'] = locationval.map(function (elem) {\r\n return elem.LocationName;\r\n }).join(\",\");\r\n lesson['Staffs'] = staffval?.filter(x => x).map(function (elem) {\r\n return elem.StaffName;\r\n }).join(\",\");\r\n lesson['LessonName'] = lesson.Name;\r\n lesson['LocationId'] = locationval;\r\n lesson['StaffValues'] = staffval;\r\n lesson['SpecialMealId'] = lesson.Id;\r\n lesson['Availability'] = 'Available';\r\n ActivitiesList.push(lesson);\r\n });\r\n\r\n this.availableActivities = ActivitiesList;\r\n this.availableActivities = this.availableActivities.filter(x => x.LessonType === this.lessonType);\r\n if (this.isListView) {\r\n this.filterDataGridList = new MatTableDataSource(this.availableActivities);\r\n }\r\n }\r\n\r\n selectedItem(data, index) {\r\n this.selectedClassActivity(this.availableActivities[index]);\r\n }\r\n\r\n getLocation(location) {\r\n return this.activityService.LocationList.filter(data => data.Id === location.StandaloneTableId)[0].Name || '';\r\n }\r\n\r\n selectedClassActivity(data) {\r\n if(data.Availability === 'Available'){\r\n this.activityService.operation = operationType.create;\r\n this.activityService.SelectedActivity$.next(data);\r\n this.activityService.TabChange$.next(ActivityTabs.ActvityView);\r\n }\r\n }\r\n\r\n searchOperation(value) {\r\n if (value.length >= 3) {\r\n value = value.toLowerCase();\r\n let searchData = _.filter(this.tempAvailableActivities, (data) => {\r\n let name = data.LessonName.toLowerCase();\r\n return name.includes(value)\r\n });\r\n this.availableActivities = searchData;\r\n } else {\r\n this.availableActivities = this.tempAvailableActivities;\r\n }\r\n }\r\n\r\n assignResetData(value) {\r\n if (value === true) {\r\n this.availableActivities = this.tempAvailableActivities;\r\n }\r\n if (this.isListView) {\r\n this.filterDataGridList = new MatTableDataSource(this.availableActivities);\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.Subscriptions) { this.Subscriptions.unsubscribe(); }\r\n }\r\n}\r\n","import { SlotType, ManualSlotType } from \"../constants/commonenums\";\r\n\r\nexport class OpenBookingDTO {\r\n BookingId: number;\r\n FromDate: string;\r\n ToDate: string;\r\n Location: number;\r\n LocationName: string;\r\n BookingSize: number;\r\n MembershipDetail: string;\r\n GuestTypes: CoverType[];\r\n BookingTypes:BookingType[];\r\n Slots: any[];\r\n\r\n constructor(bookingId, fromDate, toDate, location, locationName,\r\n bookingSize, membershipDetails, guestTypes,bookingTypes, slots) {\r\n this.BookingId = bookingId;\r\n this.FromDate = fromDate;\r\n this.ToDate = toDate;\r\n this.Location = location;\r\n this.LocationName = locationName;\r\n this.BookingSize = bookingSize;\r\n this.MembershipDetail = membershipDetails;\r\n this.GuestTypes = guestTypes;\r\n this.BookingTypes=bookingTypes;\r\n this.Slots = slots;\r\n }\r\n}\r\n\r\nexport class CoverType {\r\n CoverTypeId: number;\r\n Covers: number;\r\n}\r\n\r\nexport class BookingType {\r\n BookingTypeId: number;\r\n BookingTypes: number;\r\n}\r\n\r\nexport class SlotDTO {\r\n Id: number = null;\r\n Type: SlotType = null;\r\n DateTime: string = null;\r\n PartyId: number = null;\r\n OriginalMinPartySize: number = null;\r\n OriginalMaxPartySize: number = null;\r\n LimitedMinPartySize: number = null;\r\n LimitedMaxPartySize: number = null;\r\n IsWebReservable: boolean = false;\r\n IsDisabled: boolean = false;\r\n SeatingAreaId: number = null;\r\n LockedAt: Date = null;\r\n LockExpiresAt: Date = null;\r\n ManualSlotType: ManualSlotType = null;\r\n UpdatedAt: Date = null;\r\n}","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { buttonTypes } from '../constants/commonenums';\r\nimport { ButtonValue } from '../dynamicform/models/common-models';\r\n\r\n@Pipe({\r\n name: 'buttonInputFormater'\r\n})\r\nexport class ButtonInputFormater implements PipeTransform {\r\n btnFormat: ButtonValue;\r\n\r\n transform(data: any, type: buttonTypes, customClass?: string, disabledProperty?: boolean, additionalInfo?: string, color?: string): any {\r\n\r\n var styleObj;\r\n if (color) {\r\n styleObj = { 'border-color': color, 'color': color }\r\n }\r\n this.btnFormat = {\r\n label: data,\r\n type,\r\n customclass: customClass,\r\n disbaledproperity: disabledProperty,\r\n additionalText: additionalInfo,\r\n customStyle: styleObj\r\n };\r\n return this.btnFormat;\r\n }\r\n}\r\n\r\n\r\n","
    \r\n
  • \r\n \r\n \r\n
  • \r\n
","import { Component, EventEmitter, Input, OnInit, Output, OnDestroy } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { buttonTypes } from 'src/app/shared/constants/commonenums';\r\nimport { operationType } from 'src/app/shared/Models/WidgetSettingsModels';\r\nimport { GuestService } from 'src/app/shared/services/guest.service';\r\nimport { Utilities } from 'src/app/shared/utilities/utilities';\r\n\r\n@Component({\r\n selector: 'app-open-booking-slot-view',\r\n templateUrl: './open-booking-slot-view.component.html',\r\n styleUrls: ['./open-booking-slot-view.component.scss']\r\n})\r\nexport class OpenBookingSlotViewComponent implements OnInit, OnDestroy {\r\n @Input() allAvailableSlots: [];\r\n @Input() maxDuration;\r\n @Input() minDuration;\r\n @Input() isenableMultiple;\r\n @Output() SlotChanged = new EventEmitter();\r\n isMultiSlotSelection: boolean;\r\n Subscriptions: Subscription = new Subscription();\r\n buttonType = buttonTypes;\r\n anyMemberAllocationTypeId: number;\r\n constructor(public gs: GuestService) { }\r\n\r\n ngOnInit(): void {\r\n this.gs.slotAvailabilitySubject$.subscribe(data => {\r\n this.setSlots(true);\r\n })\r\n\r\n this.Subscriptions.add(this.gs.restaurantWidgetSettings$.subscribe(value => {\r\n this.isMultiSlotSelection = value.EnableMultiSlotSelection;\r\n console.log(this.gs.membershipId);\r\n }));\r\n\r\n this.isMultiSlotSelection = true;\r\n this.IsMember();\r\n }\r\n\r\n setSlots(isSlotsAvailable) {\r\n\r\n if (this.gs.slots_holder !== undefined) {\r\n this.gs.slots_holder.sort((a, b) => Utilities.parseDateString(a.DateTime).getTime() - Utilities.parseDateString(b.DateTime).getTime());\r\n }\r\n if (!this.gs.slots_holder) {\r\n return;\r\n }\r\n let newslots = this.gs.slots_holder.filter((slot) => !slot.IsDisabled && (!slot.IsOverRide));\r\n let allslots = this.gs.slots_holder.filter((slot) => !slot.IsDisabled && (slot.IsOverRide));\r\n if (isSlotsAvailable) {\r\n this.gs.allAvailableSlots = this.gs.slots_holder;\r\n } else {\r\n this.gs.allAvailableSlots = newslots;\r\n }\r\n\r\n }\r\n\r\n selectedOpenBookingResevationSlots(slot) {\r\n if (this.minDuration) {\r\n this.selectedPrivateBookingResevationSlots(slot);\r\n } else {\r\n this.openBookingSlotChange(slot);\r\n }\r\n }\r\n\r\n\r\n\r\n selectedPrivateBookingResevationSlots(slot) {\r\n\r\n var mins = this.gs.restaurantWidgetSettings$.value.TimeSlotUnitInMinutes;\r\n let timediff = mins;\r\n if (this.isMultiSlotSelection) {\r\n var isContinuous: boolean = false;\r\n var allKeys = [];\r\n for (var key in this.gs.selectedOpenBookingSlots) {\r\n if (this.gs.selectedOpenBookingSlots[key] == true) {\r\n allKeys.push(key);\r\n }\r\n }\r\n var slotsToCheck = this.gs.slots_holder.filter(x => allKeys.includes(x.Id.toString()));\r\n var slotList = slotsToCheck.filter(x => x.Id != slot.Id);\r\n\r\n if (this.gs.selectedOpenBookingSlots[slot.Id] == true) {\r\n if (slotList.length == 1) {\r\n isContinuous = true;\r\n }\r\n for (var i = 0; i < slotList.length - 1; i++) {\r\n if (slotList[i]) {\r\n const diffInMins = Math.abs(Utilities.diffBetweenDatesInMinutes(slotList[i].DateTime, slot.DateTime))\r\n if (diffInMins == mins) {\r\n isContinuous = true;\r\n timediff = timediff + diffInMins;\r\n }\r\n else {\r\n isContinuous = false;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n for (var key in this.gs.selectedOpenBookingSlots) {\r\n if (this.gs.selectedOpenBookingSlots[key] == true) {\r\n var slotValue = this.gs.slots_holder.filter(x => x.Id == key);\r\n if (slotValue && slotValue.length > 0) {\r\n const diffInMins = Math.abs(Utilities.diffBetweenDatesInMinutes(slotValue[0].DateTime, slot.DateTime));\r\n if (diffInMins == mins) {\r\n isContinuous = true;\r\n for (var i = 0; i < slotList.length - 1; i++) {\r\n if (slotList[i]) {\r\n const diffInSlotMins = Math.abs(Utilities.diffBetweenDatesInMinutes(slotList[i].DateTime, slotList[i + 1].DateTime))\r\n if (diffInSlotMins == mins) {\r\n timediff = timediff + diffInSlotMins;\r\n } else {\r\n timediff = mins;\r\n }\r\n }\r\n }\r\n }\r\n\r\n }\r\n }\r\n }\r\n }\r\n if (isContinuous) {\r\n timediff = timediff + mins;\r\n if (timediff <= this.maxDuration) {\r\n this.gs.selectedOpenBookingSlots[slot.Id] = !this.gs.selectedOpenBookingSlots[slot.Id];\r\n }\r\n else {\r\n this.gs.selectedOpenBookingSlots[slot.Id] = false;\r\n }\r\n } else {\r\n this.gs.selectedOpenBookingSlots[slot.Id] = !this.gs.selectedOpenBookingSlots[slot.Id];\r\n }\r\n } else {\r\n this.gs.selectedOpenBookingSlots = {};\r\n this.gs.selectedOpenBookingSlots[slot.Id] = !this.gs.selectedOpenBookingSlots[slot.Id];\r\n }\r\n this.SlotChanged.emit();\r\n }\r\n\r\n openBookingSlotChange(slot) {\r\n var mins = this.gs.restaurantWidgetSettings$.value.TimeSlotUnitInMinutes;\r\n if (this.gs.editPartyData$.value && this.gs.operation === operationType.edit && !this.isenableMultiple) {\r\n if (this.isMultiSlotSelection) {\r\n var isContinuous: boolean = false;\r\n var allKeys = [];\r\n for (var key in this.gs.selectedOpenBookingSlots) {\r\n if (this.gs.selectedOpenBookingSlots[key] == true) {\r\n allKeys.push(key);\r\n }\r\n }\r\n var slotsToCheck = this.gs.slots_holder.filter(x => allKeys.includes(x.Id.toString()));\r\n\r\n if (this.gs.selectedOpenBookingSlots[slot.Id] == true) {\r\n var slotList = slotsToCheck.filter(x => x.Id != slot.Id);\r\n if (slotList.length == 1) {\r\n isContinuous = true;\r\n }\r\n for (var i = 0; i < slotList.length - 1; i++) {\r\n if (slotList[i]) {\r\n if (Math.abs(Utilities.diffBetweenDatesInMinutes(slotList[i].DateTime, slotList[i + 1].DateTime)) == mins) {\r\n isContinuous = true;\r\n }\r\n else {\r\n isContinuous = false;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n for (var key in this.gs.selectedOpenBookingSlots) {\r\n if (this.gs.selectedOpenBookingSlots[key] == true) {\r\n var slotValue = this.gs.slots_holder.filter(x => x.Id == key);\r\n if (slotValue && slotValue.length > 0) {\r\n if (Math.abs(Utilities.diffBetweenDatesInMinutes(slotValue[0].DateTime, slot.DateTime)) == mins) {\r\n isContinuous = true;\r\n }\r\n\r\n }\r\n }\r\n }\r\n }\r\n if (!isContinuous) {\r\n this.gs.selectedOpenBookingSlots = {};\r\n }\r\n }\r\n }\r\n if (!this.isMultiSlotSelection) {\r\n this.gs.selectedOpenBookingSlots = {};\r\n }\r\n this.gs.selectedOpenBookingSlots[slot.Id] = !this.gs.selectedOpenBookingSlots[slot.Id];\r\n this.SlotChanged.emit();\r\n }\r\n IsMember(){\r\n if(!this.gs.restaurantWidgetSettings$.value.AllocationMappings)return false;\r\n let allocationType = this.gs.restaurantWidgetSettings$.value.AllocationMappings;\r\n let isAnyMember = allocationType.find(type => type.AllocationTypeName === 'AnyMembers');\r\n this. anyMemberAllocationTypeId = isAnyMember ? isAnyMember.AllocationTypeId : null;\r\n }\r\n ngOnDestroy(): void {\r\n if (this.Subscriptions) { this.Subscriptions.unsubscribe(); }\r\n }\r\n}\r\n","
\r\n
\r\n
\r\n
\r\n \r\n \r\n {{'MemberType'\r\n |\r\n translate}} :\r\n {{activityService.selectedGuest?.MembershipType}}\r\n \r\n {{'InvalidMembershipDetail'\r\n | translate}}\r\n ({{membershipStatus}})\r\n \r\n \r\n
\r\n
\r\n {{'NoofStudents' | translate}}\r\n
\r\n \r\n \r\n {{'MisMatchGroupSizeWithClass' | translate}}\r\n
\r\n \r\n
\r\n
\r\n {{'SelectBookingTypes' | translate}}\r\n
\r\n \r\n \r\n \r\n {{'MisMatchBookingTypeWithBookingSize' |\r\n translate}}\r\n \r\n
\r\n
\r\n
\r\n {{'SelectCoverTypes' | translate}}\r\n
\r\n \r\n \r\n {{'MisMatchCoverTypeWithBookingSize' |\r\n translate}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \"banner-img\"\r\n
\r\n
\r\n
\r\n {{'noslots' | translate}}\r\n
\r\n
\r\n
{{'availableSlots' | translate}}
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
","import { DatePipe } from '@angular/common';\r\nimport { Message } from '@angular/compiler/src/i18n/i18n_ast';\r\nimport { Component, OnDestroy, OnInit, QueryList, ViewChild, ViewChildren } from '@angular/core';\r\nimport { Validators } from '@angular/forms';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport moment from 'moment';\r\nimport { Subscription } from 'rxjs';\r\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\r\nimport { PopupMessageComponent } from 'src/app/shared/components/popup-message/popup-message.component';\r\nimport { ActivityTabs, buttonTypes, ComponentTypes } from 'src/app/shared/constants/commonenums';\r\nimport { DynamicFormComponent } from 'src/app/shared/dynamicform/dynamic-form/dynamic-form.component';\r\nimport { ButtonValue, FieldConfig } from 'src/app/shared/dynamicform/models/common-models';\r\nimport { ComponentDetails } from 'src/app/shared/dynamicform/models/popup.interface';\r\nimport { OpenBookingDTO } from 'src/app/shared/Models/OpenBookingDTO';\r\nimport { ActivityRatePlanRequest, BookingActivity, BookingBehavior } from 'src/app/shared/Models/SessionBookingDTO';\r\nimport { SlotLockIdDTO, SlotLockResultDTO } from 'src/app/shared/Models/SlotLockModels';\r\nimport { operationType } from 'src/app/shared/Models/WidgetSettingsModels';\r\nimport { GuestService } from 'src/app/shared/services/guest.service';\r\nimport { Utilities } from 'src/app/shared/utilities/utilities';\r\nimport { DynamicFormService } from 'src/app/shared/dynamicform/service/dynamic-form.service';\r\n\r\n@Component({\r\n selector: 'app-open-booking-selector',\r\n templateUrl: './open-booking-selector.component.html',\r\n styleUrls: ['./open-booking-selector.component.scss']\r\n})\r\nexport class OpenBookingSelectorComponent extends Utilities implements OnInit, OnDestroy {\r\n locationList: any[];\r\n bookingSizeArray: any = [];\r\n maxSizeAllowed: number = 60;\r\n SelectedActivityData: any;\r\n SelectedBookingData: any;\r\n isSessionClass: any;\r\n coverTypes = [];\r\n coverTypeConfig: FieldConfig[];\r\n bookingTypes = [];\r\n bookingTypeConfig: FieldConfig[];\r\n coverSizeConfig: FieldConfig[];\r\n membershipConfig: FieldConfig[];\r\n minSizeAllowed: number = 1;\r\n ratePlan: any;\r\n @ViewChild('reservationConfigForm', { static: true }) reservationConfigForm: DynamicFormComponent;\r\n @ViewChild('dateConfigForm', { static: true }) dateConfigForm: DynamicFormComponent;\r\n @ViewChild('coverTypeForm', { static: true }) coverTypeForm: DynamicFormComponent;\r\n @ViewChildren('form') components: QueryList;\r\n CheckAvailabilityBtn: ButtonValue;\r\n previousButton: ButtonValue;\r\n nextButton: ButtonValue;\r\n openBookingConfig: FieldConfig[];\r\n Subscriptions: Subscription = new Subscription();\r\n displaySlots: boolean = false;\r\n widgetdata: any;\r\n availableSlots = [];\r\n EditData: any;\r\n lockResponse: any;\r\n hasMembershipValue: boolean = false;\r\n validCoverTypes: boolean = true;\r\n validBookingTypes: boolean = true;\r\n validGroupSize: boolean = true;\r\n isMultipleEnabled: boolean;\r\n membershipValid: boolean;\r\n membershipStatus: string;\r\n inputvalidation: boolean = false;\r\n constructor(public ts: TranslateService, public activityService: GuestService, private datePipe: DatePipe, public dialog: MatDialog, public dynamicFormService: DynamicFormService) {\r\n super(dialog);\r\n this.Subscriptions.add(this.activityService.restaurantWidgetSettings$.subscribe(data => {\r\n if (data) {\r\n this.widgetdata = data;\r\n if (this.widgetdata.MaxPartySize) {\r\n this.maxSizeAllowed = this.widgetdata.MaxPartySize;\r\n }\r\n this.coverTypes = this.widgetdata.GuestTypes;\r\n this.bookingTypes = this.widgetdata.BookingTypes;\r\n }\r\n }))\r\n this.Subscriptions.add(this.activityService.BookNew$.subscribe(data => {\r\n if (data) {\r\n if (this.components && this.activityService.operation === operationType.create) {\r\n this.components.forEach(x => x.form.reset());\r\n\r\n }\r\n this.activityService.BookNew$.next(false);\r\n }\r\n }));\r\n this.Subscriptions.add(this.activityService.editPartyData$.subscribe(data => {\r\n if (data && data.ReservedFor && this.activityService.bookingSection$.value === BookingActivity.OpenBooking) {\r\n this.EditData = data;\r\n this.isMultipleEnabled = this.EditData?.Slots ? true : false;\r\n if (this.isMultipleEnabled) {\r\n this.getOpenslots(this.EditData.TableIds, [], moment(this.EditData.ReservedFor).format(\"YYYY-MM-DD\"))\r\n }\r\n this.setOpenBookingFieldConfig();\r\n }\r\n }))\r\n this.Subscriptions.add(this.activityService.bookingSection$.subscribe(data => {\r\n if (data === BookingActivity.OpenBooking) {\r\n this.activityService.slots_holder = [];\r\n this.activityService.selectedOpenBookingSlots = {};\r\n if (this.components && this.activityService.operation === operationType.create) {\r\n this.components.forEach(x => x.form.reset());\r\n }\r\n }\r\n }))\r\n }\r\n ngOnInit(): void {\r\n this.setOpenBookingFieldConfig();\r\n\r\n }\r\n ngAfterViewInit() {\r\n this.formChangeSubscribe();\r\n this.nextButton.disbaledproperity = !this.updateFormValidity();\r\n this.getSlots();\r\n // if (this.EditData && this.EditData.ReservedFor) {\r\n // this.getSlotsByLocation()\r\n // }\r\n }\r\n\r\n\r\n getSlots() {\r\n this.components?.forEach(x => {\r\n x.form.valueChanges.subscribe(value => {\r\n if (value.location || value.fromDate) {\r\n this.getSlotsByLocation();\r\n }\r\n if (value.MembershipId) {\r\n this.inputvalidation = this.dynamicFormService.inputvalidation(value.MembershipId);\r\n }\r\n })\r\n })\r\n }\r\n\r\n isCoverTypeMatchBookingSize() {\r\n var coverTypeTotal = 0;\r\n\r\n if (!this.coverTypeConfig || !this.coverTypeConfig.length) {\r\n return true;\r\n }\r\n else {\r\n if (!this.bookingTypeConfig || !this.bookingTypeConfig.length) {\r\n var [, , bookingSize, covers] = this.components;\r\n covers.controls.forEach((control, index) => {\r\n coverTypeTotal += +covers.form.controls[this.coverTypes[index].Name].value;\r\n });\r\n }\r\n else {\r\n var [, , bookingSize, , covers] = this.components;\r\n covers.controls.forEach((control, index) => {\r\n coverTypeTotal += +covers.form.controls[this.coverTypes[index].Name].value;\r\n });\r\n }\r\n }\r\n if (this.getFormValue(bookingSize, \"BookingSize\") === '') {\r\n return false;\r\n } else {\r\n return +this.getFormValue(bookingSize, \"BookingSize\") == coverTypeTotal;\r\n }\r\n }\r\n isBookingTypeMatchBookingSize() {\r\n var [, , bookingSize, bookingTypes] = this.components;\r\n\r\n if (!this.bookingTypeConfig || !this.bookingTypeConfig.length) {\r\n return true;\r\n }\r\n var bookingTypeTotal = 0;\r\n bookingTypes.controls.forEach((control, index) => {\r\n bookingTypeTotal += +bookingTypes.form.controls[this.bookingTypes[index].Name].value;\r\n });\r\n if (this.getFormValue(bookingSize, \"BookingSize\") === '') {\r\n return false;\r\n } else {\r\n return +this.getFormValue(bookingSize, \"BookingSize\") == bookingTypeTotal;\r\n }\r\n }\r\n\r\n updateFormValidity() {\r\n return (this.isValidBookingSizeSelected() && this.isFormValid() && this.isBookingTypeMatchBookingSize() && this.isCoverTypeMatchBookingSize() && this.istimeSlotsSelected());\r\n }\r\n isValidBookingSizeSelected() {\r\n var [, , bookingSize, covers] = this.components;\r\n let selectedSize = +this.getFormValue(bookingSize, \"BookingSize\")\r\n if (this.widgetdata && selectedSize) {\r\n\r\n this.validGroupSize = true;\r\n this.validGroupSize = selectedSize >= 1 && selectedSize <= this.widgetdata.MaxPartySize;\r\n\r\n const minsize = 1;\r\n const maxsize = this.widgetdata.MaxPartySize;\r\n return this.validGroupSize;\r\n }\r\n return false;\r\n }\r\n isFormValid() {\r\n var isValid = true;\r\n this.components.forEach(componet => {\r\n if (!componet.form.valid && componet.form.status !== \"DISABLED\") {\r\n isValid = false;\r\n }\r\n })\r\n return isValid;\r\n }\r\n istimeSlotsSelected() {\r\n return Object.values(this.activityService.selectedOpenBookingSlots).findIndex(slot => slot) !== -1;\r\n }\r\n coverTypeConfigChange() {\r\n if (this.coverTypeConfig.length) {\r\n this.Subscriptions.add(\r\n this.components.last.form.valueChanges.subscribe(value => {\r\n this.nextButton.disbaledproperity = !this.updateFormValidity();\r\n }));\r\n }\r\n }\r\n bookingTypeConfigChange() {\r\n if (this.bookingTypeConfig.length) {\r\n this.Subscriptions.add(\r\n this.components.last.form.valueChanges.subscribe(value => {\r\n this.nextButton.disbaledproperity = !this.updateFormValidity();\r\n }));\r\n }\r\n }\r\n setOpenBookingFieldConfig() {\r\n this.locationList = this.activityService.LocationList;\r\n this.membershipConfig = [{\r\n type: 'input',\r\n label: this.ts.instant('MembershipID'),\r\n name: 'MembershipId',\r\n inputType: 'text',\r\n class: 'guest-details__first-name',\r\n showErrorText: true,\r\n appearance: true,\r\n isFormArray: false,\r\n validation: [],\r\n value: this.EditData && this.EditData.Contact.TrackMembershipNumber ? this.EditData.Contact.TrackMembershipNumber : '',\r\n disabled: this.EditData && this.EditData.Contact ? true : false,\r\n hide: this.EditData && this.EditData.Contact ? true : false\r\n }];\r\n this.openBookingConfig = [\r\n\r\n {\r\n type: 'date',\r\n name: 'fromDate',\r\n placeholder: 'select',\r\n appearance: true,\r\n isFormArray: false,\r\n minDate: new Date(),\r\n value: this.EditData ? this.EditData.ReservedFor ? this.EditData.ReservedFor : new Date() : new Date(),\r\n maxDate: '',\r\n label: this.ts.instant('SelectaDate'),\r\n class: \"selector-date\",\r\n validation: [Validators.required],\r\n },\r\n {\r\n type: 'select',\r\n name: 'location',\r\n placeholder: '',\r\n options: this.locationList.map(x => ({ id: x.Id, value: x.Name })),\r\n appearance: true,\r\n isFormArray: false,\r\n label: this.ts.instant('SelectaLocation'),\r\n class: \"reservation-details__party-size\",\r\n validation: [Validators.required],\r\n value: this.EditData ? this.EditData.TableIds && this.EditData.TableIds.length ? this.locationList.filter(x => x.IsAvailableForReservations).map(x => x.Id).filter(x => x == this.EditData.TableIds[0])[0] : '' : ''\r\n },\r\n ]\r\n this.coverSizeConfig = [\r\n {\r\n type: 'autocomplete',\r\n name: 'BookingSize',\r\n placeholder: 'select',\r\n options: this.calculatePartySize(),\r\n appearance: true,\r\n partySize: true,\r\n isFormArray: false,\r\n class: \"count\",\r\n showErrorText: true,\r\n charLength: this.maxSizeAllowed.toString().length,\r\n validation: [Validators.required, Validators.min(1), Validators.max(this.widgetdata.MaxPartySize)],\r\n value: this.EditData ? this.EditData.Size : ''\r\n },\r\n ]\r\n this.coverTypeConfig = this.getCoverTypeConfig();\r\n this.coverTypeConfig = this.coverTypeConfig.map(config => {\r\n config.options = [{ id: 0, value: \"none\" }, ...this.bookingSizeArray];\r\n return config;\r\n })\r\n this.bookingTypeConfig = this.getBookingTypeConfig();\r\n this.bookingTypeConfig = this.bookingTypeConfig.map(config => {\r\n config.options = [{ id: 0, value: \"none\" }, ...this.bookingSizeArray];\r\n return config;\r\n })\r\n this.createActionButtons();\r\n }\r\n calculatePartySize() {\r\n this.bookingSizeArray = [];\r\n for (let i = 1; i <= this.maxSizeAllowed; i++) {\r\n this.bookingSizeArray.push({ id: i, value: i.toString() });\r\n }\r\n // this.bookingSizeArray.push({ id: this.maxSizeAllowed, value: this.maxSizeAllowed.toString() + \"+\" });\r\n\r\n return this.bookingSizeArray;\r\n }\r\n getSlotsByLocation() {\r\n var [, formdateComponent] = this.components;\r\n var date = moment(formdateComponent.form.get(\"fromDate\").value).format(\"YYYY-MM-DD\");\r\n if (formdateComponent.form.get(\"location\").value && formdateComponent.form.get(\"fromDate\").value) {\r\n this.activityService.selectedOpenBookingSlots = {};\r\n\r\n this.activityService.slots_holder = [];\r\n this.displaySlots = false;\r\n\r\n this.getOpenslots([formdateComponent.form.get(\"location\").value], [], moment(formdateComponent.form.get(\"fromDate\").value).format(\"YYYY-MM-DD\"))\r\n\r\n\r\n }\r\n }\r\n\r\n getOpenslots(location, instructor, date) {\r\n this.Subscriptions.add(this.activityService.getSlotsForTable(location, instructor, date).subscribe(response => {\r\n this.setSlots(response);\r\n setTimeout(() => {\r\n this.activityService.slotAvailabilitySubject$.next(response);\r\n this.activityService.partySlots$.next(true);\r\n }, 100);\r\n }));\r\n }\r\n\r\n getEditSlots() {\r\n this.activityService.selectedOpenBookingSlots = {};\r\n\r\n this.activityService.slots_holder = [];\r\n this.displaySlots = false;\r\n if (this.EditData.TableIds && this.EditData.ReservedFor) {\r\n this.Subscriptions.add(this.activityService.getSlotsForTable(this.EditData.TableIds, [], this.EditData.ReservedFor.split('T')[0]).subscribe(response => {\r\n this.setSlots(response);\r\n setTimeout(() => {\r\n this.activityService.slotAvailabilitySubject$.next(response);\r\n this.activityService.partySlots$.next(true);\r\n }, 100);\r\n\r\n }));\r\n }\r\n }\r\n\r\n setSlots(response) {\r\n let SlotIds = 0;\r\n this.availableSlots = [];\r\n this.activityService.slots_holder = [];\r\n this.activityService.SlotIds = 0;\r\n this.activityService.selectedOpenBookingSlots = {}\r\n response.Payload.forEach(element => {\r\n element.OpenHours.forEach(openHour => {\r\n var tableId = openHour.SlotsByTableId[0].TableId;\r\n openHour.SlotsByTableId[0].Slots.sort((a, b) => Utilities.parseDateString(a.DateTime).getTime() - Utilities.parseDateString(b.DateTime).getTime());\r\n openHour.SlotsByTableId[0].Slots.forEach(slot => {\r\n if ((!slot.PartyId || (this.EditData && slot.PartyId && this.EditData.Id == slot.PartyId))) {\r\n if (slot.AllocationTypeId && this.widgetdata.AllocationMappings && this.widgetdata.AllocationMappings.length) {\r\n var { R, G, B, A } = this.widgetdata.AllocationMappings.filter(type => type.AllocationTypeId === slot.AllocationTypeId)[0].Color;\r\n slot['color'] = `rgba(${R}, ${G}, ${B}, ${A})`;\r\n }\r\n SlotIds += 1;\r\n slot.Id = slot.Id == 0 ? SlotIds : slot.Id;\r\n if (this.isNotPastTimeSlot(slot)) {\r\n this.activityService.slots_holder.push(slot);\r\n }\r\n let selectedSlot = null;\r\n if (this.EditData?.Slots) {\r\n selectedSlot = this.EditData.Slots.find(x => x.Time === slot.DateTime);\r\n }\r\n if (this.EditData && slot.PartyId && this.EditData.TableIds[0] == tableId && this.EditData.Id == slot.PartyId) {\r\n this.activityService.selectedOpenBookingSlots[slot.Id] = !this.activityService.selectedOpenBookingSlots[slot.Id];\r\n if (!this.EditData.Duration) {\r\n this.EditData.Duration = Utilities.diffBetweenDatesInMinutes(this.EditData.DepartureTime, this.EditData.SeatingTime);\r\n }\r\n if (this.EditData.Duration > this.widgetdata.TimeSlotUnitInMinutes) {\r\n\r\n var duration = this.EditData.Duration - this.widgetdata.TimeSlotUnitInMinutes;\r\n for (var i = 1; i <= duration / this.widgetdata.TimeSlotUnitInMinutes; i++) {\r\n var newSlot = this.activityService.generateSlot(Utilities.Date(slot.DateTime).add(i * this.widgetdata.TimeSlotUnitInMinutes, 'minutes'));\r\n\r\n newSlot.PartyId = slot.PartyId;\r\n if (newSlot.Id == 0) {\r\n SlotIds += 1;\r\n newSlot.Id = SlotIds;\r\n }\r\n this.activityService.slots_holder.push(newSlot);\r\n this.activityService.selectedOpenBookingSlots[newSlot.Id] = true;\r\n }\r\n // this.setBookingData();\r\n }\r\n this.checkFormValidity();\r\n } else if (selectedSlot) {\r\n this.activityService.selectedOpenBookingSlots[slot.Id] = !this.activityService.selectedOpenBookingSlots[slot.Id];\r\n if (selectedSlot.Duration > this.widgetdata.TimeSlotUnitInMinutes) {\r\n var duration = selectedSlot - this.widgetdata.TimeSlotUnitInMinutes;\r\n for (var i = 1; i <= duration / this.widgetdata.TimeSlotUnitInMinutes; i++) {\r\n var newSlot = this.activityService.generateSlot(Utilities.Date(slot.DateTime).add(i * this.widgetdata.TimeSlotUnitInMinutes, 'minutes'));\r\n newSlot.PartyId = slot.PartyId;\r\n if (newSlot.Id == 0) {\r\n SlotIds += 1;\r\n newSlot.Id = SlotIds;\r\n }\r\n this.activityService.slots_holder.push(newSlot);\r\n this.activityService.selectedOpenBookingSlots[newSlot.Id] = true;\r\n }\r\n }\r\n this.checkFormValidity();\r\n }\r\n }\r\n });\r\n var openhrSlots = openHour.SlotsByTableId[0].Slots;\r\n openhrSlots.forEach(slot => {\r\n if (this.EditData?.Slots) {\r\n let selectedSlot = null;\r\n if (this.EditData?.Slots) {\r\n selectedSlot = this.EditData.Slots.find(x => x.Time === slot.DateTime);\r\n }\r\n if (selectedSlot && selectedSlot.DurationInMinutes > this.widgetdata.TimeSlotUnitInMinutes) {\r\n var duration = selectedSlot.DurationInMinutes - this.widgetdata.TimeSlotUnitInMinutes;\r\n for (var i = 1; i <= duration / this.widgetdata.TimeSlotUnitInMinutes; i++) {\r\n var existingslot = openhrSlots.find(x => Utilities.Date(x.DateTime).isSame(Utilities.Date(slot.DateTime).add(i * this.widgetdata.TimeSlotUnitInMinutes, 'minutes')));\r\n this.activityService.selectedOpenBookingSlots[existingslot.Id] = true;\r\n }\r\n }\r\n }\r\n\r\n });\r\n this.checkFormValidity();\r\n });\r\n });\r\n\r\n }\r\n\r\n\r\n updateSelectedSlotsByMembersihps() {\r\n Object.entries(this.activityService.selectedOpenBookingSlots).forEach((itm => {\r\n if (itm[1]) {\r\n const allocationTypeId = this.activityService.slots_holder.find(slot_holder => slot_holder.Id == itm[0])?.AllocationTypeId;\r\n if (allocationTypeId && (\r\n !this.activityService.selectedGuest || !this.activityService.selectedGuest.MembershipType || !this.activityService.selectedGuest.MemberActive || allocationTypeId !== this.activityService.selectedGuest.MembershipType?.Id)) {\r\n this.activityService.selectedOpenBookingSlots[itm[0]] = false;\r\n }\r\n }\r\n\r\n }))\r\n }\r\n\r\n isNotPastTimeSlot(slot): boolean {\r\n const maxPastTime = this.widgetdata.MaxPastTimeForReservationsInMinutes;\r\n const currentTime = Utilities.getRestaurantDateTime(this.widgetdata.DaylightDelta);\r\n const past1hr = new Date(currentTime.valueOf());\r\n const slotTime = Utilities.parseDateString(slot.DateTime);\r\n return slotTime >= past1hr;\r\n }\r\n\r\n\r\n setBookingData() {\r\n var openBookingObj = {} as OpenBookingDTO;\r\n if (this.bookingTypeConfig && this.bookingTypeConfig.length) {\r\n var [membershipNo, formdataComponent, bookingSize, bookingTypes, covers] = this.components;\r\n } else {\r\n var [membershipNo, formdataComponent, bookingSize, covers] = this.components;\r\n }\r\n openBookingObj.MembershipDetail = membershipNo.form.get(\"MembershipId\").value;\r\n openBookingObj.ToDate = formdataComponent.form.get(\"fromDate\").value;\r\n openBookingObj.Location = formdataComponent.form.get(\"location\").value;\r\n openBookingObj.BookingSize = bookingSize.form.get(\"BookingSize\").value;\r\n this.activityService.openBookingData = new OpenBookingDTO(\r\n null,\r\n openBookingObj.ToDate,\r\n openBookingObj.ToDate,\r\n openBookingObj.Location,\r\n this.getLocationName(openBookingObj.Location),\r\n openBookingObj.BookingSize,\r\n openBookingObj.MembershipDetail,\r\n this.getCoverTypeValues(covers),\r\n this.getBookingTypeValues(bookingTypes),\r\n this.getSlotsObj()\r\n );\r\n }\r\n getLocationName(locationId) {\r\n return this.locationList.filter(location => location.Id === locationId)[0].Name;\r\n }\r\n\r\n createActionButtons() {\r\n\r\n this.nextButton = {\r\n type: buttonTypes.confirmBtn,\r\n label: this.ts.instant('next'),\r\n customclass: 'guest-details__confirm-btn',\r\n disbaledproperity: true\r\n };\r\n }\r\n\r\n\r\n\r\n gotoNextPage(event) {\r\n if (this.activityService.selectedGuest && this.activityService.selectedGuest.TrackMembershipNumber && !this.activityService.selectedGuest?.MemberActive) {\r\n const popUpMessage = [{\r\n confirmationMessage: this.ts.instant('memberShipExpired'),\r\n dialogTitle: this.ts.instant('memberShipStatus'),\r\n showAlert: true\r\n }];\r\n const componentDetails: ComponentDetails = Utilities.setComponentDetails(PopupMessageComponent, 'small', 'static', popUpMessage,\r\n popUpMessage[0].dialogTitle);\r\n const confirm = this.openCustomPopup(componentDetails, ComponentTypes.financialEffectCalculation, '450px', '250px', false, 'No', 'ok',\r\n 'ok', false)\r\n return;\r\n }\r\n this.setBookingData();\r\n this.lockTables();\r\n }\r\n\r\n\r\n lockTables() {\r\n var { Slots, GuestTypes, BookingTypes, Location, BookingSize } = this.activityService.openBookingData;\r\n var slots = Slots.map(slot => {\r\n return {\r\n \"LocalTime\": slot.LocalTime,\r\n \"PartySize\": BookingSize,\r\n \"SeatingAreaId\": null,\r\n \"SeatingTypeId\": null,\r\n \"IsCommunalTable\": false,\r\n \"FromWebsite\": true,\r\n \"DurationInMinutes\": slot.Duration,\r\n \"lockIdToIgnore\": slot.LockId || null,\r\n \"TableIds\": [Location],\r\n \"ReservationIdToIgnore\": slot.PartyId\r\n }\r\n });\r\n if (slots.length) {\r\n this.Subscriptions.add(this.activityService.lockTables(slots).subscribe(response => {\r\n this.lockResponse = response.Payload;\r\n this.activityService.lockMultipleResult = {};\r\n this.createSaveRequestObj();\r\n let lockData: any = Object.values(this.lockResponse);\r\n let lockKeys: any = Object.keys(this.lockResponse);\r\n let slotAvailablity = true;\r\n let msg = '';\r\n lockKeys.forEach((data, index) => {\r\n if (!this.lockResponse[data].SlotLockIdDTO?.Id) {\r\n slotAvailablity = false;\r\n msg = msg + this.datePipe.transform(data, 'hh:mm a');\r\n if (index !== lockKeys.length) {\r\n msg = msg + ', '\r\n }\r\n } else {\r\n let obj = {} as SlotLockResultDTO\r\n obj[data] = this.lockResponse[data];\r\n this.activityService.lockMultipleResult[data] = this.lockResponse[data];\r\n }\r\n });\r\n if (!slotAvailablity) {\r\n this.activityService.setMessageState(this.ts.instant('SlotIsNotFound') + ' for ' + msg, 0);\r\n } else {\r\n this.activityService.lockMultipleIds = Object.values(this.activityService.lockMultipleResult).map((x: SlotLockResultDTO) => x?.SlotLockIdDTO?.Id)\r\n if (!this.activityService.restaurantWidgetSettings$.value.IsCartEnabled || this.activityService.operation !== operationType.create) {\r\n let timer = moment(lockData[0].ExpiresAt).diff(moment(lockData[0].LockedAt), \"seconds\");\r\n this.activityService.showTimer = true;\r\n this.activityService.runTimer(timer);\r\n }\r\n if (this.activityService.operation == operationType.edit) {\r\n this.setRatePlanCalculation(Slots, GuestTypes, BookingTypes, Location, BookingSize);\r\n this.activityService.additionalGuestPage = false;\r\n } else {\r\n this.activityService.TabChange$.next(ActivityTabs.ReservationDetails);\r\n }\r\n }\r\n }));\r\n }\r\n\r\n }\r\n\r\n setRatePlanCalculation(Slots, GuestTypes, BookingTypes, Location, BookingSize, Payload?) {\r\n this.lockResponse = Payload;\r\n var request = {\r\n Slots: Slots,\r\n ActivityId: null,\r\n GuestTypes,\r\n BookingTypes,\r\n TableIds: [Location],\r\n Size: +BookingSize,\r\n SessionSlot: null,\r\n TrackMembershipNumber: this.activityService.selectedGuest && this.activityService.selectedGuest.TrackMembershipNumber,\r\n MemberType: this.activityService.selectedGuest?.MembershipType?.AllocationName,\r\n IsMemberActive: this.activityService.selectedGuest?.MemberActive,\r\n BookingBehavior: BookingBehavior.OpenBooking\r\n } as ActivityRatePlanRequest;\r\n this.Subscriptions.add(this.activityService.GetSessionRatePlanCalculated(request).subscribe(response => {\r\n this.ratePlan = response.Payload;\r\n if (this.ratePlan && this.ratePlan.TotalRatePlan && this.ratePlan.RatePlanCalculations) {\r\n this.ratePlan.SlotList = this.ratePlan.RatePlanCalculations.map(slot => {\r\n slot.coverTypeVariants = slot.RatePlanVariants && slot.RatePlanVariants.GuestTypeVariant ? slot.RatePlanVariants.GuestTypeVariant.map(coverVariant => {\r\n coverVariant.CoverTypeName = this.coverTypes.find(coverType => coverType.Id == coverVariant.CoverTypeId).Name;\r\n return coverVariant;\r\n }).filter(coverVariant => coverVariant.Variant) : [];\r\n slot.bookingTypeVariants = slot.RatePlanVariants && slot.RatePlanVariants.BookingTypeVariant ? slot.RatePlanVariants.BookingTypeVariant.map(bookingTypeVariant => {\r\n bookingTypeVariant.BookingTypeName = this.bookingTypes.find(bookingType => bookingType.Id == bookingTypeVariant.BookingTypeId).Name;\r\n return bookingTypeVariant;\r\n }).filter(bookingTypeVariant => bookingTypeVariant.Variant) : [];\r\n return slot;\r\n });\r\n\r\n } else {\r\n this.ratePlan.SlotList = Slots;\r\n }\r\n if (this.ratePlan.TotalRatePlan || this.ratePlan.RatePlanCalculations) {\r\n this.activityService.RatePlanList$.next(this.ratePlan);\r\n }\r\n this.createSaveRequestObj();\r\n this.activityService.TabChange$.next(ActivityTabs.ReservationDetails);\r\n }));\r\n }\r\n\r\n createSaveRequestObj() {\r\n const bookingData = this.activityService.openBookingData;\r\n this.activityService.SaveBookingObj = {\r\n \"Id\": null,\r\n \"Size\": bookingData.BookingSize,\r\n \"RemindAboutVisit\": false,\r\n \"RemindAboutVisitEmail\": false,\r\n \"AgreedWithTermsOfUse\": true,\r\n \"Contact\": {},\r\n \"OpenTimeSlots\": bookingData.Slots,\r\n \"Slots\": this.getRequestObjectSlots(),\r\n \"PartyId\": null,\r\n \"SeatingAreaId\": null,\r\n \"SeatingTypeId\": null,\r\n \"Notes\": [],\r\n \"TableIds\": [bookingData.Location],\r\n \"CoverTypes\": bookingData.GuestTypes,\r\n \"CoverTypeQuantities\": bookingData.GuestTypes,\r\n \"BookingTypeQuantities\": bookingData.BookingTypes,\r\n \"BookingTypes\": bookingData.BookingTypes,\r\n \"IsCommunalTable\": false,\r\n \"FromWebsite\": true,\r\n \"Language\": 0,\r\n \"ReservationAttemptId\": null,\r\n \"waiverFormTransactionId\": null,\r\n \"SecondaryContactsList\": null,\r\n \"StartDate\": new Date(bookingData.FromDate).toDateString(),//(moment(bookingData.FromDate).format()).split(\"+\")[0],\r\n \"EndDate\": new Date(bookingData.ToDate).toDateString(),// (moment(bookingData.ToDate).format()).split(\"+\")[0],\r\n \"RatePlanTimeSlots\": this.getRatePlanSlots(bookingData.Slots)\r\n }\r\n }\r\n\r\n getRatePlanSlots(timeslots) {\r\n return timeslots.map((slot) => {\r\n return {\r\n LocalTime: slot.LocalTime,\r\n Duration: slot.Duration,\r\n ReservationAttemptId: null\r\n }\r\n })\r\n }\r\n getFormValue(formObj, fieldName) {\r\n if (!formObj) {\r\n return formObj;\r\n }\r\n return formObj.form.get(fieldName)?.value;\r\n }\r\n\r\n getCoverTypeValues(covers) {\r\n return this.coverTypes.map(coverType => {\r\n return { covers: this.getFormValue(covers, coverType.Name), CoverTypeId: coverType.Id, Name: coverType.Name, Covers: this.getFormValue(covers, coverType.Name) }\r\n })\r\n }\r\n\r\n getBookingTypeValues(bookingTypes) {\r\n return this.bookingTypes.map(bookingType => {\r\n return { BookingTypes: this.getFormValue(bookingTypes, bookingType.Name), BookingTypeId: bookingType.Id, Name: bookingType.Name }\r\n })\r\n }\r\n\r\n getSlotsObj() {\r\n let { selectedOpenBookingSlots, slots_holder } = this.activityService\r\n let resSlots = [];\r\n let slots = Object.entries(selectedOpenBookingSlots)\r\n .filter(arr => arr[1]);\r\n for (let slotI = 0; slotI < slots.length; slotI++) {\r\n let itm = slots[slotI];\r\n let currentSlotIndex = slots_holder.findIndex(slot_holder => slot_holder.Id == itm[0]);\r\n if (currentSlotIndex >= 0) {\r\n var slot = slots_holder[currentSlotIndex];\r\n // if (slot.PartyId && slot.PartyId && this.EditData.ReservedFor != slot.DateTime) {\r\n // continue;\r\n // }\r\n var resSlot = {\r\n LocalTime: slot.DateTime,\r\n Duration: this.widgetdata.TimeSlotUnitInMinutes,\r\n EndTime: this.calculateEndTime(slots_holder[currentSlotIndex].DateTime, this.widgetdata.TimeSlotUnitInMinutes),\r\n PartyId: (slot.PartyId && this.activityService.editPartyData$.value.Id) ? slot.PartyId : null,\r\n LockId: (this.lockResponse) ? this.lockResponse[slot.DateTime]?.SlotLockIdDTO?.Id : null,\r\n }\r\n\r\n for (let i = (currentSlotIndex + 1); slots_holder[i]; i++) {\r\n let slotDateTime = new Date(slots_holder[i].DateTime);\r\n let defaultDateTime = new Date(slots_holder[currentSlotIndex].DateTime);\r\n let mins: any = (slotDateTime.getTime() - defaultDateTime.getTime()) / (60 * 1000);\r\n if (slots.find(slot => slot[1] && +slot[0] == slots_holder[i].Id && mins <= resSlot.Duration)) {\r\n resSlot.Duration += this.widgetdata.TimeSlotUnitInMinutes;\r\n slotI += 1;\r\n } else {\r\n break;\r\n }\r\n }\r\n resSlot.EndTime = this.calculateEndTime(resSlot.LocalTime, resSlot.Duration)\r\n resSlots.push(resSlot);\r\n }\r\n }\r\n\r\n return resSlots;\r\n }\r\n\r\n\r\n calculateEndTime(startTimeStr, duration) {\r\n var startTime = new Date(startTimeStr);\r\n var startMins = startTime.getMinutes();\r\n startTime.setMinutes(startMins + duration);\r\n return startTime;\r\n }\r\n\r\n getRequestObjectSlots() {\r\n var bookingData = this.activityService.openBookingData;\r\n\r\n return bookingData.Slots.map((slot, index) => {\r\n return {\r\n Time: slot.LocalTime,\r\n LockId: (this.lockResponse) ? this.lockResponse[slot.LocalTime]?.SlotLockIdDTO?.Id : null,\r\n Type: 4,\r\n DurationInMinutes: slot.Duration\r\n }\r\n })\r\n }\r\n\r\n checkFormValidity() {\r\n this.nextButton.disbaledproperity = !this.updateFormValidity();\r\n }\r\n formChangeSubscribe() {\r\n this.components.forEach((x, index) => {\r\n this.Subscriptions.add(x.form?.valueChanges.pipe(debounceTime(100),\r\n distinctUntilChanged()).subscribe(value => {\r\n this.nextButton.disbaledproperity = !this.updateFormValidity();\r\n if (value.BookingSize) {\r\n this.activityService.additionalGuestLength = value.BookingSize;\r\n }\r\n if (value.MembershipId ||\r\n (this.activityService.selectedGuest?.MembershipType && (value.MembershipId == \"\"))) {\r\n this.hasMembershipValue = value.MembershipId.length > 0;\r\n this.activityService.selectedGuest = null;\r\n this.updateSelectedSlotsByMembersihps();\r\n // this.partyService.selectedMembershipDetail$.next(false);\r\n if (value.MembershipId.length == 16) {\r\n this.CheckMemberShip(value.MembershipId, null);\r\n }\r\n }\r\n this.updateSelectedSlotsByMembersihps();\r\n this.validCoverTypes = this.isCoverTypeMatchBookingSize();\r\n this.validBookingTypes = this.isBookingTypeMatchBookingSize();\r\n })\r\n )\r\n });\r\n }\r\n\r\n\r\n CheckMemberShip(membershipId, editContactData) {\r\n this.Subscriptions.add(this.activityService.getContactFromEngagebyCardno(membershipId).subscribe(response => {\r\n if (response.Payload) {\r\n const memberShipdetail = response.Payload;\r\n let editPartyData = {\r\n Id: this.EditData && this.EditData.Id !== null ? this.EditData.Id : null,\r\n Contact: {},\r\n };\r\n if (this.hasMembershipValue && response.Payload && response.Payload.MembershipType) {\r\n this.membershipValid = true;\r\n } else {\r\n this.membershipValid = false;\r\n }\r\n const memberType = this.activityService.restaurantWidgetSettings$.value.AllocationMappings.find(allocation => allocation.AllocationTypeName.trim().toLocaleLowerCase() === memberShipdetail.MembershipType.trim().toLocaleLowerCase());\r\n const guestObject = {\r\n FirstName: memberShipdetail.FName,\r\n LastName: memberShipdetail.LName,\r\n EmailAddress: memberShipdetail.Email,\r\n PhoneNumber: memberShipdetail.PhoneNumber,\r\n CountryId: this.activityService.getCountryId(memberShipdetail.PhoneCode),\r\n PIILastUsedDate: null,\r\n EmailAddress2: memberShipdetail.EmailList && memberShipdetail.EmailList.length > 1 ? memberShipdetail.EmailList[1]?.EmailId : null,\r\n PhoneNumber2: memberShipdetail.PhoneList && memberShipdetail.PhoneList.length > 1 ? memberShipdetail.PhoneList[1]?.PhoneNumber : memberShipdetail.PhoneNumber,\r\n Birthday: memberShipdetail.Dob,\r\n ContactCustomFields: [],\r\n Notes: [],\r\n VisitStats: [],\r\n MarketingOptedIn: null,\r\n memberShipId: memberShipdetail.CardNo,\r\n MembershipType: memberShipdetail.MembershipType,\r\n MemberActive: memberShipdetail.MembershipStatus?.toLowerCase() === \"active\"\r\n }\r\n this.membershipStatus = memberShipdetail.MembershipStatus;\r\n editPartyData.Contact = guestObject;\r\n this.activityService.editPartyData$.next(editPartyData);\r\n if (editContactData) {\r\n editContactData.memberShipId = memberShipdetail.CardNo,\r\n editContactData.MembershipType = memberType,\r\n editContactData.MemberActive = memberShipdetail.MembershipStatus?.toLowerCase() === \"active\"\r\n }\r\n this.activityService.selectedGuest = editContactData ? editContactData : guestObject;\r\n this.activityService.selectedGuest.TrackMembershipNumber = memberShipdetail.CardNo; // to bind it in the guest form\r\n this.activityService.membershipId = this.activityService.restaurantWidgetSettings$.value.AllocationMappings.find(x => x.AllocationTypeName.trim().toLowerCase() == response.Payload.MembershipType.trim().toLowerCase())?.AllocationTypeId;\r\n }\r\n }))\r\n }\r\n getFormComponent(...args) {\r\n return args.map(arg => this.components.find(form => form && form.form ? form.form?.value[arg] : form?.value[arg]))\r\n }\r\n getCoverTypeConfig(): FieldConfig[] {\r\n return this.coverTypes.map(coverType => {\r\n return {\r\n type: 'select',\r\n label: coverType.Name,\r\n name: coverType.Name,\r\n value: (this.EditData && this.EditData.CoverTypeQuantities && this.EditData.CoverTypeQuantities.filter(ct => ct.CoverTypeId == coverType.Id && ct.Covers > 0).length > 0) ? this.bookingSizeArray[this.EditData.CoverTypeQuantities.filter(ct => ct.CoverTypeId == coverType.Id)[0].Covers - 1].id : 0,\r\n options: this.bookingSizeArray,\r\n class: 'activity-instructor',\r\n appearance: true,\r\n isFormArray: false,\r\n } as FieldConfig;\r\n })\r\n }\r\n getBookingTypeConfig(): FieldConfig[] {\r\n return this.bookingTypes.map(bookingType => {\r\n return {\r\n type: 'select',\r\n label: bookingType.Name,\r\n name: bookingType.Name,\r\n value: (this.EditData && this.EditData.BookingTypeQuantities && this.EditData.BookingTypeQuantities.filter(bt => bt.BookingTypeId == bookingType.Id && bt.BookingTypes > 0).length > 0) ? this.bookingSizeArray[this.EditData.BookingTypeQuantities.filter(bt => bt.BookingTypeId == bookingType.Id)[0].BookingTypes - 1].id : 0,\r\n options: this.bookingSizeArray,\r\n class: 'activity-instructor',\r\n appearance: true,\r\n isFormArray: false,\r\n } as FieldConfig;\r\n })\r\n }\r\n setCoverTypeValue(covertType) {\r\n this.widgetdata?.GuestTypes?.forEach(data => {\r\n if (data.CoverTypeId === covertType.Id) {\r\n return data.covers;\r\n }\r\n });\r\n }\r\n ngOnDestroy(): void {\r\n if (this.Subscriptions) { this.Subscriptions.unsubscribe(); }\r\n }\r\n}\r\n\r\n\r\n","
\r\n
\r\n
\r\n
\r\n
\r\n {{'filterBy' | translate}}\r\n
\r\n
\r\n
\r\n
\r\n {{'ActivityDetails' | translate}}\r\n
\r\n \r\n \r\n {{'BookaLesson' | translate}}\r\n \r\n \r\n {{'ReserveaLocation' | translate}}\r\n \r\n \r\n {{'PrivateLesson' | translate}}\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
","import { Component, OnDestroy, OnInit, QueryList, ViewChildren } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { DynamicFormComponent } from 'src/app/shared/dynamicform/dynamic-form/dynamic-form.component';\r\nimport { FieldConfig } from 'src/app/shared/dynamicform/models/common-models';\r\nimport { BookingActivity, BookingBehavior } from 'src/app/shared/Models/SessionBookingDTO';\r\nimport { SlotLockResultDTO } from 'src/app/shared/Models/SlotLockModels';\r\nimport { operationType } from 'src/app/shared/Models/WidgetSettingsModels';\r\nimport { GuestService } from 'src/app/shared/services/guest.service';\r\nimport { environment } from 'src/environments/environment';\r\nimport { urlConfig } from '../../shared/constants/url-config'\r\n@Component({\r\n selector: 'app-activity-booking',\r\n templateUrl: './activity-booking.component.html',\r\n styleUrls: ['./activity-booking.component.scss']\r\n})\r\nexport class ActivityBookingComponent implements OnInit, OnDestroy {\r\n selectedIndex: number = 0;\r\n bookingType_config: FieldConfig[];\r\n bookingValue = BookingActivity.ClassBooking;\r\n isSessionClass = BookingBehavior.ClassOrSession;\r\n Operation = operationType;\r\n Subscription: Subscription = new Subscription();\r\n ActivityBookingType = BookingActivity;\r\n @ViewChildren('form') components: QueryList;\r\n environment = environment;\r\n constructor(public activityService: GuestService) {\r\n this.Subscription.add(this.activityService.bookingSection$.subscribe(bookingData => {\r\n this.bookingValue = bookingData;\r\n }));\r\n this.Subscription.add(this.activityService.restaurantWidgetSettings$.subscribe(value => {\r\n this.activityService.imageUrl = environment.BaseUrl + urlConfig.widgetImageURL + value.RestaurantId;\r\n }));\r\n }\r\n ngOnInit(): void {\r\n }\r\n\r\n\r\n setBookingType(event) {\r\n this.bookingValue = Number(event.value);\r\n this.activityService.bookingSection$.next(this.bookingValue);\r\n this.activityService.bookingType$.next(event.value);\r\n this.activityService.membershipId = null;\r\n if (this.bookingValue && this.activityService.lockMultipleResult) {\r\n const lockData = Object.values(this.activityService.lockMultipleResult) as SlotLockResultDTO[];\r\n const LockIds = lockData.map(x => x?.SlotLockIdDTO?.Id);\r\n this.Subscription.add(this.activityService.releaseMultiple(LockIds).subscribe(data => {\r\n this.activityService.lockMultipleResult = null;\r\n this.activityService.offTimer();\r\n }));\r\n }\r\n }\r\n ngOnDestroy(): void {\r\n if (this.Subscription) { this.Subscription.unsubscribe(); }\r\n }\r\n\r\n}\r\n","
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

{{classDetail.LessonName}}

\r\n
\r\n location_on\r\n  {{classDetail.LocationName}}\r\n
\r\n
\r\n
\r\n \r\n
{{operatingCurrency}} {{classDetail.BaseRate | currencyDecimalFormatter}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
{{classDetail.activityType}}
\r\n
\r\n
\r\n \r\n
{{classDetail.StartDate | localizeDate : 'L'}}
\r\n
\r\n
\r\n \r\n
{{classDetail.EndDate | localizeDate : 'L'}}
\r\n
\r\n
\r\n \r\n \r\n
\r\n {{classDetail.AvailableSlots}}\r\n
\r\n
\r\n
\r\n \r\n
\r\n {{classDetail.Staffs}}
\r\n
\r\n
\r\n
{{'checkAvailabilityOtherDays' |\r\n translate}}
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n

\r\n {{'sescription' | translate}}\r\n

\r\n

150 ? 'text-justify' : 'text-center' \">\r\n {{classDetail.Description | textCutter: (descriptionReadMoreClicked ? null : textMaxLegth)}} {{classDetail.Description.length}}\r\n textMaxLegth\"\r\n (click)=\"descriptionReadMoreClicked = !descriptionReadMoreClicked\">\r\n {{descriptionReadMoreClicked ? ('readLess' | translate) : ('readMore' | translate)}}\r\n \r\n

\r\n
\r\n
\r\n

\r\n {{'safetyInformation' | translate}}\r\n

\r\n

\r\n {{classDetail.safetyInformation | textCutter: (safetyInformationReadMoreClicked ? null : textMaxLegth)}}\r\n textMaxLegth\"\r\n (click)=\"safetyInformationReadMoreClicked = !safetyInformationReadMoreClicked\">\r\n {{safetyInformationReadMoreClicked ? ('readLess' | translate) : ('readMore' | translate)}}\r\n \r\n

\r\n
\r\n
","import { Component, OnInit } from '@angular/core';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { ActivityTabs, buttonTypes } from 'src/app/shared/constants/commonenums';\r\nimport { ButtonValue } from 'src/app/shared/dynamicform/models/common-models';\r\nimport { BookingActivity, ClassType, LessonTypes } from 'src/app/shared/Models/SessionBookingDTO';\r\nimport { GuestService } from 'src/app/shared/services/guest.service';\r\n\r\n@Component({\r\n selector: 'app-class-info',\r\n templateUrl: './class-info.component.html',\r\n styleUrls: ['./class-info.component.scss']\r\n})\r\nexport class ClassInfoComponent implements OnInit {\r\n\r\n bookButton: ButtonValue;\r\n backButton: ButtonValue;\r\n textMaxLegth: number = 500;\r\n descriptionReadMoreClicked: boolean = false;\r\n safetyInformationReadMoreClicked: boolean = false;\r\n classDetail: any = {};\r\n operatingCurrency: string;\r\n showAvailableSlotCount = true;\r\n ClassType = ClassType;\r\n imageUrl: any;\r\n\r\n constructor(public ts: TranslateService, public gs: GuestService) {\r\n this.gs.SelectedActivity$.subscribe(data => {\r\n this.classDetail = data;\r\n if (this.classDetail) {\r\n this.setOtherValues();\r\n }\r\n });\r\n\r\n }\r\n setOtherValues() {\r\n this.imageUrl = `data:image/png;base64,${this.classDetail.ImageData}`\r\n this.classDetail['bannerImage'] = this.classDetail.ImageData ? this.classDetail.ImageData : '';\r\n this.classDetail['activityType'] = this.classDetail.ClassType === ClassType.Session ? 'Session' : this.classDetail.ClassType === ClassType.Class ? 'Class' : 'Duration';\r\n this.showAvailableSlotCount = this.classDetail.LessonType == LessonTypes.GroupLesson;\r\n }\r\n\r\n ngOnInit(): void {\r\n this.backButton = {\r\n type: buttonTypes.cancelBtn,\r\n label: this.ts.instant('back'),\r\n customclass: 'class-detail__cancel-btn',\r\n disbaledproperity: false\r\n };\r\n this.bookButton = {\r\n type: buttonTypes.confirmBtn,\r\n label: this.ts.instant('book'),\r\n customclass: 'class-detail__confirm-btn',\r\n disbaledproperity: false\r\n };\r\n if(this.gs.OperationCurrency){\r\n this.operatingCurrency = this.gs.OperationCurrency\r\n }\r\n }\r\n\r\n backClick($event) {\r\n this.gs.SaveBookingObj = {};\r\n this.gs.TabChange$.next(ActivityTabs.BookingSelection);\r\n }\r\n\r\n bookClick($event) {\r\n if (this.gs.bookingSection$.value === BookingActivity.PrivateLesson) {\r\n this.gs.TabChange$.next(ActivityTabs.PrivateLesson);\r\n } else {\r\n this.gs.TabChange$.next(ActivityTabs.ActivitySelection);\r\n }\r\n }\r\n}\r\n","
\r\n \r\n
\r\n \r\n \r\n\r\n
\r\n
\r\n
","import { Component, OnInit, Input, EventEmitter, Output, SimpleChanges, OnChanges } from '@angular/core';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { AvailabilityType } from 'src/app/shared/Models/SessionBookingDTO';\r\nimport { GuestService } from 'src/app/shared/services/guest.service';\r\nimport { Utilities } from 'src/app/shared/utilities/utilities';\r\n\r\n@Component({\r\n selector: 'app-activity-slot-view',\r\n templateUrl: './activity-slot-view.component.html',\r\n styleUrls: ['./activity-slot-view.component.scss']\r\n})\r\nexport class ActivitySlotViewComponent implements OnInit, OnChanges {\r\n\r\n @Input()\r\n SessionSlots;\r\n\r\n @Input()\r\n isMultiSlotSelection;\r\n\r\n @Input()\r\n MembershipId;\r\n\r\n @Input()\r\n AllocationTypes;\r\n\r\n @Output() slotClick: EventEmitter = new EventEmitter();\r\n\r\n intialized: boolean;\r\n constructor(private ts: TranslateService, private gs: GuestService) { }\r\n\r\n ngOnInit(): void {\r\n this.SessionSlots = this.SessionSlots.filter(session => session.Availability?.AvailabilityType != AvailabilityType.SelectionCriteriaNotMatched);\r\n this.slotStatusSet();\r\n this.initFormArray();\r\n }\r\n\r\n initFormArray() {\r\n this.intialized = true;\r\n }\r\n\r\n onSlotClick(event) {\r\n this.slotClick.emit(event);\r\n if(this.isMultiSlotSelection){\r\n this.disableOverlapingSessions();\r\n }\r\n }\r\n\r\n slotStatusSet() {\r\n this.SessionSlots.forEach(session => {\r\n let isAnyMember = false;\r\n isAnyMember = this.IsMember(session.Availability);\r\n session.disabled = session.disabled || !(session.Availability?.AvailabilityType === AvailabilityType.OpenToAll\r\n || (session.Availability?.AvailabilityType === AvailabilityType.OpenToSpecificMember\r\n && session.Availability?.AllocationTypeId == this.MembershipId && this.gs.selectedGuest.MemberActive || (isAnyMember && this.MembershipId)) || session.checked);\r\n if (session.Availability?.AllocationTypeId) {\r\n const { R, G, B, A } = this.AllocationTypes?.find(type => type.AllocationTypeId === session.Availability?.AllocationTypeId)?.Color;\r\n session['color'] = `rgba(${R}, ${G}, ${B}, ${A})`;\r\n }\r\n });\r\n this.disableOverlapingSessions();\r\n }\r\n IsMember(slot : any) : boolean{\r\n if(!slot || !this.gs.restaurantWidgetSettings$.value.AllocationMappings) return false;\r\n let allocationType = this.gs.restaurantWidgetSettings$.value.AllocationMappings;\r\n let isAnyMember = allocationType.find(type => type.AllocationTypeId === slot.AllocationTypeId)?.AllocationTypeName == 'AnyMembers';\r\n return isAnyMember;\r\n }\r\n \r\n disableOverlapingSessions(){\r\n var selectedSlots = this.SessionSlots.filter(slot => slot.checked);\r\n this.SessionSlots.forEach(session => { \r\n if(!session.checked && this.isMultiSlotSelection){\r\n session.disabledOverlaped = this.isOverlap(selectedSlots, session);\r\n }\r\n });\r\n}\r\n\r\nisBetween(start, end, value){\r\n return value > start && value < end;\r\n}\r\n\r\nisOverlap(selectedSlots, slot): boolean{\r\n var slotStart = new Date(slot.Start);\r\n var slotEnd = new Date(slot.End);\r\n \r\n var intersectingSlots = selectedSlots.filter(selectedSlot => {\r\n let selectedSlotStart = new Date(selectedSlot.Start);\r\n let selectedSlotEnd = new Date(selectedSlot.End);\r\n \r\n if( // is Same Start Or End\r\n slotStart.getTime() === selectedSlotStart.getTime() || \r\n slotEnd.getTime() === selectedSlotEnd.getTime() ||\r\n // is slot falls between selectedSlot\r\n this.isBetween(selectedSlotStart, selectedSlotEnd, slotStart) || \r\n this.isBetween(selectedSlotStart, selectedSlotEnd, slotEnd) || \r\n // is selectedSlot falls between slot\r\n this.isBetween(slotStart, slotEnd, selectedSlotStart) || \r\n this.isBetween(slotStart, slotEnd, selectedSlotEnd)){ \r\n return true;\r\n }\r\n \r\n return false;\r\n });\r\n return intersectingSlots.length;\r\n}\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n this.slotStatusSet();\r\n }\r\n\r\n\r\n}\r\n","
\r\n
\r\n \r\n
\r\n
\r\n
\r\n

{{classDetail.LessonName}}

\r\n
\r\n location_on\r\n  {{classDetail.LocationName}}\r\n
\r\n
\r\n
\r\n \r\n
{{operatingCurrency}} {{classDetail.BaseRate | currencyDecimalFormatter}}
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
{{classDetail.StartDate | localizeDate:'L'}}
\r\n
\r\n
\r\n \r\n
{{classDetail.EndDate | localizeDate:'L'}}
\r\n
\r\n
\r\n \r\n
{{classDetail.Staffs}}
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n {{'SelectDates' | translate}}\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n {{'SelectCoverSize' | translate}}\r\n
\r\n
\r\n {{'NoofStudents' | translate}}\r\n
\r\n
\r\n
\r\n \r\n \r\n {{'MisMatchGroupSizeWithClass' | translate}}\r\n
\r\n \r\n
\r\n
\r\n
\r\n {{'SelectBookingTypes' | translate}}\r\n
\r\n
\r\n \r\n \r\n {{'MisMatchBookingTypeWithBookingSize'\r\n |\r\n translate}}\r\n
\r\n
\r\n
\r\n
\r\n {{'SelectCoverTypes' | translate}}\r\n
\r\n
\r\n \r\n \r\n {{'MisMatchCoverTypeWithBookingSize' |\r\n translate}}\r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n
\r\n\r\n
\r\n \r\n {{SessionSlotsAvailableDates[selectedIndex].AvailableDate | localizeDate : 'DD MMMM, ddd'}}\r\n \r\n
\r\n {{'AvailableTime' | translate}}\r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n\r\n
\r\n {{'Bookforallavailabledates' | translate}} (\r\n {{SessionSlotsAvailableDates[0].AvailableDate | localizeDate: 'DD MMMM'}} -\r\n {{SessionSlotsAvailableDates[SessionSlotsAvailableDates.length -1].AvailableDate | date:'dd\r\n MMMM'}} )\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n {{dayOfWeek[index]}}\r\n
\r\n
    \r\n
  • \r\n {{slot.Start | localizeDate: 'LT'}} - {{slot.End | localizeDate: 'LT'}}\r\n
  • \r\n
\r\n
\r\n
\r\n
\r\n
\r\n {{'noSlotsAvailable' | translate}}\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
","import { AfterViewInit, Component, OnDestroy, OnInit, QueryList, ViewChild, ViewChildren } from '@angular/core';\r\nimport { Validators } from '@angular/forms';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport moment from 'moment';\r\nimport { Subscription } from 'rxjs';\r\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\r\nimport { PopupMessageComponent } from 'src/app/shared/components/popup-message/popup-message.component';\r\nimport { ActivityTabs, AvailabilityCriteria, buttonTypes, ComponentTypes, PartyState } from 'src/app/shared/constants/commonenums';\r\nimport { DynamicFormComponent } from 'src/app/shared/dynamicform/dynamic-form/dynamic-form.component';\r\nimport { ButtonValue, FieldConfig } from 'src/app/shared/dynamicform/models/common-models';\r\nimport { ComponentDetails } from 'src/app/shared/dynamicform/models/popup.interface';\r\nimport { ActivityRatePlanRequest, ActivitySlotRequestDTO, AvailabilityType, BookingActivity, BookingBehavior, ClassType, LockSessionRequestDTO, SessionBookingDTO } from 'src/app/shared/Models/SessionBookingDTO';\r\nimport { DayOfWeek, operationType } from 'src/app/shared/Models/WidgetSettingsModels';\r\nimport { GuestService } from 'src/app/shared/services/guest.service';\r\nimport { Utilities } from 'src/app/shared/utilities/utilities';\r\nimport { environment } from 'src/environments/environment';\r\nimport { urlConfig } from '../../../shared/constants/url-config'\r\n@Component({\r\n selector: 'app-activity-selector',\r\n templateUrl: './activity-selector.component.html',\r\n styleUrls: ['./activity-selector.component.scss']\r\n})\r\nexport class ActivitySelectorComponent extends Utilities implements OnInit, AfterViewInit, OnDestroy {\r\n previousButton: ButtonValue;\r\n nextButton: ButtonValue;\r\n cancelButton: ButtonValue;\r\n CheckAvailabilityBtn: ButtonValue;\r\n reservationConfig: FieldConfig[];\r\n locationConfig: FieldConfig[];\r\n customizeSizeConfig: FieldConfig[];\r\n from_dateConfig: FieldConfig[];\r\n to_dateConfig: FieldConfig[];\r\n age_config: FieldConfig[];\r\n search_config: FieldConfig[];\r\n buttonType = buttonTypes;\r\n coverTypeConfig: FieldConfig[];\r\n bookingTypeConfig: FieldConfig[];\r\n bookingType_config: FieldConfig[];\r\n coverTypes = [];\r\n bookingTypes = [];\r\n classDetail: any;\r\n @ViewChild('reservationConfigForm', { static: true }) reservationConfigForm: DynamicFormComponent;\r\n @ViewChild('dateConfigForm', { static: true }) dateConfigForm: DynamicFormComponent;\r\n @ViewChild('coverTypeForm', { static: true }) coverTypeForm: DynamicFormComponent;\r\n @ViewChildren('form') components: QueryList;\r\n Subscriptions: Subscription = new Subscription();\r\n availableActivities: any;\r\n tempAvailableActivities: any;\r\n SelectedIndex: number;\r\n SelectedActivityData: any;\r\n InstructorList: any[];\r\n LocationList: any[];\r\n minSizeAllowed: number = 1;\r\n bookingSizeArray: any = [];\r\n SessionSlotsAvailableDates: any = null;\r\n showSessionorSlots: boolean = false;\r\n isSessionClass: any;\r\n selectedIndex: number = 0;\r\n public sessionsUnavailable: any[];\r\n isMultiSlotSelection: any;\r\n availableSessions: any[];\r\n classLessonList: any[];\r\n selectedClassSchedule: any = [];\r\n dayOfWeek = DayOfWeek;\r\n EditData: any;\r\n lockResponse: any;\r\n ratePlan: any;\r\n checkedItem = false;\r\n operatingCurrency: any;\r\n SelectedTimeSlots: any = [];\r\n Operation = operationType;\r\n validCoverTypes: boolean = true;\r\n validBookingTypes: boolean = true;\r\n validGroupSize: boolean = true;\r\n formRepeatCount = 0;\r\n widgetData: any;\r\n currentTab = 0;\r\n imageUrl: any;\r\n environment = environment;\r\n constructor(private ts: TranslateService, public activityService: GuestService, public dialog: MatDialog, private gs: GuestService) {\r\n super(dialog);\r\n this.Subscriptions.add(this.activityService.editPartyData$.subscribe(data => {\r\n this.EditData = data;\r\n if (this.EditData &&\r\n (this.EditData.State === PartyState.Seated ||\r\n this.EditData.State === PartyState.Cancelled ||\r\n this.EditData.State === PartyState.Left)) {\r\n this.activityService.TabChange$.next(ActivityTabs.ConfirmationSummary);\r\n }\r\n if (this.EditData && this.EditData.Contact?.TrackMembershipNumber) {\r\n this.CheckMemberShip(this.EditData.Contact.TrackMembershipNumber, this.EditData);\r\n }\r\n }));\r\n this.Subscriptions.add(this.activityService.restaurantWidgetSettings$.subscribe(value => {\r\n this.widgetData = value;\r\n this.isMultiSlotSelection = value.EnableMultiSlotSelection;\r\n this.operatingCurrency = value.OperationCurrency;\r\n }));\r\n\r\n this.Subscriptions.add(this.activityService.TabChange$.subscribe(data => {\r\n this.currentTab = data;\r\n if (data === ActivityTabs.ActivitySelection && this.EditData && this.EditData.ReservedFor &&\r\n this.activityService.bookingSection$.value === BookingActivity.ClassBooking) {\r\n if (this.EditData && this.EditData.Contact?.TrackMembershipNumber) {\r\n this.CheckMemberShip(this.EditData.Contact.TrackMembershipNumber, this.EditData);\r\n setTimeout(() => {\r\n this.checkSessionorSlotAvailability();\r\n }, 300);\r\n } else {\r\n\r\n this.checkSessionorSlotAvailability();\r\n }\r\n }\r\n }));\r\n this.Subscriptions.add(this.activityService.SelectedActivity$.subscribe(data => {\r\n if (this.activityService.operation === operationType.create) {\r\n this.resetValue();\r\n }\r\n setTimeout(() => {\r\n this.classDetail = data;\r\n if (this.classDetail && this.activityService.bookingSection$.value === BookingActivity.ClassBooking) {\r\n this.activityService.selectedSpecialMeal = this.classDetail;\r\n this.SelectedActivityData = this.classDetail;\r\n this.createReservationConfig();\r\n this.createActionButtons();\r\n this.selectedClassActivity(this.SelectedActivityData);\r\n }\r\n }, 100);\r\n\r\n }));\r\n this.Subscriptions.add(this.activityService.bookingSection$.subscribe(data => {\r\n if (this.components && this.activityService.operation === operationType.create && data) {\r\n this.resetValue();\r\n }\r\n }));\r\n this.Subscriptions.add(this.activityService.BookNew$.subscribe(data => {\r\n if (data) {\r\n if (this.components) {\r\n this.resetValue();\r\n }\r\n this.activityService.BookNew$.next(false);\r\n }\r\n }));\r\n }\r\n\r\n\r\n\r\n\r\n ngOnInit(): void {\r\n\r\n if (this.activityService.SelectedActivity$.value) {\r\n this.SelectedActivityData = this.activityService.SelectedActivity$.value;\r\n }\r\n this.createReservationConfig();\r\n this.createActionButtons();\r\n }\r\n\r\n createReservationConfig() {\r\n this.reservationConfig = [\r\n {\r\n type: 'select',\r\n name: 'Instructor',\r\n placeholder: '',\r\n options: [],\r\n appearance: true,\r\n isFormArray: false,\r\n value: this.EditData ? this.EditData.StaffIds && this.EditData.StaffIds.length > 0 && this.EditData.StaffIds.length !== this.InstructorList?.length ? this.EditData.StaffIds[0] : -1 : -1,\r\n label: this.ts.instant('SelectaInstructor'),\r\n class: \"activity-instructor\",\r\n validation: [Validators.required],\r\n }\r\n\r\n ];\r\n this.locationConfig = [\r\n {\r\n type: 'select',\r\n name: 'Location',\r\n placeholder: '',\r\n options: [],\r\n appearance: true,\r\n isFormArray: false,\r\n value: this.EditData ? this.EditData.TableIds && this.EditData.TableIds.length > 0 && this.EditData.TableIds.length !== this.LocationList?.length ? this.EditData.TableIds[0] : -1 : -1,\r\n label: this.ts.instant('SelectaLocation'),\r\n class: \"activity-instructor\",\r\n validation: [Validators.required],\r\n }];\r\n\r\n this.updateDateConfig();\r\n this.customizeSizeConfig = [\r\n {\r\n type: 'autocomplete',\r\n name: 'BookingSize',\r\n placeholder: 'select',\r\n options: this.calculatePartySize(),\r\n appearance: true,\r\n partySize: true,\r\n isFormArray: false,\r\n class: \"activity-instructor\",\r\n showErrorText: true,\r\n charLength: this.SelectedActivityData?.MaxPartySize.toString().length,\r\n validation: [Validators.required, Validators.min(this.SelectedActivityData?.MinPartySize), Validators.max(this.SelectedActivityData?.MaxPartySize)],\r\n value: this.EditData ? this.EditData.Size ? this.EditData.Size : '' : ''\r\n },\r\n ]\r\n\r\n this.search_config = [\r\n {\r\n type: 'input',\r\n label: \"\",\r\n placeholder: 'SearchbyActivityName',\r\n name: 'SearchbyActivityName',\r\n inputType: 'text',\r\n class: 'guest-details__first-name',\r\n showErrorText: true,\r\n appearance: true,\r\n isFormArray: false,\r\n value: ''\r\n },\r\n ];\r\n this.bookingType_config = [\r\n {\r\n type: 'radio',\r\n name: 'bookingType',\r\n placeholder: 'selectCovers',\r\n options: [{ id: BookingBehavior.ClassOrSession, value: 'Lesson Booking' }, { id: BookingBehavior.OpenBooking, value: 'Open Booking' }],\r\n class: 'login__language-selection',\r\n showErrorText: true,\r\n appearance: true,\r\n isFormArray: false,\r\n multiCheck: true,\r\n }\r\n ];\r\n }\r\n resetValue() {\r\n if (this.components) {\r\n var [Instructor, Location, FromDate, ToDate, BookingSize, bookingtypes, covertype] = this.components;\r\n Instructor.form.reset(\"Instructor\");\r\n Location.form.reset(\"Location\");\r\n FromDate.form.reset(\"FromDate\");\r\n ToDate.form.reset(\"ToDate\");\r\n BookingSize.form.reset(\"BookingSize\");\r\n if (bookingtypes) {\r\n bookingtypes.form.reset(this.getBookingTypeName());\r\n }\r\n if (covertype) {\r\n covertype.form.reset(this.getCoverTypeName());\r\n }\r\n }\r\n }\r\n getBookingTypeName(): FieldConfig[] {\r\n return this.bookingTypes.map(bookingType => {\r\n return bookingType.Name;\r\n })\r\n }\r\n getCoverTypeName(): FieldConfig[] {\r\n return this.coverTypes.map(coverType => {\r\n return coverType.Name;\r\n })\r\n }\r\n isFormValid() {\r\n var isValid = true;\r\n this.components.forEach(componet => {\r\n if (!componet.form.valid && componet.form.status !== \"DISABLED\") {\r\n isValid = false;\r\n }\r\n })\r\n return isValid;\r\n }\r\n\r\n getFormValue(formObj, fieldName) {\r\n return formObj && formObj.form.get(fieldName)?.value;\r\n }\r\n\r\n getCoverTypeValues(covers) {\r\n return this.coverTypes.map(coverType => {\r\n return { covers: covers[coverType.Name], Covers: covers[coverType.Name], CoverTypeId: coverType.Id, Name: coverType.Name }\r\n })\r\n }\r\n\r\n isCoverTypeMatchBookingSize() {\r\n\r\n var coverTypeTotal = 0;\r\n\r\n if (!this.coverTypeConfig || !this.coverTypeConfig.length) {\r\n return true;\r\n }\r\n else {\r\n if (!this.bookingTypeConfig || !this.bookingTypeConfig.length) {\r\n var [, , , , bookingSize, covers] = this.components;\r\n covers.controls.forEach((control, index) => {\r\n coverTypeTotal += +covers.form.controls[this.coverTypes[index].Name].value;\r\n });\r\n }\r\n else {\r\n var [, , , , bookingSize, , covers] = this.components;\r\n covers.controls.forEach((control, index) => {\r\n coverTypeTotal += +covers.form.controls[this.coverTypes[index].Name].value;\r\n });\r\n }\r\n }\r\n\r\n if (this.getFormValue(bookingSize, \"BookingSize\") === '') {\r\n return false;\r\n } else {\r\n return +this.getFormValue(bookingSize, \"BookingSize\") == coverTypeTotal;\r\n }\r\n }\r\n getBookingTypeValues(bookingTypes) {\r\n return this.bookingTypes.map(bookingType => {\r\n return { BookingTypes: bookingTypes[bookingType.Name], BookingTypeId: bookingType.Id, Name: bookingType.Name }\r\n })\r\n }\r\n isBookingTypeMatchBookingSize() {\r\n if (!this.bookingTypeConfig || !this.bookingTypeConfig.length) {\r\n return true;\r\n }\r\n var [, , , , bookingSize, bookingTypes,] = this.components;\r\n\r\n\r\n var bookingTypeTotal = 0;\r\n bookingTypes.controls.forEach((control, index) => {\r\n bookingTypeTotal += +bookingTypes.form.controls[this.bookingTypes[index].Name].value;\r\n });\r\n this.validBookingTypes = +this.getFormValue(bookingSize, \"BookingSize\") === bookingTypeTotal;\r\n return +this.getFormValue(bookingSize, \"BookingSize\") === bookingTypeTotal;\r\n }\r\n\r\n updateFormValidity() {\r\n return this.isFormValid() && this.isValidBookingSizeSelected() && this.isCoverTypeMatchBookingSize() && this.isBookingTypeMatchBookingSize() && this.checkedItem;\r\n }\r\n\r\n isValidBookingSizeSelected() {\r\n var [activity, , , , bookingSize] = this.components;\r\n let selectedSize = +this.getFormValue(bookingSize, \"BookingSize\")\r\n if (this.SelectedActivityData) {\r\n\r\n this.validGroupSize = true;\r\n this.validGroupSize = selectedSize >= this.SelectedActivityData.MinPartySize && selectedSize <= this.SelectedActivityData.MaxPartySize;\r\n\r\n const minsize = this.SelectedActivityData.MinPartySize;\r\n const maxsize = this.SelectedActivityData.MaxPartySize;\r\n \r\n return this.validGroupSize;\r\n }\r\n return false;\r\n }\r\n\r\n getFormComponent(...args) {\r\n return args.map(arg => this.components.find(form => form && form.form ? form.form?.value[arg] : form?.value[arg]))\r\n }\r\n\r\n checkSessionorSlotAvailability() {\r\n var [instructor, fromDate, toDate, bookingSize, location] = this.getFormComponent(\"Instructor\", \"FromDate\", \"ToDate\", \"BookingSize\", \"Location\");\r\n var instructors = instructor.form.get(\"Instructor\").value == -1 ? [] : [instructor.form.get(\"Instructor\").value]\r\n\r\n var locations = location.form.get(\"Location\").value == -1 ? [] : [location.form.get(\"Location\").value]\r\n if (bookingSize) {\r\n this.getavailableSlots(instructors, locations, fromDate, toDate, bookingSize);\r\n }\r\n }\r\n\r\n\r\n\r\n CheckMemberShip(membershipId, editContactData) {\r\n this.Subscriptions.add(this.activityService.getContactFromEngagebyCardno(membershipId).subscribe(response => {\r\n if (response.Payload) {\r\n const memberShipdetail = response.Payload;\r\n let editPartyData = {\r\n Id: this.EditData && this.EditData.Id !== null ? this.EditData.Id : null,\r\n Contact: {},\r\n };\r\n const memberType = this.activityService.restaurantWidgetSettings$.value.AllocationMappings.find(allocation => allocation.AllocationTypeName.trim().toLocaleLowerCase() === memberShipdetail.MembershipType.trim().toLocaleLowerCase());\r\n const guestObject = {\r\n FirstName: memberShipdetail.FName,\r\n LastName: memberShipdetail.LName,\r\n EmailAddress: memberShipdetail.Email,\r\n PhoneNumber: memberShipdetail.PhoneNumber,\r\n CountryId: this.activityService.getCountryId(memberShipdetail.PhoneCode),\r\n PIILastUsedDate: null,\r\n EmailAddress2: memberShipdetail.EmailList ? memberShipdetail.EmailList[1]?.EmailId : null,\r\n PhoneNumber2:memberShipdetail.PhoneList ? memberShipdetail.PhoneList[1]?.PhoneNumber: memberShipdetail.PhoneNumber,\r\n Birthday: memberShipdetail.Dob,\r\n ContactCustomFields: [],\r\n Notes: [],\r\n VisitStats: [],\r\n MarketingOptedIn: null,\r\n memberShipId: memberShipdetail.CardNo,\r\n MembershipType: memberShipdetail.MembershipType,\r\n MemberActive: memberShipdetail.MembershipStatus?.toLowerCase() === \"active\"\r\n }\r\n if (editContactData) {\r\n editContactData.memberShipId = memberShipdetail.CardNo,\r\n editContactData.MembershipType = memberType,\r\n editContactData.MemberActive = memberShipdetail.MembershipStatus?.toLowerCase() === \"active\"\r\n }\r\n this.activityService.selectedGuest = editContactData ? editContactData : guestObject;\r\n this.activityService.selectedGuest = guestObject;\r\n this.activityService.selectedGuest.TrackMembershipNumber = memberShipdetail.CardNo; // to bind it in the guest form\r\n this.activityService.membershipId = guestObject.MemberActive ? this.activityService.restaurantWidgetSettings$.value.AllocationMappings.find(x => x.AllocationTypeName.trim().toLowerCase() == response.Payload.MembershipType.trim().toLowerCase())?.AllocationTypeId : null;\r\n }\r\n }))\r\n }\r\n\r\n\r\n getavailableSlots(instructors, location, fromDate, toDate, bookingSize) {\r\n this.SessionSlotsAvailableDates = [];\r\n this.classLessonList = [];\r\n this.availableSessions = [];\r\n this.selectedIndex = 0;\r\n var requestedObject = {\r\n ActivityId: +this.SelectedActivityData.SpecialMealId,\r\n AvailabilityCriteria: this.getAvailabilityCriteria(location, instructors),\r\n StartDate: moment(fromDate?.form.get(\"FromDate\").value).format(\"YYYY-MM-DD\"),\r\n EndDate: moment(toDate?.form.get(\"ToDate\").value).format(\"YYYY-MM-DD\"),\r\n PreferredLocationId: location,\r\n PreferredStaffId: instructors,\r\n BookingSize: +bookingSize?.form.get(\"BookingSize\").value,\r\n ClassType: this.SelectedActivityData.ClassType,\r\n reservationIdToIgnore: this.activityService.editPartyData$.value?.Id || null\r\n } as ActivitySlotRequestDTO;\r\n this.getSlotsForClass(requestedObject);\r\n }\r\n\r\n setBookingData() {\r\n var [instructor, fromDate, toDate, bookingSize, location] = this.getFormComponent(\"Instructor\", \"FromDate\", \"ToDate\", \"BookingSize\", \"Location\");\r\n var covers = null;\r\n var bookingTypes = null;\r\n if (this.bookingTypeConfig && this.bookingTypeConfig.length) {\r\n bookingTypes = this.components['_results'][5].form.value;\r\n if (this.coverTypeConfig && this.coverTypeConfig.length) {\r\n covers = this.components['_results'][6].form.value;\r\n }\r\n }\r\n else if (this.coverTypeConfig && this.coverTypeConfig.length) {\r\n covers = this.components['_results'][5].form.value;\r\n }\r\n var instructors = instructor.form.get(\"Instructor\").value == -1 ? this.InstructorList.filter(y => y.id !== -1).map(x => {\r\n return x.id;\r\n }) : [instructor.form.get(\"Instructor\").value]\r\n\r\n var locations = location.form.get(\"Location\").value == -1 ? this.LocationList.filter(y => y.id !== -1).map(x => {\r\n return x.id;\r\n }) : [location.form.get(\"Location\").value]\r\n\r\n this.activityService.SessionBookingObj = new SessionBookingDTO(\r\n null,\r\n this.SelectedActivityData.SpecialMealId,\r\n this.SelectedActivityData.ClassType,\r\n this.getFormValue(fromDate, \"FromDate\"),\r\n this.getFormValue(toDate, \"ToDate\"),\r\n locations,\r\n this.SelectedActivityData.LocationName,\r\n instructors,\r\n this.getFormValue(bookingSize, \"BookingSize\"),\r\n '',\r\n this.getCoverTypeValues(covers),\r\n this.getBookingTypeValues(bookingTypes),\r\n this.getSlotsObj(),\r\n this.getSessionGroupId()\r\n );\r\n if (!this.isSessionClass) {\r\n this.activityService.SelectedClassSchedule$.next(this.selectedClassSchedule);\r\n }\r\n this.activityService.SessionBookingObj.AvailabilityCriteria = this.getAvailabilityCriteria(location, instructors);\r\n this.createSaveRequestObject();\r\n }\r\n\r\n getSlotsObj() {\r\n var resSlots = [];\r\n this.SelectedTimeSlots = [];\r\n\r\n this.SessionSlotsAvailableDates.forEach(availableDate => {\r\n\r\n var sessionsSelected = availableDate.AvailableSessions\r\n .filter(session => session.checked)\r\n sessionsSelected.forEach(element => {\r\n this.SelectedTimeSlots.push({\r\n SessionId: element.SessionId,\r\n Start: element.Start,\r\n End: element.End,\r\n Date: availableDate.AvailableDate\r\n })\r\n });\r\n sessionsSelected = sessionsSelected.map(session => session.SessionId);\r\n\r\n if (sessionsSelected.length) {\r\n\r\n resSlots.push({ Date: availableDate.AvailableDate, SessionIds: sessionsSelected })\r\n }\r\n });\r\n\r\n return resSlots;\r\n }\r\n\r\n getSessionGroupId() {\r\n if (!this.isSessionClass) {\r\n if (!this.selectedClassSchedule.length && this.SelectedActivityData) {\r\n return this.SelectedActivityData.SessionGroupId;\r\n } else if (this.selectedClassSchedule.length) {\r\n return this.selectedClassSchedule.find(item => item)[0].SessionGroupId;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n\r\n getAvailabilityCriteria(locations, instructors) {\r\n if (!locations.length && !instructors.length) {\r\n return AvailabilityCriteria.None\r\n } else if (locations.length && !instructors.length) {\r\n return AvailabilityCriteria.IncludeLocation\r\n } else if (!locations.length && instructors.length) {\r\n return AvailabilityCriteria.IncludeInstructor\r\n } else {\r\n return AvailabilityCriteria.IncludeLocationAndInstructor\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.formChangeSubscribe();\r\n this.nextButton.disbaledproperity = this.updateFormValidity();\r\n if (this.activityService.SelectedActivity$.value) {\r\n this.selectedClassActivity(this.SelectedActivityData);\r\n }\r\n }\r\n\r\n createActionButtons() {\r\n this.nextButton = {\r\n type: buttonTypes.confirmBtn,\r\n label: this.ts.instant('next'),\r\n customclass: 'guest-details__confirm-btn',\r\n };\r\n this.cancelButton = {\r\n type: buttonTypes.cancelBtn,\r\n label: this.ts.instant('previous'),\r\n customclass: 'reservation-details__previous-btn',\r\n disbaledproperity: true\r\n };\r\n this.CheckAvailabilityBtn = {\r\n type: buttonTypes.confirmBtn,\r\n label: this.ts.instant('checkAvailability'),\r\n customclass: 'guest-details__confirm-btn',\r\n disbaledproperity: true\r\n };\r\n this.previousButton = {\r\n type: buttonTypes.cancelBtn,\r\n label: this.ts.instant('previous'),\r\n customclass: 'reservation-details__previous-btn',\r\n };\r\n this.nextButton = {\r\n type: buttonTypes.confirmBtn,\r\n label: this.ts.instant('next'),\r\n customclass: 'guest-details__confirm-btn',\r\n disbaledproperity: true\r\n };\r\n }\r\n selectedClassActivity(data) {\r\n console.log(data);\r\n this.SelectedActivityData = data;\r\n this.isSessionClass = this.SelectedActivityData.ClassType === ClassType.Session;\r\n const StaffList = data.StaffValues;\r\n this.minSizeAllowed = data.MinPartySize;\r\n this.coverTypes = data.CoverTypePrices.map(type => {\r\n return {\r\n Id: type.Id,\r\n Name: type.CoverTypeName\r\n }\r\n });\r\n this.bookingTypes = data.BookingTypeActivitiesMappings.map(type => {\r\n return {\r\n Id: type.Id,\r\n Name: type.BookingTypeName\r\n }\r\n });\r\n\r\n this.customizeSizeConfig[0].validation = [Validators.required, Validators.min(this.SelectedActivityData?.MinPartySize), Validators.max(this.SelectedActivityData?.MaxPartySize)];\r\n\r\n let instructorList = this.InstructorList = this.getInstructor(StaffList);\r\n let locationList = this.LocationList = this.getLocations(data.LocationId);\r\n this.reservationConfig[0].options = this.InstructorList;\r\n this.reservationConfig[0].value = this.EditData && this.EditData.StaffIds ? this.EditData.StaffIds.length && (instructorList ?.length === 1 || (instructorList?.length > 1 && this.EditData.StaffIds.length !== instructorList?.length - 1)) ? this.EditData.StaffIds[0] : -1 :( instructorList?.length == 1 ? instructorList[0].id:-1);\r\n this.locationConfig[0].value = this.EditData && this.EditData.TableIds ? this.EditData.TableIds.length && (locationList ?.length === 1 || (locationList ?.length > 1 && this.EditData.TableIds.length !== locationList ?.length - 1)) ? this.EditData.TableIds[0] : -1 : ( locationList ?.length == 1 ? locationList[0].id : -1);\r\n this.locationConfig[0].options = this.LocationList;\r\n this.bookingType_config[0].options = this.calculatePartySize();\r\n this.coverTypeConfig = this.getCoverTypeConfig();\r\n this.coverTypeConfig = this.coverTypeConfig.map(config => {\r\n config.options = [{ id: 0, value: \"none\" }, ...this.bookingSizeArray];\r\n return config;\r\n })\r\n\r\n this.bookingTypeConfig = this.getBookingTypeConfig();\r\n this.bookingTypeConfig = this.bookingTypeConfig.map(config => {\r\n config.options = [{ id: 0, value: \"none\" }, ...this.bookingSizeArray];\r\n return config;\r\n })\r\n\r\n this.showSessionorSlots = false;\r\n this.selectedClassSchedule = [];\r\n this.SessionSlotsAvailableDates = [];\r\n this.components.forEach((x) => {\r\n if (this.SelectedActivityData.ClassType === 1) {\r\n if (x.form.controls[\"FromDate\"]) {\r\n x.form.controls[\"FromDate\"].setValue(data.StartDate);\r\n x.form.controls[\"FromDate\"].disable();\r\n this.from_dateConfig[0].minDate = '';\r\n this.from_dateConfig[0].maxDate = '';\r\n }\r\n if (x.form.controls[\"ToDate\"]) {\r\n x.form.controls[\"ToDate\"].setValue(data.EndDate);\r\n x.form.controls[\"ToDate\"].disable();\r\n this.to_dateConfig[0].minDate = '';\r\n this.to_dateConfig[0].maxDate = '';\r\n }\r\n } else {\r\n const currentDate = new Date();\r\n if (x.form.controls[\"FromDate\"]) {\r\n x.form.controls[\"FromDate\"].setValue(new Date(data.StartDate) > currentDate ? new Date(data.StartDate) : currentDate);\r\n x.form.controls[\"FromDate\"].enable();\r\n this.from_dateConfig[0].minDate = new Date(data.StartDate) > currentDate ? new Date(data.StartDate) : currentDate;\r\n this.from_dateConfig[0].maxDate = data.EndDate;\r\n }\r\n if (x.form.controls[\"ToDate\"]) {\r\n x.form.controls[\"ToDate\"].setValue(data.EndDate);\r\n x.form.controls[\"ToDate\"].enable();\r\n this.to_dateConfig[0].minDate = new Date(data.StartDate) > currentDate ? new Date(data.StartDate) : currentDate;\r\n this.to_dateConfig[0].maxDate = data.EndDate;\r\n }\r\n }\r\n });\r\n this.updateDateConfig();\r\n setTimeout(() => {\r\n this.coverTypeConfigChange();\r\n this.bookingTypeConfigChange();\r\n }, 500);\r\n }\r\n updateDateConfig() {\r\n this.from_dateConfig = [\r\n {\r\n type: 'date',\r\n name: 'FromDate',\r\n placeholder: '',\r\n appearance: true,\r\n isFormArray: false,\r\n label: this.ts.instant('FromDate'),\r\n minDate: this.EditData?.StartDate ? this.EditData.StartDate : this.SelectedActivityData ? this.SelectedActivityData.StartDate : '',\r\n maxDate: this.EditData?.EndDate ? this.EditData.EndDate : this.SelectedActivityData ? this.SelectedActivityData.EndDate : '',\r\n class: \"selector-date\",\r\n validation: [Validators.required],\r\n value: this.EditData?.StartDate ? this.EditData.StartDate : this.SelectedActivityData ? this.SelectedActivityData.StartDate : '',\r\n disabled: this.SelectedActivityData?.ClassType == ClassType.Class\r\n }\r\n ];\r\n this.to_dateConfig = [\r\n {\r\n type: 'date',\r\n name: 'ToDate',\r\n placeholder: 'select',\r\n appearance: true,\r\n isFormArray: false,\r\n minDate: this.EditData?.StartDate ? this.EditData.StartDate : this.SelectedActivityData ? this.SelectedActivityData.StartDate : '',\r\n maxDate: this.EditData?.EndDate ? this.EditData.EndDate : this.SelectedActivityData ? this.SelectedActivityData.EndDate : '',\r\n label: this.ts.instant('ToDate'),\r\n class: \"selector-date\",\r\n validation: [Validators.required],\r\n value: this.EditData?.EndDate ? this.EditData.EndDate : this.SelectedActivityData ? this.SelectedActivityData.EndDate : '',\r\n disabled: this.SelectedActivityData?.ClassType == ClassType.Class\r\n },\r\n ]\r\n }\r\n coverTypeConfigChange() {\r\n if (this.coverTypeConfig.length) {\r\n this.Subscriptions.add(\r\n this.components.last.form.valueChanges.subscribe(value => {\r\n this.nextButton.disbaledproperity = !this.updateFormValidity();\r\n this.validCoverTypes = this.isCoverTypeMatchBookingSize()\r\n }));\r\n }\r\n }\r\n bookingTypeConfigChange() {\r\n if (this.bookingTypeConfig.length) {\r\n this.Subscriptions.add(\r\n this.components.filter((item, index) => index === 5)[0].form.valueChanges.subscribe(value => {\r\n this.nextButton.disbaledproperity = !this.updateFormValidity();\r\n this.validBookingTypes = this.isBookingTypeMatchBookingSize()\r\n }));\r\n }\r\n }\r\n\r\n getInstructor(staffList) {\r\n let SelectedStaffList = [];\r\n if (staffList.length > 1) {\r\n SelectedStaffList.push({ 'Id': -1, 'value': 'Any' });\r\n }\r\n staffList.forEach(staff => {\r\n const selectedStaff = this.activityService.InstructorList.filter(data => data.Id === staff.ServerId)[0];\r\n if (selectedStaff) {\r\n let serverval = \"Unnamed\";\r\n if (selectedStaff) {\r\n if (selectedStaff.Name) {\r\n serverval = selectedStaff.Name;\r\n }\r\n if (selectedStaff.LastName) {\r\n serverval = serverval + ' ' + selectedStaff.LastName;\r\n }\r\n }\r\n selectedStaff['value'] = serverval;\r\n\r\n SelectedStaffList.push(selectedStaff);\r\n }\r\n });\r\n SelectedStaffList = SelectedStaffList.map(data => {\r\n return {\r\n id: data.Id,\r\n value: data.value\r\n }\r\n })\r\n\r\n if (!(staffList.length > 1)) {\r\n this.reservationConfig = [\r\n {\r\n type: 'select',\r\n name: 'Instructor',\r\n placeholder: '',\r\n options: [],\r\n appearance: true,\r\n isFormArray: false,\r\n value: this.EditData ? this.EditData.StaffIds && this.EditData.StaffIds.length > 0 ? this.EditData.StaffIds[0] : SelectedStaffList[0].id : SelectedStaffList[0].id,\r\n label: this.ts.instant('SelectaInstructor'),\r\n class: \"activity-instructor\",\r\n validation: [Validators.required],\r\n }\r\n\r\n ];\r\n\r\n }\r\n return SelectedStaffList;\r\n }\r\n\r\n getLocations(LocationList) {\r\n let SelectedLocationList = [];\r\n if (LocationList.length > 1) {\r\n SelectedLocationList.push({ 'Id': -1, 'value': 'Any' });\r\n }\r\n LocationList.forEach(location => {\r\n const selectedLocation = this.activityService.LocationList.filter(data => data.Id === location.LocationId)[0];\r\n if (selectedLocation) {\r\n selectedLocation['value'] = selectedLocation.Name;\r\n SelectedLocationList.push(selectedLocation);\r\n }\r\n });\r\n SelectedLocationList = SelectedLocationList.map(data => {\r\n return {\r\n id: data.Id,\r\n value: data.value\r\n }\r\n })\r\n if (!(LocationList.length > 1)) {\r\n this.locationConfig = [\r\n {\r\n type: 'select',\r\n name: 'Location',\r\n placeholder: '',\r\n options: [],\r\n appearance: true,\r\n isFormArray: false,\r\n value: this.EditData ? this.EditData.Location && this.EditData.Location.length > 0 ? this.EditData.Location[0] : SelectedLocationList[0].id : SelectedLocationList[0].id,\r\n label: this.ts.instant('SelectaLocation'),\r\n class: \"activity-instructor\",\r\n validation: [Validators.required],\r\n }];\r\n }\r\n return SelectedLocationList;\r\n\r\n }\r\n\r\n\r\n setRatePlanCalculation(Slots, GuestTypes, BookingTypes, Location, BookingSize, ActivityId, SessionGroupId) {\r\n var request = {\r\n Slots: [],\r\n ActivityId,\r\n GuestTypes,\r\n BookingTypes,\r\n TableIds: Location,\r\n Size: +BookingSize,\r\n SessionSlot: {\r\n Sessions: SessionGroupId ? null : Slots,\r\n SessionGroupId: SessionGroupId\r\n },\r\n TrackMembershipNumber: this.activityService.selectedGuest && this.activityService.selectedGuest.TrackMembershipNumber,\r\n MemberType: this.activityService.selectedGuest?.MembershipType?.AllocationName,\r\n IsMemberActive: this.activityService.selectedGuest?.MemberActive,\r\n BookingBehavior: BookingBehavior.ClassOrSession\r\n } as ActivityRatePlanRequest;\r\n this.Subscriptions.add(this.activityService.GetSessionRatePlanCalculated(request).subscribe(response => {\r\n this.ratePlan = response.Payload;\r\n if (this.ratePlan && this.ratePlan.RatePlanCalculations) {\r\n this.ratePlan.RatePlanCalculations = this.ratePlan.SlotList = this.ratePlan.RatePlanCalculations.map(slot => {\r\n slot.coverTypeVariants = slot.RatePlanVariants && slot.RatePlanVariants.GuestTypeVariant ? slot.RatePlanVariants.GuestTypeVariant.map(coverVariant => {\r\n coverVariant.CoverTypeName = this.coverTypes.find(coverType => coverType.Id == coverVariant.CoverTypeId).Name;\r\n return coverVariant;\r\n }).filter(coverVariant => coverVariant.Variant) : [];\r\n slot.bookingTypeVariants = slot.RatePlanVariants && slot.RatePlanVariants.BookingTypeVariant ? slot.RatePlanVariants.BookingTypeVariant.map(bookingTypeVariant => {\r\n bookingTypeVariant.BookingTypeName = this.bookingTypes.find(bookingType => bookingType.Id == bookingTypeVariant.BookingTypeId).Name;\r\n return bookingTypeVariant;\r\n }).filter(bookingTypeVariant => bookingTypeVariant.Variant) : [];\r\n return slot;\r\n });\r\n } else {\r\n this.ratePlan.SlotList = Slots;\r\n }\r\n if (this.ratePlan.TotalRatePlan || this.ratePlan.RatePlanCalculations) {\r\n this.activityService.RatePlanList$.next(this.ratePlan);\r\n }\r\n }));\r\n }\r\n\r\n getCoverTypeConfig(): FieldConfig[] {\r\n return this.coverTypes.map(coverType => {\r\n return {\r\n type: 'select',\r\n label: coverType.Name,\r\n name: coverType.Name,\r\n value: (this.EditData && this.EditData.CoverTypeQuantities && this.EditData.CoverTypeQuantities.filter(ct => ct.CoverTypeId == coverType.Id && ct.Covers > 0).length > 0) ? this.bookingSizeArray[this.EditData.CoverTypeQuantities.filter(ct => ct.CoverTypeId == coverType.Id)[0].Covers - 1].id : 0,\r\n options: this.bookingSizeArray,\r\n class: 'activity-instructor',\r\n appearance: true,\r\n isFormArray: false,\r\n } as FieldConfig;\r\n })\r\n }\r\n\r\n getBookingTypeConfig(): FieldConfig[] {\r\n return this.bookingTypes.map(bookingType => {\r\n return {\r\n type: 'select',\r\n label: bookingType.Name,\r\n name: bookingType.Name,\r\n value: (this.EditData && this.EditData.BookingTypeQuantities && this.EditData.BookingTypeQuantities.filter(bt => bt.BookingTypeId == bookingType.Id && bt.BookingTypes > 0).length > 0) ? this.bookingSizeArray[this.EditData.BookingTypeQuantities.filter(bt => bt.BookingTypeId == bookingType.Id)[0].BookingTypes - 1].id : 0,\r\n options: this.bookingSizeArray,\r\n class: 'activity-instructor',\r\n appearance: true,\r\n isFormArray: false,\r\n } as FieldConfig;\r\n })\r\n }\r\n\r\n setCoverTypeValue(covertType) {\r\n this.EditData?.CoverTypes?.forEach(data => {\r\n if (data.CoverTypeId === covertType.Id) {\r\n return data.covers;\r\n }\r\n });\r\n }\r\n\r\n setBookingTypeValue(bookingType) {\r\n this.EditData?.BookingTypes?.forEach(data => {\r\n if (data.BookingTypeId === bookingType.Id) {\r\n return data.bookingTypes;\r\n }\r\n });\r\n }\r\n\r\n calculatePartySize() {\r\n this.bookingSizeArray = [];\r\n for (let i = 1; i <= this.SelectedActivityData?.MaxPartySize; i++) {\r\n this.bookingSizeArray.push({ id: i, value: i.toString() });\r\n }\r\n // this.bookingSizeArray.push({ id: this.maxSizeAllowed, value: this.maxSizeAllowed.toString() + \"+\" });\r\n\r\n return this.bookingSizeArray;\r\n }\r\n\r\n formChangeSubscribe() {\r\n this.components.forEach((x, index) => {\r\n this.Subscriptions.add(x.form?.valueChanges.pipe(debounceTime(100),\r\n distinctUntilChanged()).subscribe(value => {\r\n if (value.bookingType) {\r\n this.activityService.bookingType$.next(this.getFormComponent(\"bookingType\")[0].form.controls.bookingType.value)\r\n }\r\n if (value.BookingSize) {\r\n this.activityService.additionalGuestLength = value.BookingSize;\r\n }\r\n if (value.Location || value.Instructor || value.FromDate || value.ToDate || value.BookingSize) {\r\n if (this.activityService.operation === operationType.create) {\r\n this.checkSessionorSlotAvailability();\r\n }\r\n if (this.activityService.operation === operationType.edit) {\r\n if (this.activityService.reservationToken || this.currentTab === ActivityTabs.BookingSelection) {\r\n this.formRepeatCount = this.formRepeatCount + 1;\r\n if (this.formRepeatCount > 4) {\r\n this.checkSessionorSlotAvailability();\r\n }\r\n }\r\n else {\r\n if (this.currentTab === ActivityTabs.ActivitySelection) {\r\n this.checkSessionorSlotAvailability();\r\n }\r\n }\r\n }\r\n }\r\n this.nextButton.disbaledproperity = !this.updateFormValidity();\r\n this.validCoverTypes = this.isCoverTypeMatchBookingSize();\r\n this.validBookingTypes = this.isBookingTypeMatchBookingSize();\r\n })\r\n )\r\n });\r\n }\r\n\r\n getSlotsForClass(requestedObject) {\r\n requestedObject.PropertyId = this.activityService.restaurantWidgetId;\r\n this.checkedItem = false;\r\n this.Subscriptions.add(this.activityService.GetClassSlots(requestedObject).subscribe(response => {\r\n let slots = response.Payload;\r\n this.SessionSlotsAvailableDates = slots.length ? slots.map((date, index) => {\r\n date.AvailableSessions = date.AvailableSessions\r\n .filter(session => session.Availability?.AvailabilityType != AvailabilityType.SelectionCriteriaNotMatched)\r\n .map((slot, datatindex) => {\r\n slot.Start = date.AvailableDate.split(\"T\")[0] + \"T\" + slot.Start;\r\n slot.End = date.AvailableDate.split(\"T\")[0] + \"T\" + slot.End;\r\n if (this.activityService.editPartyData$.value) {\r\n this.updateSlotBasedOnBookedSession(slot, date);\r\n }\r\n if (!this.isNotPastTimeSlot(slot.End) && !slot.checked) {\r\n slot.disabled = true;\r\n }\r\n return slot;\r\n }).sort((a, b) => {\r\n var c: any = new Date(a.Start);\r\n var d: any = new Date(b.Start);\r\n return c.getTime() - d.getTime();\r\n })\r\n return date;\r\n }) : null;\r\n if (this.SessionSlotsAvailableDates) {\r\n this.showSessionorSlots = true;\r\n this.SessionSlotsAvailableDates = this.SessionSlotsAvailableDates.filter(slot => slot.AvailableSessions.length);\r\n let isChecked = false;\r\n this.SessionSlotsAvailableDates.forEach((element, index) => {\r\n const checked = element.AvailableSessions.findIndex(x => x.checked);\r\n if (checked !== -1 && !this.checkedItem) {\r\n this.checkedItem = true;\r\n this.selectedIndex = index;\r\n }\r\n });\r\n }\r\n\r\n\r\n if (!this.isSessionClass) {\r\n this.availableSessions = [];\r\n this.classLessonList = [];\r\n this.SessionSlotsAvailableDates.forEach(elm => {\r\n this.availableSessions = [...this.availableSessions, ...elm.AvailableSessions]\r\n })\r\n var groupIdList: any[] = Utilities.uniqueBy(this.availableSessions, \"SessionGroupId\");\r\n groupIdList.forEach(group => {\r\n var selectedSession = this.availableSessions.find(session => session.SessionGroupId === +group.SessionGroupId);\r\n selectedSession.checked = this.activityService.editPartyData$.value && this.activityService.editPartyData$.value.SessionGroupId ? selectedSession.SessionGroupId === this.activityService.editPartyData$.value.SessionGroupId : false;\r\n this.classLessonList.push(selectedSession);\r\n const checkedItem = this.classLessonList.filter(x => x.checked);\r\n this.checkedItem = checkedItem.length ? true : false;\r\n })\r\n this.selectedClassSchedule = [];\r\n let groupList: any[] = Utilities.uniqueBy(this.availableSessions, \"SessionGroupId\", \"DayOfWeek\", \"SessionId\");\r\n groupList = groupList.filter(group => group.SessionGroupId == this.activityService.editPartyData$.value?.SessionGroupId);\r\n groupList.forEach(groupDetail => {\r\n if (!this.selectedClassSchedule[groupDetail.DayOfWeek]) {\r\n this.selectedClassSchedule[groupDetail.DayOfWeek] = [];\r\n }\r\n let selectedItem = this.availableSessions.find(session => session.SessionGroupId == groupDetail.SessionGroupId && session.DayOfWeek == groupDetail.DayOfWeek && session.SessionId == groupDetail.SessionId);\r\n this.selectedClassSchedule[groupDetail.DayOfWeek].push(selectedItem);\r\n });\r\n }\r\n this.nextButton.disbaledproperity = !this.updateFormValidity();\r\n // if (this.SelectedActivityData) {\r\n // this.updateFormValidity();\r\n // }\r\n this.showSessionorSlots = true;\r\n\r\n }));\r\n }\r\n\r\n navClick(moveDirection) {\r\n if ((moveDirection === 1 && this.selectedIndex === this.SessionSlotsAvailableDates.length - 1)\r\n || (moveDirection === -1 && this.selectedIndex === 0)) {\r\n return;\r\n }\r\n this.selectedIndex = this.selectedIndex + moveDirection;\r\n }\r\n\r\n\r\n applyToOtherDates(selectedDateIndex, event) {\r\n\r\n var selectedSessionIndexes = this.SessionSlotsAvailableDates[selectedDateIndex].AvailableSessions.map((session, index) => session.checked ? index : -1).filter(sessionIndex => sessionIndex != -1);\r\n if(this.activityService.selectedGuest){\r\n var {MembershipType: memberTypename, MemberActive: memberActive} = this.activityService.selectedGuest;\r\n var memberType = this.activityService.restaurantWidgetSettings$.value.AllocationMappings.find(allocation => allocation.AllocationTypeName.trim().toLocaleLowerCase() === memberTypename.trim().toLocaleLowerCase()); \r\n if(memberType){\r\n var memberid = memberType.AllocationTypeId;\r\n }\r\n }\r\n if (event.checked) {\r\n this.sessionsUnavailable = [];\r\n if (!selectedSessionIndexes || !selectedSessionIndexes.length) {\r\n this.activityService.setMessageState(this.ts.instant(\"Select sessions to apply for all dates\"), 0);\r\n return;\r\n }\r\n this.SessionSlotsAvailableDates.forEach(selectedDate => {\r\n selectedDate.AvailableSessions = selectedDate.AvailableSessions.map(session => {\r\n session.checked = false;\r\n return session;\r\n });\r\n selectedSessionIndexes.forEach(index => {\r\n if (selectedDate.AvailableSessions[index] && \r\n (\r\n selectedDate.AvailableSessions[index].Availability?.AvailabilityType === AvailabilityType.OpenToAll\r\n || (selectedDate.AvailableSessions[index].Availability?.AvailabilityType === AvailabilityType.OpenToSpecificMember\r\n && ((selectedDate.AvailableSessions[index].Availability?.AllocationTypeId == memberid)\r\n || (this.IsMember(selectedDate.AvailableSessions[index].Availability) && memberid)) && memberActive)\r\n ) \r\n && !selectedDate.AvailableSessions[index].disabled) {\r\n selectedDate.AvailableSessions[index].checked = true;\r\n } else {\r\n if (!this.sessionsUnavailable[index] || !this.sessionsUnavailable[index].dates) {\r\n this.sessionsUnavailable[index] = { session: this.ts.instant(\"Session\") + \" \" + (index + 1) + \" \" + this.ts.instant(\"not available on\") + \" \", dates: \"\" }\r\n }\r\n this.sessionsUnavailable[index].dates += this.sessionsUnavailable[index].dates ? \", \" + moment(selectedDate.AvailableDate).format(\"LL\") : moment(selectedDate.AvailableDate).format(\"LL\");\r\n }\r\n });\r\n });\r\n this.sessionsUnavailable = this.sessionsUnavailable.filter(item => item)\r\n if (!this.sessionsUnavailable || !this.sessionsUnavailable.length) {\r\n //this.toastrService.success(this.ts.instant(\"Applied\"), \"\", { timeOut: 3000, closeButton: true });\r\n } else {\r\n let errorMessage = ''\r\n var errObj = {\r\n ErrorDetails: {\r\n Error: this.sessionsUnavailable.map(session => {\r\n errorMessage = errorMessage + session.session + session.dates + '. '\r\n })\r\n },\r\n ErrorType: true,\r\n dialogTitle: 'error'\r\n }\r\n this.activityService.setMessageState(errorMessage, 0);\r\n }\r\n } else {\r\n this.SessionSlotsAvailableDates.forEach(selectedDate => {\r\n selectedDate.AvailableSessions = selectedDate.AvailableSessions.map(session => {\r\n session.checked = false;\r\n return session;\r\n })\r\n });\r\n this.updateFormValidity();\r\n }\r\n }\r\n\r\n IsMember(slot : any) : boolean{\r\n if(!slot || !this.gs.restaurantWidgetSettings$.value.AllocationMappings) return false;\r\n let allocationType = this.gs.restaurantWidgetSettings$.value.AllocationMappings;\r\n let isAnyMember = allocationType.find(type => type.AllocationTypeId === slot.AllocationTypeId)?.AllocationTypeName == 'AnyMembers';\r\n return isAnyMember;\r\n }\r\n\r\n slotChangeListners(event) {\r\n if (this.SelectedActivityData && this.SelectedActivityData.ClassType == ClassType.Class && event.checked) {\r\n let groupIdList: any[] = Utilities.uniqueBy(this.availableSessions, \"SessionGroupId\", \"DayOfWeek\", \"SessionId\");\r\n this.selectedClassSchedule = [];\r\n groupIdList = groupIdList.filter(group => group.SessionGroupId == event.SessionGroupId);\r\n groupIdList.forEach(groupDetail => {\r\n if (!this.selectedClassSchedule[groupDetail.DayOfWeek]) {\r\n this.selectedClassSchedule[groupDetail.DayOfWeek] = [];\r\n }\r\n let selectedItem = this.availableSessions.find(session => session.SessionGroupId == groupDetail.SessionGroupId && session.DayOfWeek == groupDetail.DayOfWeek && session.SessionId == groupDetail.SessionId);\r\n this.selectedClassSchedule[groupDetail.DayOfWeek].push(selectedItem);\r\n });\r\n this.classLessonList.forEach(session => {\r\n if (session.SessionId != event.SessionId || session.SessionGroupId != event.SessionGroupId) {\r\n session.checked = false;\r\n }\r\n });\r\n const checkedItem = this.classLessonList.filter(x => x.checked);\r\n this.checkedItem = checkedItem.length ? true : false;\r\n } else if (!this.isMultiSlotSelection && event.checked) {\r\n let isChecked = false;\r\n this.SessionSlotsAvailableDates.forEach((element, index) => {\r\n element.AvailableSessions.forEach(session => {\r\n if (session.SessionId != event.SessionId) {\r\n session.checked = false;\r\n }\r\n if (session.checked) {\r\n isChecked = true;\r\n }\r\n });\r\n });\r\n this.checkedItem = isChecked;\r\n } else {\r\n if (this.classLessonList && this.classLessonList.length > 0) {\r\n const checkedItem = this.classLessonList.filter(x => x.checked);\r\n this.checkedItem = checkedItem.length ? true : false\r\n } else {\r\n let isChecked = false;\r\n this.SessionSlotsAvailableDates.forEach((element, index) => {\r\n element.AvailableSessions.forEach(session => {\r\n\r\n if (session.checked) {\r\n isChecked = true;\r\n }\r\n });\r\n });\r\n this.checkedItem = isChecked;\r\n }\r\n }\r\n this.nextButton.disbaledproperity = !this.updateFormValidity();\r\n }\r\n isSlotBooked(date, sessionId, editData): boolean {\r\n return editData.BookedSessions.findIndex(session => moment(session.BookedDate).diff(moment(date), 'days') == 0 && session.ActivitySessionId == sessionId && session.SessionState != PartyState.Cancelled) > -1;\r\n }\r\n\r\n\r\n getStateOfBookedSession(date, sessionId, editData): PartyState {\r\n return editData.BookedSessions.find(session => moment(session.BookedDate).diff(moment(date), 'days') == 0 && session.ActivitySessionId == sessionId).SessionState;\r\n }\r\n\r\n\r\n\r\n updateSlotBasedOnBookedSession(slot, date) {\r\n const editData = this.activityService.editPartyData$.value;\r\n slot.checked = editData && editData.BookedSessions && editData.BookedSessions.length > 0 ? this.isSlotBooked(date.AvailableDate, slot.SessionId, editData) : false;\r\n\r\n if (slot.checked && editData && editData.BookedSessions && editData.BookedSessions.length > 0 && this.getStateOfBookedSession(date.AvailableDate, slot.SessionId, editData) == PartyState.Seated) {\r\n slot.Availability.AvailabilityType = AvailabilityType.SelectionCriteriaNotMatched;\r\n slot.checked = false;\r\n }\r\n\r\n }\r\n\r\n gotoPreviousPage(event) {\r\n this.activityService.TabChange$.next(ActivityTabs.ActvityView);\r\n this.activityService.SaveBookingObj = {};\r\n this.resetPaymentInfo();\r\n if (this.activityService.lockResult && this.activityService.lockResult.SlotLockIdDTO) {\r\n this.activityService.unlockSessionsUrl(this.activityService.lockResult.SlotLockIdDTO.Id).subscribe(data => {\r\n this.activityService.lockResult = null;\r\n this.activityService.offTimer();\r\n });\r\n }\r\n // this.activityService.bookingSection$. next(true);\r\n }\r\n\r\n resetPaymentInfo() {\r\n this.activityService.ispaymentInvolvedInfo = null;\r\n this.activityService.reservationAttemptInfo = null;\r\n }\r\n\r\n\r\n\r\n gotoNextPage(event) {\r\n if (this.activityService.selectedGuest && this.activityService.selectedGuest.TrackMembershipNumber && !this.activityService.selectedGuest?.MemberActive) {\r\n const popUpMessage = [{\r\n confirmationMessage: this.ts.instant('memberShipExpired'),\r\n dialogTitle: this.ts.instant('memberShipStatus'),\r\n showAlert: true\r\n }];\r\n const componentDetails: ComponentDetails = Utilities.setComponentDetails(PopupMessageComponent, 'small', 'static', popUpMessage,\r\n popUpMessage[0].dialogTitle);\r\n const confirm = this.openCustomPopup(componentDetails, ComponentTypes.financialEffectCalculation, '450px', '250px', false, 'No', 'ok',\r\n 'ok', false)\r\n return;\r\n }\r\n this.setBookingData();\r\n this.lockTables();\r\n // this.activityService.TabChange$.next(1);\r\n }\r\n\r\n selectedItem(data, index) {\r\n this.SelectedActivityData = this.availableActivities[index];\r\n this.selectedClassActivity(this.SelectedActivityData);\r\n }\r\n\r\n lockTables() {\r\n\r\n let { ActivityId, FromDate, Slots, GuestTypes, BookingTypes, Location, StaffId, BookingSize, SessionGroupId } = this.activityService.SessionBookingObj;\r\n const classType = this.activityService.SessionBookingObj.ClassType;\r\n this.isSessionClass = classType === ClassType.Session;\r\n let lockRequest = {\r\n ActivityId: ActivityId,\r\n StartDate: FromDate,\r\n BookingSize: BookingSize,\r\n ClassType: classType,\r\n lockIdToIgnore: this.lockResponse?.SlotLockIdDTO?.Id || null,\r\n Sessions: classType == ClassType.Class ? [] : Slots,\r\n SessionGroupId: classType == ClassType.Class ? SessionGroupId : null,\r\n ReservationIdToIgnore: this.activityService.editPartyData$.value?.Id || null\r\n } as LockSessionRequestDTO;\r\n this.Subscriptions.add(\r\n this.activityService\r\n .lockSessions(this.activityService.restaurantWidgetId, lockRequest).subscribe(response => {\r\n this.lockResponse = response.Payload;\r\n this.activityService.lockResult = this.lockResponse;\r\n this.createSaveRequestObject();\r\n if (!this.activityService.restaurantWidgetSettings$.value.IsCartEnabled || this.activityService.operation !== operationType.create) {\r\n let timer = moment(response.Payload.ExpiresAt).diff(moment(response.Payload.LockedAt), \"seconds\");\r\n this.activityService.showTimer = true;\r\n this.activityService.runTimer(timer);\r\n }\r\n this.activityService.TabChange$.next(ActivityTabs.ReservationDetails);\r\n if (this.activityService.operation == operationType.edit) {\r\n this.activityService.additionalGuestPage = false;\r\n }\r\n if (this.activityService.operation !== operationType.create) {\r\n this.setRatePlanCalculation(Slots, GuestTypes, BookingTypes, Location, BookingSize, ActivityId, classType == ClassType.Class ? SessionGroupId : null);\r\n }\r\n }));\r\n }\r\n\r\n\r\n\r\n setRatePlanData(data) {\r\n this.ratePlan = data;\r\n if (this.ratePlan && this.ratePlan.RatePlanCalculations) {\r\n this.ratePlan.RatePlanCalculations = this.ratePlan.RatePlanCalculations.map(slot => {\r\n slot.coverTypeVariants = slot.RatePlanVariants && slot.RatePlanVariants.GuestTypeVariant ? slot.RatePlanVariants.GuestTypeVariant.map(coverVariant => {\r\n coverVariant.CoverTypeName = this.coverTypes.find(coverType => coverType.Id == coverVariant.CoverTypeId).Name;\r\n return coverVariant;\r\n }).filter(coverVariant => coverVariant.Variant) : [];\r\n slot.bookingTypevariants = slot.RatePlanVariants && slot.RatePlanVariants.BookingTypeVariant ? slot.RatePlanVariants.BookingTypeVariant.map(bookingTypeVariant => {\r\n bookingTypeVariant.BookingTypeName = this.bookingTypes.find(bookingType => bookingType.Id == bookingTypeVariant.BookingTypeId).Name;\r\n return bookingTypeVariant;\r\n }).filter(bookingTypeVariant => bookingTypeVariant.Variant) : [];\r\n return slot;\r\n });\r\n }\r\n if (this.ratePlan.TotalRatePlan || this.ratePlan.RatePlanCalculations) {\r\n this.activityService.RatePlanList$.next(this.ratePlan);\r\n }\r\n this.activityService.SelectedClassSchedule$.next(this.selectedClassSchedule);\r\n this.createSaveRequestObject();\r\n }\r\n\r\n createSaveRequestObject() {\r\n var bookingData = this.activityService.SessionBookingObj;\r\n if (this.activityService.operation === operationType.create) {\r\n this.activityService.SaveBookingObj = {\r\n \"Id\": bookingData.ActivityId,\r\n \"Size\": bookingData.BookingSize,\r\n \"RemindAboutVisit\": false,\r\n \"RemindAboutVisitEmail\": false,\r\n \"AgreedWithTermsOfUse\": true,\r\n \"Contact\": {},\r\n \"Slots\": this.getSlotsObj(),\r\n \"Slot\": this.getRequestObjectSlot(),\r\n \"Sessions\": this.getRequestObjectSlots(),\r\n \"PartyId\": null,\r\n \"SeatingAreaId\": null,\r\n \"SeatingTypeId\": null,\r\n \"Notes\": [],\r\n \"TableIds\": bookingData.Location,\r\n \"InstructorIds\": bookingData.StaffId,\r\n \"CoverTypes\": bookingData.GuestTypes,\r\n \"BookingTypes\": bookingData.BookingTypes,\r\n \"IsCommunalTable\": false,\r\n \"FromWebsite\": true,\r\n \"Language\": 0,\r\n \"ReservationAttemptId\": null,\r\n \"waiverFormTransactionId\": null,\r\n \"SecondaryContactsList\": null,\r\n \"BookingBehavior\": BookingBehavior.ClassOrSession,\r\n \"SpecialMealId\": bookingData.ActivityId,\r\n \"StaffId\": bookingData.StaffId,\r\n \"StaffIds\": bookingData.StaffId,\r\n \"StartDate\": new Date(bookingData.FromDate).toDateString(),//(moment(bookingData.FromDate).format()).split(\"+\")[0],\r\n \"EndDate\": new Date(bookingData.ToDate).toDateString(),//(moment(bookingData.ToDate).format()).split(\"+\")[0],\r\n \"SelectedSchedule\": this.selectedClassSchedule,\r\n \"SelectedTimeSlots\": this.SelectedTimeSlots,\r\n \"SessionGroupId\": bookingData.SessionGroupId,\r\n \"SelectedActivity\": this.SelectedActivityData\r\n }\r\n } else {\r\n this.activityService.SaveBookingObj.Id = bookingData.ActivityId;\r\n this.activityService.SaveBookingObj.Size = bookingData.BookingSize;\r\n this.activityService.SaveBookingObj.Slot = this.getRequestObjectSlot();\r\n this.activityService.SaveBookingObj.Sessions = this.getRequestObjectSlots();\r\n this.activityService.SaveBookingObj.StartDate =new Date(bookingData.FromDate).toDateString();// (moment(bookingData.FromDate).format()).split(\"+\")[0];\r\n this.activityService.SaveBookingObj.EndDate = new Date(bookingData.ToDate).toDateString();//(moment(bookingData.ToDate).format()).split(\"+\")[0];\r\n this.activityService.SaveBookingObj.SpecialMealId = bookingData.ActivityId;\r\n this.activityService.SaveBookingObj.StaffId = bookingData.StaffId;\r\n this.activityService.SaveBookingObj.StaffIds = bookingData.StaffId;\r\n this.activityService.SaveBookingObj.TableIds = bookingData.Location;\r\n this.activityService.SaveBookingObj.InstructorIds = bookingData.StaffId;\r\n this.activityService.SaveBookingObj.CoverTypes = bookingData.GuestTypes;\r\n this.activityService.SaveBookingObj.BookingTypes = bookingData.BookingTypes;\r\n this.activityService.SaveBookingObj.selectedClassSchedule = this.selectedClassSchedule;\r\n this.activityService.SaveBookingObj.SelectedTimeSlots = this.SelectedTimeSlots;\r\n this.activityService.SaveBookingObj.SelectedActivity = this.SelectedActivityData;\r\n this.activityService.SaveBookingObj.BookingBehavior = BookingBehavior.ClassOrSession;\r\n this.activityService.SaveBookingObj.FromWebsite = true;\r\n }\r\n }\r\n\r\n getRequestObjectSlots() {\r\n var bookingData = this.activityService.SessionBookingObj;\r\n var sessionClass = this.activityService.SessionBookingObj.ClassType === ClassType.Session;\r\n\r\n return {\r\n LockId: this.lockResponse?.SlotLockIdDTO?.Id,\r\n Sessions: sessionClass ? bookingData.Slots : [],\r\n SessionGroupId: sessionClass ? null : bookingData.SessionGroupId\r\n }\r\n }\r\n\r\n getRequestObjectSlot() {\r\n var bookingData: SessionBookingDTO = this.activityService.SessionBookingObj;\r\n\r\n return {\r\n \"Time\": new Date(bookingData.FromDate).toDateString(),//(moment(bookingData.FromDate).format()).split(\"+\")[0],\r\n \"LockId\": this.lockResponse?.SlotLockIdDTO?.Id,\r\n \"Type\": bookingData.AvailabilityCriteria\r\n }\r\n }\r\n\r\n isNotPastTimeSlot(slotDateTime): boolean {\r\n const maxPastTime = this.activityService.restaurantWidgetSettings$.value.MaxPastTimeForReservationsInMinutes;\r\n const currentTime = Utilities.getRestaurantDateTime(this.activityService.restaurantWidgetSettings$.value.DaylightDelta);\r\n const past1hr = new Date(currentTime.valueOf());\r\n const slotTime = Utilities.parseDateString(slotDateTime);\r\n return slotTime >= past1hr;\r\n }\r\n ngOnDestroy(): void {\r\n if (this.Subscriptions) { this.Subscriptions.unsubscribe(); }\r\n }\r\n\r\n UniqueArrayOfObject(array, FirstkeyToBeUnique, SecondKeyToBeUnique) {\r\n return array.filter((data, index) => !array.slice(index + 1)\r\n .some(y => y[FirstkeyToBeUnique] === data[FirstkeyToBeUnique] && y[SecondKeyToBeUnique] === data[SecondKeyToBeUnique]));\r\n }\r\n\r\n}\r\n","
\r\n
\r\n \r\n
\r\n
\r\n
\r\n

{{classDetail.LessonName}}

\r\n
\r\n location_on\r\n  {{classDetail.LocationName}}\r\n
\r\n
\r\n
\r\n \r\n
{{operatingCurrency}} {{classDetail.BaseRate | currencyDecimalFormatter}}
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
{{classDetail.StartDate | date:'MM/dd/yyyy'}}
\r\n
\r\n
\r\n \r\n
{{classDetail.EndDate | date:'MM/dd/yyyy'}}
\r\n
\r\n
\r\n \r\n
{{classDetail.Staffs}}
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n {{'SelectDates' | translate}}\r\n
\r\n\r\n
\r\n \r\n \r\n
\r\n\r\n
\r\n
\r\n
\r\n {{'selectCoverSize' | translate}}\r\n
\r\n
\r\n {{'NoofStudents' | translate}}\r\n
\r\n
\r\n
\r\n \r\n \r\n {{'MisMatchGroupSizeWithClass' | translate}}\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n
\r\n {{'SelectBookingTypes' | translate}}\r\n
\r\n
\r\n \r\n \r\n {{'MisMatchBookingTypeWithBookingSize'\r\n |\r\n translate}}\r\n
\r\n
\r\n
\r\n
\r\n {{'SelectCoverTypes' | translate}}\r\n
\r\n
\r\n \r\n \r\n {{'MisMatchCoverTypeWithBookingSize' |\r\n translate}}\r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n {{'noslots' | translate}}\r\n
\r\n
\r\n
\r\n
{{'availableSlots' | translate}}
\r\n
\r\n
\r\n {{'minDurationMins' |\r\n translate}}\r\n  : {{classDetail.MinDuration}}\r\n
\r\n
\r\n {{'maxDurationMins' |\r\n translate}} : {{classDetail.MaxDuration}}\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
","import { DatePipe } from '@angular/common';\r\nimport { AfterViewInit, Component, OnDestroy, OnInit, QueryList, ViewChild, ViewChildren } from '@angular/core';\r\nimport { Validators } from '@angular/forms';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport moment from 'moment';\r\nimport { Subscription } from 'rxjs';\r\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\r\nimport { PopupMessageComponent } from 'src/app/shared/components/popup-message/popup-message.component';\r\nimport { buttonTypes, PartyState, ActivityTabs, BookingBehavior, AvailabilityCriteria, ComponentTypes } from 'src/app/shared/constants/commonenums';\r\nimport { DynamicFormComponent } from 'src/app/shared/dynamicform/dynamic-form/dynamic-form.component';\r\nimport { ButtonValue, FieldConfig } from 'src/app/shared/dynamicform/models/common-models';\r\nimport { ComponentDetails } from 'src/app/shared/dynamicform/models/popup.interface';\r\nimport { ActivitySlotRequestDTO, SessionBookingDTO, ClassType, ActivityRatePlanRequest, AvailabilityType, LockSessionRequestDTO, BookingActivity } from 'src/app/shared/Models/SessionBookingDTO';\r\nimport { SlotLockResultDTO } from 'src/app/shared/Models/SlotLockModels';\r\nimport { DayOfWeek, operationType } from 'src/app/shared/Models/WidgetSettingsModels';\r\nimport { GuestService } from 'src/app/shared/services/guest.service';\r\nimport { Utilities } from 'src/app/shared/utilities/utilities';\r\n\r\n@Component({\r\n selector: 'app-private-activity-booking',\r\n templateUrl: './private-activity-booking.component.html',\r\n styleUrls: ['./private-activity-booking.component.scss']\r\n})\r\nexport class PrivateActivityBookingComponent extends Utilities implements OnInit, AfterViewInit, OnDestroy {\r\n previousButton: ButtonValue;\r\n nextButton: ButtonValue;\r\n cancelButton: ButtonValue;\r\n CheckAvailabilityBtn: ButtonValue;\r\n reservationConfig: FieldConfig[];\r\n locationConfig: FieldConfig[];\r\n customizeSizeConfig: FieldConfig[];\r\n from_dateConfig: FieldConfig[];\r\n to_dateConfig: FieldConfig[];\r\n age_config: FieldConfig[];\r\n search_config: FieldConfig[];\r\n buttonType = buttonTypes;\r\n coverTypeConfig: FieldConfig[];\r\n bookingTypeConfig: FieldConfig[];\r\n bookingType_config: FieldConfig[];\r\n coverTypes = [];\r\n bookingTypes = [];\r\n classDetail: any;\r\n @ViewChild('reservationConfigForm', { static: true }) reservationConfigForm: DynamicFormComponent;\r\n @ViewChild('dateConfigForm', { static: true }) dateConfigForm: DynamicFormComponent;\r\n @ViewChild('coverTypeForm', { static: true }) coverTypeForm: DynamicFormComponent;\r\n @ViewChildren('form') components: QueryList;\r\n Subscriptions: Subscription = new Subscription();\r\n availableActivities: any;\r\n tempAvailableActivities: any;\r\n SelectedIndex: number;\r\n SelectedActivityData: any;\r\n InstructorList: any[];\r\n LocationList: any[];\r\n minSizeAllowed: number = 1;\r\n bookingSizeArray: any = [];\r\n SessionSlotsAvailableDates: any = null;\r\n showSessionorSlots: boolean = false;\r\n isSessionClass: any;\r\n selectedIndex: number = 0;\r\n public sessionsUnavailable: any[];\r\n isMultiSlotSelection: any;\r\n availableSessions: any[];\r\n classLessonList: any[];\r\n selectedClassSchedule: any = [];\r\n dayOfWeek = DayOfWeek;\r\n EditData: any;\r\n lockResponse: any;\r\n ratePlan: any;\r\n checkedItem = false;\r\n operatingCurrency: any;\r\n SelectedTimeSlots: any = [];\r\n Operation = operationType;\r\n validCoverTypes: boolean = true;\r\n validBookingTypes: boolean = true;\r\n validGroupSize: boolean = true;\r\n formRepeatCount = 0;\r\n widgetData: any;\r\n availableSlots = [];\r\n displaySlots: boolean;\r\n constructor(private ts: TranslateService, public activityService: GuestService, public dialog: MatDialog, private datePipe: DatePipe) {\r\n super(dialog);\r\n this.Subscriptions.add(this.activityService.editPartyData$.subscribe(data => {\r\n if (data) {\r\n this.EditData = data;\r\n if (this.EditData && (this.EditData.State === PartyState.Seated || this.EditData.State === PartyState.Cancelled || this.EditData.State === PartyState.Left)) {\r\n this.activityService.TabChange$.next(ActivityTabs.ConfirmationSummary);\r\n }\r\n if (this.EditData && this.EditData.Contact?.TrackMembershipNumber) {\r\n this.CheckMemberShip(this.EditData.Contact.TrackMembershipNumber, this.EditData);\r\n }\r\n }\r\n }))\r\n this.Subscriptions.add(this.activityService.restaurantWidgetSettings$.subscribe(value => {\r\n this.widgetData = value;\r\n this.isMultiSlotSelection = value.EnableMultiSlotSelection;\r\n this.operatingCurrency = value.OperationCurrency;\r\n }));\r\n\r\n this.Subscriptions.add(this.activityService.TabChange$.subscribe(data => {\r\n if (data === ActivityTabs.ActivitySelection && this.EditData && this.EditData.ReservedFor &&\r\n this.activityService.bookingSection$.value === BookingActivity.PrivateLesson) {\r\n if (this.EditData && this.EditData.Contact?.TrackMembershipNumber) {\r\n this.CheckMemberShip(this.EditData.Contact.TrackMembershipNumber, this.EditData);\r\n setTimeout(() => {\r\n this.getavailableSlots();\r\n }, 300);\r\n } else {\r\n this.getavailableSlots();\r\n }\r\n }\r\n }));\r\n this.Subscriptions.add(this.activityService.SelectedActivity$.subscribe(data => {\r\n if (data) {\r\n if (this.activityService.operation === operationType.create) {\r\n this.resetValue();\r\n }\r\n setTimeout(() => {\r\n this.classDetail = data;\r\n if (this.classDetail) {\r\n this.activityService.selectedSpecialMeal = this.classDetail;\r\n this.SelectedActivityData = this.classDetail;\r\n this.createReservationConfig();\r\n this.createActionButtons();\r\n this.selectedClassActivity(this.SelectedActivityData);\r\n }\r\n }, 100);\r\n }\r\n }));\r\n this.Subscriptions.add(this.activityService.bookingSection$.subscribe(data => {\r\n if (this.components && this.activityService.operation === operationType.create && data === BookingActivity.PrivateLesson) {\r\n this.resetValue();\r\n }\r\n }));\r\n this.Subscriptions.add(this.activityService.BookNew$.subscribe(data => {\r\n if (data) {\r\n if (this.components) {\r\n this.resetValue();\r\n }\r\n this.activityService.BookNew$.next(false);\r\n }\r\n }));\r\n }\r\n\r\n\r\n ngOnInit(): void {\r\n\r\n if (this.activityService.SelectedActivity$.value) {\r\n this.SelectedActivityData = this.activityService.SelectedActivity$.value;\r\n }\r\n this.createReservationConfig();\r\n this.createActionButtons();\r\n }\r\n\r\n createReservationConfig() {\r\n this.reservationConfig = [\r\n {\r\n type: 'select',\r\n name: 'Instructor',\r\n placeholder: '',\r\n options: [],\r\n appearance: true,\r\n isFormArray: false,\r\n value: this.EditData ? this.EditData.StaffIds && this.EditData.StaffIds.length > 0 ? this.EditData.StaffIds[0] : '' : '',\r\n label: this.ts.instant('SelectaInstructor'),\r\n class: \"activity-instructor\",\r\n validation: [Validators.required],\r\n }\r\n\r\n ];\r\n this.locationConfig = [\r\n {\r\n type: 'select',\r\n name: 'Location',\r\n placeholder: '',\r\n options: [],\r\n appearance: true,\r\n isFormArray: false,\r\n value: this.EditData ? this.EditData.Location && this.EditData.Location.length > 0 ? this.EditData.Location[0] : '' : '',\r\n label: this.ts.instant('SelectaLocation'),\r\n class: \"activity-instructor\",\r\n validation: [Validators.required],\r\n }];\r\n\r\n this.from_dateConfig = [\r\n {\r\n type: 'date',\r\n name: 'FromDate',\r\n placeholder: '',\r\n appearance: true,\r\n isFormArray: false,\r\n label: this.ts.instant('FromDate'),\r\n minDate: new Date(),\r\n value: this.EditData ? this.EditData.ReservedFor ? this.EditData.ReservedFor : new Date() : new Date(),\r\n maxDate: '',\r\n class: \"selector-date\",\r\n validation: [Validators.required],\r\n }\r\n ];\r\n this.customizeSizeConfig = [\r\n {\r\n type: 'autocomplete',\r\n name: 'BookingSize',\r\n placeholder: 'select',\r\n options: this.calculatePartySize(),\r\n appearance: true,\r\n partySize: true,\r\n isFormArray: false,\r\n class: \"activity-instructor\",\r\n showErrorText: true,\r\n charLength: this.SelectedActivityData?.MaxPartySize.toString().length,\r\n validation: [Validators.required, Validators.min(this.SelectedActivityData?.MinPartySize), Validators.max(this.SelectedActivityData?.MaxPartySize)],\r\n value: this.EditData ? this.EditData.Size ? this.EditData.Size : '' : ''\r\n },\r\n ]\r\n\r\n this.search_config = [\r\n {\r\n type: 'input',\r\n label: \"\",\r\n placeholder: this.ts.instant('SearchbyActivityName'),\r\n name: 'SearchbyActivityName',\r\n inputType: 'text',\r\n class: 'guest-details__first-name',\r\n showErrorText: true,\r\n appearance: true,\r\n isFormArray: false,\r\n value: ''\r\n },\r\n ];\r\n\r\n }\r\n resetValue() {\r\n if (this.components) {\r\n var [Instructor, Location, FromDate, BookingSize, bookingtypes, covertype] = this.components;\r\n Instructor.form.reset(\"Instructor\");\r\n Location.form.reset(\"Location\");\r\n FromDate.form.reset(\"FromDate\");\r\n BookingSize.form.reset(\"BookingSize\");\r\n if (bookingtypes) {\r\n bookingtypes.form.reset(this.getBookingTypeName());\r\n }\r\n if (covertype) {\r\n covertype.form.reset(this.getCoverTypeName());\r\n }\r\n }\r\n }\r\n getBookingTypeName(): FieldConfig[] {\r\n return this.bookingTypes.map(bookingType => {\r\n return bookingType.Name;\r\n })\r\n }\r\n getCoverTypeName(): FieldConfig[] {\r\n return this.coverTypes.map(coverType => {\r\n return coverType.Name;\r\n })\r\n }\r\n isFormValid() {\r\n var isValid = true;\r\n this.components.forEach(componet => {\r\n if (componet.form && !componet.form.valid && componet.form.status !== \"DISABLED\") {\r\n isValid = false;\r\n }\r\n })\r\n return isValid;\r\n }\r\n\r\n getFormValue(formObj, fieldName) {\r\n return formObj && formObj.form.get(fieldName)?.value;\r\n }\r\n\r\n getCoverTypeValues(covers) {\r\n return this.coverTypes.map(coverType => {\r\n return { covers: covers[coverType.Name], Covers: covers[coverType.Name], CoverTypeId: coverType.Id, Name: coverType.Name }\r\n })\r\n }\r\n\r\n isCoverTypeMatchBookingSize() {\r\n\r\n var coverTypeTotal = 0;\r\n\r\n if (!this.coverTypeConfig || !this.coverTypeConfig.length) {\r\n return true;\r\n }\r\n else {\r\n if (!this.bookingTypeConfig || !this.bookingTypeConfig.length) {\r\n var [, , , bookingSize, covers] = this.components;\r\n covers.controls.forEach((control, index) => {\r\n coverTypeTotal += +covers.form.controls[this.coverTypes[index].Name].value;\r\n });\r\n }\r\n else {\r\n var [, , , bookingSize, , covers] = this.components;\r\n covers.controls.forEach((control, index) => {\r\n coverTypeTotal += +covers.form.controls[this.coverTypes[index].Name].value;\r\n });\r\n }\r\n }\r\n\r\n if (this.getFormValue(bookingSize, \"BookingSize\") === '') {\r\n return false;\r\n } else {\r\n return +this.getFormValue(bookingSize, \"BookingSize\") == coverTypeTotal;\r\n }\r\n }\r\n getBookingTypeValues(bookingTypes) {\r\n return this.bookingTypes.map(bookingType => {\r\n return { BookingTypes: bookingTypes[bookingType.Name], BookingTypeId: bookingType.Id, Name: bookingType.Name }\r\n })\r\n }\r\n isBookingTypeMatchBookingSize() {\r\n if (!this.bookingTypeConfig || !this.bookingTypeConfig.length) {\r\n return true;\r\n }\r\n var [, , , bookingSize, bookingTypes,] = this.components;\r\n\r\n\r\n var bookingTypeTotal = 0;\r\n bookingTypes.controls.forEach((control, index) => {\r\n bookingTypeTotal += +bookingTypes.form.controls[this.bookingTypes[index].Name].value;\r\n });\r\n return +this.getFormValue(bookingSize, \"BookingSize\") === bookingTypeTotal;\r\n }\r\n\r\n updateFormValidity() {\r\n return this.isFormValid() && this.isValidBookingSizeSelected() && this.isCoverTypeMatchBookingSize() && this.isBookingTypeMatchBookingSize() && this.istimeSlotsSelected() && this.isValidDuration();\r\n }\r\n\r\n istimeSlotsSelected() {\r\n return Object.values(this.activityService.selectedOpenBookingSlots).findIndex(slot => slot) !== -1;\r\n }\r\n\r\n isValidBookingSizeSelected() {\r\n var [activity, , , bookingSize] = this.components;\r\n let selectedSize = +this.getFormValue(bookingSize, \"BookingSize\")\r\n if (this.SelectedActivityData) {\r\n\r\n this.validGroupSize = true;\r\n this.validGroupSize = selectedSize >= this.SelectedActivityData.MinPartySize && selectedSize <= this.SelectedActivityData.MaxPartySize;\r\n\r\n const minsize = this.SelectedActivityData.MinPartySize;\r\n const maxsize = this.SelectedActivityData.MaxPartySize;\r\n return this.validGroupSize;\r\n }\r\n return false;\r\n }\r\n\r\n getFormComponent(...args) {\r\n return args.map(arg => this.components.find(form => form && form.form ? form.form?.value[arg] : form?.value[arg]))\r\n }\r\n\r\n CheckMemberShip(membershipId, editContactData) {\r\n this.Subscriptions.add(this.activityService.getContactFromEngagebyCardno(membershipId).subscribe(response => {\r\n if (response.Payload) {\r\n const memberShipdetail = response.Payload;\r\n let editPartyData = {\r\n Id: this.EditData && this.EditData.Id !== null ? this.EditData.Id : null,\r\n Contact: {},\r\n };\r\n const memberType = this.widgetData.AllocationMappings.find(allocation => allocation.AllocationTypeName.trim().toLowerCase() === memberShipdetail.MembershipType.trim().toLowerCase());\r\n const guestObject = {\r\n FirstName: memberShipdetail.FName,\r\n LastName: memberShipdetail.LName,\r\n EmailAddress: memberShipdetail.Email,\r\n PhoneNumber: memberShipdetail.PhoneNumber,\r\n CountryId: this.activityService.getCountryId(memberShipdetail.PhoneCode),\r\n PIILastUsedDate: null,\r\n EmailAddress2: memberShipdetail.EmailList ? memberShipdetail.EmailList[1]?.EmailId : null,\r\n PhoneNumber2: memberShipdetail.PhoneList ? memberShipdetail.PhoneList[1]?.PhoneNumber : memberShipdetail.PhoneNumber,\r\n Birthday: memberShipdetail.Dob,\r\n ContactCustomFields: [],\r\n Notes: [],\r\n VisitStats: [],\r\n MarketingOptedIn: null,\r\n memberShipId: memberShipdetail.CardNo,\r\n MembershipType: memberShipdetail.MembershipType,\r\n MemberActive: memberShipdetail.MembershipStatus?.toLowerCase() === \"active\"\r\n }\r\n if (editContactData) {\r\n editContactData.memberShipId = memberShipdetail.CardNo,\r\n editContactData.MembershipType = memberType,\r\n editContactData.MemberActive = memberShipdetail.MembershipStatus?.toLowerCase() === \"active\"\r\n }\r\n this.activityService.selectedGuest = editContactData ? editContactData : guestObject;\r\n this.activityService.selectedGuest = guestObject;\r\n this.activityService.selectedGuest.TrackMembershipNumber = memberShipdetail.CardNo; // to bind it in the guest form\r\n this.activityService.membershipId = guestObject.MemberActive ? this.activityService.restaurantWidgetSettings$.value.AllocationMappings.find(x => x.AllocationTypeName.trim().toLowerCase() == response.Payload.MembershipType.trim().toLowerCase())?.AllocationTypeId : null;\r\n }\r\n }))\r\n }\r\n\r\n\r\n getavailableSlots() {\r\n let specialMealId = this.activityService.selectedSpecialMeal ? this.activityService.selectedSpecialMeal.SpecialMealId : null;\r\n var [Instructor, Location, fromdate] = this.components;\r\n var date = moment(fromdate.form.get(\"FromDate\").value).format(\"YYYY-MM-DD\");\r\n if (Location.form.get(\"Location\").value && fromdate.form.get(\"FromDate\").value && Instructor.form.get(\"Instructor\").value) {\r\n this.activityService.selectedOpenBookingSlots = {};\r\n\r\n this.activityService.slots_holder = [];\r\n this.displaySlots = false;\r\n\r\n this.Subscriptions.add(this.activityService.getSlotsForTable([Location.form.get(\"Location\").value], [Instructor.form.get(\"Instructor\").value], date, specialMealId).subscribe(response => {\r\n this.setSlots(response);\r\n setTimeout(() => {\r\n this.activityService.slotAvailabilitySubject$.next(response);\r\n this.activityService.partySlots$.next(true);\r\n }, 100);\r\n\r\n }));\r\n }\r\n }\r\n\r\n setSlots(response) {\r\n let SlotIds = 0;\r\n this.availableSlots = [];\r\n this.activityService.slots_holder = [];\r\n this.activityService.SlotIds = 0;\r\n this.activityService.selectedOpenBookingSlots = {}\r\n response.Payload.forEach((element, index) => {\r\n if (index === 0) {\r\n element.OpenHours.forEach(openHour => {\r\n var tableId = openHour.SlotsByTableId[0].TableId;\r\n openHour.SlotsByTableId[0].Slots.sort((a, b) => Utilities.parseDateString(a.DateTime).getTime() - Utilities.parseDateString(b.DateTime).getTime());\r\n openHour.SlotsByTableId[0].Slots.forEach(slot => {\r\n if (!slot.PartyId || (this.EditData && slot.PartyId && this.EditData.Id == slot.PartyId)) {\r\n if (slot.AllocationTypeId && this.widgetData.AllocationMappings && this.widgetData.AllocationMappings.length) {\r\n var { R, G, B, A } = this.widgetData.AllocationMappings.filter(type => type.AllocationTypeId === slot.AllocationTypeId)[0].Color;\r\n slot['color'] = `rgba(${R}, ${G}, ${B}, ${A})`;\r\n }\r\n SlotIds += 1;\r\n slot.Id = slot.Id == 0 ? SlotIds : slot.Id;\r\n if (this.isNotPastTimeSlot(slot.DateTime)) {\r\n this.activityService.slots_holder.push(slot);\r\n }\r\n let selectedSlot = null;\r\n if (this.EditData?.Slots) {\r\n selectedSlot = this.EditData.Slots.find(x => x.Time === slot.DateTime);\r\n }\r\n if (this.EditData && slot.PartyId && this.EditData.TableIds[0] == tableId && this.EditData.Id == slot.PartyId) {\r\n this.activityService.selectedOpenBookingSlots[slot.Id] = !this.activityService.selectedOpenBookingSlots[slot.Id];\r\n if (!this.EditData.Duration) {\r\n this.EditData.Duration = Utilities.diffBetweenDatesInMinutes(this.EditData.DepartureTime, this.EditData.SeatingTime);\r\n }\r\n if (this.EditData.Duration > this.widgetData.TimeSlotUnitInMinutes) {\r\n\r\n var duration = this.EditData.Duration - this.widgetData.TimeSlotUnitInMinutes;\r\n for (var i = 1; i <= duration / this.widgetData.TimeSlotUnitInMinutes; i++) {\r\n var newSlot = this.activityService.generateSlot(Utilities.Date(slot.DateTime).add(i * this.widgetData.TimeSlotUnitInMinutes, 'minutes'));\r\n\r\n newSlot.PartyId = slot.PartyId;\r\n if (newSlot.Id == 0) {\r\n SlotIds += 1;\r\n newSlot.Id = SlotIds;\r\n }\r\n this.activityService.slots_holder.push(newSlot);\r\n this.activityService.selectedOpenBookingSlots[newSlot.Id] = true;\r\n }\r\n // this.setBookingData();\r\n }\r\n this.checkFormValidity();\r\n } else if (selectedSlot) {\r\n this.activityService.selectedOpenBookingSlots[slot.Id] = !this.activityService.selectedOpenBookingSlots[slot.Id];\r\n if (selectedSlot.Duration > this.widgetData.TimeSlotUnitInMinutes) {\r\n var duration = selectedSlot - this.widgetData.TimeSlotUnitInMinutes;\r\n for (var i = 1; i <= duration / this.widgetData.TimeSlotUnitInMinutes; i++) {\r\n var newSlot = this.activityService.generateSlot(Utilities.Date(slot.DateTime).add(i * this.widgetData.TimeSlotUnitInMinutes, 'minutes'));\r\n newSlot.PartyId = slot.PartyId;\r\n if (newSlot.Id == 0) {\r\n SlotIds += 1;\r\n newSlot.Id = SlotIds;\r\n }\r\n this.activityService.slots_holder.push(newSlot);\r\n this.activityService.selectedOpenBookingSlots[newSlot.Id] = true;\r\n }\r\n }\r\n this.checkFormValidity();\r\n }\r\n }\r\n });\r\n var openhrSlots = openHour.SlotsByTableId[0].Slots;\r\n openhrSlots.forEach(slot => {\r\n if (this.EditData?.Slots) {\r\n let selectedSlot = null;\r\n if (this.EditData?.Slots) {\r\n selectedSlot = this.EditData.Slots.find(x => x.Time === slot.DateTime);\r\n }\r\n if (selectedSlot && selectedSlot.DurationInMinutes > this.widgetData.TimeSlotUnitInMinutes) {\r\n var duration = selectedSlot.DurationInMinutes - this.widgetData.TimeSlotUnitInMinutes;\r\n for (var i = 1; i <= duration / this.widgetData.TimeSlotUnitInMinutes; i++) {\r\n var existingslot = openhrSlots.find(x => Utilities.Date(x.DateTime).isSame(Utilities.Date(slot.DateTime).add(i * this.widgetData.TimeSlotUnitInMinutes, 'minutes')));\r\n this.activityService.selectedOpenBookingSlots[existingslot.Id] = true;\r\n }\r\n }\r\n }\r\n\r\n });\r\n this.checkFormValidity();\r\n });\r\n }\r\n });\r\n\r\n }\r\n\r\n setBookingData() {\r\n var [instructor, fromDate, bookingSize, location] = this.getFormComponent(\"Instructor\", \"FromDate\", \"BookingSize\", \"Location\");\r\n var covers = null;\r\n var bookingTypes = null;\r\n if (this.bookingTypeConfig && this.bookingTypeConfig.length) {\r\n bookingTypes = this.components['_results'][4].form.value;\r\n if (this.coverTypeConfig && this.coverTypeConfig.length) {\r\n covers = this.components['_results'][5].form.value;\r\n }\r\n }\r\n else if (this.coverTypeConfig && this.coverTypeConfig.length) {\r\n covers = this.components['_results'][4].form.value;\r\n }\r\n var instructors = instructor.form.get(\"Instructor\").value == -1 ? this.InstructorList.filter(y => y.id !== -1).map(x => {\r\n return x.id;\r\n }) : [instructor.form.get(\"Instructor\").value]\r\n\r\n var locations = location.form.get(\"Location\").value == -1 ? this.LocationList.filter(y => y.id !== -1).map(x => {\r\n return x.id;\r\n }) : [location.form.get(\"Location\").value]\r\n\r\n this.activityService.SessionBookingObj = new SessionBookingDTO(\r\n null,\r\n this.SelectedActivityData.SpecialMealId,\r\n this.SelectedActivityData.ClassType,\r\n this.getFormValue(fromDate, \"FromDate\"),\r\n this.getFormValue(fromDate, \"FromDate\"),\r\n locations,\r\n this.SelectedActivityData.LocationName,\r\n instructors,\r\n this.getFormValue(bookingSize, \"BookingSize\"),\r\n '',\r\n this.getCoverTypeValues(covers),\r\n this.getBookingTypeValues(bookingTypes),\r\n this.getSlotsObj(),\r\n null\r\n );\r\n if (!this.isSessionClass) {\r\n this.activityService.SelectedClassSchedule$.next(this.selectedClassSchedule);\r\n }\r\n // this.activityService.SessionBookingObj.AvailabilityCriteria = this.getAvailabilityCriteria(location, instructors);\r\n this.createSaveRequestObject();\r\n }\r\n\r\n\r\n getSlotsObj() {\r\n let { selectedOpenBookingSlots, slots_holder } = this.activityService\r\n let resSlots = [];\r\n let slots = Object.entries(selectedOpenBookingSlots)\r\n .filter(arr => arr[1]);\r\n for (let slotI = 0; slotI < slots.length; slotI++) {\r\n let itm = slots[slotI];\r\n let currentSlotIndex = slots_holder.findIndex(slot_holder => slot_holder.Id == itm[0]);\r\n if (currentSlotIndex >= 0) {\r\n var slot = slots_holder[currentSlotIndex];\r\n // if (slot.PartyId && slot.PartyId && this.EditData.ReservedFor != slot.DateTime) {\r\n // continue;\r\n // }\r\n var resSlot = {\r\n LocalTime: slot.DateTime,\r\n Duration: this.widgetData.TimeSlotUnitInMinutes,\r\n EndTime: this.calculateEndTime(slots_holder[currentSlotIndex].DateTime, this.widgetData.TimeSlotUnitInMinutes),\r\n PartyId: (slot.PartyId && this.activityService.editPartyData$.value.Id) ? slot.PartyId : null,\r\n LockId: (this.lockResponse) ? this.lockResponse[slot.DateTime]?.SlotLockIdDTO?.Id : null,\r\n }\r\n\r\n for (let i = (currentSlotIndex + 1); slots_holder[i]; i++) {\r\n let slotDateTime = new Date(slots_holder[i].DateTime);\r\n let defaultDateTime = new Date(slots_holder[currentSlotIndex].DateTime);\r\n let mins: any = (slotDateTime.getTime() - defaultDateTime.getTime()) / (60 * 1000);\r\n if (slots.find(slot => slot[1] && +slot[0] == slots_holder[i].Id && mins <= resSlot.Duration)) {\r\n resSlot.Duration += this.widgetData.TimeSlotUnitInMinutes;\r\n slotI += 1;\r\n } else {\r\n break;\r\n }\r\n }\r\n resSlot.EndTime = this.calculateEndTime(resSlot.LocalTime, resSlot.Duration)\r\n resSlots.push(resSlot);\r\n }\r\n }\r\n\r\n return resSlots;\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.formChangeSubscribe();\r\n this.nextButton.disbaledproperity = !this.updateFormValidity();\r\n if (this.activityService.SelectedActivity$.value) {\r\n this.selectedClassActivity(this.SelectedActivityData);\r\n }\r\n }\r\n\r\n calculateEndTime(startTimeStr, duration) {\r\n var startTime = new Date(startTimeStr);\r\n var startMins = startTime.getMinutes();\r\n startTime.setMinutes(startMins + duration);\r\n return startTime;\r\n }\r\n\r\n createActionButtons() {\r\n this.nextButton = {\r\n type: buttonTypes.confirmBtn,\r\n label: this.ts.instant('next'),\r\n customclass: 'guest-details__confirm-btn',\r\n };\r\n this.cancelButton = {\r\n type: buttonTypes.cancelBtn,\r\n label: this.ts.instant('previous'),\r\n customclass: 'reservation-details__previous-btn',\r\n disbaledproperity: true\r\n };\r\n this.CheckAvailabilityBtn = {\r\n type: buttonTypes.confirmBtn,\r\n label: this.ts.instant('checkAvailability'),\r\n customclass: 'guest-details__confirm-btn',\r\n disbaledproperity: true\r\n };\r\n this.previousButton = {\r\n type: buttonTypes.cancelBtn,\r\n label: this.ts.instant('previous'),\r\n customclass: 'reservation-details__previous-btn',\r\n };\r\n this.nextButton = {\r\n type: buttonTypes.confirmBtn,\r\n label: this.ts.instant('next'),\r\n customclass: 'guest-details__confirm-btn',\r\n disbaledproperity: true\r\n };\r\n }\r\n selectedClassActivity(data) {\r\n const currentDate = new Date();\r\n console.log(data);\r\n this.SelectedActivityData = data;\r\n this.isSessionClass = this.SelectedActivityData.ClassType === ClassType.Session;\r\n const StaffList = data.StaffValues;\r\n this.minSizeAllowed = data.MinPartySize;\r\n this.from_dateConfig[0].maxDate = new Date(data.EndDate);\r\n this.from_dateConfig[0].minDate = new Date(data.StartDate) > currentDate ? new Date(data.StartDate) : currentDate;\r\n this.coverTypes = data.CoverTypePrices.map(type => {\r\n return {\r\n Id: type.Id,\r\n Name: type.CoverTypeName\r\n }\r\n });\r\n this.bookingTypes = data.BookingTypeActivitiesMappings.map(type => {\r\n return {\r\n Id: type.Id,\r\n Name: type.BookingTypeName\r\n }\r\n });\r\n\r\n this.customizeSizeConfig[0].validation = [Validators.required, Validators.min(this.SelectedActivityData?.MinPartySize), Validators.max(this.SelectedActivityData?.MaxPartySize)];\r\n\r\n let instructorList = this.InstructorList = this.getInstructor(StaffList);\r\n this.reservationConfig[0].options = this.InstructorList;\r\n let locationList = this.LocationList = this.getLocations(data.LocationId);\r\n this.locationConfig[0].options = this.LocationList;\r\n this.reservationConfig[0].value = this.EditData && this.EditData.StaffIds && this.EditData.StaffIds.length ? this.EditData.StaffIds[0] : instructorList?.length === 1 ? instructorList[0].id : -1;\r\n this.locationConfig[0].value = this.EditData && this.EditData.TableIds && this.EditData.TableIds.length ? this.EditData.TableIds[0] : locationList?.length === 1 ? locationList[0].id : -1;\r\n this.from_dateConfig[0].value = new Date();\r\n this.components.forEach(x =>\r\n x.form.updateValueAndValidity()\r\n );\r\n this.updateCoverConfig();\r\n this.showSessionorSlots = false;\r\n this.selectedClassSchedule = [];\r\n this.SessionSlotsAvailableDates = [];\r\n this.activityService.selectedOpenBookingSlots = {};\r\n if (this.activityService.operation === operationType.create) {\r\n this.from_dateConfig[0].value = new Date();\r\n }\r\n this.components.forEach((x) => {\r\n if (x.form.controls[\"FromDate\"]) {\r\n x.form.controls[\"FromDate\"].setValue((this.EditData && this.EditData.ReservedFor) ? this.EditData.ReservedFor : (new Date(data.StartDate) > currentDate ? new Date(data.StartDate) : currentDate));\r\n x.form.controls[\"FromDate\"].setValidators([Validators.required, Validators.min(new Date(data.StartDate) > currentDate ? data.StartDate : currentDate), Validators.max(data.EndDate)]);\r\n x.form.updateValueAndValidity();\r\n }\r\n if (x.form.controls[\"BookingSize\"]) {\r\n x.form.controls[\"BookingSize\"].setValue(this.EditData ? this.EditData.Size ? this.EditData.Size : '' : '');\r\n }\r\n });\r\n\r\n // this.updateDateConfig();\r\n setTimeout(() => {\r\n this.coverTypeConfigChange();\r\n this.bookingTypeConfigChange();\r\n }, 500);\r\n }\r\n updateCoverConfig() {\r\n this.coverTypeConfig = this.getCoverTypeConfig();\r\n this.coverTypeConfig = this.coverTypeConfig.map(config => {\r\n config.options = [{ id: 0, value: \"none\" }, ...this.bookingSizeArray];\r\n return config;\r\n })\r\n this.bookingTypeConfig = this.getBookingTypeConfig();\r\n this.bookingTypeConfig = this.bookingTypeConfig.map(config => {\r\n config.options = [{ id: 0, value: \"none\" }, ...this.bookingSizeArray];\r\n return config;\r\n })\r\n }\r\n coverTypeConfigChange() {\r\n if (this.coverTypeConfig.length) {\r\n this.Subscriptions.add(\r\n this.components.last.form.valueChanges.subscribe(value => {\r\n this.nextButton.disbaledproperity = !this.updateFormValidity();\r\n this.validCoverTypes = this.isCoverTypeMatchBookingSize()\r\n }));\r\n }\r\n }\r\n bookingTypeConfigChange() {\r\n if (this.bookingTypeConfig.length) {\r\n this.Subscriptions.add(\r\n this.components.filter((item, index) => index === 4)[0].form.valueChanges.subscribe(value => {\r\n this.nextButton.disbaledproperity = !this.updateFormValidity();\r\n this.validBookingTypes = this.isBookingTypeMatchBookingSize()\r\n }));\r\n }\r\n }\r\n\r\n getInstructor(staffList) {\r\n let SelectedStaffList = [];\r\n staffList.forEach(staff => {\r\n const selectedStaff = this.activityService.InstructorList.filter(data => data.Id === staff.ServerId)[0];\r\n if (selectedStaff) {\r\n let serverval = \"Unnamed\";\r\n if (selectedStaff) {\r\n if (selectedStaff.Name) {\r\n serverval = selectedStaff.Name;\r\n }\r\n if (selectedStaff.LastName) {\r\n serverval = serverval + ' ' + selectedStaff.LastName;\r\n }\r\n }\r\n selectedStaff['value'] = serverval;\r\n\r\n SelectedStaffList.push(selectedStaff);\r\n }\r\n });\r\n SelectedStaffList = SelectedStaffList.map(data => {\r\n return {\r\n id: data.Id,\r\n value: data.value\r\n }\r\n })\r\n\r\n if (!(staffList.length > 1)) {\r\n this.reservationConfig = [\r\n {\r\n type: 'select',\r\n name: 'Instructor',\r\n placeholder: '',\r\n options: [],\r\n appearance: true,\r\n isFormArray: false,\r\n value: this.EditData ? this.EditData.StaffIds && this.EditData.StaffIds.length > 0 ? this.EditData.StaffIds[0] : SelectedStaffList[0].id : SelectedStaffList[0].id,\r\n label: this.ts.instant('SelectaInstructor'),\r\n class: \"activity-instructor\",\r\n validation: [Validators.required],\r\n }\r\n\r\n ];\r\n\r\n }\r\n return SelectedStaffList;\r\n }\r\n\r\n getLocations(LocationList) {\r\n let SelectedLocationList = [];\r\n LocationList.forEach(location => {\r\n const selectedLocation = this.activityService.LocationList.filter(data => data.Id === location.LocationId)[0];\r\n if (selectedLocation) {\r\n selectedLocation['value'] = selectedLocation.Name;\r\n SelectedLocationList.push(selectedLocation);\r\n }\r\n });\r\n SelectedLocationList = SelectedLocationList.map(data => {\r\n return {\r\n id: data.Id,\r\n value: data.value\r\n }\r\n })\r\n if (!(LocationList.length > 1)) {\r\n this.locationConfig = [\r\n {\r\n type: 'select',\r\n name: 'Location',\r\n placeholder: '',\r\n options: [],\r\n appearance: true,\r\n isFormArray: false,\r\n value: this.EditData ? this.EditData.Location && this.EditData.Location.length > 0 ? this.EditData.Location[0] : SelectedLocationList[0].id : SelectedLocationList[0].id,\r\n label: this.ts.instant('SelectaLocation'),\r\n class: \"activity-instructor\",\r\n validation: [Validators.required],\r\n }];\r\n }\r\n return SelectedLocationList;\r\n\r\n }\r\n\r\n\r\n setRatePlanCalculation(Slots, GuestTypes, BookingTypes, Location, BookingSize, ActivityId, InstructorIds) {\r\n\r\n var request = {\r\n Slots: Slots,\r\n ActivityId: ActivityId,\r\n GuestTypes,\r\n BookingTypes: BookingTypes,\r\n TableIds: Location,\r\n Size: +BookingSize,\r\n InstructorIds: InstructorIds,\r\n SessionSlot: null,\r\n TrackMembershipNumber: this.activityService.selectedGuest && this.activityService.selectedGuest.TrackMembershipNumber,\r\n MemberType: this.activityService.selectedGuest?.MembershipType?.AllocationName,\r\n IsMemberActive: this.activityService.selectedGuest?.MemberActive,\r\n BookingBehavior: BookingBehavior.PrivateLesson\r\n } as ActivityRatePlanRequest;\r\n\r\n this.Subscriptions.add(this.activityService.GetSessionRatePlanCalculated(request).subscribe(response => {\r\n this.ratePlan = response.Payload;\r\n if (this.ratePlan && this.ratePlan.RatePlanCalculations) {\r\n this.ratePlan.RatePlanCalculations = this.ratePlan.SlotList = this.ratePlan.RatePlanCalculations.map(slot => {\r\n slot.coverTypeVariants = slot.RatePlanVariants && slot.RatePlanVariants.GuestTypeVariant ? slot.RatePlanVariants.GuestTypeVariant.map(coverVariant => {\r\n coverVariant.CoverTypeName = this.coverTypes.find(coverType => coverType.Id == coverVariant.CoverTypeId).Name;\r\n return coverVariant;\r\n }).filter(coverVariant => coverVariant.Variant) : [];\r\n slot.bookingTypeVariants = slot.RatePlanVariants && slot.RatePlanVariants.BookingTypeVariant ? slot.RatePlanVariants.BookingTypeVariant.map(bookingTypeVariant => {\r\n bookingTypeVariant.BookingTypeName = this.bookingTypes.find(bookingType => bookingType.Id == bookingTypeVariant.BookingTypeId).Name;\r\n return bookingTypeVariant;\r\n }).filter(bookingTypeVariant => bookingTypeVariant.Variant) : [];\r\n return slot;\r\n });\r\n } else {\r\n this.ratePlan.SlotList = Slots;\r\n }\r\n if (this.ratePlan.TotalRatePlan || this.ratePlan.RatePlanCalculations) {\r\n this.activityService.RatePlanList$.next(this.ratePlan);\r\n }\r\n this.activityService.TabChange$.next(ActivityTabs.ReservationDetails);\r\n }));\r\n }\r\n\r\n getCoverTypeConfig(): FieldConfig[] {\r\n return this.coverTypes.map(coverType => {\r\n return {\r\n type: 'select',\r\n label: coverType.Name,\r\n name: coverType.Name,\r\n value: (this.EditData && this.EditData.CoverTypeQuantities && this.EditData.CoverTypeQuantities.filter(ct => ct.CoverTypeId == coverType.Id && ct.Covers > 0).length > 0) ? this.bookingSizeArray[this.EditData.CoverTypeQuantities.filter(ct => ct.CoverTypeId == coverType.Id)[0].Covers - 1].id : 0,\r\n options: this.bookingSizeArray,\r\n class: 'activity-instructor',\r\n appearance: true,\r\n isFormArray: false,\r\n } as FieldConfig;\r\n })\r\n }\r\n\r\n getBookingTypeConfig(): FieldConfig[] {\r\n return this.bookingTypes.map(bookingType => {\r\n return {\r\n type: 'select',\r\n label: bookingType.Name,\r\n name: bookingType.Name,\r\n value: (this.EditData && this.EditData.BookingTypeQuantities && this.EditData.BookingTypeQuantities.filter(bt => bt.BookingTypeId == bookingType.Id && bt.BookingTypes > 0).length > 0) ? this.bookingSizeArray[this.EditData.BookingTypeQuantities.filter(bt => bt.BookingTypeId == bookingType.Id)[0].BookingTypes - 1].id : 0,\r\n options: this.bookingSizeArray,\r\n class: 'activity-instructor',\r\n appearance: true,\r\n isFormArray: false,\r\n } as FieldConfig;\r\n })\r\n }\r\n\r\n setCoverTypeValue(covertType) {\r\n this.EditData?.CoverTypes?.forEach(data => {\r\n if (data.CoverTypeId === covertType.Id) {\r\n return data.covers;\r\n }\r\n });\r\n }\r\n\r\n setBookingTypeValue(bookingType) {\r\n this.EditData?.BookingTypes?.forEach(data => {\r\n if (data.BookingTypeId === bookingType.Id) {\r\n return data.bookingTypes;\r\n }\r\n });\r\n }\r\n\r\n calculatePartySize() {\r\n this.bookingSizeArray = [];\r\n for (let i = 1; i <= this.SelectedActivityData?.MaxPartySize; i++) {\r\n this.bookingSizeArray.push({ id: i, value: i.toString() });\r\n }\r\n return this.bookingSizeArray;\r\n }\r\n\r\n formChangeSubscribe() {\r\n console.log(this.SelectedActivityData);\r\n this.components.forEach((x, index) => {\r\n this.Subscriptions.add(x.form?.valueChanges.pipe(debounceTime(100),\r\n distinctUntilChanged()).subscribe(value => {\r\n if (value.bookingType) {\r\n this.activityService.bookingType$.next(this.getFormComponent(\"bookingType\")[0].form.controls.bookingType.value)\r\n }\r\n if (value.Location || value.Instructor || value.FromDate) {\r\n if (this.activityService.operation === operationType.create) {\r\n this.getavailableSlots();\r\n if (value.FromDate) {\r\n var date = new Date(value.FromDate);\r\n let dayOfWeek = moment.isMoment(date) ? date.day() : date.getDay();\r\n var activitySessions = this.SelectedActivityData.ActivitySessions.filter(session => session.Dayofweek == dayOfWeek);\r\n this.locationConfig[0].options = this.LocationList.filter(location => {\r\n return !!(activitySessions.filter(session => !!(session.SessionLocationMappings.find(elm => elm.StandaloneTableId === location.id))).length)\r\n\r\n });\r\n this.reservationConfig[0].options = this.InstructorList.filter(server => {\r\n return !!(activitySessions.filter(session => !!(session.SessionStaffMappings.find(elm => elm.ServerId === server.id))).length)\r\n\r\n });\r\n }\r\n }\r\n if (this.activityService.operation === operationType.edit) {\r\n if (this.activityService.reservationToken) {\r\n this.formRepeatCount = this.formRepeatCount + 1;\r\n if (this.formRepeatCount > 4) {\r\n this.getavailableSlots();\r\n }\r\n }\r\n else {\r\n this.getavailableSlots();\r\n }\r\n }\r\n }\r\n this.nextButton.disbaledproperity = !this.updateFormValidity();\r\n this.validCoverTypes = this.isCoverTypeMatchBookingSize();\r\n this.validBookingTypes = this.isBookingTypeMatchBookingSize();\r\n })\r\n )\r\n });\r\n }\r\n\r\n\r\n\r\n navClick(moveDirection) {\r\n if ((moveDirection === 1 && this.selectedIndex === this.SessionSlotsAvailableDates.length - 1)\r\n || (moveDirection === -1 && this.selectedIndex === 0)) {\r\n return;\r\n }\r\n this.selectedIndex = this.selectedIndex + moveDirection;\r\n }\r\n\r\n\r\n applyToOtherDates(selectedDateIndex, event) {\r\n\r\n var selectedSessionIndexes = this.SessionSlotsAvailableDates[selectedDateIndex].AvailableSessions.map((session, index) => session.checked ? index : -1).filter(sessionIndex => sessionIndex != -1);\r\n if (event.checked) {\r\n this.sessionsUnavailable = [];\r\n if (!selectedSessionIndexes || !selectedSessionIndexes.length) {\r\n this.activityService.setMessageState(this.ts.instant(\"selectSessionsToApplyForAllDates\"), 0);\r\n return;\r\n }\r\n this.SessionSlotsAvailableDates.forEach(selectedDate => {\r\n selectedDate.AvailableSessions = selectedDate.AvailableSessions.map(session => {\r\n session.checked = false;\r\n return session;\r\n })\r\n selectedSessionIndexes.forEach(index => {\r\n if (selectedDate.AvailableSessions[index] && selectedDate.AvailableSessions[index].Availability?.AvailabilityType === AvailabilityType.OpenToAll && !selectedDate.AvailableSessions[index].disabled) {\r\n selectedDate.AvailableSessions[index].checked = true;\r\n } else {\r\n if (!this.sessionsUnavailable[index] || !this.sessionsUnavailable[index].dates) {\r\n this.sessionsUnavailable[index] = { session: this.ts.instant(\"Session\") + \" \" + (index + 1) + \" \" + this.ts.instant(\"not available on\") + \" \", dates: \"\" }\r\n }\r\n this.sessionsUnavailable[index].dates += this.sessionsUnavailable[index].dates ? \", \" + moment(selectedDate.AvailableDate).format(\"LL\") : moment(selectedDate.AvailableDate).format(\"LL\");\r\n }\r\n });\r\n });\r\n this.sessionsUnavailable = this.sessionsUnavailable.filter(item => item)\r\n if (!this.sessionsUnavailable || !this.sessionsUnavailable.length) {\r\n //this.toastrService.success(this.ts.instant(\"Applied\"), \"\", { timeOut: 3000, closeButton: true });\r\n } else {\r\n let errorMessage = ''\r\n var errObj = {\r\n ErrorDetails: {\r\n Error: this.sessionsUnavailable.map(session => {\r\n errorMessage = errorMessage + session.session + session.dates + '. '\r\n })\r\n },\r\n ErrorType: true,\r\n dialogTitle: 'error'\r\n }\r\n this.activityService.setMessageState(errorMessage, 0);\r\n }\r\n } else {\r\n this.SessionSlotsAvailableDates.forEach(selectedDate => {\r\n selectedDate.AvailableSessions = selectedDate.AvailableSessions.map(session => {\r\n session.checked = false;\r\n return session;\r\n })\r\n });\r\n this.updateFormValidity();\r\n }\r\n }\r\n\r\n\r\n\r\n slotChangeListners(event) {\r\n if (this.SelectedActivityData && this.SelectedActivityData.ClassType == ClassType.Class && event.checked) {\r\n let groupIdList: any[] = Utilities.uniqueBy(this.availableSessions, \"SessionGroupId\", \"DayOfWeek\", \"SessionId\");\r\n this.selectedClassSchedule = [];\r\n groupIdList = groupIdList.filter(group => group.SessionGroupId == event.SessionGroupId);\r\n groupIdList.forEach(groupDetail => {\r\n if (!this.selectedClassSchedule[groupDetail.DayOfWeek]) {\r\n this.selectedClassSchedule[groupDetail.DayOfWeek] = [];\r\n }\r\n let selectedItem = this.availableSessions.find(session => session.SessionGroupId == groupDetail.SessionGroupId && session.DayOfWeek == groupDetail.DayOfWeek && session.SessionId == groupDetail.SessionId);\r\n this.selectedClassSchedule[groupDetail.DayOfWeek].push(selectedItem);\r\n });\r\n this.classLessonList.forEach(session => {\r\n if (session.SessionId != event.SessionId || session.SessionGroupId != event.SessionGroupId) {\r\n session.checked = false;\r\n }\r\n });\r\n const checkedItem = this.classLessonList.filter(x => x.checked);\r\n this.checkedItem = checkedItem.length ? true : false;\r\n } else if (!this.isMultiSlotSelection && event.checked) {\r\n let isChecked = false;\r\n this.SessionSlotsAvailableDates.forEach((element, index) => {\r\n element.AvailableSessions.forEach(session => {\r\n if (session.SessionId != event.SessionId) {\r\n session.checked = false;\r\n }\r\n if (session.checked) {\r\n isChecked = true;\r\n }\r\n });\r\n });\r\n this.checkedItem = isChecked;\r\n } else {\r\n if (this.classLessonList && this.classLessonList.length > 0) {\r\n const checkedItem = this.classLessonList.filter(x => x.checked);\r\n this.checkedItem = checkedItem.length ? true : false\r\n } else {\r\n let isChecked = false;\r\n this.SessionSlotsAvailableDates.forEach((element, index) => {\r\n element.AvailableSessions.forEach(session => {\r\n\r\n if (session.checked) {\r\n isChecked = true;\r\n }\r\n });\r\n });\r\n this.checkedItem = isChecked;\r\n }\r\n }\r\n this.nextButton.disbaledproperity = !this.updateFormValidity();\r\n }\r\n isSlotBooked(date, sessionId, editData): boolean {\r\n return editData.BookedSessions.findIndex(session => moment(session.BookedDate).diff(moment(date), 'days') == 0 && session.ActivitySessionId == sessionId && session.SessionState != PartyState.Cancelled) > -1;\r\n }\r\n\r\n\r\n getStateOfBookedSession(date, sessionId, editData): PartyState {\r\n return editData.BookedSessions.find(session => moment(session.BookedDate).diff(moment(date), 'days') == 0 && session.ActivitySessionId == sessionId).SessionState;\r\n }\r\n\r\n\r\n\r\n updateSlotBasedOnBookedSession(slot, date) {\r\n const editData = this.activityService.editPartyData$.value;\r\n slot.checked = editData && editData.BookedSessions && editData.BookedSessions.length > 0 ? this.isSlotBooked(date.AvailableDate, slot.SessionId, editData) : false;\r\n\r\n if (slot.checked && editData && editData.BookedSessions && editData.BookedSessions.length > 0 && this.getStateOfBookedSession(date.AvailableDate, slot.SessionId, editData) == PartyState.Seated) {\r\n slot.Availability.AvailabilityType = AvailabilityType.SelectionCriteriaNotMatched;\r\n slot.checked = false;\r\n }\r\n\r\n }\r\n\r\n gotoPreviousPage(event) {\r\n this.activityService.TabChange$.next(ActivityTabs.ActvityView);\r\n this.activityService.SaveBookingObj = {};\r\n this.activityService.selectedOpenBookingSlots = {};\r\n this.activityService.slots_holder = [];\r\n this.resetPaymentInfo();\r\n if (this.activityService.lockResult && this.activityService.lockResult.SlotLockIdDTO) {\r\n this.activityService.unlockSessionsUrl(this.activityService.lockResult.SlotLockIdDTO.Id).subscribe(data => {\r\n this.activityService.lockResult = null;\r\n this.activityService.offTimer();\r\n });\r\n }\r\n }\r\n\r\n resetPaymentInfo() {\r\n this.activityService.ispaymentInvolvedInfo = null;\r\n this.activityService.reservationAttemptInfo = null;\r\n }\r\n\r\n\r\n\r\n gotoNextPage(event) {\r\n if (this.activityService.selectedGuest && this.activityService.selectedGuest.TrackMembershipNumber && !this.activityService.selectedGuest?.MemberActive) {\r\n const popUpMessage = [{\r\n confirmationMessage: this.ts.instant('memberShipExpired'),\r\n dialogTitle: this.ts.instant('memberShipStatus'),\r\n showAlert: true\r\n }];\r\n const componentDetails: ComponentDetails = Utilities.setComponentDetails(PopupMessageComponent, 'small', 'static', popUpMessage,\r\n popUpMessage[0].dialogTitle);\r\n const confirm = this.openCustomPopup(componentDetails, ComponentTypes.financialEffectCalculation, '450px', '250px', false, 'No', 'ok',\r\n 'ok', false)\r\n return;\r\n }\r\n this.setBookingData();\r\n this.lockTables();\r\n }\r\n\r\n selectedItem(data, index) {\r\n this.SelectedActivityData = this.availableActivities[index];\r\n this.selectedClassActivity(this.SelectedActivityData);\r\n }\r\n\r\n\r\n lockTables() {\r\n var { Slots, GuestTypes, BookingTypes, Location, BookingSize, ActivityId, StaffId } = this.activityService.SessionBookingObj;\r\n var slots = Slots.map(slot => {\r\n return {\r\n \"LocalTime\": slot.LocalTime,\r\n \"PartySize\": BookingSize,\r\n \"SeatingAreaId\": null,\r\n \"SeatingTypeId\": null,\r\n \"IsCommunalTable\": false,\r\n \"FromWebsite\": true,\r\n \"DurationInMinutes\": slot.Duration,\r\n \"lockIdToIgnore\": slot.LockId || null,\r\n \"TableIds\": Location\r\n }\r\n });\r\n if (slots.length) {\r\n this.Subscriptions.add(this.activityService.lockTables(slots).subscribe(response => {\r\n this.lockResponse = response.Payload;\r\n this.activityService.lockMultipleResult = {};\r\n let lockData: any = Object.values(this.lockResponse);\r\n let lockKeys: any = Object.keys(this.lockResponse);\r\n let slotAvailablity = true;\r\n let msg = '';\r\n lockKeys.forEach((data, index) => {\r\n if (!this.lockResponse[data].SlotLockIdDTO?.Id) {\r\n slotAvailablity = false;\r\n msg = msg + this.datePipe.transform(data, 'hh:mm a');\r\n if (index !== lockKeys.length) {\r\n msg = msg + ', '\r\n }\r\n } else {\r\n let obj = {} as SlotLockResultDTO\r\n obj[data] = this.lockResponse[data];\r\n this.activityService.lockMultipleResult[data] = this.lockResponse[data];\r\n }\r\n });\r\n if (!slotAvailablity) {\r\n this.activityService.setMessageState(this.ts.instant('SlotIsNotFound') + ' for ' + msg, 0);\r\n } else {\r\n this.activityService.lockMultipleIds = Object.values(this.activityService.lockMultipleResult).map((x: SlotLockResultDTO) => x?.SlotLockIdDTO?.Id)\r\n let timer = moment(lockData[0].ExpiresAt).diff(moment(lockData[0].LockedAt), \"seconds\");\r\n this.activityService.showTimer = true;\r\n this.activityService.runTimer(timer);\r\n if (this.activityService.operation == operationType.edit) {\r\n this.setRatePlanCalculation(Slots, GuestTypes, BookingTypes, Location, BookingSize, ActivityId, StaffId);\r\n this.activityService.additionalGuestPage = false;\r\n } else {\r\n this.createSaveRequestObject();\r\n this.activityService.TabChange$.next(ActivityTabs.ReservationDetails);\r\n }\r\n }\r\n }));\r\n }\r\n\r\n }\r\n\r\n\r\n\r\n\r\n setRatePlanData(data) {\r\n this.ratePlan = data;\r\n if (this.ratePlan && this.ratePlan.RatePlanCalculations) {\r\n this.ratePlan.RatePlanCalculations = this.ratePlan.RatePlanCalculations.map(slot => {\r\n slot.coverTypeVariants = slot.RatePlanVariants && slot.RatePlanVariants.GuestTypeVariant ? slot.RatePlanVariants.GuestTypeVariant.map(coverVariant => {\r\n coverVariant.CoverTypeName = this.coverTypes.find(coverType => coverType.Id == coverVariant.CoverTypeId).Name;\r\n return coverVariant;\r\n }).filter(coverVariant => coverVariant.Variant) : [];\r\n slot.bookingTypevariants = slot.RatePlanVariants && slot.RatePlanVariants.BookingTypeVariant ? slot.RatePlanVariants.BookingTypeVariant.map(bookingTypeVariant => {\r\n bookingTypeVariant.BookingTypeName = this.bookingTypes.find(bookingType => bookingType.Id == bookingTypeVariant.BookingTypeId).Name;\r\n return bookingTypeVariant;\r\n }).filter(bookingTypeVariant => bookingTypeVariant.Variant) : [];\r\n return slot;\r\n });\r\n }\r\n if (this.ratePlan.TotalRatePlan || this.ratePlan.RatePlanCalculations) {\r\n this.activityService.RatePlanList$.next(this.ratePlan);\r\n }\r\n this.activityService.SelectedClassSchedule$.next(this.selectedClassSchedule);\r\n this.createSaveRequestObject();\r\n }\r\n\r\n createSaveRequestObject() {\r\n var bookingData = this.activityService.SessionBookingObj;\r\n if (this.activityService.operation === operationType.create) {\r\n this.activityService.SaveBookingObj = {\r\n \"Id\": bookingData.ActivityId,\r\n \"Size\": bookingData.BookingSize,\r\n \"RemindAboutVisit\": false,\r\n \"RemindAboutVisitEmail\": false,\r\n \"AgreedWithTermsOfUse\": true,\r\n \"Contact\": {},\r\n \"Slots\": this.getRequestObjectSlots(),\r\n \"PartyId\": null,\r\n \"SeatingAreaId\": null,\r\n \"SeatingTypeId\": null,\r\n \"Notes\": [],\r\n \"TableIds\": bookingData.Location,\r\n \"InstructorIds\": bookingData.StaffId,\r\n \"CoverTypes\": bookingData.GuestTypes,\r\n \"BookingTypes\": bookingData.BookingTypes,\r\n \"IsCommunalTable\": false,\r\n \"FromWebsite\": true,\r\n \"Language\": 0,\r\n \"ReservationAttemptId\": null,\r\n \"waiverFormTransactionId\": null,\r\n \"SecondaryContactsList\": null,\r\n \"BookingBehavior\": BookingBehavior.PrivateLesson,\r\n \"SpecialMealId\": bookingData.ActivityId,\r\n \"StaffId\": bookingData.StaffId,\r\n \"StaffIds\": bookingData.StaffId,\r\n \"StartDate\": new Date(bookingData.FromDate).toDateString(),//(moment(bookingData.FromDate).format()).split(\"+\")[0],\r\n \"EndDate\": new Date(bookingData.ToDate).toDateString(),// (moment(bookingData.FromDate).format()).split(\"+\")[0],\r\n \"OpenTimeSlots\": bookingData.Slots,\r\n \"RatePlanTimeSlots\": this.getRatePlanSlots(bookingData.Slots),\r\n \"SelectedActivity\": this.SelectedActivityData\r\n }\r\n } else {\r\n this.activityService.SaveBookingObj.Id = bookingData.ActivityId;\r\n this.activityService.SaveBookingObj.Size = bookingData.BookingSize;\r\n this.activityService.SaveBookingObj.Slots = this.getRequestObjectSlots();\r\n this.activityService.SaveBookingObj.StartDate =new Date(bookingData.FromDate).toDateString();// (moment(bookingData.FromDate).format()).split(\"+\")[0];\r\n this.activityService.SaveBookingObj.EndDate = new Date(bookingData.ToDate).toDateString();//(moment(bookingData.FromDate).format()).split(\"+\")[0];\r\n this.activityService.SaveBookingObj.SpecialMealId = bookingData.ActivityId;\r\n this.activityService.SaveBookingObj.StaffId = bookingData.StaffId;\r\n this.activityService.SaveBookingObj.StaffIds = bookingData.StaffId;\r\n this.activityService.SaveBookingObj.BookingBehavior = bookingData.ClassType;\r\n this.activityService.SaveBookingObj.TableIds = bookingData.Location;\r\n this.activityService.SaveBookingObj.InstructorIds = bookingData.StaffId;\r\n this.activityService.SaveBookingObj.CoverTypes = bookingData.GuestTypes;\r\n this.activityService.SaveBookingObj.BookingTypes = bookingData.BookingTypes;\r\n this.activityService.SaveBookingObj.SelectedActivity = this.SelectedActivityData;\r\n this.activityService.SaveBookingObj.BookingBehavior = BookingBehavior.PrivateLesson;\r\n this.activityService.SaveBookingObj.FromWebsite = true;\r\n }\r\n }\r\n\r\n getRatePlanSlots(timeslots) {\r\n return timeslots.map((slot) => {\r\n return {\r\n LocalTime: slot.LocalTime,\r\n Duration: slot.Duration,\r\n ReservationAttemptId: null\r\n }\r\n })\r\n }\r\n\r\n getRequestObjectSlots() {\r\n var bookingData = this.activityService.SessionBookingObj;\r\n\r\n return bookingData.Slots.map((slot, index) => {\r\n return {\r\n Time: slot.LocalTime,\r\n LockId: (this.lockResponse) ? this.lockResponse[slot.LocalTime]?.SlotLockIdDTO?.Id : null,\r\n Type: 4,\r\n DurationInMinutes: slot.Duration\r\n }\r\n })\r\n }\r\n isValidDuration() {\r\n var slotsSelected = Object.values(this.activityService.selectedOpenBookingSlots).filter(slot => slot);\r\n var durationSelected = slotsSelected.length * this.widgetData.TimeSlotUnitInMinutes;\r\n return durationSelected >= this.SelectedActivityData.MinDuration && durationSelected <= this.SelectedActivityData.MaxDuration\r\n }\r\n\r\n\r\n isNotPastTimeSlot(slotDateTime): boolean {\r\n const currentTime = Utilities.getRestaurantDateTime(this.activityService.restaurantWidgetSettings$.value.DaylightDelta);\r\n const past1hr = new Date(currentTime.valueOf());\r\n const slotTime = Utilities.parseDateString(slotDateTime);\r\n return slotTime >= past1hr;\r\n }\r\n ngOnDestroy(): void {\r\n if (this.Subscriptions) { this.Subscriptions.unsubscribe(); }\r\n }\r\n\r\n\r\n checkFormValidity() {\r\n this.nextButton.disbaledproperity = !this.updateFormValidity();\r\n\r\n }\r\n\r\n}\r\n","
\r\n {{'guestConsentPolicy' | translate}}\r\n
\r\n

{{customPolicyText}}

\r\n

{{'serverBetter' | translate}}

\r\n\r\n

\r\n {{'weWillKeep' | translate}} {{'name' | translate}} {{'maxDays' | translate}} \r\n {{dataRetentionPolicy.nameRetentionPeriod}} {{'days' | translate}}\r\n

\r\n

\r\n {{'weWillKeep' | translate}} {{'emailAddress' | translate}} {{'maxDays' | translate}}\r\n {{dataRetentionPolicy.emailRetentionPeriod}} {{'days' | translate}}\r\n

\r\n

\r\n {{'weWillKeep' | translate}} {{'phoneNumber' | translate}} {{'maxDays' | translate}}\r\n {{dataRetentionPolicy.phoneRetentionPeriod}} {{'days' | translate}}\r\n

\r\n

\r\n {{'weWillKeep' | translate}} {{'address' | translate}} {{'maxDays' | translate}}\r\n {{dataRetentionPolicy.addressRetentionPeriod}} {{'days' | translate}}\r\n

\r\n

\r\n {{'weWillKeep' | translate}} {{'guestImage' | translate}} {{'maxDays' | translate}}\r\n {{dataRetentionPolicy.guestImageRetentionPeriod}} {{'days' | translate}}\r\n

\r\n \r\n {{'weWillKeep' | translate}} {{'birthday&Anniversary' | translate}} {{'maxDays' | translate}}\r\n {{dataRetentionPolicy.birthdayAndAnniversaryRetentionPeriod}} {{'days' | translate}}\r\n

\r\n

\r\n {{'weWillKeep' | translate}} {{'customDetails' | translate}} {{'maxDays' | translate}}\r\n {{dataRetentionPolicy.customFieldRetentionPeriod}} {{'days' | translate}}\r\n

\r\n
\r\n
","import { Component, Input, OnInit } from '@angular/core';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { DataRetentionPolicyDetails, PolicyDataType } from 'src/app/shared/Models/WidgetSettingsModels';\r\nimport { LayoutService } from '../layout.service';\r\n\r\n@Component({\r\n selector: 'app-data-retention-policy',\r\n templateUrl: './data-retention-policy.component.html',\r\n styleUrls: ['./data-retention-policy.component.scss']\r\n})\r\nexport class DataRetentionPolicyComponent implements OnInit {\r\n @Input() data: any;\r\n policy:any;\r\n customPolicyText='';\r\n dataRetentionPolicy:any;\r\n fromClient:boolean;\r\n constructor(public ls: LayoutService,private ts: TranslateService) { }\r\n\r\n ngOnInit(): void {\r\n this.customPolicyText= this.ls.restaurantWidgetSettings$.value.CustomPolicyText ? this.ls.restaurantWidgetSettings$.value.CustomPolicyText : '';\r\n this.dataRetentionPolicy={};\r\n this.ls.dataRetentionPolicy$.subscribe(data =>{\r\n if(data){\r\n this.policy=data;\r\n this.loadPolicies(this.policy.PolicyDetails);\r\n }\r\n });\r\n }\r\n\r\n \r\n loadPolicies(policyDetails) {\r\n policyDetails.forEach((policy: DataRetentionPolicyDetails ) => {\r\n if (policy.DataType == PolicyDataType.Name)\r\n this.dataRetentionPolicy.nameRetentionPeriod = policy.RetentionInDays;\r\n else if (policy.DataType == PolicyDataType.EmailAddress)\r\n this.dataRetentionPolicy.emailRetentionPeriod = policy.RetentionInDays;\r\n else if (policy.DataType == PolicyDataType.PhoneNumber)\r\n this.dataRetentionPolicy.phoneRetentionPeriod = policy.RetentionInDays;\r\n else if (policy.DataType == PolicyDataType.Address && this.ls.fromclient)\r\n this.dataRetentionPolicy.addressRetentionPeriod = policy.RetentionInDays;\r\n else if (policy.DataType == PolicyDataType.GuestImage && this.ls.fromclient)\r\n this.dataRetentionPolicy.guestImageRetentionPeriod = policy.RetentionInDays;\r\n else if (policy.DataType == PolicyDataType.BirthdayAndAnniversary && this.ls.fromclient)\r\n this.dataRetentionPolicy.birthdayAndAnniversaryRetentionPeriod = policy.RetentionInDays;\r\n else if (policy.DataType == PolicyDataType.CustomGuestFields)\r\n this.dataRetentionPolicy.customFieldRetentionPeriod = policy.RetentionInDays;\r\n })\r\n }\r\n\r\n}\r\n","
\r\n
{{'refundAmount' | translate}}: {{OperationCurrency}}{{data.FinancialData.PaymentAmount | currencyDecimalFormatter}}\r\n
\r\n
\r\n {{message | translate}}\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n {{'creditCard' |\r\n translate}}\r\n {{'roomCharge'\r\n |\r\n translate}}\r\n {{'loyaltyPoints' |\r\n translate}}\r\n \r\n
\r\n
\r\n
{{'cardNumber' | translate}}
\r\n
{{option.data.MaskedCardNumber}}
\r\n
\r\n\r\n
\r\n
{{'roomNumber' | translate}}
\r\n
{{(option.data.RoomNumber || 'NA') | translate}}
\r\n
\r\n\r\n
\r\n
{{'bucketName' | translate}}
\r\n
{{(option.data.BucketName || 'NA') | translate}}
\r\n
\r\n
\r\n
{{'chargedOn' | translate}}
\r\n
{{option.data.TransactionDate | formatSettingsDate: ps.restaurantWidgetSettings$.value.DateFormat}}
\r\n
\r\n
\r\n
{{'amountPaid' | translate}}
\r\n
{{option.data.PaymentAmount}}
\r\n
\r\n
\r\n
{{'MembershipID' | translate}}
\r\n
{{(data.memberShipId || 'NA') | translate}}
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
","import { ChangeDetectorRef, Component, Input, OnInit, QueryList, ViewChildren } from '@angular/core';\r\nimport { Validators } from '@angular/forms';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { Subscription } from 'rxjs/internal/Subscription';\r\nimport { AuthorizePaymentType } from '../../constants/commonenums';\r\nimport { DynamicFormComponent } from '../../dynamicform/dynamic-form/dynamic-form.component';\r\nimport { FieldConfig } from '../../dynamicform/models/common-models';\r\nimport { GuestService } from '../../services/guest.service';\r\nimport { PopupService } from '../../services/popup.service';\r\n\r\n@Component({\r\n selector: 'app-auth-refund-popup',\r\n templateUrl: './auth-refund-popup.component.html',\r\n styleUrls: ['./auth-refund-popup.component.scss']\r\n})\r\nexport class AuthRefundPopupComponent implements OnInit {\r\n\r\n\r\n subscriptions: Subscription = new Subscription();\r\n refundAmountConfig: FieldConfig[];\r\n _settings: any;\r\n OperationCurrency: string;\r\n refundOptions: any[] = [];\r\n @Input() data: any;\r\n @ViewChildren('form') components: QueryList;\r\n AuthorizePaymentTypes = AuthorizePaymentType;\r\n message = '';\r\n constructor(public ps: PopupService, private cdf: ChangeDetectorRef, public gs: GuestService, private ts: TranslateService) {\r\n\r\n }\r\n closeMessage() {\r\n this.message = '';\r\n }\r\n\r\n ngOnInit() {\r\n this.OperationCurrency = this.data.OperationCurrency;\r\n this.data.FinancialData.RefundOption.forEach(element => {\r\n element.LoyaltyAccountNumber = element.LoyaltyAccountNumber != \"null\" ? element.LoyaltyAccountNumber : null;\r\n let refundAmountConfig = [{\r\n type: 'input',\r\n name: 'refundAmountConfig',\r\n inputType: 'text',\r\n directive: 'appDecimalsOnly',\r\n appearance: true,\r\n isFormArray: false,\r\n value: this.data.FinancialData.RefundOption.length === 1 ? this.data.PaymentAmount.toFixed(this.gs.restaurantWidgetSettings$.value.NumberOfFractionalDigits) : 0,\r\n prefix: this.OperationCurrency,\r\n max: element?.PaymentAmount.toFixed(this.gs.restaurantWidgetSettings$.value.NumberOfFractionalDigits),\r\n validation: [Validators.required, Validators.max(element?.PaymentAmount.toFixed(this.gs.restaurantWidgetSettings$.value.NumberOfFractionalDigits))],\r\n disabled: this.data.FinancialData.RefundOption.length > 1 ? true : false\r\n }];\r\n let data;\r\n data = { ...element };\r\n data.RoomNumber = data.RoomNumber != \"null\" ? data.RoomNumber : null;\r\n data.BucketName = data.BucketName != \"null\" ? data.BucketName : null;\r\n let checked = this.data.FinancialData.RefundOption.length === 1;\r\n this.refundOptions.push({ checked, data, refundAmountConfig })\r\n\r\n });\r\n }\r\n\r\n ngAfterViewInit() {\r\n setTimeout(() => {\r\n this.components.forEach((x, index) => {\r\n this.subscriptions.add(x.form.valueChanges.subscribe(value => {\r\n var formValid = true;\r\n this.components['_results'].forEach(({ form }, changeindex) => {\r\n if (this.refundOptions[changeindex].checked && form.status === \"INVALID\") {\r\n formValid = false;\r\n }\r\n });\r\n if (this.isTotalAmountMatching() && formValid) {\r\n this.ps.actiondisabled$.next(true);\r\n this.setRefundData();\r\n\t this.message = \"\";\r\n } else {\r\n this.ps.actiondisabled$.next(false);\r\n\t\tif (this.isInputGreaterThanTotal()) {\r\n this.message = this.ts.instant(\"refundAmountGreaterMsg\");\r\n }\r\n }\r\n }));\r\n });\r\n if (this.data.FinancialData.RefundOption.length === 1) {\r\n this.setRefundData();\r\n this.ps.actiondisabled$.next(true);\r\n } else {\r\n this.ps.actiondisabled$.next(false);\r\n }\r\n\r\n }, 100)\r\n }\r\n\r\n setRefundData() {\r\n this.gs.refundData = this.components['_results'].map((res, resIndex) => {\r\n return {\r\n AuthorizeTransactionID: this.data.FinancialData.RefundOption[resIndex].AuthorizeTransactionID,\r\n Amount: +res.form.controls[res.config[0].name].value\r\n }\r\n }).filter(itm => itm.Amount);\r\n }\r\n\r\n selectType(checked, index) {\r\n var form = this.components['_results'][index].form;\r\n if (checked) {\r\n form.enable();\r\n this.isTotalAmountMatching() ? this.ps.actiondisabled$.next(true) : this.ps.actiondisabled$.next(false);\r\n } else {\r\n form.controls.refundAmountConfig.setValue(0);\r\n form.disable();\r\n }\r\n }\r\n\r\n isTotalAmountMatching() {\r\n var total = 0;\r\n this.components['_results'].forEach(element => {\r\n total += +element.form.controls.refundAmountConfig.value;\r\n });\r\n return total.toFixed(this.gs.restaurantWidgetSettings$.value.NumberOfFractionalDigits) === this.data.FinancialData.PaymentAmount.toFixed(this.gs.restaurantWidgetSettings$.value.NumberOfFractionalDigits);\r\n }\r\n\r\nisInputGreaterThanTotal() {\r\n var total = 0;\r\n this.components['_results'].forEach(element => {\r\n total += +element.form.controls.refundAmountConfig.value;\r\n });\r\n return +total.toFixed(this.gs.restaurantWidgetSettings$.value.NumberOfFractionalDigits) > +this.data.FinancialData.PaymentAmount.toFixed(this.gs.restaurantWidgetSettings$.value.NumberOfFractionalDigits);\r\n }\r\n ngOnDestroy(): void {\r\n if (this.subscriptions) { this.subscriptions.unsubscribe(); }\r\n }\r\n}\r\n","\r\n\r\n\r\n\r\n
\r\n
\r\n
\r\n
{{'TotalPayableAmount' | translate}} :\r\n
\r\n
\r\n  {{gs.restaurantWidgetSettings$.value.OperationCurrency}}{{TotalAmount | currencyDecimalFormatter }}
\r\n
\r\n
\r\n
{{gs.minutes}}\r\n {{'mins' | translate}} {{gs.seconds}} {{'secs' |\r\n translate}}\r\n
\r\n
{{'leftForBooking' | translate}}
\r\n
\r\n
\r\n\r\n
\r\n {{'reservationDetails'| translate}}
\r\n
\r\n {{'ModifiedReservationDetails' | translate}}
\r\n \r\n \r\n
\r\n \r\n \r\n\r\n \r\n
\r\n
\r\n \r\n {{this.gs.restaurantWidgetSettings$.value.WidgetCustomization.PreReservationMessage}}\r\n
\r\n
\r\n
{{guest.name | translate}}\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n
{{'cancellationPolicy'| translate}}:
\r\n
\r\n {{cancellationPolicy}}\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n
\r\n
0 && !rs.additionalGuestPage && gs.operation==operationType.create\">\r\n Pre Payment Policy\r\n
\r\n Payment : {{paymentData.OperationCurrency}}{{activityPayment | currencyDecimalFormatter}}\r\n

\r\n {{paymentMessage}}\r\n

\r\n
\r\n
\r\n
\r\n\r\n \r\n
\r\n
\r\n guestData.length)|| (gs.operation == operationType.edit && !gs.editFromCart && (gs.additionalGuestLength > guestData.length))) && gs.restaurantWidgetSettings$.value.WidgetCustomization.AllowAdditionalGuestDetails\"\r\n [buttontype]=\"additionalGuestBtn\" (valueChange)=\"additionalGuest()\">\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
","import { TitleCasePipe } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, HostListener, OnDestroy, OnInit, QueryList, ViewChild, ViewChildren, ViewEncapsulation } from '@angular/core';\r\nimport { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport _ from 'lodash';\r\nimport moment from 'moment';\r\nimport { empty, Subscription } from 'rxjs';\r\nimport { DataRetentionPolicyComponent } from 'src/app/layout/data-retention-policy/data-retention-policy.component';\r\nimport { ReservationService } from 'src/app/layout/reservation.service';\r\nimport { PopupMessageComponent } from 'src/app/shared/components/popup-message/popup-message.component';\r\nimport { ActivityTabs, buttonTypes, componentName, ComponentTypes } from 'src/app/shared/constants/commonenums';\r\nimport { DynamicFormComponent } from 'src/app/shared/dynamicform/dynamic-form/dynamic-form.component';\r\nimport { ButtonValue, FieldConfig } from 'src/app/shared/dynamicform/models/common-models';\r\nimport { ComponentDetails } from 'src/app/shared/dynamicform/models/popup.interface';\r\nimport { DynamicFormService } from 'src/app/shared/dynamicform/service/dynamic-form.service';\r\nimport { CustomFieldsDTO, PartyNoteType, PaymentGateways, PaymentStates, RegisterReservationAttemptResponseDTO, SecondaryContactDTO, PartyType, FinancialEffectForUpdatedReservationDTO, ContactDTO } from 'src/app/shared/Models/PartyModels';\r\nimport { SlotLockResultDTO } from 'src/app/shared/Models/SlotLockModels';\r\nimport { ConfirmationVia, CountryDTO, operationType, PolicyDataType } from 'src/app/shared/Models/WidgetSettingsModels';\r\nimport { PopupService } from 'src/app/shared/services/popup.service';\r\nimport { Utilities } from 'src/app/shared/utilities/utilities';\r\nimport { environment } from 'src/environments/environment';\r\n// import { isArray } from 'util';\r\nimport { BookingActivity, BookingBehavior } from '../../Models/SessionBookingDTO';\r\nimport { GuestService } from '../../services/guest.service';\r\nimport { Router, ActivatedRoute } from '@angular/router';\r\nimport { AuthRefundPopupComponent } from '../auth-refund-popup/auth-refund-popup.component';\r\nimport { ValidationMessageType } from '../../Models/ResultModels';\r\nimport { CurrencyDecimalFormatter } from '../../pipes/currency-decimal.pipe';\r\n\r\n@Component({\r\n selector: 'app-guest-data',\r\n templateUrl: './guest-data.component.html',\r\n styleUrls: ['./guest-data.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.Default\r\n})\r\nexport class GuestDataComponent extends Utilities implements OnInit, OnDestroy {\r\n guestInfoConfig: FieldConfig[];\r\n guestInfoConfigSecondary: FieldConfig[];\r\n guestConfig: FieldConfig[];\r\n confirmButton: ButtonValue;\r\n previousButton: ButtonValue;\r\n addToButton: ButtonValue;\r\n editButton: ButtonValue;\r\n additionalGuestBtn: ButtonValue;\r\n backButton: ButtonValue;\r\n SaveGuestbtn: ButtonValue;\r\n guestDetailsForm: FormGroup;\r\n guestDataPrimary = [{ name: 'primaryGuest', isNew: false }];\r\n guestDataSecondary = [{ name: 'secondaryGuest1', isNew: true }];\r\n guestData = [];\r\n @ViewChildren('form') components: QueryList;\r\n @ViewChildren('memberForm') memberForm: QueryList;\r\n @ViewChild('d') primaryGuest: DynamicFormComponent;\r\n partySize = 5;\r\n subscriptions: Subscription = new Subscription();\r\n partyDetails: any;\r\n lockResult: SlotLockResultDTO;\r\n deleteSecondaryGuestPopUpRef: MatDialogRef;\r\n paymentData: RegisterReservationAttemptResponseDTO;\r\n urlSafe: SafeResourceUrl;\r\n waiverFormTrancationId = null;\r\n isUserAllowedToclickConfirm = false;\r\n stopListening: Function;\r\n showIframe = false;\r\n IframeURL = '';\r\n waiverFormTransactionId = '';\r\n countryCodes: CountryDTO[] = [];\r\n selectedCountryId: Number;\r\n noShowfeeMessage = '';\r\n noShowfee: Number;\r\n activityPayment: any;\r\n paymentMessage = '';\r\n notesFormGroup: any;\r\n dataRetentionPolicyExisting = false;\r\n primaryGuestPhone = '';\r\n primaryGuestEmail = '';\r\n dataRetentionPolicyDialogRef: MatDialogRef;\r\n financialPopUpRef: MatDialogRef;\r\n AuthrefundPopupRef: MatDialogRef\r\n popUpMessage = '';\r\n noShowPolicyTitle = '';\r\n ratePlanAmountInfo: number;\r\n specialMealAmountInfo: number;\r\n paymentAmountInfo: number;\r\n operationType = operationType;\r\n freeTextIdList = [];\r\n secondaryGuestTobeDeletedIndex: number;\r\n ratePlan: any;\r\n restaurantName: string;\r\n TotalAmount: any = 0;\r\n isSplitPayment: boolean;\r\n PartyId: number;\r\n PaymentGateway: number;\r\n RefundData: any;\r\n isAuthRefund: boolean;\r\n financialData: FinancialEffectForUpdatedReservationDTO;\r\n guestFieldValidation: boolean = true;\r\n cancellationPolicy: string = \"\";\r\n membershipConfig: FieldConfig[];\r\n bookBtn: ButtonValue;\r\n waiverForm = false;\r\n cartEvents: { isAdd?: boolean, isUpdate?: boolean };\r\n constructor(private ts: TranslateService, private dfs: DynamicFormService, private fb: FormBuilder, public rs: ReservationService, public sanitizer: DomSanitizer, private ps: PopupService, public dialog: MatDialog, public titleCasePipe: TitleCasePipe, private currencyDecimalFormatter: CurrencyDecimalFormatter,\r\n public gs: GuestService, private route: ActivatedRoute) {\r\n super(dialog)\r\n this.subscriptions.add(this.gs.editPartyData$.subscribe(data => {\r\n if (data) {\r\n this.partyDetails = data;\r\n this.gs.primaryContact = data.Contact;\r\n } else {\r\n this.partyDetails = null;\r\n this.gs.primaryContact = {} as ContactDTO;\r\n }\r\n }));\r\n this.subscriptions.add(this.gs.TimerOff$.subscribe(data => {\r\n if (!data) {\r\n if (this.financialPopUpRef) {\r\n this.financialPopUpRef.close();\r\n }\r\n if (this.AuthrefundPopupRef) {\r\n this.AuthrefundPopupRef.close();\r\n }\r\n }\r\n }));\r\n }\r\n\r\n getCancellationPolicy(activityId) {\r\n return this.gs.restaurantWidgetSettings$.value.AvailableSpecialMeals.filter(x => x.Id == activityId)[0]?.CancellationPolicy;\r\n }\r\n ngOnInit(): void {\r\n this.restaurantName = this.route.snapshot.params.restaurantName;\r\n this.guestDetailsForm = this.fb.group({})\r\n this.countryCodes = this.gs.countriesList;\r\n this.createGuestConfig();\r\n this.addCategoryPreferencesNotes();\r\n this.cancellationPolicy = this.getCancellationPolicy(this.gs.SaveBookingObj.SpecialMealId);\r\n let guestConfigCopy = _.cloneDeep(this.guestConfig);\r\n if (this.gs.additionalGuestPage && this.gs.operation != operationType.edit) {\r\n this.guestData = _.cloneDeep(this.guestDataSecondary)\r\n this.guestInfoConfig = _.cloneDeep(this.guestConfig)\r\n }\r\n else if (!this.gs.additionalGuestPage && this.gs.operation == operationType.edit) {\r\n this.guestData = _.cloneDeep(this.guestDataPrimary);\r\n if (!this.gs.secondaryContactList) {\r\n this.gs.secondaryContactList = this.gs.editPartyData$.value.SecondaryContacts;\r\n }\r\n let partySize = this.gs.operation == operationType.edit && this.gs.secondaryContactList ? this.gs.secondaryContactList.length : 0;//this.gs.reservationFormGroup.controls.guestDetailsForm.get('secondaryContactList').value.length\r\n while (partySize != 0) {\r\n this.guestData.push({ name: this.ts.instant('secondaryGuest') + (this.guestData.length + 1), isNew: false });\r\n partySize--;\r\n }\r\n this.guestInfoConfig = _.cloneDeep(this.guestConfig);\r\n this.addCustomGuestFields();\r\n this.addRequiredCustomTermsAndConditions();\r\n this.guestInfoConfigSecondary = _.cloneDeep(this.guestConfig)\r\n this.guestInfoConfigSecondary[0].value = '';\r\n this.guestInfoConfigSecondary[1].value = '';\r\n this.guestInfoConfigSecondary[2].disableSelect = true;\r\n }\r\n else {\r\n this.guestData = _.cloneDeep(this.guestDataPrimary)\r\n this.guestInfoConfig = _.cloneDeep(this.guestConfig)\r\n }\r\n\r\n if (this.countryCodes && this.countryCodes.length > 0) {\r\n let countrySelected = Utilities.getDefaultCountry(this.countryCodes, this.gs.restaurantWidgetSettings$.value.Country);\r\n this.guestInfoConfig[2].options = [];\r\n this.countryCodes.forEach(element => {\r\n this.guestInfoConfig[2].options.push({ id: element.Id, value: element.CountryPhoneCode + ' (' + element.Name + ' )' });\r\n })\r\n if (this.gs.primaryContact) {\r\n const selectedCountryCode = this.countryCodes.filter((country) => {\r\n return country.Id === this.gs.primaryContact.CountryId;\r\n })[0];\r\n if (selectedCountryCode) {\r\n this.gs.selectedCountryId = selectedCountryCode.Id;\r\n this.dfs.selectedCountryCode = selectedCountryCode.CountryPhoneCode;\r\n this.dfs.selectedCountryId = selectedCountryCode.Id;\r\n }\r\n }\r\n this.guestInfoConfig[2].value = this.gs.selectedCountryId ? this.gs.selectedCountryId : countrySelected.Id;\r\n if (this.partyDetails && this.partyDetails.Contact.Mobile) {\r\n this.guestInfoConfig[2].value = this.partyDetails.Contact.Mobile;\r\n }\r\n if (operationType.edit == this.gs.operation && this.guestInfoConfigSecondary) {\r\n this.guestInfoConfigSecondary[2].options = _.cloneDeep(this.guestInfoConfig[2].options);\r\n this.guestInfoConfigSecondary[2].value = _.cloneDeep(this.guestInfoConfig[2].value);\r\n }\r\n this.dfs.selectedCountryCode = this.dfs.selectedCountryCode ? this.dfs.selectedCountryCode : countrySelected.CountryPhoneCode;\r\n }\r\n this.createActionButtons();\r\n\r\n if (!this.gs.additionalGuestPage) {\r\n if (this.gs.operation != operationType.edit) {\r\n this.addCustomGuestFields();\r\n this.addRequiredCustomTermsAndConditions();\r\n }\r\n this.gs.operation == operationType.edit ? this.RegisterReservationAttempt(true) : this.GetPreliminaryReservationInformation();\r\n }\r\n else {\r\n this.isUserAllowedToclickConfirm = true;\r\n }\r\n\r\n this.subscriptions.add(this.ps.actionEnabled$.subscribe(from => {\r\n if (from == ComponentTypes.dataRetentionPolicy) {\r\n if (this.dataRetentionPolicyDialogRef) {\r\n this.dataRetentionPolicyDialogRef.close();\r\n }\r\n }\r\n else if (from == ComponentTypes.deleteSecondaryGuest) {\r\n this.deleteSecondaryGuestConfirmed();\r\n this.deleteSecondaryGuestPopUpRef.close();\r\n }\r\n else if (from == ComponentTypes.financialEffectCalculation) {\r\n this.financialPopUpRef.close();\r\n if (this.RefundData) {\r\n this.showAuthRefundPopup();\r\n }\r\n }\r\n else if (from == ComponentTypes.AuthRefundPopup) {\r\n this.AuthrefundPopupRef.close();\r\n this.isAuthRefund = true;\r\n }\r\n }));\r\n\r\n this.subscriptions.add(this.ps.cancelEnabled$.subscribe(from => {\r\n if (from == ComponentTypes.financialEffectCalculation || from == ComponentTypes.AuthRefundPopup) {\r\n this.goBackToReservation();\r\n }\r\n if (from == ComponentTypes.deleteSecondaryGuest) {\r\n this.deleteSecondaryGuestPopUpRef.close();\r\n }\r\n }));\r\n\r\n if (this.gs.additionalGuestPage) {\r\n setTimeout(() => this.subscribeMemberConfig(), 100)\r\n }\r\n\r\n this.subscriptions.add(\r\n this.gs.overlapBookingproceedEvent.subscribe(x=>{\r\n if(x.proceedOverlapBooking && !x.isOverlapErrorFromValidateCartApi) {\r\n this.reservationConfirm(true);\r\n } else if (x.proceedOverlapBooking && x.isOverlapErrorFromValidateCartApi) {\r\n if(this.cartEvents.isAdd) this.addtoCartDataSuccessHandler();\r\n else if(this.cartEvents.isUpdate) this.updateCartSuccessHandler();\r\n }\r\n })\r\n )\r\n }\r\n\r\n createGuestConfig() {\r\n this.membershipConfig = [{\r\n type: 'input',\r\n label: this.ts.instant('MembershipID'),\r\n name: 'MembershipId',\r\n inputType: 'text',\r\n class: 'guest-details__first-name',\r\n showErrorText: true,\r\n appearance: true,\r\n isFormArray: false,\r\n validation: [Validators.required],\r\n }];\r\n this.guestConfig = [\r\n {\r\n type: 'input',\r\n label: this.ts.instant('firstName'),\r\n name: 'firstName',\r\n inputType: 'text',\r\n class: 'guest-data__first-name',\r\n showErrorText: true,\r\n appearance: true,\r\n isFormArray: false,\r\n isMandatory: true,\r\n errorMessage: this.ts.instant('firstNameRequired'),\r\n validation: [Validators.required],\r\n value: this.partyDetails ? this.partyDetails.Contact.FirstName ? this.partyDetails.Contact.FirstName : this.partyDetails.Contact.FName ? this.partyDetails.Contact.FName : '' : ''\r\n },\r\n {\r\n type: 'input',\r\n label: this.ts.instant('lastName'),\r\n name: 'lastName',\r\n inputType: 'text',\r\n class: 'guest-data__last-name',\r\n showErrorText: true,\r\n appearance: true,\r\n isFormArray: false,\r\n isMandatory: true,\r\n errorMessage: this.ts.instant('lastNameRequired'),\r\n validation: [Validators.required],\r\n value: this.partyDetails ? this.partyDetails.Contact.LastName ? this.partyDetails.Contact.LastName : this.partyDetails.Contact.LName ? this.partyDetails.Contact.LName : '' : ''\r\n },\r\n {\r\n type: 'inputSelect',\r\n label: this.ts.instant('phone'),\r\n name: 'phone',\r\n inputType: 'text',\r\n placeholder: 'registerPinText',\r\n class: 'guest-data__phone',\r\n showErrorText: true,\r\n appearance: true,\r\n errorMessage: this.ts.instant('phoneRequired'),\r\n isFormArray: false,\r\n cellClick: this.countryCodeSelected.bind(this),\r\n isPhoneNumber: true, \r\n isMandatory: true,\r\n validation: [Validators.required],\r\n disableSelect: this.gs.additionalGuestPage,\r\n value: this.partyDetails ? this.partyDetails.Contact.PhoneNumber ? this.partyDetails.Contact.PhoneNumber : this.partyDetails.Contact.Mobile ? this.partyDetails.Contact.Mobile : '' : ''\r\n\r\n },\r\n {\r\n type: 'input',\r\n label: this.ts.instant('email'),\r\n name: 'email',\r\n inputType: 'email',\r\n placeholder: 'registerPinText',\r\n class: 'guest-data__email',\r\n showErrorText: true,\r\n appearance: true,\r\n isFormArray: false,\r\n isMandatory: true,\r\n errorMessage: this.ts.instant('emailRequired'),\r\n validation: [Validators.required, Validators.email, Validators.pattern('^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\\\.[A-Za-z]{2,4}$')],\r\n value: this.partyDetails ? this.partyDetails.Contact.EmailAddress ? this.partyDetails.Contact.EmailAddress : this.partyDetails.Contact.EmailList ? this.partyDetails.Contact.EmailList[0].EmailId : '' : ''\r\n }\r\n ];\r\n }\r\n\r\n createActionButtons() {\r\n this.confirmButton = {\r\n type: buttonTypes.confirmBtn,\r\n label: this.ts.instant('confirm'),\r\n customclass: 'guest-data__previous-btn',\r\n disbaledproperity: true\r\n };\r\n this.addToButton = {\r\n type: buttonTypes.confirmBtn,\r\n label: this.ts.instant('AddToCart'),\r\n customclass: 'guest-data__confirm-btn',\r\n disbaledproperity: true\r\n }\r\n this.bookBtn = {\r\n type: buttonTypes.confirmBtn,\r\n label: this.ts.instant('UpdateCart'),\r\n customclass: 'guest-data__previous-btn',\r\n disbaledproperity: false\r\n };\r\n this.editButton = {\r\n type: buttonTypes.confirmBtn,\r\n label: this.ts.instant('edit'),\r\n customclass: 'guest-data__confirm-btn',\r\n disbaledproperity: false\r\n };\r\n this.previousButton = {\r\n type: buttonTypes.cancelBtn,\r\n label: this.ts.instant('clearAll'),\r\n customclass: 'guest-data__previous-btn',\r\n };\r\n this.additionalGuestBtn = {\r\n type: buttonTypes.cancelBtn,\r\n label: this.ts.instant('guestDetails'),\r\n customclass: 'guest-data__additional-guest',\r\n icon: 'icon-add'\r\n };\r\n this.backButton = {\r\n type: buttonTypes.cancelBtn,\r\n label: this.ts.instant('previous'),\r\n customclass: 'guest-data__previous-btn',\r\n };\r\n this.SaveGuestbtn = {\r\n type: buttonTypes.confirmBtn,\r\n label: this.ts.instant('Save'),\r\n customclass: 'guest-data__previous-btn',\r\n };\r\n }\r\n\r\n addCategoryPreferencesNotes() {\r\n if (this.gs.restaurantWidgetSettings$.value.PreferencesCategories && this.gs.restaurantWidgetSettings$.value.PreferencesCategories.length > 0) {\r\n this.gs.restaurantWidgetSettings$.value.PreferencesCategories.filter(x => x.Text !== 'Reasons').forEach(category => {\r\n if (category.IncludeInWebReservation) {\r\n let predefinedNotes = [];\r\n let freeTextIdValue;\r\n category.SubCategories && category.SubCategories.length > 0 ? category.SubCategories.map(x => {\r\n if (x.PredefinedContactNote && x.PredefinedContactNote.length > 0) {\r\n x.PredefinedContactNote.forEach(note => {\r\n if (note.Text.toLowerCase() == \"others\") {\r\n freeTextIdValue = note.Id;\r\n this.freeTextIdList.push(freeTextIdValue);\r\n } else {\r\n let predefinedContactNoteMappingList = note.PredefinedContactNotePropertyMapping.filter(x => x.PropertyId == this.gs.restaurantWidgetSettings$.value.RestaurantId).map(x => x.PredefinedContactNoteId);\r\n if (predefinedContactNoteMappingList.find(x => x == note.Id)) { predefinedNotes.push(note) }\r\n }\r\n });\r\n }\r\n }) : [];\r\n if (predefinedNotes && predefinedNotes.length > 0) {\r\n let options = predefinedNotes.map(x => { return { id: x.Id, value: x.Text } });\r\n this.guestConfig.push({\r\n type: 'checkbox',\r\n placeholder: 'ds',\r\n value: false,\r\n name: 'preferences_' + category.Id.toString(),\r\n groupLabel: category.Text,\r\n options: options,\r\n isFormArray: true,\r\n class: 'guest-data__special-requests'\r\n })\r\n\r\n if (freeTextIdValue) {\r\n let freeTextValue = ''\r\n if (!this.gs.additionalGuestPage && this.gs.primaryContact && this.gs.primaryContact.Notes && this.gs.primaryContact.Notes.length > 0) {\r\n if (this.gs.primaryContact.Notes.filter(x => x.RelatedId == freeTextIdValue)[0]) {\r\n freeTextValue = this.gs.primaryContact.Notes.filter(x => x.RelatedId == freeTextIdValue)[0].Text;\r\n }\r\n }\r\n this.guestConfig.push({\r\n type: 'textarea',\r\n name: freeTextIdValue.toString(),\r\n class: 'guest-data__special-notes',\r\n label: 'Others',\r\n appearance: true,\r\n isFormArray: false,\r\n value: ''\r\n })\r\n }\r\n }\r\n }\r\n\r\n });\r\n }\r\n }\r\n\r\n countryCodeSelected(eve) {\r\n const selectedCountryCode = this.countryCodes.filter((country) => {\r\n return country.Id === eve.value;\r\n })[0];\r\n this.gs.selectedCountryId = selectedCountryCode.Id;\r\n this.dfs.selectedCountryCode = selectedCountryCode.CountryPhoneCode;\r\n this.dfs.selectedCountryId = selectedCountryCode.Id;\r\n const phoneValue = this.components.first.form.get('phone').value;\r\n let phoneNumber: any;\r\n phoneNumber = this.dfs.onInputChange(phoneValue ? phoneValue : eve.value, false);\r\n if (this.components.first.form.get('phone').value && this.components.first.form.get('phone').value.length > 0) {\r\n this.components.first.form.get('phone').setValue(phoneNumber);\r\n }\r\n if (operationType.edit == this.gs.operation && this.guestInfoConfigSecondary) {\r\n this.guestInfoConfigSecondary[2].value = this.gs.selectedCountryId ? this.gs.selectedCountryId : selectedCountryCode.Id;\r\n }\r\n if (this.dfs.requiredPhoneNumberLength$) {\r\n const count = this.dfs.requiredPhoneNumberLength$;\r\n this.components.first.form.get('phone').setValidators([Validators.minLength(count), Validators.maxLength(count)]);\r\n this.guestDetailsForm.get('primaryGuest')['controls']['phone'].setValidators([Validators.minLength(count), Validators.maxLength(count)]);\r\n this.components.first.form.get('phone').updateValueAndValidity();\r\n this.guestDetailsForm.get('primaryGuest')['controls']['phone'].updateValueAndValidity();\r\n this.components.toArray().forEach((formData, index) => {\r\n if (index > 0) {\r\n //formData.form.controls.firstName.setValue(this.gs.reservationFormGroup.controls.guestDetailsForm.get('secondaryContactList').value[index - 1].FirstName)\r\n formData.form['controls']['phone'].setValidators([Validators.minLength(count), Validators.maxLength(count)]);\r\n if (formData.form.value.phone && formData.form.value.phone.length > 0) {\r\n let phoneValue = this.dfs.onInputChange(formData.form.value.phone, false);\r\n formData.form.controls.phone.setValue(phoneValue);\r\n }\r\n formData.form['controls']['phone'].updateValueAndValidity();\r\n }\r\n });\r\n }\r\n }\r\n\r\n addCustomGuestFields() {\r\n let promoCodeValue = '';\r\n if (this.gs.operation == operationType.edit && this.gs.editPartyData$.value.Notes && this.gs.editPartyData$.value.Notes.length > 0) {\r\n this.gs.editPartyData$.value.Notes.forEach(note => {\r\n if (note.Type == PartyNoteType.PromoCode && note.Text) {\r\n promoCodeValue = note.Text;\r\n }\r\n });\r\n }\r\n this.guestInfoConfig.push(\r\n {\r\n type: 'input',\r\n label: this.gs.restaurantWidgetSettings$.value.WidgetCustomization.PromoCodeLabel ? this.gs.restaurantWidgetSettings$.value.WidgetCustomization.PromoCodeLabel : this.ts.instant('promoCode'),\r\n value: promoCodeValue ? promoCodeValue : '',\r\n name: 'promocode',\r\n placeholder: this.gs.restaurantWidgetSettings$.value.WidgetCustomization.PromoCodeLabel ? this.gs.restaurantWidgetSettings$.value.WidgetCustomization.PromoCodeLabel : 'Promo Code',\r\n class: 'guest-data__promo-code',\r\n appearance: true,\r\n isFormArray: false,\r\n });\r\n\r\n\r\n if (this.gs.customGuestFields && this.gs.customGuestFields.CustomGuestField && this.gs.customGuestFields.CustomGuestField.length > 0) {\r\n this.gs.customGuestFields.CustomGuestField = _.sortBy(this.gs.customGuestFields.CustomGuestField, 'FieldType').reverse();\r\n this.gs.customGuestFields.CustomGuestField.forEach(field => {\r\n let fieldValue = ''\r\n if (this.gs.primaryContact && this.gs.primaryContact.ContactCustomFields && this.gs.primaryContact.ContactCustomFields.length > 0) {\r\n fieldValue = this.gs.primaryContact.ContactCustomFields.filter(x => x.CustomFieldId == field.Id)[0] ? this.gs.primaryContact.ContactCustomFields.filter(x => x.CustomFieldId == field.Id)[0].CustomFieldValue : '';\r\n }\r\n if (field.IsCustomGuestFieldVisible && field.AvailableForOnlineReservation) {\r\n if (field.FieldType == 'Text Field') {\r\n this.guestInfoConfig.push({\r\n type: 'input',\r\n placeholder: field.FieldName,\r\n value: fieldValue ? fieldValue : '',\r\n name: 'customGuestField_' + field.Id.toString(),\r\n class: 'guest-data__promo-code',\r\n isFormArray: false,\r\n appearance: true,\r\n label: field.FieldName,\r\n showErrorText: this.customFieldMandatory(field),\r\n errorMessage: this.customFieldErrorMessage(field),\r\n validation: this.customValidationRequired(field),\r\n isMandatory: this.customFieldMandatory(field),\r\n\r\n });\r\n }\r\n if (field.FieldType == 'Drop Down') {\r\n let Options = [];\r\n Options = field.FieldOptions.split(',').map(x => { return { id: x, value: x } });\r\n Options.splice(0, 0, { id: '', value: field.FieldName })\r\n this.guestInfoConfig.push({\r\n type: 'select',\r\n placeholder: field.FieldName,\r\n options: Options,\r\n value: fieldValue ? fieldValue : Options[0].id,\r\n name: 'customGuestField_' + field.Id.toString(),\r\n class: 'guest-data__promo-code',\r\n isFormArray: false,\r\n appearance: true,\r\n label: field.FieldName,\r\n showErrorText: this.customFieldMandatory(field),\r\n errorMessage: this.customFieldErrorMessage(field),\r\n validation: this.customValidationRequired(field),\r\n isMandatory: this.customFieldMandatory(field),\r\n });\r\n }\r\n }\r\n });\r\n }\r\n }\r\n customFieldErrorMessage(field) {\r\n if (this.customFieldMandatory(field)) {\r\n return field.FieldName + ' is required';\r\n } else {\r\n return '';\r\n }\r\n }\r\n customValidationRequired(field) {\r\n if (this.customFieldMandatory(field)) {\r\n return [Validators.required];\r\n } else {\r\n return [];\r\n }\r\n }\r\n\r\n customFieldMandatory(field) {\r\n if (field && this.gs.selectedSpecialMeal) {\r\n let validationField = this.gs.selectedSpecialMeal.customFieldValidation;\r\n if (validationField && validationField.length > 0) {\r\n let fieldIds = [];\r\n validationField.forEach(function (value) {\r\n fieldIds.push(value.CustomGuestFieldId);\r\n })\r\n if (fieldIds.includes(field.Id)) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n }\r\n }\r\n addRequiredCustomTermsAndConditions() {\r\n if (this.gs.operation != operationType.edit) {\r\n this.guestInfoConfig.push({\r\n type: 'checkbox',\r\n placeholder: this.getAgreeTermsAndConditionsText(),\r\n value: false,\r\n name: 'agreeTerms',\r\n class: 'guest-data__terms-and-conditions',\r\n isFormArray: false,\r\n validation: [Validators.requiredTrue],\r\n innerHTMLdata: true\r\n })\r\n }\r\n\r\n if (this.gs.restaurantWidgetSettings$.value.IsSmsReminderSupported) {\r\n if (this.gs.restaurantWidgetSettings$.value.WidgetCustomization.IsReservationReminderMandatory) {\r\n this.guestInfoConfig.push({\r\n type: 'checkbox',\r\n placeholder: 'SmsMessageReminderText',\r\n value: true,\r\n name: 'reservationBySMS',\r\n class: 'guest-data__reservation-by-sms',\r\n isFormArray: false,\r\n disabled: true\r\n });\r\n }\r\n else {\r\n this.guestInfoConfig.push({\r\n type: 'checkbox',\r\n placeholder: 'SmsMessageReminderText',\r\n value: false,\r\n name: 'reservationBySMS',\r\n class: 'guest-data__sms-reminder',\r\n isFormArray: false\r\n });\r\n }\r\n }\r\n this.guestInfoConfig.push({\r\n type: 'checkbox',\r\n placeholder: 'emailReminderText',\r\n value: false,\r\n name: 'reservationByEmail',\r\n class: 'guest-data__email-remainder',\r\n isFormArray: false\r\n });\r\n\r\n if (this.gs.operation != operationType.edit) {\r\n if (this.gs.restaurantWidgetSettings$.value.WidgetCustomization.CustomTermsOfService && this.gs.restaurantWidgetSettings$.value.WidgetCustomization.CustomTermsOfService.length > 0) {\r\n this.gs.restaurantWidgetSettings$.value.WidgetCustomization.CustomTermsOfService.forEach((customTerm, index) => {\r\n this.guestInfoConfig.push({\r\n type: 'checkbox',\r\n placeholder: customTerm,\r\n value: false,\r\n name: 'customTerm_' + index,\r\n class: 'guest-data__custom-term',\r\n isFormArray: false,\r\n validation: [Validators.requiredTrue],\r\n innerHTMLdata: true\r\n });\r\n });\r\n }\r\n }\r\n\r\n if (this.gs.restaurantWidgetSettings$.value.ConfirmationVia == ConfirmationVia.Both) {\r\n this.guestInfoConfig.push({\r\n type: 'checkbox',\r\n placeholder: this.ts.instant('smsConfirmationText'),\r\n value: false,\r\n name: 'reservationConfirmationBySMS',\r\n class: 'guest-data__confirmation-by-sms',\r\n isFormArray: false\r\n });\r\n this.guestInfoConfig.push({\r\n type: 'checkbox',\r\n placeholder: this.ts.instant('emailConfirmationText'),\r\n value: false,\r\n name: 'reservationConfirmationByEmail',\r\n class: 'guest-data__confirmation-by-email',\r\n isFormArray: false\r\n });\r\n }\r\n\r\n //Marketing\r\n if (this.gs.restaurantWidgetSettings$.value.MarketingFlagEnabled && this.gs.restaurantWidgetSettings$.value.MarketingFlagDescription) {\r\n this.guestInfoConfig.push({\r\n type: 'checkbox',\r\n placeholder: this.gs.restaurantWidgetSettings$.value.MarketingFlagDescription,\r\n value: this.gs.operation == operationType.edit && this.gs.editPartyData$.value.Contact.MarketingOptedIn ? this.gs.editPartyData$.value.Contact.MarketingOptedIn : false,\r\n name: 'marketingFlag',\r\n class: 'guest-data__marketing-flag',\r\n isFormArray: false,\r\n innerHTMLdata: true\r\n });\r\n }\r\n\r\n //Data Retention Policy\r\n this.dataRetentionPolicyExisting = false;\r\n if ((this.gs.operation != operationType.edit || this.gs.editFromCart) && this.gs.restaurantWidgetSettings$.value.IsGDPREnabled && this.gs.dataRetentionPolicy$.value && this.gs.dataRetentionPolicy$.value.PolicyDetails) {\r\n for (var i = 0; i < this.gs.dataRetentionPolicy$.value.PolicyDetails.length; i++) {\r\n var policyDetails = this.gs.dataRetentionPolicy$.value.PolicyDetails[i];\r\n switch (policyDetails.DataType) {\r\n case PolicyDataType.Name:\r\n case PolicyDataType.Address:\r\n case PolicyDataType.PhoneNumber:\r\n case PolicyDataType.EmailAddress:\r\n case PolicyDataType.GuestImage:\r\n case PolicyDataType.CustomGuestFields:\r\n case PolicyDataType.BirthdayAndAnniversary:\r\n if (policyDetails.RetentionInDays > 0) {\r\n this.dataRetentionPolicyExisting = true;\r\n }\r\n break;\r\n default:\r\n this.dataRetentionPolicyExisting = false;\r\n break;\r\n\r\n }\r\n }\r\n }\r\n if (this.dataRetentionPolicyExisting) {\r\n this.guestInfoConfig.push({\r\n type: 'checkbox',\r\n placeholder: this.ts.instant('dataRetentionCheckBoxText') + '' + this.ts.instant('dataRetentionPolicy') + '.',\r\n value: this.gs.editFromCart ? !!this.gs.editPartyData$.value.Contact.ConsentPolicyId : false ,\r\n name: 'dataRetention',\r\n class: 'guest-data__data-retention-policy',\r\n isFormArray: false,\r\n innerHTMLdata: true\r\n });\r\n }\r\n\r\n }\r\n\r\n showDataRententionPolicy() {\r\n let dataRetentionPolicyData = {\r\n customPolicyText: this.gs.restaurantWidgetSettings$.value.CustomPolicyText ? this.gs.restaurantWidgetSettings$.value.CustomPolicyText : this.ts.instant('serverBetter'),\r\n policyDetails: this.gs.dataRetentionPolicy$.value.PolicyDetails,\r\n fromClient: false // Need to bind based on Url launched\r\n }\r\n const componentDetails: ComponentDetails = Utilities.setComponentDetails(DataRetentionPolicyComponent, 'small', '', dataRetentionPolicyData,\r\n this.ts.instant('guestConsentPolicy'));\r\n this.dataRetentionPolicyDialogRef = this.openCustomPopup(componentDetails, ComponentTypes.dataRetentionPolicy, dataRetentionPolicyData.fromClient ? '50%' : '40%', dataRetentionPolicyData.fromClient ? '80%' : '60%', false, this.ts.instant('No'), this.ts.instant('Yes'),\r\n '', false)\r\n }\r\n getAgreeTermsAndConditionsText(): string {\r\n let text = \"\";\r\n text = this.ts.instant('agree') + '' + this.ts.instant('termsOfUse') + '' + this.ts.instant('and')\r\n + '' + this.ts.instant('privacyPolicy') + '';\r\n return text;\r\n }\r\n ngAfterViewInit() {\r\n const allNotes = {};\r\n for (const addInfo of this.guestInfoConfig) {\r\n allNotes[addInfo.name] = '';\r\n }\r\n this.notesFormGroup = this.fb.group(allNotes);\r\n // if (!this.gs.additionalGuestPage && this.gs.operation != operationType.edit) {\r\n // this.gs.primaryContact ? this.components.first.form.controls.phone.setValue(this.gs.primaryContact.PhoneNumber):this.components.first.form.controls.phone.setValue(''); //to remove the cuntryId binded as value in the input field\r\n // this.guestDetailsForm = this.fb.group({\r\n // primaryGuest: this.components.first.form\r\n // })\r\n // // this.guestDetailsForm.addControl('primaryGuest', this.notesFormGroup);\r\n // }\r\n if (this.gs.additionalGuestPage && this.gs.operation != operationType.edit) {\r\n this.guestDetailsForm = this.fb.group({\r\n secondaryGuest1: this.components.first.form\r\n })\r\n // this.guestDetailsForm.addControl('secondaryGuest1', this.notesFormGroup);\r\n }\r\n else {\r\n this.gs.primaryContact ? this.components.first.form.controls.phone.setValue(this.gs.primaryContact.PhoneNumber) : this.components.first.form.controls.phone.setValue(''); //to remove the cuntryId binded as value in the input field\r\n this.guestDetailsForm = this.fb.group({\r\n primaryGuest: this.components.first.form,\r\n // secondaryContactList: ''\r\n })\r\n }\r\n if (this.guestDetailsForm) {\r\n if (this.gs.additionalGuestPage && this.gs.operation != operationType.edit) {\r\n this.components.first.form.controls.firstName.patchValue('');\r\n this.components.first.form.controls.lastName.patchValue('')\r\n this.components.first.form.controls.phone.patchValue(this.gs.primaryContact.PhoneNumber);\r\n this.components.first.form.controls.email.patchValue(this.gs.primaryContact.EmailAddress);\r\n this.primaryGuestPhone = this.gs.primaryContact.PhoneNumber;\r\n this.primaryGuestEmail = this.gs.primaryContact.EmailAddress;\r\n }\r\n else if (!this.gs.additionalGuestPage && this.gs.operation == operationType.edit) {\r\n this.primaryGuestPhone = this.guestDetailsForm.get('primaryGuest').value.phone;\r\n this.primaryGuestEmail = this.guestDetailsForm.get('primaryGuest').value.email;\r\n this.components.first.form.patchValue(this.guestDetailsForm.get('primaryGuest').value);\r\n this.bindPreferencesCategoryToForm(this.components.first.form, this.gs.primaryContact);\r\n if (this.gs.secondaryContactList && this.gs.secondaryContactList.length > 0) {\r\n this.components.toArray().forEach((formData, index) => {\r\n if (index > 0) {\r\n this.bindContactsToForm(formData.form, this.gs.secondaryContactList[index - 1]);\r\n let fc = new FormControl(this.gs.secondaryContactList[index - 1].Id);\r\n formData.form.addControl(\"id\", fc);\r\n }\r\n });\r\n let secondaryContactList = this.buildSecondaryContactList();\r\n (this.guestDetailsForm as FormGroup).addControl('secondaryContactList', this.fb.array(secondaryContactList.map(contact => this.fb.group(contact))));\r\n }\r\n }\r\n else if (!this.gs.additionalGuestPage && this.gs.operation != operationType.edit) {\r\n this.components.first.form.patchValue(this.guestDetailsForm.get('primaryGuest').value)\r\n this.components.first.form.controls[\"agreeTerms\"].setValue(false, { emitEvent: false });\r\n if (this.components.first.form.controls[\"dataRetention\"]) {\r\n this.components.first.form.controls[\"dataRetention\"].setValue(false, { emitEvent: false });\r\n }\r\n if (this.gs.restaurantWidgetSettings$.value.WidgetCustomization.CustomTermsOfService && this.gs.restaurantWidgetSettings$.value.WidgetCustomization.CustomTermsOfService.length > 0) {\r\n this.gs.restaurantWidgetSettings$.value.WidgetCustomization.CustomTermsOfService.forEach((customTerm, index) => {\r\n this.components.first.form.controls['customTerm_' + index].setValue(false, { emitEvent: false });\r\n });\r\n }\r\n }\r\n }\r\n else {\r\n if (this.gs.operation == operationType.edit && !this.gs.additionalGuestPage) {\r\n this.components.toArray().forEach((formData, index) => {\r\n if (index == 0) {\r\n this.bindContactsToForm(formData.form, this.gs.primaryContact)\r\n }\r\n else {\r\n this.bindContactsToForm(formData.form, this.gs.secondaryContactList[index - 1]);\r\n let fc = new FormControl(this.gs.secondaryContactList[index - 1].Id);\r\n formData.form.addControl(\"id\", fc);\r\n }\r\n });\r\n\r\n this.primaryGuestPhone = this.components.first.form.value.phone;\r\n this.primaryGuestEmail = this.components.first.form.value.email;\r\n }\r\n //this.bindSecondaryContactsToForm();\r\n //this.gs.reservationFormGroup.addControl('guestDetailsForm', this.guestDetailsForm);\r\n let secondaryContactList = this.buildSecondaryContactList();\r\n (this.guestDetailsForm as FormGroup).addControl('secondaryContactList', this.fb.array(secondaryContactList.map(contact => this.fb.group(contact))));\r\n }\r\n\r\n this.subscriptions.add(this.guestDetailsForm.valueChanges.subscribe(data => {\r\n this.confirmButton.disbaledproperity = this.guestDetailsForm.invalid || !this.isUserAllowedToclickConfirm || !this.checkCustomTermsAndMessageOptionValidation();\r\n this.addToButton.disbaledproperity = this.guestDetailsForm.invalid || !this.isUserAllowedToclickConfirm || !this.checkCustomTermsAndMessageOptionValidation() ;\r\n this.bookBtn.disbaledproperity = this.guestDetailsForm.invalid || !this.checkCustomTermsAndMessageOptionValidation();\r\n }));\r\n this.components.forEach(dynamicForm => {\r\n dynamicForm.form.valueChanges.subscribe(data => {\r\n dynamicForm.form.controls.firstName.setValue(dynamicForm.form.controls.firstName.value ? this.titleCasePipe.transform(dynamicForm.form.controls.firstName.value) : dynamicForm.form.controls.firstName.value, { emitEvent: false });\r\n dynamicForm.form.controls.lastName.setValue(dynamicForm.form.controls.lastName.value ? this.titleCasePipe.transform(dynamicForm.form.controls.lastName.value) : dynamicForm.form.controls.lastName.value, { emitEvent: false });\r\n this.confirmButton.disbaledproperity = dynamicForm.form.invalid || !this.isUserAllowedToclickConfirm || !this.checkCustomTermsAndMessageOptionValidation();\r\n this.addToButton.disbaledproperity = this.guestDetailsForm.invalid || !this.isUserAllowedToclickConfirm || !this.checkCustomTermsAndMessageOptionValidation();\r\n this.bookBtn.disbaledproperity = this.guestDetailsForm.invalid || !this.checkCustomTermsAndMessageOptionValidation();\r\n })\r\n });\r\n this.components.forEach(dynamicForm => {\r\n dynamicForm.form.valueChanges.subscribe(data => {\r\n dynamicForm.form.controls.firstName.setValue(dynamicForm.form.controls.firstName.value ? this.titleCasePipe.transform(dynamicForm.form.controls.firstName.value) : dynamicForm.form.controls.firstName.value, { emitEvent: false });\r\n dynamicForm.form.controls.lastName.setValue(dynamicForm.form.controls.lastName.value ? this.titleCasePipe.transform(dynamicForm.form.controls.lastName.value) : dynamicForm.form.controls.lastName.value, { emitEvent: false });\r\n this.confirmButton.disbaledproperity = dynamicForm.form.invalid || !this.isUserAllowedToclickConfirm || !this.checkCustomTermsAndMessageOptionValidation();\r\n })\r\n })\r\n\r\n }\r\n\r\n getCountryCode(code) {\r\n let country = this.countryCodes.find(country => country.CountryPhoneCode === code);\r\n country ? country.Id : code;\r\n }\r\n\r\n termsOfUse() {\r\n this.gs.nextButton.next(componentName.terms_of_use)\r\n }\r\n\r\n addToCartData() {\r\n const cartObj = this.buildReservationRequest(true, true);\r\n this.cartEvents = { isAdd: true };\r\n this.gs.validateCart(cartObj).subscribe(data => {\r\n if (data.ValidationMessages.length) {\r\n //this.openConfirmationDialog(data, data.ValidationMessages[0].Message,);\r\n }\r\n else {\r\n this.addtoCartDataSuccessHandler(cartObj);\r\n }\r\n })\r\n \r\n }\r\n\r\n addtoCartDataSuccessHandler(cartObj?: any) {\r\n this.cartEvents = null;\r\n if(!cartObj) cartObj = this.buildReservationRequest(true, true);\r\n this.addToCart(cartObj);\r\n this.unlockSessions();\r\n this.gs.bookingSection$.next(BookingActivity.ClassBooking);\r\n this.gs.TabChange$.next(ActivityTabs.BookingSelection);\r\n this.gs.setMessageState(this.ts.instant('addedToCartSuccessfully'), 1);\r\n const crypto = window.crypto;\r\n var array = new Uint32Array(1);\r\n this.gs.CartBookingList$.next(crypto.getRandomValues(array));\r\n }\r\n\r\n addToCart(request) {\r\n request = Object.assign(request, this.gs.SaveBookingObj);\r\n let cartObj = JSON.parse(sessionStorage.getItem('CartList'));\r\n if (cartObj && cartObj.length) {\r\n cartObj.push(request);\r\n } else {\r\n cartObj = [];\r\n cartObj.push(request);\r\n }\r\n sessionStorage.setItem('CartList', JSON.stringify(cartObj));\r\n }\r\n\r\n\r\n goBackToReservation() {\r\n this.resetPaymentInfo();\r\n this.gs.setMessageState('', 0);\r\n this.unlockSessions();\r\n if (this.gs.bookingSection$.value === BookingActivity.OpenBooking) {\r\n this.gs.TabChange$.next(ActivityTabs.BookingSelection);\r\n } else if (this.gs.bookingSection$.value === BookingActivity.ClassBooking) {\r\n this.gs.TabChange$.next(ActivityTabs.ActivitySelection);\r\n } else {\r\n this.gs.TabChange$.next(ActivityTabs.PrivateLesson);\r\n }\r\n }\r\n\r\n unlockSessions() {\r\n if (this.gs.bookingSection$.value === BookingActivity.ClassBooking && this.gs.lockResult && this.gs.lockResult.SlotLockIdDTO) {\r\n this.gs.unlockSessionsUrl(this.gs.lockResult.SlotLockIdDTO.Id).subscribe(data => {\r\n this.gs.lockResult = null;\r\n this.gs.offTimer();\r\n });\r\n } else if (this.gs.lockMultipleResult) {\r\n const lockData = Object.values(this.gs.lockMultipleResult) as SlotLockResultDTO[];\r\n const LockIds = lockData.map(x => x?.SlotLockIdDTO?.Id);\r\n this.gs.releaseMultiple(LockIds).subscribe(data => {\r\n this.gs.lockMultipleResult = null;\r\n this.gs.offTimer();\r\n });\r\n }\r\n }\r\n\r\n reservationConfirm(isOverlapBooking: boolean = false) {\r\n this.gs.setMessageState('', 0);\r\n /* if (this.gs.additionalGuestPage) {\r\n this.createSecondaryContacts();\r\n }\r\n else */\r\n this.gs.isOverlapErrorFromValidateCartApi = false;\r\n let partyDtoRequired = this.buildReservationRequest(true);\r\n if (this.gs.operation == operationType.edit && this.gs.editPartyData$.value) {\r\n if (!this.isPartySizeMatchSecondaryContactList()) {\r\n this.gs.setMessageState(this.ts.instant('partySizeMisMatchError'), 0);\r\n return;\r\n }\r\n let secondaryContactList = this.buildSecondaryContactList();\r\n (this.guestDetailsForm as FormGroup).addControl('secondaryContactList', this.fb.array(secondaryContactList.map(contact => this.fb.group(contact))));\r\n if (this.isAuthRefund) {\r\n partyDtoRequired.refundData = this.gs.refundData;\r\n }\r\n this.updateReservation(partyDtoRequired, isOverlapBooking);\r\n } else {\r\n this.CreateReservation(partyDtoRequired, isOverlapBooking);\r\n }\r\n }\r\n getSeatSelection() {\r\n this.guestDetailsForm.reset();\r\n }\r\n trackByGuest(guest: any): number {\r\n return guest;\r\n }\r\n\r\n UpdateCart() {\r\n let cartObj = this.buildReservationRequest(true, true);\r\n this.cartEvents = { isUpdate: true };\r\n this.gs.validateCart(cartObj).subscribe(data => {\r\n if (data.ValidationMessages.length) {\r\n //this.openConfirmationDialog(data, data.ValidationMessages[0].Message,);\r\n }\r\n else {\r\n this.updateCartSuccessHandler(cartObj);\r\n }\r\n })\r\n }\r\n\r\n updateCartSuccessHandler(cartObj?: any) {\r\n this.cartEvents = null;\r\n if(!cartObj) cartObj = this.buildReservationRequest(true, true);\r\n \r\n cartObj = Object.assign(cartObj, this.gs.SaveBookingObj)\r\n this.gs.CartBookingList$.next(cartObj);\r\n let CartList = JSON.parse(sessionStorage.getItem('CartList'));\r\n CartList[this.gs.selectedCartIndex] = cartObj;\r\n sessionStorage.setItem('CartList', JSON.stringify(CartList));\r\n this.gs.TabChange$.next(ActivityTabs.CartDetails);\r\n this.gs.editFromCart = false;\r\n this.unlockSessions();\r\n }\r\n\r\n\r\n additionalGuest() {\r\n this.guestData.push({ name: this.ts.instant('secondaryGuest') + (this.guestData.length + 1), isNew: true });\r\n this.SaveGuestbtn.disbaledproperity = true;\r\n setTimeout(() => {\r\n this.components.last.form.controls.firstName.setValue('');\r\n this.components.last.form.controls.lastName.setValue('');\r\n this.components.forEach(queryForm => {\r\n queryForm.form.valueChanges.subscribe(data => {\r\n queryForm.form.controls.firstName.setValue(queryForm.form.controls.firstName.value ? this.titleCasePipe.transform(queryForm.form.controls.firstName.value) : queryForm.form.controls.firstName.value, { emitEvent: false });\r\n queryForm.form.controls.lastName.setValue(queryForm.form.controls.lastName.value ? this.titleCasePipe.transform(queryForm.form.controls.lastName.value) : queryForm.form.controls.lastName.value, { emitEvent: false });\r\n this.SaveGuestbtn.disbaledproperity = queryForm.form.invalid || !this.isUserAllowedToclickConfirm || !this.checkCustomTermsAndMessageOptionValidation();\r\n });\r\n if (!queryForm.form.controls.phone.touched && !queryForm.form.controls.phone.touched) {\r\n queryForm.form.controls.phone.patchValue(this.primaryGuestPhone, { emitEvent: false });\r\n }\r\n if (!queryForm.form.controls.email.touched && !queryForm.form.controls.email.value) {\r\n queryForm.form.controls.email.patchValue(this.primaryGuestEmail, { emitEvent: false });\r\n }\r\n })\r\n this.subscribeMemberConfig();\r\n }, 250);\r\n\r\n }\r\n\r\n subscribeMemberConfig() {\r\n this.memberForm.forEach((formObj, index) => {\r\n formObj.form.valueChanges.subscribe(value => {\r\n if (value.MembershipId && value.MembershipId.length === 16) {\r\n this.gs.getContactFromEngagebyCardno(value.MembershipId).subscribe(({ Payload: response }) => {\r\n var srcForm = this.components[\"_results\"][index + (this.gs.additionalGuestPage ? 0 : 1)];\r\n let country = this.countryCodes.find(country => country.CountryPhoneCode === response.PhoneCode);\r\n srcForm.form.controls.firstName.setValue(response.FName, { emitEvent: false });\r\n srcForm.form.controls.lastName.setValue(response.LName, { emitEvent: false });\r\n srcForm.form.controls.phone.setValue(response.PhoneNumber, { emitEvent: false });\r\n srcForm.form.controls.email.setValue(response.Email, { emitEvent: false });\r\n if(this.guestInfoConfigSecondary){\r\n this.guestInfoConfigSecondary[2].value = country.Id;\r\n }else if(this.guestInfoConfig){\r\n this.guestInfoConfig[2].value = country.Id;\r\n }\r\n })\r\n }\r\n })\r\n });\r\n }\r\n\r\n\r\n bindContactsToForm(form, contact) {\r\n form.controls.firstName.setValue(contact.FirstName);\r\n form.controls.lastName.setValue(contact.LastName);\r\n form.controls.phone.setValue(contact.PhoneNumber);\r\n form.controls.email.setValue(contact.EmailAddress);\r\n this.bindPreferencesCategoryToForm(form, contact);\r\n }\r\n\r\n bindPreferencesCategoryToForm(form, contact) {\r\n let contactNotes = {};\r\n if (contact.Notes && contact.Notes.length > 0) {\r\n contact.Notes.forEach(note => {\r\n contactNotes[note.RelatedId] = true;\r\n if (this.freeTextIdList && this.freeTextIdList.length > 0 && this.freeTextIdList.findIndex(Id => Id == note.RelatedId) > -1 && note.Text) {\r\n form.controls[note.RelatedId.toString()].setValue(note.Text);\r\n }\r\n })\r\n }\r\n if (this.gs.restaurantWidgetSettings$.value.PreferencesCategories && this.gs.restaurantWidgetSettings$.value.PreferencesCategories.length > 0) {\r\n this.gs.restaurantWidgetSettings$.value.PreferencesCategories.filter(x => x.Text !== 'Reasons').forEach(category => {\r\n if (form.controls['preferences_' + category.Id.toString()]) {\r\n form.controls['preferences_' + category.Id.toString()].patchValue([contactNotes]);\r\n }\r\n });\r\n }\r\n }\r\n\r\n resetPaymentInfo() {\r\n this.gs.ispaymentInvolvedInfo = null;\r\n this.gs.reservationAttemptInfo = null;\r\n }\r\n\r\n GetPreliminaryReservationInformation() {\r\n //this.gs.GetPreliminaryReservationInformation(this.gs.SessionBookingObj.ActivityId).subscribe(data => {\r\n //if (data) {\r\n //this.RegisterReservationAttempt();\r\n //this.gs.ispaymentInvolvedInfo = data;\r\n if (this.partyDetails?.specialMeal?.WaiverFormCode || this.gs.SelectedActivity$.value?.WaiverFormCode || (this.gs.restaurantWidgetSettings$.value.DefaultWaiverForm && this.gs.restaurantWidgetSettings$.value.DefaultWaiverForm.Applied)) {\r\n this.isUserAllowedToclickConfirm = false;\r\n this.LoadGuestWaiverForm(this.partyDetails?.specialMeal?.WaiverFormCode ? this.partyDetails?.specialMeal?.WaiverFormCode : this.gs.SelectedActivity$.value?.WaiverFormCode ? this.gs.SelectedActivity$.value?.WaiverFormCode : this.gs.restaurantWidgetSettings$.value.DefaultWaiverForm.FormCode) // disable confirm button\r\n this.addToButton.disbaledproperity = true;\r\n }\r\n else {\r\n //this.addToButton.disbaledproperity = false;\r\n //if (this.gs.ispaymentInvolvedInfo.CreditCardRequired) {\r\n this.isUserAllowedToclickConfirm = false;\r\n this.RegisterReservationAttempt(true) // diable confirm button\r\n //}\r\n //else {\r\n //this.isUserAllowedToclickConfirm = true; //No payement no waiver form ,guest can create Reservation\r\n //}\r\n }\r\n\r\n //}\r\n\r\n // else {\r\n // this.isUserAllowedToclickConfirm = false;//Some Error While Processing\r\n // }\r\n\r\n //});\r\n }\r\n\r\n getOpenbookingSlotwithIds() {\r\n return this.paymentData?.Slots?.map(data => {\r\n return {\r\n ReservationAttemptId: data.ReservationAttemptId,\r\n SlotTime: data.LocalTime\r\n }\r\n })\r\n }\r\n\r\n buildReservationRequest(isBookingApiRequest: boolean = false, isValidateCartApi: boolean = false) {\r\n this.gs.SaveBookingObj.Contact = {\r\n FirstName: this.guestDetailsForm.value.primaryGuest.firstName,\r\n LastName: this.guestDetailsForm.value.primaryGuest.lastName,\r\n EmailAddress: this.guestDetailsForm.value.primaryGuest.email,\r\n PhoneNumber: this.guestDetailsForm.value.primaryGuest.phone,\r\n PIILastUsedDate: moment(new Date()).format('YYYY-MM-DDTHH:mm:ss'),\r\n ContactCustomFields: this.getCustomGuestFieldsValue(),\r\n CountryId: this.gs.selectedCountryId, // map country code\r\n Notes: this.getCategoryPreferencesNotes(this.guestDetailsForm.value.primaryGuest),\r\n MarketingOptedIn: this.guestDetailsForm.value.primaryGuest.marketingFlag ? this.guestDetailsForm.value.primaryGuest.marketingFlag : (this.gs.operation == operationType.edit && (!this.gs.restaurantWidgetSettings$.value.MarketingFlagEnabled || !this.gs.restaurantWidgetSettings$.value.MarketingFlagDescription) && this.gs.editPartyData$.value.Contact.MarketingOptedIn) ? this.gs.editPartyData$.value.Contact.MarketingOptedIn : null,\r\n TrackMembershipNumber: this.gs.selectedGuest?.TrackMembershipNumber,\r\n memberShipId: this.gs.selectedGuest?.memberShipId,\r\n MemberType: this.gs.selectedGuest?.MembershipType,\r\n IsMemberActive: this.gs.selectedGuest?.MemberActive\r\n };\r\n const bookingData = this.gs.SaveBookingObj;\r\n\r\n let partyDTO: any = {\r\n Id: this.gs.operation == operationType.edit ? this.gs.editPartyData$.value.Id : null,\r\n Size: bookingData.Size,\r\n RemindAboutVisit: this.gs.restaurantWidgetSettings$.value.IsSmsReminderSupported ? this.gs.restaurantWidgetSettings$.value.WidgetCustomization.IsReservationReminderMandatory ? true : this.guestDetailsForm.value.primaryGuest['RemindBySMS'] : false,// get Value froom form\r\n RemindAboutVisitEmail: this.guestDetailsForm.value.primaryGuest['RemindByEmail'],//\r\n AgreedWithTermsOfUse: true,\r\n Contact: bookingData.Contact,\r\n BookingTypes: this.getBookingTypes(),\r\n CoverTypes: this.getCoverTypes(),\r\n Slot: bookingData.Slot,\r\n Slots: bookingData.Slots,\r\n Sessions: bookingData.Sessions,\r\n PartyId: this.gs.operation == operationType.edit ? this.gs.editPartyData$.value.Id : null,\r\n BookingId: this.gs.operation == operationType.edit ? this.gs.editPartyData$.value.BookingId : null,\r\n SpecialMealId: this.gs.operation == operationType.create ? bookingData.SpecialMealId : bookingData.SpecialMealId,\r\n ConfirmationMessageOption: this.getConfirmationMessageOption(),\r\n TableIds: bookingData.TableIds,\r\n InstructorIds: bookingData.StaffId,\r\n Notes: this.getNotes(),\r\n IsCommunalTable: false,\r\n FromWebsite: true,\r\n Language: this.gs.language, // get language id\r\n ReservationAttemptId: this.gs.reservationAttemptInfo && this.gs.reservationAttemptInfo.ReservationAttemptId ? this.gs.reservationAttemptInfo.ReservationAttemptId : null,\r\n WaiverFormTransactionId: this.waiverFormTrancationId ? this.waiverFormTrancationId : (this.gs.operation == operationType.edit && this.gs.editPartyData$.value.WaiverFormTransactionId) ? this.gs.editPartyData$.value.WaiverFormTransactionId : null,\r\n BookingBehavior: this.gs.bookingSection$.value,\r\n StartDate: bookingData.StartDate,\r\n EndDate: bookingData.EndDate,\r\n ReservationAttemptIdWithSlotDTOList: this.gs.bookingSection$.value !== BookingActivity.ClassBooking ? this.getOpenbookingSlotwithIds() : [],\r\n BookingContacts: this.gs.operation == operationType.edit ? this.buildSecondaryContactList() : null,\r\n IsForStandbyReservations: this.gs.selectedSpecialMeal?.IsForStandbyReservations || null,\r\n isBookingApiRequest: (isBookingApiRequest || this.gs.bShowOverbookingErrorDialog),\r\n isValidateCartApi\r\n };\r\n if (!this.gs.bookingSection$.value && this.gs.operation === operationType.edit) {\r\n partyDTO.Slot = bookingData.Slots[0];\r\n partyDTO.Slots = null;\r\n }\r\n if(this.gs.SelectedActivity$ && this.gs.SelectedActivity$.value && this.gs.SelectedActivity$.value.ImageData){\r\n partyDTO.bannerImage = this.gs.SelectedActivity$.value.ImageData\r\n }\r\n // !this.gs.bookingSection$.value && this.gs.operation === operationType.edit ? bookingData.Slots : bookingData.Slot,\r\n // let partyDTO: any = {\r\n // Id: this.gs.operation == operationType.edit ? this.gs.editPartyData$.value.Id : null,\r\n // Size: this.partyDetails.partySize,\r\n // RemindAboutVisit: this.gs.restaurantWidgetSettings$.value.IsSmsReminderSupported ? this.gs.restaurantWidgetSettings$.value.WidgetCustomization.IsReservationReminderMandatory ? true : this.guestDetailsForm.value.primaryGuest['reservationBySMS'] : false,// get Value froom form\r\n // RemindAboutVisitEmail: this.guestDetailsForm.value.primaryGuest['reservationByEmail'],//\r\n // AgreedWithTermsOfUse: true,\r\n // Contact: {\r\n // FirstName: this.guestDetailsForm.value.primaryGuest.firstName,\r\n // LastName: this.guestDetailsForm.value.primaryGuest.lastName,\r\n // EmailAddress: this.guestDetailsForm.value.primaryGuest.email,\r\n // PhoneNumber: this.guestDetailsForm.value.primaryGuest.phone,\r\n // PIILastUsedDate: moment(new Date()).format('YYYY-MM-DDTHH:mm:ss'),\r\n // ContactCustomFields: this.getCustomGuestFieldsValue(),\r\n // CountryId: this.gs.selectedCountryId, // map country code\r\n // Notes: this.getCategoryPreferencesNotes(this.guestDetailsForm.value.primaryGuest),\r\n // MarketingOptedIn: this.guestDetailsForm.value.primaryGuest.marketingFlag ? this.guestDetailsForm.value.primaryGuest.marketingFlag : (this.gs.operation == operationType.edit && (!this.gs.restaurantWidgetSettings$.value.MarketingFlagEnabled || !this.gs.restaurantWidgetSettings$.value.WidgetCustomization.MarketingFlagDescription) && this.gs.editPartyData$.value.Contact.MarketingOptedIn) ? this.gs.editPartyData$.value.Contact.MarketingOptedIn : null\r\n // },\r\n // Slot: {\r\n // Time: moment(this.partyDetails.reservationTime).format('YYYY-MM-DDTHH:mm:ss'),\r\n // LockId: this.gs.lockResult.SlotLockIdDTO.Id,\r\n // Type: 4 //\"AutodetectSlot\"\r\n // },\r\n // PartyId: this.gs.operation == operationType.edit ? this.gs.editPartyData$.value.Id : null,\r\n // SeatingAreaId: this.partyDetails.seatingArea.id > 0 ? this.partyDetails.seatingArea.id : null,\r\n // SpecialMealId: this.partyDetails.specialMeal.Id,\r\n // SeatingTypeId: this.partyDetails.seatingType.id > 0 ? this.partyDetails.seatingType.id : null,\r\n // ConfirmationMessageOption: this.getConfirmationMessageOption(),\r\n // Notes: this.getNotes(),\r\n // TableIds: this.partyDetails.tableId && this.partyDetails.tableId.length > 0 ? this.partyDetails.tableId : [],\r\n // CoverTypes: this.getCoverTypes(),//Bind Cover types\r\n // IsCommunalTable: this.partyDetails.communalAvailability,\r\n // FromWebsite: true,\r\n // Language: this.gs.language, // get language id\r\n // ReservationAttemptId: this.gs.reservationAttemptInfo && this.gs.reservationAttemptInfo.ReservationAttemptId ? this.gs.reservationAttemptInfo.ReservationAttemptId : null,\r\n // waiverFormTransactionId: this.waiverFormTrancationId ? this.waiverFormTrancationId : (this.gs.operation == operationType.edit && this.gs.editPartyData$.value.WaiverFormTransactionId) ? this.gs.editPartyData$.value.WaiverFormTransactionId : null,\r\n // BookingContacts: this.gs.operation ==operationType.edit ? this.buildSecondaryContactList() : null\r\n // };\r\n\r\n if ((this.gs.operation != operationType.edit || this.gs.editFromCart) && this.guestDetailsForm.value.primaryGuest.dataRetention) {\r\n partyDTO.Contact.ConsentDate = moment(new Date()).format('YYYY-MM-DDTHH:mm:ss');\r\n partyDTO.Contact.ConsentPolicyId = this.gs.dataRetentionPolicy$.value.Id;\r\n }\r\n\r\n if(this.gs.SaveBookingObj && this.waiverFormTrancationId){\r\n this.gs.SaveBookingObj.WaiverFormTransactionId = this.waiverFormTrancationId ? this.waiverFormTrancationId : (this.gs.operation == operationType.edit && this.gs.editPartyData$.value.WaiverFormTransactionId) ? this.gs.editPartyData$.value.WaiverFormTransactionId : null;\r\n }\r\n\r\n return partyDTO;\r\n }\r\n\r\n getCategoryPreferencesNotes(formValue) {\r\n let contactNotes = [];\r\n if (this.gs.restaurantWidgetSettings$.value.PreferencesCategories && this.gs.restaurantWidgetSettings$.value.PreferencesCategories.length > 0) {\r\n this.gs.restaurantWidgetSettings$.value.PreferencesCategories.filter(x => x.Text !== 'Reasons').forEach(category => {\r\n let predefinedNotes = []\r\n if (formValue['preferences_' + category.Id.toString()]) {\r\n let userSelectedPredefinedNotesList = formValue['preferences_' + category.Id.toString()][0];\r\n category.SubCategories && category.SubCategories.length > 0 ? category.SubCategories.map(x => {\r\n if (x.PredefinedContactNote && x.PredefinedContactNote.length > 0) {\r\n x.PredefinedContactNote.forEach(note => {\r\n predefinedNotes.push(note)\r\n });\r\n }\r\n }) : [];\r\n if (predefinedNotes && predefinedNotes.length > 0) {\r\n let existingContactNoteId;\r\n predefinedNotes.forEach(note => {\r\n if (this.gs.operation == operationType.edit && this.gs.editPartyData$.value.Contact.Notes && this.gs.editPartyData$.value.Contact.Notes.length > 0) {\r\n existingContactNoteId = this.gs.editPartyData$.value.Contact.Notes.filter(x => x.RelatedId == note.Id)[0];\r\n }\r\n if (userSelectedPredefinedNotesList[note.Id.toString()]) {\r\n contactNotes.push({\r\n RelatedId: note.Id,\r\n Text: note.Text,\r\n Id: existingContactNoteId && existingContactNoteId.Id ? existingContactNoteId.Id : null\r\n });\r\n }\r\n })\r\n }\r\n }\r\n })\r\n\r\n if (this.freeTextIdList && this.freeTextIdList.length > 0) {\r\n this.freeTextIdList.forEach(freeTextId => {\r\n let existingContactNoteId: any = this.gs.operation == operationType.edit && this.gs.editPartyData$.value.Contact.Notes && this.gs.editPartyData$.value.Contact.Notes.length > 0 ? this.gs.editPartyData$.value.Contact.Notes.filter(x => x.RelatedId == freeTextId)[0] : '';\r\n if (formValue[freeTextId.toString()]) {\r\n contactNotes.push({\r\n RelatedId: freeTextId,\r\n Text: formValue[freeTextId.toString()],\r\n Id: existingContactNoteId && existingContactNoteId.Id ? existingContactNoteId.Id : null\r\n });\r\n }\r\n });\r\n }\r\n\r\n }\r\n return contactNotes;\r\n }\r\n\r\n getNotes() {\r\n let notes = [];\r\n //Map Promocode Value\r\n let promoCodeValue = '';\r\n promoCodeValue = this.guestDetailsForm.value.primaryGuest.promocode;\r\n if (promoCodeValue) {\r\n let promoCode = { Type: 3, Text: promoCodeValue };\r\n notes.push(promoCode);\r\n }\r\n\r\n return notes;\r\n }\r\n\r\n getConfirmationMessageOption() {\r\n if (this.gs.restaurantWidgetSettings$.value.ConfirmationVia == ConfirmationVia.Both) {\r\n if (this.guestDetailsForm.value.primaryGuest['reservationConfirmationByEmail']\r\n && this.guestDetailsForm.value.primaryGuest['reservationConfirmationBySMS']) {\r\n return ConfirmationVia.Both;\r\n }\r\n else if (this.guestDetailsForm.value.primaryGuest['reservationConfirmationByEmail']) {\r\n return ConfirmationVia.Email;\r\n }\r\n else if (this.guestDetailsForm.value.primaryGuest['reservationConfirmationBySMS']) {\r\n return ConfirmationVia.Sms;\r\n }\r\n else {\r\n return this.gs.restaurantWidgetSettings$.value.ConfirmationVia;\r\n }\r\n }\r\n else {\r\n return this.gs.restaurantWidgetSettings$.value.ConfirmationVia;\r\n }\r\n }\r\n\r\n getContactNotes() {\r\n return [];\r\n }\r\n getCustomGuestFieldsValue() {\r\n let CustomFieldsList: CustomFieldsDTO[] = [];\r\n if (this.gs.customGuestFields && this.gs.customGuestFields.CustomGuestField.length > 0) {\r\n this.gs.customGuestFields.CustomGuestField.forEach(field => {\r\n if (this.guestDetailsForm.value.primaryGuest['customGuestField_' + field.Id.toString()] != null) {\r\n let customField = new CustomFieldsDTO();\r\n customField.CustomFieldId = Number(field.Id);\r\n customField.CustomFieldValue = this.guestDetailsForm.value.primaryGuest['customGuestField_' + field.Id.toString()];\r\n customField.CustomFieldName = field.FieldName;\r\n CustomFieldsList.push(customField);\r\n }\r\n })\r\n }\r\n return CustomFieldsList;\r\n }\r\n\r\n getCoverTypes(): any {\r\n // let coverTypesList: CoverTypeQuantityDTO[] = [];\r\n // if (this.gs.reservationFormGroup.controls.reservationDetailsForm.value.specialMeal &&\r\n // this.gs.reservationFormGroup.controls.reservationDetailsForm.value.coverTypes &&\r\n // this.gs.reservationFormGroup.controls.reservationDetailsForm.value.specialMeal.CoverTypePrices) {\r\n // this.gs.reservationFormGroup.controls.reservationDetailsForm.value.specialMeal.CoverTypePrices.forEach(coverType => {\r\n // let coverTypeDto = new CoverTypeQuantityDTO();\r\n // coverTypeDto.CoverTypeId = coverType.Id;\r\n // coverTypeDto.CoverTypeName = coverType.CoverTypeName;\r\n // coverTypeDto.Covers = this.gs.reservationFormGroup.controls.reservationDetailsForm.value.coverTypes[coverType.Id.toString()]\r\n // coverTypesList.push(coverTypeDto);\r\n // });\r\n // }\r\n // return coverTypesList;\r\n return this.gs.SaveBookingObj?.CoverTypes;\r\n }\r\n\r\n getBookingTypes(): any {\r\n\r\n return this.gs.SaveBookingObj?.BookingTypes;\r\n }\r\n\r\n updateReservation(partyDto, isOverlapBooking: boolean = false) {\r\n this.gs.updateSessionBooking(partyDto, isOverlapBooking).subscribe(data => {\r\n if (data) {\r\n this.completeReservation(false);\r\n if (this.gs.bookingSection$.value) {\r\n let partyType = this.gs.selectedSpecialMeal ? this.gs.selectedSpecialMeal.IsForStandbyReservations ? PartyType[2] : PartyType[0] : '';\r\n\r\n this.gs.getByToken(data.Token, '', partyType).subscribe(data => {\r\n this.gs.editPartyData$.next(data);\r\n });\r\n } else {\r\n let PartiesData: any;\r\n if (data.BookingId) {\r\n this.gs.getByToken('', data.BookingId).subscribe(party => {\r\n if (Array.isArray(party)) {\r\n PartiesData = party;\r\n }\r\n else {\r\n PartiesData = [];\r\n PartiesData.push(party)\r\n }\r\n this.gs.bookingPartiesData$.next(PartiesData);\r\n });\r\n } else {\r\n let partyType = this.gs.selectedSpecialMeal ? this.gs.selectedSpecialMeal.IsForStandbyReservations ? PartyType[2] : PartyType[0] : '';\r\n this.gs.getByToken(data.Token, '', partyType).subscribe(data => {\r\n PartiesData = [];\r\n PartiesData.push(data)\r\n this.gs.bookingPartiesData$.next(PartiesData);\r\n });\r\n }\r\n }\r\n\r\n }\r\n });\r\n }\r\n\r\n CreateReservation(partyDto, isOverlapBooking: boolean = false) {\r\n //have to check\r\n // this.gs.SaveBookingObj.Contact = {\r\n // FirstName: this.guestDetailsForm.value.primaryGuest.firstName,\r\n // LastName: this.guestDetailsForm.value.primaryGuest.lastName,\r\n // EmailAddress: this.guestDetailsForm.value.primaryGuest.email,\r\n // PhoneNumber: this.guestDetailsForm.value.primaryGuest.phone,\r\n // PIILastUsedDate: moment(new Date()).format('YYYY-MM-DDTHH:mm:ss'),\r\n // ContactCustomFields: this.getCustomGuestFieldsValue(),\r\n // CountryId: this.gs.selectedCountryId, // map country code\r\n // Notes: this.getCategoryPreferencesNotes(this.guestDetailsForm.value.primaryGuest),\r\n // MarketingOptedIn: this.guestDetailsForm.value.primaryGuest.marketingFlag ? this.guestDetailsForm.value.primaryGuest.marketingFlag : (this.gs.operation == operationType.edit && (!this.gs.restaurantWidgetSettings$.value.MarketingFlagEnabled || !this.gs.restaurantWidgetSettings$.value.WidgetCustomization.MarketingFlagDescription) && this.gs.editPartyData$.value.Contact.MarketingOptedIn) ? this.gs.editPartyData$.value.Contact.MarketingOptedIn : null\r\n // }\r\n //this.gs.TabChange$.next(4);\r\n\r\n this.gs.createSessionBooking(partyDto, isOverlapBooking).subscribe(data => {\r\n if (data) {\r\n this.gs.createActivityResponse$.next(data);\r\n this.gs.primaryContact = partyDto.Contact;\r\n this.completeReservation(true);\r\n let partyType = this.gs.selectedSpecialMeal ? this.gs.selectedSpecialMeal.IsForStandbyReservations ? PartyType[2] : PartyType[0] : '';\r\n if (this.gs.bookingSection$.value === BookingActivity.ClassBooking) {\r\n this.gs.getByToken(data.Token, '', partyType).subscribe(data => {\r\n this.gs.editPartyData$.next(data);\r\n });\r\n } else {\r\n let PartiesData: any;\r\n const responseTimeSlots: any = Object.values(data.NewParties);\r\n if (responseTimeSlots.length > 1) {\r\n this.gs.getByToken('', responseTimeSlots[0].BookingId, partyType).subscribe(party => {\r\n if (Array.isArray(party)) {\r\n PartiesData = party;\r\n }\r\n else {\r\n PartiesData = [];\r\n PartiesData.push(party)\r\n }\r\n this.gs.editPartyData$.next(PartiesData[0]);\r\n this.gs.bookingPartiesData$.next(PartiesData);\r\n });\r\n } else {\r\n this.gs.getByToken(responseTimeSlots[0].Token, '', partyType).subscribe(data => {\r\n PartiesData = [];\r\n PartiesData.push(data)\r\n this.gs.editPartyData$.next(data);\r\n this.gs.bookingPartiesData$.next(PartiesData);\r\n });\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n completeReservation(data) {\r\n this.gs.offTimer();\r\n this.gs.TabChange$.next(ActivityTabs.ConfirmationSummary);\r\n if (data) {\r\n this.gs.additionalGuestRequired = this.gs.SaveBookingObj.Size;\r\n this.gs.setAdditionalGuest(this.gs.additionalGuestRequired);\r\n }\r\n }\r\n\r\n RegisterReservationAttempt(isIframeToBeDisplayed: boolean) {\r\n let registerReservationAttemptRequestDTO = {\r\n PartySize: +this.gs.SaveBookingObj?.Size,\r\n Sessions: this.gs.SaveBookingObj?.Sessions,\r\n ActivityId: this.gs.SaveBookingObj?.Id,\r\n CoverTypes: this.gs.SaveBookingObj?.CoverTypes,\r\n TableIds: this.gs.SaveBookingObj?.TableIds,\r\n InstructorIds: this.gs.SaveBookingObj?.InstructorIds,\r\n BookingTypes: this.gs.SaveBookingObj?.BookingTypes,\r\n FromWebsite: true,\r\n Slots: this.gs.SaveBookingObj?.RatePlanTimeSlots,\r\n BookingBehavior: this.gs.SaveBookingObj?.BookingBehavior,\r\n PartyId: this.gs.operation == operationType.edit && this.gs.editPartyData$.value ? this.gs.editPartyData$.value.Id : null,\r\n MemberType: this.gs.selectedGuest?.MembershipType,\r\n MemberActive: this.gs.selectedGuest?.MemberActive\r\n }\r\n\r\n if(registerReservationAttemptRequestDTO.BookingBehavior == BookingBehavior.ClassOrSession){\r\n registerReservationAttemptRequestDTO.Slots = []\r\n }\r\n else{\r\n registerReservationAttemptRequestDTO.Sessions = null;\r\n }\r\n\r\n // let registerReservationAttemptRequestDTO = {\r\n // LocalTime: moment(this.partyDetails.reservationTime).format('YYYY-MM-DDTHH:mm:ss'), //selected date and time\r\n // PartySize: this.gs.reservationFormGroup.controls.reservationDetailsForm.value.partySize,\r\n // SeatingAreaId: this.partyDetails.seatingArea.id > 0 ? this.partyDetails.seatingArea.id : null,\r\n // SeatingTypeId: this.partyDetails.seatingType.id > 0 ? this.partyDetails.seatingType.id : null,\r\n // TableId: this.partyDetails.tableId && this.partyDetails.tableId.length > 0 ? this.partyDetails.tableId : [],\r\n // SpecialMealId: this.partyDetails.specialMeal.Id,\r\n // CoverTypes: this.getCoverTypes(),\r\n // IsCommunalTable: this.partyDetails.communalAvailability,\r\n // FromWebsite: true,\r\n // PartyId: this.gs.operation == operationType.edit && this.gs.editPartyData$.value ? this.gs.editPartyData$.value.Id : null\r\n // }\r\n this.gs.RegisterReservationAttempt(registerReservationAttemptRequestDTO).subscribe(data => {\r\n if (data) {\r\n this.paymentData = this.gs.reservationAttemptInfo = data;\r\n this.PaymentGateway = data.PaymentGateway;\r\n this.TotalAmount = data.PaymentAmount;\r\n if (data.RatePlanTotal) {\r\n this.setRatePlanData(data.RatePlanTotal);\r\n this.gs.PaymentData$.next(data);\r\n this.bindPaymentAmountAndMessage(this.paymentData.RateplanAmountinfo, this.paymentData.SpecialMealAmountinfo, this.paymentData.PaymentAmount)\r\n }\r\n if (!this.gs.restaurantWidgetSettings$.value.IsCartEnabled) {\r\n if (data.ShouldCreditCardBeEntered && isIframeToBeDisplayed) {\r\n if (this.gs.reservationAttemptInfo.CreditCardIFrameURL) {\r\n this.LoadIframe(this.gs.reservationAttemptInfo.CreditCardIFrameURL);\r\n }\r\n else {\r\n this.gs.setMessageState(this.ts.instant('SorryForPaymentOffline'), 0);\r\n }\r\n } else {\r\n if (!this.waiverForm) {\r\n this.isUserAllowedToclickConfirm = true;\r\n }\r\n }\r\n }\r\n else{\r\n if (!this.waiverForm) {\r\n this.isUserAllowedToclickConfirm = true;\r\n }\r\n }\r\n if (this.gs.operation == operationType.edit && this.gs.editPartyData$.value && this.gs.editPartyData$.value.Id) {\r\n this.getFinancialEffectCalculation();\r\n }\r\n }\r\n })\r\n\r\n }\r\n\r\n setRatePlanData(data) {\r\n this.ratePlan = data;\r\n if (this.ratePlan && this.ratePlan.RatePlanCalculations) {\r\n this.ratePlan.RatePlanCalculations = this.ratePlan.SlotList = this.ratePlan.RatePlanCalculations.map(slot => {\r\n slot.coverTypeVariants = slot.RatePlanVariants && slot.RatePlanVariants.GuestTypeVariant ? slot.RatePlanVariants.GuestTypeVariant.map(coverVariant => {\r\n coverVariant.CoverTypeName = this.gs.SaveBookingObj.CoverTypes.find(coverType => coverType.CoverTypeId == coverVariant.CoverTypeId).Name;\r\n return coverVariant;\r\n }).filter(coverVariant => coverVariant.Variant) : [];\r\n slot.bookingTypeVariants = slot.RatePlanVariants && slot.RatePlanVariants.BookingTypeVariant ? slot.RatePlanVariants.BookingTypeVariant.map(bookingTypeVariant => {\r\n bookingTypeVariant.BookingTypeName = this.gs.SaveBookingObj.BookingTypes.find(bookingType => bookingType.BookingTypeId == bookingTypeVariant.BookingTypeId).Name;\r\n return bookingTypeVariant;\r\n }).filter(bookingTypeVariant => bookingTypeVariant.Variant) : [];\r\n return slot;\r\n });\r\n } else {\r\n this.ratePlan.SlotList = this.gs.SessionBookingObj.Slots;\r\n }\r\n if (this.ratePlan.TotalRatePlan || this.ratePlan.RatePlanCalculations) {\r\n this.gs.RatePlanList$.next(this.ratePlan);\r\n }\r\n }\r\n\r\n bindPaymentAmountAndMessage(ratePlanAmount, specialMealAmount, paymentAmount) {\r\n this.ratePlanAmountInfo = ratePlanAmount;\r\n this.specialMealAmountInfo = specialMealAmount;\r\n this.paymentAmountInfo = paymentAmount;\r\n if (ratePlanAmount > 0 || specialMealAmount > 0) { //Activity Payment Involved\r\n this.activityPayment = ratePlanAmount > 0 ? ratePlanAmount : 0;\r\n this.activityPayment = specialMealAmount > 0 ? this.activityPayment + specialMealAmount : this.activityPayment;\r\n\r\n if (this.isSelectedMealDefferedPayment()) {\r\n this.paymentMessage = this.ts.instant('PrePaidMealReservationAuthorize');\r\n }\r\n else {\r\n this.paymentMessage = this.ts.instant('CardWillBeChargedTotalPrePaidReservation');\r\n }\r\n this.gs.showPaymentSummary = true;\r\n }\r\n else if (paymentAmount > 0) {//noShow\r\n this.noShowfee = paymentAmount > 0 ? paymentAmount : 0;\r\n if (this.gs.restaurantWidgetSettings$.value.WidgetCustomization.CustomNoShowFeeTerms) {\r\n this.noShowfeeMessage = this.gs.restaurantWidgetSettings$.value.WidgetCustomization.CustomNoShowFeeTerms\r\n this.noShowPolicyTitle = this.gs.restaurantWidgetSettings$.value.CancellationTitle ? this.gs.restaurantWidgetSettings$.value.CancellationTitle : this.ts.instant('noShowPolicy');\r\n }\r\n else {\r\n this.noShowfeeMessage = this.ts.instant('RestaurantCreditCardAssurance');\r\n }\r\n this.gs.showPaymentSummary = true;\r\n }\r\n\r\n }\r\n\r\n @HostListener('window:message', ['$event'])\r\n onMessage({ origin, data }) {\r\n if (origin != environment.authorizeIframeResponseOrigin && origin != environment.rGuestPayIframeResponsOrigin) { // set your origin\r\n return false;\r\n }\r\n var rGuestPayRespose = data;\r\n var payResponse = data;\r\n if (typeof data != \"object\") {\r\n rGuestPayRespose = JSON.parse(data);\r\n }\r\n if ((data.type == \"txn-completed\" && data.transactionInfo && data.transactionInfo.transactionInfo && data.transactionInfo.transactionInfo.payments) || (rGuestPayRespose && (rGuestPayRespose.code || rGuestPayRespose.gatewayResponseData))) {\r\n\r\n if (data.transactionInfo.transactionInfo.successCode == 1 && data.transactionInfo.transactionInfo.payments.length > 0 && data.transactionInfo.transactionInfo.payments[0].paymentType == 7) { //Waiver form\r\n this.proceedReservation(data.transactionInfo.transactionInfo.payments[0].authorizeTransactionID);\r\n return;\r\n }\r\n\r\n if (this.PaymentGateway == PaymentGateways.AuthorizePay) { //Authorize Pay \r\n\r\n var transInfo = payResponse.transactionInfo.transactionInfo;\r\n //var cardInfo = transInfo.saleResponse.cardInfo;\r\n //var gatewayResponseData = transInfo.saleResponse.gatewayResponseData;\r\n //var transactionReferenceData = transInfo.saleResponse.transactionReferenceData;\r\n //var transactionResponseData = transInfo.saleResponse.transactionResponseData;\r\n\r\n if (transInfo.errorMessage || transInfo.successCode != 1) {\r\n if (transInfo.errorMessage) {\r\n this.gs.setMessageState(transInfo.errorMessage, 0);\r\n }\r\n // else if (gatewayResponseData.message) {\r\n // gatewayResponseData.message;\r\n // }\r\n else {\r\n this.gs.setMessageState(this.ts.instant(\"CardInformationProcessNotCompleted\"), 0);\r\n }\r\n } else if (payResponse && transInfo && transInfo.successCode == 1) {\r\n\r\n var transactions = this.processTransactions(transInfo);\r\n var dto = {\r\n RestaurantId: this.gs.restaurantWidgetSettings$.value.RestaurantId,\r\n PartyId: this.gs.editPartyData$.value?.Id ? this.gs.editPartyData$.value?.Id : null,\r\n SlotLockIds: this.gs.lockMultipleResult ? this.gs.lockMultipleIds : [this.gs.lockResult.SlotLockIdDTO?.Id],\r\n BookingID: null,\r\n TokenType: \"\",\r\n PaymentAmount: transInfo.paidAmount,\r\n PaymentGateway: this.PaymentGateway,\r\n AuthorizeTransactions: transactions,\r\n ReservationAttemptId: this.paymentData.ReservationAttemptId,\r\n ReservationAttemptIds: this.paymentData.Slots?.filter(x => x.ReservationAttemptId > 0).map(x => x.ReservationAttemptId),\r\n SplitPaymentReload: this.isSplitPayment\r\n };\r\n\r\n // var callbackDto = this.getPaymentCallbackRequestDTO(cardInfo, transactionReferenceData, transInfo, transactionResponseData, this.paymentData.PaymentGateway);\r\n this.UpdateReservationAttempt(dto);\r\n } else {\r\n this.gs.setMessageState(this.ts.instant(\"CardInformationProcessNotCompleted\"), 0);\r\n }\r\n }\r\n else {\r\n if (rGuestPayRespose.code && rGuestPayRespose.code != \"100\") {\r\n rGuestPayRespose = JSON.parse(data);\r\n if (rGuestPayRespose.validationErrors && rGuestPayRespose.validationErrors.length > 0) {\r\n var errorString = \"\";\r\n rGuestPayRespose.validationErrors.forEach(function (error, i, arr) {\r\n errorString = error.fieldName + \" \" + error.value + \"\\n\";\r\n })\r\n this.gs.setMessageState(errorString, 0);\r\n }\r\n else if (rGuestPayRespose && rGuestPayRespose.gatewayResponseData && rGuestPayRespose.gatewayResponseData.message) {\r\n alert(rGuestPayRespose.gatewayResponseData.message);\r\n }\r\n else {\r\n this.gs.setMessageState(this.ts.instant(\"CardInformationProcessNotCompleted\"), 0);\r\n }\r\n }\r\n else if (rGuestPayRespose && rGuestPayRespose.gatewayResponseData && rGuestPayRespose.gatewayResponseData.code == \"100\") {\r\n let callbackDto = {\r\n ReservationAttemptId: this.paymentData.ReservationAttemptId,\r\n ReservationAttemptIds: this.paymentData.Slots?.filter(x => x.ReservationAttemptId > 0).map(x => x.ReservationAttemptId),\r\n CardNumber: rGuestPayRespose.cardInfo.accountNumberMasked,\r\n ExpirationDate: new Date(data.cardInfo.expirationYearMonth.substring(0, 4) + '-' + data.cardInfo.expirationYearMonth.substring(4) + '-01'),\r\n CVC: \"\",\r\n FirstNameHolder: \"\",\r\n LastNameHolder: \"\",\r\n AddressLine1: \"\",\r\n AddressLine2: \"\",\r\n City: \"\",\r\n State: \"\",\r\n PostalCode: \"\",\r\n TokenType: \"\",\r\n Token: data.token\r\n };\r\n this.UpdateReservationAttempt(callbackDto);\r\n }\r\n else {\r\n this.gs.setMessageState(this.ts.instant(\"CardInformationProcessNotCompleted\"), 0);\r\n }\r\n }\r\n }\r\n else if (data.type == \"txn-completed\" && data.transactionInfo) {\r\n \r\n } else {\r\n //Show Error Message \r\n }\r\n }\r\n\r\n proceedReservation(waiverFormTrancationId) {\r\n this.showIframe = false;\r\n this.waiverFormTrancationId = waiverFormTrancationId;\r\n if(this.gs.restaurantWidgetSettings$.value.IsCartEnabled){\r\n this.isUserAllowedToclickConfirm = true;\r\n this.waiverForm = false;\r\n if (this.guestDetailsForm.invalid || !this.checkCustomTermsAndMessageOptionValidation()) {\r\n this.gs.setMessageState(this.ts.instant('completeAllFields'), 0);\r\n }\r\n else{\r\n this.addToButton.disbaledproperity = false;\r\n }\r\n \r\n return;\r\n }\r\n //let invoiceId = data.transactionInfo.invoiceID\r\n //if (this.gs.ispaymentInvolvedInfo && this.gs.ispaymentInvolvedInfo.CreditCardRequired && !this.gs.restaurantWidgetSettings$.value.IsCartEnabled) {\r\n //this.isUserAllowedToclickConfirm = false;\r\n if (this.gs.reservationAttemptInfo) {\r\n if (this.gs.reservationAttemptInfo.ShouldCreditCardBeEntered) {\r\n if (this.gs.reservationAttemptInfo.CreditCardIFrameURL) {\r\n this.LoadIframe(this.gs.reservationAttemptInfo.CreditCardIFrameURL)\r\n }\r\n else {\r\n this.gs.setMessageState(this.ts.instant('SorryForPaymentOffline'), 0);\r\n }\r\n }\r\n else {\r\n this.isUserAllowedToclickConfirm = true;\r\n if (this.guestDetailsForm.invalid || !this.checkCustomTermsAndMessageOptionValidation()) {\r\n this.gs.setMessageState(this.ts.instant('completeAllFields'), 0);\r\n this.showIframe = false;\r\n }\r\n else {\r\n if (!this.gs.restaurantWidgetSettings$.value.IsCartEnabled) {\r\n this.reservationConfirm();\r\n } else {\r\n this.addToButton.disbaledproperity = false;\r\n }\r\n }\r\n }\r\n } else {\r\n this.RegisterReservationAttempt(true);\r\n }\r\n\r\n }\r\n\r\n\r\n processTransactions(transInfo) {\r\n var transactions = transInfo.payments;\r\n var authorizeTransactions = [];\r\n\r\n if (transactions && transactions.length > 0) {\r\n transactions.forEach(transaction => {\r\n if (transaction.successCode == 1) {\r\n var name = '';\r\n var paymentDetail = transaction.paymentDetail;\r\n var roomDetails = {\r\n RoomNumber: null,\r\n ConfirmationNumber: null,\r\n LastName: null\r\n };\r\n var pointsDetails = {\r\n AccountNumber: null,\r\n BucketName: null,\r\n Name: null,\r\n LoyaltyTransactionId: null\r\n };\r\n\r\n if (transaction.paymentType == 1 || transaction.paymentType == 2) { //credit card\r\n name = paymentDetail.accountName;\r\n }\r\n\r\n if (transaction.paymentType == 3) { //Post to room charges\r\n roomDetails.RoomNumber = paymentDetail.cardIssuer;\r\n roomDetails.ConfirmationNumber = paymentDetail.cardNumber;\r\n roomDetails.LastName = paymentDetail.accountName;\r\n name = paymentDetail.accountName;\r\n }\r\n if (transaction.paymentType == 5) { //Loyalty\r\n pointsDetails.BucketName = paymentDetail.tender;\r\n pointsDetails.AccountNumber = paymentDetail.cardNumber;\r\n pointsDetails.Name = paymentDetail.accountName;\r\n pointsDetails.LoyaltyTransactionId = paymentDetail.followOnData;\r\n name = paymentDetail.accountName;\r\n }\r\n var dto = {\r\n CardNumber: paymentDetail.cardNumber ? paymentDetail.cardNumber : \"\",\r\n ExpirationDate: paymentDetail.expirationDate ? paymentDetail.expirationDate.substring(0, 4) + paymentDetail.expirationDate.substring(4) : \"\",\r\n Name: name ? name : \"\",\r\n Token: paymentDetail.token ? paymentDetail.token : null,\r\n TransactionFollowOnData: paymentDetail.followOnData ? paymentDetail.followOnData : null,\r\n AuthorizeTransactionID: transaction.authorizeTransactionID,\r\n Amount: transaction.paidAmount,\r\n PaymentType: transaction.paymentType ? transaction.paymentType : null,\r\n InvoiceID: transaction.invoiceID ? transaction.invoiceID : null,\r\n TransactionDate: transaction.transactionsDate ? transaction.transactionsDate : null,\r\n RoomNumber: roomDetails && roomDetails.RoomNumber ? roomDetails.RoomNumber : null,\r\n ConfirmationNumber: roomDetails && roomDetails.ConfirmationNumber ? roomDetails.ConfirmationNumber : null,\r\n BucketName: pointsDetails && pointsDetails.BucketName ? pointsDetails.BucketName : null,\r\n LoyaltyAccountNumber: pointsDetails && pointsDetails.AccountNumber ? pointsDetails.AccountNumber : null,\r\n LoyaltyTransactionId: pointsDetails && pointsDetails.LoyaltyTransactionId ? pointsDetails.LoyaltyTransactionId : null,\r\n IssuerType: pointsDetails && paymentDetail.tender ? paymentDetail.tender : null,\r\n AuthCode : paymentDetail?.authCode,\r\n CCType : paymentDetail?.cardIssuerType,\r\n CCTransactionId : paymentDetail?.payTransactionID,\r\n };\r\n authorizeTransactions.push(dto);\r\n } else if (transaction.errorMessage) {\r\n this.gs.setMessageState(transaction.errorMessage, 0);\r\n }\r\n });\r\n return authorizeTransactions;\r\n }\r\n }\r\n\r\n LoadGuestWaiverForm(formCode) {\r\n this.gs.GetAuthWaiverForm(this.gs.restaurantWidgetSettings$.value.RestaurantId, formCode).subscribe(data => {\r\n if (data) {\r\n this.LoadIframe(data.formURL);\r\n this.waiverForm = true;\r\n //if (this.gs.ispaymentInvolvedInfo && this.gs.ispaymentInvolvedInfo.CreditCardRequired) {\r\n this.RegisterReservationAttempt(false);\r\n //}\r\n }\r\n else {\r\n this.gs.setMessageState(this.ts.instant('somethingWentWrong'), 0);\r\n }\r\n });\r\n }\r\n\r\n checkCustomTermsAndMessageOptionValidation() {\r\n let isApproved = true;\r\n if (this.gs.additionalGuestPage) {\r\n return true;\r\n }\r\n\r\n if (this.gs.restaurantWidgetSettings$.value.ConfirmationVia == ConfirmationVia.Both && !this.guestDetailsForm.value.primaryGuest['reservationConfirmationByEmail']\r\n && !this.guestDetailsForm.value.primaryGuest['reservationConfirmationBySMS']) {\r\n isApproved = false;\r\n }\r\n return isApproved;\r\n }\r\n\r\n isPartySizeMatchSecondaryContactList(): boolean {\r\n if (this.gs.operation == operationType.edit && this.gs.editPartyData$.value.SecondaryContacts && this.gs.editPartyData$.value.SecondaryContacts.length > 0 && this.gs.SaveBookingObj.Size < this.components.toArray().length) {\r\n return false;\r\n }\r\n else {\r\n return true;\r\n }\r\n }\r\n\r\n LoadIframe(iframeURl: string) {\r\n if (iframeURl) {\r\n this.urlSafe = this.sanitizer.bypassSecurityTrustResourceUrl(iframeURl + \"&origin=\" + window.location.origin)\r\n this.showIframe = true;\r\n }\r\n else {\r\n this.gs.setMessageState(this.ts.instant('somethingWentWrong'), 0);\r\n }\r\n }\r\n\r\n getPaymentCallbackRequestDTO(cardInfo: any, transactionReferenceData: any, transInfo: any, transactionResponseData: any, paymentGateway: PaymentGateways) {\r\n let paymentCallbackRequestDTO = {\r\n RestaurantId: this.gs.restaurantWidgetSettings$.value.RestaurantId,\r\n ReservationAttemptId: this.paymentData.ReservationAttemptId,\r\n CardNumber: cardInfo.accountNumberMasked,\r\n ExpirationDate: cardInfo.expirationYearMonth.substring(0, 4) + '-' + cardInfo.expirationYearMonth.substring(4) + '-01',\r\n CVC: \"\",\r\n FirstNameHolder: \"\",\r\n LastNameHolder: \"\",\r\n AddressLine1: \"\",\r\n AddressLine2: \"\",\r\n City: \"\",\r\n State: \"\",\r\n PostalCode: \"\",\r\n TokenType: \"\",\r\n Token: transactionReferenceData ? transactionReferenceData.token : null,\r\n PaymentAmount: transactionResponseData.totalAmount,\r\n AuthorizeTransactionID: transInfo ? transInfo.authorizeTransactionID : null,\r\n PaymentType: transInfo ? transInfo.paymentType : null,\r\n InvoiceID: transInfo ? transInfo.invoiceID : null,\r\n PaymentGateway: paymentGateway,\r\n TransactionFollowOnData: transactionReferenceData ? transactionReferenceData.transactionFollowOnData : null,\r\n TransactionDate: transInfo.transactionsDate,\r\n IssuerType: transactionReferenceData && transactionReferenceData.tender ? transactionReferenceData.tender : null,\r\n }\r\n return paymentCallbackRequestDTO;\r\n }\r\n\r\n UpdateReservationAttempt(Dto) {\r\n this.gs.UpdateReservationAttempt(Dto).subscribe(data => {\r\n this.gs.setMessageState('', 0);\r\n if (data && (data.ErrorMessage || data.ExceptionMessage || (data.ValidationMessages && data.ValidationMessages.length > 0) || data.length == 0)) {\r\n if (data.ErrorMessage && data.ErrorMessage.length > 0) {\r\n var sorrysomethingwentwromg = this.ts.instant('SorryWeGotSomeErrorWhileProcessing');\r\n var CCUprocessableTryAgainErrorMessage = this.ts.instant('CCUprocessableTryAgainErrorMessage');\r\n var ImportantErrorMessage = this.ts.instant('ImportantErrorMessage');\r\n var CreditCardAuthorizationError = this.ts.instant('CreditCardAuthorizationError');\r\n var TryAgainMessage = this.ts.instant('TryAgainMessage');\r\n var CardNumbershouldContainOnlyDigits = this.ts.instant('CardNumbershouldContainOnlyDigits');\r\n var CardNumberShouldConsists13To16Digits = this.ts.instant('CardNumberShouldConsists13To16Digits');\r\n var CardNumberShouldNotBlank = this.ts.instant('CardNumberShouldNotBlank');\r\n var SorryWeGotSomeErrorCardExpired = this.ts.instant('SorryWeGotSomeErrorWhileProcessingCardExpired');\r\n if (data.ErrorMessage == \"Please try it one more time, if the problem repeats, contact to rGuestSeat@Agilysys.com\")\r\n var url = sorrysomethingwentwromg + TryAgainMessage;\r\n else if (data.ErrorMessage == \"We're sorry, but we couldn�t process your credit card based on the information you provided. Please try again.\")\r\n var url = sorrysomethingwentwromg + CCUprocessableTryAgainErrorMessage;\r\n else if (data.ErrorMessage == \"[IMPORTANT] Some error happens at the moment of database saving. There is a probability that the payment transaction has performed successfully but this fact hasn't been saved properly. Don't try to do it one more time. Please, contact rGuestSeat@Agilysys.com regarding this error\")\r\n var url = sorrysomethingwentwromg + ImportantErrorMessage;\r\n else if (data.ErrorMessage == \"The provided credit card hasn't been authorized succesfully\")\r\n var url = sorrysomethingwentwromg + CreditCardAuthorizationError;\r\n else if (data.ErrorMessage.indexOf(\"The card is expired\") > 0)\r\n var url = SorryWeGotSomeErrorCardExpired;\r\n else if (data.ErrorMessage == \"The card number should consist of only digits\")\r\n var url = sorrysomethingwentwromg + CardNumbershouldContainOnlyDigits;\r\n else if (data.ErrorMessage == \"The card number should consist of from 13 to 16 digits\")\r\n var url = sorrysomethingwentwromg + CardNumberShouldConsists13To16Digits;\r\n else if (data.ErrorMessage == \"The card number shouldn't be blank\")\r\n var url = sorrysomethingwentwromg + CardNumberShouldNotBlank;\r\n else\r\n var url = sorrysomethingwentwromg + data.ErrorMessage;\r\n this.gs.setMessageState(url, 0);\r\n }\r\n else {\r\n var url = sorrysomethingwentwromg + TryAgainMessage;\r\n this.gs.setMessageState(url, 0);\r\n }\r\n this.gs.setMessageState(url, 0);\r\n } else if (data.RedirectUrl) {\r\n this.gs.offTimer();\r\n this.LoadIframe(data.RedirectUrl);\r\n setTimeout(() => {\r\n this.gs.setMessageState(\"Your current payment of \" + this.gs.restaurantWidgetSettings$.value.OperationCurrency + Dto.PaymentAmount.toFixed(this.gs.restaurantWidgetSettings$.value.NumberOfFractionalDigits) + \" is processed successfully! Please proceed to pay your pending amount \" + this.gs.restaurantWidgetSettings$.value.OperationCurrency + data.PendingAmount.toFixed(this.gs.restaurantWidgetSettings$.value.NumberOfFractionalDigits) + \" to place your reservation.\", 1);\r\n }, 1);\r\n //if (!this.isSplitPayment) {\r\n let timer = moment(data.ExtendedSlotLockResultDTO.ExpiresAt).diff(moment(data.ExtendedSlotLockResultDTO.LockedAt), \"seconds\");\r\n this.gs.showTimer = true;\r\n this.gs.runTimer(timer);\r\n this.isSplitPayment = true;\r\n this.gs.isSplitPayment$.next(true);\r\n //}\r\n }\r\n else {\r\n this.gs.isSplitPayment$.next(false);\r\n if (this.paymentData.ReservationAttemptId > 0) {\r\n this.gs.GetRegisterReservationAttempt(this.paymentData.ReservationAttemptId).subscribe(data => {\r\n if (data && (data.State == PaymentStates.Authorized || data.State == PaymentStates.ChargeCaptured)) {\r\n this.isUserAllowedToclickConfirm = true;\r\n if (this.guestDetailsForm.invalid || !this.checkCustomTermsAndMessageOptionValidation()) {\r\n this.gs.setMessageState(this.ts.instant('completeAllFields'), 0);\r\n this.showIframe = false;\r\n }\r\n else {\r\n this.reservationConfirm();\r\n }\r\n }\r\n else {\r\n this.gs.setMessageState(this.ts.instant(\"CreditCardNotBeProcessed\"), 0);\r\n }\r\n });\r\n }\r\n else {\r\n const ReservationIds = this.paymentData.Slots?.map(x => x.ReservationAttemptId);\r\n this.gs.GetRegisterMultipleReservationAttempt(ReservationIds).subscribe(data => {\r\n if (data) {\r\n let isAuthorized = true;\r\n data.forEach(reservationData => {\r\n // if (reservationData.State !== PaymentStates.Authorized && reservationData.State == PaymentStates.ChargeCaptured ) {\r\n // isAuthorized = false;\r\n // }\r\n if (reservationData.State != PaymentStates.Authorized && reservationData.State != PaymentStates.ChargeCaptured) {\r\n isAuthorized = false;\r\n }\r\n });\r\n\r\n if (isAuthorized) {\r\n this.isUserAllowedToclickConfirm = true;\r\n if (this.guestDetailsForm.invalid || !this.checkCustomTermsAndMessageOptionValidation()) {\r\n this.gs.setMessageState(this.ts.instant('completeAllFields'), 0);\r\n this.showIframe = false;\r\n }\r\n else {\r\n this.reservationConfirm();\r\n }\r\n } else {\r\n this.gs.setMessageState(this.ts.instant(\"CreditCardNotBeProcessed\"), 0);\r\n }\r\n }\r\n });\r\n }\r\n }\r\n });\r\n }\r\n\r\n createSecondaryContacts() {\r\n let secondaryContactList = this.buildSecondaryContactList();\r\n (this.guestDetailsForm as FormGroup).addControl('secondaryContactList', this.fb.array(secondaryContactList.map(contact => this.fb.group(contact))));\r\n this.gs.CreateSecondaryContacts(this.gs.restaurantWidgetSettings$.value.RestaurantId, this.gs.editPartyData$.value.Id, secondaryContactList).subscribe(data => {\r\n if (data) {\r\n this.gs.additionalGuestPage = !this.gs.additionalGuestPage\r\n this.gs.additionalGuestRequired = 0;\r\n this.gs.TabChange$.next(ActivityTabs.ConfirmationSummary);\r\n let partyType = this.gs.selectedSpecialMeal ? this.gs.selectedSpecialMeal.IsForStandbyReservations ? PartyType[2] : PartyType[0] : '';\r\n this.gs.getByToken(this.gs.editPartyData$.value.Token, '', partyType).subscribe(data => {\r\n if (data) {\r\n this.gs.editPartyData$.next(data);\r\n this.gs.nextButton.next(componentName.confirmDetails);\r\n }\r\n })\r\n\r\n }\r\n });\r\n }\r\n\r\n buildSecondaryContactList() {\r\n let secondaryContactList: SecondaryContactDTO[] = [];\r\n for (let i = 0; i < this.components.length; i++) {\r\n let secondaryContact = new SecondaryContactDTO();\r\n if (this.gs.additionalGuestPage || (!this.gs.additionalGuestPage && this.gs.operation == operationType.edit && i != 0)) {\r\n let FormValue = this.components.toArray()[i].form.value;\r\n secondaryContact.FirstName = FormValue.firstName;\r\n secondaryContact.LastName = FormValue.lastName;\r\n secondaryContact.EmailAddress = FormValue.email;\r\n secondaryContact.PhoneNumber = FormValue.phone;\r\n secondaryContact.CountryId = this.components.last.config[2].value;\r\n secondaryContact.PartyId = this.gs.editPartyData$.value.Id;\r\n secondaryContact.Notes = this.getCategoryPreferencesNotes(this.components.toArray()[i].form.value);\r\n secondaryContact.Id = FormValue.id ? FormValue.id : null;\r\n secondaryContactList.push(secondaryContact)\r\n }\r\n }\r\n return secondaryContactList;\r\n }\r\n\r\n createPartialReservationforAuth() {\r\n this.reservationConfirm();\r\n }\r\n\r\n getFinancialEffectCalculation() {\r\n let partyDTO = this.buildReservationRequest();\r\n this.gs.GetFinancialEffectCalculation(partyDTO).subscribe(data => {\r\n if (data) {\r\n this.financialData = data;\r\n if (data.PaymentGateway) {\r\n this.PaymentGateway = data.PaymentGateway;\r\n }\r\n if (data.RefundOption) {\r\n this.RefundData = data.RefundOption;\r\n }\r\n if (data.TotalAmount) {\r\n this.TotalAmount = data.TotalAmount;\r\n }\r\n if (data.RedirectUrl) {\r\n this.isSplitPayment = false;\r\n this.isUserAllowedToclickConfirm = false;\r\n this.paymentData.ReservationAttemptId = data.ReservationAttemptId;\r\n this.confirmButton.disbaledproperity = true;\r\n this.LoadIframe(data.RedirectUrl);\r\n } //else {\r\n switch (data.PartyPaymentType) {\r\n case 0: // NotSupported\r\n this.gs.setMessageState(this.ts.instant(\"ReservationBetweenLocationPrePaidNotSupported\"), 0);\r\n this.isUserAllowedToclickConfirm = false;\r\n this.confirmButton.disbaledproperity = true;\r\n return;\r\n break;\r\n case 1: // NoPaymentsInvolved\r\n // No messaging in this case\r\n break;\r\n case 2: // NoEffect\r\n this.showFinancialEffectPopUp(this.ts.instant('NoChargeOrRefundForThisReservation'));\r\n break;\r\n case 3: // NewReservationAttempt\r\n //paymentIframeRequired = true;\r\n if (this.isSelectedMealDefferedPayment()) {\r\n this.popUpMessage = \"Your card will be charged prior to your meal time.\";\r\n } else {\r\n this.popUpMessage = this.ts.instant('NoRefundYourPrePayment') + ' ' + this.gs.restaurantWidgetSettings$.value.OperationCurrency + data.TotalAmount.toFixed(this.gs.restaurantWidgetSettings$.value.NumberOfFractionalDigits);\r\n }\r\n this.showFinancialEffectPopUp(this.popUpMessage);\r\n break;\r\n case 4: // NoFullRefund\r\n if (data.TotalAmount != null && (data.TotalAmount > 0)) {\r\n this.popUpMessage = this.ts.instant('NoRefundYourPrePayment') + ' ' + this.gs.restaurantWidgetSettings$.value.OperationCurrency + data.TotalAmount.toFixed(this.gs.restaurantWidgetSettings$.value.NumberOfFractionalDigits);\r\n }\r\n else {\r\n // There was no prepayment to mention in text (or it was already refunded)\r\n this.popUpMessage = this.ts.instant('NoChargeOrRefundForThisReservation');\r\n }\r\n this.showFinancialEffectPopUp(this.popUpMessage);\r\n break;\r\n case 5: // FullRefund\r\n this.popUpMessage = this.ts.instant('CardUsedForOriginalReservationWillBeRefunded') + ' ' + this.gs.restaurantWidgetSettings$.value.OperationCurrency + data.TotalAmount.toFixed(this.gs.restaurantWidgetSettings$.value.NumberOfFractionalDigits) + ' ' + this.ts.instant('severBusinessDays');\r\n this.showFinancialEffectPopUp(this.popUpMessage);\r\n break;\r\n case 6: // NoFullRefundAndNewReservationAttempt\r\n if (data.TotalAmount != null && (data.TotalAmount > 0)) {\r\n this.popUpMessage = this.ts.instant('NoRefundYourPrePayment') + ' ' + this.gs.restaurantWidgetSettings$.value.OperationCurrency + data.PaymentAmount.toFixed(this.gs.restaurantWidgetSettings$.value.NumberOfFractionalDigits);\r\n }\r\n else {\r\n // There was no prepayment to mention in text (or it was already refunded)\r\n this.popUpMessage = this.ts.instant('noRefundMessage');\r\n }\r\n this.showFinancialEffectPopUp(this.popUpMessage);\r\n break;\r\n case 7: // FullRefundAndNewReservationAttempt\r\n this.popUpMessage = this.ts.instant('CardUsedForOriginalReservationWillBeRefunded') + ' ' + this.gs.restaurantWidgetSettings$.value.OperationCurrency + data.TotalAmount.toFixed(this.gs.restaurantWidgetSettings$.value.NumberOfFractionalDigits) + ' ' + this.ts.instant('severBusinessDays');\r\n this.showFinancialEffectPopUp(this.popUpMessage);\r\n break;\r\n case 8: // PartialCharge\r\n if (this.gs.reservationAttemptInfo.ShouldCreditCardBeEntered) {\r\n this.popUpMessage = this.ts.instant('CardNeededToUpdateThisReservation') + ' ' + this.gs.restaurantWidgetSettings$.value.OperationCurrency + data.PaymentAmount.toFixed(this.gs.restaurantWidgetSettings$.value.NumberOfFractionalDigits) + ' ' + this.ts.instant('enterCreditCard');\r\n }\r\n else {\r\n this.popUpMessage = this.ts.instant('CardUsedForTheOriginalBookingWillCharged') + ' ' + this.gs.restaurantWidgetSettings$.value.OperationCurrency + data.PaymentAmount.toFixed(this.gs.restaurantWidgetSettings$.value.NumberOfFractionalDigits);\r\n }\r\n this.showFinancialEffectPopUp(this.popUpMessage);\r\n break;\r\n case 9: // PartialRefund\r\n case 14:\r\n if (this.financialData.RefundOption && this.financialData.RefundOption.length > 0) {\r\n this.popUpMessage = this.ts.instant('Refund request of ') + this.gs.restaurantWidgetSettings$.value.OperationCurrency + data.PaymentAmount.toFixed(this.gs.restaurantWidgetSettings$.value.NumberOfFractionalDigits) + this.ts.instant('hasBeenProcessed');\r\n } else {\r\n this.popUpMessage = this.ts.instant('refundMessage') + this.gs.restaurantWidgetSettings$.value.OperationCurrency + Math.abs(data.PaymentAmount) + \".
\" + this.ts.instant('severalDaysMessage');\r\n }\r\n this.showFinancialEffectPopUp(this.popUpMessage);\r\n break;\r\n case 10: // NoShowFeeUpdated\r\n this.popUpMessage = this.ts.instant('IfDonotShowYouWillBeCharged') + ' ' + this.gs.restaurantWidgetSettings$.value.OperationCurrency + data.TotalAmount.toFixed(this.gs.restaurantWidgetSettings$.value.NumberOfFractionalDigits);\r\n this.showFinancialEffectPopUp(this.popUpMessage);\r\n break;\r\n case 11: // Authorize\r\n\r\n if (data.TotalAmount > 0) {\r\n this.popUpMessage = this.ts.instant('CardUsedAtBookingWillBeChargedAtMealTime') + ' ' + this.gs.restaurantWidgetSettings$.value.OperationCurrency + data.TotalAmount.toFixed(this.gs.restaurantWidgetSettings$.value.NumberOfFractionalDigits);\r\n this.showFinancialEffectPopUp(this.popUpMessage);\r\n }\r\n break;\r\n case 12: // Authorize updated\r\n\r\n if (data.TotalAmount > 0) {\r\n this.popUpMessage = this.ts.instant('CardUsedAtBookingWillBeChargedAtMealTime') + ' ' + this.gs.restaurantWidgetSettings$.value.OperationCurrency + data.TotalAmount.toFixed(this.gs.restaurantWidgetSettings$.value.NumberOfFractionalDigits);\r\n this.showFinancialEffectPopUp(this.popUpMessage);\r\n }\r\n break;\r\n }\r\n this.bindPaymentAmountAndMessage(data.RatePlanAmount, data.SpecialMealAmount, data.TotalAmount) // need to check how to find deferred payment mode\r\n if (this.gs.reservationAttemptInfo.ShouldCreditCardBeEntered) {\r\n this.isUserAllowedToclickConfirm = false;\r\n this.confirmButton.disbaledproperity = true;\r\n this.LoadIframe(this.gs.reservationAttemptInfo.CreditCardIFrameURL);\r\n }\r\n else {\r\n if (!data.RedirectUrl) {\r\n this.isUserAllowedToclickConfirm = true;\r\n this.confirmButton.disbaledproperity = this.gs.restaurantWidgetSettings$.value.WidgetCustomization.ConfirmationVia == ConfirmationVia.Both;\r\n }\r\n }\r\n // }\r\n }\r\n });\r\n }\r\n showRefundPopup() {\r\n const popUpMessage = [{\r\n dialogTitle: this.ts.instant('paymentInfo'),\r\n }];\r\n const componentDetails: ComponentDetails = Utilities.setComponentDetails(PopupMessageComponent, 'small', '', popUpMessage,\r\n popUpMessage[0].dialogTitle);\r\n this.financialPopUpRef = this.openCustomPopup(componentDetails, ComponentTypes.financialEffectCalculation, '600px', '700px', true, this.ts.instant('No'), this.ts.instant('Ok'),\r\n this.ts.instant('cancel'), true)\r\n }\r\n\r\n openDeleteConfirmationPopUp(index) {\r\n this.secondaryGuestTobeDeletedIndex = index;\r\n const popUpMessage = [{\r\n confirmationMessage: 'Are you sure, would you like to remove this guest from your party ?',\r\n dialogTitle: this.ts.instant('Remove Secondary Guest'),\r\n showAlert: true\r\n }];\r\n const componentDetails: ComponentDetails = Utilities.setComponentDetails(PopupMessageComponent, 'small', '', popUpMessage,\r\n popUpMessage[0].dialogTitle);\r\n this.deleteSecondaryGuestPopUpRef = this.openCustomPopup(componentDetails, ComponentTypes.deleteSecondaryGuest, '450px', '300px', true, '', this.ts.instant('Yes'),\r\n this.ts.instant('No'), true)\r\n }\r\n\r\n deleteSecondaryGuestConfirmed() {\r\n this.guestData.splice(this.secondaryGuestTobeDeletedIndex, 1);\r\n this.guestData.forEach((data, index) => {\r\n if (index != 0) {\r\n this.guestData[index] = { name: this.ts.instant('secondaryGuest') + (index + 1), isNew: this.guestData[index].isNew };\r\n }\r\n });\r\n this.gs.secondaryContactList = this.buildSecondaryContactList();\r\n this.gs.secondaryContactList.splice((this.secondaryGuestTobeDeletedIndex - 1), 1);\r\n let data = _.cloneDeep(this.guestData);\r\n this.guestData = [];\r\n this.guestData = _.cloneDeep(data);\r\n setTimeout(() => {\r\n this.components.toArray().forEach((formData, index) => {\r\n if (index > 0) {\r\n this.bindContactsToForm(formData.form, this.gs.secondaryContactList[index - 1]);\r\n }\r\n });\r\n this.gs.secondaryContactList = this.buildSecondaryContactList();\r\n }, 1);\r\n }\r\n\r\n showFinancialEffectPopUp(Message: string) {\r\n const popUpMessage = [{\r\n confirmationMessage: Message,\r\n dialogTitle: this.ts.instant('paymentInfo'),\r\n showAlert: true\r\n }];\r\n const componentDetails: ComponentDetails = Utilities.setComponentDetails(PopupMessageComponent, 'small', '', popUpMessage,\r\n popUpMessage[0].dialogTitle);\r\n this.financialPopUpRef = this.openCustomPopup(componentDetails, ComponentTypes.financialEffectCalculation, '450px', '300px', true, this.ts.instant('No'), this.ts.instant('Ok'),\r\n this.ts.instant('cancel'), true)\r\n }\r\n\r\n showAuthRefundPopup() {\r\n const popUpMessage = [{\r\n dialogTitle: this.ts.instant('refundStrategy'),\r\n popupInput: this.RefundData,\r\n disabled: true\r\n }];\r\n\r\n let financialData = {\r\n FinancialData: this.financialData,\r\n OperationCurrency: this.gs.restaurantWidgetSettings$.value.OperationCurrency\r\n }\r\n\r\n const componentDetails: ComponentDetails = Utilities.setComponentDetails(AuthRefundPopupComponent, 'small', '', financialData,\r\n popUpMessage[0].dialogTitle);\r\n this.AuthrefundPopupRef = this.openCustomPopup(componentDetails, ComponentTypes.AuthRefundPopup, '650px', '600px', true, '', this.ts.instant('proceed'),\r\n this.ts.instant('close'), true, '', '', false, true)\r\n\r\n }\r\n\r\n //have to check\r\n isSelectedMealDefferedPayment(): boolean {\r\n let isDeffered = false;\r\n // if (this.gs.reservationFormGroup.get('reservationDetailsForm').get('specialMeal').value) {\r\n // isDeffered = (this.gs.reservationFormGroup.get('reservationDetailsForm').get('specialMeal').value.DoesRequirePrepayment && !this.gs.reservationFormGroup.get('reservationDetailsForm').get('specialMeal').value.ChargeOnBooking) ? true : false;\r\n // }\r\n return isDeffered;\r\n }\r\n\r\n\r\n backtosummary() {\r\n this.gs.TabChange$.next(ActivityTabs.ConfirmationSummary)\r\n }\r\n\r\n bookCart() {\r\n this.gs.TabChange$.next(ActivityTabs.CartDetails);\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.subscriptions) {\r\n this.subscriptions.unsubscribe();\r\n }\r\n }\r\n}\r\n\r\n\r\n","
\r\n
\r\n
\r\n
{{'ActivitySummary' | translate}}
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n {{activityName}}\r\n
\r\n\r\n
\r\n
{{'Location' | translate}}
\r\n
{{Locations}}
\r\n
\r\n
\r\n
{{'Instructor' | translate}}
\r\n
{{ Instructors}}
\r\n
\r\n
\r\n
{{'CoverSize' | translate}}
\r\n
{{SummaryData.BookingSize}}
\r\n
\r\n
\r\n
{{'FromDate' | translate}}
\r\n
0\">\r\n {{SummaryData.FromDate | localizeDate: 'DD MMMM YYYY'}}\r\n
\r\n
{{(SummaryData.Slots[0].EndTime) ?\r\n (SummaryData.Slots[0].EndTime | localizeDate: 'DD MMMM YYYY'):(SummaryData.Slots[0].Date | localizeDate: 'DD MMMM\r\n YYYY')}}
\r\n
\r\n
\r\n
{{'ToDate' | translate}}
\r\n
0\">\r\n {{SummaryData.ToDate | localizeDate: 'DD MMMM YYYY'}}\r\n
\r\n
{{(SummaryData.Slots[SummaryData.Slots.length -\r\n 1].EndTime) ? (SummaryData.Slots[SummaryData.Slots.length - 1].EndTime | localizeDate: 'DD MMMM YYYY'):\r\n (SummaryData.Slots[SummaryData.Slots.length - 1].Date | localizeDate: 'DD MMMM YYYY')}}
\r\n
\r\n
\r\n
{{'timeSlots' | translate}}
\r\n
\r\n
\r\n \r\n \r\n {{slot.Start | localizeDate: 'DD MMMM, LT'}}\r\n -\r\n {{slot.End | localizeDate: 'LT'}}  \r\n {{slot.Start | localizeDate: 'dDDd MMMM'}}\r\n - {{slot.End | localizeDate: 'DD MMMM'}}   \r\n \r\n\r\n
4\"\r\n (click)=\"showAllSlots = !showAllSlots\">\r\n {{showAllSlots ? 'Show Less' : '+'+(SelectedTimeSlots.length-4)+' '+'more'}}
\r\n\r\n
\r\n\r\n
\r\n\r\n \r\n
\r\n
\r\n {{dayOfWeek[index]}}\r\n
\r\n
\r\n
\r\n {{slot.Start | localizeDate: 'LT'}} - {{slot.End | localizeDate: 'LT'}}\r\n
\r\n
\r\n
\r\n
\r\n\r\n\r\n
\r\n
\r\n
\r\n \r\n {{slot.LocalTime | localizeDate: 'LT'}}\r\n - {{slot.EndTime | localizeDate: 'LT'}}{{OpenbookingSlots[index+1] && ','}}\r\n  \r\n \r\n
\r\n
4\"\r\n (click)=\"showAllSlots = !showAllSlots\">\r\n {{showAllSlots ? 'Show Less' : '+'+(OpenbookingSlots.length-4)+' '+'more'}}\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n {{'rates' | translate}}\r\n
\r\n \r\n \r\n \r\n \r\n \r\n {{slot.TimeRange.Start | date:'dd MMMM, hh:mm a' }} - {{slot.TimeRange.End |\r\n date:'hh:mm\r\n a'}}\r\n \r\n \r\n {{slot.TimeRange.Start | localizeDate: 'DD MMMM' }} - {{slot.TimeRange.End | localizeDate: 'DD MMMM'}}\r\n \r\n \r\n {{slot.TimeRange.Start | localizeDate: 'LT' }} - {{slot.TimeRange.End | localizeDate: 'LT'}}\r\n \r\n \r\n \r\n
\r\n
\r\n {{'TotalBaseRate' |\r\n translate}}\r\n
\r\n
{{OperationCurrency}}\r\n {{slot.RatePlanVariants.TotalBaseRate | currencyDecimalFormatter\r\n }}
\r\n
\r\n
\r\n
\r\n {{'LocationVariant' | translate}} ({{'forTotalOf' | translate}}\r\n {{activityService.SessionBookingObj?.BookingSize}}\r\n )\r\n \r\n
\r\n
{{OperationCurrency}}\r\n {{slot.RatePlanVariants.LocationVariant | currencyDecimalFormatter}}
\r\n
\r\n
\r\n
\r\n {{'InstructorVariant' | translate}}({{'forTotalOf' | translate}}\r\n {{activityService.SessionBookingObj?.BookingSize}}\r\n )\r\n
\r\n
{{OperationCurrency}}\r\n {{slot.RatePlanVariants.InstructorVariant | currencyDecimalFormatter}}
\r\n
\r\n
\r\n
\r\n {{'BookingType' | translate}}\r\n \r\n
\r\n
\r\n
\r\n
\r\n {{variant.BookingTypeName}}\r\n {{variant.bookingTypes}}\r\n
\r\n
{{OperationCurrency}} {{variant.Variant | currencyDecimalFormatter}}
\r\n
\r\n
\r\n
\r\n {{'coverType' | translate}}\r\n \r\n
\r\n
\r\n
\r\n
\r\n {{variant.CoverTypeName}}\r\n {{variant.covers}}\r\n
\r\n
{{OperationCurrency}} {{variant.Variant | currencyDecimalFormatter}}
\r\n
\r\n\r\n
\r\n
\r\n {{'MemberShipVariant' |\r\n translate}}\r\n
\r\n
{{OperationCurrency}} {{slot.MemberShipVariant |\r\n currencyDecimalFormatter}}\r\n
\r\n
\r\n
\r\n
\r\n {{'TotalSessionCharge' |\r\n translate}}\r\n
\r\n
{{OperationCurrency}}\r\n {{slot.TotalAmount | currencyDecimalFormatter}}
\r\n
\r\n
\r\n \r\n
4\"\r\n (click)=\"showRatePalns = !showRatePalns\">\r\n {{showRatePalns ? 'Show Less' : '+'+(ratePlan.SlotList.length-4)+' '+'more'}}
\r\n
\r\n
\r\n {{'total' | translate}}\r\n
\r\n
{{OperationCurrency}} {{ratePlan.TotalRatePlan !== null ?\r\n (ratePlan.TotalRatePlan | currencyDecimalFormatter) : '0.00'}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
","import { Component, OnInit, OnDestroy } from '@angular/core';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { ActivityTabs, buttonTypes } from 'src/app/shared/constants/commonenums';\r\nimport { ButtonValue } from 'src/app/shared/dynamicform/models/common-models';\r\nimport { BookingActivity, ClassType, SessionBookingDTO } from 'src/app/shared/Models/SessionBookingDTO';\r\nimport { DayOfWeek } from 'src/app/shared/Models/WidgetSettingsModels';\r\nimport { GuestService } from 'src/app/shared/services/guest.service';\r\nimport { Utilities } from 'src/app/shared/utilities/utilities';\r\nimport { ActivitiesService } from '../../activities.service';\r\n\r\n@Component({\r\n selector: 'app-activity-slot-summary',\r\n templateUrl: './activity-slot-summary.component.html',\r\n styleUrls: ['./activity-slot-summary.component.scss']\r\n})\r\nexport class ActivitySlotSummaryComponent implements OnInit, OnDestroy {\r\n editButton: ButtonValue;\r\n selectedBookingSlotObj: SessionBookingDTO;\r\n activityName: string;\r\n Locations: string;\r\n Instructors: string;\r\n ratePlan: any;\r\n OperationCurrency: any;\r\n RestaurantSettingsData: any;\r\n isSessionClass: boolean;\r\n showAllSlots: boolean;\r\n showRatePalns: boolean;\r\n Subscriptions: Subscription = new Subscription;\r\n SelectedDates = [];\r\n allAvailableDates = [];\r\n dayOfWeek = DayOfWeek;\r\n SelectedTimeSlots = [];\r\n OpenbookingSlots = [];\r\n selectedClassSchedule: any = [];\r\n SummaryData: any;\r\n ClassType = ClassType;\r\n constructor(public ts: TranslateService, public activityService: GuestService) {\r\n this.Subscriptions.add(\r\n this.activityService.restaurantWidgetSettings$.subscribe(data => {\r\n this.RestaurantSettingsData = data;\r\n this.OperationCurrency = this.RestaurantSettingsData.OperationCurrency;\r\n }));\r\n this.Subscriptions.add(\r\n this.activityService.TabChange$.subscribe(data => {\r\n if (data === ActivityTabs.ReservationDetails) {\r\n if (this.activityService.bookingSection$.value === BookingActivity.ClassBooking) {\r\n if (this.activityService.SessionBookingObj) {\r\n this.SummaryData = this.activityService.SessionBookingObj;\r\n this.ratePlan = {};\r\n this.isSessionClass = this.activityService.SessionBookingObj.ClassType === ClassType.Session;\r\n if (this.isSessionClass) {\r\n this.SelectedTimeSlots = this.activityService.SaveBookingObj.SelectedTimeSlots;\r\n } else {\r\n this.ratePlan['selectedClassSchedule'] = this.activityService.SaveBookingObj.selectedClassSchedule\r\n }\r\n }\r\n this.setSummaryData();\r\n this.getInstructors();\r\n this.getLocations();\r\n this.OpenbookingSlots = [];\r\n } else {\r\n this.isSessionClass = false;\r\n this.SelectedTimeSlots = [];\r\n this.selectedClassSchedule = [];\r\n if (this.activityService.bookingSection$.value === BookingActivity.PrivateLesson) {\r\n this.selectedBookingSlotObj = this.SummaryData = this.activityService.SessionBookingObj;\r\n this.activityName = this.activityService.SelectedActivity$.value?.LessonName;\r\n this.activityService.SaveBookingObj.ActivityName = this.activityName;\r\n this.getInstructors();\r\n this.getLocations();\r\n } else {\r\n this.SummaryData = this.activityService.openBookingData;\r\n this.Locations = this.activityService.openBookingData.LocationName\r\n this.activityService.SaveBookingObj.ActivityName = 'Open Booking';\r\n this.activityService.SaveBookingObj.TableNames = this.Locations = this.activityService.openBookingData.LocationName;\r\n }\r\n this.OpenbookingSlots = this.activityService.SaveBookingObj.OpenTimeSlots;\r\n this.OpenbookingSlots.sort((a, b) => Utilities.parseDateString(a.LocalTime).getTime() - Utilities.parseDateString(b.LocalTime).getTime());\r\n \r\n }\r\n }\r\n if(this.SummaryData && this.SummaryData.Slots && this.SummaryData.Slots.length>0)\r\n {\r\n this.SummaryData.Slots.sort((a, b) => Utilities.parseDateString(a.LocalTime).getTime() - Utilities.parseDateString(b.LocalTime).getTime());\r\n }\r\n }));\r\n this.Subscriptions.add(\r\n this.activityService.SelectedClassSchedule$.subscribe(data => {\r\n if (data) {\r\n this.selectedClassSchedule = data\r\n }\r\n }));\r\n this.Subscriptions.add(\r\n this.activityService.RatePlanList$.subscribe(data => {\r\n this.ratePlan = data;\r\n if (this.ratePlan && !this.ratePlan?.SlotList) {\r\n this.ratePlan.SlotList = [];\r\n }\r\n if(this.ratePlan && this.ratePlan != null) {\r\n (this.ratePlan && this.ratePlan.SlotList.length>0) ?? this.ratePlan.SlotList.sort((a, b) => Utilities.parseDateString(a.TimeRange.Start).getTime() - Utilities.parseDateString(b.TimeRange.Start).getTime()); \r\n }\r\n }));\r\n\r\n this.Subscriptions.add(this.activityService.isSplitPayment$.subscribe(data => {\r\n this.editButton.disbaledproperity = data;\r\n }));\r\n }\r\n\r\n getTimeRange(data) {\r\n const SessionData = [];\r\n this.ratePlan.RatePlanCalculations.forEach(element => {\r\n if (element.TimeRange.Start.split('T')[0] === data.StartDate) {\r\n SessionData.push(element);\r\n }\r\n });\r\n return SessionData;\r\n }\r\n\r\n ngOnInit(): void {\r\n this.editButton = {\r\n type: buttonTypes.cancelBtn,\r\n label: this.ts.instant('edit'),\r\n customclass: 'reservation-confirmation__cancel-reservation',\r\n disbaledproperity: this.activityService.isEditEnable\r\n };\r\n\r\n }\r\n\r\n\r\n setSummaryData() {\r\n const SelectedActivity = this.activityService.SelectedActivity$.value;\r\n this.selectedBookingSlotObj = this.activityService.SessionBookingObj;\r\n if (this.selectedBookingSlotObj.ClassType) {\r\n\r\n }\r\n this.activityName = SelectedActivity?.LessonName;\r\n this.activityService.SaveBookingObj.ActivityName = this.activityName;\r\n this.isSessionClass = SelectedActivity?.ClassType === ClassType.Session;\r\n }\r\n getLocations() {\r\n let SelectedLocList = '';\r\n this.SummaryData?.Location.forEach((loc, index) => {\r\n const selectedLoc = this.activityService.LocationList.filter(data => data.Id === loc)[0];\r\n if (selectedLoc) {\r\n SelectedLocList = SelectedLocList + (selectedLoc.Name);\r\n }\r\n if (index !== this.selectedBookingSlotObj.Location?.length - 1) {\r\n SelectedLocList = SelectedLocList + ', ';\r\n }\r\n });\r\n this.Locations = SelectedLocList;\r\n this.activityService.SaveBookingObj.TableNames = this.Locations;\r\n }\r\n\r\n getInstructors() {\r\n let SelectedStaffList = '';\r\n this.SummaryData?.StaffId.forEach((staff, index) => {\r\n const selectedStaff = this.activityService.InstructorList.filter(data => data.Id === staff)[0];\r\n if (selectedStaff) {\r\n SelectedStaffList = SelectedStaffList + (selectedStaff.Name + ' ' + (selectedStaff.LastName || ''));\r\n }\r\n if (index !== this.selectedBookingSlotObj.StaffId?.length - 1) {\r\n SelectedStaffList = SelectedStaffList + ', ';\r\n }\r\n });\r\n this.Instructors = SelectedStaffList;\r\n this.activityService.SaveBookingObj.Staffs = this.Instructors;\r\n }\r\n\r\n gotoPreviousPage(event) {\r\n this.activityService.offTimer();\r\n if (this.activityService.bookingSection$.value === BookingActivity.ClassBooking) {\r\n this.activityService.TabChange$.next(ActivityTabs.ActivitySelection);\r\n } else if (this.activityService.bookingSection$.value === BookingActivity.PrivateLesson) {\r\n this.activityService.TabChange$.next(ActivityTabs.PrivateLesson);\r\n } else {\r\n this.activityService.TabChange$.next(ActivityTabs.BookingSelection);\r\n }\r\n }\r\n ngOnDestroy(): void {\r\n if (this.Subscriptions) { this.Subscriptions.unsubscribe(); }\r\n }\r\n}\r\n","
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
","import { Component, OnInit } from '@angular/core';\r\nimport { GuestDataComponent } from 'src/app/shared/components/guest-data/guest-data.component';\r\nimport { GuestService } from 'src/app/shared/services/guest.service';\r\n\r\n@Component({\r\n selector: 'app-activity-summary',\r\n templateUrl: './activity-summary.component.html',\r\n styleUrls: ['./activity-summary.component.scss']\r\n})\r\nexport class ActivitySummaryComponent implements OnInit {\r\n currentComponent = GuestDataComponent;\r\n selectedIndex: any;\r\n constructor(private gs: GuestService) {\r\n this.gs.TabChange$.subscribe(data => {\r\n this.selectedIndex = data;\r\n })\r\n }\r\n\r\n ngOnInit(): void {\r\n\r\n }\r\n\r\n}\r\n","
\r\n
\r\n\r\n
\r\n
\r\n
{{'MyActivitiesCart' | translate}}
\r\n
{{'MyBookings' | translate}}
\r\n
\r\n\r\n
\r\n
\r\n {{gs.minutes}}\r\n {{'mins' | translate}} {{gs.seconds}} {{'secs'\r\n |\r\n translate}}\r\n
\r\n
{{'leftForBooking' | translate}}
\r\n
\r\n
\r\n {{'TotalPayable' | translate}} {{' '}}{{':'}}{{' '}}\r\n {{OperationCurrency}}{{ TotalCartValue | currencyDecimalFormatter}}\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n {{party.ActivityName ? party.ActivityName : party.SelectedActivity?.LessonName}}\r\n
\r\n
{{'By' | translate}}\r\n {{party.StaffsList[0]}} 1\">+{{party.StaffsList.length - 1}}\r\n
\r\n
{{'By'|translate}}\r\n {{party.SelectedActivity.Staffs}}\r\n
\r\n
\r\n\r\n location_on\r\n \r\n \r\n {{party.TableList[0]}}\r\n \r\n 1\">+{{party.TableList.length\r\n - 1}}\r\n \r\n {{' '}}|{{' '}}{{party.Size}}{{' '}}\r\n person\r\n
\r\n
\r\n\r\n location_on\r\n \r\n \r\n {{party.SelectedActivity.LocationName}}\r\n \r\n \r\n {{' '}}|{{' '}}{{party.Size}}{{' '}}\r\n person\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {{party.StartDate | localizeDate:'DD MMM YYYY'}} {{' To '}} {{party.EndDate | localizeDate: 'DD MMM\r\n YYYY'}}\r\n
\r\n
\r\n {{'On' | translate}} {{' '}} {{party.StartDate | localizeDate:'DD MMM YYYY'}}\r\n
\r\n
\r\n
\r\n
\r\n {{'SessionCharge' | translate}}\r\n {{OperationCurrency}}{{'\r\n '}}{{party.RatePlan?.TotalRatePlan | currencyDecimalFormatter}}\r\n {{OperationCurrency}}{{'\r\n '}}{{ 0 | currencyDecimalFormatter}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {{'total'| translate}}\r\n {{OperationCurrency}}{{'\r\n '}}{{party.RatePlan?.TotalRatePlan | currencyDecimalFormatter}}\r\n {{OperationCurrency}}{{'\r\n '}}{{ 0 | currencyDecimalFormatter}}\r\n
\r\n
\r\n {{'Deposit'| translate}}\r\n {{OperationCurrency}}{{'\r\n '}}{{party.RatePlan?.TotalDepositAmount| currencyDecimalFormatter}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n edit\r\n {{'edit' | translate}}\r\n
\r\n {{' '}}\r\n
\r\n delete\r\n {{'remove' | translate}}\r\n
\r\n
\r\n {{'ViewSummary' | translate}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n {{gs.minutes}}\r\n {{'mins' | translate}} {{gs.seconds}} {{'secs'\r\n |\r\n translate}}\r\n
\r\n
{{'leftForBooking' | translate}}
\r\n
\r\n
\r\n
\r\n {{'PaymentSummary' | translate}}\r\n
\r\n
\r\n
\r\n
\r\n {{'SubTotal' | translate}}\r\n {{OperationCurrency}}{{'\r\n '}}{{TotalCartValue | currencyDecimalFormatter}}\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n {{'TotalPayable'| translate}}\r\n {{OperationCurrency}}{{'\r\n '}}{{TotalCartPayment | currencyDecimalFormatter}}\r\n
\r\n
\r\n\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n\r\n
\r\n
{{'YourCartisEmpty' | translate}}\r\n
\r\n
\r\n
","import { AfterViewInit, Component, HostListener, OnInit } from '@angular/core';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport moment from 'moment';\r\nimport { Subscription } from 'rxjs';\r\nimport { PopupMessageComponent } from 'src/app/shared/components/popup-message/popup-message.component';\r\nimport { ActivityTabs, BookingBehavior, buttonTypes, ComponentTypes } from 'src/app/shared/constants/commonenums';\r\nimport { ButtonValue } from 'src/app/shared/dynamicform/models/common-models';\r\nimport { ComponentDetails } from 'src/app/shared/dynamicform/models/popup.interface';\r\nimport { OpenBookingDTO } from 'src/app/shared/Models/OpenBookingDTO';\r\nimport { PartyType, PaymentGateways, PaymentStates } from 'src/app/shared/Models/PartyModels';\r\nimport { ValidationMessageType } from 'src/app/shared/Models/ResultModels';\r\nimport { BookedSessionsDTO, BookingActivity, ClassType, SessionBookingDTO } from 'src/app/shared/Models/SessionBookingDTO';\r\nimport { LockCartDTO, RegisterReservationAttemptCartDTO } from 'src/app/shared/Models/SlotLockModels';\r\nimport { operationType } from 'src/app/shared/Models/WidgetSettingsModels';\r\nimport { GuestService } from 'src/app/shared/services/guest.service';\r\nimport { PopupService } from 'src/app/shared/services/popup.service';\r\nimport { Utilities } from 'src/app/shared/utilities/utilities';\r\nimport { environment } from 'src/environments/environment';\r\n\r\n@Component({\r\n selector: 'app-cart-details',\r\n templateUrl: './cart-details.component.html',\r\n styleUrls: ['./cart-details.component.scss']\r\n})\r\nexport class CartDetailsComponent extends Utilities implements OnInit, AfterViewInit {\r\n CartList: any = [];\r\n proceedBtn: ButtonValue;\r\n cancelBtn: ButtonValue;\r\n continueBtn: ButtonValue;\r\n backToSummaryBtn: ButtonValue;\r\n OperationCurrency: any;\r\n charges = [{\r\n key: 'Session Charge',\r\n value: '280'\r\n }];\r\n Total = 890;\r\n Subscriptions: Subscription = new Subscription();\r\n IframeURL: SafeResourceUrl;\r\n PaymentGateway: PaymentGateways;\r\n paymentData: any;\r\n isSplitPayment: any;\r\n waiverFormTrancationId: any;\r\n reservationAttemptIDsList: any;\r\n cartLockResultIds: any = [];\r\n IsLockTimer = false;\r\n TotalCartValue = 0;\r\n TotalCartPayment = 0;\r\n showIframeURL = false;\r\n cancelBookingBtn: ButtonValue;\r\n showNoResults = false;\r\n availableSpecialMeals = [];\r\n clearCartDialogRef: MatDialogRef;\r\n showIframeLoader = false;\r\n cancelledCartItems = false;\r\n\r\n constructor(public gs: GuestService, public ts: TranslateService, private sanitizer: DomSanitizer,\r\n private ps: PopupService, public dialog: MatDialog) {\r\n super(dialog);\r\n this.gs.TabChange$.subscribe(data => {\r\n if (data === ActivityTabs.CartDetails && this.cancelledCartItems) {\r\n this.refreshCartDetails();\r\n }\r\n })\r\n }\r\n\r\n ngOnInit(): void {\r\n\r\n this.getCartList();\r\n this.proceedBtn = {\r\n type: buttonTypes.confirmBtn,\r\n label: this.ts.instant('proceedPayment'),\r\n customclass: \"payment-container__custom-class\"\r\n };\r\n this.cancelBtn = {\r\n type: buttonTypes.cancelBtn,\r\n label: this.ts.instant('clearCart'),\r\n customclass: \"payment-container__custom-class\"\r\n };\r\n this.continueBtn = {\r\n type: buttonTypes.cancelBtn,\r\n label: this.ts.instant('continueBooking'),\r\n customclass: \"payment-container__custom-class\"\r\n };\r\n this.backToSummaryBtn = {\r\n type: buttonTypes.confirmBtn,\r\n label: this.ts.instant('BackToCartSummary'),\r\n customclass: \"payment-container__custom-class\",\r\n disbaledproperity: false\r\n }\r\n\r\n this.cancelBookingBtn = {\r\n type: buttonTypes.cancelBtn,\r\n label: this.ts.instant('cancel'),\r\n customclass: \"payment-container__custom-class\"\r\n };\r\n\r\n this.Subscriptions.add(\r\n this.gs.overlapBookingproceedEvent.subscribe(x=>{\r\n if(x.proceedOverlapBooking && !x.isOverlapErrorFromValidateCartApi) {\r\n this.bookCartData();\r\n }\r\n })\r\n )\r\n }\r\n\r\n generateCartId() {\r\n if (this.CartList && this.CartList.length) {\r\n this.CartList.forEach((cartItem, index) => {\r\n cartItem.CartId = 'CartItem' + index\r\n cartItem.TableList = cartItem.TableNames?.split(',');\r\n cartItem.StaffsList = cartItem.Staffs?.split(',')\r\n });\r\n }\r\n }\r\n getCartList() {\r\n this.CartList = JSON.parse(sessionStorage.getItem('CartList'));\r\n if (this.CartList && this.CartList.length) {\r\n this.generateCartId();\r\n this.gs.cartCount = this.CartList.length;\r\n this.showNoResults = false;\r\n } else {\r\n this.showNoResults = true;\r\n }\r\n this.OperationCurrency = this.gs.restaurantWidgetSettings$.value.OperationCurrency;\r\n this.availableSpecialMeals = this.gs.restaurantWidgetSettings$.value.AvailableSpecialMeals;\r\n }\r\n\r\n refreshCartDetails() {\r\n this.getCartList();\r\n if (this.CartList && this.CartList.length) {\r\n this.LockCartData();\r\n }\r\n this.gs.editFromCart = false;\r\n this.gs.isbookingCompleted = false;\r\n this.cancelledCartItems = false;\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.Subscriptions.add(this.gs.cancelledCartItems$.subscribe(action => {\r\n if (action === true) {\r\n this.CartList = JSON.parse(sessionStorage.getItem('CartList'));\r\n this.showNoResults = true;\r\n this.cancelledCartItems = true;\r\n }\r\n }));\r\n this.Subscriptions.add(this.ps.actionEnabled$.subscribe(x => {\r\n if (x == ComponentTypes.clearCart && this.clearCartDialogRef) {\r\n this.clearCartDialogRef.close();\r\n this.clearCart();\r\n }\r\n }));\r\n if (this.CartList && this.CartList.length) {\r\n this.LockCartData();\r\n }\r\n this.gs.editFromCart = false;\r\n this.gs.isbookingCompleted = false;\r\n }\r\n\r\n proceedBooking() {\r\n this.gs.editFromCart = false;\r\n this.registerReservationAttempt();\r\n }\r\n\r\n\r\n registerReservationAttempt() {\r\n let req = [] as RegisterReservationAttemptCartDTO[];\r\n this.CartList.filter(x => x.SlotLockResult).forEach(cartObj => {\r\n req.push({\r\n ActivityId: cartObj.SpecialMealId,\r\n PartySize: Number(cartObj.Size),\r\n Sessions: cartObj.Sessions,\r\n Slots: cartObj.RatePlanTimeSlots ? cartObj.RatePlanTimeSlots : [],\r\n BookingBehavior: cartObj.BookingBehavior,\r\n TableIds: cartObj.TableIds,\r\n InstructorIds: cartObj.StaffId,\r\n CoverTypes: cartObj.CoverTypes,\r\n BookingTypes: cartObj.BookingTypes,\r\n ClientIP: '',\r\n ForceIFrameUrl: false,\r\n SeatingTypeIds: [],\r\n PartyId: null,\r\n CartId: cartObj.CartId,\r\n IsMemberActive: cartObj.Contact.IsMemberActive,\r\n MemberType: cartObj.Contact.MemberType\r\n });\r\n });\r\n this.Subscriptions.add(this.gs.RegisterReservationAttemptCart(req).subscribe(data => {\r\n this.paymentData = data;\r\n if (data.CreditCardIframeUrl) {\r\n this.PaymentGateway = data.PaymentGateway\r\n this.setReservationAttemptResponse()\r\n\r\n this.reservationAttemptIDsList = this.getRegisterreservationAttemptIds()\r\n this.TotalCartPayment = data.PaymentAmount;\r\n this.showIframeURL = true;\r\n this.LoadPayment(data.CreditCardIframeUrl);\r\n } else if (data.ShouldCreditCardBeEntered && !data.CreditCardIframeUrl) {\r\n this.gs.setMessageState(this.ts.instant('SorryForPaymentOffline'), 0);\r\n }\r\n else {\r\n this.showIframeURL = false;\r\n this.bookCartData();\r\n }\r\n }));\r\n }\r\n\r\n setReservationAttemptResponse() {\r\n this.CartList.forEach((cartItem) => {\r\n var attemptResponse = this.paymentData.ResponseDTOs.filter(response => response.CartId == cartItem.CartId)[0];\r\n if (attemptResponse) {\r\n cartItem.ReservationAttemptResponse = attemptResponse;\r\n }\r\n });\r\n }\r\n\r\n getRegisterreservationAttemptIds() {\r\n return this.paymentData.ResponseDTOs.map((attempt) => {\r\n if (attempt.Slots && attempt.Slots.length > 0) {\r\n return attempt.Slots.map((slot) => { return slot.ReservationAttemptId }).flat();\r\n }\r\n else {\r\n return attempt.ReservationAttemptId;\r\n }\r\n }).flat();\r\n }\r\n\r\n LoadPayment(iframeURl) {\r\n if (iframeURl) {\r\n this.showIframeLoader = true;\r\n this.IframeURL = this.sanitizer.bypassSecurityTrustResourceUrl(iframeURl + \"&origin=\" + window.location.origin);\r\n setTimeout(() => {\r\n this.showIframeLoader = false;\r\n }, 5000)\r\n }\r\n }\r\n\r\n bookCartData() {\r\n this.CartList = this.CartList.filter(x => x.SlotLockResult);\r\n this.CartList.forEach(cartItem => {\r\n this.mapLockAndReservationAttemptInfo(cartItem);\r\n });\r\n this.Subscriptions.add(this.gs.bookCart(this.CartList, this.gs.allowOverlapBookings).subscribe(data => {\r\n if (data?.Payload && data?.ValidationMessages?.filter(msg => msg.Type == ValidationMessageType.Error || msg.Type == ValidationMessageType.Consent).length === 0 && !data?.ExceptionMessage) {\r\n this.gs.setMessageState(this.ts.instant('cartBookSuccess'), 1);\r\n this.gs.isbookingCompleted = true;\r\n this.gs.offTimer();\r\n const bookedParties = data;\r\n this.CartList.forEach(item => {\r\n item.Parties = bookedParties.filter(x => x.CartId === item.CartId);\r\n return item;\r\n });\r\n this.gs.bookedCartList = this.CartList;\r\n this.showIframeURL = false;\r\n sessionStorage.setItem('CartList', JSON.stringify([]));\r\n this.gs.cartCount = 0;\r\n }\r\n }));\r\n }\r\n\r\n mapLockAndReservationAttemptInfo(cartItem) {\r\n if (cartItem.BookingBehavior == BookingBehavior.ClassOrSession) {\r\n cartItem.Sessions.LockId = cartItem.SlotLockResult?.SlotLockIdDTO?.Id;\r\n cartItem.ReservationAttemptId = cartItem.ReservationAttemptResponse?.ReservationAttemptId;\r\n }\r\n else {\r\n let reservatioAttemptWithSlotMapList = [];\r\n cartItem.Slots.forEach(slot => {\r\n slot.LockId = cartItem.SlotLockResult[slot.Time]?.SlotLockIdDTO?.Id;\r\n });\r\n cartItem.ReservationAttemptResponse?.Slots.forEach(slot => {\r\n reservatioAttemptWithSlotMapList.push({ SlotTime: slot.LocalTime, ReservationAttemptId: slot.ReservationAttemptId });\r\n });\r\n cartItem.ReservationAttemptIdWithSlotDTOList = reservatioAttemptWithSlotMapList\r\n }\r\n }\r\n\r\n cancelBooking() {\r\n const popUpMessage = [{\r\n confirmationMessage: this.ts.instant('confirmClearCartMessage'),\r\n dialogTitle: this.ts.instant('clearCart'),\r\n showAlert: true,\r\n isScrolable: true\r\n }];\r\n const height = '300px';\r\n const componentDetails: ComponentDetails = Utilities.setComponentDetails(PopupMessageComponent, 'small', '', popUpMessage,\r\n popUpMessage[0].dialogTitle);\r\n this.clearCartDialogRef = this.openCustomPopup(componentDetails, ComponentTypes.clearCart, '450px', height, true, '', this.ts.instant('Yes'),\r\n this.ts.instant('No'), true)\r\n }\r\n\r\n clearCart() {\r\n sessionStorage.setItem('CartList', JSON.stringify([]));\r\n this.gs.CartBookingList$.next({});\r\n this.gs.TabChange$.next(ActivityTabs.BookingSelection);\r\n }\r\n\r\n continueBooking() {\r\n this.gs.offTimer();\r\n if (this.cartLockResultIds && this.cartLockResultIds.length) {\r\n this.gs.unlockCartURL(this.cartLockResultIds);\r\n }\r\n this.gs.setMessageState('', 0);\r\n this.gs.SaveBookingObj = null;\r\n this.gs.SessionBookingObj = {} as SessionBookingDTO;\r\n this.gs.slots_holder = [];\r\n this.gs.selectedOpenBookingSlots = {};\r\n this.gs.openBookingData = {} as OpenBookingDTO;\r\n this.gs.SelectedClassSchedule$.next([]);\r\n this.gs.operation = operationType.create;\r\n this.gs.BookNew$.next(true);\r\n this.gs.bookingSection$.next(BookingActivity.ClassBooking);\r\n this.gs.TabChange$.next(ActivityTabs.BookingSelection);\r\n this.gs.RatePlanList$.next(null);\r\n this.gs.ispaymentInvolvedInfo = null;\r\n this.gs.reservationAttemptInfo = null;\r\n this.gs.additionalGuestPage = false;\r\n this.gs.additionalGuestRequired = 0;\r\n this.gs.slotLockId = 0;\r\n this.gs.RefundAmount = 0;\r\n this.gs.TotalRefundAmount = 0;\r\n this.gs.lockResult = null;\r\n this.gs.editPartyData$.next(null);\r\n this.gs.BookAnotherReservation.next(true);\r\n this.gs.editFromCart = false;\r\n this.gs.isSummaryFromCart = false;\r\n }\r\n\r\n editItem(party, index) {\r\n if (this.cartLockResultIds && this.cartLockResultIds.length) {\r\n this.gs.unlockCartURL(this.cartLockResultIds);\r\n }\r\n\r\n let partyData = this.setPartyDetails(party, index);\r\n this.gs.operation = operationType.edit;\r\n this.gs.selectedCartIndex = index;\r\n partyData.Slots = [];\r\n this.setBookingType(party);\r\n if (party.BookingBehavior === BookingBehavior.ClassOrSession) {\r\n this.setPartySessionClassInfo(partyData, party);\r\n this.gs.SelectedActivity$.next(party.SelectedActivity);\r\n this.gs.TabChange$.next(ActivityTabs.ActivitySelection);\r\n } else if (party.BookingBehavior === BookingBehavior.OpenBooking) {\r\n partyData.Slots = party.Slots;\r\n this.gs.TabChange$.next(ActivityTabs.BookingSelection)\r\n } else if (party.BookingBehavior === BookingBehavior.PrivateLesson) {\r\n partyData.Slots = party.Slots;\r\n this.gs.SelectedActivity$.next(party.SelectedActivity);\r\n this.gs.TabChange$.next(ActivityTabs.PrivateLesson)\r\n }\r\n this.gs.editFromCart = true;\r\n this.gs.offTimer();\r\n this.gs.editPartyData$.next(partyData);\r\n }\r\n setPartyDetails(partyData, index) {\r\n let party = {} as any;\r\n party.Size = partyData.Size;\r\n party.CoverTypeQuantities = partyData.CoverTypes;\r\n party.BookingTypeQuantities = partyData.BookingTypes;\r\n party.StartDate = partyData.StartDate\r\n party.EndDate = partyData.EndDate;\r\n party.TableIds = partyData.TableIds;\r\n party.StaffId = partyData.InstructorIds;\r\n party.StaffIds = partyData.InstructorIds;\r\n party.Contact = partyData.Contact;\r\n party.BookedSessions = [];\r\n party.ReservedFor = partyData.StartDate;\r\n party.Location = partyData.TableIds;\r\n party.WaiverFormTrancationId = partyData.WaiverFormTrancationId;\r\n return party;\r\n }\r\n\r\n setPartySessionClassInfo(partyData, party) {\r\n\r\n if (party.Sessions.Sessions && party.Sessions.Sessions.length) {\r\n party.Sessions.Sessions.forEach(session => {\r\n session.SessionIds.forEach(id => {\r\n partyData.BookedSessions.push({\r\n Id: null,\r\n PartyId: null,\r\n ActivitySessionId: id,\r\n BookedDate: session.Date,\r\n BookingSize: partyData.Size,\r\n SessionState: 0,\r\n RatePlanAmount: null\r\n })\r\n });\r\n\r\n });\r\n } else {\r\n partyData.SessionGroupId = party.SessionGroupId;\r\n }\r\n }\r\n\r\n removeItem(party, index) {\r\n const removeItem = this.CartList.splice(index, 1);\r\n this.calculateRatePlanTotal();\r\n this.gs.setMessageState(this.ts.instant('reservationRemoved'), 1)\r\n if (removeItem.SlotLockResult) {\r\n let unlockCartObj = [];\r\n unlockCartObj.push(this.cartLockResultIds[index]);\r\n this.gs.unlockCartURL(unlockCartObj);\r\n }\r\n this.gs.cartCount = this.CartList.length;\r\n sessionStorage.setItem('CartList', JSON.stringify(this.CartList));\r\n if (!this.CartList.length) {\r\n this.gs.TabChange$.next(ActivityTabs.BookingSelection)\r\n }\r\n }\r\n LockCartData() {\r\n let req = [] as LockCartDTO[];\r\n this.CartList.forEach(cartObj => {\r\n req.push({\r\n ActivityId: cartObj.Id,\r\n Sessions: cartObj.Sessions ? cartObj.Sessions?.Sessions : null,\r\n SessionGroupId: cartObj.SessionGroupId ? cartObj.SessionGroupId : null,\r\n StartDate: cartObj.StartDate,\r\n LockIdToIgnore: null,\r\n ClassType: cartObj.SpecialMealId ? this.setClassType(cartObj.SpecialMealId) : null,\r\n ReservationIdToIgnore: null,\r\n PartySize: Number(cartObj.Size),\r\n SeatingAreaId: cartObj.SeatingAreaId,\r\n IsCommunalTable: false,\r\n FromWebsite: true,\r\n SeatingTypeId: cartObj.SeatingTypeId,\r\n Slots: cartObj.RatePlanTimeSlots ? cartObj.RatePlanTimeSlots : [],\r\n BookingBehaviour: cartObj.BookingBehavior,\r\n TableIds: cartObj.TableIds,\r\n InstructorIds: cartObj.StaffId ? cartObj.StaffId : null,\r\n GuestTypes: cartObj.CoverTypes,\r\n BookingTypes: cartObj.BookingTypes,\r\n IsMemberActive: cartObj.Contact.IsMemberActive,\r\n MemberType: cartObj.Contact.MemberType,\r\n CartId: cartObj.CartId\r\n })\r\n });\r\n this.Subscriptions.add(this.gs.LockCartSessionSlots(req).subscribe(data => {\r\n this.setCartLockandRatePlanData(data.Payload);\r\n }));\r\n }\r\n setClassType(id) {\r\n if (id !== null) {\r\n let meal = this.availableSpecialMeals.find(meal => meal.Id === id);\r\n return meal.ClassType;\r\n } else {\r\n return null;\r\n }\r\n }\r\n setCartLockandRatePlanData(CartLockData) {\r\n this.cartLockResultIds = [];\r\n this.CartList.forEach((cartItem, index) => {\r\n let cartItemLockInfo = CartLockData.filter(lck => lck.CartId == cartItem.CartId)[0];\r\n if (cartItemLockInfo) {\r\n cartItem.SlotLockResult = cartItemLockInfo.SlotLockResultDTO;\r\n cartItem.RatePlan = cartItemLockInfo.RatePlanTotal;\r\n this.setLockIds(cartItemLockInfo);\r\n if (cartItem.RatePlan?.TotalRatePlan) {\r\n }\r\n return cartItem;\r\n }\r\n });\r\n this.calculateRatePlanTotal();\r\n }\r\n\r\n calculateRatePlanTotal() {\r\n this.TotalCartValue = 0;\r\n this.CartList.forEach((cartItem, index) => {\r\n if (cartItem.RatePlan) {\r\n this.TotalCartValue = this.TotalCartValue + (cartItem.RatePlan.TotalDepositAmount > 0 ? cartItem.RatePlan.TotalDepositAmount : cartItem.RatePlan.TotalRatePlan);\r\n //this.TotalMembershipDiscount = this.TotalMembershipDiscount + ratePlanData.TotalMemberShipVariant;\r\n }\r\n });\r\n }\r\n\r\n setLockIds(slotLockData) {\r\n if (slotLockData && slotLockData !== null) {\r\n let cartItem = this.CartList.filter(item => item.CartId == slotLockData.CartId)[0];\r\n if (slotLockData.SlotLockResultDTO?.SlotLockIdDTO?.Id) {\r\n this.setTimer(slotLockData.SlotLockResultDTO);\r\n this.cartLockResultIds.push({ LockId: slotLockData.SlotLockResultDTO?.SlotLockIdDTO.Id, Type: cartItem?.BookingBehavior });\r\n } else {\r\n if (slotLockData.SlotLockResultDTO) {\r\n Object.keys(slotLockData.SlotLockResultDTO).forEach(key => {\r\n if (slotLockData.SlotLockResultDTO[key]?.SlotLockIdDTO?.Id) {\r\n this.setTimer(slotLockData.SlotLockResultDTO[key]);\r\n this.cartLockResultIds.push({ LockId: slotLockData.SlotLockResultDTO[key]?.SlotLockIdDTO?.Id, Type: cartItem?.BookingBehavior });\r\n }\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n setTimer(lockResult) {\r\n if (!this.IsLockTimer) {\r\n this.IsLockTimer = true;\r\n let timer = moment(lockResult.ExpiresAt).diff(moment(lockResult.LockedAt), \"seconds\");\r\n if (timer) {\r\n this.gs.showTimer = true;\r\n this.gs.runTimer(timer);\r\n }\r\n }\r\n }\r\n\r\n\r\n @HostListener('window:message', ['$event'])\r\n onMessage({ origin, data }) {\r\n if (origin != environment.authorizeIframeResponseOrigin && origin != environment.rGuestPayIframeResponsOrigin) { // set your origin\r\n return false;\r\n }\r\n var rGuestPayRespose = data;\r\n var payResponse = data;\r\n if (typeof data != \"object\") {\r\n rGuestPayRespose = JSON.parse(data);\r\n }\r\n if ((data.type == \"txn-completed\" && data.transactionInfo && data.transactionInfo.transactionInfo && data.transactionInfo.transactionInfo.payments) || (rGuestPayRespose && (rGuestPayRespose.code || rGuestPayRespose.gatewayResponseData))) {\r\n if (this.PaymentGateway == PaymentGateways.AuthorizePay) { //Authorize Pay \r\n\r\n var transInfo = payResponse.transactionInfo.transactionInfo;\r\n\r\n if (transInfo.errorMessage || transInfo.successCode != 1) {\r\n if (transInfo.errorMessage) {\r\n this.gs.setMessageState(transInfo.errorMessage, 0);\r\n }\r\n else {\r\n this.gs.setMessageState(this.ts.instant(\"CardInformationProcessNotCompleted\"), 0);\r\n }\r\n } else if (payResponse && transInfo && transInfo.successCode == 1) {\r\n\r\n var transactions = this.processTransactions(transInfo);\r\n var dto = {\r\n RestaurantId: this.gs.restaurantWidgetSettings$.value.RestaurantId,\r\n PartyId: null,\r\n SlotLockIds: this.cartLockResultIds.map(x => x.LockId),\r\n BookingID: null,\r\n TokenType: \"\",\r\n PaymentAmount: transInfo.paidAmount,\r\n PaymentGateway: this.PaymentGateway,\r\n AuthorizeTransactions: transactions,\r\n ReservationAttemptIds: this.reservationAttemptIDsList,\r\n SplitPaymentReload: this.isSplitPayment\r\n };\r\n\r\n this.UpdateReservationAttempt(dto);\r\n } else {\r\n this.gs.setMessageState(this.ts.instant(\"CardInformationProcessNotCompleted\"), 0);\r\n }\r\n }\r\n else {\r\n if (rGuestPayRespose.code && rGuestPayRespose.code != \"100\") {\r\n rGuestPayRespose = JSON.parse(data);\r\n if (rGuestPayRespose.validationErrors && rGuestPayRespose.validationErrors.length > 0) {\r\n var errorString = \"\";\r\n rGuestPayRespose.validationErrors.forEach(function (error, i, arr) {\r\n errorString = error.fieldName + \" \" + error.value + \"\\n\";\r\n })\r\n this.gs.setMessageState(errorString, 0);\r\n }\r\n else if (rGuestPayRespose && rGuestPayRespose.gatewayResponseData && rGuestPayRespose.gatewayResponseData.message) {\r\n alert(rGuestPayRespose.gatewayResponseData.message);\r\n }\r\n else {\r\n this.gs.setMessageState(this.ts.instant(\"CardInformationProcessNotCompleted\"), 0);\r\n }\r\n }\r\n else if (rGuestPayRespose && rGuestPayRespose.gatewayResponseData && rGuestPayRespose.gatewayResponseData.code == \"100\") {\r\n let callbackDto = {\r\n ReservationAttemptIds: this.reservationAttemptIDsList,\r\n CardNumber: rGuestPayRespose.cardInfo.accountNumberMasked,\r\n ExpirationDate: new Date(data.cardInfo.expirationYearMonth.substring(0, 4) + '-' + data.cardInfo.expirationYearMonth.substring(4) + '-01'),\r\n CVC: \"\",\r\n FirstNameHolder: \"\",\r\n LastNameHolder: \"\",\r\n AddressLine1: \"\",\r\n AddressLine2: \"\",\r\n City: \"\",\r\n State: \"\",\r\n PostalCode: \"\",\r\n TokenType: \"\",\r\n Token: data.token\r\n };\r\n this.UpdateReservationAttempt(callbackDto);\r\n }\r\n else {\r\n this.gs.setMessageState(this.ts.instant(\"CardInformationProcessNotCompleted\"), 0);\r\n }\r\n }\r\n }\r\n else if (data.type == \"txn-completed\" && data.transactionInfo) {\r\n this.waiverFormTrancationId = data.transactionInfo.authorizeTransactionID;\r\n let invoiceId = data.transactionInfo.invoiceID\r\n if (this.gs.ispaymentInvolvedInfo && this.gs.ispaymentInvolvedInfo.CreditCardRequired) {\r\n if (this.gs.reservationAttemptInfo) {\r\n if (this.gs.reservationAttemptInfo.CreditCardIFrameURL) {\r\n this.LoadPayment(this.gs.reservationAttemptInfo.CreditCardIFrameURL)\r\n }\r\n else {\r\n this.gs.setMessageState(this.ts.instant('SorryForPaymentOffline'), 0);\r\n }\r\n } else {\r\n this.registerReservationAttempt();\r\n }\r\n }\r\n else {\r\n this.bookCartData();\r\n }\r\n }\r\n }\r\n\r\n processTransactions(transInfo) {\r\n var transactions = transInfo.payments;\r\n var authorizeTransactions = [];\r\n\r\n if (transactions && transactions.length > 0) {\r\n transactions.forEach(transaction => {\r\n if (transaction.successCode == 1) {\r\n var name = '';\r\n var paymentDetail = transaction.paymentDetail;\r\n var roomDetails = {\r\n RoomNumber: null,\r\n ConfirmationNumber: null,\r\n LastName: null\r\n };\r\n var pointsDetails = {\r\n AccountNumber: null,\r\n BucketName: null,\r\n Name: null,\r\n LoyaltyTransactionId: null\r\n };\r\n\r\n if (transaction.paymentType == 1 || transaction.paymentType == 2) { //credit card\r\n name = paymentDetail.accountName;\r\n }\r\n\r\n if (transaction.paymentType == 3) { //Post to room charges\r\n roomDetails.RoomNumber = paymentDetail.cardIssuer;\r\n roomDetails.ConfirmationNumber = paymentDetail.cardNumber;\r\n roomDetails.LastName = paymentDetail.accountName;\r\n name = paymentDetail.accountName;\r\n }\r\n if (transaction.paymentType == 5) { //Loyalty\r\n pointsDetails.BucketName = paymentDetail.tender;\r\n pointsDetails.AccountNumber = paymentDetail.cardNumber;\r\n pointsDetails.Name = paymentDetail.accountName;\r\n pointsDetails.LoyaltyTransactionId = paymentDetail.followOnData;\r\n name = paymentDetail.accountName;\r\n }\r\n var dto = {\r\n CardNumber: paymentDetail.cardNumber ? paymentDetail.cardNumber : \"\",\r\n ExpirationDate: paymentDetail.expirationDate ? paymentDetail.expirationDate.substring(0, 4) + paymentDetail.expirationDate.substring(4) : \"\",\r\n Name: name ? name : \"\",\r\n Token: paymentDetail.token ? paymentDetail.token : null,\r\n TransactionFollowOnData: paymentDetail.followOnData ? paymentDetail.followOnData : null,\r\n AuthorizeTransactionID: transaction.authorizeTransactionID,\r\n Amount: transaction.paidAmount,\r\n PaymentType: transaction.paymentType ? transaction.paymentType : null,\r\n InvoiceID: transaction.invoiceID ? transaction.invoiceID : null,\r\n TransactionDate: transaction.transactionsDate ? transaction.transactionsDate : null,\r\n RoomNumber: roomDetails && roomDetails.RoomNumber ? roomDetails.RoomNumber : null,\r\n ConfirmationNumber: roomDetails && roomDetails.ConfirmationNumber ? roomDetails.ConfirmationNumber : null,\r\n BucketName: pointsDetails && pointsDetails.BucketName ? pointsDetails.BucketName : null,\r\n LoyaltyAccountNumber: pointsDetails && pointsDetails.AccountNumber ? pointsDetails.AccountNumber : null,\r\n LoyaltyTransactionId: pointsDetails && pointsDetails.LoyaltyTransactionId ? pointsDetails.LoyaltyTransactionId : null,\r\n IssuerType: pointsDetails && paymentDetail.tender ? paymentDetail.tender : null,\r\n AuthCode : paymentDetail?.authCode,\r\n CCType : paymentDetail?.cardIssuerType,\r\n CCTransactionId : paymentDetail?.payTransactionID,\r\n };\r\n authorizeTransactions.push(dto);\r\n } else if (transaction.errorMessage) {\r\n this.gs.setMessageState(transaction.errorMessage, 0);\r\n }\r\n });\r\n return authorizeTransactions;\r\n }\r\n }\r\n\r\n UpdateReservationAttempt(Dto) {\r\n this.gs.UpdateReservationAttempt(Dto).subscribe(data => {\r\n this.gs.setMessageState('', 0);\r\n if (data && (data.ErrorMessage || data.ExceptionMessage || (data.ValidationMessages && data.ValidationMessages.length > 0) || data.length == 0)) {\r\n if (data.ErrorMessage && data.ErrorMessage.length > 0) {\r\n var sorrysomethingwentwromg = this.ts.instant('SorryWeGotSomeErrorWhileProcessing');\r\n var CCUprocessableTryAgainErrorMessage = this.ts.instant('CCUprocessableTryAgainErrorMessage');\r\n var ImportantErrorMessage = this.ts.instant('ImportantErrorMessage');\r\n var CreditCardAuthorizationError = this.ts.instant('CreditCardAuthorizationError');\r\n var TryAgainMessage = this.ts.instant('TryAgainMessage');\r\n var CardNumbershouldContainOnlyDigits = this.ts.instant('CardNumbershouldContainOnlyDigits');\r\n var CardNumberShouldConsists13To16Digits = this.ts.instant('CardNumberShouldConsists13To16Digits');\r\n var CardNumberShouldNotBlank = this.ts.instant('CardNumberShouldNotBlank');\r\n var SorryWeGotSomeErrorCardExpired = this.ts.instant('SorryWeGotSomeErrorWhileProcessingCardExpired');\r\n if (data.ErrorMessage == \"Please try it one more time, if the problem repeats, contact to rGuestSeat@Agilysys.com\")\r\n var url = sorrysomethingwentwromg + TryAgainMessage;\r\n else if (data.ErrorMessage == \"We're sorry, but we couldn�t process your credit card based on the information you provided. Please try again.\")\r\n var url = sorrysomethingwentwromg + CCUprocessableTryAgainErrorMessage;\r\n else if (data.ErrorMessage == \"[IMPORTANT] Some error happens at the moment of database saving. There is a probability that the payment transaction has performed successfully but this fact hasn't been saved properly. Don't try to do it one more time. Please, contact rGuestSeat@Agilysys.com regarding this error\")\r\n var url = sorrysomethingwentwromg + ImportantErrorMessage;\r\n else if (data.ErrorMessage == \"The provided credit card hasn't been authorized succesfully\")\r\n var url = sorrysomethingwentwromg + CreditCardAuthorizationError;\r\n else if (data.ErrorMessage.indexOf(\"The card is expired\") > 0)\r\n var url = SorryWeGotSomeErrorCardExpired;\r\n else if (data.ErrorMessage == \"The card number should consist of only digits\")\r\n var url = sorrysomethingwentwromg + CardNumbershouldContainOnlyDigits;\r\n else if (data.ErrorMessage == \"The card number should consist of from 13 to 16 digits\")\r\n var url = sorrysomethingwentwromg + CardNumberShouldConsists13To16Digits;\r\n else if (data.ErrorMessage == \"The card number shouldn't be blank\")\r\n var url = sorrysomethingwentwromg + CardNumberShouldNotBlank;\r\n else\r\n var url = sorrysomethingwentwromg + data.ErrorMessage;\r\n this.gs.setMessageState(url, 0);\r\n }\r\n else {\r\n var url = sorrysomethingwentwromg + TryAgainMessage;\r\n this.gs.setMessageState(url, 0);\r\n }\r\n this.gs.setMessageState(url, 0);\r\n } else if (data.RedirectUrl) {\r\n this.gs.offTimer();\r\n this.LoadPayment(data.RedirectUrl);\r\n setTimeout(() => {\r\n this.gs.setMessageState(this.ts.instant('yourCurrentPaymentOf') + ' ' + this.gs.restaurantWidgetSettings$.value.OperationCurrency + Dto.PaymentAmount.toFixed(this.gs.restaurantWidgetSettings$.value.NumberOfFractionalDigits) + this.ts.instant('isProcessedSuccessfullyPleaseProceedToPay') + this.gs.restaurantWidgetSettings$.value.OperationCurrency + data.PendingAmount.toFixed(this.gs.restaurantWidgetSettings$.value.NumberOfFractionalDigits) + this.ts.instant('toPlaceYourReservation'), 1);\r\n }, 1);\r\n let timer = moment(data.ExtendedSlotLockResultDTO.ExpiresAt).diff(moment(data.ExtendedSlotLockResultDTO.LockedAt), \"seconds\");\r\n this.gs.showTimer = true;\r\n this.gs.runTimer(timer);\r\n this.isSplitPayment = true;\r\n this.gs.isSplitPayment$.next(true);\r\n\r\n }\r\n else {\r\n this.gs.isSplitPayment$.next(false);\r\n const ReservationIds = this.reservationAttemptIDsList; // this.paymentData.Slots?.map(x => x.ReservationAttemptId);\r\n this.gs.GetRegisterMultipleReservationAttempt(ReservationIds).subscribe(data => {\r\n if (data) {\r\n let isAuthorized = true;\r\n data.forEach(reservationData => {\r\n if (reservationData.State != PaymentStates.Authorized && reservationData.State != PaymentStates.ChargeCaptured) {\r\n isAuthorized = false;\r\n }\r\n });\r\n if (isAuthorized) {\r\n this.bookCartData();\r\n } else {\r\n this.gs.setMessageState(this.ts.instant(\"CreditCardNotBeProcessed\"), 0);\r\n }\r\n }\r\n });\r\n\r\n }\r\n });\r\n }\r\n\r\n viewPartySummary(party) {\r\n this.gs.setMessageState('', 0);\r\n const parties = party.Parties;\r\n let partyType = PartyType.Reservation;\r\n if (party.SelectedActivity) {\r\n partyType = party.SelectedActivity.IsForStandbyReservations ? PartyType.StandBy : PartyType.Reservation;\r\n this.gs.SelectedActivity$.next(party.SelectedActivity);\r\n }\r\n if (parties && parties.length === 1) {\r\n this.getbyToken(parties[0].Token, '', partyType, party);\r\n } else if (parties && parties.length > 1) {\r\n this.getbyToken('', parties[0].BookingId, partyType, party);\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n this.gs.offTimer();\r\n this.Subscriptions.unsubscribe();\r\n }\r\n\r\n getbyToken(token, bookingId, type, selectedBooking) {\r\n this.Subscriptions.add(this.gs.getByToken(token, bookingId, type).subscribe(party => {\r\n this.setBookingType(selectedBooking);\r\n this.gs.RatePlanList$.next(selectedBooking.RatePlan);\r\n this.gs.isSummaryFromCart = true;\r\n if (bookingId) {\r\n let PartiesData;\r\n if (Array.isArray(party)) {\r\n PartiesData = party;\r\n }\r\n else {\r\n PartiesData = [];\r\n PartiesData.push(party)\r\n }\r\n this.gs.bookingPartiesData$.next(PartiesData);\r\n } else {\r\n if (selectedBooking.BookingBehavior === BookingBehavior.ClassOrSession) {\r\n this.gs.editPartyData$.next(party);\r\n } else {\r\n this.gs.bookingPartiesData$.next([party]);\r\n }\r\n }\r\n this.gs.setAdditionalGuest();\r\n this.gs.TabChange$.next(ActivityTabs.ConfirmationSummary);\r\n }));\r\n }\r\n\r\n setAdditionalGuest() {\r\n const party = this.gs.editPartyData$.value;\r\n this.gs.additionalGuestPage = this.gs.restaurantWidgetSettings$.value.WidgetCustomization.AllowAdditionalGuestDetails;\r\n\r\n this.gs.additionalGuestRequired = party.size > 1 && (!party.SecondaryContacts || !party.SecondaryContacts.length) ? party.size - 1 : 0;\r\n }\r\n\r\n setBookingType(party) {\r\n if (party.BookingBehavior === BookingBehavior.ClassOrSession) {\r\n this.gs.TabChange$.next(ActivityTabs.ActivitySelection);\r\n } else if (party.BookingBehavior === BookingBehavior.OpenBooking) {\r\n this.gs.bookingSection$.next(BookingActivity.OpenBooking)\r\n } else if (party.BookingBehavior === BookingBehavior.PrivateLesson) {\r\n this.gs.bookingSection$.next(BookingActivity.PrivateLesson)\r\n }\r\n }\r\n\r\n backtosummaryBooking() {\r\n this.showIframeURL = false;\r\n }\r\n}\r\n","\r\n
\r\n
\r\n
\r\n {{'rates' | translate}}\r\n
\r\n \r\n \r\n \r\n \r\n \r\n {{slot.TimeRange.Start | date:'dd MMMM, hh:mm a' }} - {{slot.TimeRange.End | date:'hh:mm\r\n a'}}\r\n \r\n \r\n {{slot.TimeRange.Start | localizeDate: 'DD MMMM' }} - {{slot.TimeRange.End | localizeDate: 'DD MMMM'}}\r\n \r\n \r\n \r\n
\r\n
\r\n {{'TotalBaseRate' | translate}}\r\n
\r\n
{{OperationCurrency}} {{slot.RatePlanVariants.TotalBaseRate | currencyDecimalFormatter}}
\r\n
\r\n
\r\n
\r\n {{'LocationVariant' | translate}} ({{'forTotalOf' | translate}}\r\n {{activityService.SessionBookingObj?.BookingSize}}\r\n )\r\n \r\n
\r\n
{{OperationCurrency}}\r\n {{slot.RatePlanVariants.LocationVariant | currencyDecimalFormatter}}
\r\n
\r\n
\r\n
\r\n {{'InstructorVariant' | translate}}({{'forTotalOf' | translate}}\r\n {{activityService.SessionBookingObj?.BookingSize}}\r\n )\r\n
\r\n
{{OperationCurrency}}\r\n {{slot.RatePlanVariants.InstructorVariant | currencyDecimalFormatter}}
\r\n
\r\n
\r\n
\r\n {{'bookingType' | translate}} \r\n
\r\n
\r\n
\r\n
\r\n {{variant.BookingTypeName}}\r\n {{variant.bookingTypes}}\r\n
\r\n
{{OperationCurrency}} {{variant.Variant | currencyDecimalFormatter}}
\r\n
\r\n
\r\n
\r\n {{'coverType' | translate}} \r\n
\r\n
\r\n
\r\n
\r\n {{variant.CoverTypeName}}\r\n {{variant.covers}}\r\n
\r\n
{{OperationCurrency}} {{variant.Variant | currencyDecimalFormatter}}
\r\n
\r\n
\r\n
\r\n {{'MemberShipVariant' | translate}}\r\n
\r\n
{{OperationCurrency}} {{slot.MemberShipVariant | currencyDecimalFormatter}}\r\n
\r\n
\r\n
\r\n
\r\n {{'TotalSessionCharge' | translate}}\r\n
\r\n
{{OperationCurrency}} {{slot.TotalAmount | currencyDecimalFormatter}}
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {{'total' | translate}}\r\n
\r\n
{{OperationCurrency}} {{(ratePlan.TotalRatePlan || 0) | currencyDecimalFormatter }}\r\n
\r\n
\r\n
\r\n
","import { Component, OnInit ,OnDestroy} from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { ClassType } from 'src/app/shared/Models/SessionBookingDTO';\r\nimport { GuestService } from 'src/app/shared/services/guest.service';\r\nimport { ActivitiesService } from '../activities.service';\r\n\r\n@Component({\r\n selector: 'app-rate-plan-details',\r\n templateUrl: './rate-plan-details.component.html',\r\n styleUrls: ['./rate-plan-details.component.scss']\r\n})\r\nexport class RatePlanDetailsComponent implements OnInit, OnDestroy {\r\n Subscriptions: Subscription = new Subscription();\r\n ratePlan: any;\r\n OperationCurrency: any;\r\n isSessionClass: any;\r\n constructor(public activityService: GuestService) {\r\n this.ratePlan = this.activityService.RatePlanList$.value;\r\n this.Subscriptions.add(\r\n this.activityService.RatePlanList$.subscribe(data => {\r\n this.ratePlan = data;\r\n }));\r\n\r\n this.Subscriptions.add(\r\n this.activityService.editPartyData$.subscribe(data => {\r\n this.isSessionClass = data.ClassType === ClassType.Session;\r\n }));\r\n\r\n }\r\n\r\n ngOnInit(): void {\r\n this.OperationCurrency = this.activityService.restaurantWidgetSettings$.value.OperationCurrency;\r\n }\r\n ngOnDestroy(): void {\r\n if (this.Subscriptions) { this.Subscriptions.unsubscribe(); }\r\n }\r\n}\r\n","
\r\n
\r\n

{{'ActivitySchedules' | translate}}

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n {{dateSchedule.StartDate | localizeDate: 'dddd, MMMM DD YYYY'}}\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n {{'session' | translate}} {{sessionIndex + 1}}\r\n
\r\n
\r\n {{session.Start | localizeDate: 'LT'}} - {{session.End | localizeDate: 'LT'}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {{'TotalBaseRate' | translate}}\r\n
\r\n
{{OperationCurrency}}\r\n {{session.RatePlanVariants.TotalBaseRate | currencyDecimalFormatter}}
\r\n
\r\n
\r\n
\r\n {{'LocationVariant' | translate}} ({{'forTotalOf' | translate}} {{BookingSize}}\r\n )\r\n \r\n
\r\n
{{OperationCurrency}}\r\n {{session.RatePlanVariants.LocationVariant | currencyDecimalFormatter}}
\r\n
\r\n
\r\n
\r\n {{'InstructorVariant' | translate}} ({{'forTotalOf' | translate}} {{BookingSize}}\r\n )\r\n \r\n
\r\n
{{OperationCurrency}}\r\n {{session.RatePlanVariants.InstructorVariant | currencyDecimalFormatter}}
\r\n
\r\n
\r\n
\r\n {{'bookingType' | translate}} \r\n
\r\n
\r\n
\r\n
\r\n {{variant.BookingTypeName}}\r\n {{variant.bookingTypes}}\r\n
\r\n
{{OperationCurrency}} {{variant.Variant |\r\n currencyDecimalFormatter}}\r\n
\r\n
\r\n
\r\n
\r\n {{'coverType' | translate}} \r\n
\r\n
\r\n
\r\n
\r\n {{variant.CoverTypeName}}\r\n {{variant.covers}}\r\n
\r\n
{{OperationCurrency}} {{variant.Variant |\r\n currencyDecimalFormatter}}\r\n
\r\n
\r\n\r\n
\r\n
\r\n {{'MemberShipVariant' | translate}}\r\n
\r\n
{{OperationCurrency}} {{session.MemberShipVariant |\r\n currencyDecimalFormatter}}
\r\n
\r\n
\r\n
\r\n {{'TotalSessionCharge' | translate}}\r\n
\r\n
{{OperationCurrency}} {{session.TotalAmount |\r\n currencyDecimalFormatter}}
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {{dateSchedule.StartDate | localizeDate: 'dddd, MMMM DD YYYY'}} - {{dateSchedule.EndDate | localizeDate: 'dddd, MMMM DD YYYY'}}\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n {{dayOfWeek[index]}}\r\n
\r\n  \r\n
\r\n {{slot.Start | localizeDate:'LT'}} - {{slot.End | localizeDate:'LT'}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {{dayOfWeek[slot.Dayofweek]}}\r\n
\r\n  \r\n
\r\n {{timeConversion(slot.StartTime , SpecialMeal ,'Start') | localizeDate:'LT' }} -\r\n {{timeConversion(slot.EndTime, SpecialMeal ,'End') | localizeDate:'LT'}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n {{slot.StartTime | localizeDate: 'dddd, MMMM DD YYYY'}}  \r\n {{slot.StartTime | localizeDate:'LT'}} - {{slot.EndTime | localizeDate:'LT'}}\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n {{'TotalBaseRate' | translate}}\r\n
\r\n
{{OperationCurrency}}\r\n {{slot.RatePlanVariants.TotalBaseRate | currencyDecimalFormatter}}
\r\n
\r\n
\r\n
\r\n {{'LocationVariant' | translate}} ({{'forTotalOf' | translate}} {{BookingSize}}\r\n )\r\n \r\n
\r\n
{{OperationCurrency}}\r\n {{slot.RatePlanVariants.LocationVariant | currencyDecimalFormatter}}
\r\n
\r\n
\r\n
\r\n {{'InstructorVariant' | translate}} ({{'forTotalOf' | translate}} {{BookingSize}}\r\n )\r\n \r\n
\r\n
{{OperationCurrency}}\r\n {{slot.RatePlanVariants.InstructorVariant | currencyDecimalFormatter}}
\r\n
\r\n
\r\n
\r\n {{'coverType' | translate}} \r\n
\r\n
\r\n
\r\n
\r\n
\r\n {{variant.BookingTypeName}}\r\n {{variant.bookingTypes}}\r\n
\r\n
{{OperationCurrency}} {{variant.Variant |\r\n currencyDecimalFormatter}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {{'coverType' | translate}} \r\n
\r\n
\r\n
\r\n
\r\n
\r\n {{variant.CoverTypeName}}\r\n {{variant.covers}}\r\n
\r\n
{{OperationCurrency}} {{variant.Variant |\r\n currencyDecimalFormatter}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {{'MemberShipVariant' | translate}}\r\n
\r\n
{{OperationCurrency}} {{slot.MemberShipVariant |\r\n currencyDecimalFormatter}}
\r\n
\r\n
\r\n
\r\n {{'TotalSessionCharge' | translate}}\r\n
\r\n
{{OperationCurrency}} {{slot.TotalAmount |\r\n currencyDecimalFormatter}}
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n 0 \"\r\n (valueChange)=\"cancelClick()\">\r\n \r\n \r\n 0 ))\"\r\n (valueChange)=\"modifyClick()\">\r\n \r\n \r\n 0\"\r\n (valueChange)=\"additionalGuest()\">\r\n\r\n \r\n \r\n \r\n \r\n
\r\n\r\n
","import { DatePipe } from '@angular/common';\r\nimport { AfterViewInit, Component, EventEmitter, OnDestroy, OnInit, Output } from '@angular/core';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { PopupMessageComponent } from 'src/app/shared/components/popup-message/popup-message.component';\r\nimport { ActivityTabs, AutomaticRefundState, buttonTypes, ComponentTypes, PartyState } from 'src/app/shared/constants/commonenums';\r\nimport { ButtonValue } from 'src/app/shared/dynamicform/models/common-models';\r\nimport { ComponentDetails } from 'src/app/shared/dynamicform/models/popup.interface';\r\nimport { OpenBookingDTO } from 'src/app/shared/Models/OpenBookingDTO';\r\nimport { FinancialEffectType, PartyPrepaymentState, PartyType } from 'src/app/shared/Models/PartyModels';\r\nimport { OperationResultState } from 'src/app/shared/Models/ResultModels';\r\nimport { BookingActivity, ClassType, SessionBookingDTO } from 'src/app/shared/Models/SessionBookingDTO';\r\nimport { CollectType, DayOfWeek, operationType } from 'src/app/shared/Models/WidgetSettingsModels';\r\nimport { GuestService } from 'src/app/shared/services/guest.service';\r\nimport { PopupService } from 'src/app/shared/services/popup.service';\r\nimport { Utilities } from 'src/app/shared/utilities/utilities';\r\nimport * as _ from 'lodash';\r\nimport { CurrencyDecimalFormatter } from 'src/app/shared/pipes/currency-decimal.pipe';\r\n\r\n\r\n@Component({\r\n selector: 'app-activity-schedule',\r\n templateUrl: './activity-schedule.component.html',\r\n styleUrls: ['./activity-schedule.component.scss']\r\n})\r\nexport class ActivityScheduleComponent extends Utilities implements OnInit, AfterViewInit, OnDestroy {\r\n Subscription: Subscription = new Subscription();\r\n cancelButton: ButtonValue;\r\n modifyButton: ButtonValue;\r\n backToSummarybtn: ButtonValue;\r\n BookAnotherReservationBtn: ButtonValue;\r\n additionalGuestBtn: ButtonValue;\r\n isOpenBooking: boolean;\r\n OperationCurrency: string;\r\n BookingSize: number;\r\n allAvailableDates = [];\r\n SelectedDates = [];\r\n cancelDialogRef: MatDialogRef;\r\n isSessionClass: boolean;\r\n dayOfWeek = DayOfWeek;\r\n SelectedClassSchedule: any;\r\n BookedSessions: any = [];\r\n widgetData: any;\r\n @Output() reservationCancelled = new EventEmitter();\r\n SelectedSessionIds = []\r\n @Output() reservationAllCancelled = new EventEmitter();\r\n ratePlan: any;\r\n PartyData: any;\r\n AllParties: any;\r\n ratePlanfromToken = false;\r\n SelectedCoverTypeQuantities: any = [];\r\n SelectedBookingTypeQuantities: any = [];\r\n selectedClassList = [];\r\n SpecialMeal: any = {};\r\n PartyState = PartyState;\r\n refundDialogRef: MatDialogRef;\r\n showModifybtn = true;\r\n constructor(public ts: TranslateService, public gs: GuestService, public dialog: MatDialog, private currencyDecimalFormatter: CurrencyDecimalFormatter,\r\n private datePipe: DatePipe, public ps: PopupService, private route: ActivatedRoute) {\r\n super(dialog);\r\n if (this.route.snapshot.params.restaurantToken) {\r\n this.ratePlanfromToken = true;\r\n }\r\n this.Subscription.add(this.gs.editPartyData$.subscribe(data => {\r\n if (data) {\r\n this.PartyData = data;\r\n this.BookingSize = this.PartyData.Size;\r\n if (this.PartyData.State === PartyState.Seated || this.PartyData.State === PartyState.Cancelled || this.PartyData.State === PartyState.Left) {\r\n this.gs.TabChange$.next(ActivityTabs.ConfirmationSummary);\r\n }\r\n if (this.PartyData.State === PartyState.Cancelled && data.SpecialMeal) {\r\n setTimeout(() => {\r\n this.reservationAllCancelled.emit(true);\r\n this.gs.TabChange$.next(ActivityTabs.ConfirmationSummary);\r\n }, 100);\r\n } else {\r\n if (this.gs.bookingSection$.value === BookingActivity.ClassBooking) {\r\n this.isSessionClass = data.SpecialMeal?.ClassType === ClassType.Session;\r\n if (this.isSessionClass) {\r\n this.BookedSessions = data.BookedSessions.filter(x => x.SessionState === PartyState.Pending);\r\n this.setSummaryData();\r\n } else {\r\n this.allAvailableDates = [];\r\n this.setPaymentSummary();\r\n this.allAvailableDates.push({\r\n StartDate: this.PartyData.SpecialMeal?.StartDate,\r\n EndDate: this.PartyData.SpecialMeal?.EndDate\r\n })\r\n this.gs.availableDates = _.cloneDeep(this.allAvailableDates);\r\n }\r\n }\r\n }\r\n }\r\n }));\r\n this.Subscription.add(this.gs.restaurantWidgetSettings$.subscribe(data => {\r\n if (data) {\r\n this.widgetData = data;\r\n if(this.widgetData?.OperationCurrency){\r\n this.OperationCurrency = this.widgetData?.OperationCurrency \r\n }\r\n \r\n this.setSummaryData()\r\n }\r\n }));\r\n this.Subscription.add(\r\n this.gs.bookingPartiesData$.subscribe(data => {\r\n if (data) {\r\n this.AllParties = data;\r\n this.gs.editPartyData$.next(this.AllParties[0]);\r\n this.BookingSize = this.AllParties[0].Size;\r\n this.isOpenBooking = true;\r\n this.SelectedCoverTypeQuantities = this.AllParties[0].CoverTypeQuantities;\r\n this.SelectedBookingTypeQuantities = this.AllParties[0].BookingTypeQuantities;\r\n this.setPartiesData(data);\r\n if (this.AllParties[0].SpecialMealId) {\r\n this.showModifybtn = false;\r\n }\r\n }\r\n else {\r\n this.ratePlanfromToken = false;\r\n }\r\n })\r\n );\r\n this.Subscription.add(this.gs.SelectedClassSchedule$.subscribe(data => {\r\n if (data) {\r\n this.SelectedClassSchedule = [];\r\n this.SelectedClassSchedule = data;\r\n\r\n }\r\n }))\r\n this.Subscription.add(this.gs.RatePlanList$.subscribe(data => {\r\n this.ratePlan = data;\r\n if (this.ratePlan) {\r\n this.setSummaryData();\r\n }\r\n }));\r\n }\r\n\r\n\r\n setPartiesData(partyData) {\r\n this.allAvailableDates = [];\r\n let ratePlantotal = 0\r\n partyData = partyData.filter(x => x.State === PartyState.Pending);\r\n if (!partyData || !partyData.length) {\r\n setTimeout(() => {\r\n this.reservationAllCancelled.emit(true);\r\n }, 100);\r\n } else {\r\n partyData?.forEach(party => {\r\n let partySchedule: any = {};\r\n partySchedule.Id = party.Id;\r\n partySchedule.StartTime = party.SeatingTime;\r\n partySchedule.EndTime = party.DepartureTime;\r\n partySchedule.Party = party;\r\n if (this.ratePlan && this.ratePlan.RatePlanCalculations) {\r\n const selectedSlotRatePlan = this.ratePlan.RatePlanCalculations.filter(data => data.TimeRange.Start === (party.ReservedFor || party.WishedTime))[0];\r\n partySchedule = Object.assign(partySchedule, selectedSlotRatePlan);\r\n } else {\r\n partySchedule = Object.assign(partySchedule, {\r\n RatePlanVariants: {},\r\n variants: [],\r\n TotalAmount: party.RatePlanAmount\r\n });\r\n }\r\n if (party.PrepaymentState !== PartyPrepaymentState.Refunded) {\r\n ratePlantotal = ratePlantotal + Number(party.RatePlanAmount);\r\n }\r\n this.allAvailableDates.push(partySchedule);\r\n\r\n });\r\n if ((!this.ratePlan || !this.ratePlan.RatePlanCalculations)) {\r\n this.ratePlan = {\r\n TotalRatePlan: ratePlantotal, TotalMemberShipVariant: 0\r\n };\r\n } else {\r\n this.ratePlan.TotalRatePlan = ratePlantotal;\r\n }\r\n if (this.ratePlan.TotalRatePlan) {\r\n this.gs.RatePlanList$.next(this.ratePlan);\r\n }\r\n }\r\n this.gs.availableDates = _.cloneDeep(this.allAvailableDates);\r\n }\r\n\r\n modifySelected(slot) {\r\n this.gs.operation = operationType.edit;\r\n this.gs.bookingSection$.next(BookingActivity.OpenBooking);\r\n this.gs.TabChange$.next(ActivityTabs.BookingSelection);\r\n this.gs.selectedOpenBookingSlots = {};\r\n this.gs.slots_holder = [];\r\n this.allAvailableDates = [];\r\n this.gs.RefundAmount = 0;\r\n this.gs.TotalRefundAmount = 0;\r\n this.gs.isSummaryFromCart=false;\r\n\r\n setTimeout(() => {\r\n this.gs.editPartyData$.next(slot.Party);\r\n }, 0);\r\n }\r\n\r\n setSummaryData() {\r\n if (this.BookedSessions.length > 0 && this.widgetData) {\r\n this.allAvailableDates = [];\r\n const SpecialMeals = this.widgetData.AvailableSpecialMeals.filter(data => data.Id === this.PartyData.SpecialMeal.Id)[0];\r\n this.BookedSessions = this.BookedSessions.sort((a, b) => (a.BookedDate > b.BookedDate) ? 1 : ((b.BookedDate > a.BookedDate) ? -1 : 0))\r\n\r\n var BookedDates: any[] = Utilities.uniqueBy(this.BookedSessions, \"BookedDate\");\r\n BookedDates.forEach(element => {\r\n element['SessionIds'] = this.getSessionIds(element);\r\n });\r\n BookedDates.forEach(date => {\r\n let bookedinfo: any = {};\r\n bookedinfo['StartDate'] = date.BookedDate;\r\n bookedinfo['sessions'] = [];\r\n date.SessionIds.forEach(session => {\r\n const selectedActivity = SpecialMeals.ActivitySessions.filter(sessioninfo => sessioninfo.ActivitySessionId === session)[0]\r\n if (selectedActivity) {\r\n let ActivityInfo: any = {};\r\n ActivityInfo['Id'] = this.BookedSessions.filter(x => x.BookedDate === date.BookedDate && x.ActivitySessionId === session)[0].Id;\r\n ActivityInfo['Start'] = date.BookedDate.split('T')[0] + 'T' + selectedActivity.StartTime;\r\n ActivityInfo['End'] = date.BookedDate.split('T')[0] + 'T' + selectedActivity.EndTime;\r\n if (this.ratePlan && this.ratePlan.RatePlanCalculations) {\r\n this.ratePlan.RatePlanCalculations.forEach(rateData => {\r\n if (rateData.TimeRange.Start === ActivityInfo['Start']) {\r\n ActivityInfo = Object.assign(ActivityInfo, rateData);\r\n bookedinfo.sessions.push(ActivityInfo);\r\n }\r\n });\r\n } else {\r\n const amount = this.BookedSessions.filter(x => x.BookedDate === date.BookedDate && x.ActivitySessionId === session)[0].RatePlanAmount\r\n ActivityInfo = Object.assign(ActivityInfo, {\r\n RatePlanVariants: {},\r\n variants: [],\r\n TotalAmount: amount\r\n });\r\n bookedinfo.sessions.push(ActivityInfo);\r\n }\r\n }\r\n });\r\n this.allAvailableDates.push(bookedinfo);\r\n });\r\n this.gs.availableDates = _.cloneDeep(this.allAvailableDates);\r\n if (!this.ratePlan && this.PartyData.RatePlanAmount) {\r\n this.ratePlan = {};\r\n this.ratePlan.TotalRatePlan = this.PartyData.RatePlanAmount;\r\n this.ratePlan.TotalMemberShipVariant = 0;\r\n if (this.ratePlan.TotalRatePlan) {\r\n this.gs.RatePlanList$.next(this.ratePlan);\r\n }\r\n }\r\n }\r\n if (this.widgetData && this.PartyData) {\r\n let specialmeal = [];\r\n let activeSession = [];\r\n specialmeal = _.filter(this.widgetData.AvailableSpecialMeals, (meal) => {\r\n if (meal.Id === this.PartyData.SpecialMealId) {\r\n return meal;\r\n }\r\n });\r\n if (specialmeal && specialmeal.length) {\r\n this.SpecialMeal = specialmeal[0];\r\n activeSession = specialmeal[0].ActivitySessions;\r\n let classGroup = _.filter(activeSession, (session) => {\r\n if (session.SessionGroupId === this.PartyData.SessionGroupId) {\r\n return session;\r\n }\r\n })\r\n console.log(classGroup);\r\n classGroup = _.orderBy(classGroup, ['Dayofweek'], ['asc']);\r\n this.selectedClassList = classGroup;\r\n }\r\n }\r\n\r\n }\r\n timeConversion(hour, date, type) {\r\n let time = ''\r\n if (hour && date) {\r\n if (type === 'Start') {\r\n time = date.StartDate.split('T')[0] + 'T' + hour;\r\n } else {\r\n time = date.EndDate.split('T')[0] + 'T' + hour;\r\n }\r\n }\r\n return time;\r\n }\r\n getSessionIds(data) {\r\n return this.BookedSessions.filter(element => element.BookedDate === data.BookedDate).map(sessions => sessions.ActivitySessionId);\r\n }\r\n setPaymentSummary() {\r\n if (!this.ratePlan && this.PartyData.RatePlanAmount) {\r\n this.ratePlan = {};\r\n this.ratePlan.TotalRatePlan = this.PartyData.RatePlanAmount;\r\n this.ratePlan.TotalMemberShipVariant = 0;\r\n if (this.ratePlan.TotalRatePlan) {\r\n this.gs.RatePlanList$.next(this.ratePlan);\r\n }\r\n }\r\n }\r\n getTimeRange(data) {\r\n const SessionData = [];\r\n this.ratePlan.RatePlanCalculations.forEach(element => {\r\n if (element.TimeRange.Start.split('T')[0] === data.StartDate) {\r\n element['SessionId'] =\r\n SessionData.push(element);\r\n }\r\n });\r\n return SessionData;\r\n }\r\n\r\n ngOnInit(): void {\r\n this.cancelButton = {\r\n type: buttonTypes.cancelBtn,\r\n label: this.ts.instant('cancel'),\r\n customclass: 'class-detail__cancel-btn',\r\n disbaledproperity: false\r\n };\r\n this.modifyButton = {\r\n type: buttonTypes.confirmBtn,\r\n label: this.ts.instant('modify'),\r\n customclass: 'class-detail__confirm-btn',\r\n disbaledproperity: false\r\n };\r\n this.BookAnotherReservationBtn = {\r\n type: buttonTypes.cancelBtn,\r\n label: this.ts.instant('bookAnotherReservation'),\r\n customclass: 'reservation-confirmation__cancel-reservation',\r\n };\r\n this.additionalGuestBtn = {\r\n type: buttonTypes.cancelBtn,\r\n label: this.ts.instant('guestDetails'),\r\n customclass: 'reservation-confirmation__additional-guest',\r\n icon: 'icon-add'\r\n };\r\n this.backToSummarybtn = {\r\n type: buttonTypes.cancelBtn,\r\n label: this.ts.instant('BackToCartSummary'),\r\n customclass: 'reservation-confirmation__additional-guest',\r\n }\r\n }\r\n\r\n\r\n ngAfterViewInit() {\r\n this.Subscription.add(this.ps.actionEnabled$.subscribe(x => {\r\n if (x == ComponentTypes.cancelReservation && this.cancelDialogRef) {\r\n this.cancelDialogRef.close();\r\n this.confirmCancelation();\r\n }\r\n else if (x == ComponentTypes.cancellationChargeInfo && this.cancelDialogRef) {\r\n this.cancelDialogRef.close();\r\n this.confirmClassorSessionCancellation();\r\n }\r\n // else {\r\n // this.cancelDialogRef.close();\r\n // this.checkAllReservationCancellation();\r\n // }\r\n }));\r\n\r\n this.Subscription.add(this.ps.cancelEnabled$.subscribe(x => {\r\n if (x == ComponentTypes.cancelReservation) {\r\n this.gs.operation = operationType.edit;\r\n this.gs.reservationConfirmationText = this.ts.instant('reservationDetainedConfirmationText');\r\n }\r\n }));\r\n if (!this.isSessionClass && !this.isOpenBooking) {\r\n this.gs.isClassBokking = true;\r\n } else {\r\n this.gs.isClassBokking = false;\r\n }\r\n }\r\n\r\n checkAllReservationCancellation() {\r\n if (!this.isOpenBooking) {\r\n if (this.SelectedSessionIds.length === 0) {\r\n this.reservationAllCancelled.emit(true);\r\n this.isOpenBooking = false;\r\n this.isSessionClass = false;\r\n } else {\r\n this.allAvailableDates.forEach(element => {\r\n element.sessions = element.sessions.filter(session => !session['checked'])\r\n });\r\n\r\n this.allAvailableDates = this.allAvailableDates.filter(date => date.sessions.length);\r\n if (!this.allAvailableDates.length) {\r\n this.reservationAllCancelled.emit(true);\r\n this.isOpenBooking = false;\r\n this.isSessionClass = false;\r\n }\r\n this.gs.availableDates = _.cloneDeep(this.allAvailableDates);\r\n }\r\n } else {\r\n if (this.SelectedSessionIds.length === 0) {\r\n this.reservationAllCancelled.emit(true);\r\n this.gs.editPartyData$.next(this.AllParties[0]);\r\n this.isOpenBooking = false;\r\n this.isSessionClass = false;\r\n } else {\r\n this.allAvailableDates = this.allAvailableDates.filter(date => !date['checked']);\r\n if (!this.allAvailableDates.length) {\r\n this.reservationAllCancelled.emit(true);\r\n this.gs.editPartyData$.next(this.AllParties[0]);\r\n this.isOpenBooking = false;\r\n this.isSessionClass = false;\r\n }\r\n this.gs.availableDates = this.allAvailableDates;\r\n }\r\n }\r\n }\r\n setCancelSummaryData(data, editdata) {\r\n let partyType = this.gs.selectedSpecialMeal ? this.gs.selectedSpecialMeal.IsForStandbyReservations ? PartyType[2] : PartyType[0] : '';\r\n if (data.State == OperationResultState.Success) {\r\n this.ratePlan = null;\r\n this.checkAllReservationCancellation();\r\n this.gs.RatePlanList$.next(null);\r\n\r\n // this.gs.getByToken(editdata.Token, '', partyType).subscribe(res => {\r\n // this.gs.editPartyData$.next(res);\r\n // });\r\n this.gs.reservationConfirmationText = this.ts.instant('reservationCancellationConfirmationText')\r\n this.gs.message = this.ts.instant('reservationCancellationText');\r\n\r\n if (data.Payload != null) {\r\n this.gs.RefundAmount = 0;\r\n if (data.Payload.PaymentState == AutomaticRefundState.Succeeeded) {\r\n if (data.Payload.PaymentType == FinancialEffectType.FullRefund || data.Payload.PaymentType == FinancialEffectType.PartialRefund) {\r\n this.gs.RefundAmount += data.Payload.PaymentAmount || 0;\r\n }\r\n }\r\n }\r\n this.showRefundAmount(this.gs.RefundAmount);\r\n this.gs.cancelledCartItems$.next(true);\r\n }\r\n }\r\n confirmCancelation() {\r\n const editdata = this.gs.editPartyData$.value;\r\n let bookedSessionId = ''\r\n if (this.SelectedSessionIds.length == 1) {\r\n bookedSessionId = this.SelectedSessionIds[0];\r\n } else {\r\n bookedSessionId = null;\r\n }\r\n if (!this.isOpenBooking) {\r\n if (this.gs.selectedSpecialMeal.IsForStandbyReservations) {\r\n this.Subscription.add(this.gs.CancelStandByBooking(this.gs.restaurantWidgetSettings$.value.RestaurantId, this.gs.editPartyData$.value.Id, this.gs.language, this.SelectedSessionIds, bookedSessionId).subscribe(data => {\r\n this.setCancelSummaryData(data, editdata)\r\n }));\r\n } else {\r\n // this.Subscription.add(this.gs.CancelBooking(this.gs.restaurantWidgetSettings$.value.RestaurantId, this.gs.editPartyData$.value.Id, this.gs.language, this.SelectedSessionIds).subscribe(data => {\r\n // this.setCancelSummaryData(data ,editdata)\r\n // }));\r\n this.getCancellationCharge();\r\n }\r\n } else {\r\n if (!this.gs.editPartyData$.value.SpecialMealId) {\r\n this.Subscription.add(this.gs.CancelOpenBooking(this.gs.restaurantWidgetSettings$.value.RestaurantId, this.AllParties[0].BookingId, this.gs.language, this.SelectedSessionIds).subscribe(dat => {\r\n if (dat.State == OperationResultState.Success) {\r\n this.checkresponseData(dat, editdata);\r\n }\r\n }));\r\n } else {\r\n this.Subscription.add(this.gs.CancelPrivateLessonBooking(this.gs.restaurantWidgetSettings$.value.RestaurantId, this.AllParties[0].BookingId, this.gs.language, this.SelectedSessionIds).subscribe(dat => {\r\n if (dat.State == OperationResultState.Success) {\r\n this.checkresponseData(dat, editdata);\r\n }\r\n }));\r\n }\r\n }\r\n }\r\n\r\n checkresponseData(dat, editdata) {\r\n this.checkAllReservationCancellation();\r\n this.gs.RatePlanList$.next(null);\r\n this.gs.reservationConfirmationText = this.ts.instant('reservationCancellationConfirmationText')\r\n this.gs.setMessageState(this.ts.instant('reservationCancellationText'), 0);\r\n let PartiesData: any;\r\n if (editdata.BookingId) {\r\n this.gs.getByToken('', editdata.BookingId).subscribe(party => {\r\n if (Array.isArray(party)) {\r\n PartiesData = party;\r\n } else {\r\n PartiesData = [];\r\n PartiesData.push(party)\r\n }\r\n this.gs.bookingPartiesData$.next(PartiesData);\r\n });\r\n } else {\r\n this.gs.getByToken(editdata.Token, '').subscribe(data => {\r\n PartiesData = [];\r\n PartiesData.push(data)\r\n this.gs.bookingPartiesData$.next(PartiesData);\r\n });\r\n }\r\n\r\n if (dat.Payload != null) {\r\n this.gs.RefundAmount = 0;\r\n if (this.SelectedSessionIds && this.SelectedSessionIds.length > 0) {\r\n this.SelectedSessionIds.forEach(id => {\r\n if (dat.Payload[id] && dat.Payload[id].AutomaticRefundState == AutomaticRefundState.Succeeeded) {\r\n this.gs.RefundAmount += dat.Payload[id].RefundAmount || 0;\r\n }\r\n });\r\n }\r\n else {\r\n Object.keys(dat.Payload).forEach(key => {\r\n if (dat.Payload[key] && dat.Payload[key].AutomaticRefundState == AutomaticRefundState.Succeeeded) {\r\n this.gs.RefundAmount += dat.Payload[key].RefundAmount || 0;\r\n }\r\n });\r\n }\r\n }\r\n\r\n this.showRefundAmount(this.gs.RefundAmount);\r\n this.gs.cancelledCartItems$.next(true)\r\n }\r\n\r\n getCancellationCharge() {\r\n this.gs.getCancellationCharge(this.gs.restaurantWidgetSettings$.value.RestaurantId, this.gs.editPartyData$.value.Id, this.SelectedSessionIds).subscribe(data => {\r\n if (data && data.Payload && data.Payload.CancellationCharge > 0) {\r\n this.showCancellationAlertMessage(data.Payload)\r\n }\r\n else {\r\n this.confirmClassorSessionCancellation();\r\n }\r\n })\r\n }\r\n\r\n confirmClassorSessionCancellation() {\r\n this.Subscription.add(this.gs.CancelBooking(this.gs.restaurantWidgetSettings$.value.RestaurantId, this.gs.editPartyData$.value.Id, this.gs.language, this.SelectedSessionIds).subscribe(data => {\r\n this.setCancelSummaryData(data, this.gs.editPartyData$.value)\r\n }));\r\n }\r\n\r\n showCancellationAlertMessage(cancellationDto) {\r\n let selectedactivity = this.gs.restaurantWidgetSettings$.value.AvailableSpecialMeals.filter(a => a.Id == this.gs.editPartyData$.value.SpecialMealId)[0];\r\n const collectTypeInfo = this.gs.editPartyData$.value.PrepaymentState == PartyPrepaymentState.DepositCollected && selectedactivity && !cancellationDto.WillBeChargedImmediately ?\r\n selectedactivity.CollectType == CollectType.CheckIn ? this.ts.instant('cancellationCheckInMessage') : this.ts.instant('cancellationCheckOutMessage') : '';\r\n const cancellationcharge = this.gs.restaurantWidgetSettings$.value.OperationCurrency + this.currencyDecimalFormatter.transform(cancellationDto.CancellationCharge);\r\n const alertmsg = this.ts.instant('cancellationFeeInfoMessage');\r\n const popUpMessage = [{\r\n confirmationMessage: alertmsg,\r\n dialogTitle: this.ts.instant('cancellationChargeInfo'),\r\n showAlert: true,\r\n isScrolable: true\r\n }];\r\n const componentDetails: ComponentDetails = Utilities.setComponentDetails(PopupMessageComponent, 'small', '', popUpMessage,\r\n popUpMessage[0].dialogTitle);\r\n this.cancelDialogRef = this.openCustomPopup(componentDetails, ComponentTypes.cancellationChargeInfo, '450px', '330px', true, '', this.ts.instant('Yes'),\r\n this.ts.instant('No'), true)\r\n }\r\n\r\n dateClicked(checked, index) {\r\n this.allAvailableDates[index].checked = checked;\r\n this.allAvailableDates[index].sessions.forEach(element => {\r\n element['checked'] = checked;\r\n });\r\n }\r\n\r\n sessionClicked(dateIndex) {\r\n var itemsChecked = this.allAvailableDates[dateIndex].sessions.filter(session => session['checked']).length;\r\n if (!itemsChecked || itemsChecked != this.allAvailableDates[dateIndex].sessions.length) {\r\n this.allAvailableDates[dateIndex].checked = false;\r\n } else {\r\n this.allAvailableDates[dateIndex].checked = true;\r\n }\r\n }\r\n\r\n\r\n\r\n cancelClick() {\r\n\r\n let msg = '';\r\n this.SelectedSessionIds = [];\r\n let sessionmsg = [];\r\n if (!this.isOpenBooking) {\r\n this.allAvailableDates.forEach(element => {\r\n if (element.sessions) {\r\n const selectedsession = element.sessions.filter(session => session['checked']);\r\n selectedsession.forEach(element => {\r\n this.SelectedSessionIds.push(element.Id);\r\n sessionmsg.push(this.datePipe.transform(element.Start, 'MMMM d, hh:mm a') + ' - ' + this.datePipe.transform(element.End, 'hh:mm a'));\r\n });\r\n }\r\n\r\n });\r\n }\r\n else {\r\n let selectedSlots = [];\r\n if (this.allAvailableDates.length > 1) {\r\n selectedSlots = this.allAvailableDates.filter(x => x['checked']);\r\n selectedSlots.forEach(data => {\r\n sessionmsg.push(this.datePipe.transform(data.StartTime, 'MMMM d, hh:mm a'));\r\n })\r\n } else {\r\n this.allAvailableDates[0]['checked'] = true;\r\n selectedSlots = this.allAvailableDates;\r\n selectedSlots.forEach(data => {\r\n sessionmsg.push(this.datePipe.transform(data.StartTime, 'MMMM d, hh:mm a'));\r\n })\r\n }\r\n this.SelectedSessionIds = selectedSlots.map(y => y.Id);\r\n }\r\n if (this.SelectedSessionIds.length > 0) {\r\n msg = sessionmsg.join(',');\r\n } else {\r\n msg = this.ts.instant('cancelEntireReservation');\r\n }\r\n\r\n this.Subscription.add(this.ts.get('AskCancelReservationConfirmation', { date: msg, locationName: this.gs.restaurantWidgetSettings$.value.RestaurantName }).subscribe(text => {\r\n const popUpMessage = [{\r\n confirmationMessage: this.SelectedSessionIds.length ? text : msg,\r\n dialogTitle: this.ts.instant('cancelActivity'),\r\n showAlert: true,\r\n isScrolable: true\r\n }];\r\n const height = this.SelectedSessionIds.length > 4 ? '350px' : '300px'\r\n const componentDetails: ComponentDetails = Utilities.setComponentDetails(PopupMessageComponent, 'small', '', popUpMessage,\r\n popUpMessage[0].dialogTitle);\r\n this.cancelDialogRef = this.openCustomPopup(componentDetails, ComponentTypes.cancelReservation, '450px', height, true, '', this.ts.instant('Yes'),\r\n this.ts.instant('No'), true)\r\n }));\r\n }\r\n\r\n modifyClick() {\r\n this.SelectedDates = [];\r\n this.allAvailableDates = [];\r\n this.gs.operation = operationType.edit;\r\n this.gs.RefundAmount = 0;\r\n this.gs.TotalRefundAmount = 0;\r\n this.gs.bookingSection$.next(BookingActivity.ClassBooking);\r\n this.gs.TabChange$.next(ActivityTabs.ActivitySelection);\r\n this.gs.isSummaryFromCart = false;\r\n }\r\n\r\n\r\n bookAnotherReservationBtn(event) {\r\n this.gs.setMessageState('', 0);\r\n this.gs.SaveBookingObj = null;\r\n this.gs.SessionBookingObj = {} as SessionBookingDTO;\r\n this.gs.slots_holder = [];\r\n this.gs.selectedOpenBookingSlots = {};\r\n this.gs.openBookingData = {} as OpenBookingDTO;\r\n this.gs.SelectedClassSchedule$.next([]);\r\n this.gs.operation = operationType.create;\r\n this.gs.BookNew$.next(true);\r\n this.gs.bookingSection$.next(BookingActivity.ClassBooking);\r\n this.gs.TabChange$.next(ActivityTabs.BookingSelection);\r\n this.gs.RatePlanList$.next(null);\r\n this.allAvailableDates = [];\r\n this.isOpenBooking = false;\r\n this.isSessionClass = false;\r\n this.gs.ispaymentInvolvedInfo = null;\r\n this.gs.reservationAttemptInfo = null;\r\n this.gs.additionalGuestPage = false;\r\n this.gs.additionalGuestRequired = 0;\r\n this.gs.slotLockId = 0;\r\n this.gs.RefundAmount = 0;\r\n this.gs.TotalRefundAmount = 0;\r\n this.gs.lockResult = null;\r\n this.BookedSessions = [];\r\n const SaveContact = this.gs.editPartyData$.value.Contact;\r\n this.gs.editPartyData$.next(null);\r\n this.gs.isSummaryFromCart = false;\r\n this.gs.BookAnotherReservation.next(true);\r\n }\r\n\r\n\r\n\r\n additionalGuest() {\r\n this.gs.TabChange$.next(ActivityTabs.AdditionalGuest);\r\n }\r\n\r\n showRefundAmount(amount: number) {\r\n if (amount > 0) {\r\n this.gs.TotalRefundAmount += this.gs.RefundAmount;\r\n this.Subscription.add(this.ts.get('refundAmountMessage', { refundAmount: this.OperationCurrency + this.currencyDecimalFormatter.transform(amount) }).subscribe(text => {\r\n const popUpMessage = [{\r\n confirmationMessage: text,\r\n dialogTitle: this.ts.instant('refundStatus'),\r\n showAlert: true\r\n }];\r\n const componentDetails: ComponentDetails = Utilities.setComponentDetails(PopupMessageComponent, 'small', '', popUpMessage,\r\n popUpMessage[0].dialogTitle);\r\n this.refundDialogRef = this.openCustomPopup(componentDetails, ComponentTypes.informationPopup, '450px', '300px', true, '', 'Ok',\r\n '', false);\r\n }));\r\n }\r\n }\r\n\r\n checkPartyState() {\r\n // this.gs.getByToken()\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.Subscription) { this.Subscription.unsubscribe(); }\r\n }\r\n\r\n backToCartSummary(event) {\r\n this.gs.TabChange$.next(ActivityTabs.CartDetails);\r\n }\r\n}\r\n","
\r\n
\r\n \r\n
\r\n
\r\n \r\n
{{'ReservationSummary' |\r\n translate}}\r\n
\r\n
\r\n

{{lessonName}}

\r\n
\r\n location_on\r\n  {{Locations}}\r\n
\r\n
\r\n \r\n
{{coverSize}}\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n |\r\n {{cover.CoverTypeName}} : {{cover.Covers}}\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
{{ConfirmationData.ConfirmationCode}}\r\n
\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n {{ConfirmationData.StartDate | localizeDate:'MM/D/yyyy'}}\r\n
\r\n
\r\n {{activityService.availableDates ? (activityService.availableDates[0].StartDate |\r\n date:'MM/dd/yyyy') : (ConfirmationData.StartDate | localizeDate:'MM/D/YYYY')}}\r\n
\r\n
\r\n
\r\n \r\n
\r\n {{ConfirmationData.EndDate | localizeDate:'MM/D/YYYY'}}
\r\n
\r\n {{activityService.availableDates ? (\r\n activityService.availableDates[activityService.availableDates.length -1].StartDate |\r\n date:'MM/dd/yyyy' ): (ConfirmationData.EndDate | localizeDate:'MM/D/YYYY') }}
\r\n
\r\n\r\n
\r\n
\r\n
\r\n \r\n
{{'ReservationSummary' | translate}}\r\n
\r\n
\r\n \r\n
\r\n location_on\r\n  {{Locations}}\r\n
\r\n
\r\n \r\n
{{coverSize}}\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n |\r\n {{cover.CoverTypeName}} : {{cover.Covers}}\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
{{ConfirmationData.ConfirmationCode}}\r\n
\r\n
\r\n
\r\n\r\n
\r\n \r\n
{{activityService.availableDates ?\r\n (activityService.availableDates[0]?.StartTime |\r\n date:'MM/dd/yyyy') : (openBookingStartDate | localizeDate:'MM/D/YYYY')}}\r\n
\r\n
\r\n
\r\n \r\n
\r\n {{activityService.availableDates ?\r\n (activityService.availableDates[activityService.availableDates.length -1]?.EndTime |\r\n date:'MM/dd/yyyy') : (openBookingStartDate | localizeDate:'MM/D/YYYY')}}
\r\n
\r\n
\r\n
\r\n \r\n
0 \">\r\n
\r\n {{'PaymentSummary' | translate}}\r\n
\r\n
\r\n {{'Rates' | translate}}\r\n
\r\n
\r\n
\r\n
{{'TotalBaseRate' | translate}}
\r\n
{{OperationCurrency}}\r\n {{ratePlanList.RatePlanVariants.TotalBaseRate | currencyDecimalFormatter}}\r\n
\r\n
\r\n
\r\n
{{'LocationVariant' | translate}}
\r\n
{{OperationCurrency}}\r\n {{ratePlanList.RatePlanVariants.LocationVariant | currencyDecimalFormatter}}\r\n
\r\n
\r\n
\r\n
{{'InstructorVariant' | translate}}
\r\n
{{OperationCurrency}}\r\n {{ratePlanList.RatePlanVariants.InstructorVariant | currencyDecimalFormatter}}\r\n
\r\n
\r\n
\r\n
\r\n
{{bookingType.BookingTypeName}}  X\r\n  {{bookingType.bookingTypes}}
\r\n
{{OperationCurrency}} {{bookingType.Variant | currencyDecimalFormatter}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
{{cover.CoverTypeName}}  X  {{cover.covers}}
\r\n
{{OperationCurrency}} {{cover.Variant | currencyDecimalFormatter}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
{{'TotalSessionCharge' | translate}}
\r\n
{{OperationCurrency}} {{(ratePlan.TotalRatePlan !== null ?\r\n (ratePlan.TotalRatePlan\r\n | currencyDecimalFormatter) : '0.00') }}\r\n
\r\n
\r\n
\r\n
{{'MembershipDiscount' | translate}}\r\n
\r\n
{{OperationCurrency}} {{(ratePlan.TotalMemberShipVariant\r\n | currencyDecimalFormatter)}}
\r\n
\r\n
\r\n
{{'DepositAmount' | translate}}
\r\n
{{OperationCurrency}} {{ConfirmationData.DepositPaid\r\n | currencyDecimalFormatter}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
{{'totalAmount' | translate}}
\r\n
{{OperationCurrency}} {{TotalAmount | currencyDecimalFormatter }}\r\n
\r\n
\r\n
\r\n
{{'RemAmountToBePayed' | translate}}
\r\n
{{OperationCurrency}} {{TotalAmount | currencyDecimalFormatter }}\r\n
\r\n
\r\n\r\n \r\n\r\n
\r\n
\r\n\r\n
\r\n
\r\n {{'checkInMessage' | translate }} {{SeatedType !=='' ? SeatedType : PartyState[4]}}\r\n
\r\n
\r\n
\r\n {{activityService.restaurantWidgetSettings$.value.PropertyType}}\r\n {{activityService.restaurantWidgetSettings$.value.RestaurantName}}\r\n
\r\n
\r\n {{'date' | translate}}\r\n {{activityService.editPartyData$.value.ReservedFor ? ( activityService.editPartyData$.value.ReservedFor | localizeDate: 'DD MMM,yyyy') : ( activityService.editPartyData$.value.WishedTime | localizeDate: 'DD MMM,yyyy')}}\r\n
\r\n
\r\n {{'time' | translate}}\r\n {{activityService.editPartyData$.value.ReservedFor ? (activityService.editPartyData$.value.ReservedFor | localizeDate: 'LT') : (activityService.editPartyData$.value.WishedTime | localizeDate: 'LT')}}\r\n
\r\n
\r\n {{'partySize' | translate}}\r\n {{activityService.editPartyData$.value.Size}}\r\n
\r\n
\r\n {{'confirmation' | translate}}\r\n {{activityService.editPartyData$.value.ConfirmationCode}}\r\n
\r\n
\r\n {{'bookingReferenceId' | translate}}\r\n {{activityService.editPartyData$.value.BookingReferenceId}}\r\n
\r\n
\r\n
\r\n
{{'guestInfo' | translate}}
\r\n
\r\n
\r\n {{'name' | translate}}\r\n {{activityService.editPartyData$.value.Contact.FirstName}}\r\n {{activityService.editPartyData$.value.Contact.LastName}}\r\n
\r\n
\r\n {{'emailText' | translate}}\r\n {{activityService.editPartyData$.value.Contact.EmailAddress}}\r\n
\r\n
\r\n {{'phoneText' | translate}}\r\n {{activityService.editPartyData$.value.Contact.PhoneNumber}}\r\n
\r\n
\r\n
{{'reservationInfo' | translate}}
\r\n
\r\n
\r\n {{activityService.restaurantWidgetSettings$.value.PropertyType}}\r\n {{activityService.restaurantWidgetSettings$.value.RestaurantName}}\r\n
\r\n
\r\n {{'phoneText' | translate}}\r\n {{activityService.restaurantWidgetSettings$.value.PhoneNumber}}\r\n
\r\n
\r\n {{'address' | translate}}\r\n {{activityService.restaurantWidgetSettings$.value.Street1}}{{activityService.restaurantWidgetSettings$.value.Street2}},\r\n {{activityService.restaurantWidgetSettings$.value.City}},\r\n {{activityService.restaurantWidgetSettings$.value.Country}}\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n\r\n
\r\n\r\n\r\n
\r\n","import { DatePipe } from '@angular/common';\r\nimport { Component, OnInit } from '@angular/core';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { PopupMessageComponent } from 'src/app/shared/components/popup-message/popup-message.component';\r\nimport { ActivityTabs, buttonTypes, ComponentTypes, PartyState } from 'src/app/shared/constants/commonenums';\r\nimport { ButtonValue } from 'src/app/shared/dynamicform/models/common-models';\r\nimport { ComponentDetails } from 'src/app/shared/dynamicform/models/popup.interface';\r\nimport { OperationResultState } from 'src/app/shared/Models/ResultModels';\r\nimport { BookingActivity, ClassType, SessionBookingDTO } from 'src/app/shared/Models/SessionBookingDTO';\r\nimport { operationType } from 'src/app/shared/Models/WidgetSettingsModels';\r\nimport { GuestService } from 'src/app/shared/services/guest.service';\r\nimport { PopupService } from 'src/app/shared/services/popup.service';\r\nimport { Utilities } from 'src/app/shared/utilities/utilities';\r\nimport { ActivitiesService } from '../activities.service';\r\nimport { RatePlanDetailsComponent } from '../rate-plan-details/rate-plan-details.component';\r\nimport { FinancialEffectType, PartyPrepaymentState } from 'src/app/shared/Models/PartyModels';\r\nimport { FormatSettingsDatePipe } from '../../shared/pipes/format-settings-date.pipe'\r\n@Component({\r\n selector: 'app-activity-booking-summary',\r\n templateUrl: './activity-booking-summary.component.html',\r\n styleUrls: ['./activity-booking-summary.component.scss']\r\n})\r\nexport class ActivityBookingSummaryComponent extends Utilities implements OnInit {\r\n modifyBtn: ButtonValue;\r\n cancelBtn: ButtonValue;\r\n backToCartSummarybtn: ButtonValue;\r\n BookAnotherReservationBtn: ButtonValue;\r\n additionalGuestBtn: ButtonValue;\r\n ratePlan: any;\r\n isSessionClass: boolean;\r\n showAllSlots: boolean;\r\n Instructors: string;\r\n Locations: string;\r\n lessonName: string;\r\n Subscriptions: Subscription = new Subscription;\r\n ConfirmationData: any;\r\n classDetail: any;\r\n SessionCount = 0;\r\n TotalAmount = 0;\r\n OperationCurrency: any;\r\n cancelDialogRef: MatDialogRef;\r\n reservationCancelled = false;\r\n sessionIds = [];\r\n subscriptions: Subscription = new Subscription();\r\n showScheduleSummary = true;\r\n CoverTypeQuantities: any = [];\r\n BookingTypeQuantities: any = [];\r\n bookingSection: boolean;\r\n coverSize: string;\r\n openBookingStartDate: any;\r\n ratePlanList: any;\r\n PartyState = PartyState;\r\n PartyPrepaymentState = PartyPrepaymentState;\r\n SeatedType: any = '';\r\n constructor(public ts: TranslateService, private ps: PopupService, public activityService: GuestService, public dialog: MatDialog, private datePipe: DatePipe , public dateFormat: FormatSettingsDatePipe) {\r\n super(dialog);\r\n this.bookingSection = this.activityService.bookingSection$.value;\r\n\r\n this.Subscriptions.add(\r\n this.activityService.RatePlanList$.subscribe(data => {\r\n this.ratePlan = data;\r\n if (data) {\r\n this.ratePlanList = data.SlotList ? data.SlotList[0] : data.RatePlanCalculations ? data.RatePlanCalculations : data;\r\n this.calculateTotalAmount();\r\n }\r\n })\r\n );\r\n\r\n this.Subscriptions.add(\r\n this.activityService.editPartyData$.subscribe(data => {\r\n if (data && data.Id) {\r\n this.showScheduleSummary = true;\r\n if (data.State === PartyState.Seated || data.State === PartyState.Cancelled || data.State === PartyState.Left) {\r\n this.SeatedType = PartyState[data.State];\r\n }\r\n\r\n this.ConfirmationData = data;\r\n this.CoverTypeQuantities = data.CoverTypeQuantities;\r\n this.BookingTypeQuantities = data.BookingTypeQuantities;\r\n this.classDetail = data.SpecialMeal;\r\n this.lessonName = this.classDetail ? (this.classDetail.Name ? this.classDetail.Name : \"\") : \"\";\r\n this.coverSize = data.Size;\r\n if (data.StartDate) {\r\n this.openBookingStartDate = data.ReservedFor;\r\n }\r\n this.getLocations();\r\n this.getInstructors();\r\n if (this.ConfirmationData?.DepositPaid) {\r\n this.calculateTotalAmount();\r\n }\r\n this.isSessionClass = !this.ConfirmationData.SessionGroupId ? true : false;\r\n if (this.isSessionClass) {\r\n this.SessionCount = this.ConfirmationData.BookedSessions?.length;\r\n }\r\n }\r\n }));\r\n }\r\n\r\n calculateTotalAmount() {\r\n if (this.ConfirmationData?.PrepaymentState === PartyPrepaymentState?.DepositCollected) {\r\n this.TotalAmount = Number(this.ratePlan?.TotalRatePlan) - (this.ConfirmationData?.DepositPaid ? Number(this.ConfirmationData?.DepositPaid) : 0);\r\n } else {\r\n this.TotalAmount = Number(this.ratePlan?.TotalRatePlan);\r\n }\r\n }\r\n\r\n\r\n ngOnInit(): void {\r\n this.cancelBtn = {\r\n type: buttonTypes.cancelBtn,\r\n label: this.ts.instant('cancel'),\r\n customclass: 'reservation-confirmation__cancel-reservation',\r\n };\r\n\r\n this.modifyBtn = {\r\n type: buttonTypes.confirmBtn,\r\n label: this.ts.instant('modify'),\r\n customclass: 'reservation-confirmation__modify-details',\r\n };\r\n this.BookAnotherReservationBtn = {\r\n type: buttonTypes.cancelBtn,\r\n label: this.ts.instant('bookAnotherReservation'),\r\n customclass: 'reservation-confirmation__cancel-reservation',\r\n };\r\n\r\n this.backToCartSummarybtn = {\r\n type: buttonTypes.cancelBtn,\r\n label: this.ts.instant('BackToCartSummary'),\r\n customclass: 'reservation-confirmation__cancel-reservation',\r\n };\r\n\r\n this.OperationCurrency = this.activityService.restaurantWidgetSettings$.value.OperationCurrency;\r\n\r\n }\r\n additionalGuest(eve) {\r\n this.activityService.TabChange$.next(ActivityTabs.ActivitySelection);\r\n }\r\n\r\n setPartiesData(data) {\r\n data.forEach(party => {\r\n\r\n });\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.subscriptions.add(this.ps.actionEnabled$.subscribe(x => {\r\n if (x == ComponentTypes.cancelReservation) {\r\n this.cancelDialogRef.close();\r\n this.confirmCancelation();\r\n }\r\n }));\r\n\r\n this.subscriptions.add(this.ps.cancelEnabled$.subscribe(x => {\r\n if (x == ComponentTypes.cancelReservation) {\r\n this.activityService.operation = operationType.edit;\r\n this.activityService.reservationConfirmationText = this.ts.instant('reservationDetainedConfirmationText');\r\n }\r\n }));\r\n }\r\n\r\n bookAnotherReservationBtn(event) {\r\n this.activityService.setMessageState('', 0);\r\n this.activityService.SaveBookingObj = null;\r\n this.activityService.SessionBookingObj = {} as SessionBookingDTO;\r\n this.activityService.slots_holder = [];\r\n this.activityService.selectedOpenBookingSlots = {};\r\n this.activityService.operation = operationType.create;\r\n this.activityService.TabChange$.next(ActivityTabs.BookingSelection);\r\n this.activityService.BookNew$.next(true);\r\n this.activityService.bookingSection$.next(BookingActivity.ClassBooking);\r\n this.activityService.RatePlanList$.next(null);\r\n this.isSessionClass = false;\r\n this.reservationCancelled = false;\r\n this.showScheduleSummary = true;\r\n this.activityService.ispaymentInvolvedInfo = null;\r\n this.activityService.reservationAttemptInfo = null;\r\n this.activityService.additionalGuestPage = false;\r\n this.activityService.additionalGuestRequired = 0;\r\n this.activityService.slotLockId = 0;\r\n this.activityService.RefundAmount = 0;\r\n this.activityService.TotalRefundAmount = 0;\r\n this.activityService.lockResult = null;\r\n this.activityService.reservationToken = null;\r\n this.activityService.bookingPartiesData$.next(null);\r\n const SaveContact = this.activityService.editPartyData$.value.Contact;\r\n this.activityService.editPartyData$.next({\r\n Contact: SaveContact\r\n })\r\n this.activityService.BookAnotherReservation.next(true);\r\n }\r\n\r\n showratePlanDetails() {\r\n const componentDetails: ComponentDetails = Utilities.setComponentDetails(RatePlanDetailsComponent, 'small', '', '',\r\n this.ts.instant('rates'));\r\n this.openCustomPopup(componentDetails, ComponentTypes.informationPopup, '450px', '300px', true, 'No', 'Ok',\r\n null, true)\r\n }\r\n\r\n getInstructors() {\r\n let SelectedStaffList = '';\r\n this.ConfirmationData.StaffId?.forEach((staff, index) => {\r\n const selectedStaff = this.activityService.InstructorList.filter(data => data.Id === staff)[0];\r\n if (selectedStaff) {\r\n SelectedStaffList = SelectedStaffList + (selectedStaff.Name + (selectedStaff.LastName || ''));\r\n }\r\n if (index !== this.ConfirmationData.StaffId?.length - 1) {\r\n SelectedStaffList = SelectedStaffList + ', ';\r\n }\r\n });\r\n this.Instructors = SelectedStaffList;\r\n }\r\n\r\n getLocations() {\r\n let SelectedLocationList = '';\r\n this.ConfirmationData.TableIds?.forEach((location, index) => {\r\n const selectedLoc = this.activityService.LocationList.filter(data => data.Id === location)[0];\r\n SelectedLocationList = SelectedLocationList + (selectedLoc.Name);\r\n\r\n if (index !== this.ConfirmationData.TableIds?.length - 1) {\r\n SelectedLocationList = SelectedLocationList + ', ';\r\n }\r\n });\r\n this.Locations = SelectedLocationList;\r\n }\r\n\r\n\r\n modifyDetails(event) {\r\n this.activityService.operation = operationType.edit;\r\n this.activityService.TabChange$.next(ActivityTabs.BookingSelection);\r\n }\r\n\r\n cancelReservationList(ids) {\r\n console.log(ids)\r\n this.sessionIds = ids;\r\n }\r\n\r\n cancelDetails(event) {\r\n const datePipeString = this.dateFormat.transform(new Date(this.activityService.editPartyData$.value.ReservedFor) , this.activityService.restaurantWidgetSettings$.value.DateFormat);\r\n this.ts.get('AskCancelReservationConfirmation', { date: datePipeString, locationName: this.activityService.restaurantWidgetSettings$.value.RestaurantName }).subscribe(text => {\r\n const popUpMessage = [{\r\n confirmationMessage: text,\r\n dialogTitle: this.ts.instant('cancelActivity'),\r\n showAlert: true\r\n }];\r\n const componentDetails: ComponentDetails = Utilities.setComponentDetails(PopupMessageComponent, 'small', '', popUpMessage,\r\n popUpMessage[0].dialogTitle);\r\n this.cancelDialogRef = this.openCustomPopup(componentDetails, ComponentTypes.cancelReservation, '450px', '300px', true, '', this.ts.instant('Yes'),\r\n this.ts.instant('No'), true)\r\n })\r\n }\r\n\r\n confirmCancelation() {\r\n this.activityService.CancelBooking(this.activityService.restaurantWidgetSettings$.value.RestaurantId, this.activityService.editPartyData$.value.Id, this.activityService.language, this.sessionIds).subscribe(data => {\r\n if (data.State == OperationResultState.Success) {\r\n this.activityService.reservationConfirmationText = this.ts.instant('reservationCancellationConfirmationText')\r\n this.activityService.setMessageState(this.ts.instant('reservationCancellationText'), 0);\r\n this.reservationCancelled = true;\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.subscriptions) {\r\n this.subscriptions.unsubscribe();\r\n }\r\n }\r\n\r\n reservationStatus(event) {\r\n }\r\n\r\n\r\n showSchedule(event) {\r\n this.showScheduleSummary = false;\r\n this.reservationCancelled = true;\r\n }\r\n\r\n backToCartSummary(event) {\r\n this.activityService.setMessageState('', 0);\r\n this.showScheduleSummary = true;\r\n this.reservationCancelled = false;\r\n this.activityService.TabChange$.next(ActivityTabs.CartDetails);\r\n }\r\n}\r\n","
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
","import { Component, OnInit } from '@angular/core';\r\nimport { GuestDataComponent } from 'src/app/shared/components/guest-data/guest-data.component';\r\nimport { ActivityTabs } from 'src/app/shared/constants/commonenums';\r\nimport { GuestService } from 'src/app/shared/services/guest.service';\r\n\r\n@Component({\r\n selector: 'app-activity-additionalguest',\r\n templateUrl: './activity-additionalguest.component.html',\r\n styleUrls: ['./activity-additionalguest.component.scss']\r\n})\r\nexport class ActivityAdditionalguestComponent implements OnInit {\r\n currentComponent = GuestDataComponent;\r\n selectedIndex: any;\r\n additonalGuestIndex:ActivityTabs = ActivityTabs.AdditionalGuest;\r\n constructor(private gs: GuestService) { \r\n this.gs.TabChange$.subscribe(data => {\r\n this.selectedIndex = data;\r\n })\r\n }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-activity-common-footer',\r\n templateUrl: './activity-common-footer.component.html',\r\n styleUrls: ['./activity-common-footer.component.scss']\r\n})\r\nexport class ActivityCommonFooterComponent implements OnInit {\r\n\r\n constructor() { }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n}\r\n","
\r\n
\r\n \"agilysys-logo\"\r\n
\r\n
","
\r\n
\r\n \r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
","import { Component, OnInit, Renderer2, OnDestroy } from '@angular/core';\r\nimport { Router, ActivatedRoute } from '@angular/router';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { environment } from 'src/environments/environment';\r\nimport { ActivityTabs, BookingBehavior } from '../shared/constants/commonenums';\r\nimport { BookingActivity , ClassType, LessonTypes} from '../shared/Models/SessionBookingDTO';\r\nimport { operationType, LanguageFileName } from '../shared/Models/WidgetSettingsModels';\r\nimport { GuestService } from '../shared/services/guest.service';\r\nimport { PopupService } from '../shared/services/popup.service';\r\nimport { ActivitiesService } from './activities.service';\r\nimport { DynamicFormService } from '../shared/dynamicform/service/dynamic-form.service';\r\n\r\n@Component({\r\n selector: 'app-activities',\r\n templateUrl: './activities.component.html',\r\n styleUrls: ['./activities.component.scss']\r\n})\r\nexport class ActivitiesComponent implements OnInit, OnDestroy {\r\n subscriptions: Subscription = new Subscription();\r\n outOfServiceMessage: any;\r\n restaurantId: any;\r\n SelectedTab = 0;\r\n propertyLocation: string;\r\n isDataLoaded: boolean = false;\r\n acceptReservation = false;\r\n ComponentTab = ActivityTabs;\r\n bookAnotherReservation = false;\r\n bookingSection = 1;\r\n BookingType = BookingActivity;\r\n backgroundImageData:any;\r\n OperationCurrency:string;\r\n\r\n constructor(public activityService: GuestService, private renderer: Renderer2, private router: Router, private route: ActivatedRoute, private ts: TranslateService, public ps: PopupService,public dfs:DynamicFormService) {\r\n\r\n this.subscriptions.add(this.activityService.TabChange$.subscribe(data => {\r\n this.SelectedTab = data;\r\n }));\r\n\r\n this.subscriptions.add(this.activityService.bookingSection$.subscribe(data => {\r\n this.bookingSection = data;\r\n }))\r\n this.subscriptions.add(this.activityService.BookAnotherReservation.subscribe(data => {\r\n if (data === true) {\r\n this.bookAnotherReservation = data;\r\n this.getRestaurantWidgetSettings();\r\n }\r\n }))\r\n this.activityService.restaurantWidgetName = this.route.snapshot.params.restaurantName;\r\n }\r\n\r\n ngOnInit(): void {\r\n this.getRestaurantWidgetSettings();\r\n }\r\n\r\n loadDataRetentionPolicy() {\r\n if (this.activityService.restaurantWidgetSettings$.value.IsGDPREnabled) {\r\n this.subscriptions.add(this.activityService.GetRestaurantPolicy(this.activityService.restaurantWidgetSettings$.value.RestaurantId).subscribe(data => {\r\n if (data) {\r\n this.activityService.fromclient = this.route.snapshot.queryParams[\"client\"] == \"yes\" ? true : false;\r\n this.activityService.dataRetentionPolicy$.next(data);\r\n }\r\n }));\r\n }\r\n }\r\n\r\n loadRestaurantSettings(data) {\r\n if(data?.OperationCurrency ){\r\n this.OperationCurrency = data.OperationCurrency\r\n }\r\n this.activityService.restaurantWidgetSettings$.next(data);\r\n this.activityService.widgetSettings = data;\r\n this.ps.restaurantWidgetSettings$.next(data);\r\n this.acceptReservation = data.AcceptsReservations && !data.DisableReservations;\r\n if (this.acceptReservation) {\r\n this.activityService.addGoogleTagManager(data.WidgetCustomization.GTMCode);\r\n this.activityService.restaurantWidgetName = data.RestaurantName;\r\n this.activityService.restaurantWidgetId = data.RestaurantId;\r\n if (this.activityService.restaurantWidgetSettings$.value.WidgetCustomization.AllowTableSelection) {\r\n this.activityService.getRestaurantImages(this.activityService.restaurantWidgetSettings$.value.RestaurantId);\r\n }\r\n\r\n this.subscriptions.add(this.activityService.GetCustomFields(data.RestaurantId).subscribe(data => {\r\n this.activityService.customGuestFields = data;\r\n }));\r\n\r\n this.subscriptions.add(this.activityService.GetCountries().subscribe(data => {\r\n this.activityService.countriesList = data;\r\n this.dfs.countriesList = data\r\n }))\r\n\r\n if (this.activityService.operation == operationType.create) {\r\n this.loadDataRetentionPolicy();\r\n }\r\n }\r\n else {\r\n const propertyName = data.PropertyType === this.activityService.ConfigSettings.defaultPropertyName ? this.activityService.ConfigSettings.defaultPropertyName : this.activityService.ConfigSettings.generalPropertyName;\r\n this.ts.get('notAcceptOnlineWebReservation', {propertyName: propertyName, restaurantName: data.RestaurantName, phoneNumber: data.phoneNumber}).subscribe(result => {\r\n this.outOfServiceMessage= {message : result};\r\n });\r\n }\r\n }\r\n\r\n loadClassActivities(data) {\r\n let ActivitiesList = [];\r\n this.activityService.LocationList = data.Locations;\r\n this.activityService.InstructorList = data.Instructors;\r\n this.activityService.AllocationTypes = data.AllocationMappings;\r\n const AllLessons = data.AvailableSpecialMeals;\r\n AllLessons.forEach(lesson => {\r\n let activity = {}\r\n let locationval = [];\r\n let staffval = [];\r\n lesson.ActivitySessions.forEach(session => {\r\n session.SessionLocationMappings?.forEach(location => {\r\n if ((locationval && locationval.length == 0) || locationval.length > 0 && !locationval.find(x => x.LocationId == location.StandaloneTableId))\r\n locationval.push({ 'LocationName': this.getLocation(location), 'LocationId': location.StandaloneTableId });\r\n\r\n });\r\n session.SessionStaffMappings?.forEach(staff => {\r\n if ((staffval && staffval.length == 0) || staffval.length > 0 && !staffval.find(x => x.ServerId == staff.ServerId))\r\n staffval.push({ 'ServerId': staff.ServerId, 'StaffName': this.getInstructor(staff) });\r\n\r\n });\r\n });\r\n\r\n locationval = locationval?.sort((a, b) => (a.LocationName > b.LocationName) ? 1 : ((b.LocationName > a.LocationName) ? -1 : 0))\r\n lesson['LocationName'] = locationval?.map(function (elem) {\r\n return elem.LocationName;\r\n }).join(\",\");\r\n lesson['Staffs'] = staffval?.filter(x => x).map(function (elem) {\r\n return elem.StaffName;\r\n }).join(\",\");\r\n lesson['LessonName'] = lesson.Name;\r\n lesson['LocationId'] = locationval;\r\n lesson['StaffValues'] = staffval;\r\n lesson['SpecialMealId'] = lesson.Id;\r\n lesson['SpecialMealId'] = lesson.Id;\r\n // Not considering available slots count\r\n lesson['Availability'] = lesson.ClassType == ClassType.Class && !(lesson.AvailableSlots > 0) ? 'Not Available' : 'Available';\r\n lesson['isViewable'] = locationval.length && staffval.length || false;\r\n ActivitiesList.push(lesson);\r\n });\r\n ActivitiesList = ActivitiesList.filter(x => x.isViewable);\r\n this.activityService.allClassActivitiesAvailable$.next(ActivitiesList);\r\n this.activityService.bookingSection$.next(BookingActivity.ClassBooking);\r\n }\r\n\r\n UniqueArrayOfObject(array, FirstkeyToBeUnique, SecondKeyToBeUnique) {\r\n return array.filter((data, index) => !array.slice(index + 1)\r\n .some(y => y[FirstkeyToBeUnique] === data[FirstkeyToBeUnique] && y[SecondKeyToBeUnique] === data[SecondKeyToBeUnique]));\r\n }\r\n\r\n\r\n getLocation(location) {\r\n let loc = this.activityService.LocationList.filter(data => data.Id === location.StandaloneTableId);\r\n return (loc && loc.length > 0) ? loc[0].Name : '';\r\n\r\n }\r\n\r\n getInstructor(staffdata) {\r\n const staff = this.activityService.InstructorList.filter(data => data.Id === staffdata.ServerId)[0];\r\n if (staff) {\r\n return staff.Name + ' ' + (staff.LastName || '');\r\n }\r\n else {\r\n return '';\r\n }\r\n }\r\n\r\n getRestaurantWidgetSettings() {\r\n\r\n if (this.route.snapshot.params.pageName && this.route.snapshot.params.restaurantName) {\r\n\r\n this.subscriptions.add(this.activityService.getWidgetSettingsByRestaurantName(this.activityService.restaurantWidgetName).subscribe(data => {\r\n if (data) {\r\n this.activityService.bookingSection$.next(BookingActivity.ClassBooking)\r\n if(data?.OperationCurrency ){\r\n this.OperationCurrency = data.OperationCurrency\r\n }\r\n this.activityService.restaurantWidgetSettings$.next(data);\r\n this.ps.restaurantWidgetSettings$.next(data);\r\n this.loadDataRetentionPolicy();\r\n // this.activityService.loadLanguageData(data);\r\n this.isDataLoaded = true;\r\n if (this.bookAnotherReservation) {\r\n this.activityService.filterAvailabilities.next(true);\r\n }\r\n }\r\n else {\r\n this.outOfServiceMessage= {message : this.activityService.ConfigSettings.commonErrorMessage};\r\n }\r\n }));\r\n\r\n } else if (this.route.snapshot.params.restaurantName) {\r\n this.activityService.restaurantWidgetName = this.route.snapshot.params.restaurantName;\r\n this.subscriptions.add(this.activityService.getWidgetSettingsByRestaurantName(this.activityService.restaurantWidgetName).subscribe(data => {\r\n if (data) {\r\n\r\n const CartList = JSON.parse(sessionStorage.getItem('CartList'));\r\n this.activityService.cartCount = CartList ? CartList.length : 0\r\n const crypto = window.crypto;\r\n var array = new Uint32Array(1);\r\n this.activityService.CartBookingList$.next(crypto.getRandomValues(array));\r\n this.activityService.bookingSection$.next(BookingActivity.ClassBooking)\r\n this.activityService.globaactivityServiceeatingAreaId = this.route.snapshot.queryParams[\"section_id\"];\r\n this.loadRestaurantSettings(data);\r\n // this.activityService.loadLanguageData(data);\r\n this.loadClassActivities(data);\r\n this.loadBackgroundImage(data.RestaurantId);\r\n this.isDataLoaded = true;\r\n if (this.bookAnotherReservation) {\r\n this.activityService.filterAvailabilities.next(true);\r\n }\r\n }\r\n else {\r\n this.outOfServiceMessage= {message :this.activityService.ConfigSettings.commonErrorMessage};\r\n }\r\n }));\r\n\r\n }\r\n else if (this.route.snapshot.params.restaurantToken) {\r\n if (!this.bookAnotherReservation) {\r\n this.restaurantId = this.route.snapshot.params.restaurantId;\r\n this.activityService.reservationToken = this.route.snapshot.params.restaurantToken;\r\n this.activityService.operation = this.route.snapshot.params.operation == \"edit\" ? operationType.edit : this.route.snapshot.params.operation == \"cancel\" ? operationType.cancel : operationType.create;\r\n this.activityService.language = Number(LanguageFileName[this.route.snapshot.params.language.toLowerCase().toString()]);\r\n this.activityService.byPassValidation = true;\r\n this.subscriptions.add(this.activityService.getByToken(this.activityService.reservationToken, '', this.route.snapshot.params.bookingType).subscribe(reservation => {\r\n this.activityService.byPassValidation = false;\r\n if (reservation) {\r\n if (!Array.isArray(reservation)) {\r\n this.restaurantId = reservation.RestaurantId;\r\n } else {\r\n this.restaurantId = reservation[0].RestaurantId\r\n }\r\n this.subscriptions.add(this.activityService.getWidgetSettingsByRestaurantId(this.restaurantId).subscribe(data => {\r\n if (data) {\r\n this.loadRestaurantSettings(data);\r\n this.loadClassActivities(data);\r\n this.loadBackgroundImage(data.RestaurantId);\r\n let LessonType = 0;\r\n if(data.AvailableSpecialMeals && data.AvailableSpecialMeals.length > 0 && reservation.SpecialMealId) {\r\n let specialMeal = data.AvailableSpecialMeals.find(meal => meal.Id == reservation.SpecialMealId )\r\n if(specialMeal){\r\n LessonType = specialMeal.LessonType;\r\n }\r\n }\r\n if (!Array.isArray(reservation) && reservation.SpecialMealId && LessonType == LessonTypes.GroupLesson) {\r\n this.activityService.editPartyData$.next(reservation);\r\n const specialMeal = data.AvailableSpecialMeals.filter(x => x.Id === reservation.SpecialMealId)[0];\r\n this.activityService.bookingSection$.next(BookingActivity.ClassBooking);\r\n if (this.activityService.operation === operationType.edit) {\r\n this.SelectedTab = ActivityTabs.ActivitySelection;\r\n this.activityService.TabChange$.next(ActivityTabs.ActivitySelection)\r\n } else {\r\n this.SelectedTab = ActivityTabs.ConfirmationSummary;\r\n this.activityService.TabChange$.next(this.SelectedTab)\r\n }\r\n this.activityService.SelectedActivity$.next(specialMeal);\r\n } else {\r\n if (Array.isArray(reservation)) {\r\n this.activityService.editPartyData$.next(reservation[0]);\r\n this.activityService.bookingPartiesData$.next(reservation);\r\n } else {\r\n this.activityService.editPartyData$.next(reservation);\r\n this.activityService.bookingPartiesData$.next([reservation]);\r\n }\r\n this.activityService.bookingSection$.next(BookingActivity.OpenBooking);\r\n this.SelectedTab = ActivityTabs.ConfirmationSummary;\r\n this.activityService.TabChange$.next(this.SelectedTab)\r\n }\r\n this.isDataLoaded = true;\r\n if (this.bookAnotherReservation) {\r\n this.activityService.filterAvailabilities.next(true);\r\n }\r\n }\r\n else {\r\n this.outOfServiceMessage= {message : this.activityService.ConfigSettings.commonErrorMessage};\r\n }\r\n\r\n }));\r\n }\r\n else {\r\n //this.outOfServiceMessage = this.activityService.ConfigSettings.commonErrorMessage;\r\n this.outOfServiceMessage= {message : this.ts.instant('cannotProcessRequest')};\r\n }\r\n }));\r\n }\r\n }\r\n else {\r\n\r\n this.outOfServiceMessage = {message : this.activityService.ConfigSettings.commonErrorMessage};\r\n }\r\n }\r\n\r\n\r\n loadBackgroundImage(restaurantId){\r\n this.subscriptions.add(this.activityService.getBackgroundImage(restaurantId).subscribe(response=>{\r\n if(response){\r\n this.backgroundImageData = response.Payload;\r\n this.setbackgroundImage();\r\n }\r\n }))\r\n }\r\n setbackgroundImage(){\r\n let mainContainer = document.getElementsByClassName('main-container');\r\n if (this.backgroundImageData && mainContainer) {\r\n this.renderer.setStyle(mainContainer[0], 'background-image', 'url(data:image/png;base64,'+this.backgroundImageData +')');\r\n this.renderer.setStyle(mainContainer[0], 'background-repeat', 'no-repeat');\r\n this.renderer.setStyle(mainContainer[0], 'background-size', 'cover');\r\n this.renderer.setStyle(mainContainer[0], 'background-position', 'center');\r\n } else {\r\n this.renderer.setStyle(mainContainer[0],'background',this.activityService.restaurantWidgetSettings$.value.WidgetCustomization.WidgetBackgroundColor);\r\n }\r\n }\r\n // getting data from common header\r\n\r\n closeMessage(event) {\r\n this.activityService.setMessageState('', 0);\r\n }\r\n ngOnDestroy(): void {\r\n if (this.subscriptions) { this.subscriptions.unsubscribe(); }\r\n }\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-error',\r\n templateUrl: './error.component.html',\r\n styleUrls: ['./error.component.scss']\r\n})\r\nexport class ErrorComponent implements OnInit {\r\n\r\n constructor() { }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n}\r\n","
\r\n
\r\n
\r\n
\r\n \"agilysys-logo\"\r\n
\r\n
\r\n

This page might not exist or no longer available

\r\n

\r\n You might not have the permission to view the page or it might have been deleted or expired\r\n

\r\n

\r\n Contact the owner of this link for more information.\r\n

\r\n
\r\n
\r\n
\r\n
","
\r\n
\r\n \r\n
\r\n\r\n\r\n
\r\n \r\n
\r\n {{ls.restaurantWidgetSettings$.value.WidgetCustomization.SubHeaderText}}\r\n {{'letsMakeReservation' | translate}}\r\n
\r\n
\r\n \r\n \r\n
\r\n
0 && ls.operation==operationType.create\">\r\n
\r\n {{'availableMenu' | translate}}\r\n \r\n \r\n {{'prePaymentNeeded' | translate}}\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n {{specialMeal.Name}}
\r\n
\r\n {{'serves'| translate}}\r\n {{specialMeal.MinPartySize}} -\r\n {{specialMeal.MaxPartySize}}\r\n {{'people' | translate}}\r\n
\r\n
\r\n 0\"\r\n [ngStyle]=\"{'color':ls.restaurantWidgetSettings$.value.WidgetCustomization.WidgetLinkColor}\"\r\n placement=\"bottom-left\" (click)=\"selectedViewPricing(specialMeal)\"\r\n (shown)=\"availableCoverTypePrices.length > 0\" [ngbPopover]=\"popContent\">{{'viewPrice' |\r\n translate}}\r\n {{specialMeal.Price ? (ls.OperationCurrency) + (specialMeal.Price | currencyDecimalFormatter) : ''}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
{{'reservationSummary'| translate}}
\r\n
\r\n {{ls.editPartyData$.value.SpecialMeal.Name}}\r\n 0 && ls.editPartyData$.value.PrepaymentState != PartyPrepaymentState.Refunded\">-\r\n {{ls.restaurantWidgetSettings$.value.OperationCurrency}}{{ls.editPartyData$.value.SpecialMealAmount | currencyDecimalFormatter}}\r\n \r\n {{ls.editPartyData$.value.Size}} {{'party' | translate}}\r\n {{ls.editPartyData$.value.ReservedFor |\r\n formatSettingsDate : ls.restaurantWidgetSettings$.value.DateFormat}}\r\n {{ls.editPartyData$.value.ReservedFor| localizeDate:'h:mm A'}}\r\n 0\">{{ls.editPartyData$.value.SeatingTypeId | seatingTypeFilter :\r\n ls.restaurantWidgetSettings$.value.SeatingTypeList}}\r\n 0 && ls.editPartyData$.value.PrepaymentState != PartyPrepaymentState.Refunded\">-\r\n {{ls.restaurantWidgetSettings$.value.OperationCurrency}}{{ls.editPartyData$.value.RatePlanAmount | currencyDecimalFormatter}}\r\n \r\n \r\n 0 && ls.editPartyData$.value.PrepaymentState == PartyPrepaymentState.None\">\r\n {{'amount' |\r\n translate}}{{ls.restaurantWidgetSettings$.value.OperationCurrency}}{{ls.editPartyData$.value.NoShowFeeAmount | currencyDecimalFormatter}}\r\n \r\n
\r\n
\r\n \r\n
{{'modifyReservation' | translate}}
\r\n \r\n
\r\n \r\n \r\n *{{partySizeError}}\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n \r\n {{availabilityText | translate}}\r\n \r\n
\r\n 5\" (click)=\"navigateLeft()\" class=\"icon-Left-Arrow\">\r\n
\r\n\r\n
\r\n {{days.value | localizeDate: 'DD'}}\r\n {{days.value | localizeDate: 'dddd'}}\r\n
\r\n
\r\n 5\" (click)=\"navigateRight()\" class=\"icon-Right-Arrow\">\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n {{'time' | translate}}\r\n\r\n
0 && ls.isMobileBrowser\">\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
0 && !ls.isMobileBrowser\">\r\n \r\n
\r\n
\r\n {{'noSlotsAvailable' | translate}}\r\n
\r\n\r\n
\r\n
\r\n
0\">\r\n \r\n \r\n
\r\n
\r\n {{'noSlotsAvailable' | translate}}\r\n
\r\n
\r\n \r\n
\r\n
0 && showSlots\">\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
{{coverType.CoverTypeName}}
\r\n
{{ls.restaurantWidgetSettings$.value.OperationCurrency}} {{coverType.Price | currencyDecimalFormatter}}
\r\n
\r\n
\r\n
\r\n
\r\n","import { AfterViewInit, Component, OnInit, Renderer2, QueryList, ViewChild, ViewChildren, ViewEncapsulation, OnDestroy, PipeTransform } from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { NgbPopover } from '@ng-bootstrap/ng-bootstrap';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport moment from 'moment';\r\nimport { Subscription } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { buttonTypes, componentName, ComponentTypes, LocationFilter, DefaultReservationView } from 'src/app/shared/constants/commonenums';\r\nimport { DynamicFormComponent } from 'src/app/shared/dynamicform/dynamic-form/dynamic-form.component';\r\nimport { ButtonValue, FieldConfig } from 'src/app/shared/dynamicform/models/common-models';\r\nimport { CoverTypePriceDTO, MealTabDTO, operationType, SpecialMealDTO } from 'src/app/shared/Models/WidgetSettingsModels';\r\nimport { Utilities } from 'src/app/shared/utilities/utilities';\r\nimport { LayoutService } from '../../layout.service';\r\nimport { ReservationService } from '../../reservation.service';\r\nimport _ from 'lodash';\r\nimport { Pipe } from '@angular/core';\r\nimport { ElementRef } from '@angular/core';\r\nimport { PartyPrepaymentState, PartyState } from 'src/app/shared/Models/PartyModels';\r\nimport { DynamicFormService } from 'src/app/shared/dynamicform/service/dynamic-form.service';\r\nimport { PopupMessageComponent } from 'src/app/shared/components/popup-message/popup-message.component';\r\nimport { ComponentDetails } from 'src/app/shared/dynamicform/models/popup.interface';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { PopupService } from 'src/app/shared/services/popup.service';\r\nimport { TableLockedDTO } from 'src/app/shared/Models/SlotLockModels';\r\nimport { SwiperConfigInterface } from 'ngx-swiper-wrapper';\r\nimport { GuestService } from 'src/app/shared/services/guest.service';\r\n\r\n@Component({\r\n selector: 'app-reservation-details',\r\n templateUrl: './reservation-details.component.html',\r\n styleUrls: ['./reservation-details.component.scss'],\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class ReservationDetailsComponent extends Utilities implements OnInit, AfterViewInit, OnDestroy {\r\n previousButton: ButtonValue;\r\n nextButton: ButtonValue;\r\n CheckAvailabilityBtn: ButtonValue;\r\n reservationConfig: FieldConfig[];\r\n coverTypeConfig: FieldConfig[] = [];\r\n timeBtnArrayConfig: FieldConfig[] = [];\r\n reservationSelectionConfig: FieldConfig[] = [];\r\n reservationDetailsFormGp: FormGroup;\r\n @ViewChild('availableDateContainer') el: ElementRef;\r\n subscriptions: Subscription = new Subscription();\r\n @ViewChild('reservationConfigForm', { static: true }) reservationConfigForm: DynamicFormComponent;\r\n @ViewChild('timeConfigForm', { static: true }) timeConfigForm: DynamicFormComponent;\r\n @ViewChild('reservationSelectionForm', { static: true }) reservationSelectionForm: DynamicFormComponent;\r\n @ViewChild('coverTypeForm', { static: true }) coverTypeForm: DynamicFormComponent;\r\n @ViewChildren('form') components: QueryList;\r\n @ViewChildren('popContent') popover: QueryList;\r\n buttonType = buttonTypes;\r\n selectedMeal: SpecialMealDTO;\r\n specialMealList: SpecialMealDTO[] = [];\r\n seatingAreaMasterList = [];\r\n seatingTypesMasterList = [];\r\n seatingAreaData = [{ id: 1, value: 'Main Dining' }, { id: 2, value: 'Family Pool' }];\r\n seatingTypeData = [{ id: 1, value: 'VIP' }, { id: 2, value: 'Balcony' }]\r\n SeatingAreaSeatingTypeMappings = [];\r\n partySizeOptions = [];\r\n showSlots: boolean = false;\r\n restaurantId: Number;\r\n isDropdown = false;\r\n availableCoverTypePrices: CoverTypePriceDTO[] = [];\r\n availableMealPeriods: any = [];\r\n timeBtnArray = [];\r\n daysForReservation: number;\r\n selectedPartySize: number;\r\n operationType = operationType;\r\n showOtherDays = false;\r\n selectedDay: any;\r\n dateSelectedInOtherDaysAvailability: any;\r\n otherAvailableDays = [];\r\n seatingTypeInfoPopup: MatDialogRef;\r\n tableLockDTO: TableLockedDTO;\r\n showRefreshText = false;\r\n isSpecialMealDisabled = false;\r\n displaySeatingType = true;\r\n displaySeatingArea = true;\r\n availabilityText: any = '';\r\n triggerAvailableDatesApiCall = false;\r\n PartyPrepaymentState = PartyPrepaymentState;\r\n selectedMealTab: number = 0;\r\n originalReservedFor: Date;\r\n partySizeError: string;\r\n isSpecialMealAvailable = true;\r\n isInitialEdit = true;\r\n isNextBtnDisabled = false;\r\n openHourDays = [];\r\n CustomOpenHours = [];\r\n\r\n public config: SwiperConfigInterface = {\r\n slidesPerView: 3,\r\n spaceBetween: 10,\r\n slideToClickedSlide: false,\r\n breakpoints: {\r\n 650: {\r\n slidesPerView: 3\r\n },\r\n 800: {\r\n slidesPerView: 4,\r\n },\r\n 1024: {\r\n slidesPerView: 5,\r\n },\r\n 1366: {\r\n slidesPerView: 7,\r\n },\r\n 1500: {\r\n slidesPerView: 8,\r\n }\r\n },\r\n navigation: {\r\n nextEl: '.swiper-button-next',\r\n prevEl: '.swiper-button-prev',\r\n }\r\n };\r\n\r\n constructor(private ts: TranslateService, private dfs: DynamicFormService, public ls: LayoutService, private fb: FormBuilder, private rs: ReservationService, private renderer: Renderer2, public dialog: MatDialog, private ps: PopupService, public gs: GuestService) {\r\n super(dialog);\r\n }\r\n\r\n ngOnInit(): void {\r\n this.reservationDetailsFormGp = this.fb.group({\r\n specialMeal: [''],\r\n partySize: '',\r\n reservationDate: new Date(),\r\n seatingArea: '',\r\n seatingType: '',\r\n reservationTime: ['', Validators.required],\r\n communalAvailability: false,\r\n tableId: [''],\r\n coverTypes: [],\r\n eventSelection: ''\r\n });\r\n this.rs.reservationFormGroup.addControl('reservationDetailsForm', this.reservationDetailsFormGp);\r\n this.displaySeatingArea = this.ls.restaurantWidgetSettings$.value.WidgetCustomization?.LocationFilters?.filter(x => x == LocationFilter.ByArea).length > 0;\r\n this.displaySeatingType = this.ls.restaurantWidgetSettings$.value.WidgetCustomization?.LocationFilters?.filter(x => x == LocationFilter.ByType).length > 0;\r\n this.createReservationConfig();\r\n if (!this.ls.restaurantWidgetSettings$.value.WidgetCustomization.AllowNewReservations) {\r\n let eventOptions = [{\r\n id: 0,\r\n value: 'specialEvent'\r\n }, { id: 1, value: 'dailyReservation' }];\r\n this.reservationSelectionConfig = [\r\n {\r\n type: 'radio',\r\n name: 'eventSelection',\r\n placeholder: '',\r\n options: eventOptions,\r\n isFormArray: false,\r\n class: \"reservation-details__events\",\r\n value: this.ls.editPartyData?.eventSelection ? this.ls.editPartyData.eventSelection : this.ls.restaurantWidgetSettings$.value.WidgetCustomization.DefaultReservationView ? this.ls.restaurantWidgetSettings$.value.WidgetCustomization.DefaultReservationView : eventOptions[0].id,\r\n cellClick: this.EventSelection.bind(this),\r\n disabled: false,\r\n selectValue: true\r\n }\r\n ]\r\n this.dfs.selectedRadioOption = this.ls.editPartyData?.eventSelection ? this.ls.editPartyData.eventSelection : this.ls.restaurantWidgetSettings$.value.WidgetCustomization.DefaultReservationView ? this.ls.restaurantWidgetSettings$.value.WidgetCustomization.DefaultReservationView : eventOptions[0].id;\r\n }\r\n if(this.ls.restaurantWidgetSettings$.value.WidgetCustomization.DefaultReservationView) {\r\n this.isSpecialMealAvailable = false;\r\n }\r\n this.createActionButtons();\r\n this.rs.additionalGuestPage = false;\r\n\r\n }\r\n\r\n EventSelection(event) {\r\n this.reservationSelectionConfig[0].value = event.value;\r\n this.reservationSelectionConfig = [...this.reservationSelectionConfig];\r\n this.rs.reservationFormGroup.get('reservationDetailsForm').get('eventSelection').setValue(event.value);\r\n if (event.value) {\r\n this.isSpecialMealAvailable = false;\r\n this.reservationDetailsFormGp.controls.specialMeal.setValue('');\r\n this.selectedSpecialMeal('');\r\n } else {\r\n this.isSpecialMealAvailable = true;\r\n this.selectedSpecialMeal(this.specialMealList[0]);\r\n }\r\n }\r\n createReservationConfig() {\r\n this.reservationConfig = [\r\n {\r\n type: 'select',\r\n name: 'partySize',\r\n placeholder: '',\r\n options: [],\r\n appearance: true,\r\n isFormArray: false,\r\n label: 'partySize',\r\n class: \"reservation-details__party-size\",\r\n validation: [Validators.required],\r\n },\r\n {\r\n type: 'date',\r\n name: 'reservationDate',\r\n placeholder: '',\r\n appearance: true,\r\n isFormArray: false,\r\n label: 'date',\r\n class: \"reservation-details__date\",\r\n validation: [Validators.required],\r\n disabled: false,\r\n },\r\n {\r\n type: 'select',\r\n name: 'seatingArea',\r\n placeholder: '',\r\n options: this.seatingAreaData,\r\n appearance: true,\r\n isFormArray: false,\r\n label: 'seatingArea',\r\n class: this.displaySeatingArea ? \"reservation-details__seating-area\" : \"reservation-details__seating-area-hide\",\r\n value: 0,\r\n validation: [Validators.required],\r\n isNativeControl: this.ls.isMobileBrowser\r\n\r\n },\r\n {\r\n type: 'select',\r\n name: 'seatingType',\r\n placeholder: '',\r\n options: this.seatingTypeData,\r\n appearance: true,\r\n isFormArray: false,\r\n label: 'seatingType',\r\n class: this.displaySeatingType ? \"reservation-details__seating-type\" : \"reservation-details__seating-type-hide\",\r\n value: 0,\r\n validation: [Validators.required],\r\n isNativeControl: this.ls.isMobileBrowser\r\n },\r\n {\r\n type: 'checkbox',\r\n placeholder: 'communalTableAvailability',\r\n value: false,\r\n name: 'communalAvailability',\r\n class: 'reservation-details__communal-availability',\r\n isFormArray: false,\r\n }\r\n ];\r\n }\r\n\r\n\r\n createActionButtons() {\r\n this.nextButton = {\r\n type: buttonTypes.confirmBtn,\r\n label: 'next',\r\n customclass: 'reservation-details__confirm-btn',\r\n };\r\n this.previousButton = {\r\n type: buttonTypes.cancelBtn,\r\n label: 'previous',\r\n customclass: 'reservation-details__previous-btn',\r\n disbaledproperity: true\r\n };\r\n this.CheckAvailabilityBtn = {\r\n type: buttonTypes.confirmBtn,\r\n label: 'checkAvailability',\r\n customclass: 'reservation-details__availablity-btn',\r\n disbaledproperity: false\r\n };\r\n\r\n this.subscriptions.add(this.ps.actionEnabled$.subscribe(from => {\r\n if (from == ComponentTypes.seatingTypeInfoPopup) {\r\n this.seatingTypeInfoPopup.close();\r\n this.updateLockedTableInReservationForm(this.tableLockDTO);\r\n this.ls.nextButton.next(componentName.guestDetails);\r\n }\r\n }));\r\n\r\n this.subscriptions.add(this.ps.cancelEnabled$.subscribe(from => {\r\n if (from == ComponentTypes.seatingTypeInfoPopup) {\r\n this.seatingTypeInfoPopup.close();\r\n if (this.ls.lockResult && this.ls.lockResult.SlotLockIdDTO) {\r\n this.rs.ReleaseLockSlot(this.ls.restaurantWidgetSettings$.value.RestaurantId, this.ls.lockResult.SlotLockIdDTO.Id).subscribe(data => {\r\n this.ls.offTimer();\r\n });\r\n }\r\n }\r\n }));\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.availabilityText = this.ts.instant('showAvailableDays');\r\n this.setResetBackgroundColor();\r\n this.subscriptions.add(this.ls.restaurantWidgetSettings$.subscribe(data => {\r\n if (data) {\r\n this.loadInitialSettings(data);\r\n if (!this.ls.editPartyData && this.ls.operation != operationType.edit) {\r\n let splMealFromURL: any;\r\n if (this.ls.specialMealIdFromURL && this.specialMealList && this.specialMealList.length > 0) {\r\n splMealFromURL = this.specialMealList.find(spm => spm.Id == this.ls.specialMealIdFromURL);\r\n }\r\n if (splMealFromURL) {\r\n this.reservationDetailsFormGp.controls.specialMeal.setValue(splMealFromURL);\r\n this.selectedSpecialMeal(splMealFromURL);\r\n }\r\n else {\r\n let specialMeal = this.ls.restaurantWidgetSettings$.value.WidgetCustomization.DefaultReservationView ? '' : this.specialMealList[0];\r\n this.reservationDetailsFormGp.controls.specialMeal.setValue(specialMeal);\r\n this.selectedSpecialMeal(specialMeal);\r\n }\r\n }\r\n }\r\n\r\n }));\r\n this.subscriptions.add(this.reservationConfigForm.form.valueChanges.subscribe(value => {\r\n this.selectedDay = ''; // reset the date selected in Other Availability Days\r\n this.dateSelectedInOtherDaysAvailability = ''; \r\n\r\n this.clearMealTabSelection();\r\n\r\n this.reservationDetailsFormGp.controls.reservationDate.setValue(value.reservationDate)\r\n this.reservationDetailsFormGp.controls.seatingArea.setValue({ id: value.seatingArea, name: this.seatingAreaMasterList.filter(x => x.Id == value.seatingArea)[0].Name });\r\n this.reservationDetailsFormGp.controls.seatingType.setValue({ id: value.seatingType, name: this.seatingTypesMasterList.filter(x => x.Id == value.seatingType)[0].Description });\r\n this.reservationDetailsFormGp.controls.partySize.setValue(value.partySize);\r\n this.reservationDetailsFormGp.controls.reservationTime.setValue(value.reservationTime);\r\n this.reservationDetailsFormGp.controls.communalAvailability.setValue(value.communalAvailability);\r\n\r\n this.showSlots = false;\r\n this.rs.reservationFormGroup.get('reservationDetailsForm').get('reservationDate').setValue(value.reservationDate);\r\n this.rs.reservationFormGroup.get('reservationDetailsForm').get('seatingArea').setValue({ id: value.seatingArea, name: this.seatingAreaMasterList.filter(x => x.Id == value.seatingArea)[0].Name });\r\n this.rs.reservationFormGroup.get('reservationDetailsForm').get('seatingType').setValue({ id: value.seatingType, name: this.seatingTypesMasterList.filter(x => x.Id == value.seatingType)[0].Description });\r\n this.rs.reservationFormGroup.get('reservationDetailsForm').get('partySize').setValue(value.partySize);\r\n this.rs.reservationFormGroup.get('reservationDetailsForm').get('reservationTime').setValue(value.reservationTime);\r\n this.rs.reservationFormGroup.get('reservationDetailsForm').get('communalAvailability').setValue(value.communalAvailability);\r\n this.checkPartySizeValidationAndAssignFormValue();\r\n }));\r\n\r\n this.subscriptions.add(this.reservationConfigForm.form.controls.seatingArea.valueChanges.subscribe(value => {\r\n if (value || value == 0) {\r\n this.LoadSeatingTypes(value);\r\n if (this.ls.operation == operationType.edit && this.ls.editPartyData$.value && this.triggerAvailableDatesApiCall && !this.CheckAvailabilityBtn.disbaledproperity) {\r\n this.getRestaurantAvailableDates(this.rs.reservationFormGroup.controls.reservationDetailsForm.value.partySize,\r\n moment(this.rs.reservationFormGroup.controls.reservationDetailsForm.value.reservationDate).format('YYYY-MM-DD'),\r\n value,\r\n this.rs.reservationFormGroup.controls.reservationDetailsForm.value.specialMeal.Id,\r\n this.rs.reservationFormGroup.controls.reservationDetailsForm.value.seatingType.id);\r\n }\r\n }\r\n }));\r\n this.subscriptions.add(this.reservationConfigForm.form.controls.seatingType.valueChanges.subscribe(value => {\r\n if (value || value == 0) {\r\n if (this.ls.operation == operationType.edit && this.ls.editPartyData$.value && this.triggerAvailableDatesApiCall && !this.CheckAvailabilityBtn.disbaledproperity) {\r\n this.getRestaurantAvailableDates(this.rs.reservationFormGroup.controls.reservationDetailsForm.value.partySize,\r\n moment(this.rs.reservationFormGroup.controls.reservationDetailsForm.value.reservationDate).format('YYYY-MM-DD'),\r\n this.rs.reservationFormGroup.controls.reservationDetailsForm.value.seatingArea.id,\r\n this.rs.reservationFormGroup.controls.reservationDetailsForm.value.specialMeal.Id,\r\n value);\r\n }\r\n }\r\n }));\r\n this.subscriptions.add(this.reservationConfigForm.form.controls.partySize.valueChanges.subscribe(value => {\r\n if (value) {\r\n if (this.ls.operation == operationType.edit && this.ls.editPartyData$.value && this.triggerAvailableDatesApiCall && !this.CheckAvailabilityBtn.disbaledproperity && !(this.coverTypeConfig.length > 0)) {\r\n this.getRestaurantAvailableDates(value,\r\n moment(this.rs.reservationFormGroup.controls.reservationDetailsForm.value.reservationDate).format('YYYY-MM-DD'),\r\n this.rs.reservationFormGroup.controls.reservationDetailsForm.value.seatingArea.id,\r\n this.rs.reservationFormGroup.controls.reservationDetailsForm.value.specialMeal.Id,\r\n this.rs.reservationFormGroup.controls.reservationDetailsForm.value.seatingType.id);\r\n }\r\n }\r\n }));\r\n\r\n this.subscriptions.add(this.reservationConfigForm.form.controls.reservationDate.valueChanges.subscribe(value => {\r\n if (value) {\r\n if (this.showSlots && this.availableMealPeriods.length == 0) { // Reset the Show other days availability\r\n this.resetOtherDaysAvailability();\r\n }\r\n } \r\n }));\r\n this.subscriptions.add(this.coverTypeForm.form.valueChanges.subscribe(val => {\r\n if (this.coverTypeConfig.length) {\r\n let partySize = 0;\r\n this.availableCoverTypePrices.forEach(x => {\r\n if (this.coverTypeForm.form.controls[x.Id.toString()])\r\n partySize += +this.coverTypeForm.form.controls[x.Id.toString()].value\r\n });\r\n this.reservationConfigForm.form.controls.partySize.setValue(partySize, { emitEvent: false });\r\n this.reservationDetailsFormGp.controls.partySize.setValue(partySize, { emitEvent: false });\r\n this.rs.reservationFormGroup.get('reservationDetailsForm').get('partySize').setValue(partySize);\r\n let specialMealPartySize = this.reservationDetailsFormGp.get('specialMeal').value;\r\n this.isNextBtnDisabled = (+partySize < specialMealPartySize.MinPartySize) || (+partySize > specialMealPartySize.MaxPartySize);\r\n this.CheckAvailabilityBtn.disbaledproperity = this.isNextBtnDisabled;\r\n this.nextButton.disbaledproperity = this.isNextBtnDisabled;\r\n this.showSlots = false;\r\n this.checkPartySizeValidationAndAssignFormValue();\r\n if (+partySize < specialMealPartySize.MinPartySize) {\r\n this.ts.get('minPartySizeError', {minPartySize: specialMealPartySize.MinPartySize,}).subscribe(result => {\r\n this.partySizeError = result;\r\n });\r\n } else if (+partySize > specialMealPartySize.MaxPartySize) {\r\n this.ts.get('maxPartySizeError', {maxPartySize: specialMealPartySize.MaxPartySize}).subscribe(result => {\r\n this.partySizeError = result;\r\n });\r\n } else {\r\n this.partySizeError = '';\r\n }\r\n }\r\n }))\r\n this.subscriptions.add(\r\n this.reservationDetailsFormGp.valueChanges.subscribe(x => {\r\n this.nextButton.disbaledproperity = this.reservationDetailsFormGp.invalid || this.isNextBtnDisabled;\r\n })\r\n )\r\n\r\n this.setEditData();\r\n\r\n }\r\n\r\n loadInitialSettings(data) {\r\n this.daysForReservation = Number(data.DaysForReservation);\r\n if (this.ls.restaurantWidgetSettings$.value.WidgetCustomization.PartySizeAndDateDisclaimer) {\r\n this.reservationConfig[0].icon = 'icon-Info';\r\n this.reservationConfig[0].toolTip = this.ls.restaurantWidgetSettings$.value.WidgetCustomization.PartySizeAndDateDisclaimer;\r\n }\r\n this.restaurantId = data.RestaurantId;\r\n if (!this.ls.restaurantWidgetSettings$.value.WidgetCustomization.ShowCommunalTableAvailabilityOption) {\r\n let index = this.reservationConfig.findIndex(x => x.name == 'communalAvailability');\r\n this.reservationConfig.splice(index, 1);\r\n }\r\n this.openHourDays = (data.OpenHourDays && data.OpenHourDays.length > 0) ? data.OpenHourDays : [];\r\n this.CustomOpenHours = (data.CustomOpenHours && data.CustomOpenHours.length > 0) ? data.CustomOpenHours : [];\r\n this.specialMealList = (data.AvailableSpecialMeals && data.AvailableSpecialMeals.length > 0) ? _.sortBy(data.AvailableSpecialMeals, \"SortOrder\") : [];\r\n if (this.specialMealList.length > 0 && this.ls.globalSeatingAreaId) {\r\n this.specialMealList = this.specialMealList.filter(x => x.SeatingAreaId == this.ls.globalSeatingAreaId);\r\n }\r\n this.seatingAreaMasterList = this.ls.globalSeatingAreaId ? data.SeatingAreaList.filter(x => x.Id == this.ls.globalSeatingAreaId) : data.SeatingAreaList;\r\n this.seatingTypesMasterList = (data.SeatingTypeList && data.SeatingTypeList.length > 0) ? data.SeatingTypeList : [];\r\n this.addAnySeatingOptionInMasterList();\r\n this.SeatingAreaSeatingTypeMappings = (data.SeatingAreaSeatingTypeMappings && data.SeatingAreaSeatingTypeMappings.length > 0) ? this.ls.globalSeatingAreaId ? data.SeatingAreaSeatingTypeMappings.filter(x => x.SeatingAreaId == this.ls.globalSeatingAreaId) : data.SeatingAreaSeatingTypeMappings : [];\r\n if (!this.openHourDays?.length && !this.CustomOpenHours?.length) {\r\n let dateIndex = this.reservationConfig?.findIndex(x => x.name === 'reservationDate');\r\n this.reservationConfig[dateIndex].disabled = true;\r\n }\r\n this.setAvailableMealPeriod(data.MealTabs);\r\n }\r\n\r\n setEditData() {\r\n if (this.ls.editPartyData) { //Onscreen Edit\r\n this.triggerAvailableDatesApiCall = false;\r\n\r\n // this.selectedSpecialMeal(this.ls.editPartyData.specialMeal);\r\n\r\n if (this.ls.editPartyData.eventSelection) {\r\n this.isSpecialMealAvailable = false;\r\n this.reservationDetailsFormGp.controls.specialMeal.setValue('');\r\n this.selectedSpecialMeal('');\r\n } else {\r\n this.isSpecialMealAvailable = true;\r\n this.selectedSpecialMeal(this.ls.editPartyData.specialMeal);\r\n }\r\n this.reservationConfigForm.form.controls.partySize.setValue(this.ls.editPartyData.partySize);\r\n this.reservationConfigForm.form.controls.reservationDate.setValue(this.ls.editPartyData.reservationDate);\r\n this.reservationConfigForm.form.controls.seatingArea.setValue(this.ls.editPartyData.seatingArea.id);\r\n this.LoadSeatingTypes(this.ls.editPartyData.seatingArea.id);\r\n let selectedSeatingTypeId = this.reservationConfig[3].options.filter(x => x.id == this.ls.editPartyData.seatingType.id)[0];\r\n this.reservationConfigForm.form.controls.seatingType.setValue(selectedSeatingTypeId ? this.ls.editPartyData.seatingType.id : this.reservationConfig[3].options[0].id);\r\n this.showSlots = false;\r\n this.reservationDetailsFormGp.markAsDirty();\r\n if (this.ls.editPartyData.coverTypes) {\r\n this.coverTypeConfig.forEach(coverType => {\r\n coverType.value = this.ls.editPartyData.coverTypes[coverType.name];\r\n });\r\n }\r\n if (this.ls.restaurantWidgetSettings$.value.WidgetCustomization.ShowCommunalTableAvailabilityOption) {\r\n this.reservationConfigForm.form.controls.communalAvailability.setValue(this.ls.editPartyData.communalAvailability);\r\n }\r\n if (this.ls.editPartyData.tableId) { // based on availability again table has to be selected again\r\n this.ls.editPartyData.tableId = [];\r\n this.rs.reservationFormGroup.controls.reservationDetailsForm.value.tableId = [];\r\n }\r\n if (this.ls.operation == operationType.edit && this.ls.editPartyData$.value) {\r\n this.originalReservedFor = this.ls.editPartyData$.value.ReservedFor;\r\n this.getRestaurantAvailableDates(this.rs.reservationFormGroup.controls.reservationDetailsForm.value.partySize,\r\n moment(this.rs.reservationFormGroup.controls.reservationDetailsForm.value.reservationDate).format('YYYY-MM-DD'),\r\n this.rs.reservationFormGroup.controls.reservationDetailsForm.value.seatingArea.id,\r\n this.rs.reservationFormGroup.controls.reservationDetailsForm.value.specialMeal.Id,\r\n this.rs.reservationFormGroup.controls.reservationDetailsForm.value.seatingType.id)\r\n }\r\n\r\n }\r\n else if (this.ls.operation == operationType.edit && this.ls.editPartyData$.value && this.ls.editPartyData$.value.State !== PartyState.Cancelled) { //Edit Reservation\r\n this.triggerAvailableDatesApiCall = false;\r\n this.rs.primaryContact = _.cloneDeep(this.ls.editPartyData$.value.Contact);\r\n this.rs.secondaryContactList = this.ls.editPartyData$.value.BookingContacts && this.ls.editPartyData$.value.BookingContacts.length > 0 ? _.cloneDeep(this.ls.editPartyData$.value.BookingContacts.filter(bc=>bc.ContactId != this.ls.editPartyData$.value.Contact.Id)) : null;\r\n this.originalReservedFor = this.ls.editPartyData$.value.ReservedFor;\r\n this.subscriptions.add(this.ls.editPartyData$.subscribe(data => {\r\n if (data) {\r\n let selectedMeal: any = '';\r\n if (data.SpecialMeal && data.SpecialMeal.Id && !this.specialMealList.find(x => x.Id == data.SpecialMeal.Id)) {\r\n //Special Meal Deleted\r\n return;\r\n }\r\n\r\n selectedMeal = data.SpecialMeal && data.SpecialMeal.Id ? this.specialMealList.filter(x => x.Id == data.SpecialMeal.Id)[0] : '';\r\n this.selectedSpecialMeal(selectedMeal);\r\n this.reservationConfigForm.form.controls.partySize.setValue(data.Size);\r\n this.reservationConfigForm.form.controls.reservationDate.setValue(moment(data.ReservationDate).format('YYYY-MM-DD'));\r\n this.reservationConfigForm.form.controls.seatingArea.setValue(data.SeatingAreaId > 0 ? data.SeatingAreaId : 0);\r\n this.LoadSeatingTypes(data.SeatingAreaId > 0 ? data.SeatingAreaId : 0);\r\n setTimeout(() => {\r\n this.reservationConfigForm.form.controls.seatingType.setValue(this.displaySeatingType ? (data.SeatingTypeId > 0 ? data.SeatingTypeId : 0) : 0);\r\n }, 100)\r\n\r\n this.showSlots = false;\r\n if (this.ls.restaurantWidgetSettings$.value.WidgetCustomization.ShowCommunalTableAvailabilityOption) {\r\n this.reservationConfigForm.form.controls.communalAvailability.setValue(this.ls.editPartyData$.value.IsCommunalTable);\r\n }\r\n this.reservationDetailsFormGp.markAsDirty();\r\n\r\n if (this.ls.editPartyData$.value.CoverTypeQuantities && this.ls.editPartyData$.value.CoverTypeQuantities.length > 0) {\r\n let totalCovers = 0\r\n this.coverTypeConfig.forEach(coverType => {\r\n let coverTypeValue = this.ls.editPartyData$.value.CoverTypeQuantities.filter(x => x.CoverTypeId.toString() == coverType.name)[0];\r\n if (coverTypeValue) {\r\n coverType.value = coverTypeValue.Covers;\r\n totalCovers = totalCovers + coverTypeValue.Covers;\r\n }\r\n });\r\n if (totalCovers == data.Size) { //CoverType was deleted\r\n this.getRestaurantAvailableDates(data.Size, moment(data.ReservationDate).format('YYYY-MM-DD'), data.SeatingAreaId, data.SpecialMealId, data.SeatingTypeId);\r\n }\r\n else {\r\n this.restrictAvailabilityCheck(true);\r\n }\r\n }\r\n else {\r\n this.getRestaurantAvailableDates(data.Size, moment(data.ReservationDate).format('YYYY-MM-DD'), data.SeatingAreaId, data.SpecialMealId, data.SeatingTypeId);\r\n }\r\n }\r\n }));\r\n }\r\n else if (this.ls.operation == operationType.cancel || (this.ls.editPartyData$.value && this.ls.editPartyData$.value.State === PartyState.Cancelled)) {\r\n this.ls.nextButton.next(componentName.confirmDetails);\r\n }\r\n\r\n }\r\n\r\n navigateLeft() {\r\n let element = this.el.nativeElement;\r\n if (element.offsetWidth < element.scrollWidth) {\r\n element.scrollLeft = element.scrollLeft - 60;\r\n }\r\n }\r\n\r\n navigateRight() {\r\n let element = this.el.nativeElement;\r\n if (element.offsetWidth < element.scrollWidth) {\r\n element.scrollLeft = element.scrollLeft + 60;\r\n }\r\n }\r\n\r\n selectedDate(day) {\r\n if (!this.CheckAvailabilityBtn.disbaledproperity) {\r\n this.clearBackgroundColor();\r\n this.selectedDay = day;\r\n this.dateSelectedInOtherDaysAvailability = moment(this.selectedDay.value).format('YYYY-MM-DD');\r\n this.reservationDetailsFormGp.controls.reservationTime.setValue(null);\r\n this.reservationConfigForm.form?.controls['reservationDate']?.setValue(day.value);\r\n // this.reservationConfigForm.form?.updateValueAndValidity()\r\n this.getRestaurantDateAvailability(this.dateSelectedInOtherDaysAvailability);\r\n }\r\n }\r\n\r\n clearBackgroundColor() {\r\n let availabilityDays = document.querySelectorAll('.reservation-details__date-view');\r\n availabilityDays.forEach(data => {\r\n this.renderer.removeStyle(data, 'background');\r\n this.renderer.removeStyle(data, 'color');\r\n });\r\n }\r\n\r\n setResetBackgroundColor() {\r\n this.clearBackgroundColor();\r\n let selectedAvailabilityDays = document.querySelectorAll('.reservation-details__date-view.reservation-details__selected');\r\n selectedAvailabilityDays.forEach(data => {\r\n this.renderer.setStyle(data, 'background', this.ls.restaurantWidgetSettings$.value.WidgetCustomization.AvailableButtonBackgroundColor);\r\n this.renderer.setStyle(data, 'color', this.ls.restaurantWidgetSettings$.value.WidgetCustomization.AvailableButtonColor)\r\n //Needed\r\n // this.renderer.setStyle(data, 'color', this.ls.restaurantWidgetSettings$.value.WidgetCustomization.EarlierLaterHoverBackgroundColor);\r\n });\r\n let coverTypeElements = document.querySelectorAll('.reservation-details__cover-type');\r\n let coverLength = coverTypeElements.length;\r\n coverTypeElements.forEach((data, index) => {\r\n let coverWidth = `calc(100% / ${coverLength})`;\r\n this.renderer.setStyle(data, 'width', coverWidth);\r\n\r\n });\r\n setTimeout(() => {\r\n if (this.ls.editPartyData && this.isInitialEdit && this.ls.isMobileBrowser) {\r\n this.isInitialEdit = false;\r\n this.reservationConfigForm.form.controls.partySize.setValue(this.ls.editPartyData.partySize);\r\n }\r\n }, 100)\r\n }\r\n\r\n showOtherDaysAvailable() {\r\n this.showOtherDays = true;\r\n this.showRefreshText = true\r\n this.availabilityText = 'refresh';\r\n this.otherAvailableDays = [];\r\n let Date = moment(this.rs.reservationFormGroup.controls.reservationDetailsForm.value.reservationDate).format('YYYY-MM-DD');\r\n for (let i = 1; i <= this.ls.restaurantWidgetSettings$.value.MaxAlternateDays; i++) {\r\n let date = this.addDays(this.rs.reservationFormGroup.controls.reservationDetailsForm.value.reservationDate, i - 1);\r\n if (date) {\r\n this.otherAvailableDays.push({ Id: i, value: date.toISOString() })\r\n }\r\n }\r\n let mealPeriodConfig = this.reservationConfig.filter(x => x.name === 'mealPeriod');\r\n if (mealPeriodConfig.length > 0) {\r\n if (!(mealPeriodConfig[0].class.includes('-hide'))) {\r\n mealPeriodConfig[0].class = 'reservation-details__meal-period-hide';\r\n }\r\n }\r\n }\r\n addDays(date, days) {\r\n var result = new Date(date);\r\n var maxAllowedDate = this.reservationConfig[1].maxDate;\r\n result.setDate(result.getDate() + days);\r\n var daysDiff = moment(moment(result).format('YYYY-MM-DD')).diff(moment(maxAllowedDate).format('YYYY-MM-DD'), 'days')\r\n return daysDiff <= 0 ? result : null;\r\n }\r\n\r\n resetOtherDaysAvailability() {\r\n this.availabilityText = 'showAvailableDays';\r\n this.otherAvailableDays = [];\r\n this.showOtherDays = false;\r\n this.showRefreshText = false;\r\n this.selectedDay = '';\r\n this.dateSelectedInOtherDaysAvailability = '';\r\n }\r\n\r\n setAvailableMealPeriod(mealPeriods) {\r\n if (mealPeriods.length > 0) {\r\n this.reservationConfig.push(\r\n {\r\n type: 'radio',\r\n name: 'mealPeriod',\r\n placeholder: '',\r\n options: mealPeriods.map(x => ({ id: x.Id, value: x.Name })),\r\n isFormArray: false,\r\n label: 'mealPeriod',\r\n class: \"reservation-details__meal-period\",\r\n value: 0,\r\n cellClick: this.CheckAvailability.bind(this),\r\n disabled: false\r\n }\r\n )\r\n this.reservationConfig = [...this.reservationConfig];\r\n this.availableMealPeriods = mealPeriods;\r\n this.dfs.selectedRadioOption = null;\r\n }\r\n }\r\n\r\n selectedTimeArray(timeBtn) {\r\n let availableTimeBtn = document.querySelectorAll('[id^=\"btn\"]');\r\n availableTimeBtn.forEach(btn => {\r\n let id = Number(btn.id.split('-')[1]);\r\n if (id == timeBtn.Id) {\r\n this.renderer.setStyle(btn.getElementsByTagName(\"button\")[0], 'background', this.ls.restaurantWidgetSettings$.value.WidgetCustomization.AvailableButtonBackgroundColor);\r\n this.renderer.setStyle(btn.getElementsByTagName(\"button\")[0], 'color', this.ls.restaurantWidgetSettings$.value.WidgetCustomization.EarlierLaterHoverBackgroundColor);\r\n }\r\n else {\r\n this.renderer.setStyle(btn.getElementsByTagName(\"button\")[0], 'background', '#E5E5E5');\r\n this.renderer.setStyle(btn.getElementsByTagName(\"button\")[0], 'color', this.ls.restaurantWidgetSettings$.value.WidgetCustomization.AvailableButtonColor);\r\n }\r\n });\r\n this.reservationDetailsFormGp.controls.reservationTime.setValue(timeBtn.Value);\r\n this.rs.reservationFormGroup.get('reservationDetailsForm').get('reservationTime').setValue(timeBtn.Value);\r\n this.rs.reservationFormGroup.get('reservationDetailsForm').get('coverTypes').setValue(this.coverTypeForm.form.value);\r\n }\r\n\r\n generatePartySize(specialMeal) {\r\n this.partySizeOptions = [];\r\n let minPartySize = specialMeal ? specialMeal.MinPartySize : 1;\r\n let maxPartySize = specialMeal ? specialMeal.MaxPartySize : this.ls.restaurantWidgetSettings$.value.MaxPartySize;\r\n for (let index = minPartySize; index <= maxPartySize; index++) {\r\n this.partySizeOptions.push({ id: index, value: index });\r\n }\r\n this.reservationConfig[0].options = this.partySizeOptions;\r\n this.reservationConfigForm.form.controls.partySize.setValue(this.partySizeOptions[0].id,);\r\n this.reservationDetailsFormGp.controls.partySize.setValue(this.partySizeOptions[0].value);\r\n\r\n }\r\n\r\n setAvailableDate(specialMeal) {\r\n this.isSpecialMealDisabled = false;\r\n this.restrictAvailabilityCheck(false);\r\n if (specialMeal && specialMeal.StartDate && specialMeal.EndDate) {\r\n if (new Date(specialMeal.StartDate).setHours(0, 0, 0, 0) > new Date(new Date().setDate(new Date().getDate() + this.daysForReservation - 1)).setHours(0, 0, 0, 0)) {\r\n this.reservationConfig[1].minDate = new Date();\r\n this.reservationConfig[1].maxDate = new Date();\r\n this.gs.setMessageState(this.ts.instant('BookingYetToOpenMsg'), 0);\r\n this.isSpecialMealDisabled = true;\r\n this.restrictAvailabilityCheck(true);\r\n return;\r\n }\r\n else {\r\n\r\n this.reservationConfig[1].minDate = (new Date() >= new Date(specialMeal.StartDate)) ? new Date() : specialMeal.StartDate;\r\n if (new Date(specialMeal.StartDate).setHours(0, 0, 0, 0) < new Date().setHours(0, 0, 0, 0)) {\r\n this.reservationConfigForm.form.controls.reservationDate.setValue(new Date());\r\n this.reservationDetailsFormGp.controls.reservationDate.setValue(new Date());\r\n } else {\r\n this.reservationConfigForm.form.controls.reservationDate.setValue(this.reservationConfig[1].minDate);\r\n this.reservationDetailsFormGp.controls.reservationDate.setValue(this.reservationConfig[1].minDate);\r\n\r\n }\r\n }\r\n if (new Date(specialMeal.EndDate).setHours(0, 0, 0, 0) > new Date(new Date().setDate(new Date().getDate() + this.daysForReservation - 1)).setHours(0, 0, 0, 0)) {\r\n this.reservationConfig[1].maxDate = new Date(new Date().setDate(new Date().getDate() + this.daysForReservation - 1));\r\n }\r\n else {\r\n this.reservationConfig[1].maxDate = specialMeal.EndDate;\r\n }\r\n }\r\n else {\r\n let {minDate, maxDate} = this.getMinMaxDate();\r\n this.reservationConfig[1].minDate = minDate;\r\n this.reservationConfig[1].maxDate = maxDate;\r\n if(this.CustomOpenHours?.length == 0 && this.openHourDays?.length == 0)\r\n this.reservationConfig[1].maxDate = new Date();\r\n this.reservationConfigForm.form.controls.reservationDate.setValue(this.reservationConfig[1].minDate);\r\n this.reservationDetailsFormGp.controls.reservationDate.setValue(this.reservationConfig[1].minDate);\r\n }\r\n if ((specialMeal?.FrequencyTypeIds && specialMeal?.FrequencyTypeIds != null) || (this.openHourDays && this.openHourDays.length > 0)) {\r\n\r\n if (specialMeal.FrequencyTypeIds != null && this.openHourDays.length > 0) {\r\n let mergedArray = []; \r\n specialMeal.FrequencyTypeIds.every(a => this.openHourDays.includes(a) ? mergedArray.push(a) : '');\r\n this.reservationConfig[1].FrequencyTypeIds = this.setFrequencyDate(mergedArray);\r\n }\r\n else if (specialMeal.FrequencyTypeIds != null && this.openHourDays.length <= 0) {\r\n this.reservationConfig[1].FrequencyTypeIds = this.setFrequencyDate(specialMeal.FrequencyTypeIds);\r\n }\r\n else {\r\n this.reservationConfig[1].FrequencyTypeIds = this.setFrequencyDate(this.openHourDays);\r\n }\r\n\r\n this.reservationDetailsFormGp.controls.reservationDate.setValue(this.reservationConfig[1].FrequencyTypeIds);\r\n } else {\r\n this.reservationConfig[1].FrequencyTypeIds = this.setFrequencyDate([]);\r\n this.reservationDetailsFormGp.controls.reservationDate.setValue(this.reservationConfig[1].FrequencyTypeIds);\r\n }\r\n this.SetInitialDate(new Date(this.reservationConfig[1].minDate));\r\n }\r\n\r\n \r\n getMinMaxDate(): {minDate, maxDate}{\r\n let minDate = null;\r\n let maxDate = null;\r\n if(this.openHourDays?.length){\r\n minDate = new Date();\r\n maxDate = new Date(new Date().setDate(new Date().getDate() + this.daysForReservation - 1));\r\n }\r\n else if(this.CustomOpenHours?.some(custDay => !custDay.Closed)){\r\n // this.openHourDays = this.CustomOpenHours.map(customDay => new Date(customDay.Date).getDay());\r\n this.CustomOpenHours.forEach(customDay => {\r\n if(!customDay.Closed && (new Date(customDay.Date) > maxDate || !maxDate)){\r\n maxDate = new Date(customDay.Date);\r\n }\r\n if(!customDay.Closed && (new Date(customDay.Date) <= minDate || !minDate)){\r\n minDate = new Date(customDay.Date);\r\n }\r\n // this.openHourDays.push(new Date(customDay.Date).getDay());\r\n })\r\n }\r\n\r\n if(minDate <= new Date()){\r\n minDate = new Date()\r\n }\r\n return {minDate, maxDate}\r\n }\r\n\r\n SetInitialDate(date: Date){\r\n let IsHoliday = false;\r\n IsHoliday = this.IsHoliday(date)\r\n if(IsHoliday) {\r\n date.setDate(date.getDate() + 1);\r\n this.SetInitialDate(date);\r\n }\r\n else{\r\n this.reservationConfigForm.form.controls.reservationDate.setValue(date);\r\n this.reservationDetailsFormGp.controls.reservationDate.setValue(date);\r\n }\r\n }\r\n\r\n IsHoliday(date: Date){\r\n let isHoliday = false; \r\n isHoliday = this.IsCustomDay(date) ? this.IsCustomHoliday(date) : !this.openHourDays.includes(date.getDay());\r\n return isHoliday;\r\n }\r\n\r\n setFrequencyDate(days) {\r\n let frequencyDate = (d: Date): boolean => {\r\n if (d !== null) {\r\n const date = (new Date(d) || new Date());\r\n const day = date.getDay();\r\n let enableDate = days.includes(day);\r\n if (this.CustomOpenHours.length > 0 && this.IsCustomDay(date)) {\r\n let IsHoliday = this.IsHoliday(date);\r\n enableDate = !IsHoliday;\r\n }\r\n return enableDate;\r\n } else {\r\n return false;\r\n }\r\n }\r\n return frequencyDate //days.length !== 0 ? frequencyDate : !(frequencyDate);\r\n }\r\n\r\n IsCustomDay(date: Date){\r\n for (let holiday of this.CustomOpenHours) {\r\n let date1 = moment(holiday.Date).format('LL');\r\n let date2 = moment(date).format('LL');\r\n if (date1 == date2) {\r\n return true;\r\n };\r\n }\r\n return false;\r\n }\r\n\r\n IsCustomHoliday(date: Date) {\r\n for (let holiday of this.CustomOpenHours) {\r\n let date1 = moment(holiday.Date).format('LL');\r\n let date2 = moment(date).format('LL');\r\n if (date1 == date2) {\r\n return holiday.Closed;\r\n };\r\n }\r\n return false;\r\n }\r\n\r\n selectedSpecialMeal(meal) {\r\n this.partySizeError = '';\r\n this.isNextBtnDisabled = false;\r\n this.addPartySizeConfig();\r\n if (_.isEqual(this.selectedMeal, meal) && meal && this.dfs.selectedRadioOption == 1) {\r\n return;\r\n }\r\n this.gs.setMessageState('', 0);\r\n this.availableCoverTypePrices = [];\r\n this.coverTypeConfig = [];\r\n this.selectedMeal = meal ? meal : '';\r\n this.reservationDetailsFormGp.controls.specialMeal.setValue(this.selectedMeal);\r\n this.rs.reservationFormGroup.get('reservationDetailsForm').get('specialMeal').setValue(this.selectedMeal);\r\n this.setAvailableSeatings(this.selectedMeal);\r\n this.generatePartySize(this.selectedMeal);\r\n this.setAvailableDate(this.selectedMeal);\r\n if (this.selectedMeal) {\r\n this.availableCoverTypePrices = this.specialMealList.find(x => x.Id == this.selectedMeal.Id)?.CoverTypePrices ? this.specialMealList.find(x => x.Id == this.selectedMeal.Id)?.CoverTypePrices : [];\r\n if (this.availableCoverTypePrices.length > 0) {\r\n this.viewPrice(meal)\r\n }\r\n else {\r\n this.coverTypeConfig = [];\r\n }\r\n }\r\n else {\r\n this.coverTypeConfig = [];\r\n }\r\n\r\n if (this.availabilityText == 'refresh') {\r\n this.showOtherDaysAvailable();\r\n }\r\n }\r\n addPartySizeConfig() {\r\n this.reservationConfig[0].class = \"reservation-details__party-size\";\r\n this.reservationConfig = [...this.reservationConfig];\r\n }\r\n showPrepaymentIcon() {\r\n return (this.specialMealList && this.specialMealList.find(sp => sp.DoesRequirePrepayment));\r\n }\r\n\r\n selectedViewPricing(meal) {\r\n if (this.selectedMeal == meal) {\r\n this.availableCoverTypePrices = [];\r\n this.availableCoverTypePrices = this.specialMealList.filter(x => x.Id == this.selectedMeal.Id)[0].CoverTypePrices;\r\n }\r\n else {\r\n this.selectedSpecialMeal(meal);\r\n }\r\n event.stopPropagation();\r\n }\r\n getSeatSelection() {\r\n //this.LockSlot();\r\n if (this.dateSelectedInOtherDaysAvailability && moment(moment(this.dateSelectedInOtherDaysAvailability).format('YYYY-MM-DD')).diff(moment(this.reservationDetailsFormGp.controls.reservationDate.value).format('YYYY-MM-DD'), 'days') != 0) {\r\n this.reservationConfigForm.form.controls.reservationDate.setValue(this.dateSelectedInOtherDaysAvailability, { emitEvent: false });\r\n this.reservationDetailsFormGp.controls.reservationDate.setValue(this.dateSelectedInOtherDaysAvailability, { emitEvent: false });\r\n }\r\n if (this.ls.restaurantWidgetSettings$.value.WidgetCustomization.AllowTableSelection) {\r\n if (this.ls.operation == operationType.edit && this.reservationDetailsFormGp.controls.reservationTime.value == this.originalReservedFor) {\r\n this.rs.lockCallRequired = false;\r\n } else {\r\n this.rs.lockCallRequired = true;\r\n }\r\n this.ls.nextButton.next(componentName.tablesLayout)\r\n }\r\n else {\r\n if (this.ls.operation == operationType.edit && this.reservationDetailsFormGp.controls.reservationTime.value == this.originalReservedFor) {\r\n this.ls.nextButton.next(componentName.guestDetails);\r\n }\r\n else {\r\n this.LockSlot();\r\n }\r\n }\r\n }\r\n\r\n viewPrice(specialMeal) {\r\n\r\n this.coverTypeConfig = [];\r\n this.coverTypeConfig = [...this.coverTypeConfig];\r\n let specialMealValue = this.reservationDetailsFormGp.get('specialMeal').value\r\n for (let i = this.availableCoverTypePrices.length - 1; i >= 0; i--) {\r\n this.coverTypeConfig.unshift({\r\n type: 'input',\r\n label: this.availableCoverTypePrices[i].CoverTypeName,\r\n name: this.availableCoverTypePrices[i].Id.toString(),\r\n inputType: 'number',\r\n class: 'reservation-details__cover-type',\r\n showErrorText: true,\r\n appearance: true,\r\n isFormArray: false,\r\n value: i == 0 ? specialMealValue.MinPartySize : 0\r\n })\r\n }\r\n this.coverTypeConfig = [...this.coverTypeConfig];\r\n this.coverTypeConfig.forEach((x, index) => {\r\n if (Object.keys(this.coverTypeForm.form.controls).length != 0) {\r\n if (index == 0) {\r\n this.coverTypeForm.form.controls[x.name].setValue(this.reservationDetailsFormGp.controls.partySize.value);\r\n }\r\n else if (this.coverTypeForm.form.controls[x.name]) {\r\n this.coverTypeForm.form.controls[x.name].setValue(0);\r\n }\r\n }\r\n });\r\n this.checkPartySizeValidationAndAssignFormValue();\r\n this.reservationConfig[0].class = \"reservation-details__party-size-noshow\"\r\n this.reservationConfig = [...this.reservationConfig];\r\n }\r\n\r\n\r\n valueIncrease(data, event) {\r\n let selectedCoverType = this.availableCoverTypePrices.filter(x => x.Id == data)[0];\r\n let selectedConfig = this.coverTypeForm.form.controls[selectedCoverType.Id.toString()]\r\n selectedConfig.setValue(selectedConfig.value == this.reservationConfigForm.form.controls.partySize.value ? this.reservationConfigForm.form.controls.partySize.value : (selectedConfig.value + 1));\r\n selectedConfig.setValue(selectedConfig.value + 1);\r\n let partySize = 0;\r\n this.availableCoverTypePrices.forEach(x => {\r\n partySize += this.coverTypeForm.form.controls[x.Id.toString()].value\r\n });\r\n this.reservationConfigForm.form.controls.partySize.setValue(partySize, { emitEvent: false });\r\n this.reservationDetailsFormGp.controls.partySize.setValue(partySize, { emitEvent: false });\r\n\r\n this.checkPartySizeValidationAndAssignFormValue();\r\n\r\n if (this.ls.operation == operationType.edit && this.ls.editPartyData$.value && this.triggerAvailableDatesApiCall && !this.CheckAvailabilityBtn.disbaledproperity) {\r\n this.getRestaurantAvailableDates(this.rs.reservationFormGroup.controls.reservationDetailsForm.value.partySize,\r\n moment(this.rs.reservationFormGroup.controls.reservationDetailsForm.value.reservationDate).format('YYYY-MM-DD'),\r\n this.rs.reservationFormGroup.controls.reservationDetailsForm.value.seatingArea.id,\r\n this.rs.reservationFormGroup.controls.reservationDetailsForm.value.specialMeal.Id,\r\n this.rs.reservationFormGroup.controls.reservationDetailsForm.value.seatingType.id)\r\n }\r\n }\r\n\r\n\r\n valueDecrease(data, event) {\r\n let selectedCoverType = this.availableCoverTypePrices.filter(x => x.Id == data)[0];\r\n let selectedConfig = this.coverTypeForm.form.controls[selectedCoverType.Id.toString()]\r\n selectedConfig.setValue(selectedConfig.value == 0 ? 0 : (selectedConfig.value - 1));\r\n let partySize = 0;\r\n this.availableCoverTypePrices.forEach(x => {\r\n partySize += this.coverTypeForm.form.controls[x.Id.toString()].value\r\n });\r\n this.reservationConfigForm.form.controls.partySize.setValue(partySize, { emitEvent: false });\r\n this.reservationDetailsFormGp.controls.partySize.setValue(partySize, { emitEvent: false });\r\n this.checkPartySizeValidationAndAssignFormValue();\r\n\r\n if (this.ls.operation == operationType.edit && this.ls.editPartyData$.value && this.triggerAvailableDatesApiCall && !this.CheckAvailabilityBtn.disbaledproperity) {\r\n this.getRestaurantAvailableDates(this.rs.reservationFormGroup.controls.reservationDetailsForm.value.partySize,\r\n moment(this.rs.reservationFormGroup.controls.reservationDetailsForm.value.reservationDate).format('YYYY-MM-DD'),\r\n this.rs.reservationFormGroup.controls.reservationDetailsForm.value.seatingArea.id,\r\n this.rs.reservationFormGroup.controls.reservationDetailsForm.value.specialMeal.Id,\r\n this.rs.reservationFormGroup.controls.reservationDetailsForm.value.seatingType.id)\r\n }\r\n }\r\n\r\n checkPartySizeValidationAndAssignFormValue() {\r\n let total = 0;\r\n this.availableCoverTypePrices.forEach(element => {\r\n if (this.coverTypeForm.form.controls[element.Id.toString()]) {\r\n total = total + +this.coverTypeForm.form.controls[element.Id.toString()].value;\r\n }\r\n else {\r\n if (this.coverTypeConfig && this.coverTypeConfig.length > 0)\r\n total = total + +this.coverTypeConfig.find(x => x.name == element.Id.toString()).value;\r\n }\r\n });\r\n\r\n if (this.coverTypeConfig.length) {\r\n let specialMealPartySize = this.reservationDetailsFormGp.get('specialMeal').value;\r\n this.coverTypeConfig.forEach(x => {\r\n\r\n // x.increaseDisabled = +total == specialMealPartySize.MaxPartySize ? true : false;\r\n // x.decreaseDisabled = +total == specialMealPartySize.MinPartySize ? true : false;\r\n // x.increaseDisabled = false;\r\n this.restrictAvailabilityCheck(this.isNextBtnDisabled);\r\n })\r\n this.CheckAvailabilityBtn.disbaledproperity = (+total < specialMealPartySize.MinPartySize) || (+total > specialMealPartySize.MaxPartySize);\r\n }\r\n if (!(+total == this.reservationConfigForm.form.controls.partySize.value)) {\r\n this.showSlots = false;\r\n this.clearMealTabSelection();\r\n }\r\n if (this.coverTypeForm && this.coverTypeForm.form) {\r\n this.reservationDetailsFormGp.controls.coverTypes.setValue(this.coverTypeForm.form.value);\r\n this.rs.reservationFormGroup.get('reservationDetailsForm').get('coverTypes').setValue(this.coverTypeForm.form.value);\r\n }\r\n }\r\n\r\n clearMealTabSelection() {\r\n if (this.selectedMealTab && this.reservationConfigForm.form.controls.mealPeriod.value == this.selectedMealTab && !this.showOtherDays) { // reset the meal tab radio button\r\n this.dfs.selectedRadioOption = null;\r\n this.selectedMealTab = null;\r\n this.reservationConfigForm.form.controls.mealPeriod.setValue('', { emitEvent: false });\r\n }\r\n }\r\n\r\n setAvailableSeatings(specialMeal: any) {\r\n if (specialMeal && specialMeal.SeatingAreaId && specialMeal.SeatingAreaId > 0) {\r\n this.reservationConfig[2].options = this.seatingAreaMasterList.filter(x => x.Id == specialMeal.SeatingAreaId).map(x => { return { id: x.Id, value: x.Name } });\r\n } else {\r\n this.reservationConfig[2].options = this.seatingAreaMasterList.map(x => { return { id: x.Id, value: x.Name } });\r\n //this.reservationConfig[2].options.splice(0,0,{ id: 0, value: this.ts.instant('AnySeatingArea')});\r\n }\r\n this.reservationConfigForm.form.controls.seatingArea.setValue(this.reservationConfig[2].options[0].id);\r\n this.reservationDetailsFormGp.controls.seatingArea.setValue({ id: this.reservationConfig[2].options[0].id, name: this.reservationConfig[2].options[0].value });\r\n this.LoadSeatingTypes(this.reservationConfig[2].options[0].id);\r\n }\r\n\r\n LoadSeatingTypes(seatingAreaId: number) {\r\n let MappedSeatingTypes = [];\r\n MappedSeatingTypes = this.SeatingAreaSeatingTypeMappings.filter(t => t.SeatingAreaId == seatingAreaId || seatingAreaId == 0).map(x => { return x.SeatingTypeId });\r\n this.reservationConfig[3].options = MappedSeatingTypes.length > 0 ? this.seatingTypesMasterList.filter(x => MappedSeatingTypes.indexOf(x.Id) > -1 || x.Id == 0).map(x => { return { id: x.Id, value: x.Description } }) : [{ id: 0, value: this.ts.instant('AnySeatingType')}];\r\n //this.reservationConfig[3].options.splice(0,0,{ id: 0, value: this.ts.instant('AnySeatingType)});\r\n if (this.reservationConfig[3].options.length > 0) {\r\n this.reservationConfigForm.form.controls.seatingType.setValue(this.reservationConfig[3].options[0].id);\r\n this.reservationDetailsFormGp.controls.seatingType.setValue({ id: this.reservationConfig[3].options[0].id, name: this.reservationConfig[3].options[0].value });\r\n }\r\n else {\r\n //hide the seatingType Control\r\n }\r\n }\r\n\r\n addAnySeatingOptionInMasterList() {\r\n\r\n (this.ls.globalSeatingAreaId || this.seatingAreaMasterList.findIndex(area => area.Id == 0) > -1) || this.seatingAreaMasterList.splice(0, 0, { Id: 0, Name: this.ts.instant('AnySeatingArea')});\r\n (this.seatingTypesMasterList.findIndex(type => type.Id == 0) > -1) || this.seatingTypesMasterList.splice(0, 0, { Id: 0, Description: this.ts.instant('AnySeatingType')});\r\n }\r\n\r\n removeSeatingAreaWhichHasNoSeatingTypeMappings() {\r\n this.seatingAreaMasterList = this.seatingAreaMasterList.filter(x => this.SeatingAreaSeatingTypeMappings.findIndex(y => y.SeatingAreaId == x.Id))\r\n }\r\n\r\n CheckAvailability(event) {\r\n this.selectedMealTab = event.value;\r\n this.getRestaurantDateAvailability();\r\n }\r\n\r\n getRestaurantAvailableDates(size, date, seatingArea, sepcialMeal, seatingType) {\r\n seatingType = this.displaySeatingType ? seatingType : null;\r\n this.restrictAvailabilityCheck(false);\r\n this.rs.GetRestaurantAvailableDates(this.ls.restaurantWidgetSettings$.value.RestaurantId,\r\n size, date, seatingArea > 0 ? seatingArea : null, this.ls.editPartyData$.value.Id, sepcialMeal, seatingType > 0 ? seatingType : null).subscribe(dates => {\r\n this.triggerAvailableDatesApiCall = true;\r\n if (dates && dates.length > 0) {\r\n this.reservationConfig[1].minDate = new Date(dates[0]);\r\n this.reservationConfig[1].maxDate = new Date(dates[dates.length - 1]);\r\n }\r\n else {\r\n this.gs.setMessageState(this.ts.instant('cannotAccommodateParty'), 0); // assign the Error Message\r\n this.restrictAvailabilityCheck(true);\r\n }\r\n })\r\n }\r\n\r\n\r\n getRestaurantDateAvailability(otherDate?: any) {\r\n this.showSlots = true;\r\n let Date = moment(this.rs.reservationFormGroup.controls.reservationDetailsForm.value.reservationDate).format('YYYY-MM-DD');\r\n let _selectedDate = otherDate ? otherDate : Date;\r\n let isCommunalTable = this.rs.reservationFormGroup.controls.reservationDetailsForm.value.communalAvailability || this.ls.editPartyData$.value?.IsCommunalTable;\r\n this.subscriptions.add(this.rs.GetRestaurantDateAvailability(\r\n this.restaurantId,\r\n this.rs.reservationFormGroup.controls.reservationDetailsForm.value.partySize,\r\n isCommunalTable,\r\n true,\r\n _selectedDate,\r\n this.rs.reservationFormGroup.controls.reservationDetailsForm.value.seatingArea.id > 0 ? this.rs.reservationFormGroup.controls.reservationDetailsForm.value.seatingArea.id : null,\r\n this.ls.operation == operationType.edit ? this.ls.editPartyData$.value.Id : null,\r\n this.rs.reservationFormGroup.controls.reservationDetailsForm.value.specialMeal.Id,\r\n this.rs.reservationFormGroup.controls.reservationDetailsForm.value.seatingType.id > 0 && this.displaySeatingType ? this.rs.reservationFormGroup.controls.reservationDetailsForm.value.seatingType.id : null\r\n ).subscribe(data => {\r\n this.timeBtnArray = [];\r\n if (data && data.length > 0) {\r\n data.forEach((time, index) => {\r\n this.timeBtnArray.push({ Id: index, Value: time })\r\n });\r\n if (this.availableMealPeriods.length > 0) {\r\n let selectedMealTab: MealTabDTO;\r\n this.spliceTimeArrayForTheSelectedMealTab(_selectedDate);\r\n }\r\n if (this.originalReservedFor) {\r\n const selectedSlot = this.timeBtnArray.filter(slot => slot.Value == this.originalReservedFor);\r\n if (selectedSlot.length) {\r\n setTimeout(() => {\r\n this.selectedTimeArray(selectedSlot[0]);\r\n })\r\n }\r\n }\r\n if (this.ls.restaurantWidgetSettings$.value.WidgetCustomization.TimeSlotType == \"DropDown\") {\r\n this.isDropdown = true;\r\n let timeArrayValues = this.timeBtnArray.map(time => {\r\n return { id: time.Id, value: time.Value }\r\n })\r\n this.timeBtnArrayConfig = [\r\n {\r\n type: 'select',\r\n name: 'time',\r\n placeholder: '',\r\n options: timeArrayValues,\r\n appearance: true,\r\n isFormArray: false,\r\n label: 'time',\r\n class: \"reservation-details__party-size\",\r\n validation: [Validators.required],\r\n isNativeControl: this.ls.isMobileBrowser,\r\n isDateTime: true,\r\n cellClick: this.selectedDateTime.bind(this)\r\n }\r\n ]\r\n } else {\r\n this.isDropdown = false;\r\n }\r\n }\r\n else {\r\n //Show No Slots Available\r\n }\r\n setTimeout(() => {\r\n this.scrollBottom();\r\n }, 100);\r\n }));\r\n }\r\n selectedDateTime(event) {\r\n let selectedSlotVal = event.value;\r\n if (this.ls.isMobileBrowser) {\r\n selectedSlotVal = event.target.value;\r\n }\r\n let selectedSlot = this.timeBtnArrayConfig[0].options.find(data => data.id == selectedSlotVal);\r\n if (selectedSlot) {\r\n this.reservationDetailsFormGp.controls.reservationTime.setValue(selectedSlot.value);\r\n this.rs.reservationFormGroup.get('reservationDetailsForm').get('reservationTime').setValue(selectedSlot.value);\r\n this.rs.reservationFormGroup.get('reservationDetailsForm').get('coverTypes').setValue(this.coverTypeForm.form.value);\r\n }\r\n }\r\n LockSlot() {\r\n let lockSlotDto = {\r\n LocalTime: moment(this.rs.reservationFormGroup.controls.reservationDetailsForm.value.reservationTime).format('YYYY-MM-DDTHH:mm:ss'), //selected date and time\r\n PartySize: this.rs.reservationFormGroup.controls.reservationDetailsForm.value.partySize,\r\n SeatingAreaId: this.rs.reservationFormGroup.controls.reservationDetailsForm.value.seatingArea.id > 0 ? this.rs.reservationFormGroup.controls.reservationDetailsForm.value.seatingArea.id : null,\r\n SeatingTypeId: this.rs.reservationFormGroup.controls.reservationDetailsForm.value.seatingType.id > 0 ? this.rs.reservationFormGroup.controls.reservationDetailsForm.value.seatingType.id : null,\r\n IsCommunalTable: this.rs.reservationFormGroup.controls.reservationDetailsForm.value.communalAvailability,\r\n FromWebsite: true\r\n }\r\n this.subscriptions.add(this.rs.GetLockSlot(this.ls.restaurantWidgetSettings$.value.RestaurantId, lockSlotDto).subscribe(data => {\r\n if (data && data.SlotLockIdDTO) {\r\n //configure Timer\r\n this.gs.setMessageState('', 0);\r\n this.ls.lockResult = data;\r\n let timer = moment(data.ExpiresAt).diff(moment(data.LockedAt), \"seconds\");\r\n this.ls.showTimer = true;\r\n this.ls.runTimer(timer);\r\n\r\n if (this.rs.reservationFormGroup.controls.reservationDetailsForm.value.seatingArea.id == 0 && data.SeatingAreaId > 0) { //slot seating Area Id Locked\r\n let control = this.rs.reservationFormGroup.get('reservationDetailsForm');\r\n control.get('seatingArea').setValue({ id: data.SeatingAreaId, name: this.seatingAreaMasterList.filter(x => x.Id == data.SeatingAreaId)[0].Name }, { emitEvent: false });\r\n }\r\n\r\n data.TableLockedDTO ? this.showSeatingPriceIfRequired(data.TableLockedDTO) : this.ls.nextButton.next(componentName.guestDetails);\r\n }\r\n else {\r\n this.gs.setMessageState(this.ts.instant('SlotIsNotFound'), 0);\r\n }\r\n\r\n }));\r\n }\r\n\r\n showSeatingPriceIfRequired(tableLockDTO: TableLockedDTO) {\r\n if (tableLockDTO && tableLockDTO.TableIds && tableLockDTO.TableIds.length > 0) {\r\n this.tableLockDTO = _.cloneDeep(tableLockDTO);\r\n if (tableLockDTO.Price > 0) {\r\n this.showRatePlanInformationPopUp(this.seatingTypesMasterList.filter(x => x.Id == tableLockDTO.SeatingTypeId)[0].Description, tableLockDTO.Price);\r\n return;\r\n }\r\n else {\r\n this.updateLockedTableInReservationForm(tableLockDTO);\r\n }\r\n }\r\n else {\r\n let control = this.rs.reservationFormGroup.get('reservationDetailsForm');\r\n control.get('tableId').setValue([], { emitEvent: false });\r\n }\r\n this.ls.nextButton.next(componentName.guestDetails);\r\n }\r\n\r\n updateLockedTableInReservationForm(tableLockDTO) {\r\n\r\n let control = this.rs.reservationFormGroup.get('reservationDetailsForm');\r\n control.get('tableId').setValue(tableLockDTO.TableIds, { emitEvent: false });\r\n\r\n // if (this.rs.reservationFormGroup.controls.reservationDetailsForm.value.seatingArea.id != tableLockDTO.SeatingAreaId) {\r\n // control = this.rs.reservationFormGroup.get('reservationDetailsForm');\r\n // control.get('seatingArea').setValue({ id: tableLockDTO.SeatingAreaId, name: this.seatingAreaMasterList.filter(x => x.Id == tableLockDTO.SeatingAreaId)[0].Name }, { emitEvent: false });\r\n // }\r\n\r\n if (this.rs.reservationFormGroup.controls.reservationDetailsForm.value.seatingType.id != tableLockDTO.SeatingTypeId && tableLockDTO.SeatingTypeId > 0) {\r\n control = this.rs.reservationFormGroup.get('reservationDetailsForm');\r\n control.get('seatingType').setValue({ id: tableLockDTO.SeatingTypeId, name: this.seatingTypesMasterList.filter(x => x.Id == tableLockDTO.SeatingTypeId)[0].Description }, { emitEvent: false });\r\n }\r\n }\r\n\r\n showRatePlanInformationPopUp(seatingTypeName: string, amount: Number) {\r\n const popUpMessage = [{\r\n confirmationMessage: this.getRatePlanText(seatingTypeName, amount),\r\n dialogTitle: this.ts.instant('seatingTypePriceInfo'),\r\n showAlert: true\r\n }];\r\n const componentDetails: ComponentDetails = Utilities.setComponentDetails(PopupMessageComponent, 'small', '', popUpMessage,\r\n popUpMessage[0].dialogTitle);\r\n this.seatingTypeInfoPopup = this.openCustomPopup(componentDetails, ComponentTypes.seatingTypeInfoPopup, '450px', '300px', true, '', this.ts.instant('Yes'),\r\n this.ts.instant('No'), true)\r\n }\r\n\r\n getRatePlanText(seatingTypeName: string, amount: Number){\r\n let message : string = \"\";\r\n this.ts.get('seatingTypeReservedAndConfirmation', {seatingTypeName: seatingTypeName, amount: (this.ls.restaurantWidgetSettings$.value.OperationCurrency + amount.toFixed(this.ls.restaurantWidgetSettings$.value.NumberOfFractionalDigits))}).subscribe(result => { message = result; });\r\n return message;\r\n }\r\n\r\n spliceTimeArrayForTheSelectedMealTab(date) {\r\n let requiredTimeArray = [];\r\n let selectedMealTab = this.availableMealPeriods.filter(meal => meal.Id == this.selectedMealTab)[0];\r\n if (selectedMealTab) {\r\n let startHours = selectedMealTab.StartTime.split(':')[0];\r\n let startMins = selectedMealTab.StartTime.split(':')[1];\r\n let endHours = selectedMealTab.EndTime.split(':')[0];\r\n let endMins = selectedMealTab.EndTime.split(':')[1];\r\n let selectedDate = moment(date).format('YYYY-MM-DD');\r\n let startTime = moment(selectedDate).clone().add(startHours, 'hours').add(startMins, 'minutes').format(\"YYYY-MM-DDTHH:mm:ss\");\r\n let endTime = moment(selectedDate).clone().add(endHours, 'hours').add(endMins, 'minutes').format(\"YYYY-MM-DDTHH:mm:ss\");\r\n if (moment(startTime) > moment(endTime)) {\r\n endTime = moment(endTime).add(1, 'day').format(\"YYYY-MM-DDTHH:mm:ss\");\r\n }\r\n if (this.timeBtnArray.length > 0) {\r\n this.timeBtnArray.forEach(time => {\r\n if (Utilities.datetimeBetween(new Date(startTime), new Date(endTime), new Date(time.Value))) {\r\n requiredTimeArray.push(time);\r\n }\r\n })\r\n }\r\n this.timeBtnArray = requiredTimeArray;\r\n }\r\n }\r\n\r\n restrictAvailabilityCheck(check: boolean) {\r\n if (this.availableMealPeriods.length > 0 && this.reservationConfigForm.form.controls.mealPeriod) {\r\n this.reservationConfig.find(x => x.name == \"mealPeriod\").disabled = check || this.isSpecialMealDisabled;\r\n check || this.isSpecialMealDisabled ? this.reservationConfigForm.form.controls[\"mealPeriod\"].disable({ emitEvent: false }) : this.reservationConfigForm.form.controls[\"mealPeriod\"].enable({ emitEvent: false });\r\n }\r\n else if (this.availableMealPeriods.length > 0) {\r\n this.reservationConfig.find(x => x.name == \"mealPeriod\").disabled = check || this.isSpecialMealDisabled;\r\n }\r\n this.CheckAvailabilityBtn.disbaledproperity = this.isSpecialMealDisabled;\r\n if (!check && this.availableMealPeriods.length == 0) {\r\n this.resetOtherDaysAvailability();\r\n }\r\n }\r\n\r\n onRefreshClick() {\r\n window.location.reload();\r\n }\r\n\r\n scrollBottom() {\r\n let id = !this.isDropdown ? 'timeBtnGroup' : 'timeDropDownGroup'; \r\n let element = document.getElementById(id);\r\n if(element) {\r\n element.scrollIntoView({ behavior: \"smooth\", block: \"center\", inline: \"nearest\" });\r\n element = null;\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n this.subscriptions.unsubscribe();\r\n }\r\n}\r\n\r\n\r\n@Pipe({\r\n name: 'seatingTypeFilter'\r\n})\r\nexport class SeatingTypeFilter implements PipeTransform {\r\n\r\n transform(typeId: any, seatingTypesList: any): any {\r\n return (seatingTypesList.filter(x => x.Id == typeId)[0].Description);\r\n }\r\n\r\n}\r\n","\r\nimport { Component, ElementRef, OnInit, Renderer2, ViewChild, ViewEncapsulation, OnDestroy } from '@angular/core';\r\nimport { FormBuilder, FormGroup } from '@angular/forms';\r\nimport { Router } from '@angular/router';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { fabric } from 'fabric';\r\nimport _ from 'lodash';\r\nimport moment from 'moment';\r\nimport { interval, Subscription } from 'rxjs';\r\nimport { buttonTypes, componentName, ShapeTypeEnum } from 'src/app/shared/constants/commonenums';\r\nimport { DynamicFormComponent } from 'src/app/shared/dynamicform/dynamic-form/dynamic-form.component';\r\nimport { ButtonValue, FieldConfig,InputImages } from 'src/app/shared/dynamicform/models/common-models';\r\nimport { operationType, SlottingMode } from 'src/app/shared/Models/WidgetSettingsModels';\r\nimport { GuestService } from 'src/app/shared/services/guest.service';\r\nimport { LayoutService } from '../layout.service';\r\nimport { ReservationService } from '../reservation.service';\r\n\r\n@Component({\r\n selector: 'app-tables-layout',\r\n templateUrl: './tables-layout.component.html',\r\n styleUrls: ['./tables-layout.component.scss'],\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class TablesLayoutComponent implements OnInit, OnDestroy {\r\n seatSelectionFormGp: FormGroup;\r\n dataToBePushed = [];\r\n @ViewChild('canvasLoader') canvasLoader: ElementRef;\r\n @ViewChild('form') dynamicForm: DynamicFormComponent;\r\n subscriptions: Subscription = new Subscription();\r\n seatSelectionConfig: FieldConfig[];\r\n canvas: any;\r\n tableObj: any = []\r\n rectangle: any;\r\n circle: any;\r\n ellipse: any;\r\n pin: any;\r\n isCommunalTableSelected = false;\r\n animationCounter = 0;\r\n topMinValue: any;\r\n leftMinValue: any;\r\n bgImage: string;\r\n tableSelectIcon: any;\r\n allowMultipleSelection = false;\r\n scaleFactorY = 1;\r\n scaleFactorX = 1;\r\n previousButton: ButtonValue;\r\n nextButton: ButtonValue;\r\n total: number = 0;\r\n customImages: InputImages[] = [];\r\n layoutImages: InputImages[] = [];\r\n objectImages: InputImages[] = [];\r\n shapeTypeEnum = {\r\n 0: 'rect',\r\n 1: 'circle',\r\n 2: 'pin'\r\n };\r\n selectedTableIds = [];\r\n joinTableSelected = [];\r\n communalTableOption = false;\r\n basicRectangle: fabric.Rect;\r\n basicCircle: fabric.Circle;\r\n isMouseDown = false;\r\n floorPlanData;\r\n partyDetails: any;\r\n editButton: ButtonValue;\r\n image: any;\r\n heightValue;\r\n widthValue;\r\n isSlotAcquired = false;\r\n timerSubscription: Subscription = new Subscription();\r\n constructor(public ls: LayoutService, private fb: FormBuilder, private rs: ReservationService, private ts: TranslateService, public gs: GuestService) {\r\n }\r\n\r\n ngOnInit() {\r\n let that = this;\r\n this.communalTableOption = this.rs.reservationFormGroup.controls.reservationDetailsForm.value.communalAvailability;\r\n this.allowMultipleSelection = this.ls.restaurantWidgetSettings$.value.WidgetCustomization.AllowMultipleTableSelection\r\n this.seatSelectionFormGp = this.fb.group({\r\n seatSelected: ''\r\n });\r\n this.subscriptions.add(this.ls.restaurantImages.subscribe((images) => {\r\n if (images) {\r\n this.layoutImages = images.LayoutImages;\r\n this.objectImages = images.ObjectImages;\r\n this.customImages = images.CustomImages;\r\n }\r\n }))\r\n this.seatSelectionConfig = [\r\n {\r\n type: 'input',\r\n name: 'partySize',\r\n placeholder: '',\r\n options: [],\r\n appearance: true,\r\n isFormArray: false,\r\n label: this.ts.instant('partySize'),\r\n class: \"tables-layout__party-size\",\r\n value: ''\r\n },\r\n {\r\n type: 'date',\r\n name: 'reservationDate',\r\n placeholder: '',\r\n appearance: true,\r\n isFormArray: false,\r\n label: this.ts.instant('date'),\r\n class: \"tables-layout__date\"\r\n },\r\n {\r\n type: 'input',\r\n name: 'seatingArea',\r\n placeholder: '',\r\n options: [],\r\n appearance: true,\r\n isFormArray: false,\r\n label: this.ts.instant('seatingArea'),\r\n class: \"tables-layout__seating-area\",\r\n value: ''\r\n },\r\n {\r\n type: 'input',\r\n name: 'seatingType',\r\n placeholder: '',\r\n options: [],\r\n appearance: true,\r\n isFormArray: false,\r\n label: this.ts.instant('seatingType'),\r\n class: \"tables-layout__seating-type\",\r\n value: ''\r\n },\r\n {\r\n type: 'input',\r\n name: 'reservationTime',\r\n placeholder: '',\r\n appearance: true,\r\n isFormArray: false,\r\n label: this.ts.instant('time'),\r\n class: \"tables-layout__date\"\r\n }\r\n ];\r\n\r\n this.ls.isCommunalTableSelected = false;\r\n //let control = this.rs.reservationFormGroup.get('reservationDetailsForm');\r\n //control.get('tableId').setValue([]); // clear the table ids in the form\r\n let reservationData = this.rs.reservationFormGroup.controls.reservationDetailsForm.value;\r\n this.subscriptions.add(this.rs.getLayoutData(this.ls.restaurantWidgetSettings$.value.RestaurantId,\r\n reservationData.partySize,\r\n reservationData.communalAvailability,\r\n moment(reservationData.reservationTime).format('YYYY-MM-DDTHH:mm:ss'),\r\n reservationData.seatingArea.id > 0 ? reservationData.seatingArea.id : null,\r\n // this.rs.reservationFormGroup.controls.reservationDetailsForm.value.seatingType.id > 0 ? this.rs.reservationFormGroup.controls.reservationDetailsForm.value.seatingType.id : null,\r\n null,\r\n this.ls.operation == operationType.edit ? this.ls.editPartyData$.value.Id : null,\r\n (reservationData?.specialMeal?.Id || null)\r\n ).subscribe(response => {\r\n this.floorPlanData = response.Payload.FloorPlans[0];\r\n this.setDefaultFloor(this.floorPlanData.StandaloneTables, this.floorPlanData.Labels, this.floorPlanData.Walls, this.floorPlanData.Shapes, this.floorPlanData.ImageId);\r\n if (this.rs.lockCallRequired) {\r\n this.LockSlot();\r\n }\r\n else {\r\n this.isSlotAcquired = true;\r\n this.highLightSelectedTables();\r\n this.controlTimerDisplay();\r\n }\r\n }));\r\n\r\n this.editButton = {\r\n type: buttonTypes.confirmBtn,\r\n label: 'edit',\r\n customclass: 'guest-details__confirm-btn',\r\n disbaledproperity: false\r\n };\r\n this.nextButton = {\r\n type: buttonTypes.confirmBtn,\r\n label: 'next',\r\n customclass: 'tables-layout__next-btn',\r\n disbaledproperity: true\r\n };\r\n this.previousButton = {\r\n type: buttonTypes.cancelBtn,\r\n label: 'previous',\r\n customclass: 'tables-layout__previous-btn',\r\n };\r\n this.partyDetails = _.cloneDeep(this.rs.reservationFormGroup.controls.reservationDetailsForm.value);\r\n this.ls.editPartyData = _.cloneDeep(this.rs.reservationFormGroup.controls.reservationDetailsForm.value);\r\n fabric.Pin = fabric.util.createClass(fabric.Circle, {\r\n\r\n type: 'pin',\r\n _render: function (ctx) {\r\n this.callSuper('_render', ctx);\r\n ctx.font = this.radius * 2 + 'px Arial';\r\n ctx.fillStyle = '#fff';\r\n ctx.textAlign = 'center';\r\n ctx.fillText(this.label, 0, this.radius - 4);\r\n }\r\n });\r\n\r\n fabric.Pin.fromObject = function (object, callback, forceAsync) {\r\n\r\n return fabric.Object._fromObject('Pin', object, callback, forceAsync);\r\n }\r\n fabric.loadSVGFromURL('assets/images/check.svg', function (objects, options) {\r\n that.tableSelectIcon = fabric.util.groupSVGElements(objects, options);\r\n });\r\n\r\n fabric.Text.prototype.set({\r\n _getNonTransformedDimensions() { // Object dimensions\r\n return new fabric.Point(this.width, this.height).scalarAdd(this.padding);\r\n },\r\n _calculateCurrentDimensions() { // Controls dimensions\r\n return fabric.util.transformPoint(this._getTransformedDimensions(), this.getViewportTransform(), true);\r\n }\r\n });\r\n\r\n }\r\n\r\n skipOrHightLightTableSelection() {\r\n if (!this.isTableAvailable(this.floorPlanData) && SlottingMode[this.ls.restaurantWidgetSettings$.value.SlottingModeWidget] == SlottingMode.Manual) {\r\n let control = this.rs.reservationFormGroup.get('reservationDetailsForm');\r\n control.get('tableId').setValue([]);\r\n this.ls.nextButton.next(componentName.guestDetails)\r\n }\r\n else {\r\n this.highLightSelectedTables();\r\n }\r\n }\r\n\r\n highLightSelectedTables() {\r\n if (this.ls.editPartyData && this.ls.editPartyData.tableId && this.ls.editPartyData.tableId.length > 0) {\r\n this.highlightPreviousSelectedTable(this.ls.editPartyData.tableId);\r\n\r\n }\r\n else if (this.ls.operation == operationType.edit && this.ls.editPartyData$.value && this.ls.editPartyData$.value.TableIds && this.ls.editPartyData$.value.TableIds.length > 0) {\r\n this.highlightPreviousSelectedTable(this.ls.editPartyData$.value.TableIds);\r\n }\r\n }\r\n\r\n highlightPreviousSelectedTable(tableIds: any[]) {\r\n this.selectedTableIds = []\r\n\r\n const objs = this.canvas.getObjects();\r\n tableIds.forEach(tableId => {\r\n let tableObj = objs.filter(x => x.Id == tableId &&\r\n (this.rs.reservationFormGroup.controls.reservationDetailsForm.value.seatingType.id == 0\r\n || x.SeatingTypeId == this.rs.reservationFormGroup.controls.reservationDetailsForm.value.seatingType.id) &&\r\n (this.rs.reservationFormGroup.controls.reservationDetailsForm.value.seatingArea.id == 0\r\n || x.SeatingAreaId == this.rs.reservationFormGroup.controls.reservationDetailsForm.value.seatingArea.id))[0];\r\n\r\n if (tableObj) {\r\n //this.setSelectedTables(tableObj);\r\n this.selectedTableIds.push(tableId);\r\n this.animationCounter = 0;\r\n // let rectangle = this.addHighLightObject(tableObj);\r\n // this.animateObject(rectangle, 0, 0);\r\n this.highlightSelectedObject(tableObj);\r\n }\r\n });\r\n this.canvas.renderAll();\r\n this.rs.reservationFormGroup.controls.reservationDetailsForm.value.tableId = this.selectedTableIds;\r\n let control = this.rs.reservationFormGroup.get('reservationDetailsForm');\r\n control.get('tableId').setValue(this.selectedTableIds);\r\n\r\n }\r\n\r\n getReservationId(): number{\r\n return this.ls?.editPartyData$?.value?.Id;\r\n }\r\n\r\n LockSlot() {\r\n let reservationData = this.rs.reservationFormGroup.controls.reservationDetailsForm.value;\r\n let lockSlotDto = {\r\n LocalTime: moment(reservationData.reservationTime).format('YYYY-MM-DDTHH:mm:ss'), //selected date and time\r\n PartySize: reservationData.partySize,\r\n SeatingAreaId: reservationData.seatingArea.id > 0 ? reservationData.seatingArea.id : null,\r\n SeatingTypeId: reservationData.seatingType.id > 0 ? reservationData.seatingType.id : null,\r\n IsCommunalTable: reservationData.communalAvailability,\r\n FromWebsite: true,\r\n SpecialMealId:reservationData.specialMeal?.Id || null,\r\n ReservationIdToIgnore: this.getReservationId() || null\r\n }\r\n this.subscriptions.add(this.rs.GetLockSlot(this.ls.restaurantWidgetSettings$.value.RestaurantId, lockSlotDto).subscribe(data => {\r\n if (data && data.SlotLockIdDTO) {\r\n //configure Timer\r\n this.gs.setMessageState('', 0);\r\n this.ls.lockResult = data;\r\n let timer = moment(data.ExpiresAt).diff(moment(data.LockedAt), \"seconds\");\r\n this.ls.showTimer = true;\r\n this.ls.runTimer(timer);\r\n this.isSlotAcquired = true;\r\n\r\n if (this.rs.reservationFormGroup.controls.reservationDetailsForm.value.seatingArea.id == 0 && data.SeatingAreaId > 0 ) { //slot seating Area Id Locked\r\n let control = this.rs.reservationFormGroup.get('reservationDetailsForm');\r\n control.get('seatingArea').setValue({ id: data.SeatingAreaId, name: this.ls.restaurantWidgetSettings$.value.SeatingAreaList.filter(x => x.Id == data.SeatingAreaId)[0].Name }, { emitEvent: false });\r\n this.partyDetails.seatingArea = _.cloneDeep({ id: data.SeatingAreaId, name: this.ls.restaurantWidgetSettings$.value.SeatingAreaList.filter(x => x.Id == data.SeatingAreaId)[0].Name })\r\n }\r\n this.skipOrHightLightTableSelection();\r\n }\r\n else {\r\n this.isSlotAcquired = false;\r\n this.gs.setMessageState(this.ts.instant('SlotIsNotFound'), 0);\r\n }\r\n\r\n this.controlTimerDisplay();\r\n }));\r\n }\r\n\r\n controlTimerDisplay() {\r\n let timeCount = 0;\r\n this.timerSubscription = interval(1000 * 1).subscribe(() => {\r\n timeCount++;\r\n if (timeCount % 10 == 0) {\r\n this.ls.showTimer = !this.ls.showTimer;\r\n }\r\n });\r\n\r\n }\r\n\r\n\r\n getGuestDetails() {\r\n this.updateSeatingTypeId(this.floorPlanData);\r\n this.ls.showTimer = true;\r\n this.ls.nextButton.next(componentName.guestDetails);\r\n }\r\n\r\n getReservationDetails() {\r\n if (this.ls.lockResult && this.ls.lockResult.SlotLockIdDTO) {\r\n this.rs.ReleaseLockSlot(this.ls.restaurantWidgetSettings$.value.RestaurantId, this.ls.lockResult.SlotLockIdDTO.Id).subscribe(data => {\r\n this.ls.offTimer();\r\n this.ls.nextButton.next(componentName.reservationDetails);\r\n });\r\n }\r\n else {\r\n this.ls.nextButton.next(componentName.reservationDetails);\r\n }\r\n }\r\n\r\n updateSeatingTypeId(floorPlanData) {\r\n let selectedTableId = this.rs.reservationFormGroup.controls.reservationDetailsForm.value.tableId;\r\n let selectedSeatingType = floorPlanData.StandaloneTables.filter(t => t.Id == selectedTableId[0])[0].SeatingTypeId;\r\n let selectedSeatingArea = floorPlanData.StandaloneTables.filter(t => t.Id == selectedTableId[0])[0].SeatingAreaId;\r\n let isSameType: boolean = true;\r\n let isSameArea: boolean = true;\r\n selectedTableId.forEach(table => {\r\n isSameType = floorPlanData.StandaloneTables.filter(t => t.Id == table)[0].SeatingTypeId == selectedSeatingType && isSameType;\r\n isSameArea = floorPlanData.StandaloneTables.filter(t => t.Id == table)[0].SeatingAreaId == selectedSeatingArea && isSameType;\r\n });\r\n this.ls.isCommunalTableSelected = floorPlanData?.StandaloneTables?.filter(t => selectedTableId.includes(t.Id) && !t.IsCommunalTable).length == 0;\r\n\r\n // if (isSameType\r\n // && selectedSeatingType > 0 && this.rs.reservationFormGroup.controls.reservationDetailsForm.value.seatingType.id == 0\r\n // && selectedSeatingArea > 0 && this.rs.reservationFormGroup.controls.reservationDetailsForm.value.seatingArea.id == 0) {\r\n // let control = this.rs.reservationFormGroup.get('reservationDetailsForm');\r\n // control.get('seatingType').setValue({ id: selectedSeatingType, name: this.ls.restaurantWidgetSettings$.value.SeatingTypeList.filter(x => x.Id == selectedSeatingType)[0].Description }, { emitEvent: false });\r\n\r\n // // control = this.rs.reservationFormGroup.get('reservationDetailsForm');\r\n // // control.get('seatingArea').setValue({ id: selectedSeatingArea, name: this.ls.restaurantWidgetSettings$.value.SeatingAreaList.filter(x => x.Id == selectedSeatingArea)[0].Name }, { emitEvent: false });\r\n // }\r\n // else\r\n\r\n if(isSameType\r\n && selectedSeatingType > 0 && this.rs.reservationFormGroup.controls.reservationDetailsForm.value.seatingType.id == 0){\r\n let control = this.rs.reservationFormGroup.get('reservationDetailsForm');\r\n control.get('seatingType').setValue({ id: selectedSeatingType, name: this.ls.restaurantWidgetSettings$.value.SeatingTypeList.filter(x => x.Id == selectedSeatingType)[0].Description }, { emitEvent: false });\r\n }\r\n\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.setCanvas();\r\n this.subscriptions.add(this.rs.reservationFormGroup.controls.reservationDetailsForm.valueChanges.subscribe(x => {\r\n this.nextButton.disbaledproperity = (!x.tableId || x.tableId.length == 0) || !this.isSlotAcquired\r\n }));\r\n\r\n }\r\n\r\n isSelectedSizeAccommodableInTable(floorPlanData): boolean {\r\n let index = floorPlanData.StandaloneTables.findIndex(table => table.MaxPartySize >= this.rs.reservationFormGroup.controls.reservationDetailsForm.value.partySize\r\n && table.IsAvailableForBooking && table.IsAvailableForReservations)\r\n return index > -1;\r\n }\r\n\r\n isJoinedTableAvailable(tableId): any[] {\r\n let joinedTables = [];\r\n let isStandaloneTableAvailable = this.isSelectedSizeAccommodableInTable(this.floorPlanData);\r\n if (isStandaloneTableAvailable) {\r\n return joinedTables;\r\n }\r\n else {\r\n if (this.floorPlanData.JoinedTables && this.floorPlanData.JoinedTables.length > 0) {\r\n this.floorPlanData.JoinedTables.forEach(joinedTable => {\r\n if (joinedTable.StandaloneTableIds.findIndex(x => x == tableId) > -1 && joinedTable.MaxPartySize >= this.rs.reservationFormGroup.controls.reservationDetailsForm.value.partySize && this.rs.reservationFormGroup.controls.reservationDetailsForm.value.partySize >= joinedTable.MinPartySize) {\r\n let tablesJoined = [];\r\n let seatingAreaId = this.floorPlanData.StandaloneTables.filter(table => table.Id == joinedTable.StandaloneTableIds[0])[0].SeatingAreaId;\r\n let seatingTypeId = this.floorPlanData.StandaloneTables.filter(table => table.Id == joinedTable.StandaloneTableIds[0])[0].SeatingTypeId;\r\n joinedTable.StandaloneTableIds.forEach(Id => {\r\n let tableReq = this.floorPlanData.StandaloneTables.filter(table => table.Id == Id && table.SeatingAreaId == seatingAreaId && table.SeatingTypeId == seatingTypeId)[0];\r\n if (tableReq) {\r\n tablesJoined.push(tableReq);\r\n }\r\n });\r\n if (tablesJoined.length > 0 && tablesJoined.length == joinedTable.StandaloneTableIds.length) {\r\n joinedTables = [...tablesJoined];\r\n }\r\n }\r\n });\r\n }\r\n }\r\n return joinedTables;\r\n }\r\n\r\n isTableAvailable(floorPlanData): boolean {\r\n if (this.rs.reservationFormGroup.controls.reservationDetailsForm.value.seatingType.id == 0 && this.rs.reservationFormGroup.controls.reservationDetailsForm.value.seatingArea.id == 0) {\r\n return true;\r\n }\r\n let index = floorPlanData.StandaloneTables.findIndex(table => (this.rs.reservationFormGroup.controls.reservationDetailsForm.value.seatingType.id == 0 || !(table.SeatingTypeId > 0) || table.SeatingTypeId == this.rs.reservationFormGroup.controls.reservationDetailsForm.value.seatingType.id)\r\n && (this.rs.reservationFormGroup.controls.reservationDetailsForm.value.seatingArea.id == 0 || table.SeatingAreaId == this.rs.reservationFormGroup.controls.reservationDetailsForm.value.seatingArea.id)\r\n && table.IsAvailableForBooking && table.IsAvailableForReservations)\r\n return index > -1;\r\n }\r\n\r\n\r\n baseElement;\r\n setCanvas() {\r\n this.baseElement = this.canvasLoader.nativeElement;\r\n this.canvas = new fabric.Canvas('tablesLayout', {\r\n selection: false,\r\n });\r\n this.canvas.preserveObjectStacking = true;\r\n fabric.Object.prototype.set({\r\n transparentCorners: false,\r\n rotatingPointOffset: 20,\r\n cornerSize: 12,\r\n hasBorders: false,\r\n lockMovementX: true,\r\n lockMovementY: true,\r\n perPixelTargetFind: true,\r\n flipY: false,\r\n hasControls: false\r\n });\r\n\r\n this.canvas.hoverCursor = 'pointer';\r\n this.canvas.perPixelTargetFind = true;\r\n this.canvas.targetFindTolerance = 2;\r\n let _that = this;\r\n\r\n\r\n this.canvas.on({\r\n 'mouse:down'(event) {\r\n _that.mouseOut(event, _that);\r\n _that.showPrice(event, _that);\r\n if (event.target && (\r\n !(event.target.SeatingTypeId > 0)\r\n || !(_that.rs.reservationFormGroup.controls.reservationDetailsForm.value.seatingType.id > 0)\r\n || (event.target.SeatingTypeId > 0 && _that.rs.reservationFormGroup.controls.reservationDetailsForm.value.seatingType.id > 0 && event.target.SeatingTypeId == _that.rs.reservationFormGroup.controls.reservationDetailsForm.value.seatingType.id)\r\n ) && (\r\n !(event.target.SeatingAreaId > 0)\r\n || !(_that.rs.reservationFormGroup.controls.reservationDetailsForm.value.seatingArea.id > 0)\r\n || (event.target.SeatingAreaId > 0 && _that.rs.reservationFormGroup.controls.reservationDetailsForm.value.seatingArea.id > 0 && event.target.SeatingAreaId == _that.rs.reservationFormGroup.controls.reservationDetailsForm.value.seatingArea.id)\r\n )) {\r\n _that.setSelectedTables(event);\r\n }\r\n //_that.removeIllusion();\r\n\r\n\r\n },\r\n 'mouse:move'(event) {\r\n if (!_that.isMouseDown) {\r\n _that.removeHightLightColor(event, _that);\r\n }\r\n },\r\n 'mouse:up'(event) {\r\n _that.removeHightLightColor(event, _that);\r\n\r\n },\r\n 'mouse:over'(event) {\r\n // _that.showPrice(event, _that)\r\n },\r\n 'mouse:out'(event) {\r\n // _that.mouseOut(event, _that)\r\n }\r\n\r\n });\r\n\r\n\r\n }\r\n\r\n mouseOut(event, _that) {\r\n _that.canvas.remove(_that.canvas.getObjects().filter(x => x.name == 'pricePopover')[0])\r\n }\r\n\r\n addHighLightObject(table) {\r\n let shape = table.getObjects().filter(x => x.name == 'shape')[0];\r\n let serverData = table.getObjects().filter(x => x.name == 'serverCircle');\r\n let join = table.getObjects().filter(x => x.name == 'join');\r\n let notes = table.getObjects().filter(x => x.name == 'notes');\r\n let shapetype = shape.get('type');\r\n let icontop = (table.top) + ((table.height * table.scaleY) / 2);\r\n let iconleft = table.left - ((table.width * table.scaleX) / 2);\r\n if (shapetype == \"circle\") {\r\n\r\n let x = shape.radius * Math.sin(Math.PI * 2 * 45 / 360);\r\n let y = shape.radius * Math.cos(Math.PI * 2 * 45 / 360);\r\n let newval = join && join.length > 0 || notes && notes.length > 0 || shape.radius <= 10 ? 10 : 3;\r\n let notesval = notes && notes.length > 0 && shape.radius <= 10 ? 8 : shape.radius <= 10 ? 3 : 0;\r\n icontop = (icontop - newval) - (y / 2);\r\n iconleft = iconleft + notesval + (x / 2) - ((shape.radius / 25) * 5);\r\n\r\n } else if (shapetype == 'ellipse') {\r\n\r\n\r\n let x = shape.rx * Math.sin(Math.PI * 2 * 45 / 360);\r\n let y = shape.ry * Math.cos(Math.PI * 2 * 45 / 360);\r\n if (shape.angle) {\r\n x = shape.rx * Math.sin(Math.PI * 2 * shape.angle / 360);\r\n y = shape.ry * Math.cos(Math.PI * 2 * shape.angle / 360);\r\n y = y < 0 ? -1 * y : y;\r\n }\r\n icontop = (icontop) - (y / 2);\r\n if (shape.angle)\r\n iconleft = iconleft + 25;\r\n }\r\n else {\r\n icontop = shape.angle ? icontop - 22 : icontop - 10;\r\n iconleft = join && join.length > 0 ? iconleft + 6 : iconleft;\r\n }\r\n\r\n let myobj = _.cloneDeep(this.tableSelectIcon);\r\n\r\n myobj.set({\r\n top: icontop,\r\n left: iconleft\r\n });\r\n myobj.set({\r\n name: 'highlight',\r\n });\r\n myobj.scaleToWidth(20);\r\n myobj.scaleToHeight(20);\r\n table.addWithUpdate(myobj);\r\n this.canvas.renderAll();\r\n\r\n return myobj;\r\n }\r\n\r\n showPrice(event, _that) {\r\n var available;\r\n var price;\r\n var textAvailable;\r\n var textSeatingType;\r\n var textPartySize;\r\n var statusColor;\r\n if (event.target && event.target.Id) {\r\n if ((\r\n !(event.target.SeatingTypeId > 0)\r\n || !(_that.rs.reservationFormGroup.controls.reservationDetailsForm.value.seatingType.id > 0)\r\n || (event.target.SeatingTypeId > 0 && _that.rs.reservationFormGroup.controls.reservationDetailsForm.value.seatingType.id > 0 && event.target.SeatingTypeId == _that.rs.reservationFormGroup.controls.reservationDetailsForm.value.seatingType.id)\r\n ) && (\r\n !(event.target.SeatingAreaId > 0)\r\n || !(_that.rs.reservationFormGroup.controls.reservationDetailsForm.value.seatingArea.id > 0)\r\n || (event.target.SeatingAreaId > 0 && _that.rs.reservationFormGroup.controls.reservationDetailsForm.value.seatingArea.id > 0 && event.target.SeatingAreaId == _that.rs.reservationFormGroup.controls.reservationDetailsForm.value.seatingArea.id)\r\n ) && event.target.IsAvailableForReservations && event.target.IsAvailableForBooking && this.partyDetails.partySize >= event.target.MinPartySize) {\r\n event.target.hoverCursor = 'pointer';\r\n }\r\n else {\r\n event.target.hoverCursor = 'not-allowed';\r\n }\r\n\r\n if (event.target.IsAvailableForReservations && event.target.IsAvailableForBooking) {\r\n if (event.target.SeatingAreaId) {\r\n if (event.target.MinPartySize > this.partyDetails.partySize) {\r\n if (event.target.SeatingAreaId) {\r\n available = this.ts.instant('notAvailable');\r\n price = (event.target.Price != null && event.target.Price != \"\") ? (this.ls.OperationCurrency + Number(event.target.Price).toFixed(this.ls.restaurantWidgetSettings$.value.NumberOfFractionalDigits)) : ('')\r\n textAvailable = ' ' + available + ' ' + '\\n'\r\n textSeatingType = this.getTableDisplayName(event.target) + ' ' + price;\r\n textPartySize = event.target.MinPartySize + ' ' + this.ts.instant('min') + ' | ' + event.target.MaxPartySize + ' ' + this.ts.instant('max');\r\n statusColor = '#B93535';\r\n }\r\n }\r\n else {\r\n available = this.ts.instant('available');\r\n price = (event.target.Price != null && event.target.Price != \"\") ? (this.ls.OperationCurrency + Number(event.target.Price).toFixed(this.ls.restaurantWidgetSettings$.value.NumberOfFractionalDigits)) : ('')\r\n textAvailable = ' ' + available + ' ' + '\\n'\r\n textSeatingType = this.getTableDisplayName(event.target) + ' ' + price;\r\n textPartySize = event.target.MinPartySize + ' ' + this.ts.instant('min') + ' | ' + event.target.MaxPartySize + ' ' + this.ts.instant('max');\r\n statusColor = '#F27106';\r\n }\r\n }\r\n }\r\n else if (event.target.IsAvailableForReservations && !event.target.IsAvailableForBooking && !event.target.EventId) {\r\n if (event.target.SeatingAreaId) {\r\n available = this.ts.instant('sold');\r\n price = (event.target.Price != null && event.target.Price != \"\") ? (this.ls.OperationCurrency + Number(event.target.Price).toFixed(this.ls.restaurantWidgetSettings$.value.NumberOfFractionalDigits)) : ('')\r\n textAvailable = ' ' + available + ' ' + '\\n'\r\n textSeatingType = this.getTableDisplayName(event.target) + ' ' + price;\r\n textPartySize = event.target.MinPartySize + ' ' + this.ts.instant('min') + ' | ' + event.target.MaxPartySize + ' ' + this.ts.instant('max');\r\n statusColor = '#B93535';\r\n }\r\n }\r\n else if (event.target.IsAvailableForReservations && !event.target.IsAvailableForBooking && event.target.EventId) {\r\n if (event.target.SeatingAreaId) {\r\n available = this.ts.instant('notAvailable');\r\n price = (event.target.Price != null && event.target.Price != \"\") ? (this.ls.OperationCurrency + Number(event.target.Price).toFixed(this.ls.restaurantWidgetSettings$.value.NumberOfFractionalDigits)) : ('')\r\n textAvailable = ' ' + available + ' ' + '\\n'\r\n textSeatingType = this.getTableDisplayName(event.target) + ' ' + price;\r\n textPartySize = event.target.MinPartySize + ' ' + this.ts.instant('min') + ' | ' + event.target.MaxPartySize + ' ' + this.ts.instant('max');\r\n statusColor = '#B93535';\r\n }\r\n }\r\n else if (!event.target.IsAvailableForReservations && event.target.IsAvailableForBooking) {\r\n if (event.target.SeatingAreaId) {\r\n available = this.ts.instant('notAvailable');;\r\n price = (event.target.Price != null && event.target.Price != \"\") ? (this.ls.OperationCurrency + Number(event.target.Price).toFixed(this.ls.restaurantWidgetSettings$.value.NumberOfFractionalDigits)) : ('')\r\n textAvailable = ' ' + available + ' ' + '\\n'\r\n textSeatingType = this.getTableDisplayName(event.target) + ' ' + price;\r\n textPartySize = event.target.MinPartySize + ' ' + this.ts.instant('min') + ' | ' + event.target.MaxPartySize + ' ' + this.ts.instant('max');\r\n statusColor = '#B93535';\r\n }\r\n }\r\n else if (!event.target.IsAvailableForReservations && !event.target.IsAvailableForBooking) {\r\n\r\n if (event.target.SeatingAreaId) {\r\n available = this.ts.instant('notAvailable');;\r\n price = (event.target.Price != null && event.target.Price != \"\") ? (this.ls.OperationCurrency + Number(event.target.Price).toFixed(this.ls.restaurantWidgetSettings$.value.NumberOfFractionalDigits)) : ('')\r\n textAvailable = ' ' + available + ' ' + '\\n'\r\n textSeatingType = this.getTableDisplayName(event.target) + ' ' + price;\r\n textPartySize = event.target.MinPartySize + ' ' + this.ts.instant('min') + ' | ' + event.target.MaxPartySize + ' ' + this.ts.instant('max');\r\n statusColor = '#B93535';\r\n }\r\n\r\n }\r\n let rect = new fabric.Rect({\r\n height: 90,\r\n width: 150,\r\n cornerSize: 4,\r\n fill: '#444444',\r\n rx: 4,\r\n ry: 4\r\n });\r\n let textAvailablerect = new fabric.Rect({\r\n\r\n height: 20,\r\n width: 110,\r\n fill: statusColor,\r\n rx: 4,\r\n ry: 4,\r\n originY: 'center',\r\n originX: 'center',\r\n })\r\n let textAvailableData = new fabric.Text(textAvailable, {\r\n fill: '#fff',\r\n fontSize: 12,\r\n fontFamily: 'Roboto-Medium',\r\n originY: 'center',\r\n originX: 'center',\r\n top: textAvailablerect.height / 2 - 2,\r\n\r\n });\r\n let textAvailableGroup = new fabric.Group([textAvailablerect, textAvailableData], {\r\n top: rect.height / 2 - 20,\r\n left: rect.width / 2,\r\n originY: 'center',\r\n originX: 'center'\r\n })\r\n\r\n\r\n let textSeatingTypeLabel = new fabric.Text(textSeatingType, {\r\n top: rect.height / 2,\r\n left: rect.width / 2,\r\n fill: '#fff',\r\n fontSize: 14,\r\n fontFamily: 'Roboto-Regular',\r\n textAlign: 'left',\r\n originY: 'center',\r\n originX: 'center'\r\n });\r\n let data = '';\r\n if (event.target.IsCommunalTable) {\r\n data = this.ts.instant('communalSeating');\r\n }\r\n else {\r\n data = textPartySize\r\n }\r\n\r\n let partySizeData = new fabric.Text(data, {\r\n top: rect.height / 2 + 25,\r\n left: rect.width / 2,\r\n fill: '#fff',\r\n fontSize: 14,\r\n fontFamily: 'Roboto-Regular',\r\n textAlign: 'left',\r\n originY: 'center',\r\n originX: 'center'\r\n });\r\n let pricePopoverGroup = new fabric.Group([rect, textAvailableGroup, partySizeData, textSeatingTypeLabel], {\r\n cornerSize: 10,\r\n name: 'pricePopover',\r\n top: event.target.top,\r\n left: event.target.left,\r\n })\r\n\r\n pricePopoverGroup.top = event.target.top + (event.target.height / 2);\r\n pricePopoverGroup.left = event.target.left - (pricePopoverGroup.width / 2);\r\n if ((pricePopoverGroup.top + pricePopoverGroup.height) > _that.canvas.getHeight()) {\r\n pricePopoverGroup.top = event.target.top - pricePopoverGroup.height - (event.target.height / 2);\r\n }\r\n if ((pricePopoverGroup.left + pricePopoverGroup.width) > _that.canvas.getWidth()) {\r\n pricePopoverGroup.left = event.target.left - pricePopoverGroup.width - (event.target.width / 2);\r\n }\r\n if (pricePopoverGroup.left < 0) {\r\n pricePopoverGroup.left = event.target.left + (event.target.width / 2);\r\n }\r\n _that.canvas.add(pricePopoverGroup);\r\n }\r\n\r\n }\r\n\r\n getTableDisplayName(target): string {\r\n if (target.SeatingTypeId > 0 && target.SeatingType) {\r\n return target.SeatingType.toString();\r\n }\r\n else {\r\n return target.Name.toString();\r\n }\r\n }\r\n\r\n removeHightLightColor(obj, _that) {\r\n this.isMouseDown = false;\r\n const objs = _that.canvas.getObjects();\r\n objs.forEach(object => {\r\n object.set('opacity', 1);\r\n });\r\n }\r\n\r\n onSelectionCleared(eve, that) {\r\n that.selectionCleared.emit(eve);\r\n }\r\n\r\n removeIllusion() {\r\n let val = this.canvas.getObjects().filter(x => x.name == 'dummy')[0]\r\n if (val) {\r\n this.canvas.remove(val);\r\n return true;\r\n }\r\n return false\r\n }\r\n\r\n setDefaultFloor(tables, labels, walls, shapes, imageId) {\r\n this.dataToBePushed = [];\r\n labels.forEach((element, index) => {\r\n element.id = index;\r\n element.name = 'label';\r\n });\r\n walls.forEach((element, index) => {\r\n element.id = index;\r\n element.name = 'wall';\r\n });\r\n\r\n shapes.forEach((element, index) => {\r\n element.id = index;\r\n element.name = 'area';\r\n });\r\n\r\n\r\n tables = _.cloneDeep(tables);\r\n labels = _.cloneDeep(labels);\r\n walls = _.cloneDeep(walls);\r\n shapes = _.cloneDeep(shapes);\r\n let basicTables = this.findminObject(tables, labels, walls, shapes);\r\n let topMinValue = _.minBy(basicTables, 'totalminDataHeight');\r\n let leftMinValue = _.minBy(basicTables, 'totalminDataWidth');\r\n const negativeCoords = basicTables.filter(x => x.totalminDataHeight < 0 || x.totalminDataWidth < 0);\r\n this.topMinValue = Math.abs(topMinValue['totalminDataHeight']);\r\n this.leftMinValue = Math.abs(leftMinValue['totalminDataWidth']);\r\n if (negativeCoords.length > 0) {\r\n // negative values\r\n let adjustedTopValue = topMinValue['totalminDataHeight'] < 0 ? Math.abs(topMinValue['totalminDataHeight']) : 0;;\r\n let adjustedLeftValue = leftMinValue['totalminDataWidth'] < 0 ? Math.abs(leftMinValue['totalminDataWidth']) : 0;\r\n tables.forEach(element => {\r\n element.Top = element.Top + Math.abs(adjustedTopValue);\r\n element.Left = element.Left + Math.abs(adjustedLeftValue);\r\n });\r\n labels.forEach(element => {\r\n element.Top = element.Top + Math.abs(adjustedTopValue);\r\n element.Left = element.Left + Math.abs(adjustedLeftValue);\r\n });\r\n walls.forEach(element => {\r\n element.Points.forEach(point => {\r\n point['X'] = point['X'] + adjustedLeftValue;\r\n point['Y'] = point['Y'] + adjustedTopValue;\r\n });\r\n });\r\n\r\n shapes.forEach(element => {\r\n element.Top = element.Top + Math.abs(adjustedTopValue);\r\n element.Left = element.Left + Math.abs(adjustedLeftValue);\r\n });\r\n\r\n // // find new min val\r\n basicTables = this.findminObject(tables, labels, walls, shapes);\r\n topMinValue = _.minBy(basicTables, 'totalminDataHeight');\r\n leftMinValue = _.minBy(basicTables, 'totalminDataWidth');\r\n this.topMinValue = Math.abs(topMinValue['totalminDataHeight']);\r\n this.leftMinValue = Math.abs(leftMinValue['totalminDataWidth']);\r\n\r\n }\r\n let adjustedTopValue = 0;\r\n let adjustedLeftValue = 0;\r\n\r\n if (this.topMinValue > 50 && this.floorPlanData.ImageId == null) {\r\n adjustedTopValue = -1 * (this.topMinValue - 30);\r\n } else if (this.floorPlanData.ImageId) {\r\n }\r\n\r\n if (this.leftMinValue > 50 && this.floorPlanData.ImageId == null) {\r\n adjustedLeftValue = -1 * (this.leftMinValue - 30);\r\n } else if (this.floorPlanData.ImageId) {\r\n }\r\n\r\n tables.forEach(element => {\r\n element.Top = element.Top + (element.Height / 2) + adjustedTopValue;\r\n element.Left = element.Left + (element.Width / 2) + adjustedLeftValue;\r\n });\r\n labels.forEach(element => {\r\n\r\n let findstringlength = element.Text.length;\r\n let getwidth = 11;\r\n let getHeight = 11;\r\n let angles = element.Angle;\r\n if ((angles >= 0 && angles <= 20) || (angles >= 160 && angles <= 200) || (angles >= 340 && angles <= 360)) {\r\n getwidth = (findstringlength * 10) / 2;\r\n } else {\r\n getHeight = (findstringlength * 10) / 2;\r\n }\r\n element.Top = element.Top + adjustedTopValue + getHeight;\r\n element.Left = element.Left + adjustedLeftValue + getwidth;\r\n });\r\n walls.forEach(element => {\r\n element.Points.forEach(point => {\r\n point['X'] = point['X'] + adjustedLeftValue;\r\n point['Y'] = point['Y'] + adjustedTopValue;\r\n });\r\n });\r\n\r\n shapes.forEach(element => {\r\n element.Top = element.Top + adjustedTopValue;\r\n element.Left = element.Left + adjustedLeftValue;\r\n });\r\n\r\n basicTables = this.findmaxObject(tables, labels, walls, shapes);\r\n const topValue = _.maxBy(basicTables, 'totalDataHeight');\r\n const leftValue = _.maxBy(basicTables, 'totalDataWidth');\r\n\r\n this.heightValue = topValue['totalDataHeight'] + 25;\r\n this.widthValue = leftValue['totalDataWidth'] + 25;\r\n const height = this.canvasLoader.nativeElement.clientHeight > this.heightValue ? this.canvasLoader.nativeElement.clientHeight : this.heightValue;\r\n const width = this.canvasLoader.nativeElement.clientWidth > this.widthValue ? this.canvasLoader.nativeElement.clientWidth : this.widthValue;\r\n let scaleFactor;\r\n if (this.canvas) {\r\n this.scaleFactorY = this.canvasLoader.nativeElement.clientHeight / this.heightValue;\r\n this.scaleFactorX = this.canvasLoader.nativeElement.clientWidth / this.widthValue;\r\n if (this.scaleFactorX < 1 && this.scaleFactorY < 1) {\r\n scaleFactor = this.scaleFactorX <= this.scaleFactorY ? this.scaleFactorX : this.scaleFactorY;\r\n }\r\n else {\r\n scaleFactor = this.scaleFactorX >= this.scaleFactorY ? this.scaleFactorY : this.scaleFactorX;\r\n }\r\n\r\n let calculatedWidth = width * scaleFactor;\r\n // this.canvas.setZoom(scaleFactor);\r\n this.canvas.setHeight(this.canvasLoader.nativeElement.clientHeight);\r\n this.canvas.setWidth(this.canvasLoader.nativeElement.clientWidth);\r\n }\r\n let _that = this;\r\n let floorPlanImage = this.layoutImages.filter(x => x.ImageId == imageId)[0];\r\n fabric.Image.fromURL(floorPlanImage ? 'data:image/png;base64,' + floorPlanImage.bytes : '', function (img) {\r\n _that.canvas.setBackgroundImage(img, _that.canvas.renderAll.bind(_that.canvas), {\r\n scaleX: _that.canvas.width / img.width,\r\n scaleY: _that.canvas.height / img.height\r\n });\r\n });\r\n // // this.renderer.setStyle(this.canvasLoader.nativeElement, 'height', this.height);\r\n // // this.renderer.setStyle(this.canvasLoader.nativeElement, 'width', this.width)\r\n tables.forEach(element => {\r\n this.setTableConfiguration(element);\r\n\r\n });\r\n this.dataToBePushed.forEach(data => {\r\n this.canvas.add(data);\r\n data.set('subTargetCheck', true);\r\n })\r\n\r\n if (labels) {\r\n labels.forEach((element, index) => {\r\n this.addLabel(element, index);\r\n });\r\n\r\n }\r\n if (shapes) {\r\n shapes.forEach(element => {\r\n this.addShape(element);\r\n });\r\n\r\n }\r\n if (walls) {\r\n walls.forEach(element => {\r\n this.addWall(element);\r\n });\r\n }\r\n\r\n const objs = this.canvas.getObjects();\r\n\r\n objs.forEach((table) => {\r\n if (table.ImageId && (table.ShapeType == 3 || table.ShapeType == 4)) {\r\n this.setObjectImage(table);\r\n }\r\n });\r\n //Needed\r\n if (this.floorPlanData.ImageId) {\r\n if (this.floorPlanData.Dimensions && this.floorPlanData.Dimensions.length > 0 && this.floorPlanData.Dimensions[0].Width > 0 && this.floorPlanData.Dimensions[0].Height > 0) {\r\n this.scaleFactorX = this.canvasLoader.nativeElement.clientWidth / this.floorPlanData.Dimensions[0].Width;\r\n this.scaleFactorY = this.canvasLoader.nativeElement.clientHeight / this.floorPlanData.Dimensions[0].Height;\r\n this.canvas.getObjects().forEach(element => {\r\n element.set({\r\n scaleX: element.scaleX * _that.scaleFactorX,\r\n scaleY: element.scaleY * _that.scaleFactorY,\r\n top: element.top * _that.scaleFactorY,\r\n left: element.left * _that.scaleFactorX\r\n })\r\n element.setCoords();\r\n });\r\n }\r\n else {\r\n this.scaleObjects(this.canvas, this.scaleFactorX, this.scaleFactorY, scaleFactor, this.floorPlanData.BasedOn)\r\n }\r\n // if (isScalingAvailable) {\r\n // this.lf.scaleObjects(this.canvas, this.scaleFactorX, this.scaleFactorY, scaleFactor, this.floorPlan.BasedOn);\r\n // }\r\n } else {\r\n this.scaleObjects(this.canvas, this.scaleFactorX, this.scaleFactorY, scaleFactor, this.floorPlanData.BasedOn);\r\n }\r\n //this.scaleObjects(this.canvas, this.scaleFactorX, this.scaleFactorY, scaleFactor);\r\n this.canvas.renderAll();\r\n }\r\n\r\n setObjectImage(table) {\r\n let selectedTableObject = this.canvas.getObjects().filter(tableObj => tableObj.Id == table.Id);\r\n let tableImage = this.objectImages.filter((img) => img.ImageId == table.ImageId);\r\n\r\n if (selectedTableObject && selectedTableObject.length > 0 && tableImage.length > 0) {\r\n let compressedPhoto;\r\n fabric.Image.fromURL('data:image/png;base64,' + tableImage[0].bytes, (img) => {\r\n compressedPhoto = img;\r\n let shapedObject = selectedTableObject[0]._objects.filter(ele => ele.name == 'shape')[0];\r\n if (selectedTableObject[0].ShapeType == 4) {\r\n compressedPhoto.set({\r\n scaleX: (((shapedObject.width) / img.width) * selectedTableObject[0].scaleX),\r\n scaleY: (((shapedObject.height) / img.height) * selectedTableObject[0].scaleY),\r\n top: selectedTableObject[0].top,\r\n left: selectedTableObject[0].left,\r\n originX: 'center',\r\n originY: 'center',\r\n name: 'image',\r\n width: img.width,\r\n height: img.height,\r\n })\r\n } else {\r\n compressedPhoto.set({\r\n scaleX: ((shapedObject.width) / img.width) * selectedTableObject[0].scaleX,\r\n scaleY: ((shapedObject.height) / img.height) * selectedTableObject[0].scaleY,\r\n top: selectedTableObject[0].top,\r\n left: selectedTableObject[0].left,\r\n originX: 'center',\r\n originY: 'center',\r\n name: 'image',\r\n width: img.width,\r\n height: img.height\r\n });\r\n let server = selectedTableObject[0]._objects.filter(ele => ele.name == 'serverCircle');\r\n if (server && server.length > 0) {\r\n server[0].left = server[0].left + 12;\r\n server[0].top = server[0].top - 13;\r\n }\r\n }\r\n let allObjects = selectedTableObject[0]._objects.filter(ele => ele.name == 'textCircle' ||\r\n ele.name == 'tableNumber' || ele.name == 'text' || ele.name == 'serverLines').length;\r\n\r\n selectedTableObject[0].addWithUpdate(compressedPhoto);\r\n if (selectedTableObject[0].ShapeType == 4) {\r\n selectedTableObject[0].set({\r\n clipPath: new fabric.Circle({\r\n radius: selectedTableObject[0].height / 2,\r\n originX: 'center',\r\n originY: 'center',\r\n startAngle: 0,\r\n angle: Math.PI * 2,\r\n }),\r\n })\r\n }\r\n compressedPhoto.moveTo(selectedTableObject[0].size() - (allObjects + 1));\r\n selectedTableObject[0].addWithUpdate();\r\n this.canvas.renderAll();\r\n })\r\n }\r\n }\r\n\r\n\r\n addLabel(obj, index) {\r\n obj.id = index;\r\n obj.name = 'label';\r\n this.canvas.add(new fabric.Text(obj.Text.toString(), {\r\n fontFamily: 'Roboto Light',\r\n left: obj.Left,\r\n top: obj.Top,\r\n fontSize: 20,\r\n fontWeight: 'bold',\r\n fill: '#0000008A',\r\n data: index,\r\n name: 'label',\r\n selectable: false,\r\n angle: obj.Angle,\r\n originX: 'center',\r\n originY: 'center'\r\n }));\r\n this.canvas.renderAll();\r\n }\r\n addShape(element) {\r\n let shape;\r\n let newcolor = element.Color ? 'rgba(' + element.Color.R + ',' + element.Color.G + ',' + element.Color.B + ',' + element.Color.A + ')' : '#3B4532'\r\n if (element.ShapeType != undefined) {\r\n let type;\r\n switch (element.ShapeType) {\r\n case 0:\r\n type = ShapeTypeEnum.Rectangle\r\n break;\r\n case 1:\r\n type = this.checkTableiscircle(element);\r\n break;\r\n case 2:\r\n type = this.checkTableiscircle(element);\r\n break\r\n }\r\n if (type == ShapeTypeEnum.Rectangle) {\r\n shape = new fabric.Rect({\r\n left: element.Left,\r\n top: element.Top,\r\n height: element.Height,\r\n width: element.Width,\r\n stroke: newcolor,\r\n strokeWidth: 2,\r\n strokeDashArray: [8, 3],\r\n name: 'area',\r\n fill: '',\r\n angle: element.Rotation,\r\n selectable: false\r\n });\r\n } else if (type == ShapeTypeEnum.Circle) {\r\n\r\n shape = new fabric.Circle({\r\n radius: (element.Width > element.Height ? element.Height : element.Width) / 2,\r\n left: element.Left,\r\n top: element.Top,\r\n height: element.Height,\r\n width: element.Width,\r\n stroke: newcolor,\r\n strokeWidth: 2,\r\n strokeDashArray: [8, 3],\r\n name: 'area',\r\n fill: 'transparent',\r\n angle: element.Rotation,\r\n perPixelTargetFind: true,\r\n });\r\n } else if (type == ShapeTypeEnum.Ellipse) {\r\n\r\n shape = new fabric.Ellipse({\r\n left: element.Left,\r\n top: element.Top,\r\n rx: element.Width / 2,\r\n ry: element.Height / 2,\r\n stroke: newcolor,\r\n strokeWidth: 2,\r\n strokeDashArray: [8, 3],\r\n name: 'area',\r\n fill: 'transparent',\r\n angle: element.Rotation,\r\n perPixelTargetFind: true,\r\n });\r\n\r\n }\r\n }\r\n this.canvas.add(shape)\r\n this.canvas.sendToBack(shape);\r\n this.canvas.renderAll();\r\n }\r\n\r\n addWall(element) {\r\n element.name = 'wall'\r\n let linesArray = []\r\n element.Points.forEach(point => {\r\n linesArray.push({ x: point.X, y: point.Y })\r\n });\r\n\r\n let wall = new fabric.Polyline(linesArray, {\r\n stroke: '#3B4532',\r\n strokeWidth: 2,\r\n fill: 'transparent',\r\n data: element.id,\r\n name: 'wall',\r\n perPixelTargetFind: true,\r\n\r\n });\r\n this.canvas.add(wall)\r\n this.canvas.sendToBack(wall);\r\n this.canvas.renderAll();\r\n }\r\n\r\n\r\n\r\n scaleObjects(canvas, scaleFactorX, scaleFactorY, scaleFactor, BasedOn?) {\r\n const objects = canvas.getObjects();\r\n for (const i in objects) {\r\n const scaleX = objects[i].scaleX;\r\n const scaleY = objects[i].scaleY;\r\n const left = objects[i].left;\r\n const top = objects[i].top;\r\n const shapetype = objects[i].name == 'area';\r\n let scalefactorneed = false;\r\n if (objects[i]._objects) {\r\n let shape = objects[i]._objects.filter(x => x.name == 'shape')[0];\r\n let shapetypetable = shape.get('type');\r\n scalefactorneed = false;\r\n if (!shapetype && shapetypetable == ShapeTypeEnum.Rectangle && BasedOn == undefined) {\r\n scalefactorneed = this.getbigRectangle(objects[i].width, objects[i].height);\r\n }\r\n }\r\n const tempScaleX = scaleX * (shapetype || scalefactorneed ? scaleFactorX : scaleFactor);\r\n const tempScaleY = scaleY * (shapetype || scalefactorneed ? scaleFactorY : scaleFactor);\r\n const tempLeft = left * scaleFactorX;\r\n const tempTop = top * scaleFactorY;\r\n if (objects[i].points) {\r\n\r\n objects[i].scaleX = scaleFactorX;\r\n objects[i].scaleY = scaleFactorY;\r\n objects[i].left = tempLeft;\r\n objects[i].top = tempTop;\r\n } else {\r\n objects[i].scaleX = tempScaleX;\r\n objects[i].scaleY = tempScaleY;\r\n objects[i].left = tempLeft;\r\n objects[i].top = tempTop;\r\n }\r\n objects[i].setCoords();\r\n }\r\n canvas.renderAll();\r\n canvas.calcOffset();\r\n }\r\n\r\n getbigRectangle(Width, Height) {\r\n const checkdiff = Width < Height;\r\n let finalval = Height / Width;\r\n if (!checkdiff) {\r\n finalval = Width / Height;\r\n }\r\n return Math.abs(finalval) > (1.25);\r\n }\r\n setTableConfiguration(element) {\r\n if (element.ShapeType != undefined) {\r\n\r\n let type;\r\n switch (element.ShapeType) {\r\n case 0:\r\n type = ShapeTypeEnum.Rectangle\r\n break;\r\n case 1:\r\n type = this.checkTableiscircle(element);\r\n break;\r\n case 2:\r\n type = ShapeTypeEnum.Pin\r\n break;\r\n case 3:\r\n type = ShapeTypeEnum.BasicRectangle;\r\n break;\r\n case 4:\r\n type = ShapeTypeEnum.BasicCircle;\r\n break;\r\n case 8:\r\n type = ShapeTypeEnum.Image;\r\n break;\r\n\r\n }\r\n let adjustheightval = element.Height;\r\n let adjustwidthtval = element.Width;\r\n // const type = 'rect';\r\n if (type == 'rect') {\r\n const color = '#f7f7f7';\r\n const strokeColor = '#95989A';\r\n const textColor = 'gray';\r\n const party = null;\r\n const blocked = false;\r\n\r\n\r\n this.rectangle = new fabric.Rect({\r\n left: element.Left,\r\n top: element.Top,\r\n height: adjustheightval,\r\n width: adjustwidthtval,\r\n fill: '#fff',\r\n name: 'shape',\r\n rx: 2,\r\n ry: 2,\r\n });\r\n\r\n this.rectangle.set({\r\n name: 'shape',\r\n });\r\n\r\n this.tableObj = [];\r\n this.tableObj.push(this.rectangle);\r\n this.addTableGroup(this, this.rectangle, element, party);\r\n\r\n }\r\n else if (type == 'circle') {\r\n\r\n const party = null;\r\n\r\n this.circle = new fabric.Circle({\r\n left: element.Left,\r\n top: element.Top,\r\n height: adjustheightval,\r\n width: adjustwidthtval,\r\n radius: (adjustwidthtval / 2) > 15 ? (adjustwidthtval / 2) : 15,\r\n fill: '#fff',\r\n });\r\n this.circle.set({\r\n name: 'shape',\r\n });\r\n this.addTableGroup(this, this.circle, element, party)\r\n }\r\n else if (type == ShapeTypeEnum.Ellipse) {\r\n this.ellipse = new fabric.Ellipse({\r\n left: element.Left,\r\n top: element.Top,\r\n fill: '#fff',\r\n rx: element.Width / 2,\r\n ry: element.Height / 2,\r\n });\r\n this.ellipse.set({\r\n name: 'shape',\r\n });\r\n this.ellipse.setControlsVisibility({\r\n\r\n 'ml': false,\r\n 'mt': false,\r\n 'mr': false,\r\n 'mb': false,\r\n\r\n });\r\n this.addTableGroup(this, this.ellipse, element, false);\r\n }\r\n else if (type == ShapeTypeEnum.Pin) {\r\n let color = '#000';\r\n let seatingTypeSelected = this.ls.restaurantWidgetSettings$.value.SeatingTypeList.filter(x => x.Id == element.SeatingTypeId);\r\n\r\n if (seatingTypeSelected.length > 0) {\r\n let statusColor = seatingTypeSelected[0].Color;\r\n color = 'rgba(' + statusColor.R + ',' + statusColor.G + ',' + statusColor.B + ',' + statusColor.A + ')';\r\n }\r\n this.pin = new fabric.Circle({\r\n\r\n left: element.Left,\r\n top: element.Top,\r\n height: adjustheightval,\r\n width: adjustwidthtval,\r\n radius: (adjustwidthtval / 2) > 15 ? (adjustwidthtval / 2) : 15,\r\n fill: color,\r\n\r\n });\r\n this.pin.set({\r\n name: 'shape',\r\n type: 'pin'\r\n });\r\n this.addTableGroup(this, this.pin, element, false);\r\n\r\n }\r\n else if (type == ShapeTypeEnum.BasicRectangle) {\r\n const party = null;\r\n this.basicRectangle = new fabric.Rect({\r\n left: element.Left,\r\n top: element.Top,\r\n height: adjustheightval,\r\n width: adjustwidthtval,\r\n fill: '#fff',\r\n rx: 2,\r\n ry: 2\r\n });\r\n\r\n this.basicRectangle.set({\r\n name: 'shape',\r\n type: 'brect'\r\n });\r\n this.addTableGroup(this, this.basicRectangle, element, false);\r\n } else if (type == ShapeTypeEnum.BasicCircle) {\r\n const party = null;\r\n this.basicCircle = new fabric.Circle({\r\n left: element.Left,\r\n top: element.Top,\r\n height: adjustheightval,\r\n width: adjustwidthtval,\r\n radius: (adjustwidthtval / 2) > 15 ? (adjustwidthtval / 2) : 15,\r\n fill: '#fff',\r\n });\r\n this.basicCircle.set({\r\n name: 'shape',\r\n type: 'bcircle'\r\n });\r\n this.addTableGroup(this, this.basicCircle, element, false)\r\n }\r\n else if (type == ShapeTypeEnum.Image) {\r\n const images = this.customImages.filter((img) => img.ImageId == element.ImageId);\r\n if (images && images.length == 1) {\r\n let that = this;\r\n fabric.Image.fromURL('data:image/png;base64,' + images[0].bytes, function (img) {\r\n img.set({\r\n scaleX: adjustwidthtval / img.width,\r\n scaleY: adjustheightval / img.height,\r\n top: element.Top * that.scaleFactorY,\r\n left: element.Left * that.scaleFactorX,\r\n name: 'shape',\r\n type: 'image',\r\n })\r\n that.addTableGroup(that, img, element, false);\r\n });\r\n }\r\n }\r\n\r\n }\r\n }\r\n\r\n drawRectangleSeat(obj, that, colorData) {\r\n const color = '#444444';\r\n const objectWidth = obj.width;\r\n const objectHeight = obj.height;\r\n let setArray;\r\n const partySize = obj.MaxPartySize > 6 ? 6 : obj.MaxPartySize;\r\n switch (partySize) {\r\n case 1:\r\n setArray = ['left'];\r\n break;\r\n case 2:\r\n setArray = ['left', 'right'];\r\n break;\r\n case 3:\r\n setArray = ['left', 'top', 'right'];\r\n break;\r\n case 4:\r\n setArray = ['left', 'top', 'right', 'bottom'];\r\n break;\r\n case 5:\r\n setArray = ['left', 'top-right', 'top-left', 'right', 'bottom'];\r\n break;\r\n case 6:\r\n setArray = ['left', 'top-right', 'top-left', 'right', 'bottom-left', 'bottom-right'];\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n return this.drawSeat(obj, setArray, this, color);\r\n }\r\n\r\n setSelectedTables(tables) {\r\n let that = this;\r\n this.joinTableSelected = [];\r\n this.selectedTableIds = (this.allowMultipleSelection && !this.communalTableOption) ? this.selectedTableIds : [];\r\n let control = this.rs.reservationFormGroup.get('reservationDetailsForm');\r\n control.get('tableId').setValue(this.selectedTableIds);\r\n if (tables.target.Id) {\r\n let index = this.selectedTableIds.findIndex(x => x == tables.target.Id);\r\n\r\n if (index != -1) {\r\n this.selectedTableIds.splice(index, 1)\r\n let control = this.rs.reservationFormGroup.get('reservationDetailsForm');\r\n control.get('tableId').setValue(this.selectedTableIds)\r\n const objs = this.canvas.getObjects();\r\n let data = objs.filter(x => x.Id == tables.target.Id);\r\n if (data.length > 0) {\r\n this.removeHightLightedColor(data[0]);\r\n }\r\n }\r\n else {\r\n const objs = this.canvas.getObjects();\r\n objs.forEach(table => {\r\n if (table.Id) {\r\n if ((!this.allowMultipleSelection || this.communalTableOption) && tables.target.selectable) {\r\n (this.joinTableSelected.findIndex(x=>x.Id == table.Id) > -1) || this.removeHightLightedColor(table);\r\n }\r\n if (tables.target.Id && table.Id === tables.target.Id && tables.target.selectable &&\r\n (\r\n !(tables.target.SeatingTypeId > 0)\r\n || !(this.rs.reservationFormGroup.controls.reservationDetailsForm.value.seatingType.id > 0)\r\n || (tables.target.SeatingTypeId > 0 && this.rs.reservationFormGroup.controls.reservationDetailsForm.value.seatingType.id > 0 && tables.target.SeatingTypeId == this.rs.reservationFormGroup.controls.reservationDetailsForm.value.seatingType.id)\r\n ) &&\r\n (\r\n !(tables.target.SeatingAreaId > 0)\r\n || !(this.rs.reservationFormGroup.controls.reservationDetailsForm.value.seatingArea.id > 0)\r\n || (tables.target.SeatingAreaId > 0 && this.rs.reservationFormGroup.controls.reservationDetailsForm.value.seatingArea.id > 0 && tables.target.SeatingAreaId == this.rs.reservationFormGroup.controls.reservationDetailsForm.value.seatingArea.id)\r\n )) {\r\n\r\n if (this.allowMultipleSelection && this.selectedTableIds.length > 0) {\r\n this.selectedTableIds.push(tables.target.Id);\r\n if (!tables.target.IsCommunalTable && !this.isCommunalTableSelected) {\r\n let total = 0;\r\n let seaterTables = this.canvas.getObjects().filter(x => x.Id);\r\n this.selectedTableIds.forEach(data => {\r\n let selectedTable = seaterTables.filter(x => x.Id == data);\r\n if (selectedTable.length > 0) {\r\n total = selectedTable[0].MaxPartySize + total;\r\n }\r\n });\r\n if (total <= that.partyDetails.partySize) {\r\n this.animationCounter = 0;\r\n this.rs.reservationFormGroup.get('reservationDetailsForm').get('tableId').setValue(this.selectedTableIds);\r\n this.highlightSelectedObject(table);\r\n }\r\n else {\r\n let isPartySizeFulFilled = this.selectedTableIds.slice(0, -1);\r\n let seaterTables = this.canvas.getObjects().filter(x => x.Id);\r\n let total = 0;\r\n isPartySizeFulFilled.forEach(data => {\r\n let selectedTable = seaterTables.filter(x => x.Id == data);\r\n if (selectedTable.length > 0) {\r\n total = selectedTable[0].MaxPartySize + total;\r\n }\r\n });\r\n if (total < that.partyDetails.partySize) {\r\n this.animationCounter = 0;\r\n let control = this.rs.reservationFormGroup.get('reservationDetailsForm');\r\n control.get('tableId').setValue(this.selectedTableIds)\r\n this.highlightSelectedObject(table);\r\n }\r\n else {\r\n this.selectedTableIds.forEach(tableData => {\r\n let tableDetails = objs.filter(x => x.Id == tableData)[0]\r\n this.removeHightLightedColor(tableDetails)\r\n })\r\n this.selectedTableIds = [];\r\n this.selectedTableIds.push(tables.target.Id);\r\n this.animationCounter = 0;\r\n let control = this.rs.reservationFormGroup.get('reservationDetailsForm');\r\n control.get('tableId').setValue(this.selectedTableIds)\r\n this.highlightSelectedObject(table);\r\n }\r\n }\r\n }\r\n else {\r\n this.selectedTableIds = this.selectedTableIds.slice(0, -1);\r\n }\r\n }\r\n else {\r\n this.joinTableSelected = this.isJoinedTableAvailable(tables.target.Id);\r\n if (this.joinTableSelected && this.joinTableSelected.length > 0 && !this.allowMultipleSelection) {\r\n let joinedTableIds = this.joinTableSelected.map(x => { return x.Id })\r\n this.selectedTableIds = [...joinedTableIds];\r\n this.selectedTableIds.forEach(tbleId => {\r\n this.highlightSelectedObject(objs.filter(tbleObj => tbleObj.Id == tbleId)[0]);\r\n });\r\n }\r\n else {\r\n this.selectedTableIds.push(tables.target.Id);\r\n this.highlightSelectedObject(tables.target)\r\n }\r\n\r\n this.isCommunalTableSelected = tables.target.IsCommunalTable ? true : false;\r\n this.animationCounter = 0;\r\n let control = this.rs.reservationFormGroup.get('reservationDetailsForm');\r\n control.get('tableId').setValue(this.selectedTableIds)\r\n\r\n }\r\n\r\n }\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n removeHightLightedColor(object) {\r\n if (object.ShapeType == 2) {\r\n object._objects.filter(x => x.name == 'shape')[0].set({\r\n fill: object.defaultColor,\r\n strokeWidth: 0\r\n });\r\n }\r\n else {\r\n object._objects.filter(x => x.name == 'textCircle')[0].set({\r\n fill: object.defaultColor,\r\n strokeWidth: 0\r\n });\r\n }\r\n\r\n }\r\n\r\n highlightSelectedObject(object) {\r\n\r\n if (object.ShapeType == 2) {\r\n object._objects.filter(x => x.name == 'shape')[0].set({\r\n fill: '#F27106',\r\n stroke: '#fff',\r\n strokeWidth: 4\r\n });\r\n }\r\n else {\r\n object._objects.filter(x => x.name == 'textCircle')[0].set({\r\n fill: '#F27106',\r\n stroke: '#fff',\r\n strokeWidth: 4\r\n });\r\n }\r\n\r\n }\r\n\r\n drawSeat(obj, seatArray, that, color) {\r\n const tableObj = [];\r\n const scale = obj._objects.filter(x => x.name == 'shape')[0].scaleX;\r\n const shape = obj._objects.filter(x => x.name == 'shape')[0]\r\n seatArray.forEach(element => {\r\n switch (element) {\r\n case 'top': {\r\n const ff = this.rectSeat(obj.left - (obj.width / 4), (obj.top - (obj.height / 2) - 6), obj.left + (obj.width / 4), (obj.top - (obj.height / 2) - 6), scale, color);\r\n tableObj.push(ff);\r\n break;\r\n }\r\n\r\n case 'left': {\r\n const ff = this.rectSeat((obj.left - (obj.width / 2) - 4), (obj.top - (obj.height / 4) - 4), (obj.left - (obj.width / 2) - 4), (obj.top + obj.height / 4), scale, color);\r\n tableObj.push(ff);\r\n break;\r\n }\r\n\r\n case 'right': {\r\n const ff = this.rectSeat((obj.left + (obj.width / 2) - 1), (obj.top - (obj.height / 4) - 4), (obj.left + (obj.width / 2) - 1), (obj.top + obj.height / 4), scale, color);\r\n tableObj.push(ff);\r\n break;\r\n }\r\n\r\n case 'bottom': {\r\n const ff = this.rectSeat((obj.left - (obj.width / 4)), (obj.top + (obj.height / 2)), obj.left + (obj.width / 4), (obj.top + (obj.height / 2)), scale, color);\r\n tableObj.push(ff);\r\n break;\r\n }\r\n\r\n case 'top-right': {\r\n const ff = this.rectSeat(obj.left + (obj.width / 8), (obj.top - (obj.height / 2) - 6), obj.left + (obj.width / 2) - (obj.width / 8), (obj.top - (obj.height / 2) - 6), scale, color);\r\n tableObj.push(ff);\r\n break;\r\n }\r\n\r\n case 'top-left': {\r\n const ff = this.rectSeat(obj.left - (obj.width / 2) + (obj.width / 8), (obj.top - (obj.height / 2) - 6), obj.left - (obj.width / 8), (obj.top - (obj.height / 2) - 6), scale, color);\r\n tableObj.push(ff);\r\n break;\r\n }\r\n\r\n case 'bottom-right': {\r\n const ff = this.rectSeat(obj.left + (obj.width / 8), (obj.top + (obj.height / 2)), obj.left + (obj.width / 2) - (obj.width / 8), (obj.top + (obj.height / 2)), scale, color);\r\n tableObj.push(ff);\r\n break;\r\n }\r\n\r\n case 'bottom-left': {\r\n const ff = this.rectSeat(obj.left - (obj.width / 2) + (obj.width / 8), (obj.top + (obj.height / 2)), obj.left - (obj.width / 8), (obj.top + (obj.height / 2)), scale, color);\r\n tableObj.push(ff);\r\n break;\r\n }\r\n case 'top-right': {\r\n const ff = this.rectSeat(obj.left + (obj.width / 2) + (obj.width / 8), (obj.top - 6), obj.left + (obj.width) - (obj.width / 8), (obj.top - 6), scale, color);\r\n tableObj.push(ff);\r\n break;\r\n }\r\n\r\n case 'top-left': {\r\n const ff = this.rectSeat(obj.left + (obj.width / 8), (obj.top - 6), obj.left + (obj.width / 2) - (obj.width / 8), (obj.top - 6), scale, color);\r\n tableObj.push(ff);\r\n break;\r\n }\r\n\r\n case 'bottom-right': {\r\n const ff = this.rectSeat(obj.left + (obj.width / 2) + (obj.width / 8), (obj.top + (obj.height)), obj.left + (obj.width) - (obj.width / 8), (obj.top + (obj.height)), scale, color);\r\n tableObj.push(ff);\r\n break;\r\n }\r\n\r\n case 'bottom-left': {\r\n const ff = this.rectSeat(obj.left + (obj.width / 8), (obj.top + (obj.height)), obj.left + (obj.width / 2) - (obj.width / 8), (obj.top + (obj.height)), scale, color);\r\n tableObj.push(ff);\r\n break;\r\n }\r\n }\r\n\r\n });\r\n return tableObj;\r\n }\r\n\r\n rectSeat(x1, y1, x2, y2, scale, color) {\r\n scale = 1;\r\n const rectangleSeatObj = new fabric.Line([x1, y1, x2, y2], {\r\n stroke: color,\r\n strokeWidth: (5),\r\n });\r\n rectangleSeatObj.set({\r\n name: 'seat'\r\n });\r\n return rectangleSeatObj;\r\n }\r\n\r\n checkTableiscircle(object) {\r\n const checkdiff = object.Width - object.Height;\r\n return Math.abs(checkdiff) < 15 ? ShapeTypeEnum.Circle : ShapeTypeEnum.Ellipse;\r\n }\r\n\r\n\r\n\r\n findmaxObject(tables?, labels?, walls?, shapes?) {\r\n const afternewtables = _.cloneDeep(tables.map(obj => ({ ...obj, tempname: 'table' })));\r\n const afternewlabels = _.cloneDeep(labels.map(obj => ({ ...obj, tempname: 'label' })));\r\n const afternewwalls = _.cloneDeep(walls.map(obj => ({ ...obj, tempname: 'wall' })));\r\n const afternewshapes = _.cloneDeep(shapes.map(obj => ({ ...obj, tempname: 'area' })));\r\n\r\n const allObjects = _.cloneDeep(afternewtables.concat(afternewlabels, afternewwalls, afternewshapes));\r\n\r\n allObjects.forEach(element => {\r\n if (element.tempname == 'wall') {\r\n const maxx = _.maxBy(element.Points, (e) => { return e['X']; });\r\n const maxy = _.maxBy(element.Points, (e) => { return e['Y']; });\r\n element.totalDataHeight = maxy['Y'] + 10;\r\n element.totalDataWidth = maxx['X'] + 10;\r\n }\r\n else if (element.tempname == 'label') {\r\n const findstringlength = element.Text.length;\r\n let getwidth = 11;\r\n let getHeight = 11;\r\n const angles = element.Angle;\r\n if ((angles >= 0 && angles <= 20) || (angles >= 160 && angles <= 200) || (angles >= 340 && angles <= 360)) {\r\n getwidth = findstringlength * 10.2 / 2;\r\n } else {\r\n getHeight = findstringlength * 10.2 / 2;\r\n }\r\n element.totalDataHeight = getHeight + element.Top;\r\n element.totalDataWidth = getwidth + element.Left;\r\n }\r\n else if (element.tempname == 'table') {\r\n element.totalDataHeight = (element.Height) + element.Top;\r\n element.totalDataWidth = (element.Width) + element.Left;\r\n } else if (element.tempname == 'area') {\r\n element.totalDataHeight = element.Height + element.Top + 15;\r\n element.totalDataWidth = element.Width + element.Left + 15;\r\n } else {\r\n element.totalDataHeight = element.Height / 2 + element.Top;\r\n element.totalDataWidth = element.Width / 2 + element.Left;\r\n }\r\n\r\n });\r\n\r\n return allObjects;\r\n }\r\n\r\n findminObject(tables?, labels?, walls?, shapes?) {\r\n const newtables = _.cloneDeep(tables.map(obj => ({ ...obj, tempname: 'table' })));\r\n const newlabels = _.cloneDeep(labels.map(obj => ({ ...obj, tempname: 'label' })));\r\n const newwalls = _.cloneDeep(walls.map(obj => ({ ...obj, tempname: 'wall' })));\r\n const newshapes = _.cloneDeep(shapes.map(obj => ({ ...obj, tempname: 'area' })));\r\n\r\n const allObjects = _.cloneDeep(newtables.concat(newlabels, newwalls, newshapes));\r\n allObjects.forEach(element => {\r\n if (element.tempname == 'wall') {\r\n const minx = _.minBy(element.Points, (e) => { return e['X']; });\r\n const miny = _.minBy(element.Points, (e) => { return e['Y']; });\r\n element.totalminDataHeight = miny['Y'];\r\n element.totalminDataWidth = minx['X'];\r\n }\r\n else if (element.tempname == 'label') {\r\n const findstringlength = element.Text.length;\r\n let getwidth = 2;\r\n let getHeight = 2;\r\n const angles = element.Angle;\r\n if ((angles >= 0 && angles <= 20) || (angles >= 160 && angles <= 200) || (angles >= 340 && angles <= 360)) {\r\n getwidth = findstringlength / 2;\r\n } else {\r\n getHeight = findstringlength / 2;\r\n }\r\n element.totalminDataHeight = element.Top - (getHeight);\r\n element.totalminDataWidth = element.Left - (getwidth);\r\n }\r\n else if (element.tempname == 'table') {\r\n element.totalminDataHeight = element.Top - ((element.Height / 2) + 14);\r\n element.totalminDataWidth = element.Left - ((element.Width / 2) + 14);\r\n } else if (element.tempname == 'area') {\r\n element.totalminDataHeight = element.Top;\r\n element.totalminDataWidth = element.Left;\r\n } else {\r\n element.totalminDataHeight = element.Top - element.Height;\r\n element.totalminDataWidth = element.Left - element.Width;\r\n }\r\n });\r\n\r\n return allObjects;\r\n\r\n }\r\n\r\n addTableGroup(that, object, element, party) {\r\n let blocked = false;\r\n that.tableObj = [];\r\n const statusColorData = this.getStatusColor(element)\r\n if (object.type != ShapeTypeEnum.Pin) {\r\n object.set('fill', '#666666');\r\n }\r\n\r\n if (element.selected) {\r\n object.set({\r\n fill: 'red',\r\n });\r\n\r\n }\r\n if (object.type == ShapeTypeEnum.Image) {\r\n object.set('stroke', statusColorData.fillColor);\r\n object.set('strokeWidth', 2);\r\n }\r\n\r\n that.tableObj.push(object);\r\n that.groupedObject = new fabric.Group(that.tableObj, {\r\n top: object.top,\r\n left: object.left,\r\n originY: 'center',\r\n originX: 'center',\r\n });\r\n\r\n let seatingTypeSelected = this.ls.restaurantWidgetSettings$.value.SeatingTypeList.filter(x => x.Id == element.SeatingTypeId);\r\n let color = '#000'\r\n if (seatingTypeSelected.length > 0) {\r\n let statusColor = seatingTypeSelected[0].Color;\r\n color = 'rgba(' + statusColor.R + ',' + statusColor.G + ',' + statusColor.B + ',' + statusColor.A + ')';\r\n }\r\n that.groupedObject.set({\r\n SeatingArea: element.SeatingArea,\r\n SeatingAreaId: element.SeatingAreaId,\r\n SeatingType: element.SeatingType,\r\n SeatingTypeId: element.SeatingTypeId,\r\n ServerId: element.ServerId,\r\n MaxPartySize: element.MaxPartySize,\r\n MinPartySize: element.MinPartySize,\r\n Name: element.Name,\r\n Price: element.Price,\r\n IsAvailableForBooking: element.IsAvailableForBooking,\r\n IsAvailableForReservations: element.IsAvailableForReservations,\r\n IsCommunalTable: element.IsCommunalTable,\r\n FloorPlanViewId: element.FloorPlanViewId,\r\n Id: element.Id,\r\n ShapeType: element.ShapeType,\r\n Party: statusColorData.partyData,\r\n selectable: !element.IsAvailableForReservations || !element.IsAvailableForBooking || element.MinPartySize > this.partyDetails.partySize ? false : true,\r\n radius: element && element.radius > 0 ? element.radius : object.width / 2,\r\n Angle: element ? element.RotationAngle : 0,\r\n defaultColor: color,\r\n ImageId: element ? element.ImageId : null,\r\n EventId: element ? element.EventId : null\r\n\r\n });\r\n if (!element.IsAvailableForReservations || !element.IsAvailableForBooking || element.MinPartySize > this.partyDetails.partySize || element.EventId > 0) {\r\n color = '#808080';\r\n object.set({\r\n selectable: false,\r\n fill: '#808080',\r\n opacity: 1\r\n });\r\n that.groupedObject.set({\r\n defaultColor: '#808080'\r\n })\r\n }\r\n if (object.type == 0 || object.type == ShapeTypeEnum.Rectangle) {\r\n const seatData = this.drawRectangleSeat(that.groupedObject, that, '#3B4532');\r\n seatData.forEach(seat => {\r\n seat.set('strokeWidth', seat.strokeWidth * that.groupedObject.scaleX)\r\n that.groupedObject.addWithUpdate(seat);\r\n seat.moveTo(that.groupedObject.size() - 5)\r\n });\r\n }\r\n else if (object.type == 1 || object.type == ShapeTypeEnum.Circle) {\r\n const obj = _.cloneDeep(that.groupedObject)\r\n const seatData = this.drawCircleSeat(obj, that, '#3B4532');\r\n seatData.forEach(seat => {\r\n that.groupedObject.addWithUpdate(seat);\r\n seat.moveTo(that.groupedObject.size() - 5)\r\n });\r\n }\r\n\r\n that.groupedObject.setCoords();\r\n let text1;\r\n text1 = new fabric.Text('+', {\r\n fill: '#D5D5D5',\r\n textAlign: 'center',\r\n fontSize: 14,\r\n originX: 'center',\r\n originY: 'center',\r\n name: 'text',\r\n fontWeight: 'bold',\r\n top: that.groupedObject.top,\r\n left: that.groupedObject.left\r\n });\r\n\r\n const numberCircle = new fabric.Circle({\r\n fill: color,\r\n radius: 14,\r\n top: that.groupedObject.top,\r\n left: that.groupedObject.left,\r\n originX: 'center',\r\n originY: 'center',\r\n name: 'textCircle',\r\n opacity: .8,\r\n });\r\n if (object.type == ShapeTypeEnum.Pin) {\r\n text1 = new fabric.Text('+', {\r\n textAlign: 'center',\r\n fill: '#fff',\r\n name: 'pin',\r\n top: that.groupedObject.top,\r\n left: that.groupedObject.left,\r\n originX: 'center',\r\n originY: 'center',\r\n fontWeight: 'bold',\r\n objectCaching: false,\r\n fontSize: object.radius\r\n });\r\n }\r\n if (object.type != ShapeTypeEnum.Pin) {\r\n that.groupedObject.addWithUpdate(numberCircle);\r\n }\r\n\r\n that.groupedObject.addWithUpdate(text1)\r\n\r\n if (element) {\r\n that.groupedObject.rotate(element.RotationAngle);\r\n }\r\n that.groupedObject.addWithUpdate();\r\n\r\n if (element && element.scaleX) {\r\n let tempScaleX = element.scaleX;\r\n\r\n if (tempScaleX == 0 || tempScaleX < 0.1) {\r\n tempScaleX = 1;\r\n that.groupedObject.set({\r\n scaleX: tempScaleX\r\n })\r\n }\r\n\r\n }\r\n\r\n if (element && element.scaleY) {\r\n let tempScaleY = element.scaleY;\r\n\r\n if (tempScaleY == 0 || tempScaleY < 0.1) {\r\n tempScaleY = 1;\r\n that.groupedObject.set({\r\n scaleY: tempScaleY\r\n })\r\n }\r\n\r\n }\r\n\r\n if (object.type == ShapeTypeEnum.Image) {\r\n if (element && element.Angle) {\r\n that.groupedObject.set({\r\n angle: element.Angle\r\n })\r\n }\r\n }\r\n\r\n that.groupedObject.setCoords();\r\n that.count++;\r\n that.canvas.add(that.groupedObject);\r\n\r\n }\r\n\r\n drawCircleSeat(obj, that, colorData) {\r\n const color = '#444444';\r\n const seatWidth = 5 * 5;\r\n const radius = obj.radius;\r\n return this.roundSeatDraw(obj.MaxPartySize > 6 ? 6 : obj.MaxPartySize, radius, color, 'green', this, obj, color); // green,blue\r\n }\r\n\r\n roundSeatDraw(seat, radius, seatColor, tblFillColor, that, obj, color?) {\r\n const seatWidth = seat * 25;\r\n const lastend = 0;\r\n const myTotal = seat * 8;\r\n let startAngle = 0;\r\n const tableObj1 = [];\r\n const strokeColor = '';\r\n const table = obj._objects.filter(x => x.name == 'shape')[0];\r\n for (let i = 0; i < seat; i++) {\r\n const circleSeat = new fabric.Circle({\r\n radius: ((table.width * table.scaleX) / 2) + 3,\r\n startAngle: startAngle - ((Math.PI * 2) / myTotal),\r\n endAngle: startAngle + ((Math.PI * 2) / myTotal),\r\n stroke: seatColor,\r\n strokeWidth: (5),\r\n fill: '',\r\n top: obj.top,\r\n left: obj.left,\r\n originX: 'center',\r\n originY: 'center',\r\n });\r\n\r\n circleSeat.set({\r\n name: 'seat',\r\n });\r\n\r\n startAngle += Math.PI * 2 * ((myTotal / seat) / myTotal);\r\n tableObj1.push(circleSeat);\r\n }\r\n return tableObj1;\r\n }\r\n\r\n getStatusColor(element) {\r\n let fillColor = '#f2f2f2';\r\n const textColor = '#444444';\r\n let partyColor = 'black';\r\n let stroke = '#3B4532';\r\n let numberColor = '#4f483e';\r\n let partyData = null;\r\n return ({ fillColor, textColor, partyData, partyColor, stroke, numberColor });\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.subscriptions) {\r\n this.subscriptions.unsubscribe();\r\n }\r\n if (this.timerSubscription) {\r\n this.timerSubscription.unsubscribe();\r\n }\r\n }\r\n\r\n selectedTable(obj, ismouseDowm?) {\r\n const objs = this.canvas.getObjects();\r\n objs.forEach(object => {\r\n if (object._objects) {\r\n object._objects.forEach(element => {\r\n if (element.name == 'seat') {\r\n element.set({\r\n stroke: '#444444',\r\n })\r\n }\r\n if (element.name == 'shape') {\r\n element.set({\r\n stroke: null\r\n })\r\n\r\n }\r\n\r\n\r\n });\r\n }\r\n });\r\n obj.target._objects.forEach(element => {\r\n if (element.name == 'seat') {\r\n element.set({\r\n fill: 'red'\r\n })\r\n }\r\n if (element.name == 'shape') {\r\n element.set({\r\n fill: 'red'\r\n })\r\n\r\n }\r\n });\r\n }\r\n\r\n}\r\n","
\r\n
\r\n
\r\n
\r\n \r\n {{partyDetails.partySize}} {{'party' | translate}} \r\n \r\n {{partyDetails.reservationTime | formatSettingsDate:ls.restaurantWidgetSettings$.value.DateFormat}}\r\n \r\n {{partyDetails.seatingArea.name | translate}}\r\n \r\n {{partyDetails.seatingType.name | translate}}\r\n \r\n {{partyDetails.reservationTime| formatSettingsDate:'LT'}}\r\n
\r\n
\r\n \r\n
\r\n
\r\n\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n\r\n
\r\n
\r\n \r\n \r\n
\r\n
","
\r\n
\r\n {{'reservationDetails'| translate}}
\r\n
\r\n {{'ModifiedReservationDetails'| translate }}
\r\n
\r\n
\r\n {{partyDetails.specialMeal.Name}}\r\n 0\">-\r\n {{paymentData.OperationCurrency}}{{specialMealAmountInfo | currencyDecimalFormatter}}\r\n \r\n {{partyDetails?.partySize}} {{'party' | translate}}\r\n \r\n \r\n {{partyDetails.reservationTime | formatSettingsDate: ls.restaurantWidgetSettings$.value.DateFormat}}\r\n \r\n \r\n {{partyDetails.reservationTime | localizeDate:'h:mm A'}}\r\n {{partyDetails.seatingType.name}}\r\n 0\">-\r\n {{paymentData.OperationCurrency}}{{ratePlanAmountInfo | currencyDecimalFormatter}}\r\n \r\n 0) && !(specialMealAmountInfo>0) && noShowfee > 0 \">{{ 'amount' | translate}}\r\n {{paymentData.OperationCurrency}}{{noShowfee | currencyDecimalFormatter}}\r\n {{guestDetailsForm.value.primaryGuest.firstName}} {{guestDetailsForm.value.primaryGuest.lastName}}\r\n {{guestDetailsForm.value.primaryGuest.phone}}\r\n {{guestDetailsForm.value.primaryGuest.email}}\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n \r\n {{this.ls.restaurantWidgetSettings$.value.WidgetCustomization.PreReservationMessage}}\r\n
\r\n
\r\n
\r\n
{{ls.minutes}}\r\n {{'mins' | translate}} {{ls.seconds}} {{'secs'\r\n | translate}}
\r\n
{{'leftForBooking' | translate}}
\r\n
\r\n
\r\n
{{guest | translate}}\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n
0 && !rs.additionalGuestPage\">\r\n {{noShowPolicyTitle}}\r\n
\r\n {{'noShowCancellationFee' | translate}} : {{paymentData.OperationCurrency}}{{noShowfee | currencyDecimalFormatter}}\r\n

{{noShowfeeMessage}}

\r\n
\r\n
\r\n
0 && !rs.additionalGuestPage && ls.operation==operationType.create\">\r\n {{'prePaymentPolicy' | translate}}\r\n\r\n
\r\n {{'payment' | translate}} : {{paymentData.OperationCurrency}}{{activityPayment}}\r\n

\r\n {{paymentMessage}}\r\n

\r\n
\r\n
\r\n
\r\n {{'SubTotal' | translate}} :\r\n {{paymentData.OperationCurrency}}{{paymentWithoutTax | currencyDecimalFormatter}} \r\n
\r\n
\r\n {{'taxAmount' | translate}} :\r\n {{paymentData.OperationCurrency}}{{this.paymentData.TaxAmount | currencyDecimalFormatter}} \r\n
\r\n
\r\n {{'serviceCharges' | translate}} :\r\n {{paymentData.OperationCurrency}}{{this.serviceCharge | currencyDecimalFormatter}} \r\n
\r\n
\r\n {{'taxOnserviceCharge' | translate}} :\r\n {{paymentData.OperationCurrency}}{{this.taxOnServiceCharge | currencyDecimalFormatter}} \r\n
\r\n
\r\n {{'grandTotal' | translate}} :\r\n {{paymentData.OperationCurrency}}{{activityPayment | currencyDecimalFormatter}}\r\n
\r\n

\r\n {{paymentMessage}}\r\n

\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
    1\" class=\"ps-5\">\r\n
  • \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n guestData.length)|| (ls.operation == operationType.edit && (partyDetails.partySize > guestData.length))) && ls.restaurantWidgetSettings$.value.WidgetCustomization.AllowAdditionalGuestDetails\"\r\n [buttontype]=\"additionalGuestBtn\" (valueChange)=\"additionalGuest()\">\r\n
\r\n
\r\n \r\n \r\n
\r\n\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n {{ \"enterNecessaryDetailsForPayment\" | translate }}\r\n
\r\n
\r\n
\r\n
","import { TitleCasePipe } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, HostListener, OnDestroy, OnInit, QueryList, ViewChild, ViewChildren, ViewEncapsulation } from '@angular/core';\r\nimport { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport _ from 'lodash';\r\nimport moment from 'moment';\r\nimport { Subscription } from 'rxjs';\r\nimport { PopupMessageComponent } from 'src/app/shared/components/popup-message/popup-message.component';\r\nimport { AuthorizePaymentType, buttonTypes, componentName, ComponentTypes, NoteType, PartyNoteTypes } from 'src/app/shared/constants/commonenums';\r\nimport { DynamicFormComponent } from 'src/app/shared/dynamicform/dynamic-form/dynamic-form.component';\r\nimport { ButtonValue, FieldConfig } from 'src/app/shared/dynamicform/models/common-models';\r\nimport { ComponentDetails } from 'src/app/shared/dynamicform/models/popup.interface';\r\nimport { DynamicFormService } from 'src/app/shared/dynamicform/service/dynamic-form.service';\r\nimport { BookingTypeQuantityDTO, CoverTypeQuantityDTO, CustomFieldsDTO, FinancialEffectForUpdatedReservationDTO, PartyNoteType, PaymentGateways, PaymentStates, RegisterReservationAttemptResponseDTO, SecondaryContactDTO } from 'src/app/shared/Models/PartyModels';\r\nimport { SlotLockResultDTO } from 'src/app/shared/Models/SlotLockModels';\r\nimport { ConfirmationVia, CountryDTO, operationType, PolicyDataType } from 'src/app/shared/Models/WidgetSettingsModels';\r\nimport { PopupService } from 'src/app/shared/services/popup.service';\r\nimport { Utilities } from 'src/app/shared/utilities/utilities';\r\nimport { environment } from 'src/environments/environment';\r\nimport { AuthRefundPopupComponent } from '../../shared/components/auth-refund-popup/auth-refund-popup.component';\r\nimport { DataRetentionPolicyComponent } from '../data-retention-policy/data-retention-policy.component';\r\nimport { LayoutService } from '../layout.service';\r\nimport { ReservationService } from '../reservation.service';\r\nimport { GuestService } from 'src/app/shared/services/guest.service';\r\nimport { HttpClient } from '@angular/common/http';\r\n// Swire Change\r\nimport { FormChipService } from 'src/app/shared/dynamicform/components/form-chip/form-chip.service';\r\n// Swire Change\r\n\r\n@Component({\r\n selector: 'app-guest-details',\r\n templateUrl: './guest-details.component.html',\r\n styleUrls: ['./guest-details.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.Default\r\n})\r\nexport class GuestDetailsComponent extends Utilities implements OnInit, OnDestroy {\r\n guestInfoConfig: FieldConfig[];\r\n guestInfoConfigSecondary: FieldConfig[];\r\n guestConfig: FieldConfig[];\r\n confirmButton: ButtonValue;\r\n previousButton: ButtonValue;\r\n editButton: ButtonValue;\r\n editGuestButton: ButtonValue;\r\n editSlotsButton: ButtonValue;\r\n additionalGuestBtn: ButtonValue;\r\n guestDetailsForm: FormGroup;\r\n guestDataPrimary = ['primaryGuest'];\r\n guestDataSecondary = ['secondaryGuest1'];\r\n guestData = [];\r\n @ViewChildren('form') components: QueryList;\r\n @ViewChild('d') primaryGuest: DynamicFormComponent;\r\n partySize = 5;\r\n subscriptions: Subscription = new Subscription();\r\n partyDetails: any;\r\n lockResult: SlotLockResultDTO;\r\n deleteSecondaryGuestPopUpRef: MatDialogRef;\r\n paymentData: RegisterReservationAttemptResponseDTO;\r\n urlSafe: SafeResourceUrl;\r\n waiverFormTrancationId = null;\r\n isUserAllowedToclickConfirm = false;\r\n stopListening: Function;\r\n showIframe = false;\r\n IframeURL = '';\r\n waiverFormTransactionId = '';\r\n countryCodes: CountryDTO[] = [];\r\n selectedCountryId: number;\r\n noShowfeeMessage = '';\r\n noShowfee: number;\r\n activityPayment: number;\r\n paymentWithoutTax: number;\r\n paymentMessage = '';\r\n notesFormGroup: any;\r\n dataRetentionPolicyExisting = false;\r\n primaryGuestPhone = '';\r\n primaryGuestEmail = '';\r\n dataRetentionPolicyDialogRef: MatDialogRef;\r\n financialPopUpRef: MatDialogRef;\r\n popUpMessage = '';\r\n noShowPolicyTitle = '';\r\n ratePlanAmountInfo: number;\r\n specialMealAmountInfo: number;\r\n paymentAmountInfo: number;\r\n operationType = operationType;\r\n freeTextIdList = [];\r\n secondaryGuestTobeDeletedIndex: number;\r\n noteType: number;\r\n canShowSeatingType = false;\r\n isPreReservationMsgHTML = false;\r\n financialData: FinancialEffectForUpdatedReservationDTO;\r\n isSplitPayment: boolean;\r\n RefundData: any;\r\n AuthrefundPopupRef: any;\r\n isAuthRefund: boolean;\r\n SwireConfig: any;\r\n customGuestFieldsMappingValidations: any[] = [];\r\n serviceCharge = 0.0;\r\n taxOnServiceCharge = 0.0;\r\n // Swire Change\r\n selectedPartyNotes: any[] = [];\r\n selectedPartyPreferenceTags: any[] = [];\r\n isForSwire: boolean;\r\n // Swire Change\r\n authorizeTransactionDetails: any;\r\n isFormValid: boolean = false;\r\n validationMessageList: string[] = [];\r\n nextButton: ButtonValue;\r\n\r\n constructor(private ts: TranslateService, private dfs: DynamicFormService, public ls: LayoutService, \r\n private fb: FormBuilder, public rs: ReservationService, public sanitizer: DomSanitizer, \r\n private ps: PopupService, public dialog: MatDialog, public titleCasePipe: TitleCasePipe, \r\n public gs: GuestService, private formChipService: FormChipService, private http: HttpClient) {\r\n super(dialog)\r\n }\r\n\r\n ngOnInit(): void {\r\n this.SwireConfig = environment[\"NotesAsTagsMerchantIds\"];\r\n this.guestDetailsForm = this.fb.group({})\r\n this.authorizeTransactionDetails = null;\r\n this.countryCodes = this.ls.countriesList;\r\n if(this.ls.restaurantWidgetSettings$.value.DisableCustomTermsAndConditions && !this.isSwireAndSEAEnv()) {\r\n if (this.ls.restaurantWidgetSettings$.value.WidgetCustomization.CustomTermsOfService && this.ls.restaurantWidgetSettings$.value.WidgetCustomization.CustomTermsOfService.length > 0) {\r\n this.validationMessageList.push(this.ts.instant('By click next, you agree to the following'));\r\n this.validationMessageList.push(`${this.ts.instant('termsOfUse')}` + this.ts.instant('and') + `${this.ts.instant('privacyPolicy')}`)\r\n this.ls.restaurantWidgetSettings$.value.WidgetCustomization.CustomTermsOfService.forEach((customTerm) => {\r\n this.validationMessageList.push(customTerm);\r\n });\r\n }\r\n else {\r\n this.validationMessageList.push(this.getAgreeTermsAndConditionsText());\r\n }\r\n }\r\n this.noteType = this.ls.restaurantWidgetSettings$.value.WidgetCustomization.NotesType;\r\n if(this.ls.restaurantWidgetSettings$.value?.customGuestFieldsMappingValidations){\r\n this.customGuestFieldsMappingValidations = this.ls.restaurantWidgetSettings$.value?.customGuestFieldsMappingValidations\r\n }\r\n this.CheckForSwire();\r\n this.createGuestConfig();\r\n if (this.ls.restaurantWidgetSettings$.value.WidgetCustomization.PreReservationMessage) {\r\n let preReservationMsg = this.ls.restaurantWidgetSettings$.value.WidgetCustomization.PreReservationMessage;\r\n const HTMLPattern = /<(?=.*? .*?\\/ ?>|br|hr|input|!--|wbr)[a-z]+.*?>|<([a-z]+).*?<\\/\\1>/i;\r\n this.isPreReservationMsgHTML = HTMLPattern.test(preReservationMsg);\r\n }\r\n // this.addCategoryPreferencesNotes(this.noteType);\r\n let guestConfigCopy = _.cloneDeep(this.guestConfig);\r\n if (this.rs.additionalGuestPage && this.ls.operation != operationType.edit) {\r\n this.addCategoryPreferencesNotes(NoteType.guestNote);\r\n this.guestData = _.cloneDeep(this.guestDataSecondary)\r\n this.guestInfoConfig = _.cloneDeep(this.guestConfig)\r\n }\r\n else if (!this.rs.additionalGuestPage && this.ls.operation == operationType.edit) {\r\n this.guestData = _.cloneDeep(this.guestDataPrimary);\r\n\r\n let partySize = this.ls.operation == operationType.edit && this.rs.secondaryContactList ? this.rs.secondaryContactList.length : 0;//this.rs.reservationFormGroup.controls.guestDetailsForm.get('secondaryContactList').value.length\r\n while (partySize != 0) {\r\n this.guestData.push(this.ts.instant('secondaryGuest') + (this.guestData.length + 1));\r\n partySize--;\r\n }\r\n this.addCategoryPreferencesNotes(this.noteType);\r\n\r\n // Swire Change\r\n if (this.isForSwire) {\r\n this.mapPartyNotes();\r\n }\r\n // Swire Change\r\n\r\n this.guestInfoConfig = _.cloneDeep(this.guestConfig);\r\n this.addCustomGuestFields();\r\n this.addRequiredCustomTermsAndConditions();\r\n this.createGuestConfig();\r\n this.addCategoryPreferencesNotes(NoteType.guestNote);\r\n this.guestInfoConfigSecondary = _.cloneDeep(this.guestConfig);\r\n this.guestInfoConfigSecondary.forEach((config) => {\r\n if (config.name == 'region' || config.name == 'phone') {\r\n config.disableSelect = true;\r\n }\r\n });\r\n // this.guestInfoConfigSecondary[2].disableSelect = true;\r\n // this.guestInfoConfigSecondary[3].disableSelect = true;\r\n }\r\n else {\r\n this.addCategoryPreferencesNotes(this.noteType);\r\n\r\n // Swire Change\r\n if (this.isForSwire) {\r\n this.mapPartyNotes();\r\n }\r\n // Swire Change\r\n\r\n this.guestData = _.cloneDeep(this.guestDataPrimary)\r\n this.guestInfoConfig = _.cloneDeep(this.guestConfig);\r\n }\r\n\r\n if (this.countryCodes && this.countryCodes.length > 0) {\r\n let countrySelected = Utilities.getDefaultCountry(this.countryCodes, this.ls.restaurantWidgetSettings$.value.Country);\r\n this.guestInfoConfig.forEach((config) => {\r\n if (config.name == 'region' || config.name == 'phone') {\r\n config.options = [];\r\n }\r\n });\r\n // this.guestInfoConfig[2].options = [];\r\n // this.guestInfoConfig[3].options = [];\r\n this.countryCodes.forEach(element => {\r\n this.guestInfoConfig.forEach((config) => {\r\n if (config.name == 'region') {\r\n config.options.push({ id: element.Id, value: element.Name });\r\n } else if (config.name == 'phone') {\r\n config.options.push({ id: element.Id, value: element.CountryPhoneCode });\r\n }\r\n });\r\n // this.guestInfoConfig[2].options.push({ id: element.Id, value: element.Name });\r\n // this.guestInfoConfig[3].options.push({ id: element.Id, value: element.CountryPhoneCode });\r\n })\r\n if (this.rs.primaryContact) {\r\n const selectedCountryCode = this.countryCodes.filter((country) => {\r\n return country.Id === this.rs.primaryContact.CountryId;\r\n })[0];\r\n if (selectedCountryCode) {\r\n this.rs.selectedCountryId = selectedCountryCode.Id;\r\n this.dfs.selectedCountryCode = selectedCountryCode.CountryPhoneCode;\r\n this.dfs.selectedCountryId = selectedCountryCode.Id;\r\n }\r\n }\r\n this.guestInfoConfig.forEach((config) => {\r\n if (config.name == 'region' || config.name == 'phone') {\r\n config.value = this.rs.selectedCountryId ? this.rs.selectedCountryId : countrySelected.Id;\r\n }\r\n });\r\n // this.guestInfoConfig[2].value = this.rs.selectedCountryId ? this.rs.selectedCountryId : countrySelected.Id;\r\n // this.guestInfoConfig[3].value = this.rs.selectedCountryId ? this.rs.selectedCountryId : countrySelected.Id;\r\n if (operationType.edit == this.ls.operation && this.guestInfoConfigSecondary) {\r\n this.guestInfoConfigSecondary.forEach((config) => {\r\n if (config.name == 'region' || config.name == 'phone') {\r\n let configOptions = this.guestInfoConfig.filter((guestConfig) => guestConfig.name == config.name);\r\n if (configOptions && configOptions.length) {\r\n config.options = _.cloneDeep(configOptions[0].options);\r\n }\r\n config.value = this.rs.selectedCountryId ? this.rs.selectedCountryId : countrySelected.Id;\r\n }\r\n });\r\n // this.guestInfoConfigSecondary[2].options = _.cloneDeep(this.guestInfoConfig[2].options);\r\n // this.guestInfoConfigSecondary[2].value = this.rs.selectedCountryId ? this.rs.selectedCountryId : countrySelected.Id;\r\n // this.guestInfoConfigSecondary[3].options = _.cloneDeep(this.guestInfoConfig[3].options);\r\n // this.guestInfoConfigSecondary[3].value = this.rs.selectedCountryId ? this.rs.selectedCountryId : countrySelected.Id;\r\n }\r\n this.rs.selectedCountryId = this.rs.selectedCountryId ? this.rs.selectedCountryId : countrySelected.Id;\r\n this.dfs.selectedCountryCode = this.dfs.selectedCountryCode ? this.dfs.selectedCountryCode : countrySelected.CountryPhoneCode;\r\n this.dfs.selectedCountryId = this.dfs.selectedCountryId ? this.dfs.selectedCountryId : countrySelected.Id;\r\n }\r\n this.createActionButtons();\r\n this.partyDetails = this.ls.editPartyData = _.cloneDeep(this.rs.reservationFormGroup.controls.reservationDetailsForm.value);\r\n\r\n if (!this.rs.additionalGuestPage) {\r\n if (this.ls.operation != operationType.edit) {\r\n this.addCustomGuestFields();\r\n this.addRequiredCustomTermsAndConditions();\r\n }\r\n this.ls.operation == operationType.edit ? this.RegisterReservationAttempt(true) : this.GetPreliminaryReservationInformation();\r\n }\r\n else {\r\n this.isUserAllowedToclickConfirm = true;\r\n }\r\n\r\n this.subscriptions.add(this.ps.actionEnabled$.subscribe(from => {\r\n if (from == ComponentTypes.dataRetentionPolicy) {\r\n if (this.dataRetentionPolicyDialogRef) {\r\n this.dataRetentionPolicyDialogRef.close();\r\n }\r\n }\r\n else if (from == ComponentTypes.deleteSecondaryGuest) {\r\n this.deleteSecondaryGuestConfirmed();\r\n this.deleteSecondaryGuestPopUpRef.close();\r\n }\r\n else if (from == ComponentTypes.financialEffectCalculation) {\r\n this.financialPopUpRef.close();\r\n if (this.RefundData) {\r\n this.showAuthRefundPopup();\r\n }\r\n }\r\n else if (from == ComponentTypes.AuthRefundPopup) {\r\n this.AuthrefundPopupRef.close();\r\n this.isAuthRefund = true;\r\n }\r\n }));\r\n\r\n this.subscriptions.add(this.ps.cancelEnabled$.subscribe(from => {\r\n if (from == ComponentTypes.financialEffectCalculation || from == ComponentTypes.AuthRefundPopup) {\r\n this.goBackToReservation();\r\n }\r\n if (from == ComponentTypes.deleteSecondaryGuest) {\r\n this.deleteSecondaryGuestPopUpRef.close();\r\n }\r\n }));\r\n\r\n // Swire Change\r\n if (this.isForSwire) {\r\n this.formChipsChange();\r\n }\r\n // Swire Change\r\n // this.canShowSeatingType = !(environment.SEAProduction && environment.restaurantIds.filter(x=> x == this.ls.restaurantWidgetSettings$.value.RestaurantId).length > 0);\r\n \r\n this.subscriptions.add(\r\n this.gs.overlapBookingproceedEvent.subscribe(x=>{\r\n if(x.proceedOverlapBooking) {\r\n this.reservationConfirm();\r\n }\r\n })\r\n )\r\n\r\n }\r\n \r\n isHTML(str) {\r\n var doc = new DOMParser().parseFromString(str, \"text/html\");\r\n return Array.from(doc.body.childNodes).some(node => node.nodeType === 1);\r\n }\r\n \r\n createGuestConfig() {\r\n this.guestConfig = [\r\n {\r\n type: 'input',\r\n label: 'firstName',\r\n name: 'firstName',\r\n inputType: 'text',\r\n class: 'guest-details__first-name',\r\n showErrorText: true,\r\n appearance: true,\r\n isFormArray: false,\r\n errorMessage: 'firstNameRequired',\r\n validation: [Validators.required],\r\n value: ''\r\n },\r\n {\r\n type: 'input',\r\n label: 'lastName',\r\n name: 'lastName',\r\n inputType: 'text',\r\n class: 'guest-details__last-name',\r\n showErrorText: true,\r\n appearance: true,\r\n isFormArray: false,\r\n errorMessage: 'lastNameRequired',\r\n validation: [Validators.required],\r\n value: ''\r\n },\r\n {\r\n type: 'input',\r\n label: 'aliasName',\r\n name: 'aliasName',\r\n inputType: 'text',\r\n class: 'guest-details__alias-name',\r\n showErrorText: true,\r\n appearance: true,\r\n isFormArray: false,\r\n value: '',\r\n hide: this.ls.restaurantWidgetSettings$.value?.ShowAliasName ? false : true\r\n },\r\n {\r\n type: 'select',\r\n name: 'region',\r\n placeholder: '',\r\n options: [],\r\n appearance: true,\r\n isFormArray: false,\r\n label: 'region',\r\n class: \"guest-details__region\",\r\n validation: [Validators.required],\r\n cellClick: this.regionChange.bind(this),\r\n disableSelect: this.rs.additionalGuestPage, \r\n isNativeControl: this.ls.isMobileBrowser\r\n },\r\n {\r\n type: 'inputSelect',\r\n label: 'phone',\r\n name: 'phone',\r\n inputType: 'text',\r\n placeholder: 'registerPinText',\r\n class: 'guest-details__phone',\r\n showErrorText: true,\r\n appearance: true,\r\n errorMessage: 'phoneRequired',\r\n isFormArray: false,\r\n cellClick: this.countryCodeSelected.bind(this),\r\n isPhoneNumber: true,\r\n validation: [Validators.required],\r\n disableSelect: true,\r\n blurClick: this.mobileNumberValidation.bind(this)\r\n },\r\n {\r\n type: 'input',\r\n label: 'email',\r\n name: 'email',\r\n inputType: 'email',\r\n class: 'guest-details__email',\r\n showErrorText: true,\r\n appearance: true,\r\n isFormArray: false,\r\n errorMessage: 'emailRequired',\r\n validation: [Validators.required, Validators.email, Validators.pattern('^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\\\.[A-Za-z]{2,}$')],\r\n value: ''\r\n }\r\n ];\r\n }\r\n\r\n createActionButtons() {\r\n this.confirmButton = {\r\n type: buttonTypes.confirmBtn,\r\n label: 'confirm',\r\n customclass: 'guest-details__confirm-btn',\r\n disbaledproperity: true\r\n };\r\n this.editButton = {\r\n type: buttonTypes.confirmBtn,\r\n label: 'edit',\r\n customclass: 'guest-details__confirm-btn',\r\n disbaledproperity: false\r\n };\r\n this.previousButton = {\r\n type: buttonTypes.cancelBtn,\r\n label: 'previous',\r\n customclass: 'guest-details__previous-btn',\r\n };\r\n this.additionalGuestBtn = {\r\n type: buttonTypes.cancelBtn,\r\n label: this.ts.instant('guestDetails'),\r\n customclass: 'guest-details__additional-guest',\r\n icon: 'icon-add'\r\n };\r\n this.nextButton = {\r\n type: buttonTypes.confirmBtn,\r\n label: 'next',\r\n customclass: 'guest-details__next-btn',\r\n disbaledproperity: false\r\n };\r\n this.editSlotsButton = {\r\n type: buttonTypes.confirmBtn,\r\n label: 'editSlots',\r\n customclass: 'guest-details__confirm-btn',\r\n disbaledproperity: false\r\n };\r\n this.editGuestButton = {\r\n type: buttonTypes.confirmBtn,\r\n label: 'editGuest',\r\n customclass: 'guest-details__confirm-btn',\r\n disbaledproperity: false\r\n };\r\n }\r\n\r\n addCategoryPreferencesNotes(noteType: NoteType) {\r\n if (this.ls.restaurantWidgetSettings$.value.PreferencesCategories && this.ls.restaurantWidgetSettings$.value.PreferencesCategories.length > 0) {\r\n this.ls.restaurantWidgetSettings$.value.PreferencesCategories.forEach(category => {\r\n if (category.IncludeInWebReservation) {\r\n let predefinedNotes = [];\r\n let freeTextIdValue;\r\n if (category.SubCategories && category.SubCategories.length > 0) {\r\n category.SubCategories.forEach(x => {\r\n if (noteType == NoteType.guestNote && x.PredefinedContactNote && x.PredefinedContactNote.length > 0) {\r\n x.PredefinedContactNote.forEach(note => {\r\n if (note.Text.toLowerCase() == \"others\") {\r\n freeTextIdValue = note.Id;\r\n this.freeTextIdList.push(freeTextIdValue);\r\n } else {\r\n let predefinedContactNoteMappingList = note.PredefinedContactNotePropertyMapping.filter(x => x.PropertyId == this.ls.restaurantWidgetSettings$.value.RestaurantId).map(x => x.PredefinedContactNoteId);\r\n if (predefinedContactNoteMappingList.find(x => x == note.Id)) { predefinedNotes.push(note) }\r\n }\r\n });\r\n }\r\n else if (noteType == NoteType.partyNote && x.PredefinedPartyNote && x.PredefinedPartyNote.length > 0) {\r\n x.PredefinedPartyNote.forEach(note => {\r\n if (note.Text.toLowerCase() == \"others\") {\r\n freeTextIdValue = note.Id;\r\n this.freeTextIdList.push(freeTextIdValue);\r\n } else {\r\n let predefinedPartyNoteMappingList = note.PredefinedPartyNotePropertyMapping.filter(x => x.PropertyId == this.ls.restaurantWidgetSettings$.value.RestaurantId).map(x => x.PredefinedPartyNoteId);\r\n if (predefinedPartyNoteMappingList.find(x => x == note.Id)) { predefinedNotes.push(note) }\r\n }\r\n });\r\n }\r\n this.freeTextIdList = _.uniq(this.freeTextIdList);\r\n })\r\n };\r\n if (predefinedNotes && predefinedNotes.length > 0) {\r\n // Swire Change\r\n if (this.isForSwire) {\r\n const tag = {\r\n type: 'chip',\r\n name: 'preferences_' + category.Id.toString(),\r\n inputType: 'text',\r\n label: category.Text,\r\n options: this.getOptions(predefinedNotes),\r\n multipleChip: true,\r\n isFormArray: true\r\n }\r\n this.guestConfig.push(tag);\r\n }\r\n // Swire Change\r\n else {\r\n let options = predefinedNotes.map(x => { return { id: x.Id, value: x.Text } });\r\n this.guestConfig.push({\r\n type: 'checkbox',\r\n placeholder: 'ds',\r\n value: false,\r\n name: 'preferences_' + category.Id.toString(),\r\n groupLabel: category.Text,\r\n options: options,\r\n isFormArray: true,\r\n class: 'guest-details__special-requests'\r\n })\r\n }\r\n\r\n if (freeTextIdValue) {\r\n let freeTextValue = ''\r\n if (!this.rs.additionalGuestPage && this.rs.primaryContact && this.rs.primaryContact.Notes && this.rs.primaryContact.Notes.length > 0) {\r\n if (this.rs.primaryContact.Notes.filter(x => x.RelatedId == freeTextIdValue)[0]) {\r\n freeTextValue = this.rs.primaryContact.Notes.filter(x => x.RelatedId == freeTextIdValue)[0].Text;\r\n }\r\n }\r\n this.guestConfig.push({\r\n type: 'textarea',\r\n name: freeTextIdValue.toString(),\r\n class: 'guest-details__special-notes',\r\n label: 'Others',\r\n appearance: true,\r\n isFormArray: false,\r\n value: ''\r\n })\r\n }\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n // Swire Change\r\n getOptions(predefinedNotes): any {\r\n let configOptios = [];\r\n predefinedNotes.forEach((notes) => {\r\n configOptios.push({\r\n Id: notes.Id,\r\n Name: notes.Text,\r\n Icon: 'None',\r\n Value: '',\r\n color: this.ls.restaurantWidgetSettings$.value.WidgetCustomization.PrimaryButtonBGColor\r\n });\r\n })\r\n return configOptios;\r\n }\r\n\r\n CheckForSwire() {\r\n this.isForSwire = false;\r\n let swireMerchantIds: number[] = this.SwireConfig;\r\n \r\n swireMerchantIds?.forEach(id => {\r\n if (this.ls.restaurantWidgetSettings$.value.PreferencesCategories.find(cat => cat.MerchantId == id)) {\r\n this.isForSwire = true;\r\n }\r\n });\r\n }\r\n \r\n formChipsChange() {\r\n this.subscriptions.add(this.formChipService.formChipChange$.subscribe((selectedChips) => {\r\n if (this.guestInfoConfig.filter((fieldConfig) => fieldConfig.name == selectedChips.name).length > 0) {\r\n\r\n let choosenTag = selectedChips.data;\r\n \r\n choosenTag.forEach((_partyNotes) => {\r\n if (!(this.selectedPartyNotes[selectedChips.name])) {\r\n this.selectedPartyNotes[selectedChips.name] = []\r\n }\r\n\r\n if (_partyNotes.setSelected && !this.selectedPartyNotes[selectedChips.name].some((sNotes) => sNotes.Id == _partyNotes.Id)) {\r\n this.selectedPartyNotes[selectedChips.name].push(_partyNotes);\r\n }\r\n else if (!_partyNotes.setSelected && this.selectedPartyNotes[selectedChips.name].some((sNotes) => sNotes.Id == _partyNotes.Id)) {\r\n var index = this.selectedPartyNotes[selectedChips.name].findIndex((sNotes) => sNotes.Id == _partyNotes.Id);\r\n if(index !== -1)\r\n this.selectedPartyNotes[selectedChips.name].splice(index, 1);\r\n }\r\n })\r\n\r\n if (this.selectedPartyNotes[selectedChips.name].length == 0) {\r\n this.selectedPartyPreferenceTags[selectedChips.name] = this.selectedPartyNotes[selectedChips.name].reduce((acc, cur) => ({ ...acc, [cur.Id]: false }), {});\r\n }\r\n\r\n this.selectedPartyPreferenceTags[selectedChips.name] = this.selectedPartyNotes[selectedChips.name].reduce((acc, cur) => ({ ...acc, [cur.Id]: true }), {});\r\n }\r\n }));\r\n }\r\n\r\n mapPartyNotes() {\r\n const preferredTags = this.guestConfig.filter((fieldConfig) => fieldConfig.name.includes('preferences_'));\r\n if (!!(this.rs.reservationFormGroup.controls.guestDetailsForm)) {\r\n let primaryGuest = this.rs.reservationFormGroup.controls.guestDetailsForm.get('primaryGuest').value;\r\n\r\n preferredTags.forEach((fieldConfig) => {\r\n let data = primaryGuest[fieldConfig.name][0];\r\n let arrVal = Object.entries(data).map(([key, value]) => ({ key, value }));\r\n\r\n if (!!(data)) {\r\n arrVal.forEach((note) => {\r\n if (note.value) {\r\n const filteredNotes = fieldConfig.options.find(data => note.key == data.Id.toString());\r\n if (filteredNotes) {\r\n filteredNotes.setSelected = true;\r\n if (!(this.selectedPartyNotes[fieldConfig.name])) {\r\n this.selectedPartyNotes[fieldConfig.name] = []\r\n }\r\n this.selectedPartyNotes[fieldConfig.name].push(filteredNotes);\r\n }\r\n }\r\n })\r\n\r\n if (this.selectedPartyNotes[fieldConfig.name] != null && this.selectedPartyNotes[fieldConfig.name] != undefined) {\r\n this.selectedPartyPreferenceTags[fieldConfig.name] = this.selectedPartyNotes[fieldConfig.name].reduce((acc, cur) => ({ ...acc, [cur.Id]: true }), {});\r\n }\r\n }\r\n });\r\n this.guestConfig = [...this.guestConfig];\r\n }\r\n }\r\n // Swire Change\r\n\r\n getCategoryPreferencesNotes(formValue, noteType: NoteType, secondaryContactId = null, isForSecondaryContact = false) {\r\n let notes = [];\r\n if(!formValue) return notes;\r\n if (this.ls.restaurantWidgetSettings$.value.PreferencesCategories && this.ls.restaurantWidgetSettings$.value.PreferencesCategories.length > 0) {\r\n this.ls.restaurantWidgetSettings$.value.PreferencesCategories.forEach(category => {\r\n\r\n // Swire Change\r\n if (this.isForSwire) {\r\n let userSelectedPartyPreference = [this.selectedPartyPreferenceTags['preferences_' + category.Id]];\r\n\r\n if (!!(userSelectedPartyPreference[0])) {\r\n formValue['preferences_' + category.Id] = userSelectedPartyPreference;\r\n }\r\n }\r\n // Swire Change\r\n\r\n let predefinedNotes = []\r\n if (formValue['preferences_' + category.Id.toString()]) {\r\n let userSelectedPredefinedNotesList = formValue['preferences_' + category.Id.toString()][0];\r\n if (category.SubCategories && category.SubCategories.length > 0) {\r\n category.SubCategories.forEach(x => {\r\n if (noteType == NoteType.guestNote && x.PredefinedContactNote && x.PredefinedContactNote.length > 0) {\r\n x.PredefinedContactNote.forEach(note => { predefinedNotes.push(note) });\r\n }\r\n else if (noteType == NoteType.partyNote && x.PredefinedPartyNote && x.PredefinedPartyNote.length > 0) {\r\n x.PredefinedPartyNote.forEach(note => { predefinedNotes.push(note) });\r\n }\r\n })\r\n };\r\n if (predefinedNotes && predefinedNotes.length > 0) {\r\n let existingNoteId;\r\n predefinedNotes.forEach(note => {\r\n if (noteType == NoteType.guestNote && this.ls.operation == operationType.edit ) {\r\n existingNoteId = isForSecondaryContact ? secondaryContactId ? this.ls.editPartyData$.value.BookingContacts?.find(sc=>sc.Id == secondaryContactId)?.Notes?.filter(x=>x.RelatedId == note.Id)[0] : null\r\n : this.ls.editPartyData$.value.Contact.Notes?.filter(x => x.RelatedId == note.Id)[0];\r\n }\r\n else if (noteType == NoteType.partyNote && this.ls.operation == operationType.edit ) {\r\n existingNoteId = isForSecondaryContact ? null : this.ls.editPartyData$.value.Notes.filter(x => x.RelatedId == note.Id)[0];\r\n }\r\n if (userSelectedPredefinedNotesList[note.Id.toString()] && noteType == NoteType.guestNote) {\r\n notes.push({\r\n RelatedId: note.Id,\r\n Text: note.Text,\r\n Id: existingNoteId && existingNoteId.Id ? existingNoteId.Id : null,\r\n Icon: note.Icon\r\n });\r\n }\r\n else if (userSelectedPredefinedNotesList[note.Id.toString()] && noteType == NoteType.partyNote) {\r\n notes.push({\r\n RelatedId: note.Id,\r\n Text: note.Text,\r\n Id: existingNoteId && existingNoteId.Id ? existingNoteId.Id : null,\r\n Type: PartyNoteTypes.PredefinedNote,\r\n Icon: note.Icon\r\n });\r\n }\r\n })\r\n }\r\n }\r\n })\r\n\r\n if (this.freeTextIdList && this.freeTextIdList.length > 0) {\r\n this.freeTextIdList.forEach(freeTextId => {\r\n let existingNoteId: any = this.ls.operation == operationType.edit && this.ls.editPartyData$.value.Contact.Notes && this.ls.editPartyData$.value.Contact.Notes.length > 0 ? this.ls.editPartyData$.value.Contact.Notes.filter(x => x.RelatedId == freeTextId)[0] : '';\r\n if (noteType == NoteType.guestNote && operationType.edit && this.ls.editPartyData$.value.Contact.Notes && this.ls.editPartyData$.value.Contact.Notes.length > 0) {\r\n existingNoteId = this.ls.editPartyData$.value.Contact.Notes.filter(x => x.RelatedId == freeTextId)[0];\r\n }\r\n else if (noteType == NoteType.partyNote && operationType.edit && this.ls.editPartyData$.value.Notes && this.ls.editPartyData$.value.Notes.length > 0) {\r\n existingNoteId = this.ls.editPartyData$.value.Notes.filter(x => x.RelatedId == freeTextId)[0];\r\n }\r\n else {\r\n existingNoteId = '';\r\n }\r\n\r\n if (formValue[freeTextId.toString()] && noteType == NoteType.guestNote) {\r\n notes.push({\r\n RelatedId: freeTextId,\r\n Text: formValue[freeTextId.toString()],\r\n Id: existingNoteId && existingNoteId.Id ? existingNoteId.Id : null\r\n });\r\n }\r\n else if (formValue[freeTextId.toString()] && noteType == NoteType.partyNote) {\r\n notes.push({\r\n RelatedId: freeTextId,\r\n Text: formValue[freeTextId.toString()],\r\n Id: existingNoteId && existingNoteId.Id ? existingNoteId.Id : null,\r\n Type: PartyNoteType.FreeFormNote\r\n });\r\n }\r\n });\r\n }\r\n }\r\n return notes;\r\n }\r\n\r\n regionChange(eve) {\r\n this.countryCodeSelected(eve);\r\n }\r\n\r\n mobileNumberValidation(event?) {\r\n this.components.toArray().forEach(formData => {\r\n const phoneValue = formData.form.get('phone').value;\r\n let phoneNumber: any;\r\n if (formData.form.get('phone').value && formData.form.get('phone').value.length > 0) {\r\n phoneNumber = this.dfs.onInputChange(phoneValue ? phoneValue : event.value, false);\r\n formData.form.get('phone').setValue(phoneNumber);\r\n }\r\n });\r\n\r\n if (this.dfs.requiredPhoneNumberLength$) {\r\n const count = this.dfs.requiredPhoneNumberLength$;\r\n this.components.first.form.get('phone').setValidators([Validators.required, Validators.minLength(count), Validators.maxLength(count)]);\r\n this.guestDetailsForm.get('primaryGuest')['controls']['phone'].setValidators([Validators.required, Validators.minLength(count), Validators.maxLength(count)]);\r\n this.components.first.form.get('phone').updateValueAndValidity();\r\n this.guestDetailsForm.get('primaryGuest')['controls']['phone'].updateValueAndValidity();\r\n this.components.toArray().forEach((formData, index) => {\r\n if (index > 0) {\r\n formData.form['controls']['phone'].setValidators([Validators.minLength(count), Validators.maxLength(count)]);\r\n if (formData.form.value.phone && formData.form.value.phone.length > 0) {\r\n let phoneValue = this.dfs.onInputChange(formData.form.value.phone, false);\r\n formData.form.controls.phone.setValue(phoneValue);\r\n }\r\n formData.form['controls']['phone'].updateValueAndValidity();\r\n }\r\n });\r\n } else {\r\n this.components.first.form.get('phone').setValidators([Validators.required]);\r\n this.guestDetailsForm.get('primaryGuest')['controls']['phone'].setValidators([Validators.required]);\r\n this.components.first.form.get('phone').updateValueAndValidity();\r\n this.guestDetailsForm.get('primaryGuest')['controls']['phone'].updateValueAndValidity();\r\n this.components.toArray().forEach((formData, index) => {\r\n if (index > 0) {\r\n formData.form['controls']['phone'].setValidators([Validators.required]);\r\n if (formData.form.value.phone && formData.form.value.phone.length > 0) {\r\n let phoneValue = this.dfs.onInputChange(formData.form.value.phone, false);\r\n formData.form.controls.phone.setValue(phoneValue);\r\n }\r\n formData.form['controls']['phone'].updateValueAndValidity();\r\n }\r\n });\r\n }\r\n }\r\n\r\n countryCodeSelected(eve) {\r\n let countryValue = eve.value ? eve.value : eve.target.value;\r\n const selectedCountryCode = this.countryCodes.filter((country) => {\r\n return country.Id == countryValue;\r\n })[0];\r\n this.rs.selectedCountryId = selectedCountryCode.Id;\r\n this.dfs.selectedCountryCode = selectedCountryCode.CountryPhoneCode;\r\n this.dfs.selectedCountryId = selectedCountryCode.Id;\r\n this.guestInfoConfig[4].value = this.rs.selectedCountryId;\r\n this.guestInfoConfig = [...this.guestInfoConfig];\r\n this.components.toArray().forEach(formData => {\r\n const phoneValue = formData.form.get('phone').value;\r\n let phoneNumber: any;\r\n if (formData.form.get('phone').value && formData.form.get('phone').value.length > 0) {\r\n phoneNumber = this.dfs.onInputChange(phoneValue ? phoneValue : countryValue, false);\r\n formData.form.get('phone').setValue(phoneNumber);\r\n }\r\n });\r\n\r\n if (operationType.edit == this.ls.operation && this.guestInfoConfigSecondary) {\r\n this.guestInfoConfigSecondary.forEach((config) => {\r\n if (config.name == 'region' || config.name == 'phone') {\r\n config.value = this.rs.selectedCountryId ? this.rs.selectedCountryId : selectedCountryCode.Id;\r\n }\r\n });\r\n }\r\n if (this.dfs.requiredPhoneNumberLength$) {\r\n const count = this.dfs.requiredPhoneNumberLength$;\r\n this.components.first.form.get('phone').setValidators([Validators.minLength(count), Validators.maxLength(count)]);\r\n this.guestDetailsForm.get('primaryGuest')['controls']['phone'].setValidators([Validators.minLength(count), Validators.maxLength(count)]);\r\n this.components.first.form.get('phone').updateValueAndValidity();\r\n this.guestDetailsForm.get('primaryGuest')['controls']['phone'].updateValueAndValidity();\r\n this.components.toArray().forEach((formData, index) => {\r\n if (index > 0) {\r\n formData.form['controls']['phone'].setValidators([Validators.minLength(count), Validators.maxLength(count)]);\r\n if (formData.form.value.phone && formData.form.value.phone.length > 0) {\r\n let phoneValue = this.dfs.onInputChange(formData.form.value.phone, false);\r\n formData.form.controls.phone.setValue(phoneValue);\r\n }\r\n formData.form['controls']['phone'].updateValueAndValidity();\r\n }\r\n });\r\n }\r\n else {\r\n this.components.first.form.get('phone').clearValidators();\r\n this.guestDetailsForm.get('primaryGuest')['controls']['phone'].clearValidators();\r\n this.components.first.form.get('phone').updateValueAndValidity();\r\n this.guestDetailsForm.get('primaryGuest')['controls']['phone'].updateValueAndValidity();\r\n }\r\n }\r\n\r\n addCustomGuestFields() {\r\n let promoCodeValue = '';\r\n if (this.ls.operation == operationType.edit && this.ls.editPartyData$.value.Notes && this.ls.editPartyData$.value.Notes.length > 0) {\r\n this.ls.editPartyData$.value.Notes.forEach(note => {\r\n if (note.Type == PartyNoteType.PromoCode && note.Text) {\r\n promoCodeValue = note.Text;\r\n }\r\n });\r\n }\r\n\r\n if (this.ls.restaurantWidgetSettings$.value.WidgetCustomization.DisplayPromoCode) {\r\n this.guestInfoConfig.push(\r\n {\r\n type: 'input',\r\n label: this.ls.restaurantWidgetSettings$.value.WidgetCustomization.PromoCodeLabel ? this.ls.restaurantWidgetSettings$.value.WidgetCustomization.PromoCodeLabel : 'promoCode',\r\n value: promoCodeValue ? promoCodeValue : '',\r\n name: 'promocode',\r\n placeholder: this.ls.restaurantWidgetSettings$.value.WidgetCustomization.PromoCodeLabel ? this.ls.restaurantWidgetSettings$.value.WidgetCustomization.PromoCodeLabel : 'promoCode',\r\n class: 'guest-details__promo-code',\r\n appearance: true,\r\n isFormArray: false,\r\n });\r\n }\r\n\r\n\r\n if (this.ls.customGuestFields && this.ls.customGuestFields.CustomGuestField && this.ls.customGuestFields.CustomGuestField.length > 0) {\r\n this.ls.customGuestFields.CustomGuestField = _.sortBy(this.ls.customGuestFields.CustomGuestField, 'FieldType').reverse();\r\n this.ls.customGuestFields.CustomGuestField.forEach(field => {\r\n let fieldValue = ''\r\n if (this.rs.primaryContact && this.rs.primaryContact.ContactCustomFields && this.rs.primaryContact.ContactCustomFields.length > 0) {\r\n fieldValue = this.rs.primaryContact.ContactCustomFields.filter(x => x.CustomFieldId == field.Id)[0] ? this.rs.primaryContact.ContactCustomFields.filter(x => x.CustomFieldId == field.Id)[0].CustomFieldValue : '';\r\n }\r\n if (this.showCustomFieldBasedOnActivity(field.Id)) {\r\n let validation = this.customValidationRequired(field);\r\n if (field.FieldType == 'Text Field') {\r\n this.guestInfoConfig.push({\r\n type: 'input',\r\n placeholder: field.FieldName,\r\n value: fieldValue ? fieldValue : '',\r\n name: 'customGuestField_' + field.Id.toString(),\r\n class: 'guest-details__promo-code',\r\n isFormArray: false,\r\n appearance: true,\r\n label: (validation && validation.length > 0) ? field.FieldName + '*' : field.FieldName,\r\n validation: validation\r\n });\r\n }\r\n if (field.FieldType == 'Drop Down') {\r\n let Options = [];\r\n Options = field.FieldOptions.split(',').map(x => { return { id: x, value: x } });\r\n Options.splice(0, 0, { id: '', value: field.FieldName })\r\n this.guestInfoConfig.push({\r\n type: 'select',\r\n placeholder: field.FieldName,\r\n options: Options,\r\n value: fieldValue ? fieldValue : Options[0].id,\r\n name: 'customGuestField_' + field.Id.toString(),\r\n class: 'guest-details__promo-code',\r\n isFormArray: false,\r\n appearance: true,\r\n label: (validation && validation.length > 0) ? field.FieldName + '*' : field.FieldName,\r\n isNativeControl: this.ls.isMobileBrowser,\r\n validation: validation\r\n });\r\n }\r\n }\r\n });\r\n }\r\n }\r\n showCustomFieldBasedOnActivity(customFieldId) {\r\n \r\n let specialMealId = (this.rs.reservationFormGroup.controls.reservationDetailsForm && this.rs.reservationFormGroup.controls.reservationDetailsForm.value.specialMeal) ? this.rs.reservationFormGroup.controls.reservationDetailsForm.value.specialMeal.Id : -1;\r\n let activitiesCustomGuestFields = this.customGuestFieldsMappingValidations;\r\n if (activitiesCustomGuestFields.find(activity => activity.ActivityId == specialMealId)) {\r\n let activeActivity = activitiesCustomGuestFields.find(activity => activity.ActivityId == specialMealId)\r\n if (activeActivity.CustomFields.filter(field => field.FieldId === customFieldId && field.AvailableForWebReservation == true)?.length > 0) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n } else {\r\n return false\r\n }\r\n }\r\n customValidationRequired(field) {\r\n if (this.customFieldMandatory(field)) {\r\n return [Validators.required];\r\n } else {\r\n return [];\r\n }\r\n }\r\n customFieldMandatory(field) {\r\n let specialMealId = (this.rs.reservationFormGroup.controls.reservationDetailsForm && this.rs.reservationFormGroup.controls.reservationDetailsForm.value.specialMeal) ? this.rs.reservationFormGroup.controls.reservationDetailsForm.value.specialMeal.Id : -1;\r\n let activitiesCustomGuestFields = this.customGuestFieldsMappingValidations;\r\n let CustomFields = activitiesCustomGuestFields.find(activity => activity.ActivityId == specialMealId)?.CustomFields\r\n if (CustomFields.filter(customField => customField.FieldId === field.Id)?.length > 0) {\r\n let validations = CustomFields.find(customField => customField.FieldId === field.Id)?.Validations\r\n return (validations && validations.length > 0)\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n isSwireAndSEAEnv() {\r\n return (environment.SEAProduction == true && (environment.restaurantIds.filter(x => x == this.ls.restaurantWidgetSettings$.value.RestaurantId).length > 0))\r\n }\r\n\r\n showSMSRemainder() {\r\n return (environment.restaurantIdshowSMSRemainder?.filter(restaurantId => restaurantId == this.ls.restaurantWidgetSettings$.value.RestaurantId)?.length > 0);\r\n }\r\n\r\n addRequiredCustomTermsAndConditions() {\r\n if (this.ls.operation != operationType.edit && !this.ls.restaurantWidgetSettings$.value.DisableCustomTermsAndConditions) {\r\n this.guestInfoConfig.push({\r\n type: 'checkbox',\r\n placeholder: this.getAgreeTermsAndConditionsText(),\r\n name: 'agreeTerms',\r\n class: this.isSwireAndSEAEnv() ? 'guest-details__terms-and-conditions guest-details__display-none' : 'guest-details__terms-and-conditions',\r\n isFormArray: false,\r\n validation: [Validators.requiredTrue],\r\n innerHTMLdata: true,\r\n value: this.isSwireAndSEAEnv() ? true : false\r\n })\r\n }\r\n\r\n if (this.ls.restaurantWidgetSettings$.value.IsSmsReminderSupported) {\r\n if (this.ls.restaurantWidgetSettings$.value.WidgetCustomization.IsReservationReminderMandatory) {\r\n this.guestInfoConfig.push({\r\n type: 'checkbox',\r\n placeholder: 'SmsMessageReminderText',\r\n value: true,\r\n name: 'reservationBySMS',\r\n class: this.isSwireAndSEAEnv() || this.showSMSRemainder() ? 'guest-details__reservation-by-sms guest-details__display-none' : 'guest-details__reservation-by-sms',\r\n isFormArray: false,\r\n disabled: true\r\n });\r\n }\r\n else {\r\n this.guestInfoConfig.push({\r\n type: 'checkbox',\r\n placeholder: 'SmsMessageReminderText',\r\n value: false,\r\n name: 'reservationBySMS',\r\n class: this.isSwireAndSEAEnv() || this.showSMSRemainder() ? 'guest-details__reservation-by-sms guest-details__display-none' : 'guest-details__reservation-by-sms',\r\n isFormArray: false\r\n });\r\n }\r\n }\r\n this.guestInfoConfig.push({\r\n type: 'checkbox',\r\n placeholder: 'emailReminderText',\r\n value: false,\r\n name: 'reservationByEmail',\r\n class: this.isSwireAndSEAEnv() ? 'guest-details__email-remainder guest-details__display-none' : 'guest-details__email-remainder',\r\n isFormArray: false\r\n });\r\n\r\n if (this.ls.operation != operationType.edit && !this.ls.restaurantWidgetSettings$.value.DisableCustomTermsAndConditions) {\r\n if (this.ls.restaurantWidgetSettings$.value.WidgetCustomization.CustomTermsOfService && this.ls.restaurantWidgetSettings$.value.WidgetCustomization.CustomTermsOfService.length > 0) {\r\n this.ls.restaurantWidgetSettings$.value.WidgetCustomization.CustomTermsOfService.forEach((customTerm, index) => {\r\n this.guestInfoConfig.push({\r\n type: 'checkbox',\r\n placeholder: customTerm,\r\n value: false,\r\n name: 'customTerm_' + index,\r\n class: 'guest-details__custom-term',\r\n isFormArray: false,\r\n validation: [Validators.requiredTrue],\r\n innerHTMLdata: true\r\n });\r\n });\r\n }\r\n }\r\n\r\n if (this.ls.restaurantWidgetSettings$.value.ConfirmationVia == ConfirmationVia.Both) {\r\n this.guestInfoConfig.push({\r\n type: 'checkbox',\r\n placeholder: this.ts.instant('smsConfirmationText'),\r\n value: false,\r\n name: 'reservationConfirmationBySMS',\r\n class: 'guest-details__confirmation-by-sms',\r\n isFormArray: false\r\n });\r\n this.guestInfoConfig.push({\r\n type: 'checkbox',\r\n placeholder: this.ts.instant('emailConfirmationText'),\r\n value: false,\r\n name: 'reservationConfirmationByEmail',\r\n class: 'guest-details__confirmation-by-email',\r\n isFormArray: false\r\n });\r\n }\r\n\r\n //Marketing\r\n if (this.ls.restaurantWidgetSettings$.value.MarketingFlagEnabled && this.ls.restaurantWidgetSettings$.value.MarketingFlagDescription) {\r\n this.guestInfoConfig.push({\r\n type: 'checkbox',\r\n placeholder: this.ls.restaurantWidgetSettings$.value.MarketingFlagDescription,\r\n value: this.ls.operation == operationType.edit && this.ls.editPartyData$.value.Contact.MarketingOptedIn ? this.ls.editPartyData$.value.Contact.MarketingOptedIn : false,\r\n name: 'marketingFlag',\r\n class: 'guest-details__marketing-flag',\r\n isFormArray: false,\r\n innerHTMLdata: true\r\n });\r\n }\r\n\r\n //Data Retention Policy\r\n this.dataRetentionPolicyExisting = false;\r\n if (this.ls.operation != operationType.edit && this.ls.restaurantWidgetSettings$.value.IsGDPREnabled && this.ls.dataRetentionPolicy$.value && this.ls.dataRetentionPolicy$.value.PolicyDetails) {\r\n for (var i = 0; i < this.ls.dataRetentionPolicy$.value.PolicyDetails.length; i++) {\r\n var policyDetails = this.ls.dataRetentionPolicy$.value.PolicyDetails[i];\r\n switch (policyDetails.DataType) {\r\n case PolicyDataType.Name:\r\n case PolicyDataType.Address:\r\n case PolicyDataType.PhoneNumber:\r\n case PolicyDataType.EmailAddress:\r\n case PolicyDataType.GuestImage:\r\n case PolicyDataType.CustomGuestFields:\r\n case PolicyDataType.BirthdayAndAnniversary:\r\n if (policyDetails.RetentionInDays > 0) {\r\n this.dataRetentionPolicyExisting = true;\r\n }\r\n break;\r\n default:\r\n this.dataRetentionPolicyExisting = false;\r\n break;\r\n\r\n }\r\n }\r\n }\r\n if (this.dataRetentionPolicyExisting) {\r\n this.guestInfoConfig.push({\r\n type: 'checkbox',\r\n placeholder: this.ts.instant('dataRetentionCheckBoxText') + '' + this.ts.instant('dataRetentionPolicy') + '.',\r\n value: false,\r\n name: 'dataRetention',\r\n class: 'guest-details__data-retention-policy',\r\n isFormArray: false,\r\n innerHTMLdata: true\r\n });\r\n }\r\n\r\n }\r\n\r\n showDataRententionPolicy() {\r\n let dataRetentionPolicyData = {\r\n customPolicyText: this.ls.restaurantWidgetSettings$.value.CustomPolicyText ? this.ls.restaurantWidgetSettings$.value.CustomPolicyText : this.ts.instant('serverBetter'),\r\n policyDetails: this.ls.dataRetentionPolicy$.value.PolicyDetails,\r\n fromClient: false // Need to bind based on Url launched\r\n }\r\n const componentDetails: ComponentDetails = Utilities.setComponentDetails(DataRetentionPolicyComponent, 'small', '', dataRetentionPolicyData,\r\n this.ts.instant('guestConsentPolicy'));\r\n this.dataRetentionPolicyDialogRef = this.openCustomPopup(componentDetails, ComponentTypes.dataRetentionPolicy, dataRetentionPolicyData.fromClient ? '50%' : '40%', dataRetentionPolicyData.fromClient ? '80%' : '60%', false, this.ts.instant('No'), this.ts.instant('Yes'),\r\n '', false)\r\n }\r\n\r\n getAgreeTermsAndConditionsText(): string {\r\n let text = \"\";\r\n text = this.ts.instant('By clicking next, you agree to the terms of use and privacyPolicy', { terms: `${this.ts.instant('termsOfUse')}`, privacyPolicy: `${this.ts.instant('privacyPolicy')}`})\r\n // text = this.ts.instant('agree') + '' + this.ts.instant('termsOfUse') + '' + this.ts.instant('and')\r\n // + '' + this.ts.instant('privacyPolicy') + '';\r\n return text;\r\n }\r\n\r\n ngAfterViewInit() {\r\n const allNotes = {};\r\n for (const addInfo of this.guestInfoConfig) {\r\n allNotes[addInfo.name] = '';\r\n }\r\n this.notesFormGroup = this.fb.group(allNotes);\r\n if (this.rs.additionalGuestPage && this.ls.operation != operationType.edit) {\r\n this.guestDetailsForm = this.fb.group({\r\n secondaryGuest1: this.components.first.form\r\n })\r\n }\r\n else {\r\n this.rs.primaryContact ? this.bindContactPhoneNumber() : this.components.first.form.controls.phone.setValue(''); //to remove the cuntryId binded as value in the input field\r\n this.guestDetailsForm = this.fb.group({\r\n primaryGuest: this.components.first.form,\r\n })\r\n }\r\n if (this.rs.reservationFormGroup.controls.guestDetailsForm) {\r\n let copyData:boolean = this.ls.restaurantWidgetSettings$?.value?.CopyPrimaryContactDetailsToSecondaryWidget;\r\n this.components.first.form.controls.phone.setValue('');\r\n if (this.rs.additionalGuestPage && this.ls.operation != operationType.edit) {\r\n if(copyData) {\r\n this.components.first.form.controls.phone.patchValue(this.rs.reservationFormGroup.controls.guestDetailsForm.get('primaryGuest').value.phone);\r\n this.components.first.form.controls.email.patchValue(this.rs.reservationFormGroup.controls.guestDetailsForm.get('primaryGuest').value.email);\r\n this.primaryGuestPhone = this.rs.reservationFormGroup.controls.guestDetailsForm.get('primaryGuest').value.phone;\r\n this.primaryGuestEmail = this.rs.reservationFormGroup.controls.guestDetailsForm.get('primaryGuest').value.email;\r\n }\r\n }\r\n else if (!this.rs.additionalGuestPage && this.ls.operation == operationType.edit) {\r\n this.primaryGuestPhone = this.rs.reservationFormGroup.controls.guestDetailsForm.get('primaryGuest').value.phone;\r\n this.primaryGuestEmail = this.rs.reservationFormGroup.controls.guestDetailsForm.get('primaryGuest').value.email;\r\n this.components.first.form.patchValue(this.rs.reservationFormGroup.controls.guestDetailsForm.get('primaryGuest').value);\r\n if (this.rs.secondaryContactList && this.rs.secondaryContactList.length > 0) {\r\n this.components.toArray().forEach((formData, index) => {\r\n if (index > 0) {\r\n this.bindContactsToForm(formData.form, this.rs.secondaryContactList[index - 1]);\r\n let fc = new FormControl(this.rs.secondaryContactList[index - 1].Id);\r\n formData.form.addControl(\"id\", fc);\r\n }\r\n });\r\n let secondaryContactList = this.buildSecondaryContactList();\r\n (this.rs.reservationFormGroup.get('guestDetailsForm') as FormGroup).addControl('secondaryContactList', this.fb.array(secondaryContactList.map(contact => this.fb.group(contact))));\r\n }\r\n }\r\n else if (!this.rs.additionalGuestPage && this.ls.operation != operationType.edit) {\r\n this.components.first.form.patchValue(this.rs.reservationFormGroup.controls.guestDetailsForm.get('primaryGuest').value)\r\n this.components.first.form.controls[\"agreeTerms\"].setValue(this.isSwireAndSEAEnv() ? true : false, { emitEvent: false });\r\n if (this.components.first.form.controls[\"dataRetention\"]) {\r\n this.components.first.form.controls[\"dataRetention\"].setValue(false, { emitEvent: false });\r\n }\r\n if (this.ls.restaurantWidgetSettings$.value.WidgetCustomization.CustomTermsOfService && this.ls.restaurantWidgetSettings$.value.WidgetCustomization.CustomTermsOfService.length > 0) {\r\n this.ls.restaurantWidgetSettings$.value.WidgetCustomization.CustomTermsOfService.forEach((customTerm, index) => {\r\n this.components.first.form.controls['customTerm_' + index].setValue(false, { emitEvent: false });\r\n });\r\n }\r\n }\r\n }\r\n else {\r\n if (this.ls.operation == operationType.edit && !this.rs.additionalGuestPage) {\r\n this.components.toArray().forEach((formData, index) => {\r\n if (index == 0) {\r\n this.bindContactsToForm(formData.form, this.rs.primaryContact);\r\n this.bindPreferencesCategoryToForm(formData.form, this.ls.editPartyData$.value.Notes);\r\n }\r\n else {\r\n this.bindContactsToForm(formData.form, this.rs.secondaryContactList[index - 1]);\r\n let fc = new FormControl(this.rs.secondaryContactList[index - 1].Id);\r\n formData.form.addControl(\"id\", fc);\r\n }\r\n });\r\n\r\n this.primaryGuestPhone = this.components.first.form.value.phone;\r\n this.primaryGuestEmail = this.components.first.form.value.email;\r\n }\r\n //this.bindSecondaryContactsToForm();\r\n this.rs.reservationFormGroup.addControl('guestDetailsForm', this.guestDetailsForm);\r\n let secondaryContactList = this.buildSecondaryContactList();\r\n (this.rs.reservationFormGroup.get('guestDetailsForm') as FormGroup).addControl('secondaryContactList', this.fb.array(secondaryContactList.map(contact => this.fb.group(contact))));\r\n }\r\n\r\n this.subscriptions.add(this.guestDetailsForm.valueChanges.subscribe(data => {\r\n this.confirmButton.disbaledproperity = this.guestDetailsForm.invalid || this.isAnyFormInvalid() || !this.isUserAllowedToclickConfirm || !this.checkCustomTermsAndMessageOptionValidation();\r\n }));\r\n this.components.forEach(dynamicForm => {\r\n this.subscriptions.add(\r\n dynamicForm.form.valueChanges.subscribe(data => {\r\n dynamicForm.form.controls.firstName.setValue(dynamicForm.form.controls.firstName.value ? this.titleCasePipe.transform(dynamicForm.form.controls.firstName.value) : dynamicForm.form.controls.firstName.value, { emitEvent: false });\r\n dynamicForm.form.controls.lastName.setValue(dynamicForm.form.controls.lastName.value ? this.titleCasePipe.transform(dynamicForm.form.controls.lastName.value) : dynamicForm.form.controls.lastName.value, { emitEvent: false });\r\n dynamicForm.form.controls.aliasName.setValue(dynamicForm.form.controls.aliasName.value ? this.titleCasePipe.transform(dynamicForm.form.controls.aliasName.value) : dynamicForm.form.controls.aliasName.value, { emitEvent: false });\r\n this.confirmButton.disbaledproperity = dynamicForm.form.invalid || this.isAnyFormInvalid() || !this.isUserAllowedToclickConfirm || !this.checkCustomTermsAndMessageOptionValidation();\r\n })\r\n )\r\n })\r\n this.subscriptions.add(\r\n this.gs.languageFileChanges.subscribe(data => {\r\n if(data){\r\n let termsIndex = this.guestInfoConfig.findIndex(config => config.name == 'agreeTerms')\r\n if(termsIndex){\r\n this.guestInfoConfig[termsIndex].placeholder = this.getAgreeTermsAndConditionsText();\r\n setTimeout(() =>{\r\n this.guestInfoConfig[termsIndex].placeholder = this.getAgreeTermsAndConditionsText();\r\n this.guestInfoConfig = [...this.guestInfoConfig];\r\n },500)\r\n }\r\n }\r\n })\r\n )\r\n // if (this.ls.operation == operationType.edit && this.ls.editPartyData$.value) {\r\n // this.getFinancialEffectCalculation();\r\n // }\r\n }\r\n\r\n bindContactPhoneNumber() {\r\n if (this.ls.editPartyData$.value?.GuestReservationPhoneNumber) {\r\n this.components.first.form.controls.phone.setValue(this.rs.primaryContact.PhoneNumber2)\r\n } else {\r\n this.components.first.form.controls.phone.setValue(this.rs.primaryContact.PhoneNumber)\r\n }\r\n }\r\n\r\n termsOfUse() {\r\n this.ls.nextButton.next(componentName.terms_of_use)\r\n }\r\n\r\n goBackToReservation() {\r\n this.resetPaymentInfo();\r\n if (this.ls.lockResult && this.ls.lockResult.SlotLockIdDTO) {\r\n this.rs.ReleaseLockSlot(this.ls.restaurantWidgetSettings$.value.RestaurantId, this.ls.lockResult.SlotLockIdDTO.Id).subscribe(data => {\r\n this.ls.offTimer();\r\n this.ls.nextButton.next(componentName.reservationDetails);\r\n });\r\n } else if (this.ls.operation === operationType.edit && this.ls.editPartyData$.value) {\r\n this.ls.nextButton.next(componentName.reservationDetails);\r\n }\r\n }\r\n\r\n reservationConfirm() {\r\n this.gs.setMessageState('', 0);\r\n if (this.rs.additionalGuestPage) {\r\n this.createSecondaryContacts();\r\n }\r\n else {\r\n let partyDtoRequired = this.buildReservationRequest(true);\r\n this.rs.reservationFormGroup.setControl('guestDetailsForm', this.guestDetailsForm);\r\n if (this.ls.operation == operationType.edit && this.ls.editPartyData$.value) {\r\n if (!this.isPartySizeMatchSecondaryContactList()) {\r\n this.gs.setMessageState(this.ts.instant('partySizeMisMatchError'), 0);\r\n return;\r\n }\r\n let secondaryContactList = this.buildSecondaryContactList();\r\n (this.rs.reservationFormGroup.get('guestDetailsForm') as FormGroup).addControl('secondaryContactList', this.fb.array(secondaryContactList.map(contact => this.fb.group(contact))));\r\n if (this.isAuthRefund) {\r\n if (this.gs.refundData) {\r\n partyDtoRequired.refundData = this.gs.refundData;\r\n this.updateReservation(partyDtoRequired);\r\n } else {\r\n this.showAuthRefundPopup();\r\n }\r\n } else {\r\n this.updateReservation(partyDtoRequired);\r\n }\r\n } else {\r\n this.CreateReservation(partyDtoRequired);\r\n }\r\n }\r\n }\r\n\r\n getSeatSelection() {\r\n if (this.rs.additionalGuestPage) {\r\n this.ls.nextButton.next(componentName.confirmDetails);\r\n }\r\n else {\r\n this.resetPaymentInfo();\r\n if (this.ls.restaurantWidgetSettings$.value.WidgetCustomization.AllowTableSelection) {\r\n this.rs.lockCallRequired = false;\r\n this.ls.nextButton.next(componentName.tablesLayout)\r\n }\r\n else {\r\n //this.ls.curentComponent= ReservationDetailsComponent;\r\n this.goBackToReservation();\r\n }\r\n }\r\n }\r\n\r\n trackByGuest(guest: any): number {\r\n return guest;\r\n }\r\n\r\n additionalGuest() {\r\n this.guestData.push(this.ts.instant('secondaryGuest') + (this.guestData.length + 1));\r\n this.confirmButton.disbaledproperity = true;\r\n setTimeout(() => {\r\n this.components.forEach(queryForm => {\r\n this.subscriptions.add(queryForm.form.valueChanges.subscribe(data => {\r\n queryForm.form.controls.firstName.setValue(queryForm.form.controls.firstName.value ? this.titleCasePipe.transform(queryForm.form.controls.firstName.value) : queryForm.form.controls.firstName.value, { emitEvent: false });\r\n queryForm.form.controls.lastName.setValue(queryForm.form.controls.lastName.value ? this.titleCasePipe.transform(queryForm.form.controls.lastName.value) : queryForm.form.controls.lastName.value, { emitEvent: false });\r\n queryForm.form.controls.aliasName.setValue(queryForm.form.controls.aliasName.value ? this.titleCasePipe.transform(queryForm.form.controls.aliasName.value) : queryForm.form.controls.aliasName.value, { emitEvent: false });\r\n this.confirmButton.disbaledproperity = queryForm.form.invalid || this.isAnyFormInvalid() || !this.isUserAllowedToclickConfirm || !this.checkCustomTermsAndMessageOptionValidation();\r\n }))\r\n let copyData:boolean = this.ls.restaurantWidgetSettings$?.value?.CopyPrimaryContactDetailsToSecondaryWidget;\r\n if (!queryForm.form.controls.phone.touched && !queryForm.form.controls.firstName.value && !queryForm.form.controls.firstName.touched) {\r\n queryForm.form.controls.phone.patchValue(copyData ? this.primaryGuestPhone : '', { emitEvent: false });\r\n }\r\n if (!queryForm.form.controls.email.touched && !queryForm.form.controls.email.value) {\r\n queryForm.form.controls.email.patchValue(copyData ? this.primaryGuestEmail : '', { emitEvent: false });\r\n }\r\n })\r\n }, 250);\r\n\r\n }\r\n\r\n isAnyFormInvalid(): boolean {\r\n let invalidFormCount = 0;\r\n this.components.toArray().forEach(formData => {\r\n if (formData.form.invalid) {\r\n invalidFormCount++;\r\n }\r\n })\r\n return invalidFormCount > 0;\r\n }\r\n\r\n bindContactsToForm(form, contact) {\r\n form.controls.firstName.setValue(contact.FirstName);\r\n form.controls.lastName.setValue(contact.LastName);\r\n form.controls.aliasName.setValue(contact.AliasName);\r\n if (this.ls.editPartyData$.value?.GuestReservationPhoneNumber) {\r\n form.controls.phone.setValue(contact.PhoneNumber2);\r\n } else {\r\n form.controls.phone.setValue(contact.PhoneNumber);\r\n }\r\n if (this.ls.editPartyData$.value?.GuestReservationEmail) {\r\n form.controls.email.setValue(contact.EmailAddress2);\r\n } else {\r\n form.controls.email.setValue(contact.EmailAddress);\r\n }\r\n this.bindPreferencesCategoryToForm(form, contact.Notes);\r\n }\r\n\r\n bindPreferencesCategoryToForm(form, notes) {\r\n let Notes = {};\r\n if (notes && notes.length > 0) {\r\n notes.forEach(note => {\r\n Notes[note.RelatedId] = true;\r\n if (this.freeTextIdList && this.freeTextIdList.length > 0 && this.freeTextIdList.findIndex(Id => Id == note.RelatedId) > -1 && note.Text) {\r\n if (form.controls[note.RelatedId.toString()]) {\r\n form.controls[note.RelatedId.toString()].setValue(note.Text);\r\n }\r\n }\r\n })\r\n }\r\n if (this.ls.restaurantWidgetSettings$.value.PreferencesCategories && this.ls.restaurantWidgetSettings$.value.PreferencesCategories.length > 0) {\r\n this.ls.restaurantWidgetSettings$.value.PreferencesCategories.forEach(category => {\r\n if (form.controls['preferences_' + category.Id.toString()]) {\r\n form.controls['preferences_' + category.Id.toString()].patchValue([Notes]);\r\n }\r\n });\r\n }\r\n }\r\n\r\n resetPaymentInfo() {\r\n this.rs.ispaymentInvolvedInfo = null;\r\n this.rs.reservationAttemptInfo = null;\r\n }\r\n\r\n GetPreliminaryReservationInformation() {\r\n this.rs.GetPreliminaryReservationInformation(this.ls.restaurantWidgetSettings$.value.RestaurantId,\r\n this.rs.reservationFormGroup.controls.reservationDetailsForm.value.partySize,\r\n moment(this.rs.reservationFormGroup.controls.reservationDetailsForm.value.reservationTime).format('YYYY-MM-DDTHH:mm:ss'),\r\n this.rs.reservationFormGroup.controls.reservationDetailsForm.value.specialMeal.Id,\r\n this.rs.reservationFormGroup.controls.reservationDetailsForm.value.tableId[0],\r\n this.rs.reservationFormGroup.controls.reservationDetailsForm.value.seatingArea.id > 0 ?\r\n this.rs.reservationFormGroup.controls.reservationDetailsForm.value.seatingArea.id : null,\r\n this.rs.reservationFormGroup.controls.reservationDetailsForm.value.seatingType.id > 0 ?\r\n this.rs.reservationFormGroup.controls.reservationDetailsForm.value.seatingType.id : null).subscribe(data => {\r\n if (data) {\r\n this.rs.ispaymentInvolvedInfo = data;\r\n if (this.partyDetails.specialMeal.WaiverFormCode || (this.ls.restaurantWidgetSettings$.value.DefaultWaiverForm && this.ls.restaurantWidgetSettings$.value.DefaultWaiverForm.Applied)) {\r\n this.isUserAllowedToclickConfirm = false;\r\n this.LoadGuestWaiverForm(this.partyDetails.specialMeal.WaiverFormCode ? this.partyDetails.specialMeal.WaiverFormCode : this.ls.restaurantWidgetSettings$.value.DefaultWaiverForm.FormCode) // disable confirm button\r\n }\r\n else {\r\n if (this.rs.ispaymentInvolvedInfo.CreditCardRequired) {\r\n this.isUserAllowedToclickConfirm = false;\r\n this.RegisterReservationAttempt(true) // diable confirm button\r\n }\r\n else {\r\n this.isUserAllowedToclickConfirm = true; //No payement no waiver form ,guest can create Reservation\r\n if (this.isSwireAndSEAEnv())\r\n this.confirmButton.disbaledproperity = this.guestDetailsForm.invalid || this.isAnyFormInvalid() || !this.isUserAllowedToclickConfirm || !this.checkCustomTermsAndMessageOptionValidation();\r\n }\r\n }\r\n\r\n }\r\n\r\n else {\r\n this.isUserAllowedToclickConfirm = false;//Some Error While Processing\r\n }\r\n\r\n });\r\n }\r\n\r\n buildReservationRequest(isBookingApiRequest: boolean = false) {\r\n let remindAboutVisit = false;\r\n if(this.ls.restaurantWidgetSettings$.value.IsSmsReminderSupported) {\r\n if(this.ls.restaurantWidgetSettings$.value.WidgetCustomization.IsReservationReminderMandatory) {\r\n remindAboutVisit = true;\r\n }else {\r\n remindAboutVisit = this.guestDetailsForm.value.primaryGuest ? this.guestDetailsForm.value.primaryGuest['reservationBySMS'] : this.ls.editPartyData$.value?.RemindAboutVisit;\r\n }\r\n }\r\n let partyDTO: any = {\r\n Id: this.ls.operation == operationType.edit ? this.ls.editPartyData$.value?.Id : null,\r\n Size: this.partyDetails.partySize,\r\n RemindAboutVisit: remindAboutVisit,// get Value froom form\r\n RemindAboutVisitEmail: this.guestDetailsForm.value?.primaryGuest?.['reservationByEmail'],//\r\n AgreedWithTermsOfUse: true,\r\n Contact: {\r\n FirstName: this.guestDetailsForm.value?.primaryGuest?.firstName || this.ls.editPartyData$.value?.Contact?.FirstName,\r\n LastName: this.guestDetailsForm.value?.primaryGuest?.lastName || this.ls.editPartyData$.value?.Contact?.LastName,\r\n AliasName: this.guestDetailsForm.value?.primaryGuest?.aliasName || this.ls.editPartyData$.value?.Contact?.AliasName,\r\n EmailAddress: this.guestDetailsForm.value?.primaryGuest?.email || this.ls.editPartyData$.value?.Contact?.EmailAddress,\r\n PhoneNumber: this.guestDetailsForm.value?.primaryGuest?.phone || this.ls.editPartyData$.value?.Contact?.PhoneNumber,\r\n PIILastUsedDate: moment(new Date()).format('YYYY-MM-DDTHH:mm:ss'),\r\n ContactCustomFields: this.getCustomGuestFieldsValue(),\r\n CountryId: this.rs.selectedCountryId, // map country code\r\n Notes: this.noteType == NoteType.guestNote ? this.getCategoryPreferencesNotes(this.guestDetailsForm.value?.primaryGuest, NoteType.guestNote) : [],\r\n MarketingOptedIn: this.guestDetailsForm.value?.primaryGuest?.marketingFlag ? this.guestDetailsForm.value.primaryGuest.marketingFlag : (this.ls.operation == operationType.edit && (!this.ls.restaurantWidgetSettings$.value.MarketingFlagEnabled || !this.ls.restaurantWidgetSettings$.value.MarketingFlagDescription) && this.ls.editPartyData$.value?.Contact.MarketingOptedIn) ? this.ls.editPartyData$.value.Contact.MarketingOptedIn : null\r\n },\r\n Slot: {\r\n Time: moment(this.partyDetails.reservationTime).format('YYYY-MM-DDTHH:mm:ss'),\r\n LockId: this.ls.operation == operationType.edit && !this.ls.lockResult ? null : this.ls.lockResult.SlotLockIdDTO.Id,\r\n Type: 4 //\"AutodetectSlot\"\r\n },\r\n PartyId: this.ls.operation == operationType.edit ? this.ls.editPartyData$.value.Id : null,\r\n SeatingAreaId: this.partyDetails.seatingArea.id > 0 ? this.partyDetails.seatingArea.id : null,\r\n SpecialMealId: this.partyDetails.specialMeal.Id,\r\n SeatingTypeId: this.partyDetails.seatingType.id > 0 ? this.partyDetails.seatingType.id : null,\r\n ConfirmationMessageOption: this.getConfirmationMessageOption(),\r\n Notes: this.noteType == NoteType.partyNote ? this.getPartyNotes() : this.getNotes(),\r\n TableIds: this.partyDetails.tableId && this.partyDetails.tableId.length > 0 ? this.partyDetails.tableId : [],\r\n CoverTypes: this.getCoverTypes(),//Bind Cover types\r\n BookingTypes: this.getBookingTypes(),//Bind Booking types\r\n IsCommunalTable: this.partyDetails.communalAvailability || this.ls.isCommunalTableSelected,\r\n FromWebsite: true,\r\n Language: this.ls.language, // get language id\r\n ReservationAttemptId: this.rs.reservationAttemptInfo && this.rs.reservationAttemptInfo.ReservationAttemptId ? this.rs.reservationAttemptInfo.ReservationAttemptId : null,\r\n waiverFormTransactionId: this.waiverFormTrancationId ? this.waiverFormTrancationId : (this.ls.operation == operationType.edit && this.ls.editPartyData$.value.WaiverFormTransactionId) ? this.ls.editPartyData$.value.WaiverFormTransactionId : null,\r\n BookingContacts: this.ls.operation == operationType.edit ? this.buildSecondaryContactList() : null,\r\n isBookingApiRequest,\r\n LanguageId: Number(sessionStorage.getItem('languageId')),\r\n AuthorizeTransaction : this.authorizeTransactionDetails\r\n };\r\n\r\n if (this.ls.operation != operationType.edit && this.guestDetailsForm.value?.primaryGuest?.dataRetention) {\r\n partyDTO.Contact.ConsentDate = moment(new Date()).format('YYYY-MM-DDTHH:mm:ss');\r\n partyDTO.Contact.ConsentPolicyId = this.ls.dataRetentionPolicy$.value.Id;\r\n }\r\n\r\n return partyDTO;\r\n }\r\n\r\n getNotes() {\r\n let notes = [];\r\n //Map Promocode Value\r\n let promoCodeValue = '';\r\n if (this.ls.restaurantWidgetSettings$.value.WidgetCustomization.DisplayPromoCode) {\r\n promoCodeValue = this.guestDetailsForm?.value?.primaryGuest?.promocode || this.ls.editPartyData$.value?.Notes?.find(note => note.Type == PartyNoteType.PromoCode)?.Text;\r\n if (promoCodeValue) {\r\n let promoCode = { Type: 3, Text: promoCodeValue };\r\n notes.push(promoCode);\r\n }\r\n }\r\n return notes;\r\n }\r\n\r\n getPartyNotes() {\r\n let promoCodeNotes = this.getNotes();\r\n let partyNotes = this.getCategoryPreferencesNotes(this.guestDetailsForm.value.primaryGuest, NoteType.partyNote);\r\n\r\n return promoCodeNotes.concat(partyNotes);\r\n }\r\n\r\n getConfirmationMessageOption() {\r\n if (this.ls.restaurantWidgetSettings$.value.ConfirmationVia == ConfirmationVia.Both) {\r\n if (this.guestDetailsForm.value.primaryGuest['reservationConfirmationByEmail']\r\n && this.guestDetailsForm.value.primaryGuest['reservationConfirmationBySMS']) {\r\n return ConfirmationVia.Both;\r\n }\r\n else if (this.guestDetailsForm.value.primaryGuest['reservationConfirmationByEmail']) {\r\n return ConfirmationVia.Email;\r\n }\r\n else if (this.guestDetailsForm.value.primaryGuest['reservationConfirmationBySMS']) {\r\n return ConfirmationVia.Sms;\r\n }\r\n else {\r\n return this.ls.restaurantWidgetSettings$.value.ConfirmationVia;\r\n }\r\n }\r\n else {\r\n return this.ls.restaurantWidgetSettings$.value.ConfirmationVia;\r\n }\r\n }\r\n\r\n getContactNotes() {\r\n return [];\r\n }\r\n\r\n getCustomGuestFieldsValue() {\r\n let CustomFieldsList: CustomFieldsDTO[] = [];\r\n if (this.ls.customGuestFields && this.ls.customGuestFields.CustomGuestField.length > 0) {\r\n this.ls.customGuestFields.CustomGuestField.forEach(field => {\r\n let fieldValue = ''\r\n \r\n if (this.guestDetailsForm.value.primaryGuest && this.guestDetailsForm.value.primaryGuest['customGuestField_' + field.Id.toString()]) {\r\n fieldValue = this.guestDetailsForm.value.primaryGuest['customGuestField_' + field.Id.toString()];\r\n }else if (this.rs.primaryContact && this.rs.primaryContact.ContactCustomFields && this.rs.primaryContact.ContactCustomFields.length > 0) {\r\n fieldValue = this.rs.primaryContact.ContactCustomFields.filter(x => x.CustomFieldId == field.Id)[0] ? this.rs.primaryContact.ContactCustomFields.filter(x => x.CustomFieldId == field.Id)[0].CustomFieldValue : '';\r\n }\r\n \r\n let customField = new CustomFieldsDTO();\r\n customField.CustomFieldId = Number(field.Id);\r\n customField.CustomFieldValue = fieldValue;\r\n customField.CustomFieldName = field.FieldName;\r\n CustomFieldsList.push(customField);\r\n \r\n })\r\n }\r\n return CustomFieldsList;\r\n }\r\n\r\n getCoverTypes(): CoverTypeQuantityDTO[] {\r\n let coverTypesList: CoverTypeQuantityDTO[] = [];\r\n if (this.rs.reservationFormGroup.controls.reservationDetailsForm.value.specialMeal &&\r\n this.rs.reservationFormGroup.controls.reservationDetailsForm.value.coverTypes &&\r\n this.rs.reservationFormGroup.controls.reservationDetailsForm.value.specialMeal.CoverTypePrices) {\r\n this.rs.reservationFormGroup.controls.reservationDetailsForm.value.specialMeal.CoverTypePrices.forEach(coverType => {\r\n let coverTypeDto = new CoverTypeQuantityDTO();\r\n coverTypeDto.CoverTypeId = coverType.Id;\r\n coverTypeDto.CoverTypeName = coverType.CoverTypeName;\r\n coverTypeDto.Covers = this.rs.reservationFormGroup.controls.reservationDetailsForm.value.coverTypes[coverType.Id.toString()];\r\n coverTypesList.push(coverTypeDto);\r\n });\r\n }\r\n return coverTypesList;\r\n }\r\n\r\n getBookingTypes(): BookingTypeQuantityDTO[] {\r\n let bookingTypesList: BookingTypeQuantityDTO[] = [];\r\n if (this.rs.reservationFormGroup.controls.reservationDetailsForm.value.specialMeal &&\r\n this.rs.reservationFormGroup.controls.reservationDetailsForm.value.bookingTypes &&\r\n this.rs.reservationFormGroup.controls.reservationDetailsForm.value.specialMeal.BookingTypeActivitiesMappings) {\r\n this.rs.reservationFormGroup.controls.reservationDetailsForm.value.specialMeal.BookingTypeActivitiesMappings.forEach(bookingType => {\r\n let bookingTypeDto = new BookingTypeQuantityDTO();\r\n bookingTypeDto.BookingTypeId = bookingType.Id;\r\n bookingTypeDto.BookingTypeName = bookingType.CoverTypeName;\r\n bookingTypeDto.BookingTypes = this.rs.reservationFormGroup.controls.reservationDetailsForm.value.bookingTypes[bookingType.Id.toString()]\r\n bookingTypesList.push(bookingTypeDto);\r\n });\r\n }\r\n return bookingTypesList;\r\n }\r\n\r\n updateReservation(partyDto) {\r\n this.gs.byPassValidation = false;\r\n this.rs.UpdateReservation(this.ls.restaurantWidgetSettings$.value.RestaurantId, partyDto, this.gs.allowOverlapBookings).subscribe(data => {\r\n if (data) {\r\n this.ls.offTimer();\r\n this.rs.reservationConfimationDetails = data;\r\n this.ls.reservationToken = data.Token;\r\n this.rs.reservationConfirmationText = 'reservationUpdateConfirmationText';\r\n this.rs.additionalGuestRequired = 0;\r\n this.authorizeTransactionDetails = null;\r\n this.ls.getByToken(data.Token).subscribe(data => {\r\n this.ls.editPartyData$.next(data);\r\n this.ls.nextButton.next(componentName.confirmDetails);\r\n });\r\n\r\n }\r\n });\r\n }\r\n\r\n CreateReservation(partyDto) {\r\n this.gs.byPassValidation = false;\r\n this.rs.CreateReservation(this.ls.restaurantWidgetSettings$.value.RestaurantId, partyDto, this.gs.allowOverlapBookings).subscribe(data => {\r\n if (data) {\r\n this.ls.offTimer();\r\n this.rs.reservationConfirmationText = 'reservationConfirmationText';\r\n this.rs.reservationConfimationDetails = data;\r\n this.ls.reservationToken = data.Token;\r\n this.rs.additionalGuestRequired = this.partyDetails.partySize - 1;\r\n this.authorizeTransactionDetails = null;\r\n this.gs.overlapBookingproceedEvent.next({})\r\n this.ls.getByToken(data.Token).subscribe(data => {\r\n this.ls.editPartyData$.next(data);\r\n this.ls.nextButton.next(componentName.confirmDetails);\r\n });\r\n\r\n }\r\n });\r\n }\r\n\r\n RegisterReservationAttempt(isIframeToBeDisplayed: boolean) {\r\n let registerReservationAttemptRequestDTO = {\r\n LocalTime: moment(this.partyDetails.reservationTime).format('YYYY-MM-DDTHH:mm:ss'), //selected date and time\r\n PartySize: this.rs.reservationFormGroup.controls.reservationDetailsForm.value.partySize,\r\n SeatingAreaId: this.partyDetails.seatingArea.id > 0 ? this.partyDetails.seatingArea.id : null,\r\n SeatingTypeId: this.partyDetails.seatingType.id > 0 ? this.partyDetails.seatingType.id : null,\r\n TableId: this.partyDetails.tableId && this.partyDetails.tableId.length > 0 ? this.partyDetails.tableId : [],\r\n SpecialMealId: this.partyDetails.specialMeal.Id,\r\n CoverTypes: this.getCoverTypes(),\r\n BookingTypes: this.getBookingTypes(),\r\n IsCommunalTable: this.partyDetails.communalAvailability || this.ls.isCommunalTableSelected,\r\n FromWebsite: true,\r\n PartyId: this.ls.operation == operationType.edit && this.ls.editPartyData$.value ? this.ls.editPartyData$.value.Id : null\r\n }\r\n this.rs.RegisterReservationAttempt(this.ls.restaurantWidgetSettings$.value.RestaurantId, registerReservationAttemptRequestDTO).subscribe(data => {\r\n if (data) {\r\n this.paymentData = this.rs.reservationAttemptInfo = data;\r\n this.serviceCharge = this.paymentData.ServiceChargeAmount || 0;\r\n this.taxOnServiceCharge = this.paymentData.TaxOnServiceChargeAmount ? this.paymentData.TaxOnServiceChargeAmount : (this.paymentData.ServiceCharges && this.paymentData.ServiceCharges.length) ? _.sumBy(this.paymentData.ServiceCharges ,'TaxOnBookingChargeAmount') : (this.paymentData.TaxOnServiceChargeAmount ? this.paymentData.TaxOnServiceChargeAmount : 0)\r\n\r\n this.bindPaymentAmountAndMessage(this.paymentData.RateplanAmountinfo, this.paymentData.SpecialMealAmountinfo, this.paymentData.PaymentAmount, this.paymentData.TaxAmount,this.serviceCharge,this.taxOnServiceCharge)\r\n if (data.ShouldCreditCardBeEntered && isIframeToBeDisplayed) {\r\n if (this.rs.reservationAttemptInfo.CreditCardIFrameURL) {\r\n this.LoadIframe(this.rs.reservationAttemptInfo.CreditCardIFrameURL);\r\n }\r\n else {\r\n this.gs.setMessageState(this.ts.instant('SorryForPaymentOffline'), 0);\r\n }\r\n }\r\n if (this.ls.operation == operationType.edit && this.ls.editPartyData$.value) {\r\n this.getFinancialEffectCalculation();\r\n }\r\n }\r\n })\r\n\r\n }\r\n\r\n bindPaymentAmountAndMessage(ratePlanAmount, specialMealAmount, paymentAmount, taxAmount?,serviceCharge?,taxOnServiceCharge?) {\r\n this.ratePlanAmountInfo = ratePlanAmount;\r\n this.specialMealAmountInfo = specialMealAmount;\r\n this.paymentAmountInfo = paymentAmount;\r\n if (ratePlanAmount > 0 || specialMealAmount > 0) { //Activity Payment Involved\r\n this.activityPayment = ratePlanAmount > 0 ? ratePlanAmount : 0;\r\n this.activityPayment = specialMealAmount > 0 ? this.activityPayment + specialMealAmount : this.activityPayment;\r\n this.activityPayment = Number(this.activityPayment);\r\n this.paymentWithoutTax = _.cloneDeep(this.activityPayment).toFixed(this.ls.restaurantWidgetSettings$.value.NumberOfFractionalDigits);\r\n this.activityPayment = (this.activityPayment + (taxAmount || 0) + ( serviceCharge|| 0) + ( taxOnServiceCharge|| 0)).toFixed(this.ls.restaurantWidgetSettings$.value.NumberOfFractionalDigits);\r\n \r\n if (this.isSelectedMealDefferedPayment()) {\r\n this.paymentMessage = this.ts.instant('PrePaidMealReservationAuthorize');\r\n }\r\n else {\r\n this.paymentMessage = this.ts.instant('CardWillBeChargedTotalPrePaidReservation');\r\n }\r\n this.rs.showPaymentSummary = true;\r\n }\r\n else if (paymentAmount > 0) {//noShow\r\n this.noShowfee = paymentAmount > 0 ? paymentAmount : 0;\r\n if (this.ls.restaurantWidgetSettings$.value.WidgetCustomization.CustomNoShowFeeTerms) {\r\n this.noShowfeeMessage = this.ls.restaurantWidgetSettings$.value.WidgetCustomization.CustomNoShowFeeTerms\r\n this.noShowPolicyTitle = this.ls.restaurantWidgetSettings$.value.CancellationTitle ? this.ls.restaurantWidgetSettings$.value.CancellationTitle : this.ts.instant('noShowPolicy');\r\n }\r\n else {\r\n this.noShowfeeMessage = this.ts.instant('RestaurantCreditCardAssurance');\r\n }\r\n this.rs.showPaymentSummary = true;\r\n }\r\n\r\n }\r\n\r\n @HostListener('window:message', ['$event'])\r\n onMessage({ origin, data }) {\r\n if (origin != environment.authorizeIframeResponseOrigin && origin != environment.rGuestPayIframeResponsOrigin) { // set your origin\r\n return false;\r\n }\r\n var rGuestPayResponse = data;\r\n var payResponse = data;\r\n if (typeof data != \"object\") {\r\n rGuestPayResponse = JSON.parse(data);\r\n }\r\n if ((data.type == \"txn-completed\" && data.transactionInfo && data.transactionInfo.transactionInfo && data.transactionInfo.transactionInfo.payments) || (rGuestPayResponse && (rGuestPayResponse.code || rGuestPayResponse.gatewayResponseData))) {\r\n\r\n if (data && data.transactionInfo && data.transactionInfo.transactionInfo.successCode == 1 && data.transactionInfo.transactionInfo.payments.length > 0 && data.transactionInfo.transactionInfo.payments[0].paymentType == 7) { //Waiver form\r\n this.proceedReservation(data.transactionInfo.transactionInfo.payments[0].authorizeTransactionID);\r\n return;\r\n }\r\n\r\n if (this.paymentData.PaymentGateway == PaymentGateways.AuthorizePay) { //Authorize Pay\r\n var transInfo = payResponse.transactionInfo.transactionInfo;\r\n // var cardInfo = transInfo.saleResponse.cardInfo;\r\n // var gatewayResponseData = transInfo.saleResponse.gatewayResponseData;\r\n // var transactionReferenceData = transInfo.saleResponse.transactionReferenceData;\r\n // var transactionResponseData = transInfo.saleResponse.transactionResponseData;\r\n\r\n if (transInfo.errorMessage || transInfo.successCode != 1) {\r\n if (transInfo.errorMessage) {\r\n this.gs.setMessageState(transInfo.errorMessage, 0);\r\n }\r\n // else if (gatewayResponseData.message) {\r\n // this.gs.setMessageState(gatewayResponseData.message, 0);\r\n // }\r\n else {\r\n this.gs.setMessageState(this.ts.instant(\"CardInformationProcessNotCompleted\"), 0);\r\n }\r\n }\r\n else if (payResponse && transInfo && transInfo.successCode == 1) {\r\n if (transInfo.payments && transInfo.payments.length > 0 && transInfo.payments[0].paymentType == 7) { //Waiver form\r\n this.proceedReservation(transInfo.payments[0].authorizeTransactionID);\r\n return;\r\n }\r\n var transactions = this.processTransactions(transInfo);\r\n var dto = {\r\n RestaurantId: this.ls.restaurantWidgetSettings$.value.RestaurantId,\r\n PartyId: this.ls.editPartyData$.value?.Id ? this.ls.editPartyData$.value?.Id : null,\r\n SlotLockIds: [this.ls.lockResult.SlotLockIdDTO?.Id],\r\n BookingID: null,\r\n TokenType: \"\",\r\n PayResponse : data.transactionInfo.transactionInfo?.payments[0]?.rGuestPayResponseData,\r\n PaymentAmount: transInfo.paidAmount,\r\n PaymentGateway: this.paymentData.PaymentGateway,\r\n AuthorizeTransactions: transactions,\r\n ReservationAttemptId: this.paymentData.ReservationAttemptId,\r\n ReservationAttemptIds: this.paymentData.Slots?.filter(x => x.ReservationAttemptId > 0).map(x => x.ReservationAttemptId),\r\n SplitPaymentReload: this.isSplitPayment\r\n };\r\n\r\n if(transactions?.every(e=>e.PaymentType == AuthorizePaymentType.CreditCardToken)){\r\n this.authorizeTransactionDetails = transactions[0];\r\n this.isUserAllowedToclickConfirm = true;\r\n if (this.guestDetailsForm.invalid || !this.checkCustomTermsAndMessageOptionValidation()) {\r\n this.gs.setMessageState(this.ts.instant('completeAllFields'), 0);\r\n this.showIframe = false;\r\n this.isFormValid = false;\r\n }\r\n else {\r\n this.reservationConfirm();\r\n }\r\n\r\n return;\r\n }else{\r\n this.UpdateReservationAttempt(dto);\r\n }\r\n // var callbackDto = this.getPaymentCallbackRequestDTO(cardInfo, transactionReferenceData, transInfo, transactionResponseData, this.paymentData.PaymentGateway);\r\n // this.UpdateReservationAttempt(callbackDto);\r\n } else {\r\n this.gs.setMessageState(this.ts.instant(\"CardInformationProcessNotCompleted\"), 0);\r\n }\r\n }\r\n else {\r\n if (rGuestPayResponse && typeof rGuestPayResponse.code == 'undefined' && typeof rGuestPayResponse.gatewayResponseData == 'undefined' && typeof rGuestPayResponse.token == 'undefined') {\r\n return;\r\n }\r\n else if (rGuestPayResponse.code && rGuestPayResponse.code != \"100\") {\r\n rGuestPayResponse = JSON.parse(data);\r\n if (rGuestPayResponse.validationErrors && rGuestPayResponse.validationErrors.length > 0) {\r\n var errorString = \"\";\r\n rGuestPayResponse.validationErrors.forEach(function (error, i, arr) {\r\n errorString = error.fieldName + \" \" + error.value + \"\\n\";\r\n })\r\n this.gs.setMessageState(errorString, 0);\r\n }\r\n else if (rGuestPayResponse && rGuestPayResponse.gatewayResponseData && rGuestPayResponse.gatewayResponseData.message) {\r\n alert(rGuestPayResponse.gatewayResponseData.message);\r\n }\r\n else {\r\n this.gs.setMessageState(this.ts.instant(\"CardInformationProcessNotCompleted\"), 0);\r\n }\r\n }\r\n else if (rGuestPayResponse && rGuestPayResponse.gatewayResponseData && rGuestPayResponse.gatewayResponseData.code == \"100\") {\r\n let callbackDto = {\r\n ReservationAttemptId: this.paymentData.ReservationAttemptId,\r\n CardNumber: rGuestPayResponse.cardInfo.accountNumberMasked,\r\n ExpirationDate: new Date(data.cardInfo.expirationYearMonth.substring(0, 4) + '-' + data.cardInfo.expirationYearMonth.substring(4) + '-01'),\r\n CVC: \"\",\r\n FirstNameHolder: \"\",\r\n LastNameHolder: \"\",\r\n AddressLine1: \"\",\r\n AddressLine2: \"\",\r\n City: \"\",\r\n State: \"\",\r\n PostalCode: \"\",\r\n TokenType: \"\",\r\n Token: data.token\r\n };\r\n this.UpdateReservationAttempt(callbackDto);\r\n }\r\n else {\r\n this.gs.setMessageState(this.ts.instant(\"CardInformationProcessNotCompleted\"), 0);\r\n }\r\n }\r\n }\r\n else if (data.type == \"txn-completed\" && data.transactionInfo) {\r\n //this.proceedReservation(data.transactionInfo.transactionInfo.authorizeTransactionID);\r\n } else {\r\n //Show Error Message\r\n }\r\n }\r\n\r\n proceedReservation(waiverFormTrancationId) {\r\n this.showIframe = false;\r\n this.isFormValid = false;\r\n this.waiverFormTrancationId = waiverFormTrancationId;\r\n //let invoiceId = data.transactionInfo.transactionInfo.invoiceID\r\n if (this.rs.ispaymentInvolvedInfo && this.rs.ispaymentInvolvedInfo.CreditCardRequired) {\r\n this.isUserAllowedToclickConfirm = false;\r\n if (this.rs.reservationAttemptInfo) {\r\n if (this.rs.reservationAttemptInfo.CreditCardIFrameURL) {\r\n this.LoadIframe(this.rs.reservationAttemptInfo.CreditCardIFrameURL)\r\n }\r\n else {\r\n this.gs.setMessageState(this.ts.instant('SorryForPaymentOffline'), 0);\r\n }\r\n }\r\n else {\r\n this.RegisterReservationAttempt(true);\r\n }\r\n }\r\n else {\r\n this.isUserAllowedToclickConfirm = true;\r\n if (this.guestDetailsForm.invalid || !this.checkCustomTermsAndMessageOptionValidation()) {\r\n this.gs.setMessageState(this.ts.instant('completeAllFields'), 0);\r\n this.showIframe = false;\r\n this.isFormValid = false;\r\n }\r\n else {\r\n this.reservationConfirm();\r\n }\r\n }\r\n }\r\n\r\n processTransactions(transInfo) {\r\n //var authTransactionID = transInfo.authorizeTransactionID;\r\n //var paymentType = transInfo.paymentType;\r\n //var totalAmount = transInfo.paidAmount;\r\n //var overAllStatus = transInfo.status;\r\n //var successCode = transInfo.successCode;\r\n //var errorCode = transInfo.errorCode;\r\n //var errorMessage = transInfo.errorMessage;\r\n var transactions = transInfo.payments;\r\n var authorizeTransactions = [];\r\n\r\n if (transactions && transactions.length > 0) {\r\n transactions.forEach(transaction => {\r\n if (transaction.successCode == 1) {\r\n var name = '';\r\n var paymentDetail = transaction.paymentDetail;\r\n var roomDetails = {\r\n RoomNumber: null,\r\n ConfirmationNumber: null,\r\n LastName: null\r\n };\r\n var pointsDetails = {\r\n AccountNumber: null,\r\n BucketName: null,\r\n Name: null,\r\n LoyaltyTransactionId: null\r\n };\r\n\r\n if (transaction.paymentType == 1 || transaction.paymentType == 2) { //credit card\r\n name = paymentDetail.accountName;\r\n }\r\n\r\n if (transaction.paymentType == 3) { //Post to room charges\r\n roomDetails.RoomNumber = paymentDetail.cardIssuer;\r\n roomDetails.ConfirmationNumber = paymentDetail.cardNumber;\r\n roomDetails.LastName = paymentDetail.accountName;\r\n name = paymentDetail.accountName;\r\n }\r\n if (transaction.paymentType == 5) { //Loyalty\r\n pointsDetails.BucketName = paymentDetail.tender;\r\n pointsDetails.AccountNumber = paymentDetail.cardNumber;\r\n pointsDetails.Name = paymentDetail.accountName;\r\n pointsDetails.LoyaltyTransactionId = paymentDetail.followOnData;\r\n name = paymentDetail.accountName;\r\n }\r\n var dto = {\r\n CardNumber: paymentDetail.cardNumber ? paymentDetail.cardNumber : \"\",\r\n ExpirationDate: paymentDetail.expirationDate ? paymentDetail.expirationDate.substring(0, 4) + paymentDetail.expirationDate.substring(4) : \"\",\r\n Name: name ? name : \"\",\r\n Token: paymentDetail.token ? paymentDetail.token : null,\r\n TransactionFollowOnData: paymentDetail.followOnData ? paymentDetail.followOnData : null,\r\n AuthorizeTransactionID: transaction.authorizeTransactionID,\r\n Amount: transaction.paidAmount,\r\n PaymentType: transaction.paymentType ? transaction.paymentType : null,\r\n InvoiceID: transaction.invoiceID ? transaction.invoiceID : null,\r\n TransactionDate: transaction.transactionsDate ? transaction.transactionsDate : null,\r\n RoomNumber: roomDetails && roomDetails.RoomNumber ? roomDetails.RoomNumber : null,\r\n ConfirmationNumber: roomDetails && roomDetails.ConfirmationNumber ? roomDetails.ConfirmationNumber : null,\r\n BucketName: pointsDetails && pointsDetails.BucketName ? pointsDetails.BucketName : null,\r\n LoyaltyAccountNumber: pointsDetails && pointsDetails.AccountNumber ? pointsDetails.AccountNumber : null,\r\n LoyaltyTransactionId: pointsDetails && pointsDetails.LoyaltyTransactionId ? pointsDetails.LoyaltyTransactionId : null,\r\n IssuerType: pointsDetails && paymentDetail.tender ? paymentDetail.tender : null,\r\n AuthCode : paymentDetail?.authCode,\r\n CCType : paymentDetail?.cardIssuerType,\r\n CCTransactionId : paymentDetail?.payTransactionID,\r\n };\r\n authorizeTransactions.push(dto);\r\n } else if (transaction.errorMessage) {\r\n this.gs.setMessageState(transaction.errorMessage, 0);\r\n }\r\n });\r\n return authorizeTransactions;\r\n }\r\n }\r\n\r\n LoadGuestWaiverForm(formCode) {\r\n this.rs.GetAuthWaiverForm(this.ls.restaurantWidgetSettings$.value.RestaurantId, formCode).subscribe(data => {\r\n if (data) {\r\n this.LoadIframe(data.formURL);\r\n if (this.rs.ispaymentInvolvedInfo && this.rs.ispaymentInvolvedInfo.CreditCardRequired) {\r\n this.RegisterReservationAttempt(false);\r\n }\r\n }\r\n else {\r\n this.ls.message = this.ts.instant('somethingWentWrong');\r\n }\r\n });\r\n }\r\n\r\n checkCustomTermsAndMessageOptionValidation() {\r\n let isApproved = true;\r\n if (this.rs.additionalGuestPage) {\r\n return true;\r\n }\r\n\r\n if (this.ls.restaurantWidgetSettings$.value.ConfirmationVia == ConfirmationVia.Both && !this.guestDetailsForm.value.primaryGuest['reservationConfirmationByEmail']\r\n && !this.guestDetailsForm.value.primaryGuest['reservationConfirmationBySMS']) {\r\n isApproved = false;\r\n }\r\n return isApproved;\r\n }\r\n\r\n isPartySizeMatchSecondaryContactList(): boolean {\r\n if (this.ls.operation == operationType.edit && this.ls.editPartyData$.value.BookingContacts && this.ls.editPartyData$.value.BookingContacts.length > 0 && this.partyDetails.partySize < this.components?.toArray().length) {\r\n return false;\r\n }\r\n else {\r\n return true;\r\n }\r\n }\r\n\r\n LoadIframe(iframeURl: string) {\r\n if (iframeURl) {\r\n this.urlSafe = this.sanitizer.bypassSecurityTrustResourceUrl(iframeURl + \"&origin=\" + window.location.origin)\r\n this.showIframe = true;\r\n this.isFormValid = !this.ls.restaurantWidgetSettings$?.value?.DisableCustomTermsAndConditions ? true : false;\r\n }\r\n else {\r\n this.ls.message = this.ts.instant('somethingWentWrong');\r\n }\r\n }\r\n\r\n getPaymentCallbackRequestDTO(cardInfo: any, transactionReferenceData: any, transInfo: any, transactionResponseData: any, paymentGateway: PaymentGateways) {\r\n let paymentCallbackRequestDTO = {\r\n RestaurantId: this.ls.restaurantWidgetSettings$.value.RestaurantId,\r\n ReservationAttemptId: this.paymentData.ReservationAttemptId,\r\n CardNumber: cardInfo.accountNumberMasked,\r\n ExpirationDate: cardInfo.expirationYearMonth.substring(0, 4) + '-' + cardInfo.expirationYearMonth.substring(4) + '-01',\r\n CVC: \"\",\r\n FirstNameHolder: \"\",\r\n LastNameHolder: \"\",\r\n AddressLine1: \"\",\r\n AddressLine2: \"\",\r\n City: \"\",\r\n State: \"\",\r\n PostalCode: \"\",\r\n TokenType: \"\",\r\n Token: transactionReferenceData ? transactionReferenceData.token : null,\r\n PaymentAmount: transactionResponseData.totalAmount,\r\n AuthorizeTransactionID: transInfo ? transInfo.authorizeTransactionID : null,\r\n PaymentType: transInfo ? transInfo.paymentType : null,\r\n InvoiceID: transInfo ? transInfo.invoiceID : null,\r\n PaymentGateway: paymentGateway,\r\n TransactionFollowOnData: transactionReferenceData ? transactionReferenceData.transactionFollowOnData : null,\r\n TransactionDate: transInfo.transactionsDate,\r\n IssuerType: transactionReferenceData && transactionReferenceData.tender ? transactionReferenceData.tender : null,\r\n }\r\n return paymentCallbackRequestDTO;\r\n }\r\n\r\n UpdateReservationAttempt(Dto) {\r\n this.rs.UpdateReservationAttempt(Dto).subscribe(data => {\r\n this.gs.setMessageState('', 0);\r\n if (data && (data.ErrorMessage || data.ExceptionMessage || (data.ValidationMessages && data.ValidationMessages.length > 0) || data.length == 0)) {\r\n if (data.ErrorMessage && data.ErrorMessage.length > 0) {\r\n var sorrysomethingwentwromg = this.ts.instant('SorryWeGotSomeErrorWhileProcessing');\r\n var CCUprocessableTryAgainErrorMessage = this.ts.instant('CCUprocessableTryAgainErrorMessage');\r\n var ImportantErrorMessage = this.ts.instant('ImportantErrorMessage');\r\n var CreditCardAuthorizationError = this.ts.instant('CreditCardAuthorizationError');\r\n var TryAgainMessage = this.ts.instant('TryAgainMessage');\r\n var CardNumbershouldContainOnlyDigits = this.ts.instant('CardNumbershouldContainOnlyDigits');\r\n var CardNumberShouldConsists13To16Digits = this.ts.instant('CardNumberShouldConsists13To16Digits');\r\n var CardNumberShouldNotBlank = this.ts.instant('CardNumberShouldNotBlank');\r\n var SorryWeGotSomeErrorCardExpired = this.ts.instant('SorryWeGotSomeErrorWhileProcessingCardExpired');\r\n if (data.ErrorMessage == \"Please try it one more time, if the problem repeats, contact to rGuestSeat@Agilysys.com\")\r\n var url = sorrysomethingwentwromg + TryAgainMessage;\r\n else if (data.ErrorMessage == \"We're sorry, but we couldn�t process your credit card based on the information you provided. Please try again.\")\r\n var url = sorrysomethingwentwromg + CCUprocessableTryAgainErrorMessage;\r\n else if (data.ErrorMessage == \"[IMPORTANT] Some error happens at the moment of database saving. There is a probability that the payment transaction has performed successfully but this fact hasn't been saved properly. Don't try to do it one more time. Please, contact rGuestSeat@Agilysys.com regarding this error\")\r\n var url = sorrysomethingwentwromg + ImportantErrorMessage;\r\n else if (data.ErrorMessage == \"The provided credit card hasn't been authorized succesfully\")\r\n var url = sorrysomethingwentwromg + CreditCardAuthorizationError;\r\n else if (data.ErrorMessage.indexOf(\"The card is expired\") > 0)\r\n var url = SorryWeGotSomeErrorCardExpired;\r\n else if (data.ErrorMessage == \"The card number should consist of only digits\")\r\n var url = sorrysomethingwentwromg + CardNumbershouldContainOnlyDigits;\r\n else if (data.ErrorMessage == \"The card number should consist of from 13 to 16 digits\")\r\n var url = sorrysomethingwentwromg + CardNumberShouldConsists13To16Digits;\r\n else if (data.ErrorMessage == \"The card number shouldn't be blank\")\r\n var url = sorrysomethingwentwromg + CardNumberShouldNotBlank;\r\n else\r\n var url = sorrysomethingwentwromg + data.ErrorMessage;\r\n this.gs.setMessageState(url, 0);\r\n }\r\n else {\r\n var url = sorrysomethingwentwromg + TryAgainMessage;\r\n this.gs.setMessageState(url, 0);\r\n }\r\n this.gs.setMessageState(url, 0);\r\n }\r\n else if (data.RedirectUrl) {\r\n this.ls.offTimer();\r\n this.LoadIframe(data.RedirectUrl);\r\n this.isSplitPayment = true;\r\n this.editButton.disbaledproperity = true;\r\n setTimeout(() => {\r\n this.gs.setMessageState(this.ts.instant('yourCurrentPaymentOf') + ' ' + this.ls.restaurantWidgetSettings$.value.OperationCurrency + Dto.PaymentAmount.toFixed(this.ls.restaurantWidgetSettings$.value.NumberOfFractionalDigits) + this.ts.instant('isProcessedSuccessfullyPleaseProceedToPay') + this.ls.restaurantWidgetSettings$.value.OperationCurrency + data.PendingAmount.toFixed(this.ls.restaurantWidgetSettings$.value.NumberOfFractionalDigits) + this.ts.instant('toPlaceYourReservation'), 1);\r\n }, 1);\r\n let timer = moment(data.ExtendedSlotLockResultDTO.ExpiresAt).diff(moment(data.ExtendedSlotLockResultDTO.LockedAt), \"seconds\");\r\n this.ls.showTimer = true;\r\n this.ls.runTimer(timer);\r\n }\r\n else {\r\n this.editButton.disbaledproperity = false;\r\n this.rs.GetRegisterReservationAttempt(this.paymentData.ReservationAttemptId).subscribe(data => {\r\n if (data && (data.State == PaymentStates.Authorized || data.State == PaymentStates.ChargeCaptured)) {\r\n this.isUserAllowedToclickConfirm = true;\r\n if (this.guestDetailsForm.invalid || !this.checkCustomTermsAndMessageOptionValidation()) {\r\n this.gs.setMessageState(this.ts.instant('completeAllFields'), 0);\r\n this.showIframe = false;\r\n this.isFormValid = false;\r\n }\r\n else {\r\n this.reservationConfirm();\r\n }\r\n }\r\n else {\r\n this.gs.setMessageState(this.ts.instant(\"CreditCardNotBeProcessed\"), 0);\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n createSecondaryContacts() {\r\n let secondaryContactList = this.buildSecondaryContactList();\r\n (this.rs.reservationFormGroup.get('guestDetailsForm') as FormGroup).addControl('secondaryContactList', this.fb.array(secondaryContactList.map(contact => this.fb.group(contact))));\r\n this.rs.CreateSecondaryContacts(this.ls.restaurantWidgetSettings$.value.RestaurantId, this.ls.editPartyData$.value.Id, secondaryContactList).subscribe(data => {\r\n if (data) {\r\n this.rs.additionalGuestPage = !this.rs.additionalGuestPage\r\n this.rs.additionalGuestRequired = 0;\r\n this.ls.getByToken(this.ls.editPartyData$.value.Token).subscribe(data => {\r\n if (data) {\r\n this.ls.editPartyData$.next(data);\r\n this.ls.nextButton.next(componentName.confirmDetails);\r\n }\r\n })\r\n\r\n }\r\n });\r\n }\r\n\r\n buildSecondaryContactList() {\r\n let secondaryContactList: SecondaryContactDTO[] = [];\r\n if(this.components?.length) {\r\n for (let i = 0; i < this.components.length; i++) {\r\n let secondaryContact = new SecondaryContactDTO();\r\n if (this.rs.additionalGuestPage || (!this.rs.additionalGuestPage && this.ls.operation == operationType.edit && i != 0)) {\r\n let FormValue = this.components.toArray()[i].form.value;\r\n secondaryContact.FirstName = FormValue.firstName;\r\n secondaryContact.LastName = FormValue.lastName;\r\n secondaryContact.AliasName = FormValue.aliasName;\r\n secondaryContact.EmailAddress = FormValue.email;\r\n secondaryContact.PhoneNumber = FormValue.phone;\r\n secondaryContact.PartyId = this.ls.editPartyData$.value.Id; \r\n secondaryContact.Id = FormValue.id ? FormValue.id : null;\r\n secondaryContact.ContactId = FormValue.id ? this.rs.secondaryContactList?.find(sc=>sc.Id == FormValue.id)?.ContactId : null;\r\n secondaryContact.Notes = this.getCategoryPreferencesNotes(this.components.toArray()[i].form.value, NoteType.guestNote, secondaryContact.Id, true);\r\n secondaryContactList.push(secondaryContact)\r\n }\r\n }\r\n }\r\n return secondaryContactList;\r\n }\r\n\r\n getFinancialEffectCalculation() {\r\n let partyDTO = this.buildReservationRequest();\r\n this.rs.GetFinancialEffectCalculation(this.ls.restaurantWidgetSettings$.value.RestaurantId, partyDTO).subscribe(data => {\r\n if (data) {\r\n if (!data.TotalAmount) {\r\n data.TotalAmount = 0;\r\n }\r\n if (!data.SpecialMealAmount) {\r\n data.SpecialMealAmount = 0;\r\n }\r\n if (!data.RatePlanAmount) {\r\n data.RatePlanAmount = 0;\r\n }\r\n this.financialData = data;\r\n if (data.RedirectUrl) {\r\n this.isSplitPayment = false;\r\n this.isUserAllowedToclickConfirm = false;\r\n this.paymentData.ReservationAttemptId = data.ReservationAttemptId;\r\n this.paymentData.PaymentGateway = data.PaymentGateway;\r\n this.confirmButton.disbaledproperity = true;\r\n this.LoadIframe(data.RedirectUrl);\r\n }\r\n switch (data.PartyPaymentType) {\r\n case 0: // NotSupported\r\n this.gs.setMessageState(this.ts.instant(\"ReservationBetweenLocationPrePaidNotSupported\"), 0);\r\n this.isUserAllowedToclickConfirm = false;\r\n this.confirmButton.disbaledproperity = true;\r\n return;\r\n case 1: // NoPaymentsInvolved\r\n // No messaging in this case\r\n break;\r\n case 2: // NoEffect\r\n this.showFinancialEffectPopUp(this.ts.instant('NoChargeOrRefundForThisReservation'));\r\n break;\r\n case 3: // NewReservationAttempt\r\n //paymentIframeRequired = true;\r\n if (this.isSelectedMealDefferedPayment()) {\r\n this.popUpMessage = this.ts.instant('yourCardWillBeChargedPriorToYourMealTime');\r\n } else {\r\n this.popUpMessage = this.ts.instant('NoRefundYourPrePayment') + ' ' + this.ls.restaurantWidgetSettings$.value.OperationCurrency + data.TotalAmount.toFixed(this.ls.restaurantWidgetSettings$.value.NumberOfFractionalDigits);\r\n }\r\n this.showFinancialEffectPopUp(this.popUpMessage);\r\n break;\r\n case 4: // NoFullRefund\r\n if (data.TotalAmount != null && (data.TotalAmount > 0)) {\r\n this.popUpMessage = this.ts.instant('NoRefundYourPrePayment') + ' ' + this.ls.restaurantWidgetSettings$.value.OperationCurrency + data.TotalAmount.toFixed(this.ls.restaurantWidgetSettings$.value.NumberOfFractionalDigits);\r\n }\r\n else {\r\n // There was no prepayment to mention in text (or it was already refunded)\r\n this.popUpMessage = this.ts.instant('NoChargeOrRefundForThisReservation');\r\n }\r\n this.showFinancialEffectPopUp(this.popUpMessage);\r\n break;\r\n case 5: // FullRefund\r\n this.popUpMessage = this.ts.instant('CardUsedForOriginalReservationWillBeRefunded') + ' ' + this.ls.restaurantWidgetSettings$.value.OperationCurrency + data.TotalAmount.toFixed(this.ls.restaurantWidgetSettings$.value.NumberOfFractionalDigits) + ' ' + this.ts.instant('severBusinessDays');\r\n this.showFinancialEffectPopUp(this.popUpMessage);\r\n break;\r\n case 6: // NoFullRefundAndNewReservationAttempt\r\n if (data.TotalAmount != null && (data.TotalAmount > 0)) {\r\n this.popUpMessage = this.ts.instant('NoRefundYourPrePayment') + ' ' + this.ls.restaurantWidgetSettings$.value.OperationCurrency + data.PaymentAmount.toFixed(this.ls.restaurantWidgetSettings$.value.NumberOfFractionalDigits);\r\n }\r\n else {\r\n // There was no prepayment to mention in text (or it was already refunded)\r\n this.popUpMessage = this.ts.instant('noRefundMessage');\r\n }\r\n this.showFinancialEffectPopUp(this.popUpMessage);\r\n break;\r\n case 7: // FullRefundAndNewReservationAttempt\r\n this.popUpMessage = this.ts.instant('CardUsedForOriginalReservationWillBeRefunded') + ' ' + this.ls.restaurantWidgetSettings$.value.OperationCurrency + data.TotalAmount.toFixed(this.ls.restaurantWidgetSettings$.value.NumberOfFractionalDigits) + ' ' + this.ts.instant('severBusinessDays');\r\n this.showFinancialEffectPopUp(this.popUpMessage);\r\n break;\r\n case 8: // PartialCharge\r\n if (this.rs.reservationAttemptInfo.ShouldCreditCardBeEntered) {\r\n this.popUpMessage = this.ts.instant('CardNeededToUpdateThisReservation') + ' ' + this.ls.restaurantWidgetSettings$.value.OperationCurrency + data.PaymentAmount.toFixed(this.ls.restaurantWidgetSettings$.value.NumberOfFractionalDigits) + ' ' + this.ts.instant('enterCreditCard');\r\n }\r\n else {\r\n var msg = data && data.RedirectUrl ? this.ts.instant('PleaseCompleteRemainingPaymentOf') : this.ts.instant('CardUsedForTheOriginalBookingWillCharged');\r\n this.popUpMessage = msg + ' ' + this.ls.restaurantWidgetSettings$.value.OperationCurrency + data.PaymentAmount.toFixed(this.ls.restaurantWidgetSettings$.value.NumberOfFractionalDigits);\r\n }\r\n this.showFinancialEffectPopUp(this.popUpMessage);\r\n break;\r\n case 9: // PartialRefund\r\n case 14:\r\n if (this.financialData.RefundOption && this.financialData.RefundOption.length > 0) {\r\n this.RefundData = this.financialData.RefundOption;\r\n if (this.RefundData) {\r\n this.popUpMessage = this.ts.instant('PleaseSelectRefundStrategyFor') + this.ls.restaurantWidgetSettings$.value.OperationCurrency + data.PaymentAmount.toFixed(this.ls.restaurantWidgetSettings$.value.NumberOfFractionalDigits);\r\n } else {\r\n this.popUpMessage = this.ts.instant('Refund request of ') + this.ls.restaurantWidgetSettings$.value.OperationCurrency + data.PaymentAmount.toFixed(this.ls.restaurantWidgetSettings$.value.NumberOfFractionalDigits) + this.ts.instant(' has been processed');\r\n }\r\n } else {\r\n this.popUpMessage = this.ts.instant('refundMessage') + this.ls.restaurantWidgetSettings$.value.OperationCurrency + Math.abs(data.PaymentAmount).toFixed(this.ls.restaurantWidgetSettings$.value.NumberOfFractionalDigits) + \".
\" + this.ts.instant('severalDaysMessage');\r\n }\r\n this.showFinancialEffectPopUp(this.popUpMessage);\r\n break;\r\n case 10: // NoShowFeeUpdated\r\n this.popUpMessage = this.ts.instant('IfDonotShowYouWillBeCharged') + ' ' + this.ls.restaurantWidgetSettings$.value.OperationCurrency + data.TotalAmount.toFixed(this.ls.restaurantWidgetSettings$.value.NumberOfFractionalDigits);\r\n this.showFinancialEffectPopUp(this.popUpMessage);\r\n break;\r\n case 11: // Authorize\r\n\r\n if (data.TotalAmount > 0) {\r\n this.popUpMessage = this.ts.instant('CardUsedAtBookingWillBeChargedAtMealTime') + ' ' + this.ls.restaurantWidgetSettings$.value.OperationCurrency + data.TotalAmount.toFixed(this.ls.restaurantWidgetSettings$.value.NumberOfFractionalDigits);\r\n this.showFinancialEffectPopUp(this.popUpMessage);\r\n }\r\n break;\r\n case 12: // Authorize updated\r\n\r\n if (data.TotalAmount > 0) {\r\n this.popUpMessage = this.ts.instant('CardUsedAtBookingWillBeChargedAtMealTime') + ' ' + this.ls.restaurantWidgetSettings$.value.OperationCurrency + data.TotalAmount.toFixed(this.ls.restaurantWidgetSettings$.value.NumberOfFractionalDigits);\r\n this.showFinancialEffectPopUp(this.popUpMessage);\r\n }\r\n break;\r\n }\r\n this.bindPaymentAmountAndMessage(data.RatePlanAmount.toFixed(this.ls.restaurantWidgetSettings$.value.NumberOfFractionalDigits), data.SpecialMealAmount.toFixed(this.ls.restaurantWidgetSettings$.value.NumberOfFractionalDigits), data.TotalAmount.toFixed(this.ls.restaurantWidgetSettings$.value.NumberOfFractionalDigits)) // need to check how to find deferred payment mode\r\n if (this.rs.reservationAttemptInfo.ShouldCreditCardBeEntered) {\r\n this.isUserAllowedToclickConfirm = false;\r\n this.confirmButton.disbaledproperity = true;\r\n this.LoadIframe(this.rs.reservationAttemptInfo.CreditCardIFrameURL);\r\n }\r\n else {\r\n if (!data.RedirectUrl) {\r\n this.isUserAllowedToclickConfirm = true;\r\n this.confirmButton.disbaledproperity = this.ls.restaurantWidgetSettings$.value.WidgetCustomization.ConfirmationVia == ConfirmationVia.Both && !this.guestDetailsForm.value.primaryGuest['reservationConfirmationByEmail'] && !this.guestDetailsForm.value.primaryGuest['reservationConfirmationBySMS'];\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n openDeleteConfirmationPopUp(index) {\r\n this.secondaryGuestTobeDeletedIndex = index;\r\n const popUpMessage = [{\r\n confirmationMessage: this.ts.instant('removeGuestConfirmation'),\r\n dialogTitle: this.ts.instant('removeSecondaryGuest'),\r\n showAlert: true\r\n }];\r\n const componentDetails: ComponentDetails = Utilities.setComponentDetails(PopupMessageComponent, 'small', '', popUpMessage,\r\n popUpMessage[0].dialogTitle);\r\n this.deleteSecondaryGuestPopUpRef = this.openCustomPopup(componentDetails, ComponentTypes.deleteSecondaryGuest, '450px', '300px', true, '', this.ts.instant('Yes'),\r\n this.ts.instant('No'), true)\r\n }\r\n\r\n deleteSecondaryGuestConfirmed() {\r\n this.guestData.splice(this.secondaryGuestTobeDeletedIndex, 1);\r\n this.guestData.forEach((data, index) => {\r\n if (index != 0) {\r\n this.guestData[index] = this.ts.instant('secondaryGuest') + (index + 1);\r\n }\r\n });\r\n this.rs.secondaryContactList = this.buildSecondaryContactList();\r\n this.rs.secondaryContactList.splice((this.secondaryGuestTobeDeletedIndex - 1), 1);\r\n let data = _.cloneDeep(this.guestData);\r\n this.guestData = [];\r\n this.guestData = _.cloneDeep(data);\r\n setTimeout(() => {\r\n this.components.toArray().forEach((formData, index) => {\r\n if (index > 0) {\r\n this.bindContactsToForm(formData.form, this.rs.secondaryContactList[index - 1]);\r\n }\r\n });\r\n this.rs.secondaryContactList = this.buildSecondaryContactList();\r\n }, 1);\r\n }\r\n\r\n showFinancialEffectPopUp(Message: string) {\r\n const popUpMessage = [{\r\n confirmationMessage: Message,\r\n dialogTitle: this.ts.instant('paymentInfo'),\r\n showAlert: true\r\n }];\r\n const componentDetails: ComponentDetails = Utilities.setComponentDetails(PopupMessageComponent, 'small', '', popUpMessage,\r\n popUpMessage[0].dialogTitle);\r\n this.financialPopUpRef = this.openCustomPopup(componentDetails, ComponentTypes.financialEffectCalculation, '450px', '300px', true, this.ts.instant('No'), this.ts.instant('ok'),\r\n this.ts.instant('cancel'), true)\r\n }\r\n\r\n isSelectedMealDefferedPayment(): boolean {\r\n let isDeffered = false;\r\n if (this.rs.reservationFormGroup.get('reservationDetailsForm').get('specialMeal').value) {\r\n isDeffered = (this.rs.reservationFormGroup.get('reservationDetailsForm').get('specialMeal').value.DoesRequirePrepayment && !this.rs.reservationFormGroup.get('reservationDetailsForm').get('specialMeal').value.ChargeOnBooking) ? true : false;\r\n }\r\n return isDeffered;\r\n }\r\n\r\n showAuthRefundPopup() {\r\n const popUpMessage = [{\r\n dialogTitle: this.ts.instant('refundStrategy'),\r\n popupInput: this.RefundData,\r\n disabled: true\r\n }];\r\n\r\n let financialData = {\r\n FinancialData: this.financialData,\r\n OperationCurrency: this.ls.restaurantWidgetSettings$.value.OperationCurrency\r\n }\r\n\r\n const componentDetails: ComponentDetails = Utilities.setComponentDetails(AuthRefundPopupComponent, 'small', '', financialData,\r\n popUpMessage[0].dialogTitle);\r\n this.AuthrefundPopupRef = this.openCustomPopup(componentDetails, ComponentTypes.AuthRefundPopup, '700px', '700px', true, '', this.ts.instant('proceed'),\r\n this.ts.instant('close'), true, '', '', false, true)\r\n this.isAuthRefund = true;\r\n }\r\n\r\n enableIframe() {\r\n if(this.guestDetailsForm.valid) {\r\n this.isFormValid = this.guestDetailsForm.valid;\r\n }\r\n else {\r\n this.isFormValid = false;\r\n for(let control in this.guestDetailsForm.get('primaryGuest')['controls']) {\r\n this.guestDetailsForm.get('primaryGuest')['controls'][control].markAsDirty();\r\n this.guestDetailsForm.get('primaryGuest')['controls'][control].markAsTouched();\r\n this.guestDetailsForm.get('primaryGuest')['controls'][control].updateValueAndValidity();\r\n }\r\n var formDiv = document.getElementsByClassName('guest-details__reservation-data')[0];\r\n if(formDiv) {\r\n formDiv.scrollIntoView({ behavior: \"smooth\", block: \"center\", inline: \"nearest\" });\r\n formDiv = null;\r\n }\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.subscriptions) {\r\n this.subscriptions.unsubscribe();\r\n }\r\n }\r\n}\r\n\r\n","
\r\n
\r\n \r\n \r\n {{this.ls.restaurantWidgetSettings$.value.WidgetCustomization.ConfirmationMessage}}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {{rs.reservationConfirmationText | translate}}\r\n
\r\n
\r\n
\r\n {{ls.restaurantWidgetSettings$.value.PropertyType | translate}}\r\n {{ls.restaurantWidgetSettings$.value.RestaurantName}}\r\n
\r\n
\r\n {{'date' | translate}}\r\n {{reservationFor | formatSettingsDate:\r\n ls.restaurantWidgetSettings$.value.DateFormat}}\r\n
\r\n
\r\n {{'time' | translate}}\r\n {{reservationFor | localizeDate: 'LT'}}\r\n
\r\n
\r\n {{'partySize' | translate}}\r\n {{partySize}}\r\n
\r\n
\r\n \r\n 0 && rs.additionalGuestPage && ls.restaurantWidgetSettings$.value.WidgetCustomization.AllowAdditionalGuestDetails\"\r\n (valueChange)=\"additionalGuest($event)\">\r\n \r\n
\r\n
\r\n
\r\n
\r\n
0 && !reservationCancelled\"\r\n [ngStyle]=\"{'background-color':ls.restaurantWidgetSettings$.value.WidgetCustomization.MaincontentBottomBackgroundColor}\">\r\n
{{'PaymentSummary' | translate}}
\r\n\r\n
\r\n\r\n
0 && !selectedMeal\">\r\n {{specialMealName}}\r\n {{ls.restaurantWidgetSettings$.value.OperationCurrency}}\r\n {{specialMealAmount\r\n | currencyDecimalFormatter}}\r\n
\r\n\r\n 0 && selectedMeal && ls.editPartyData$.value.CoverTypeQuantities\">\r\n {{specialMealName}}\r\n
0\">\r\n
\r\n {{coverType.Covers}} x {{coverType.CoverTypeName}}\r\n {{ls.restaurantWidgetSettings$.value.OperationCurrency}} {{selectedMeal\r\n |\r\n coverTypePriceFilter: coverType | currencyDecimalFormatter}}\r\n
\r\n
\r\n
\r\n\r\n
0\">\r\n {{seatingTypeName}}\r\n {{ls.restaurantWidgetSettings$.value.OperationCurrency}} {{ratePlanAmount |\r\n currencyDecimalFormatter}}\r\n
\r\n\r\n
0) && !(specialMealAmount>0) && noShowFeeAmount > 0 \">\r\n {{'noShowFee' | translate}}\r\n {{ls.restaurantWidgetSettings$.value.OperationCurrency}} {{noShowFeeAmount\r\n |\r\n currencyDecimalFormatter}}\r\n
\r\n\r\n\r\n\r\n\r\n
\r\n
\r\n {{'SubTotal' | translate}}\r\n {{ls.restaurantWidgetSettings$.value.OperationCurrency}} {{ subTotal | currencyDecimalFormatter}} \r\n
\r\n\r\n
\r\n
\r\n {{'taxAmount' | translate}}\r\n {{ls.restaurantWidgetSettings$.value.OperationCurrency}} {{taxAmount | currencyDecimalFormatter}}\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n {{'serviceCharges' | translate}}\r\n {{ls.restaurantWidgetSettings$.value.OperationCurrency}} {{serviceCharge | currencyDecimalFormatter}}\r\n
\r\n
\r\n
\r\n
\r\n {{'taxOnserviceCharge' | translate}}\r\n {{ls.restaurantWidgetSettings$.value.OperationCurrency}} {{serviceChargeTax | currencyDecimalFormatter}}\r\n
\r\n
\r\n
\r\n
\r\n {{'grandTotal' | translate}}\r\n {{'inclTaxes' | translate}}\r\n \r\n {{ls.restaurantWidgetSettings$.value.OperationCurrency}} {{totalAmount | currencyDecimalFormatter}} \r\n
\r\n
\r\n {{'totalAmount' | translate}}\r\n {{ls.restaurantWidgetSettings$.value.OperationCurrency}} {{totalAmount | currencyDecimalFormatter}} \r\n
\r\n\r\n
\r\n\r\n
\r\n
\r\n
{{'guestInfo' | translate}}
\r\n
\r\n
\r\n {{'name' | translate}}\r\n {{ls.editPartyData$.value.Contact.FirstName}}\r\n {{ls.editPartyData$.value.Contact.LastName}}\r\n
\r\n
\r\n {{'emailText' | translate}}\r\n {{ls.editPartyData$.value.Contact.EmailAddress}}\r\n
\r\n
\r\n {{'phoneText' | translate}}\r\n {{ls.editPartyData$.value.Contact.PhoneNumber}}\r\n
\r\n
\r\n
{{'reservationInfo' | translate}}
\r\n
\r\n
\r\n {{ls.restaurantWidgetSettings$.value.PropertyType | translate}}\r\n {{ls.restaurantWidgetSettings$.value.RestaurantName}}\r\n
\r\n
\r\n {{'phoneText' | translate}}\r\n {{ls.restaurantWidgetSettings$.value.PhoneNumber}}\r\n
\r\n
\r\n {{'address' | translate}}\r\n {{ls.restaurantWidgetSettings$.value.Street1}}{{ls.restaurantWidgetSettings$.value.Street2}},\r\n {{ls.restaurantWidgetSettings$.value.City}}, {{ls.restaurantWidgetSettings$.value.Country}}\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
","import { Component, OnInit, Pipe, PipeTransform, ViewEncapsulation, OnDestroy } from '@angular/core';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { PopupMessageComponent } from 'src/app/shared/components/popup-message/popup-message.component';\r\nimport { ActionControl, buttonTypes, componentName, ComponentTypes, DEFAULT_LANGUAGE_ID } from 'src/app/shared/constants/commonenums';\r\nimport { ButtonValue } from 'src/app/shared/dynamicform/models/common-models';\r\nimport { ComponentDetails } from 'src/app/shared/dynamicform/models/popup.interface';\r\nimport { NewPartyDetailsDTO, PartyPrepaymentState, PartyState, RegisterReservationAttemptResponseDTO, ReservationDTO } from 'src/app/shared/Models/PartyModels';\r\nimport { OperationResultState } from 'src/app/shared/Models/ResultModels';\r\nimport { Utilities } from 'src/app/shared/utilities/utilities';\r\nimport { LayoutService } from '../layout.service';\r\nimport { ReservationService } from '../reservation.service';\r\nimport _ from 'lodash';\r\nimport { DatePipe } from '@angular/common';\r\nimport { PopupService } from 'src/app/shared/services/popup.service';\r\nimport { CoverTypePriceDTO, CoverTypeQuantitiesDTO, operationType, SpecialMealDTO } from 'src/app/shared/Models/WidgetSettingsModels';\r\nimport { Subscription } from 'rxjs';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { environment } from 'src/environments/environment';\r\nimport { GuestService } from 'src/app/shared/services/guest.service';\r\nimport { FormatSettingsDatePipe } from '../../shared/pipes/format-settings-date.pipe'\r\nimport { ActivatedRoute } from '@angular/router';\r\n\r\n@Component({\r\n selector: 'app-confirmation-details',\r\n templateUrl: './confirmation-details.component.html',\r\n styleUrls: ['./confirmation-details.component.scss'],\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class ConfirmationDetailsComponent extends Utilities implements OnInit, OnDestroy {\r\n cancelBtn: ButtonValue;\r\n additionalGuestBtn: ButtonValue;\r\n bookNewReservation: ButtonValue;\r\n modifyBtn: ButtonValue;\r\n partyDetails: any;\r\n guestDetails: any;\r\n partyConfirmationDetails: NewPartyDetailsDTO;\r\n cancelDialogRef: MatDialogRef;\r\n paymentData: RegisterReservationAttemptResponseDTO;\r\n disclaimerPresent: false;\r\n subscriptions: Subscription = new Subscription();\r\n confirmationCode = '';\r\n bookingReferenceId = '';\r\n ratePlanAmount: number;\r\n specialMealAmount: number;\r\n noShowFeeAmount: number;\r\n totalAmount: number;\r\n taxAmount: number;\r\n partySize: number;\r\n reservationFor: string;\r\n environment = environment;\r\n reservationCancelled = false;\r\n seatingTypeName: string;\r\n specialMealName: string;\r\n selectedMeal: SpecialMealDTO;\r\n showImage = true;\r\n isConfirmationMsgHTML = false;\r\n taxes:any =[];\r\n showTaxDetails = false;\r\n serviceCharge: number;\r\n serviceChargeTax: number;\r\n subTotal: number;\r\n displayModifyButton : boolean = true;\r\n displayCancelButton : boolean = true;\r\n constructor(public rs: ReservationService, private ps: PopupService, public dialog: MatDialog, public ls: LayoutService, private datePipe: DatePipe, private ts: TranslateService, public gs: GuestService , public dateFormat: FormatSettingsDatePipe , public route: ActivatedRoute,) {\r\n super(dialog);\r\n }\r\n\r\n ngOnInit(): void {\r\n this.getBookingActions();\r\n this.createActionButton();\r\n this.partyDetails = _.cloneDeep(this.rs.reservationFormGroup.controls.reservationDetailsForm.value);\r\n this.partyConfirmationDetails = this.rs.reservationConfimationDetails;\r\n if (this.ls.restaurantWidgetSettings$.value.WidgetCustomization.ConfirmationMessage) {\r\n let ConfirmationMsg = this.ls.restaurantWidgetSettings$.value.WidgetCustomization.ConfirmationMessage;\r\n this.isConfirmationMsgHTML = this.isHTML(ConfirmationMsg);\r\n }\r\n if (this.rs.additionalGuestRequired > 0 && !this.rs.additionalGuestPage) {\r\n this.rs.additionalGuestPage = true;\r\n }\r\n this.paymentData = this.rs.reservationAttemptInfo;\r\n\r\n this.setReservationData();\r\n //Removed SEAProduction condition for #31642\r\n // this.showImage = environment.SEAProduction && environment.restaurantIds.filter(x => x == this.ls.restaurantWidgetSettings$.value.RestaurantId).length > 0;\r\n this.showImage = environment.restaurantIds.filter(x => x == this.ls.restaurantWidgetSettings$.value.RestaurantId).length > 0;\r\n\r\n\r\n }\r\n\r\n isHTML(str) {\r\n var doc = new DOMParser().parseFromString(str, \"text/html\");\r\n return Array.from(doc.body.childNodes).some(node => node.nodeType === 1);\r\n }\r\n\r\n setReservationData() {\r\n if (this.ls.editPartyData$.value) {\r\n this.rs.primaryContact = _.cloneDeep(this.ls.editPartyData$.value.Contact);\r\n this.rs.secondaryContactList = this.ls.editPartyData$.value.BookingContacts && this.ls.editPartyData$.value.BookingContacts.length > 0 ? _.cloneDeep(this.ls.editPartyData$.value.BookingContacts.filter(bc=>bc.ContactId != this.ls.editPartyData$.value.Contact.Id)) : null;\r\n this.confirmationCode = this.ls.editPartyData$.value.ConfirmationCode;\r\n this.bookingReferenceId = this.ls.editPartyData$.value.BookingReferenceId;\r\n this.partySize = this.ls.editPartyData$.value.Size;\r\n this.reservationFor = this.ls.editPartyData$.value.ReservedFor.toString();\r\n this.setSelectedSeatingType();\r\n this.setSelectedSpecialMeal();\r\n this.taxes = this.ls.editPartyData$.value.TaxAmount;\r\n if (this.ls.editPartyData$.value.PrepaymentState != PartyPrepaymentState.Refunded) {\r\n if ((this.ls.editPartyData$.value.RatePlanAmount > 0 || this.ls.editPartyData$.value.SpecialMealAmount > 0) && (this.ls.editPartyData$.value.PrepaymentState != PartyPrepaymentState.None)) {\r\n this.ratePlanAmount = this.ls.editPartyData$.value.RatePlanAmount;\r\n this.specialMealAmount = this.ls.editPartyData$.value.SpecialMealAmount;\r\n this.taxAmount = this.ls.editPartyData$.value.TaxAmount;\r\n this.serviceCharge = this.ls.editPartyData$.value.TotalServiceChargeAmount;\r\n this.serviceChargeTax = this.ls.editPartyData$.value.TaxOnServiceChargeAmount;\r\n this.totalAmount = this.ls.editPartyData$.value.SpecialMealAmount > 0 || this.ls.editPartyData$.value.RatePlanAmount > 0 ? ((this.ls.editPartyData$.value.RatePlanAmount || 0) + (this.ls.editPartyData$.value.SpecialMealAmount || 0) + Number(this.taxAmount || 0) + Number(this.serviceCharge || 0) + Number(this.serviceChargeTax || 0)) : this.totalAmount;\r\n this.subTotal = Number(this.totalAmount || 0) - (Number(this.taxAmount || 0) + Number(this.serviceCharge || 0) + Number(this.serviceChargeTax || 0));\r\n }\r\n else if (this.ls.editPartyData$.value.PrepaymentState == PartyPrepaymentState.None && this.ls.editPartyData$.value.NoShowFeeAmount > 0) {\r\n this.noShowFeeAmount = this.totalAmount = this.subTotal = this.ls.editPartyData$.value.NoShowFeeAmount;\r\n }\r\n }\r\n if (this.ls.editPartyData$.value.State === PartyState.Cancelled) {\r\n this.rs.reservationConfirmationText = 'reservationCancellationConfirmationText'\r\n this.reservationCancelled = true;\r\n }\r\n else {\r\n if (this.ls.operation == operationType.cancel) {\r\n this.rs.reservationConfirmationText = 'reservationConfirmationText';\r\n this.cancelReservation(operationType.cancel);\r\n }\r\n }\r\n }\r\n }\r\n\r\n setSelectedSpecialMeal() {\r\n if (this.ls.editPartyData$.value.SpecialMealAmount > 0) {\r\n this.specialMealName = this.ls.editPartyData$.value.SpecialMealId > 0\r\n && this.ls.restaurantWidgetSettings$.value.AvailableSpecialMeals.findIndex(x => x.Id == this.ls.editPartyData$.value.SeatingTypeId) > -1 ?\r\n this.ls.restaurantWidgetSettings$.value.AvailableSpecialMeals.filter(x => x.Id == this.ls.editPartyData$.value.SpecialMealId)[0].Name :\r\n this.ls.editPartyData$.value.SpecialMeal && this.ls.editPartyData$.value.SpecialMeal.Name ?\r\n this.ls.editPartyData$.value.SpecialMeal.Name : this.ls.editPartyData$.value.SpecialMealName ?\r\n this.ls.editPartyData$.value.SpecialMealName : this.ts.instant('specialMeal');\r\n\r\n\r\n if (this.ls.editPartyData$.value.SpecialMealId > 0 && this.ls.editPartyData$.value.CoverTypeQuantities && this.ls.editPartyData$.value.CoverTypeQuantities.length > 0) {\r\n this.selectedMeal = this.ls.restaurantWidgetSettings$.value.AvailableSpecialMeals.filter(meal => meal.Id == this.ls.editPartyData$.value.SpecialMealId)[0];\r\n }\r\n }\r\n\r\n }\r\n\r\n setSelectedSeatingType() {\r\n this.seatingTypeName = this.ls.editPartyData$.value.SeatingTypeId > 0\r\n && this.ls.restaurantWidgetSettings$.value.SeatingTypeList.findIndex(x => x.Id == this.ls.editPartyData$.value.SeatingTypeId) > -1 ?\r\n this.ls.restaurantWidgetSettings$.value.SeatingTypeList.filter(x => x.Id == this.ls.editPartyData$.value.SeatingTypeId)[0].Description : this.ts.instant('seatingTypePrice')\r\n }\r\n\r\n getBookingActions(){\r\n this.displayModifyButton = this.ls.restaurantWidgetSettings$.value?.WidgetCustomization?.DisplayModifyButton;\r\n this.displayCancelButton = this.ls.restaurantWidgetSettings$.value?.WidgetCustomization?.DisplayCancelButton;\r\n this.route.queryParams\r\n .subscribe(params => {\r\n console.log(params);\r\n if(params?.actionControl !== null && params?.actionControl !== undefined) {\r\n this.displayModifyButton = Number(params.actionControl) == ActionControl.CanModify || Number(params.actionControl) == ActionControl.CanModifyAndCancel;\r\n this.displayCancelButton = Number(params.actionControl) == ActionControl.CanCancel || Number(params.actionControl) == ActionControl.CanModifyAndCancel;\r\n }\r\n })\r\n }\r\n\r\n createActionButton() {\r\n if(this.displayCancelButton){\r\n this.cancelBtn = {\r\n type: buttonTypes.cancelBtn,\r\n label: 'cancel',\r\n customclass: 'reservation-confirmation__cancel-reservation',\r\n };\r\n }\r\n this.additionalGuestBtn = {\r\n type: buttonTypes.cancelBtn,\r\n label: 'guestDetails',\r\n customclass: 'reservation-confirmation__additional-guest',\r\n icon: 'icon-add'\r\n };\r\n if(this.displayModifyButton){\r\n this.modifyBtn = {\r\n type: buttonTypes.confirmBtn,\r\n label: 'modify',\r\n customclass: 'reservation-confirmation__modify-details',\r\n };\r\n }\r\n this.bookNewReservation = {\r\n type: buttonTypes.cancelBtn,\r\n label: 'bookAnotherReservation',\r\n customclass: 'reservation-confirmation__new-reservation',\r\n };\r\n }\r\n ngAfterViewInit() {\r\n this.subscriptions.add(this.ps.actionEnabled$.subscribe(x => {\r\n if (x == ComponentTypes.cancelReservation) {\r\n this.cancelDialogRef.close();\r\n this.confirmCancelation();\r\n }\r\n }));\r\n\r\n this.subscriptions.add(this.ps.cancelEnabled$.subscribe(x => {\r\n if (x == ComponentTypes.cancelReservation) {\r\n this.ls.operation = operationType.edit;\r\n this.rs.reservationConfirmationText = 'reservationDetainedConfirmationText';\r\n }\r\n }));\r\n }\r\n\r\n modifyReservation(eve) {\r\n\r\n if (this.ls.editPartyData$.value) {\r\n this.resetPage(operationType.edit, this.ls.editPartyData$.value);\r\n }\r\n else {\r\n this.ls.getByToken(this.ls.reservationToken).subscribe(data => {\r\n if (data) {\r\n this.resetPage(operationType.edit, data);\r\n }\r\n });\r\n }\r\n }\r\n\r\n cancelReservation(eve) {\r\n const datePipeString = this.dateFormat.transform(new Date(this.ls.editPartyData$.value.ReservedFor) , this.ls.restaurantWidgetSettings$.value.DateFormat);\r\n this.ts.get('AskCancelReservationConfirmation', { date: datePipeString, locationName: this.ls.restaurantWidgetSettings$.value.RestaurantName }).subscribe(text => {\r\n const popUpMessage = [{\r\n confirmationMessage: text,\r\n dialogTitle: this.ts.instant('reservationCancelTitle'),\r\n showAlert: true\r\n }];\r\n const componentDetails: ComponentDetails = Utilities.setComponentDetails(PopupMessageComponent, 'small', '', popUpMessage,\r\n popUpMessage[0].dialogTitle);\r\n this.cancelDialogRef = this.openCustomPopup(componentDetails, ComponentTypes.cancelReservation, '450px', '300px', true, '', this.ts.instant('Yes'),\r\n this.ts.instant('No'), true)\r\n })\r\n }\r\n\r\n confirmCancelation() {\r\n this.rs.CancelReservation(this.ls.restaurantWidgetSettings$.value.RestaurantId, this.ls.editPartyData$.value.Id, this.ls.language).subscribe(data => {\r\n if (data.State == OperationResultState.Success) {\r\n this.rs.reservationConfirmationText = 'reservationCancellationConfirmationText';\r\n this.gs.setMessageState(this.ts.instant('reservationCancellationText'), 0);\r\n this.reservationCancelled = true;\r\n }\r\n else {\r\n if(data.ValidationMessages && data.ValidationMessages.length > 0){\r\n this.gs.setMessageState(data.ValidationMessages[0].Message, 0);\r\n }\r\n }\r\n });\r\n }\r\n\r\n cancelationInformation() {\r\n const datePipeString = this.dateFormat.transform(new Date(this.ls.editPartyData$.value.ReservedFor) , this.ls.restaurantWidgetSettings$.value.DateFormat);\r\n this.ts.get('cancelReservationConfirmation', { date: datePipeString, locationName: this.ls.restaurantWidgetSettings$.value.RestaurantName }).subscribe(text => {\r\n const popUpMessage = [{\r\n confirmationMessage: text,\r\n dialogTitle: this.ts.instant('reservationCancelTitle'),\r\n showAlert: true\r\n }];\r\n const componentDetails: ComponentDetails = Utilities.setComponentDetails(PopupMessageComponent, 'small', '', popUpMessage,\r\n popUpMessage[0].dialogTitle);\r\n this.openCustomPopup(componentDetails, ComponentTypes.informationPopup, '450px', '300px', true, '', this.ts.instant('Ok'),\r\n '', false)\r\n\r\n });\r\n\r\n\r\n }\r\n\r\n bookReservation(eve) {\r\n this.resetPage(operationType.create);\r\n }\r\n\r\n resetPage(operation: operationType, reservationData?: ReservationDTO) {\r\n this.ls.operation = operation;\r\n this.rs.additionalGuestPage = false;\r\n this.ls.editPartyData = '';\r\n this.ls.operation == operationType.create ? this.ls.editPartyData$.next(null) : (!this.ls.editPartyData$.value && this.ls.editPartyData$.next(reservationData));\r\n this.rs.ispaymentInvolvedInfo = null;\r\n this.rs.reservationAttemptInfo = null;\r\n this.ls.nextButton.next(componentName.reservationDetails);\r\n }\r\n\r\n additionalGuest(eve) {\r\n this.ls.nextButton.next(componentName.guestDetails)\r\n }\r\n\r\n showTaxes(){\r\n this.showTaxDetails = !this.showTaxDetails;\r\n }\r\n \r\n ngOnDestroy() {\r\n if (this.subscriptions) {\r\n this.subscriptions.unsubscribe();\r\n }\r\n }\r\n\r\n}\r\n\r\n\r\n@Pipe({\r\n name: 'coverTypePriceFilter'\r\n})\r\nexport class CoverTypePriceFilter implements PipeTransform {\r\n\r\n transform(selectedMeal: SpecialMealDTO, CoverType: CoverTypeQuantitiesDTO): any {\r\n let price = 0;\r\n let coverTypeSelected = selectedMeal.CoverTypePrices.filter(type => type.Id == CoverType.CoverTypeId)[0];\r\n if (coverTypeSelected) {\r\n price = coverTypeSelected.Price * CoverType.Covers\r\n }\r\n return price;\r\n }\r\n\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-privacy-policy',\r\n templateUrl: './privacy-policy.component.html',\r\n styleUrls: ['./privacy-policy.component.scss']\r\n})\r\nexport class PrivacyPolicyComponent implements OnInit {\r\n\r\n constructor() { }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n}\r\n","
\r\nPrivacy Policy\r\n\r\n
\r\n

\r\n This Agilysys Reserve Privacy Policy (\r\n “Policy”\r\n ) describes the practices Agilysys Reserve NV, LLC, a Delaware limited liability company (\r\n “Agilysys Reserve,” “we,” “our,”\r\n or\r\n “us”\r\n ), observes when collecting, using, and sharing data and other information through our Agilysys Reserve offering (\r\n “Information”\r\n ).\r\n

\r\n

\r\n We offer our Agilysys Reserve services (\r\n “Services”\r\n ) on behalf of restaurants and other businesses that choose to sign-up with Agilysys Reserve for our Services (our\r\n “Customers”\r\n ). Our Services enable our Customers to provide their customers with various online and mobile reservation services.\r\n By using the Services we provide on behalf of any of our Customers, you become a user of our Services (a\r\n “User”\r\n ).\r\n

\r\nYou and other Users may access our Services via:\r\n
    \r\n
  • \r\n The Agilysys Reserve software widgets included on websites of our Customers (our\r\n “Widgets”\r\n ); and\r\n
  • \r\n
  • \r\n The Agilysys Reserve software applications for phones, tablets, and other mobile devices provided by Agilysys Reserve and on\r\n behalf of our Customers (our\r\n “Applications”\r\n ); and\r\n
  • \r\n
  • \r\n Any User-facing Agilysys Reserve websites where we display this Policy (our\r\n “Sites”\r\n ).\r\n
  • \r\n
\r\n

\r\n By using our Widgets, Applications, or Sites (our\r\n “Platform”\r\n ) you consent to the collection and use of your Information by rGuest as described in this Policy.\r\n If you have any questions or concerns regarding this Policy or the Information collection, usage, or sharing\r\n practices applicable to the Platform under this Policy, please contact us at privacy@Agilysys.com. If we need, or\r\n are required, to contact you concerning any event that involves this Policy, your Information, or our Platform we\r\n may do so using the email address, telephone number, or physical mail address we have on file for you.\r\n

\r\n
Summary.
\r\n

Although we encourage you to read this entire Policy, this is a summary of some of the more important aspects of the\r\n Policy:

\r\n
    \r\n
  • This Policy is applicable only to Information collected by and on behalf of rGuest through our own Platform.\r\n This Policy does not apply to Information collected by our Customers or by other third parties outside of our\r\n Platform.
  • \r\n
  • We may collect both Non-Personal Information and Personal Information from you through our Platform. The\r\n Personal Information we obtain from you may also include Sensitive Personal Information.
  • \r\n
  • We will not use or share your Personal Information (including Sensitive Personal Information) except as\r\n permitted by this Policy.
  • \r\n
  • You are permitted to “opt out” of certain uses of your Personal Information under this Policy.
  • \r\n
  • We will take reasonable and appropriate measures to secure your Personal Information, but we make no promise\r\n that your Personal Information will remain secure in all circumstances.
  • \r\n
\r\n
Scope of this Policy.
\r\n

\r\n Our Platform enables Users to access and use the Services we offer on behalf of our Customers in a variety of ways.\r\n We may offer our Services through our own Sites bearing the rGuest name. We also offer our Services through the\r\n websites of our Customers (\r\n “Customer Sites”\r\n ) by way of our Widget. Our Widget is a small software application that is actually included within Customer Sites\r\n enabling us to offer our Services through those Customer Sites. In addition, while we may offer our Services through\r\n our own Application, we may also offer our Services through Applications we provide on behalf of our Customers (\r\n “Customer Applications”\r\n ). These Customer Applications may be provided either under the rGuest name or the name of our Customer. They may\r\n also be listed as “powered by” Agilysys Reserve.\r\n

\r\n

This Policy covers only Information collected through our Platform. It does not\r\n cover Information collected through Customer Sites, CUSTOMER Applications, OR ANY THIRD PARTY WEBSITES OR\r\n APPLICATIONS. when you leave our Platform and use any Customer Site OR CUSTOMER Application, this Policy does not\r\n apply.

\r\n

When you use the Platform to interact with our Customers, other Users, or third parties, you may share your\r\n Information with us or with those Customers, other Users, and third parties. You consent to rGuest facilitating the\r\n sharing of your Information with those Customers, other Users and third parties as you direct through the Platform\r\n in accordance with this Policy.

\r\n

We are not responsible for the privacy practices of our Customers, other Users, or third parties. For information\r\n about what terms may apply to any Information you share with any of our Customers through any Customer Sites or\r\n Customer Applications, or with any third party through other websites or applications, please contact the Customer\r\n or the other third party directly before providing them with Your Information.

\r\n
Types of Information We Collect Through our Platform.
\r\n

The Information we collect about you through our Platform includes both “non-personal” and “personal” Information. We\r\n may also obtain “sensitive” personal information about you through our Platform. For purposes of this Policy:

\r\n

\r\n “Non-Personal Information”\r\n refers to information that may not by itself be reasonably associated with, linked to, or used to identify you. For\r\n example, non user-specific Information regarding your use of the Platform or the operation of the Platform.\r\n

\r\n

\r\n “Personal Information”\r\n refers to information that may be reasonably associated with or linked specifically to you or reasonably allow you\r\n to be personally identified or contacted. For example, Personal Information may include information such as your\r\n first and last name and in certain circumstances your email address, telephone number, or street address, either\r\n alone or in combination with other Information.\r\n

\r\n

\r\n “Sensitive Personal Information”\r\n refers to Personal Information regarding more sensitive areas such as your credit card and certain other financial\r\n information or your precise geolocation information.\r\n

\r\n
Sources of Information.
\r\n

We may collect Information about you through the Platform from a variety of sources, for example:

\r\n

\r\n Directly from You.\r\n We may collect Information about you directly from you when you voluntarily provide it to us through our Platform.\r\n For example, through placing a reservation with one of our Customer’s through our Platform or communicating with us,\r\n our Customers, or other Users through our Platform. We may use any Information you provide to us through the\r\n Platform in accordance with this Policy.\r\n

\r\n

\r\n From Other Users.\r\n We may receive Information about you from other Users when they provide Information through our Platform. For\r\n example, when they communicate with you or with us through our Platform. We may use any Information about you other\r\n Users provide through the Platform in accordance with this Policy.\r\n

\r\n

\r\n From Our Customers.\r\n We may obtain Information about you from our Customers based on your interactions with those Customers. For example,\r\n if you place a reservation with one of our Customers and they collect Information regarding your experience at their\r\n restaurant. We may use any Information about you that we obtain from our other Customers in accordance with this\r\n Policy.\r\n

\r\n

\r\n From Our Vendors.\r\n We may obtain Information about you from the third party vendors that provide services to us. For example, if we\r\n rely on third party services to facilitate emails or other messages sent through our Platform, we may receive\r\n Information about you from those third-parties. We may use any Information about you that we obtain from our third\r\n party vendors in accordance with this Policy.\r\n

\r\n

\r\n From Other Third Parties.\r\n We may obtain Information about you from third parties that have obtained or collected Information about you and\r\n that have the right to provide that Information to us. For example, we may contract with third parties that collect\r\n or obtain information about you or to verify certain information about you. We may use any Information about you we\r\n obtain from these third parties in accordance with the contractual terms we establish with those third parties. Only\r\n if we combine that Personal Information with Information we collect from you under this Policy, will we be required\r\n to use that Personal Information in accordance with this Policy as well.\r\n

\r\n

\r\n From Our Affiliates, Subsidiaries, and Business Units.\r\n We may obtain Information about you from our affiliates and subsidiaries, including companies that we own or\r\n control, that own or control us, or that are under common ownership or control with us, regardless of whether these\r\n entities share the rGuest brand. We may also obtain Information about you from other business units that also offer\r\n websites, applications, or services under the rGuest brand or one of our other brands. We may use any Information\r\n about you that we obtain from our affiliates, subsidiaries or business units in accordance with the terms under\r\n which that Information was collected by that affiliate, subsidiary or business unit. If we combine that Information\r\n with Information we collect under this Policy, then we will use that combined Information in accordance with this\r\n Policy as well.\r\n

\r\n

\r\n Through the Operation of the Platform.\r\n We may collect Information about you automatically when you interact with the Platform. For example, we and service\r\n providers may use “cookies,” “web beacons,” and other automated tracking technology to monitor and collect\r\n Information regarding how you access, use, and interact with the Platform. “Cookies” are commonly used small files\r\n that are stored on your computer or mobile device to help identify you as a unique user of the Platform. “Web\r\n beacons” (also known as “single–pixel” or “clear” GIFs) include electronic images imbedded in the Platform that\r\n allow us to recognize when you visit that area of the Platform.\r\n

\r\n

We and our third party service providers may use cookies, web beacons, and other tracking technology that expire once\r\n you close your browser or log out of the Platform. We may also use technologies that persist and stay on your\r\n computer until you delete them. Most browsers will allow you to erase cookies from your computer or mobile device,\r\n block acceptance of cookies, or receive a warning before a cookie is stored. You may also be able to refuse certain\r\n web beacons by adjusting the settings on your browser or email software. Please refer to your browser or email\r\n software instructions or help screen to learn more about these functions.

\r\n

The computers we use to provide the Platform may also automatically record Information about you. For example, our\r\n web servers may record the Information you enter on the Platform, the areas of the Platform you visit, the services\r\n you use through the Platform, your IP address, or cookies that are set on your browser. We may use any Information\r\n we collect from you automatically through the Platform in accordance with this Policy.

\r\n

Please note that our third party providers also use cookies, web beacons, or other tracking technologies in messages\r\n displayed on or communicated through the Platform. We do not have access to information that would confirm all uses\r\n of cookies, web beacons, or other tracking technology by our third party advertisers and providers.

\r\n
How We Use Information.
\r\n

\r\n Non-Personal Information.\r\n We may use and share any Non-Personal Information we collect through the Platform for any lawful business purpose\r\n without any duty or obligation of accounting or otherwise to you, provided that the Information remains Non-Personal\r\n Information. This will include, by way of example, providing Non-Personal Information to third parties, developing\r\n products, services or other offerings based on Non-Personal Information, or research and analysis of Non-Personal\r\n Information.\r\n

\r\n

\r\n Personal Information.\r\n We may use the Personal Information we collect about you through the Platform for a variety of purposes, for\r\n example:

\r\n
    \r\n
  • Operating and providing Services through the Platform;
  • \r\n
  • Customizing and improving the Services and Platform for you;
  • \r\n
  • Providing maintenance, support, training and service for the Services and Platform;
  • \r\n
  • Providing notices, announcements and other communications to you relating to rGuest, the Platform, or your\r\n Information;
  • \r\n
  • Providing offers for products, services or other offerings to you that we feel may be of interest to you and\r\n enabling third parties that we feel may have products, services or other offerings of interest to you to contact\r\n you as well;
  • \r\n
  • Contacting you for direct marketing purposes regarding products, services and other offerings;
  • \r\n
  • Processing payments made through the Platform;
  • \r\n
  • Developing additional products, services and offerings; and
  • \r\n
  • Research and analysis purposes.
  • \r\n
\r\n\r\n

We may combine and enhance the Personal Information we collect about you through the Platform with Information we\r\n receive from third parties. We may also combine and enhance Personal Information using Non-Personal Information. In\r\n each case, we will treat the combined Information as Personal Information and use it in accordance with this Policy.\r\n

\r\n

We may also use the Personal Information we collect about you through the Platform to generate Non-Personal\r\n Information. When we do so, we will take reasonable measures to ensure that the Non-Personal Information is no\r\n longer personally identifiable and may not later be reasonably associated with, linked to, or used to identify you.\r\n This will include, by way of example, storing the Non-Personal Information separately from any Personal Information.\r\n Once we generate Non-Personal Information from any Personal Information, we will not attempt to again make that\r\n Information into Personal Information (i.e., to make it personally identifiable). However, we may combine and\r\n enhance that Non-Personal Information with other Non-Personal Information (including Non-Personal Information we\r\n obtain third parties) and use the Non-Personal Information in accordance with this Policy.

\r\n

You should not provide any personal information THROUGH the Platform unless you\r\n agree to the use of that information in accordance with this Policy.

\r\n

\r\n Sensitive Personal Information.\r\n We may receive Sensitive Personal Information from you when you agree to provide it to us through the Platform. For\r\n example, when you provide us with credit card or other payment or financial information, allow us to obtain and use\r\n your precise geo-location, or choose to share other Sensitive Personal Information in communications with us. rGuest\r\n will use any Sensitive Personal Information about you that we receive through the Platform solely in accordance with\r\n this Policy to enable the operation of the Platform, the performance of our Services for you, and the exchange of\r\n that Information as directed by you. Note though that rGuest is not responsible for monitoring the Sensitive\r\n Personal Information you choose to exchange with other Users or third parties through the Platform or for the use of\r\n that Information by those other Users or third parties.\r\n

\r\n
How We Share Information.
\r\n

We may share Information about you in a variety of ways, for example:

\r\n

\r\n Affiliates, Subsidiaries, and Business Units.\r\n We may share Information about you with our affiliates and subsidiaries, regardless of whether these entities share\r\n the rGuest brand. We may also share Information about you with other business units that also offer websites,\r\n applications, or services under the rGuest brand or one of our other brands. We will require that our affiliates,\r\n subsidiaries and business units agree to use the Information we share with them in compliance with this Policy.\r\n

\r\n

\r\n Users and Social Sharing.\r\n We may share Information with other Users when you decide to interact and socialize with those Users (or request\r\n that we communicate on your behalf) through the Platform. This may include facilitating communications with other\r\n Users or enabling posting of Information to areas of the Platform accessible by other Users.\r\n

\r\n

\r\n Customers.\r\n We may share Information with our Customers. For example, when you make a reservation with one of our Customers\r\n through the Platform.\r\n

\r\n

\r\n Business Partners.\r\n We may share Information with business partners for which we collect Information through the Platform. We will work\r\n with our business partners to provide notice concerning the purpose for which any Personal Information is being\r\n collected on behalf of any partner. Unless we otherwise notify you, any information we collect on behalf of a\r\n business partner will be in accordance with this Policy.\r\n

\r\n

\r\n Service Providers.\r\n We may share Information we collect about you with third parties that help us provide any portion of the Platform.\r\n For example, we may use third parties to: (a) design, develop, host, maintain, or manage the Platform; (b) provide\r\n us with content for the Platform; (c) assist us with providing emails, text messages or other communications to you;\r\n (d) analyze Information; (e) host or manage our databases; (f) develop or offer additional products, services or\r\n offerings; or (g) provide other services to us relating to the Platform on an outsourced basis, for example, payment\r\n processing or identity validation. We require that these third parties agree to use the Information we share with\r\n them only to perform their obligations to us and to treat all Personal Information they receive from us in\r\n compliance with this Policy.\r\n

\r\n

\r\n Law Enforcement.\r\n We may share Information with law enforcement agencies if we reasonably believe unlawful activities have occurred or\r\n the Information may aid in an ongoing investigation. We may also share Information with law enforcement if we\r\n determine, in our sole judgment, that you have violated our agreements or policies or that the release of your\r\n Information may protect the rights, property, interests, or safety of rGuest or any third party.\r\n

\r\n

\r\n Legal Processes.\r\n We may share Information as required by, or permitted by, law, whether in response to subpoenas, court orders, other\r\n legal processes, or as we believe necessary to exercise our legal rights, including to defend against potential or\r\n actual legal claims brought against us.\r\n

\r\n

\r\n Business Transactions.\r\n If we transfer ownership or control of any portion of Agilysys Reserve or the Platform to a third party, whether or not\r\n in the context of an acquisition, merger, or reorganization, we may transfer Information that third party, provided\r\n that the use of any of your Personal Information by that third party remains subject to the terms of this Policy.\r\n

\r\n
Choice and Opt-out.
\r\n

We provide you with a choice whether to receive certain messages through the Platform and from rGuest. We also may\r\n give you the opportunity to “opt-out” of having your Personal Information shared for certain purposes permitted by\r\n this Policy.

\r\n

If you no longer wish to receive certain messages from rGuest or to have your Personal Information shared by rGuest\r\n in the manner permitted by this Policy, you may seek to opt-out of receiving those messages or having your Personal\r\n Information shared in that manner. In some cases, messages and sharing of certain Information are necessary to the\r\n operation of the Platform. If you wish to opt-out of receiving these messages or of sharing your Personal\r\n Information in this manner, rGuest may be required to limit or cancel your access to the Platform.

\r\n

All opt-out requests made to rGuest can be made as indicated through the Platform or contacting rGuest as described\r\n above. Note that it may take up to 10 business days for rGuest to remove contact information from our lists, so\r\n messages from us may continue for a time after a removal request is made.

\r\n
Security.
\r\n

rGuest understands that the security of your Personal Information is important and is committed to protect and secure\r\n your Personal Information. Despite our commitment, no security system can be 100% effective and we cannot guarantee\r\n that your Information will be secure in all situations. We will nonetheless take all reasonable and appropriate\r\n steps to insure the safety and security of your Personal Information. This includes using industry standard security\r\n measures to protect the loss, misuse, and unintended alteration of the Personal Information under our control. For\r\n example, our policy is that only those individuals who need your Personal Information to perform a specific job for\r\n us are granted access to that Personal Information. Likewise, all employees and contractors are kept up-to-date on\r\n our security and privacy practices. Finally, the servers that we store personally identifiable information on are\r\n kept in a secure environment.

\r\n
Additional Terms.
\r\n

\r\n Children.\r\n The Platform is intended for use only by individuals 18 years of age and older and thus is not directed to children\r\n under 13 years of age. rGuest does not knowingly solicit or collect personal information from children under 13\r\n years of age.\r\n

\r\n

\r\n Do Not Track.\r\n Certain web browsers and other devices you may use to access the Platform may permit you to indicate your preference\r\n that you do not wish to be “tracked” online. At this time we do not modify your experience on the Platform, or\r\n modify the Information we collect from you through the Site or Platform, based on whether such a preference is\r\n indicated.\r\n

\r\n

\r\n Review and Update of Information.\r\n While rGuest takes reasonable steps to ensure that the Personal Information we collect from you through the Platform\r\n is reliable for its intended use, accurate, complete, and current, we rely on you to update and correct your\r\n Personal information. Please contact us as described above to review, update, or change any of your Personal\r\n information collected through the Platform.\r\n

\r\n

\r\n Your California Privacy Rights.\r\n California law provides that California residents have a right to request that businesses tell them how their\r\n personal information has been shared with third parties for use in direct marketing purposes. There is an exception\r\n to this requirement for businesses that have adopted and disclosed, in their privacy policy, a policy of not\r\n disclosing a person’s Personal Information to third parties for use in direct marketing purposes if that person has\r\n exercised an option to opt-out of the disclosure of their Personal Information to third parties for such purposes.\r\n We have adopted a policy of allowing you to opt-out of the disclosure of your Personal Information to third parties\r\n for direct marketing purposes and thus fall within this exception. Instructions for opting out can be found in the\r\n section of this Policy entitled “Choice and Opt-Out.”\r\n

\r\n

\r\n Notification of Changes.\r\n We may notify you of any changes to this Policy by way of an email or by posting on the Platform. Changes to this\r\n Policy will be effective 30 days following such notice. Your continued use of the Platform after any change has\r\n become effective will constitute your acceptance of that change. Unless we seek and receive consent from you, we\r\n will use the Personal Information about you we collect through the Platform in accordance with the version of this\r\n Policy effective when the Personal Information was last collected.\r\n

\r\n

Revision Date: September 9, 2014

\r\n
\r\n\r\n
","import { Component, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-terms-of-use',\r\n templateUrl: './terms-of-use.component.html',\r\n styleUrls: ['./terms-of-use.component.scss']\r\n})\r\nexport class TermsOfUseComponent implements OnInit {\r\n\r\n constructor() { }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n}\r\n","
\r\n Terms of Use\r\n
\r\n

\r\n This Agilysys Reserve Terms of Use (\r\n “Agreement”\r\n ) are agreed to between Agilysys Reserve NV, LLC, a Delaware limited liability company (\r\n “Agilysys Reserve,” “we,” “our,”\r\n or\r\n “us”\r\n ) and you, or, if you represent an entity or other organization, that entity or organization (in either case\r\n “You”\r\n ).\r\n

\r\n

\r\n We offer the Agilysys Reserve restaurant reservation services (our\r\n “Services”\r\n ) on behalf of the restaurant or other business operating the website You are visiting right now (our\r\n “Customer”\r\n ). Our Services are offered through the Agilysys Reserve software widget (our\r\n “Widget”\r\n ) included on our Customer’s website (the\r\n “Customer Site”\r\n ). By choosing to include our Widget on the Customer Site, our Customer has enabled the Customer Site to provide our Services to enable You and other visitors to place reservations with the Customer through the Customer Site (\r\n “Reservations”\r\n ).\r\n

\r\n

\r\n This Agreement includes all terms and conditions below and governs Your use of the Widget to access our Services and Your use of our Services through the Widget. By using the Widget to access our Services, You become a user of our Services (a\r\n “User”\r\n ) and agree to be bound by the terms of this Agreement.\r\n

\r\n

\r\n You enter into this Agreement as of the earliest date You first access or use the Widget or the Services (the\r\n “Effective Date”\r\n ). This Agreement applies to the Widget and all Services available through the Widget. This Agreement is the complete and exclusive agreement between You and Agilysys Reserve regarding Your access to and use of the Widget and all Services. This Agreement supersedes any prior agreement or proposal, oral or written, and any other communications between You and Agilysys Reserve relating to Your use of the Widget and any Services.\r\n

\r\n

\r\n PLEASE READ THIS AGREEMENT CAREFULLY BEFORE USING THE WIDGET OR ANY SERVICES, AS THEY AFFECT YOUR LEGAL RIGHTS AND OBLIGATIONS. BY ACCESSING AND/OR USING THE WIDGET OR ANY SERVICES, YOU ARE AGREEING TO COMPLY WITH THIS AGREEMENT.\r\n

\r\n

\r\n THIS AGREEMENT REQUIRES YOU TO AGREE TO ARBITRATE DISPUTES RATHER THAN GOING TO COURT, GRANT US CERTAIN RIGHTS AND LICENSES, PROVIDE US CERTAIN INDEMNITIES, WAIVE CERTAIN OF YOUR RIGHTS AND REMEDIES, AND LIMIT OUR LIABILITY AND OBLIGATIONS TO YOU. READ THEM CAREFULLY AND DO NOT USE THE WIDGET OR SERVICES IF YOU DO NOT AGREE WITH THESE TERMS.\r\n

\r\n
    \r\n
  1. \r\n ELIGIBILITY.\r\n The Widget and all Services are intended for use by Users 18 years of age and older. If You are not 18 years of age or older, You agree not to access or use the Widget or any Services. You agree not to allow any individual under 18 years of age to access or use the Widget, whether or not You are the parent or guardian of that individual.\r\n
  2. \r\n
  3. \r\n OUR CUSTOMER AND THE CUSTOMER SITE.\r\n Our Widget is a small software application that is actually included within the Customer Site. Our Widget enables us to offer You access to our Services on behalf of our Customer through the Customer Site. We do not operate, control, or endorse, in any respect, the Customer Site or any content, materials, or information found on the Customer Site. You assume sole responsibility for Your use of the Customer Site. We are not responsible or liable to You for any loss or damage of any sort incurred as a result of Your dealings with any Customer or the Customer Site. THIS AGREEMENT COVERS ONLY THE OPERATION OF OUR WIDGET AND OUR SERVICES. IT DOES NOT COVER THE CUSTOMER SITE OR ANY OTHER SERVICES OFFERED BY OUR CUSTOMER OR ANY THIRD PARTY THROUGH THE CUSTOMER SITE. WHEN YOU LEAVE OUR WIDGET AND USE ANY PORTION OF THE CUSTOMER SITE, THIS AGREEMENT DOES NOT APPLY. FOR THE TERMS AND CONDITIONS APPLICABLE TO THE CUSTOMER SITE, PLEASE REVIEW THE CUSTOMER SITE OR CONTACT OUR CUSTOMER. If there is a dispute between You and the Customer, You acknowledge and agree that we are under no obligation to become involved. You hereby release Agilysys Reserve and its officers, directors, employees, parents, partners, successors, agents, affiliates, subsidiaries, and their related companies from claims, demands, and damages of every kind or nature arising out of, relating to, or in any way connected with any such dispute.\r\n
  4. \r\n
  5. \r\n MODIFICATIONS.\r\n We reserve the right, at any time, to modify the Widget and any portion of the Services, with or without notice to You, by making those modifications available through the Widget. We also reserve the right, at any time, to modify the terms of this Agreement. We will inform You of the presence of any changes to this Agreement by posting those changes on the Widget or by providing You with notice through the Widget. Any modifications will be effective the next time You place a Reservation through the Widget, except in the case of a legally required modification which will be effective upon posting. You may terminate this Agreement as set forth below if You object to any such modifications. However, You will be deemed to have agreed to any and all modifications through Your continued use of the Widget or any Services following such notice.\r\n
  6. \r\n
  7. \r\n ACCESS AND USE.\r\n Access to the Widget, including, without limitation, all Widget Content (as defined below), is provided for Your information and personal, non-commercial use only. When using the Widget, You agree to comply with all applicable federal, state, and local laws. Except as expressly permitted in this Agreement, You may not use, reproduce, distribute, create derivative works based upon, publicly display, publicly perform, publish, transmit, or otherwise exploit any Widget Content for any purpose whatsoever without obtaining prior written consent from us or, in the case of third-party content, its respective owner.\r\n
  8. \r\n
  9. \r\n RESERVATIONS.\r\n The purpose of the Widget is to assist You in placing Reservations with our Customer. Any Reservation You place or attempt to place through the Widget is subject to all applicable standard terms and policies of our Customer in addition to the terms of this Agreement. You agree that all requests for Reservations through the Widget, and all information You provide in connection with any Reservation, will be true, accurate, current, and complete. In response to Your online request for a Reservation, the Widget will contact the applicable Customer directly to secure the Reservation. The availability of the Reservation is determined at the time of Your request and is subject to the schedule determined by our Customer. Any fee required to be paid in connection with placing a Reservation (\r\n “Fee”\r\n ) is non-refundable to You in all events and all Reservations are non-transferable. Any rescheduling of a Reservation is permitted only if allowed under the applicable policies of our Customer and is subject to availability and all applicable Fees imposed by our Customer under its applicable policies. It is Your sole responsibility to honor the Reservation You have made by arriving at the Restaurant on time (and subject to any arrival policy of our Customer). By using the Widget, You acknowledge and agree: (1) that You waive any claim against us due to Your failing to show up for your Reservation or failing to reschedule any Reservation You cannot meet; and (2) that any Fee paid by You in connection with Your Reservation is non-refundable under any and all circumstances. You acknowledge and agree that You may receive periodic emails from us as a result of Your use of the Widget, including emails regarding Your reservations, Your use of the Widget, or any current or future Promotions.\r\n
  10. \r\n
  11. \r\n PROMOTIONS.\r\n Any discount, offer or other promotion (\r\n “Promotion”\r\n ) offered in connection with any Reservation is promotional in nature and is issued by the participating Customer through Agilysys Reserve as a service provider to the Customer. Each Customer is the holder and issuer of the Promotion pertaining to that Customer's business. Under no circumstances shall Agilysys Reserve be deemed the holder, issuer or seller of any of the Promotion. As the holder and issuer of a Promotion pertaining to its business, the Customer is solely responsible for the value and redemption of such Promotion and for any and all bodily injury, illness, damages, claims, liabilities and costs suffered by or relating to any user and the compliance with all laws, including, without limitation, unclaimed property and escheatment laws relating to the Promotion. The law applicable to the Promotion shall be the law of the state where the Customer interaction with the User occurs. Except as expressly provided in a Promotion or as allowed by the Customer and as permitted by applicable law, all Promotions: (a) are valid for dine in only; (b) may not be used for alcohol, prior balances, tips or gratuities or other fees; and (c) do not include sales, value added or use taxes, which may be charged to You separately by the Customer at the time You redeem the Promotions. Any attempted redemption of a Promotion in violation of these terms and conditions will render the Promotion void. In the event of a conflict between these terms and conditions and the actual Promotion, the Promotion itself will control.\r\n
  12. \r\n
  13. \r\n RESTRICTIONS.\r\n Except as expressly permitted in this Agreement or applicable additional terms or policies provided by our Customer, You may not: (1) remove, alter, cover, or distort any copyright, trademark, or other proprietary rights notices on the Widget or any Widget Content; (2) circumvent, disable or otherwise interfere with security-related features of the Widget, including, without limitation, any features that prevent or restrict use or copying of any content or enforce limitations on the use of the Widget or Widget Content; (3) use an automatic device (such as a robot or spider) or manual process to copy or \"scrape\" the Widget or Widget Content for any purpose without the express written permission of Agilysys Reserve, frame the Widget or Widget Content except to the extent we have given You explicit permission to do so, or use any of our trademarks as meta tags;(4) collect or harvest any personally identifiable information from the Widget, including, without limitation, user names, passwords, e-mail addresses; (5) solicit other users to join or become members of any commercial online service or other organization without our prior written approval; (6) attempt to interfere with, or interfere with, the proper working of the Widget or impair, overburden, or disable the same; (7) decompile, reverse engineer, disassemble, modify or attempt to discover any Widget source code or object code; (8) use network-monitoring software to determine the architecture of, or extract usage data from, the Widget; (9) encourage conduct that violates any local, state or federal law, either civil or criminal, or impersonate another user, person, or entity; (10) use the Widget Content in a manner that suggests an association with us or any of our products or services, Customers or Customer services; (11) violate U.S. export laws, including, without limitation, violations of the Export Administration Act and the Export Administration Regulations administered by the Department of Commerce; or (12) engage in any conduct that restricts or inhibits any other user from using or enjoying the Widget or that violates this Agreement or applicable additional terms or policies provided by our Customer. You agree to cooperate fully with Agilysys Reserve to investigate any suspected or actual activity that is in breach of this Agreement.\r\n
  14. \r\n
  15. \r\n INTELLECTUAL PROPERTY.\r\n The Widget, (including past, present and future versions), all Services provided through the Widget, and all included content (and any derivative works or enhancements of the same), including, but not limited to, all layout, text, illustrations, instructions, files, images, software, scripts, graphics, photos, sounds, information, materials, technology, documentation, interactive features, the \"look and feel\" of the Widget, and any and all copyrightable material (including source and object code) (collectively, the\r\n \"Widget Content\"\r\n ), and all intellectual property rights to the same, are owned or controlled by us, our Customers, our licensors, or both. Additionally, all trademarks, service marks, trade names, trade identities and trade dress that may appear on the Widget are owned by us, our Customers, our licensors, or both. Except for the limited use rights granted to You in this Agreement, You shall not acquire any right, title or interest in the Widget or any Widget Content. Any rights not expressly granted in this Agreement are expressly reserved.\r\n
  16. \r\n
  17. \r\n WIDGET CONTENT & THIRD PARTY WEBSITES.\r\n We provide the Widget, including, without limitation, Widget Content for promotional purposes only. In all instances, it is Your responsibility to evaluate the accuracy, timeliness, completeness, or usefulness of Widget Content. Under no circumstances will we be liable for any loss or damage caused by Your reliance on any Widget Content.\r\n
  18. \r\n
  19. \r\n INDEMNIFICATION.\r\n You agree to defend, indemnify and hold harmless Agilysys Reserve and its officers, directors, employees, parents, partners, successors, agents, distribution partners, affiliates, subsidiaries, and their related companies from and against any and all claims, liabilities, losses, damages, obligations, costs and expenses (including reasonable attorneys' fees and costs) arising out of, related to, or that may arise in connection with: (1) Your access to or use of the Widget and all Services; (2) all Promotions; (3) any actual or alleged violation or breach by You of this Agreement; (3) any actual or alleged breach of any representation, warranty, or covenant that You have made to us; or (4) Your acts or omissions. You agree to cooperate fully with us in the defense of any claim that is the subject of Your obligations hereunder.\r\n
  20. \r\n
  21. \r\n DISCLAIMERS.\r\n YOU EXPRESSLY AGREE THAT USE OF THE WIDGET AND ALL SERVICES IS AT YOUR SOLE RISK. THE WIDGET AND SERVICES, INCLUDING ALL WIDGET CONTENT, ARE PROVIDED ON AN \"AS IS\" AND \"AS AVAILABLE\" BASIS, \"WITH ALL FAULTS,\" AND WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED. WITHOUT LIMITING THE FOREGOING AND TO THE FULLEST EXTENT PERMITTED BY LAW, Agilysys Reserve AND ITS OFFICERS, DIRECTORS, EMPLOYEES, PARENTS, PARTNERS, SUCCESSORS, AGENTS, DISTRIBUTION PARTNERS, AFFILIATES, SUBSIDIARIES, AND THEIR RELATED COMPANIES DISCLAIM ANY AND ALL WARRANTIES, WHETHER EXPRESS, IMPLIED, OR STATUTORY, INCLUDING ANY WARRANTIES OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. Agilysys Reserve DOES NOT REPRESENT OR WARRANT THAT THE WIDGET OR ANY SERVICES WILL BE ACCURATE OR RELIABLE, SECURE, UNINTERRUPTED, TIMELY, OR ERROR-FREE.\r\n
  22. \r\n
  23. \r\n LIMITATION ON LIABILITY.\r\n UNDER NO CIRCUMSTANCES SHALL Agilysys Reserve OR ITS OFFICERS, DIRECTORS, EMPLOYEES, PARENTS, PARTNERS, SUCCESSORS, AGENTS, DISTRIBUTION PARTNERS, AFFILIATES, SUBSIDIARIES, OR THEIR RELATED COMPANIES BE RESPONSIBLE OR LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL, ECONOMIC, PUNITIVE OR EXEMPLARY DAMAGES (EVEN IF FORESEEABLE OR IF Agilysys Reserve HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES), WHETHER UNDER ANY CONTRACT, NEGLIGENCE, STRICT LIABILITY, TORT OR OTHER LEGAL THEORY, ARISING OUT OF, RELATING TO, OR IN ANY WAY CONNECTED WITH THIS AGREEMENT OR THE WIDGET OR ANY SERVICES. YOUR SOLE REMEDY FOR DISSATISFACTION WITH THE WIDGET OR ANY SERVICES, INCLUDING, WITHOUT LIMITATION, THE WIDGET CONTENT, IS TO STOP USING THE WIDGET. SUCH LIMITATION SHALL ALSO APPLY WITH RESPECT TO DAMAGES INCURRED BY REASON OF SERVICES RECEIVED THROUGH THE WIDGET.\r\n NOTWITHSTANDING ANYTHING TO THE CONTRARY CONTAINED HEREIN, IN NO EVENT SHALL THE TOTAL CUMULATIVE LIABILITY OF Agilysys Reserve AND ITS OFFICERS, DIRECTORS, EMPLOYEES, PARENTS, PARTNERS, SUCCESSORS, AGENTS, DISTRIBUTION PARTNERS, AFFILIATES, SUBSIDIARIES, AND THEIR RELATED COMPANIES EXCEED $10. FURTHERMORE, YOU AGREE THAT ANY CAUSE OF ACTION ARISING OUT OF, RELATING TO, OR IN ANY WAY CONNECTED WITH THE WIDGET, ANY SERVICES, OR THIS AGREEMENT MUST COMMENCE WITHIN 1 YEAR AFTER THE CAUSE OF ACTION ACCRUES; OTHERWISE, SUCH CAUSE OF ACTION SHALL BE PERMANENTLY BARRED.\r\n YOU HEREBY WAIVE AND RELEASE Agilysys Reserve AND ITS OFFICERS, DIRECTORS, EMPLOYEES, PARENTS, PARTNERS, SUCCESSORS, AGENTS, DISTRIBUTION PARTNERS, AFFILIATES, SUBSIDIARIES, OR THEIR RELATED COMPANIES, FROM ANY AND ALL INJURIES, LIABILITIES, DAMAGES, CLAIMS AND RIGHTS OF ANY NATURE WHATSOEVER ARISING FROM ANY ACT OR OMISSION OF THE CUSTOMER IN CONNECTION WITH ANY RESERVATION OR PROMOTION, THE PROVISION OF THE SERVICES RELATING TO ANY RESERVATION OR PROMOTION, AND COMPLIANCE BY THE CUSTOMER WITH APPLICABLE LAW, INCLUDING, WITHOUT LIMITATION, UNCLAIMED PROPERTY AND ESCHEATMENT LAWS. In some jurisdictions limitations of liability or of warranties are not permitted. In such jurisdictions, some of the foregoing limitations may not apply to You. These limitations shall apply to the fullest extent permitted by law.\r\n
  24. \r\n
  25. \r\n TERMINATION.\r\n This Agreement is effective unless and until terminated by either You or Agilysys Reserve. You may terminate this Agreement at any time, provided that You discontinue any further use of the Widget and all Services. Agilysys Reserve also may terminate this Agreement at any time, immediately, without notice, for any reason, including, without limitation, if You have failed to comply with this Agreement. Upon any termination of this Agreement, You will cease all access to and use of the Widget and all Services and Agilysys Reserve may block any access You attempt to make to the Widget and any Services. You agree that Agilysys Reserve shall not be liable to You or any third party for any termination of this Agreement or for blocking Your access to the Widget or any Services. Any termination of this Agreement shall not affect Your obligations to us under this Agreement. The provisions of this Agreement which by their nature should survive termination of this Agreement shall survive, including, but not limited to, the rights and licenses that You have granted hereunder, indemnities, releases, disclaimers, limitations on liability, provisions related to choice of law, dispute resolution, no class action, no trial by jury and all of the additional provisions in final section of this Agreement.\r\n
  26. \r\n
  27. \r\n CHOICE OF LAW; JURISDICTION AND VENUE.\r\n This Agreement will be governed by and construed in accordance with the laws of the State of Georgia, USA, excluding its conflicts of law provisions. Subject to Section 15, any action to enforce any rights or obligations under this Agreement shall be brought exclusively in the United States District Court for the Northern District of Georgia, sitting in Atlanta, GA, or in Fulton County, Georgia Superior Court if filed in state court, which may only be done if federal court jurisdiction is unavailable. Both parties consent to such jurisdiction and venue. The parties agree that the United Nations Convention on Contracts for the International Sale of Goods will not apply. THE PARTIES AGREE THAT THE UNIFORM COMPUTER INFORMATION TRANSACTIONS ACT OR ANY VERSION THEREOF, ADOPTED BY ANY STATE, IN ANY FORM (\r\n \"UCITA\"\r\n ), SHALL NOT APPLY TO THIS AGREEMENT. TO THE EXTENT THAT UCITA IS APPLICABLE, THE PARTIES AGREE TO OPT OUT OF THE APPLICABILITY OF UCITA (AND EACH AND EVERY PROVISION THEREOF) PURSUANT TO THE OPT-OUT PROVISION(S) CONTAINED THEREIN.\r\n
  28. \r\n
  29. \r\n DISPUTE RESOLUTION; BINDING ARBITRATION.\r\n Both parties agree to settle all claims, allegations, controversies, or disputes related in any way to the Widget, Services, or this Agreement, including disputes you may have against our employees or other representatives, but excluding disputes relating to our intellectual property rights (\r\n “Disputes”\r\n ) as set forth in this Section. If any Dispute cannot be resolved by informal discussions between the parties, either party may provide the other party with notice of that Dispute under this Agreement. Such notice will include a written description of the Dispute and any proposed resolution. Following any such notice, the parties will make reasonable attempts to resolve the Dispute by discussions between the parties. If the parties cannot resolve a Dispute within 30 days of receipt of notice of that Dispute from the other party, then either party may submit the Dispute to formal binding arbitration as follows. If the parties disagree whether a Dispute is subject to arbitration, the provisions of the Federal Arbitration Act (not state law) will govern all questions of whether the Dispute is subject to arbitration. Any arbitration will be administered by the American Arbitration Association (\r\n “AAA”\r\n ) in accordance with the Commercial Arbitration Rules as supplemented by AAA's Supplementary Procedures for Consumer-Related Disputes. If the AAA is unwilling or unable to set a hearing date within 45 days of the filing of a “demand for arbitration,” then either party can elect to have the arbitration administered by the Judicial Arbitration and Mediation Services Inc. (\r\n “JAMS”\r\n ) or any other mutually agreeable arbitration service. You can obtain procedures, rules, and fee information from the AAA at 1- 800-778-7879\r\n www.adr.org.\r\n and from JAMS at 1-949-224-1810\r\n https://www.jamsadr.com.\r\n The arbitration will be conducted by a single neutral arbitrator who is a lawyer or a retired judge. Discovery shall be permitted pursuant to the applicable arbitration rules. If an in-person hearing is required, the arbitration hearing will be conducted in Atlanta, GA, provided that if required by applicable law for this Section to be enforceable, then such hearing will be held in the metropolitan area in which you are a resident at the time the Dispute is submitted for arbitration. The federal or state law that applies to this Agreement will also apply during the arbitration. The arbitrator's award will consist of a written statement stating the disposition of each claim of the Dispute and will provide a statement of the essential findings and conclusions on which the award is based. The award shall be enforceable by any court with jurisdiction over the parties. Any arbitration will be solely between you and us (not brought on behalf of or together with another individual's claim) and neither you nor Agilysys Reserve may pursue arbitration on a classwide basis. If for any reason any court or arbitrator holds that this restriction is unconscionable or unenforceable, then our agreement to arbitrate will not apply and the Dispute must be brought in any court permitted by this Agreement. The parties shall share equally the fees charged by the applicable arbitration service, provided that we shall have the option to pay any greater portion of such fees in our sole discretion if required by applicable law in order for this Section to be enforceable. Except where prohibited or limited by applicable law, the prevailing party in the arbitration will be entitled to recover its costs and expenses, including reasonable attorneys' fees and experts' fees, which are incurred in connection with the arbitration. The provisions of this Section will not apply to any legal action taken by Agilysys Reserve to seek an injunction or other equitable relief in connection with any loss, cost, or damage (or any potential loss, cost, or damage) relating to the Widget, Service, or any of our intellectual property rights.\r\n
  30. \r\n
  31. \r\n NO CLASS ACTIONS.\r\n TO THE EXTENT ALLOWED BY LAW, EACH OF YOU AND Agilysys Reserve WAIVE ANY RIGHT TO PURSUE DISPUTES ON A CLASSWIDE BASIS; THAT IS, TO EITHER JOIN A CLAIM WITH THE CLAIM OF ANY OTHER PERSON OR ENTITY, OR ASSERT A CLAIM IN A REPRESENTATIVE CAPACITY ON BEHALF OF ANYONE ELSE IN ANY LAWSUIT, ARBITRATION OR OTHER PROCEEDING.\r\n
  32. \r\n
  33. \r\n NO TRIAL BY JURY.\r\n TO THE EXTENT ALLOWED BY LAW, EACH OF YOU AND Agilysys Reserve WAIVE ANY RIGHT TO TRIAL BY JURY IN ANY LAWSUIT, ARBITRATION OR OTHER PROCEEDING.\r\n
  34. \r\n
  35. \r\n DATA PRIVACY.\r\n You expressly consent to the use and disclosure of Your personally identifiable information and other data and information as described in the Agilysys Reserve Privacy Policy displayed through the Widget (\r\n “Privacy Policy”\r\n ). Notwithstanding anything in the Privacy Policy and without limiting any rights Agilysys Reserve may have under the Privacy Policy, Agilysys Reserve will have the right to collect, extract, compile, synthesize, and analyze non-personally identifiable data or information (data or information that does not identify an entity or natural person as the source thereof) resulting from Your access to and use of the Widget and Services. To the extent any such non-personally identifiable data or information is collected or generated by Agilysys Reserve, the data and information will be solely owned by Agilysys Reserve and may be used by Agilysys Reserve for any lawful business purpose without a duty of accounting to You, provided that the data and information is used only in an aggregated form, without directly identifying You or any other entity or natural person as the source thereof.\r\n
  36. \r\n
  37. \r\n MOBILE.\r\n The Widget may include certain features and services that may be available via Your mobile phone, including, without limitation the ability to access the Widget from Your mobile phone (collectively, the\r\n \"Mobile Services\"\r\n ). We typically do not charge for Mobile Services. However, Your mobile carrier's normal messaging, data and other rates and fees will still apply. Your carrier may prohibit or restrict certain Mobile Services and certain Mobile Services may be incompatible with Your carrier or mobile device. You should check with Your carrier to find out what plans are available and how much they cost. By using the Mobile Services You agree that we may communicate with You regarding the Widget and our Services and Customers by SMS, MMS, text message or other electronic means to Your mobile device and that certain information about Your usage of the Mobile Services will be communicated to us. You agree that in connection with the Mobile Services You use, we may send communications to Your mobile device regarding us, our Customers or other third parties. Further, we may collect information related to Your use of the Mobile Services.\r\n
  38. \r\n
  39. \r\n NOTICES.\r\n Unless otherwise specified in this Agreement, any notices required or allowed under this Agreement will be provided to Agilysys Reserve by postal mail to the corporate services address for Agilysys Reserve listed on the Agilysys Reserve website at\r\n www.Agilysys.com\r\n , to the attention of the General Counsel of Agilysys Reserve. Agilysys Reserve may provide You with any notices required or allowed under this Agreement by sending You an email to any email address You provide to Agilysys Reserve in connection with the Widget, provided that in the case of any notice applicable both to You and other Users of the Widget, Agilysys Reserve may instead provide such notice by posting through the Widget. Notices provided to Agilysys Reserve will be deemed given when actually received by Agilysys Reserve. Notice provided to You will be deemed given 24 hours after posting through the Widget or sending via e-mail, unless (as to e-mail) the sending party is notified that the e-mail address is invalid.\r\n
  40. \r\n
  41. \r\n ADDITIONAL TERMS.\r\n Any delay or failure on the part of us to exercise or enforce any rights under this Agreement to which we may be entitled shall not, in any event, be construed as a waiver of the right and privilege to do so at any subsequent time. Agilysys Reserve has the right to determine Your compliance with this Agreement in its sole discretion. You irrevocably agree that You waive any and all rights to injunctive or other equitable relief. The section headings used herein are for convenience only and shall not be given any legal import. If any provision of this Agreement is held to be unenforceable, that provision will be removed to the extent necessary to comply with applicable law, replaced by a provision that most closely approximates the original intent and economic effect of the original to the extent consistent with the applicable Law, and the remaining provisions will remain in full force. The prevailing party in any lawsuit or proceeding arising from or related to this Agreement will be entitled to receive its costs, expert witness fees and reasonable attorneys’ fees, including costs and fees on appeal. Except as expressly set forth in this Agreement, this Agreement may be amended or modified only by a writing signed by both parties. Unless otherwise amended as provided herein, this Agreement will exclusively govern Your access to and use of the Widget and all Services, and constitutes the entire agreement of the parties with respect to the subject matter hereof, and supersedes all previous written or oral agreements between us with respect to such subject matter. You may not assign this Agreement or assign any rights or delegate any obligations hereunder, in whole or in part, without our prior written consent. Any such purported assignment or delegation by You without the appropriate prior written consent will be null and void and of no force and effect. Agilysys Reserve may assign this Agreement or any rights hereunder without Your consent and without notice. The parties hereto are independent parties, not agents, employees or employers of the other or joint venturers, and neither acquires hereunder any right or ability to bind or enter into any obligation on behalf of the other. Any reference herein to “including” will mean “including, without limitation.”\r\n
  42. \r\n
\r\n
\r\n
\r\n ","
\r\n
\r\n \"logo-img\"/\r\n {{ls.restaurantWidgetSettings$.value.WidgetCustomization.HeaderText}} \r\n
\r\n \r\n
\r\n {{'language' | translate}}\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n {{'language' | translate}}\r\n \r\n
\r\n
","import { Component, OnInit, ViewEncapsulation} from '@angular/core';\r\nimport { ActivatedRoute, ParamMap, Router } from '@angular/router';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { DEFAULT_LANGUAGE_ID, HeaderStyle, chineseLanguageCodes, componentName } from 'src/app/shared/constants/commonenums';\r\nimport { FieldConfig } from 'src/app/shared/dynamicform/models/common-models';\r\nimport { Language, LanguageFileName } from 'src/app/shared/Models/WidgetSettingsModels';\r\nimport { LocalizeService } from 'src/app/shared/services/localize.service';\r\nimport { LayoutService } from '../layout.service';\r\nimport { map } from 'rxjs/operators';\r\nimport { GuestService } from 'src/app/shared/services/guest.service';\r\nimport moment, { lang } from 'moment';\r\nimport { environment } from 'src/environments/environment';\r\nimport _ from 'lodash';\r\n\r\n@Component({\r\n selector: 'app-header',\r\n encapsulation: ViewEncapsulation.None,\r\n templateUrl: './header.component.html',\r\n styleUrls: ['./header.component.scss']\r\n})\r\nexport class HeaderComponent implements OnInit {\r\n languageConfig:FieldConfig[];\r\n languageOptions=[];\r\n headerStyle = HeaderStyle;\r\n restaurantId = null;\r\n hideLanguageOption = false;\r\n initialLanguageChange = true;\r\n IsMultiLanguageSelectionEnabled: boolean;\r\n componentName = componentName\r\n constructor(private translateService: TranslateService,public ls:LayoutService, private localizeService: LocalizeService,\r\n private route: ActivatedRoute,public gs:GuestService,private router: Router){\r\n\r\n }\r\n\r\n ngOnInit(){\r\n this.restaurantId = this.ls.restaurantWidgetSettings$.value.RestaurantId;\r\n this.hideLanguageOption = environment?.restaurantIdToHideLanguages?.some((item: number) => item === this.restaurantId);\r\n this.gs.checkLanguageAvailabilityOption();\r\n this.generateLanguageOptions();\r\n this.languageConfig = [\r\n {\r\n type: 'select',\r\n name: 'sortBy',\r\n placeholder: '',\r\n options: this.languageOptions,\r\n value:this.gs.selectedLanguageId ? this.gs.selectedLanguageId : this.languageOptions[0].id,\r\n showErrorText: true,\r\n isTranslate: true,\r\n appearance: false,\r\n cellClick: this.setDefaultLanguage.bind(this),\r\n class: 'header__language',\r\n isFormArray: false\r\n }\r\n ];\r\n const url = new URL(window.location.href);\r\n let language = this.route.snapshot.params['language'] || url.searchParams.get('language');\r\n if(language){\r\n this.gs.selectedLanguageId = Number(LanguageFileName[language]);\r\n this.languageConfig[0].value = this.gs.selectedLanguageId;\r\n this.languageConfig = [...this.languageConfig];\r\n }\r\n if(!language){\r\n const url = new URL(window.location.href);\r\n language = this.route.snapshot.queryParams['language'];\r\n language = language?.toLowerCase();\r\n this.languageConfig[0].value = language ? LanguageFileName[language] : sessionStorage.getItem('languageId') ? Number(sessionStorage.getItem('languageId')): this.languageOptions[0].id \r\n this.setLanguage({value: sessionStorage.getItem('languageId') ? sessionStorage.getItem('languageId') : this.languageOptions[0].id},language)\r\n }\r\n //this.generateOptions();\r\n }\r\n\r\n showRestrictedLanguage() {\r\n return (environment.restaurantIdToHideLanguages?.filter(restaurantId => restaurantId == this.ls.restaurantWidgetSettings$.value.RestaurantId)?.length > 0);\r\n }\r\n\r\nsetDefaultLanguage(event){\r\n if(this.initialLanguageChange){\r\n sessionStorage.setItem('languageId',event.value)\r\n this.gs.selectedLanguageId = Number(event.value);\r\n this.initialLanguageChange = false;\r\n this.gs.loadLanguageData(LanguageFileName[event.value]);\r\n }\r\n this.setLanguage(event)\r\n}\r\n\r\n /* setting language on change of drop down */\r\n setLanguage(event,language?) {\r\n // moment.locale(this.gs.findLocale(event.value));\r\n if(language && this.gs.availableLanguages){\r\n event.value = this.gs.availableLanguages.find(lng => lng.Name.toLowerCase() == language)?.Id || DEFAULT_LANGUAGE_ID\r\n }\r\n this.gs.selectedLanguageId = event.value;\r\n sessionStorage.setItem('languageId',event.value)\r\n let selectedLanguage= LanguageFileName[event.value];\r\n this.localizeService.setLanguage(selectedLanguage, this.ls.restaurantWidgetSettings$.value.PropertyType.toLowerCase());\r\n this.gs.languageFileChanges.next(LanguageFileName[event.value]);\r\n }\r\n\r\n generateLanguageOptions(){\r\n this.ls.restaurantWidgetSettings$.subscribe((data : any) => {\r\n this.IsMultiLanguageSelectionEnabled = data.IsMultiLanguageSelectionEnabled ;\r\n\r\n if(data.Languages?.length)\r\n if(this.showRestrictedLanguage()){\r\n this.gs.availableLanguages = data.Languages;\r\n let languages = _.cloneDeep(data.Languages);\r\n languages = languages.filter(lang => lang.Code != 'fr' && lang.Code != 'ko' && lang.Code != 'ja'); \r\n this.languageOptions = languages.map(language => { return { id: language.Id , value: language.DisplayName}});\r\n }\r\n else{\r\n this.gs.availableLanguages = data.Languages;\r\n this.languageOptions = data.Languages.map(language => { return { id: language.Id , value: language.DisplayName}});\r\n }\r\n })\r\n }\r\n\r\n\r\n\r\n\r\n}\r\n","
\r\n {{message.message | translate: message.params}}\r\n\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
","import { Component, EventEmitter, OnInit, Output, Input } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { buttonTypes } from 'src/app/shared/constants/commonenums';\r\nimport { ButtonValue } from 'src/app/shared/dynamicform/models/common-models';\r\nimport { GuestService } from 'src/app/shared/services/guest.service';\r\n\r\n@Component({\r\n selector: 'app-message',\r\n templateUrl: './message.component.html',\r\n styleUrls: ['./message.component.scss']\r\n})\r\nexport class MessageComponent implements OnInit {\r\n @Output() closeEvent = new EventEmitter();\r\n primaryButton: ButtonValue;\r\n secondaryButton: ButtonValue;\r\n \r\n constructor(public gs: GuestService) { }\r\n\r\n @Input() messageInfo: any;\r\n message: any;\r\n\r\n\r\n closeMessage() {\r\n this.gs.bShowOverbookingErrorDialog = false;\r\n this.closeEvent.emit();\r\n }\r\n ngOnInit(): void {\r\n this.message = this.messageInfo;\r\n // if(this.gs.bShowOverbookingErrorDialog) {\r\n // this.message.message += ' Are you sure you want to proceed?';\r\n // }\r\n this.primaryButton = {\r\n type: buttonTypes.confirmBtn,\r\n label: 'Yes',\r\n customclass: 'guest-details__confirm-btn',\r\n disbaledproperity: false\r\n };\r\n\r\n this.secondaryButton = {\r\n type: buttonTypes.cancelBtn,\r\n label: 'No',\r\n customclass: 'guest-details__cancel-btn',\r\n disbaledproperity: false\r\n };\r\n }\r\n\r\n emitOverlapBookingproceedEvent() {\r\n this.gs.bShowOverbookingErrorDialog = false;\r\n this.gs.allowOverlapBookings = true;\r\n this.gs.overlapBookingproceedEvent.next({proceedOverlapBooking: true, isOverlapErrorFromValidateCartApi: this.gs.isOverlapErrorFromValidateCartApi});\r\n this.closeEvent.emit();\r\n }\r\n\r\n\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { LayoutService } from '../layout.service';\r\n\r\n@Component({\r\n selector: 'app-footer',\r\n templateUrl: './footer.component.html',\r\n styleUrls: ['./footer.component.scss']\r\n})\r\nexport class FooterComponent implements OnInit {\r\n\r\n constructor(public ls:LayoutService) { }\r\n\r\n ngOnInit() {\r\n }\r\n\r\n}\r\n","
\r\n
\r\n {{'copyRight' | translate}}\r\n \"agilysys-logo\"\r\n
\r\n
\r\n","
\r\n\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n \"banner-img\"\r\n \r\n
\r\n
\r\n
{{ls.restaurantWidgetSettings$.value.RestaurantName}}
\r\n \r\n {{ls.restaurantWidgetSettings$.value.Street1}}{{ls.restaurantWidgetSettings$.value.Street2}}, {{ls.restaurantWidgetSettings$.value.City}}, {{ls.restaurantWidgetSettings$.value.Country}}\r\n
\r\n
\r\n
\r\n
\r\n \r\n\r\n \r\n\r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n \r\n
\r\n\r\n
\r\n
\r\n \r\n
","import { Component, ViewEncapsulation, AfterViewInit, ChangeDetectorRef, OnInit, OnDestroy, HostListener, Renderer2 } from '@angular/core';\r\nimport { ActivatedRoute, ActivationEnd, NavigationEnd, NavigationStart, Router, RoutesRecognized } from '@angular/router';\r\nimport { LayoutService } from './layout.service';\r\nimport { tap } from 'rxjs/operators';\r\nimport { environment } from 'src/environments/environment';\r\nimport { ReservationDetailsComponent } from './reservation-details/reservation-details/reservation-details.component';\r\nimport { ButtonValue } from '../shared/dynamicform/models/common-models';\r\nimport { buttonTypes, componentName, DEFAULT_LANGUAGE_ID, HeaderStyle } from '../shared/constants/commonenums';\r\nimport { TablesLayoutComponent } from './tables-layout/tables-layout.component';\r\nimport { GuestDetailsComponent } from './guest-details/guest-details.component';\r\nimport { ConfirmationDetailsComponent } from './confirmation-details/confirmation-details.component';\r\nimport { Subscription } from 'rxjs';\r\nimport { CustomGuestFieldsModel } from '../shared/Models/PartyModels';\r\nimport { TranslateService } from '@ngx-translate/core';\r\n\r\n\r\n// import { StringifyOptions } from 'querystring';\r\nimport { Language, LanguageFileName, operationType } from '../shared/Models/WidgetSettingsModels';\r\nimport { DataRetentionPolicyComponent } from './data-retention-policy/data-retention-policy.component';\r\nimport { PrivacyPolicyComponent } from './privacy-policy/privacy-policy.component';\r\nimport { urlConfig } from '../shared/constants/url-config';\r\nimport { PopupService } from 'src/app/shared/services/popup.service';\r\nimport { GuestService } from '../shared/services/guest.service';\r\nimport { LocalizeService } from '../shared/services/localize.service';\r\nimport { DynamicFormService } from '../shared/dynamicform/service/dynamic-form.service';\r\nimport { AppInitializer } from '../app-initializer';\r\nimport { TermsOfUseComponent } from './terms-of-use/terms-of-use.component';\r\n@Component({\r\n selector: 'app-layout',\r\n templateUrl: './layout.component.html',\r\n styleUrls: ['./layout.component.scss'],\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class LayoutComponent implements OnInit, AfterViewInit, OnDestroy {\r\n title = 'seat-v2';\r\n currentRoute: string = ''\r\n imageUrl: any;\r\n imgAvailable: boolean;\r\n currentComponent: any;\r\n subscriptions: Subscription = new Subscription();\r\n componentArray = [ReservationDetailsComponent, TablesLayoutComponent, GuestDetailsComponent, ConfirmationDetailsComponent, TermsOfUseComponent , PrivacyPolicyComponent, DataRetentionPolicyComponent]\r\n //restaurantName: string = '';\r\n restaurantId: Number;\r\n currentComponentName = componentName.reservationDetails;\r\n componentName = componentName;\r\n errorMessage: string;\r\n showMessage = false;\r\n acceptReservation = false;\r\n outOfServiceMessage: any;\r\n showFooter = true;\r\n hideImage = false;\r\n environment = environment;\r\n isHeaderDisplayed;\r\n backgroundImageData: any;\r\n\r\n constructor(public ls: LayoutService, private renderer: Renderer2, private router: Router, private route: ActivatedRoute, private ts: TranslateService, public ps: PopupService, public gs: GuestService,\r\n private appIntializer: AppInitializer,\r\n private localizeService: LocalizeService, private dfs: DynamicFormService,) {\r\n }\r\n\r\n ngOnInit() {\r\n this.currentComponent = this.componentArray[componentName.reservationDetails];\r\n this.ls.curentComponent = ReservationDetailsComponent;\r\n this.router.events.forEach((event) => {\r\n if (event instanceof NavigationEnd) {\r\n this.currentRoute = this.router.routerState.snapshot.url != '/' ? this.router.routerState.snapshot.url.split('/')[1] : '';\r\n }\r\n });\r\n if(!this.gs.selectedLanguageId){\r\n let language = this.route.snapshot.params?.language || this.route.snapshot.queryParams?.language;\r\n this.gs.selectedLanguageId = language ? Number(LanguageFileName[language]) : DEFAULT_LANGUAGE_ID;\r\n this.gs.selectedLanguageId && sessionStorage.setItem('languageId', this.gs.selectedLanguageId.toString())\r\n }\r\n if (this.route.snapshot.params.pageName && this.route.snapshot.params.restaurantName) {\r\n this.currentComponent = this.componentArray[componentName[this.route.snapshot.params.pageName.toLowerCase()]];\r\n if (this.currentComponent) {\r\n this.ls.restaurantWidgetName = this.route.snapshot.params.restaurantName;\r\n this.subscriptions.add(this.ls.getWidgetSettingsByRestaurantName(this.ls.restaurantWidgetName, this.gs.selectedLanguageId).subscribe(data => {\r\n if (data) {\r\n this.setCustomStyles(data.RestaurantUniqueName);\r\n this.loadBackgroundImage(this.restaurantId);\r\n this.acceptReservation = data.AcceptsReservations && !data.DisableReservations;\r\n this.imageUrl = environment.BaseUrl + urlConfig.widgetImageURL + data.RestaurantId;\r\n if(data?.OperationCurrency ){\r\n this.ls.OperationCurrency = data.OperationCurrency\r\n }\r\n // this.gs.loadLanguageData(null)\r\n this.ls.restaurantWidgetSettings$.next(data);\r\n this.ps.restaurantWidgetSettings$.next(data);\r\n this.loadDataRetentionPolicy();\r\n }\r\n else {\r\n this.outOfServiceMessage = { message: this.gs.ConfigSettings.commonErrorMessage };\r\n }\r\n }));\r\n }\r\n else {\r\n this.outOfServiceMessage = { message: this.gs.ConfigSettings.commonErrorMessage };\r\n }\r\n }\r\n else if (this.route.snapshot.params.restaurantName) {\r\n this.ls.restaurantWidgetName = this.route.snapshot.params.restaurantName;\r\n this.ls.specialMealIdFromURL = this.route.snapshot.params.specialMealIdFromURL;\r\n this.subscriptions.add(this.ls.getWidgetSettingsByRestaurantName(this.ls.restaurantWidgetName, this.gs.selectedLanguageId).subscribe(data => {\r\n if (data) {\r\n this.setCustomStyles(data.RestaurantUniqueName);\r\n this.loadBackgroundImage(data.RestaurantId);\r\n //this.gs.loadLanguageData(null)\r\n this.ls.globalSeatingAreaId = this.route.snapshot.queryParams[\"section_id\"];\r\n this.loadRestaurantSettings(data);\r\n this.setLanguage(data);\r\n }\r\n else {\r\n this.outOfServiceMessage = { message: this.gs.ConfigSettings.commonErrorMessage };\r\n }\r\n }));\r\n\r\n }\r\n else if (this.route.snapshot.params.restaurantToken) {\r\n this.restaurantId = this.route.snapshot.params.restaurantId;\r\n this.ls.reservationToken = this.route.snapshot.params.restaurantToken;\r\n this.ls.operation = this.route.snapshot.params.operation == \"edit\" ? operationType.edit : this.route.snapshot.params.operation == \"cancel\" ? operationType.cancel : operationType.create;\r\n this.ls.language = Number(LanguageFileName[this.route.snapshot.params.language.toLowerCase().toString()]);\r\n this.ls.byPassValidation = true;\r\n this.gs.byPassValidation = true;\r\n this.subscriptions.add(this.ls.getByToken(this.ls.reservationToken).subscribe(reservation => {\r\n if (reservation) {\r\n this.restaurantId = reservation.RestaurantId;\r\n this.subscriptions.add(this.ls.getWidgetSettingsByRestaurantId(this.restaurantId).subscribe(data => {\r\n if (data) {\r\n this.setCustomStyles(data.RestaurantUniqueName);\r\n this.loadBackgroundImage(this.restaurantId);\r\n this.loadRestaurantSettings(data);\r\n this.ls.editPartyData$.next(reservation);\r\n this.setLanguage(data);\r\n }\r\n else {\r\n this.outOfServiceMessage = { message: this.gs.ConfigSettings.commonErrorMessage };\r\n }\r\n\r\n }));\r\n }\r\n else {\r\n this.outOfServiceMessage = { message: this.gs.ConfigSettings.commonErrorMessage };\r\n }\r\n }));\r\n }\r\n else {\r\n this.outOfServiceMessage = { message: this.gs.ConfigSettings.commonErrorMessage };\r\n }\r\n }\r\n\r\n setCustomStyles(restaurantUniqueName) {\r\n var head = document.head;\r\n var link = document.createElement(\"link\");\r\n\r\n link.type = \"text/css\";\r\n link.rel = \"stylesheet\";\r\n link.href = this.appIntializer.configSettings.styleURL + `/styles_${restaurantUniqueName}.css`;\r\n\r\n head.appendChild(link);\r\n }\r\n\r\n setLanguage(data){\r\n const url = new URL(window.location.href);\r\n let paramLanguage = this.route.snapshot.params['language']|| url.searchParams.get('language');\r\n if(paramLanguage){\r\n paramLanguage = LanguageFileName[Number(LanguageFileName[paramLanguage.toLowerCase()])];\r\n }else{\r\n paramLanguage = sessionStorage.getItem('languageId') ? LanguageFileName[sessionStorage.getItem('languageId')] : LanguageFileName[Number(LanguageFileName.english)]\r\n }\r\n this.localizeService.setLanguage(paramLanguage, data.PropertyType.toLowerCase(), data.RestaurantUniqueName);\r\n }\r\n\r\n closeMessage(event) {\r\n this.gs.setMessageState('', 0);\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.subscriptions.add(this.ls.nextButton.subscribe(x => {\r\n this.currentComponent = this.componentArray[x];\r\n this.currentComponentName = x;\r\n this.gs.currentComponentName =x;\r\n }));\r\n }\r\n\r\n ngAfterViewChecked() {\r\n if (this.ls.restaurantWidgetSettings$.value) {\r\n this.isHeaderDisplayed = this.ls.restaurantWidgetSettings$.value.WidgetCustomization.HeaderStyle != HeaderStyle.none;\r\n this.setbackgroundImage();\r\n let subHeaderElements = document.querySelectorAll('.layout__content .confirmation-title,.layout__content .page-title');\r\n subHeaderElements.forEach(data => {\r\n this.renderer.setStyle(data, 'color', this.ls.restaurantWidgetSettings$.value.WidgetCustomization.SubheaderTextColor);\r\n });\r\n let formElements = document.querySelectorAll('.layout__content .default-form-field,.layout__content .reservation-summary,.layout__content .helper-text,.privacy-policy .section-header,.terms-of-use .section-header,.layout__content .mat-form-field, .mat-option,.layout__content .default-sub-header');\r\n formElements.forEach(data => {\r\n this.renderer.setStyle(data, 'color', this.ls.restaurantWidgetSettings$.value.WidgetCustomization.BodyTextColor);\r\n });\r\n let specialMealElements = document.querySelectorAll('.reservation-details__special-meal-data .default-sub-header,.reservation-details__special-meal-data .reservation-details__special-meal-serves');\r\n specialMealElements.forEach(data => {\r\n this.renderer.setStyle(data, 'color', this.ls.restaurantWidgetSettings$.value.WidgetCustomization.SMFontColor);\r\n this.renderer.setStyle(data, 'font-size', this.ls.restaurantWidgetSettings$.value.WidgetCustomization.SpecialMealFontSize);\r\n })\r\n let inputElements = document.querySelectorAll('.mat-input-element');\r\n inputElements.forEach(data => {\r\n this.renderer.setStyle(data, 'caret-color', this.ls.restaurantWidgetSettings$.value.WidgetCustomization.BodyTextColor);\r\n });\r\n let actionButton = document.querySelectorAll('.layout__content .custom-button__confirm,.cdk-overlay-container .custom-button__confirm, .mat-calendar-body-selected');\r\n actionButton.forEach(data => {\r\n this.renderer.setStyle(data, 'background-color', this.ls.restaurantWidgetSettings$.value.WidgetCustomization.PrimaryButtonBGColor);\r\n if (this.ls.restaurantWidgetSettings$.value.WidgetCustomization.PrimaryButtonBGColor == '#ffffff') {\r\n this.renderer.setStyle(data, 'border-color', \"#000000\");\r\n } else {\r\n this.renderer.setStyle(data, 'border-color', this.ls.restaurantWidgetSettings$.value.WidgetCustomization.PrimaryButtonBGColor);\r\n }\r\n this.renderer.setStyle(data, 'color', this.ls.restaurantWidgetSettings$.value.WidgetCustomization.PrimaryButtonTextColor);\r\n // Need to change the styles based on Merchant portal\r\n this.renderer.setStyle(data, 'font-family', this.ls.restaurantWidgetSettings$.value.WidgetCustomization.ButtonFont);\r\n this.renderer.setStyle(data, 'font-size', this.ls.restaurantWidgetSettings$.value.WidgetCustomization.ButtonFontSize + 'px');\r\n this.ls.restaurantWidgetSettings$.value.WidgetCustomization.ButtonStyle == 'Rounded' ? this.renderer.setStyle(data, 'border-radius', 5) : this.renderer.setStyle(data, 'border-radius', 0);\r\n });\r\n let btnIcon = document.querySelectorAll('.layout__content .custom-button__cancel,.layout__content .custom-button__cancel .btn-icon');\r\n btnIcon.forEach(data => {\r\n this.renderer.setStyle(data, 'background-color', this.ls.restaurantWidgetSettings$.value.WidgetCustomization.SecondaryButtonBGColor);\r\n if (this.ls.restaurantWidgetSettings$.value.WidgetCustomization.SecondaryButtonBGColor == '#ffffff') {\r\n this.renderer.setStyle(data, 'border-color', \"#000000\");\r\n } else {\r\n this.renderer.setStyle(data, 'border-color', this.ls.restaurantWidgetSettings$.value.WidgetCustomization.SecondaryButtonBGColor);\r\n }\r\n this.renderer.setStyle(data, 'color', this.ls.restaurantWidgetSettings$.value.WidgetCustomization.SecondaryButtonTextColor);\r\n // Need to change the styles based on Merchant portal\r\n this.renderer.setStyle(data, 'font-family', this.ls.restaurantWidgetSettings$.value.WidgetCustomization.ButtonFont);\r\n this.renderer.setStyle(data, 'font-size', this.ls.restaurantWidgetSettings$.value.WidgetCustomization.ButtonFontSize + 'px');\r\n this.ls.restaurantWidgetSettings$.value.WidgetCustomization.ButtonStyle == 'Rounded' ? this.renderer.setStyle(data, 'border-radius', 5) : this.renderer.setStyle(data, 'border-radius', 0);\r\n });\r\n\r\n let timeButtons = document.querySelectorAll('.layout__content .custom-button__option');\r\n timeButtons.forEach(data => {\r\n this.renderer.setStyle(data, 'color', this.ls.restaurantWidgetSettings$.value.WidgetCustomization.AvailableButtonColor);\r\n // Need to change the styles based on Merchant portal\r\n this.renderer.setStyle(data, 'font-family', this.ls.restaurantWidgetSettings$.value.WidgetCustomization.HeaderFont);\r\n this.renderer.setStyle(data, 'font-size', '16px');\r\n this.ls.restaurantWidgetSettings$.value.WidgetCustomization.ButtonStyle == 'Rounded' ? this.renderer.setStyle(data, 'border-radius', 5) : this.renderer.setStyle(data, 'border-radius', 0);\r\n\r\n });\r\n let matInputElements = document.querySelectorAll('.mat-form-field.input-with-boundary .mat-form-field-wrapper,.reservation-details__special-meal-data,.dynamic-radio .mat-radio-button');\r\n matInputElements.forEach(data => {\r\n this.ls.restaurantWidgetSettings$.value.WidgetCustomization.InputStyle == 'Rounded' ? this.renderer.setStyle(data, 'border-radius', 4) : this.renderer.setStyle(data, 'border-radius', 0);\r\n })\r\n\r\n let hyperlinkElements = document.querySelectorAll('.default-hyperlink');\r\n hyperlinkElements.forEach(data => {\r\n this.renderer.setStyle(data, 'font-family', this.ls.restaurantWidgetSettings$.value.WidgetCustomization.HyperlinkFont);\r\n })\r\n this.showFooter = !(environment.SEAProduction && this.environment.restaurantIds.filter(x => x == this.ls.restaurantWidgetSettings$.value.RestaurantId).length > 0)\r\n \r\n let restaurantNameElement = document.querySelectorAll('.layout__property-name');\r\n restaurantNameElement.forEach(data => {\r\n this.renderer.setStyle(data, 'font-size', this.ls.restaurantWidgetSettings$.value.WidgetCustomization.RestaurantNameSize+'px');\r\n this.renderer.setStyle(data, 'font-family', this.ls.restaurantWidgetSettings$.value.WidgetCustomization.RestaurantNameFont);\r\n this.renderer.setStyle(data, 'color', this.ls.restaurantWidgetSettings$.value.WidgetCustomization.RestaurantNameTextColor);\r\n })\r\n\r\n let restaurantAddressElement = document.querySelectorAll('.reservation-address');\r\n restaurantAddressElement.forEach(data => {\r\n this.renderer.setStyle(data, 'font-size', this.ls.restaurantWidgetSettings$.value.WidgetCustomization.RestaurantAddressSize+'px');\r\n this.renderer.setStyle(data, 'font-family', this.ls.restaurantWidgetSettings$.value.WidgetCustomization.RestaurantAddressFont);\r\n this.renderer.setStyle(data, 'color', this.ls.restaurantWidgetSettings$.value.WidgetCustomization.RestaurantAddressTextColor);\r\n })\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n this.subscriptions.unsubscribe();\r\n }\r\n\r\n loadBackgroundImage(restaurantId) {\r\n this.subscriptions.add(this.ls.getBackgroundImage(restaurantId).subscribe(response => {\r\n if (response) {\r\n this.backgroundImageData = response.Payload;\r\n this.setbackgroundImage();\r\n }\r\n }))\r\n }\r\n\r\n loadDefaultImage(event) {\r\n this.hideImage = true;\r\n }\r\n\r\n\r\n loadDataRetentionPolicy() {\r\n if (this.ls.restaurantWidgetSettings$.value.IsGDPREnabled) {\r\n this.subscriptions.add(this.ls.GetRestaurantPolicy(this.ls.restaurantWidgetSettings$.value.RestaurantId).subscribe(data => {\r\n if (data) {\r\n this.ls.fromclient = this.route.snapshot.queryParams[\"client\"] == \"yes\" ? true : false;\r\n this.ls.dataRetentionPolicy$.next(data);\r\n }\r\n }));\r\n }\r\n }\r\n\r\n setbackgroundImage() {\r\n let mainContainer = document.getElementsByClassName('main-container');\r\n if (this.backgroundImageData && mainContainer) {\r\n this.renderer.setStyle(mainContainer[0], 'background-image', 'url(data:image/png;base64,' + this.backgroundImageData + ')');\r\n this.renderer.setStyle(mainContainer[0], 'background-repeat', 'no-repeat');\r\n this.renderer.setStyle(mainContainer[0], 'background-size', 'cover');\r\n this.renderer.setStyle(mainContainer[0], 'background-position', 'center');\r\n } else if(this.ls.restaurantWidgetSettings$.value){\r\n this.renderer.setStyle(mainContainer[0], 'background', this.ls.restaurantWidgetSettings$.value.WidgetCustomization.WidgetBackgroundColor);\r\n }\r\n }\r\n\r\n loadRestaurantSettings(data) {\r\n let allowReservations = data.AcceptsReservations && !data.DisableReservations;\r\n this.acceptReservation = data.WidgetCustomization.AllowNewReservations ? allowReservations && data.AvailableSpecialMeals.length > 0 : allowReservations;\r\n this.dfs.ValidateGuestPhoneNumber = data.ValidateGuestPhoneNumber;\r\n if (this.acceptReservation) {\r\n this.gs.addGoogleTagManager(data.WidgetCustomization.GTMCode);\r\n this.imageUrl = environment.BaseUrl + urlConfig.widgetImageURL + data.RestaurantId;\r\n if(data?.OperationCurrency ){\r\n this.ls.OperationCurrency = data.OperationCurrency\r\n }\r\n this.ls.restaurantWidgetSettings$.next(data);\r\n this.ps.restaurantWidgetSettings$.next(data);\r\n\r\n if (this.ls.restaurantWidgetSettings$.value.WidgetCustomization.AllowTableSelection) {\r\n this.ls.getRestaurantImages(this.ls.restaurantWidgetSettings$.value.RestaurantId);\r\n }\r\n\r\n this.subscriptions.add(this.ls.GetCustomFields(data.RestaurantId).subscribe(data => {\r\n this.ls.customGuestFields = data;\r\n }));\r\n\r\n this.subscriptions.add(this.ls.GetCountries().subscribe(data => {\r\n this.ls.countriesList = data;\r\n this.dfs.countriesList = data;\r\n }))\r\n\r\n if (this.ls.operation == operationType.create) {\r\n this.loadDataRetentionPolicy();\r\n }\r\n\r\n }\r\n else {\r\n const propertyName= data.PropertyType === this.gs.ConfigSettings.defaultPropertyName? this.gs.ConfigSettings.defaultPropertyName : this.gs.ConfigSettings.generalPropertyName;\r\n this.ts.get('notAcceptOnlineWebReservation', {propertyName: propertyName, restaurantName: data.RestaurantName, phoneNumber: data.PhoneNumber}).subscribe(result => {\r\n this.outOfServiceMessage= {message : result, params: {propertyName: propertyName, restaurantName: data.RestaurantName, phoneNumber: data.PhoneNumber}};\r\n })\r\n }\r\n\r\n }\r\n\r\n}\r\n","import { Injectable, OnDestroy } from '@angular/core';\r\nimport { FormBuilder, FormGroup } from '@angular/forms';\r\nimport { Subject } from 'rxjs';\r\nimport { BehaviorSubject, throwError } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { urlConfig } from '../shared/constants/url-config';\r\n\r\nimport { HttpService } from '../shared/services/http.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\n\r\n\r\nexport class SurveyApiService {\r\n\r\n updatesurveylist: Array = [];\r\n updatesurveyelement: any;\r\n imagedata = new BehaviorSubject(null);\r\n image = this.imagedata.asObservable();\r\n questionList = new BehaviorSubject(null);\r\n questions = this.questionList.asObservable();\r\n dataSaved$: Subject = new Subject();\r\n\r\n\r\n constructor(private httpService: HttpService) {\r\n this.updatesurveyelement = {};\r\n }\r\n\r\n getCommentCardCustomization(Id: any) {\r\n return this.httpService.get(urlConfig.getCommentCardCustomization + \"?restaurantId=\" + Id);\r\n }\r\n\r\n getFeedbackSurveyQuestions(propertyUniqueName: string, languageId: number) {\r\n return this.httpService.get(urlConfig.getsurveyurl + \"?propertyUniqueName=\" + propertyUniqueName + \"&languageId=\" + languageId);\r\n\r\n }\r\n\r\n getTokens(Token: string) {\r\n return this.httpService.get(`${urlConfig.getByToken}?token=${Token}&alltype=${true}&options=${325}`);\r\n }\r\n setImage(data: any) {\r\n this.imagedata.next(data);\r\n }\r\n\r\n setQuestion(data: any) {\r\n this.questionList.next(data);\r\n }\r\n\r\n getImage(Id: any) {\r\n return this.httpService.get(urlConfig.layoutseatingImageUrl + Id, true);\r\n }\r\n\r\n getaddress(restaurentName: string) {\r\n return this.httpService.get(urlConfig.getWidgetSettings + \"?restaurantName=\" + restaurentName);\r\n }\r\n\r\n questionspost(data: any, address: any) {\r\n console.log('questionpost', data)\r\n\r\n this.updatesurveylist = [];\r\n this.updatesurveyelement = {};\r\n data.forEach((element: any) => {\r\n\r\n this.updatesurveyelement = {};\r\n //this.updatesurveyelement.FeedbackId=element.FeedbackId;\r\n this.updatesurveyelement.propertyId = element.PropertyID;\r\n this.updatesurveyelement.PartyId = address.Payload.Id;\r\n this.updatesurveyelement.FeedbackQuestionId = element.Id;\r\n this.updatesurveyelement.contactId = address.currentGuest?.ContactId || address.Payload.Contact.Id;\r\n this.updatesurveyelement.bookingId = element.bookingId;\r\n this.updatesurveyelement.rating = element.rating;\r\n this.updatesurveyelement.GuestComments = element.value;\r\n this.updatesurveyelement.StatusCode = element.StatusCode;\r\n this.updatesurveylist.push(this.updatesurveyelement);\r\n });\r\n console.log(\"updatesurveylist\", this.updatesurveylist);\r\n\r\n //return data;\r\n\r\n return this.httpService.post(urlConfig.updatesurveyurl + '?restaurantId=' + address.Payload.RestaurantId, this.updatesurveylist);\r\n\r\n\r\n }\r\n\r\n\r\n\r\n handleError(error: any) {\r\n let errorMessage = '';\r\n if (error.error instanceof ErrorEvent) {\r\n // client-side error\r\n errorMessage = `Error: ${error.error.message}`;\r\n } else {\r\n // server-side error\r\n errorMessage = `Error Code: ${error.status}\\nMessage: ${error.message}`;\r\n }\r\n window.alert(errorMessage);\r\n return throwError(errorMessage);\r\n }\r\n}\r\n\r\n\r\nexport const questions = [\r\n {\r\n question: 'Any question phrased by admin will be displayed here?',\r\n type: 'rating',\r\n options: [\r\n { value: 1, label: 'Bad' },\r\n { value: 2, label: 'Ok' },\r\n { value: 3, label: 'Good' },\r\n { value: 4, label: 'Very Good' },\r\n { value: 5, label: 'Excellent' }\r\n ],\r\n value: 0\r\n },\r\n {\r\n question: 'Any question phrased by admin will be displayed here?',\r\n type: 'rating',\r\n options: [\r\n { value: 1, label: 'Bad' },\r\n { value: 2, label: 'Ok' },\r\n { value: 3, label: 'Good' },\r\n { value: 4, label: 'Very Good' },\r\n { value: 5, label: 'Excellent' }\r\n ],\r\n value: 0\r\n },\r\n {\r\n question: 'Any question phrased by admin will be displayed here?',\r\n type: 'rating',\r\n options: [\r\n { value: 1, label: 'Bad' },\r\n { value: 2, label: 'Ok' },\r\n { value: 3, label: 'Good' },\r\n { value: 4, label: 'Very Good' },\r\n { value: 5, label: 'Excellent' }\r\n ],\r\n value: 0\r\n },\r\n {\r\n question: 'Any question phrased by admin will be displayed here?',\r\n type: 'rating',\r\n options: [\r\n { value: 1, label: 'Bad' },\r\n { value: 2, label: 'Ok' },\r\n { value: 3, label: 'Good' },\r\n { value: 4, label: 'Very Good' },\r\n { value: 5, label: 'Excellent' }\r\n ],\r\n value: 0\r\n },\r\n {\r\n question: 'Any question phrased by admin will be displayed here?',\r\n type: 'rating',\r\n options: [\r\n { value: 1, label: 'Bad' },\r\n { value: 2, label: 'Ok' },\r\n { value: 3, label: 'Good' },\r\n { value: 4, label: 'Very Good' },\r\n { value: 5, label: 'Excellent' }\r\n ],\r\n value: 0\r\n },\r\n {\r\n question: 'Any Suggestion',\r\n type: 'text',\r\n value: ''\r\n }\r\n];\r\n","
\r\n
\r\n
\r\n \"\"\r\n
\r\n

{{getsurveyelement?.Payload?.Contact?.VisitStats[0].RestaurantName}}

\r\n
\r\n
\r\n

\r\n location_on \r\n {{getrestaurantaddress?.City}}, {{getrestaurantaddress?.Country }}, {{getrestaurantaddress?.PhoneNumber}} \r\n

\r\n
\r\n
","import { Component, Input, OnInit } from '@angular/core';\r\nimport { SurveyApiService } from '../survey-api.service';\r\n\r\n@Component({\r\n selector: 'survey-header',\r\n templateUrl: './header.component.html',\r\n styleUrls: ['./header.component.scss']\r\n})\r\nexport class HeaderComponent implements OnInit {\r\n\r\n@Input() getsurveyelement: any;\r\n@Input() getrestaurantaddress:any;\r\n@Input() commentcardStyles: any;\r\n\r\n\r\nimage :any;\r\n\r\n constructor(public surveyService: SurveyApiService) {\r\n\r\n }\r\n\r\n ngOnInit() {\r\n // console.log(this.getsurveyelement)\r\n // let data = sessionStorage.getItem('getsurveyelement');\r\n // console.log(data);\r\n this.surveyService.imagedata.subscribe((data) => {\r\n this.image = data;\r\n })\r\n\r\n }\r\n\r\n}\r\n","
\r\n \r\n \r\n

\r\n
\r\n \r\n

Invalid Data !!!

\r\n
\r\n \r\n

Thank You for Your Feedback.

\r\n
\r\n \r\n
\r\n","import { Component, Input, OnChanges, OnInit } from '@angular/core';\r\nimport { GuestTitle } from 'src/app/shared/constants/commonenums';\r\nimport { SurveyApiService } from '../survey-api.service';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { LocalizeService } from 'src/app/shared/services/localize.service';\r\nimport { LocalizedDatePipe } from 'src/app/shared/pipes/localize-date.pipe';\r\n\r\n@Component({\r\n selector: 'activity-summary',\r\n templateUrl: './activity-summary.component.html',\r\n styleUrls: ['./activity-summary.component.scss']\r\n})\r\nexport class ActivitySummaryComponent implements OnInit, OnChanges {\r\n\r\n @Input() getsurveyelement: any;\r\n @Input() isdatavalid: any;\r\n @Input() isvalid: any;\r\n @Input() commentcardStyles: any;\r\n IntroText: any;\r\n _input: any;\r\n constructor(private httpSurveyApi: SurveyApiService, private ts: TranslateService, private ls: LocalizedDatePipe) {\r\n //ts.use('en');\r\n }\r\n\r\n ngOnInit() {\r\n console.log(this.getsurveyelement);\r\n }\r\n\r\n\r\n ngOnChanges() {\r\n console.log(this.ts.instant('CommentCardBody'));\r\n this._input = this.getsurveyelement;\r\n if (this._input) {\r\n this.ts.get('CommentCardBody', {\r\n Title: this.getvalue(this._input?.currentGuest?.GuestTitle),\r\n FirstName: this._input?.currentGuest?.FirstName,\r\n LastName: this._input?.currentGuest?.LastName ?? '',\r\n ActivityName: this._input?.Payload?.SpecialMealName ?? this.ts.instant('CommentCardBooking'),\r\n OutletName: this._input?.currentGuest?.VisitStats[0].RestaurantName,\r\n DateandTime: this._input?.Payload?.ReservedFor\r\n ? this.ls.transform(this._input?.Payload?.ReservedFor, 'Do MMMM, ddd')\r\n : this.ls.transform(this._input?.Payload?.ArrivedAt, 'Do MMMM, ddd'),\r\n\r\n }).subscribe(result => {\r\n this.IntroText = result;\r\n });\r\n }\r\n }\r\n\r\n /* public getTokens():any {\r\n this.httpSurveyApi.getTokens().subscribe((response:any) => {\r\n \r\n this.getsurveyelement = response;\r\n console.log(typeof response);\r\n console.log(typeof this.getsurveyelement);\r\n console.log(this.getsurveyelement, 'getsurveyelement');\r\n \r\n \r\n }, error => {\r\n console.log(error);\r\n })\r\n }*/\r\n getvalue(val) {\r\n return (val > 0) ? GuestTitle[val] + \".\" : \"\";\r\n }\r\n\r\n}\r\n","
\r\n\r\n \r\n
\r\n
\r\n
{{index\r\n + 1}}. {{question.Question}}
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n {{'Commentcardfreetext' | translate}}\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
","import { Component, Input, OnInit } from '@angular/core';\r\nimport { SurveyApiService } from '../survey-api.service';\r\nimport { ToastrService } from 'ngx-toastr';\r\n\r\n\r\n@Component({\r\n selector: 'survey-form',\r\n templateUrl: './survey-form.component.html',\r\n styleUrls: ['./survey-form.component.scss']\r\n})\r\nexport class SurveyFormComponent implements OnInit {\r\n\r\n @Input()\r\n public questions: any;\r\n @Input()\r\n public getsurveyaddress: any;\r\n @Input()\r\n public isdatavalid: any;\r\n @Input()\r\n public commentcardStyles: any;\r\n\r\n isonlyText = false;\r\n\r\n\r\n constructor(private httpSurveyApi: SurveyApiService, private toastr: ToastrService) { }\r\n\r\n\r\n ngOnInit(): void {\r\n console.log(this.questions);\r\n this.isdatavalid = true;\r\n this.httpSurveyApi.questionList.subscribe((data) => {\r\n this.questions = data;\r\n if (!this.questions || (this.questions && this.questions.length == 1)) {\r\n this.isonlyText = true;\r\n }\r\n });\r\n\r\n }\r\n\r\n submit() {\r\n console.log(this.questions);\r\n this.httpSurveyApi.questionspost(this.questions, this.getsurveyaddress).subscribe(data => {\r\n console.log(data)\r\n if (data && data.State == 0) {\r\n this.toastr.success('Success!', 'Thank You for Your Feedback');\r\n this.isdatavalid = true;\r\n this.httpSurveyApi.dataSaved$.next(true);\r\n }\r\n else {\r\n let errormsg = \"Unable to submit the feedback !!!\";\r\n if (data && data.State == 1) {\r\n errormsg = data.ValidationMessages[0].Message;\r\n }\r\n this.toastr.error('Error!', errormsg);\r\n }\r\n },\r\n err => {\r\n console.log(err);\r\n });\r\n }\r\n onSearchChange(value) {\r\n if (this.isonlyText) {\r\n if (value) {\r\n this.isdatavalid = false;\r\n } else {\r\n this.isdatavalid = true;\r\n }\r\n\r\n }\r\n }\r\n\r\n reload() {\r\n location.reload();\r\n }\r\n checkaallselected() {\r\n this.isdatavalid = false;\r\n this.questions.forEach((element: any) => {\r\n if (element.rating == 0 && element.type != 'text') {\r\n this.isdatavalid = true;\r\n return;\r\n }\r\n });\r\n }\r\n\r\n}\r\n","import { Component,Input, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'survey-footer',\r\n templateUrl: './footer.component.html',\r\n styleUrls: ['./footer.component.scss']\r\n})\r\nexport class FooterComponent implements OnInit {\r\n @Input() \r\n public commentcardStyles: any;\r\n constructor() { }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n}\r\n","
\r\n
\r\n \"agys-logo\"\r\n
\r\n
\r\n","\r\n
\r\n\r\n\r\n\r\n\r\n\r\n
\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { SurveyApiService } from '../survey-main/survey-api.service';\r\nimport { ToastrService } from 'ngx-toastr';\r\nimport { BehaviorSubject, Subscription } from 'rxjs';\r\nimport { CommentCardCustomizationDTO, Language } from '../shared/Models/WidgetSettingsModels';\r\nimport { PropertyTypeId } from '../shared/constants/commonenums';\r\n@Component({\r\n selector: 'app-survey-main',\r\n templateUrl: './survey-main.component.html',\r\n styleUrls: ['./survey-main.component.scss']\r\n})\r\n\r\nexport class SurveyMainComponent implements OnInit {\r\n restaurentName: any = \"\";\r\n restaurenDetails: any = \"\";\r\n token: any = \"\";\r\n public questions: any = [];\r\n restaurantId: Number;\r\n public commentcardStyles: BehaviorSubject;\r\n public getsurveyelement: any;\r\n public getsurveyproperty: any;\r\n public isdatavalid: boolean = false;\r\n public isvalid: boolean = false;\r\n public question: any;\r\n subscriptions: Subscription = new Subscription();\r\n public languageId: number = 1;\r\n public contactId: number;\r\n constructor(private httpSurveyApi: SurveyApiService, private route: ActivatedRoute, private toastr: ToastrService) {\r\n\r\n }\r\n ngOnInit(): void {\r\n\r\n this.restaurentName = this.route.snapshot.paramMap.get('restaurantName')\r\n this.token = this.route.snapshot.paramMap.get('partyToken')\r\n this.languageId = Language[this.route.snapshot.paramMap.get('languageId')]\r\n this.contactId = this.route.snapshot.params.contactId\r\n this.subscriptions.add(this.httpSurveyApi.dataSaved$.subscribe(data=>{\r\n this.isvalid =false;\r\n }));\r\n this.getSurveyQuestions();\r\n }\r\n\r\n getCommentcardCustomizations() {\r\n this.httpSurveyApi.getCommentCardCustomization(this.restaurantId).subscribe((response: any) => {\r\n this.commentcardStyles = response.Payload;\r\n console.log(this.commentcardStyles)\r\n }, error => {\r\n console.log(error);\r\n })\r\n }\r\n\r\n getAllQuestions(surveyDetails) {\r\n //this.httpSurveyApi.getQuestions(Id).subscribe((response: any) => {\r\n\r\n this.questions = [];\r\n this.questions = surveyDetails.FeedbackQuestionaries;\r\n this.questions.forEach((element: any) => {\r\n element['type'] = 'rating';\r\n element['options'] = [\r\n { rating: 1, label: 'Bad' },\r\n { rating: 2, label: 'Ok' },\r\n { rating: 3, label: 'Good' },\r\n { rating: 4, label: 'Very Good' },\r\n { rating: 5, label: 'Excellent' }\r\n ];\r\n\r\n\r\n element['rating'] = 0;\r\n\r\n });\r\n\r\n this.questions.push({ rating: 0, type: 'text', value: '', FeedbackQuestion: 'Any Suggestion' });\r\n this.httpSurveyApi.setQuestion(this.questions);\r\n console.log(this.questions);\r\n // }, error => {\r\n // console.log(error);\r\n // })\r\n }\r\n\r\n public getTokens(): any {\r\n this.httpSurveyApi.getTokens(this.token).subscribe((response: any) => {\r\n console.log(response);\r\n if (response && response.State == 0) {\r\n this.getsurveyelement = response;\r\n this.isdatavalid = true;\r\n this.getsurveyelement['isActivity'] = this.isActivity(this.getsurveyelement?.Payload?.PropertyTypeId);\r\n this.getsurveyelement['currentGuest'] = this.getsurveyelement?.Payload?.BookingContacts?.find(x => x.ContactId == this.contactId);\r\n\r\n this.getsurveyelement['bookingDate'] = this.getsurveyelement['isActivity'] ? this.getsurveyelement?.Payload?.StartDate : \r\n (this.getsurveyelement?.Payload?.ReservedFor ? this.getsurveyelement?.Payload?.ReservedFor : this.getsurveyelement?.Payload?.ArrivedAt);\r\n\r\n if(this.getsurveyelement.Payload.Feedbacks && this.getsurveyelement.Payload.Feedbacks.length > 0 &&\r\n this.getsurveyelement.Payload.Feedbacks.find(x => x.ContactId == this.contactId))\r\n {\r\n this.isvalid =false;\r\n }else{\r\n this.isvalid =true;\r\n }\r\n\r\n\r\n if (this.getsurveyelement.Payload.RestaurantId != this.getsurveyproperty.Id) {\r\n this.toastr.error('ERROR !', 'Invalid Data !!!', {\r\n timeOut: 10000,\r\n });\r\n this.isdatavalid = false;\r\n // this.isvalid=false;\r\n }\r\n }\r\n }, error => {\r\n console.log(error);\r\n this.isdatavalid = false;\r\n this.toastr.error('ERROR !', error, {\r\n timeOut: 10000,\r\n });\r\n })\r\n }\r\n\r\n public getImage(Id: any): any {\r\n console.log(this.getImage);\r\n this.httpSurveyApi.getImage(Id).subscribe((response: any) => {\r\n console.log(response);\r\n // this.getsurveyelement = response;\r\n\r\n this.httpSurveyApi.setImage(response);\r\n // this.getTokens(response.Payload.Token);\r\n\r\n\r\n })\r\n }\r\n\r\n isActivity(propertyType): boolean {\r\n if (propertyType && (propertyType == PropertyTypeId.TennisCenter || propertyType == PropertyTypeId.General)) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n public getSurveyQuestions(): any {\r\n this.httpSurveyApi.getFeedbackSurveyQuestions(this.restaurentName, this.languageId).subscribe((response: any) => {\r\n var output = response;\r\n if (output && output.State == 0 && output.Payload && output.Payload.FeedbackQuestionaries && output.Payload.Property) {\r\n this.getsurveyproperty = response.Payload.Property;\r\n this.restaurantId = response.Payload.Property.Id;\r\n this.getAllQuestions(response.Payload);\r\n this.getCommentcardCustomizations();\r\n if (this.token != 'xx-commentCard-Prievew-xx') {\r\n this.getTokens()\r\n }\r\n else {\r\n this.getsurveyelement = { \"Payload\": { \"ReservedFor\": new Date(), \"Contact\": { \"FirstName\": \" \", \"LastName\": \"\", \"VisitStats\": [{ \"RestaurantId\": this.restaurantId, \"RestaurantName\": response.Payload.Property.Name }] } } }\r\n this.isdatavalid = true;\r\n this.isvalid = true;\r\n }\r\n ///this.getAllQuestions(response.Payload.RestaurantId)\r\n this.getImage(this.restaurantId)\r\n } else {\r\n this.toastr.error('ERROR !', 'Invalid Data !!!', {\r\n timeOut: 10000,\r\n });\r\n this.isdatavalid = false;\r\n }\r\n\r\n }, error => {\r\n console.log(error);\r\n this.toastr.error('ERROR !', 'Invalid Data !!!', {\r\n timeOut: 10000,\r\n });\r\n this.isdatavalid = false;\r\n })\r\n }\r\n\r\n\r\n\r\n}\r\n\r\n\r\n","import { NgModule } from '@angular/core';\r\nimport { RouterModule, Routes, UrlMatchResult, UrlSegment } from '@angular/router';\r\nimport { ActivitiesLiteComponent } from '../activities-lite/activities-lite.component';\r\nimport { ActivitiesComponent } from '../activities/activities.component';\r\nimport { ErrorComponent } from '../error/error.component';\r\nimport { LayoutComponent } from '../layout/layout.component';\r\nimport { SurveyMainComponent } from '../survey-main/survey-main.component';\r\nimport { GoogleTagManagerModule } from 'angular-google-tag-manager';\r\n\r\nconst routes: Routes = [\r\n\r\n {\r\n matcher: userMatch,\r\n component: LayoutComponent\r\n },\r\n {\r\n matcher: activityMatch,\r\n component: ActivitiesComponent\r\n },\r\n {\r\n path: 'v2/activities',\r\n loadChildren: () => import('../activities-lite/activities-lite.module').then(m => m.ActivitiesLiteModule)\r\n },\r\n {\r\n matcher: feedbackMatch,\r\n component: SurveyMainComponent\r\n },\r\n {\r\n path: '**',\r\n component: ErrorComponent\r\n // loadChildren: () => new Promise(() => { window.location.href = environment.redirectToAdminPortal; })\r\n }\r\n];\r\n\r\n@NgModule({\r\n imports: [RouterModule.forRoot(routes, {scrollPositionRestoration: 'enabled'}),\r\n GoogleTagManagerModule.forRoot({\r\n id: sessionStorage.getItem('GTMCode') || ''\r\n })],\r\n exports: [RouterModule]\r\n})\r\nexport class CoreRoutingModule {\r\n\r\n}\r\n\r\nexport function userMatch(url: UrlSegment[]): UrlMatchResult {\r\n\r\n if(url[0].path.match('xxx')){\r\n url[0].path = 'online';\r\n }\r\n \r\n if (url.length === 4 && url[0].path.match('online') && url[1].path.match('restaurants') && url[3].path.match('iframe')) {\r\n url = getModifiedRestaurantUrl(url);\r\n return {\r\n consumed: url,\r\n posParams: {\r\n restaurantName: new UrlSegment(url[2].path, {})\r\n }\r\n };\r\n }\r\n else if (url.length === 4 && url[0].path.match('orders') && url[1].path && url[2].path && url[3].path) {\r\n return {\r\n consumed: url,\r\n posParams: {\r\n restaurantToken: new UrlSegment(url[1].path, {}),\r\n operation: new UrlSegment(url[2].path, {}),\r\n language: new UrlSegment(url[3].path, {})\r\n }\r\n };\r\n }\r\n else if (url.length === 3 && url[0].path && url[1].path.match('restaurants') && url[2].path) {\r\n \r\n url = getModifiedRestaurantUrl(url);\r\n \r\n return {\r\n consumed: url,\r\n posParams: {\r\n pageName: new UrlSegment(url[0].path, {}),\r\n restaurantName: new UrlSegment(url[2].path, {})\r\n }\r\n };\r\n }\r\n else if (url.length === 5 && url[0].path.match('online') && url[1].path.match('restaurants') && url[3].path.match('iframe')\r\n ) {\r\n\r\n url = getModifiedRestaurantUrl(url);\r\n\r\n return {\r\n consumed: url,\r\n posParams: {\r\n restaurantName: new UrlSegment(url[2].path, {}),\r\n specialMealIdFromURL : new UrlSegment(url[4].path, {})\r\n }\r\n };\r\n }\r\n return null;\r\n}\r\n\r\nfunction getModifiedRestaurantUrl(url: UrlSegment[]): UrlSegment[]{\r\n\r\n if(url[2].path.includes('xxx')){\r\n let splitUrltext = url[2].path.split('xxx');\r\n if(splitUrltext[1]){\r\n url[2].path = url[2].path.replace('xxx', '');\r\n }else{\r\n url[2].path = url[2].path.replace('-xxx', '');\r\n }\r\n\r\n while(url[2].path.includes('--')){\r\n url[2].path = url[2].path.replace(\"--\",\"-\")\r\n }\r\n }\r\n\r\n return url;\r\n\r\n}\r\n\r\n\r\n\r\nexport function activityMatch(url: UrlSegment[]): UrlMatchResult {\r\n\r\n if(url[0].path.match('xxx')){\r\n url[0].path = 'online';\r\n }\r\n\r\n if (url.length === 4 && url[0].path.match('online') && url[1].path.match('activities') && url[3].path.match('iframe')) {\r\n return {\r\n consumed: url,\r\n posParams: {\r\n restaurantName: new UrlSegment(url[2].path, {})\r\n }\r\n };\r\n }\r\n else if (url.length === 5 && url[0].path.match('booking') && url[1].path && url[2].path && url[3].path && url[4].path) {\r\n return {\r\n consumed: url,\r\n posParams: {\r\n restaurantToken: new UrlSegment(url[1].path, {}),\r\n bookingType: new UrlSegment(url[2].path, {}),\r\n operation: new UrlSegment(url[3].path, {}),\r\n language: new UrlSegment(url[4].path, {})\r\n }\r\n };\r\n }\r\n return null;\r\n\r\n}\r\n\r\nexport function feedbackMatch(url: UrlSegment[]): UrlMatchResult {\r\n\r\n if (url.length === 5 && url[0].path.match('feedback')) {\r\n return {\r\n consumed: url,\r\n posParams: {\r\n restaurantName: new UrlSegment(url[1].path, {}),\r\n partyToken: new UrlSegment(url[2].path, {}),\r\n languageId: new UrlSegment(url[3].path, {}),\r\n contactId: new UrlSegment(url[4].path, {})\r\n }\r\n };\r\n }\r\n return null;\r\n}","class TranslateHttpLoader {\n constructor(http, prefix = \"/assets/i18n/\", suffix = \".json\") {\n this.http = http;\n this.prefix = prefix;\n this.suffix = suffix;\n }\n /**\n * Gets the translations from the server\n */\n getTranslation(lang) {\n return this.http.get(`${this.prefix}${lang}${this.suffix}`);\n }\n}\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { TranslateHttpLoader };\n\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { RouterModule } from '@angular/router';\r\nimport { LayoutComponent } from './layout.component';\r\nimport { HeaderComponent } from './header/header.component';\r\nimport { FooterComponent } from './footer/footer.component';\r\nimport { TranslateModule } from \"@ngx-translate/core\";\r\nimport { FormsModule, ReactiveFormsModule } from \"@angular/forms\";\r\nimport { MaterialModule } from '../material-module';\r\nimport { SharedModule } from '../shared/shared.module';\r\nimport { LayoutService } from './layout.service';\r\nimport { GuestDetailsComponent } from './guest-details/guest-details.component';\r\nimport { ConfirmationDetailsComponent } from './confirmation-details/confirmation-details.component';\r\nimport { ReservationService } from './reservation.service';\r\nimport { TablesLayoutComponent } from './tables-layout/tables-layout.component';\r\nimport { ReservationDetailsComponent, SeatingTypeFilter } from './reservation-details/reservation-details/reservation-details.component';\r\nimport { MessageComponent } from './message/message.component';\r\nimport { CoverTypePriceFilter } from './confirmation-details/confirmation-details.component';\r\nimport { PrivacyPolicyComponent } from './privacy-policy/privacy-policy.component';\r\nimport { DataRetentionPolicyComponent } from '../layout/data-retention-policy/data-retention-policy.component';\r\nimport { TermsOfUseComponent } from './terms-of-use/terms-of-use.component';\r\n@NgModule({\r\n declarations: [LayoutComponent, HeaderComponent, FooterComponent,\r\n ReservationDetailsComponent,\r\n GuestDetailsComponent,\r\n ConfirmationDetailsComponent,\r\n TablesLayoutComponent,\r\n MessageComponent,\r\n CoverTypePriceFilter, SeatingTypeFilter, TermsOfUseComponent, PrivacyPolicyComponent, DataRetentionPolicyComponent],\r\n imports: [\r\n CommonModule,\r\n RouterModule,\r\n TranslateModule,\r\n FormsModule,\r\n MaterialModule,\r\n SharedModule,\r\n \r\n ],\r\n exports: [LayoutComponent],\r\n providers: [LayoutService, ReservationService]\r\n})\r\nexport class LayoutModule { }\r\n\r\n","import { NgModule } from '@angular/core';\r\nimport { TranslateModule } from \"@ngx-translate/core\";\r\nimport { FormsModule, ReactiveFormsModule } from \"@angular/forms\";\r\nimport { RouterModule } from '@angular/router';\r\nimport { MaterialModule } from '../material-module';\r\nimport {MatIconModule} from '@angular/material/icon';\r\nimport { SharedModule } from '../shared/shared.module';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SurveyApiService } from './survey-api.service';\r\nimport { SurveyMainComponent } from './survey-main.component';\r\nimport { HeaderComponent } from '../survey-main/header/header.component';\r\nimport { ActivitySummaryComponent } from '../survey-main/activity-summary/activity-summary.component';\r\nimport { SurveyFormComponent } from '../survey-main/survey-form/survey-form.component';\r\nimport { FooterComponent } from '../survey-main/footer/footer.component';\r\n\r\n\r\n\r\n@NgModule({\r\n declarations: [SurveyMainComponent, HeaderComponent, ActivitySummaryComponent, SurveyFormComponent, FooterComponent],\r\n imports: [\r\n CommonModule,\r\n TranslateModule,\r\n FormsModule,\r\n RouterModule,\r\n MaterialModule,\r\n MatIconModule,\r\n SharedModule,\r\n ],\r\n exports: [SurveyMainComponent],\r\n providers: [SurveyApiService]\r\n})\r\nexport class SurveyModule { }\r\n","import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest, HttpResponse } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable, Subscription } from 'rxjs';\r\nimport { OperationResultDTO, OperationResultState, ValidationMessageType } from 'src/app/shared/Models/ResultModels';\r\nimport { GuestService } from 'src/app/shared/services/guest.service';\r\nimport { LoaderService } from './loader.service';\r\n\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LoaderInterceptor implements HttpInterceptor {\r\n private requests: HttpRequest[] = [];\r\n private pendingRequests: HttpRequest[] = [];\r\n clonedObs: any = null;\r\n managerPINSubscription: Subscription = new Subscription();\r\n constructor(private loaderService: LoaderService, private gs: GuestService) {\r\n\r\n }\r\n\r\n removeRequest(req: HttpRequest) {\r\n const i = this.requests.indexOf(req);\r\n if (i >= 0) {\r\n this.requests.splice(i, 1);\r\n }\r\n this.loaderService.isLoading.next(this.requests.length > 0);\r\n\r\n }\r\n intercept(req: HttpRequest, next: HttpHandler): Observable> {\r\n this.requests.push(req);\r\n this.loaderService.isLoading.next(true);\r\n return Observable.create(observer => {\r\n const subscription = next.handle(req)\r\n .subscribe(\r\n event => {\r\n if (event instanceof HttpResponse) {\r\n\r\n let isValid = true;\r\n isValid = this.PayloadProcesser(event.body as OperationResultDTO, req.body);\r\n\r\n this.removeRequest(req);\r\n if (isValid) {\r\n observer.next(event);\r\n }\r\n }\r\n },\r\n err => {\r\n observer.error(err);\r\n },\r\n () => {\r\n this.removeRequest(req);\r\n if (this.pendingRequests.length == 0) {\r\n this.clonedObs = null;\r\n }\r\n observer.complete();\r\n });\r\n return () => {\r\n this.removeRequest(req);\r\n subscription.unsubscribe();\r\n };\r\n });\r\n\r\n }\r\n\r\n PayloadProcesser(result: OperationResultDTO, requestBody: any) {\r\n let isValid = true;\r\n if (this.gs.byPassValidation) {\r\n // this.gs.byPassValidation = false;\r\n\r\n if (!result.ExceptionMessage) {\r\n\r\n return isValid;\r\n\r\n }\r\n }\r\n\r\n const isBookingApiRequest = requestBody?.isBookingApiRequest || (requestBody instanceof Array && requestBody?.filter(y => y.isBookingApiRequest)?.length)\r\n \r\n this.gs.bShowOverbookingErrorDialog = isBookingApiRequest && (result?.ValidationMessages?.filter(x => x.Type == ValidationMessageType.Consent).length) ? true : false; \r\n if(this.gs.bShowOverbookingErrorDialog) this.gs.isOverlapErrorFromValidateCartApi = requestBody?.isValidateCartApi;\r\n\r\n switch (result.State) {\r\n case OperationResultState.Success: \r\n break;\r\n\r\n case OperationResultState.ServerException:\r\n this.OnOperationCompletedWithServerError(result);\r\n isValid = false;\r\n break;\r\n\r\n case OperationResultState.ValidationErrors:\r\n this.OnOperationCompletedWithValidationErrors(result); \r\n isValid = false;\r\n break;\r\n\r\n case OperationResultState.InsufficientPermissions:\r\n isValid = false;\r\n break;\r\n\r\n case OperationResultState.AccessDenied:\r\n this.OnOperationCompletedWithAccessDenied(result);\r\n isValid = false;\r\n break;\r\n case OperationResultState.Consent:\r\n if(this.gs.bShowOverbookingErrorDialog) this.OnOperationCompletedWithValidationErrors(result);\r\n isValid = isBookingApiRequest ? this.gs.bShowOverbookingErrorDialog : false;\r\n break;\r\n\r\n }\r\n\r\n \r\n return isValid;\r\n }\r\n\r\n OnOperationCompletedWithServerError(result: OperationResultDTO, state?) {\r\n this.ShowNotification(result);\r\n }\r\n\r\n OnOperationCompletedWithValidationErrors(result: OperationResultDTO, state?) {\r\n this.ShowNotification(result);\r\n }\r\n\r\n OnOperationCompletedWithAccessDenied(result: OperationResultDTO, state?) {\r\n this.ShowNotification(result, true);\r\n }\r\n\r\n\r\n ShowNotification(response: OperationResultDTO, AccessDenied?: boolean) {\r\n this.gs.setMessageState('', 0);\r\n if (response.ExceptionMessage) {\r\n if (!this.gs.isVersion2) {\r\n this.gs.setMessageState(this.gs.message.message + response.ExceptionMessage, 0);\r\n }\r\n else {\r\n this.gs.stopLoader();\r\n this.gs.openSnackBar(response.ExceptionMessage, 'CLOSE', this.gs.ConfigSettings.snackBarTime, 'large-size-snack');\r\n }\r\n return;\r\n }\r\n let validationError = '';\r\n\r\n if (response.ValidationMessages && response.ValidationMessages.filter(msg => (msg.Type == ValidationMessageType.Error || msg.Type == ValidationMessageType.Consent)).length > 0) {\r\n response.ValidationMessages.filter(msg => (msg.Type == ValidationMessageType.Error || msg.Type == ValidationMessageType.Consent)).forEach(msg => {\r\n if (!this.gs.isVersion2) {\r\n this.gs.setMessageState(this.gs.message.message + msg.Message + \"\\n\", 0);\r\n }\r\n else {\r\n validationError += msg.Message + \"\\n\";\r\n this.gs.stopLoader();\r\n this.gs.openSnackBar(validationError, 'CLOSE', this.gs.ConfigSettings.snackBarTime, 'large-size-snack');\r\n }\r\n });\r\n }\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ActivitiesComponent } from './activities.component';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { TranslateModule } from '@ngx-translate/core';\r\nimport { MaterialModule } from '../material-module';\r\nimport { SharedModule } from '../shared/shared.module';\r\nimport { ActivitiesService } from './activities.service';\r\nimport { ActivityClassBookingComponent } from './activity-class-booking/activity-class-booking.component';\r\nimport { ActivityFilterComponent } from './activity-class-booking/activity-filter/activity-filter.component';\r\nimport { ActivitySelectorComponent } from './activity-class-booking/activity-selector/activity-selector.component';\r\nimport { ActivitySlotViewComponent } from './activity-class-booking/activity-slot-view/activity-slot-view.component';\r\nimport { ActivitySummaryComponent } from './activity-summary/activity-summary.component';\r\nimport { ActivityGuestEditComponent } from './activity-summary/activity-guest-edit/activity-guest-edit.component';\r\nimport { ActivityCommonHeaderComponent } from './activity-common-header/activity-common-header/activity-common-header.component';\r\nimport { ActivitySlotSummaryComponent } from './activity-summary/activity-slot-summary/activity-slot-summary.component';\r\nimport { ActivityBookingSummaryComponent } from './activity-booking-summary/activity-booking-summary.component';\r\nimport { ActivityCommonFooterComponent } from './activity-common-footer/activity-common-footer.component';\r\nimport { SlotTimeFormatter } from '../shared/pipes/slot-time-formatter.pipe';\r\nimport { MessageComponent } from './message/message.component';\r\nimport { OpenBookingSelectorComponent } from './open-booking-selector/open-booking-selector.component';\r\nimport { ActivityBookingComponent } from './activity-booking/activity-booking.component';\r\n// import { OwlDateTimeModule, OwlNativeDateTimeModule } from 'ng-pick-datetime';\r\nimport { RatePlanDetailsComponent } from './rate-plan-details/rate-plan-details.component';\r\nimport { ClassInfoComponent } from './activity-class-booking/class-info/class-info.component';\r\nimport { ActivityScheduleComponent } from './activity-class-booking/activity-schedule/activity-schedule.component';\r\nimport { OpenBookingSlotViewComponent } from './open-booking-slot-view/open-booking-slot-view.component';\r\nimport { ActivityAdditionalguestComponent } from './activity-summary/activity-additionalguest/activity-additionalguest.component';\r\nimport { CartDetailsComponent } from './cart-details/cart-details.component';\r\nimport { PrivateActivityBookingComponent } from './private-activity-booking/private-activity-booking.component';\r\n\r\n@NgModule({\r\ndeclarations: [\r\nActivitiesComponent,\r\nActivityClassBookingComponent, \r\nActivityFilterComponent,\r\nActivitySelectorComponent,\r\nActivitySlotViewComponent,\r\nActivitySummaryComponent,\r\nActivityGuestEditComponent,\r\nActivityCommonHeaderComponent,\r\nActivitySlotSummaryComponent,\r\nActivityBookingSummaryComponent,\r\nActivityCommonFooterComponent,\r\nMessageComponent, \r\nOpenBookingSelectorComponent, \r\nActivityBookingComponent, \r\nRatePlanDetailsComponent, \r\nClassInfoComponent, \r\nActivityScheduleComponent, \r\nOpenBookingSlotViewComponent, \r\nActivityAdditionalguestComponent, CartDetailsComponent, PrivateActivityBookingComponent],\r\nimports: [\r\nCommonModule,\r\nTranslateModule,\r\nFormsModule,\r\nMaterialModule,\r\nSharedModule,\r\n// OwlDateTimeModule, OwlNativeDateTimeModule\r\n\r\n],\r\nproviders: [ActivitiesService, SlotTimeFormatter]\r\n})\r\nexport class ActivitiesModule { }\r\n","import { CommonModule } from '@angular/common';\r\nimport { HttpClient, HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';\r\nimport { NgModule } from '@angular/core';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { MaterialModule } from '../material-module';\r\nimport { SharedModule } from '../shared/shared.module';\r\nimport { CoreRoutingModule } from './core-routing.module';\r\nimport { TranslateLoader, TranslateModule } from '@ngx-translate/core';\r\nimport { TranslateHttpLoader } from '@ngx-translate/http-loader';\r\nimport { LayoutModule } from '../layout/layout.module';\r\nimport { SurveyModule } from '../survey-main/survey.module';\r\nimport { LoaderService } from './services/loader.service';\r\nimport { LoaderInterceptor } from './services/loaderInterceptor.service';\r\nimport { ActivitiesModule } from '../activities/activities.module';\r\nimport { ActivitiesLiteModule } from '../activities-lite/activities-lite.module';\r\nimport { V2HeaderComponent } from '../v2-layout/v2-header/v2-header.component';\r\nimport { CdTimerModule } from 'angular-cd-timer';\r\nimport { V2FooterComponent } from '../v2-layout/v2-footer/v2-footer.component';\r\nimport { LoaderComponent } from './loader/loader.component';\r\n\r\n\r\nexport function HttpLoaderFactory(http: HttpClient) {\r\n return new TranslateHttpLoader(http, 'assets/i18n/');\r\n}\r\n@NgModule({\r\n declarations: [LoaderComponent,V2HeaderComponent, V2FooterComponent],\r\n imports: [\r\n CommonModule,\r\n CoreRoutingModule,\r\n SharedModule,\r\n MaterialModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n HttpClientModule,\r\n LayoutModule,\r\n ActivitiesModule,\r\n ActivitiesLiteModule,\r\n SurveyModule,\r\n TranslateModule.forRoot({\r\n loader: {\r\n provide: TranslateLoader,\r\n useFactory: HttpLoaderFactory,\r\n deps: [HttpClient]\r\n }\r\n }),\r\n CdTimerModule\r\n ],\r\n providers: [\r\n LoaderService,\r\n { provide: HTTP_INTERCEPTORS, useClass: LoaderInterceptor, multi: true },\r\n ],\r\n exports: [LoaderComponent,V2HeaderComponent, V2FooterComponent]\r\n})\r\nexport class CoreModule { }\r\n","import { BrowserModule } from '@angular/platform-browser';\r\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\r\nimport { NgModule, ErrorHandler, APP_INITIALIZER, CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { AppInitializer } from './app-initializer';\r\nimport { CdkTableModule } from '@angular/cdk/table';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { MaterialModule } from './material-module';\r\nimport { AppRoutingModule } from './app-routing.module';\r\nimport { AppComponent } from './app.component';\r\nimport { CoreModule } from './core/core.module';\r\nimport { HttpClientModule } from '@angular/common/http';\r\nimport { NgbModule } from '@ng-bootstrap/ng-bootstrap';\r\nimport { APP_BASE_HREF, DatePipe } from '@angular/common';\r\n// import { NgxMatTimepickerModule } from 'ngx-mat-timepicker';\r\nimport { ScrollingModule } from '@angular/cdk/scrolling';\r\n\r\nimport {\r\n PerfectScrollbarConfigInterface,\r\n PERFECT_SCROLLBAR_CONFIG\r\n} from 'ngx-perfect-scrollbar';\r\nconst DEFAULT_PERFECT_SCROLLBAR_CONFIG: PerfectScrollbarConfigInterface = {\r\n wheelPropagation: true,\r\n minScrollbarLength: 20\r\n};\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { ErrorComponent } from './error/error.component';\r\nimport { CloseScrollStrategy, Overlay } from '@angular/cdk/overlay';\r\nimport { MAT_AUTOCOMPLETE_SCROLL_STRATEGY } from '@angular/material/autocomplete';\r\nimport { environment } from 'src/environments/environment';\r\nimport { ToastrModule } from 'ngx-toastr';\r\nimport { PerfectScrollbarModule } from 'ngx-perfect-scrollbar';\r\nimport { CdTimerModule } from 'angular-cd-timer';\r\nimport { NgxSpinnerModule } from 'ngx-spinner';\r\n\r\nimport { TranslateModule } from '@ngx-translate/core';\r\nimport { MomentDateAdapter, MAT_MOMENT_DATE_ADAPTER_OPTIONS, MAT_MOMENT_DATE_FORMATS } from '@angular/material-moment-adapter';\r\nimport { MAT_DATE_LOCALE, DateAdapter, MAT_DATE_FORMATS } from '@angular/material/core';\r\nexport function init_app(appInit: AppInitializer) {\r\n return () => appInit.initializeApp();\r\n}\r\n\r\n\r\nexport function scrollFactory(overlay: Overlay): () => CloseScrollStrategy {\r\n return () => overlay.scrollStrategies.close();\r\n}\r\n\r\n\r\n@NgModule({\r\n declarations: [\r\n AppComponent,\r\n ErrorComponent\r\n ],\r\n imports: [\r\n BrowserModule,\r\n AppRoutingModule,\r\n CoreModule,\r\n BrowserAnimationsModule,\r\n AppRoutingModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MaterialModule,\r\n CdkTableModule,\r\n HttpClientModule,\r\n NgbModule,\r\n PerfectScrollbarModule,\r\n // NgxMatTimepickerModule,\r\n NgbModule,\r\n MatIconModule,\r\n ToastrModule.forRoot(),\r\n ScrollingModule,\r\n NgxSpinnerModule,\r\n CdTimerModule,\r\n TranslateModule\r\n ],\r\n providers: [AppInitializer, DatePipe, {\r\n provide: PERFECT_SCROLLBAR_CONFIG,\r\n useValue: DEFAULT_PERFECT_SCROLLBAR_CONFIG\r\n },\r\n {\r\n provide: APP_BASE_HREF,\r\n useValue: environment.app_base_href,\r\n },\r\n { provide: APP_INITIALIZER, useFactory: init_app, deps: [AppInitializer], multi: true },\r\n { provide: MAT_AUTOCOMPLETE_SCROLL_STRATEGY, useFactory: scrollFactory, deps: [Overlay] },\r\n {\r\n provide: MAT_DATE_LOCALE,\r\n deps: [AppInitializer],\r\n useFactory: (appInit: any) => appInit.defaultLocale()\r\n },\r\n {\r\n provide: DateAdapter,\r\n useClass: MomentDateAdapter,\r\n deps: [MAT_DATE_LOCALE, MAT_MOMENT_DATE_ADAPTER_OPTIONS]\r\n },\r\n { provide: MAT_DATE_FORMATS, useValue: MAT_MOMENT_DATE_FORMATS }\r\n ],\r\n bootstrap: [AppComponent],\r\n schemas: [CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA],\r\n exports:[TranslateModule]\r\n})\r\nexport class AppModule { }\r\n\r\n","import { enableProdMode } from '@angular/core';\r\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\r\n\r\nimport { AppModule } from './app/app.module';\r\nimport { environment } from './environments/environment';\r\n\r\nif (environment.production) {\r\n enableProdMode();\r\n if (window) {\r\n window.console.log = () => { }; // disable any console.log debugging statements in production mode\r\n }\r\n}\r\n\r\nplatformBrowserDynamic().bootstrapModule(AppModule)\r\n .catch(err => console.error(err));\r\n","\nconst canPromise = require('./can-promise')\n\nconst QRCode = require('./core/qrcode')\nconst CanvasRenderer = require('./renderer/canvas')\nconst SvgRenderer = require('./renderer/svg-tag.js')\n\nfunction renderCanvas (renderFunc, canvas, text, opts, cb) {\n const args = [].slice.call(arguments, 1)\n const argsNum = args.length\n const isLastArgCb = typeof args[argsNum - 1] === 'function'\n\n if (!isLastArgCb && !canPromise()) {\n throw new Error('Callback required as last argument')\n }\n\n if (isLastArgCb) {\n if (argsNum < 2) {\n throw new Error('Too few arguments provided')\n }\n\n if (argsNum === 2) {\n cb = text\n text = canvas\n canvas = opts = undefined\n } else if (argsNum === 3) {\n if (canvas.getContext && typeof cb === 'undefined') {\n cb = opts\n opts = undefined\n } else {\n cb = opts\n opts = text\n text = canvas\n canvas = undefined\n }\n }\n } else {\n if (argsNum < 1) {\n throw new Error('Too few arguments provided')\n }\n\n if (argsNum === 1) {\n text = canvas\n canvas = opts = undefined\n } else if (argsNum === 2 && !canvas.getContext) {\n opts = text\n text = canvas\n canvas = undefined\n }\n\n return new Promise(function (resolve, reject) {\n try {\n const data = QRCode.create(text, opts)\n resolve(renderFunc(data, canvas, opts))\n } catch (e) {\n reject(e)\n }\n })\n }\n\n try {\n const data = QRCode.create(text, opts)\n cb(null, renderFunc(data, canvas, opts))\n } catch (e) {\n cb(e)\n }\n}\n\nexports.create = QRCode.create\nexports.toCanvas = renderCanvas.bind(null, CanvasRenderer.render)\nexports.toDataURL = renderCanvas.bind(null, CanvasRenderer.renderToDataURL)\n\n// only svg for now.\nexports.toString = renderCanvas.bind(null, function (data, _, opts) {\n return SvgRenderer.render(data, opts)\n})\n","// can-promise has a crash in some versions of react native that dont have\n// standard global objects\n// https://github.com/soldair/node-qrcode/issues/157\n\nmodule.exports = function () {\n return typeof Promise === 'function' && Promise.prototype && Promise.prototype.then\n}\n","/**\n * Alignment pattern are fixed reference pattern in defined positions\n * in a matrix symbology, which enables the decode software to re-synchronise\n * the coordinate mapping of the image modules in the event of moderate amounts\n * of distortion of the image.\n *\n * Alignment patterns are present only in QR Code symbols of version 2 or larger\n * and their number depends on the symbol version.\n */\n\nconst getSymbolSize = require('./utils').getSymbolSize\n\n/**\n * Calculate the row/column coordinates of the center module of each alignment pattern\n * for the specified QR Code version.\n *\n * The alignment patterns are positioned symmetrically on either side of the diagonal\n * running from the top left corner of the symbol to the bottom right corner.\n *\n * Since positions are simmetrical only half of the coordinates are returned.\n * Each item of the array will represent in turn the x and y coordinate.\n * @see {@link getPositions}\n *\n * @param {Number} version QR Code version\n * @return {Array} Array of coordinate\n */\nexports.getRowColCoords = function getRowColCoords (version) {\n if (version === 1) return []\n\n const posCount = Math.floor(version / 7) + 2\n const size = getSymbolSize(version)\n const intervals = size === 145 ? 26 : Math.ceil((size - 13) / (2 * posCount - 2)) * 2\n const positions = [size - 7] // Last coord is always (size - 7)\n\n for (let i = 1; i < posCount - 1; i++) {\n positions[i] = positions[i - 1] - intervals\n }\n\n positions.push(6) // First coord is always 6\n\n return positions.reverse()\n}\n\n/**\n * Returns an array containing the positions of each alignment pattern.\n * Each array's element represent the center point of the pattern as (x, y) coordinates\n *\n * Coordinates are calculated expanding the row/column coordinates returned by {@link getRowColCoords}\n * and filtering out the items that overlaps with finder pattern\n *\n * @example\n * For a Version 7 symbol {@link getRowColCoords} returns values 6, 22 and 38.\n * The alignment patterns, therefore, are to be centered on (row, column)\n * positions (6,22), (22,6), (22,22), (22,38), (38,22), (38,38).\n * Note that the coordinates (6,6), (6,38), (38,6) are occupied by finder patterns\n * and are not therefore used for alignment patterns.\n *\n * let pos = getPositions(7)\n * // [[6,22], [22,6], [22,22], [22,38], [38,22], [38,38]]\n *\n * @param {Number} version QR Code version\n * @return {Array} Array of coordinates\n */\nexports.getPositions = function getPositions (version) {\n const coords = []\n const pos = exports.getRowColCoords(version)\n const posLength = pos.length\n\n for (let i = 0; i < posLength; i++) {\n for (let j = 0; j < posLength; j++) {\n // Skip if position is occupied by finder patterns\n if ((i === 0 && j === 0) || // top-left\n (i === 0 && j === posLength - 1) || // bottom-left\n (i === posLength - 1 && j === 0)) { // top-right\n continue\n }\n\n coords.push([pos[i], pos[j]])\n }\n }\n\n return coords\n}\n","const Mode = require('./mode')\n\n/**\n * Array of characters available in alphanumeric mode\n *\n * As per QR Code specification, to each character\n * is assigned a value from 0 to 44 which in this case coincides\n * with the array index\n *\n * @type {Array}\n */\nconst ALPHA_NUM_CHARS = [\n '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',\n 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',\n 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',\n ' ', '$', '%', '*', '+', '-', '.', '/', ':'\n]\n\nfunction AlphanumericData (data) {\n this.mode = Mode.ALPHANUMERIC\n this.data = data\n}\n\nAlphanumericData.getBitsLength = function getBitsLength (length) {\n return 11 * Math.floor(length / 2) + 6 * (length % 2)\n}\n\nAlphanumericData.prototype.getLength = function getLength () {\n return this.data.length\n}\n\nAlphanumericData.prototype.getBitsLength = function getBitsLength () {\n return AlphanumericData.getBitsLength(this.data.length)\n}\n\nAlphanumericData.prototype.write = function write (bitBuffer) {\n let i\n\n // Input data characters are divided into groups of two characters\n // and encoded as 11-bit binary codes.\n for (i = 0; i + 2 <= this.data.length; i += 2) {\n // The character value of the first character is multiplied by 45\n let value = ALPHA_NUM_CHARS.indexOf(this.data[i]) * 45\n\n // The character value of the second digit is added to the product\n value += ALPHA_NUM_CHARS.indexOf(this.data[i + 1])\n\n // The sum is then stored as 11-bit binary number\n bitBuffer.put(value, 11)\n }\n\n // If the number of input data characters is not a multiple of two,\n // the character value of the final character is encoded as a 6-bit binary number.\n if (this.data.length % 2) {\n bitBuffer.put(ALPHA_NUM_CHARS.indexOf(this.data[i]), 6)\n }\n}\n\nmodule.exports = AlphanumericData\n","function BitBuffer () {\n this.buffer = []\n this.length = 0\n}\n\nBitBuffer.prototype = {\n\n get: function (index) {\n const bufIndex = Math.floor(index / 8)\n return ((this.buffer[bufIndex] >>> (7 - index % 8)) & 1) === 1\n },\n\n put: function (num, length) {\n for (let i = 0; i < length; i++) {\n this.putBit(((num >>> (length - i - 1)) & 1) === 1)\n }\n },\n\n getLengthInBits: function () {\n return this.length\n },\n\n putBit: function (bit) {\n const bufIndex = Math.floor(this.length / 8)\n if (this.buffer.length <= bufIndex) {\n this.buffer.push(0)\n }\n\n if (bit) {\n this.buffer[bufIndex] |= (0x80 >>> (this.length % 8))\n }\n\n this.length++\n }\n}\n\nmodule.exports = BitBuffer\n","/**\n * Helper class to handle QR Code symbol modules\n *\n * @param {Number} size Symbol size\n */\nfunction BitMatrix (size) {\n if (!size || size < 1) {\n throw new Error('BitMatrix size must be defined and greater than 0')\n }\n\n this.size = size\n this.data = new Uint8Array(size * size)\n this.reservedBit = new Uint8Array(size * size)\n}\n\n/**\n * Set bit value at specified location\n * If reserved flag is set, this bit will be ignored during masking process\n *\n * @param {Number} row\n * @param {Number} col\n * @param {Boolean} value\n * @param {Boolean} reserved\n */\nBitMatrix.prototype.set = function (row, col, value, reserved) {\n const index = row * this.size + col\n this.data[index] = value\n if (reserved) this.reservedBit[index] = true\n}\n\n/**\n * Returns bit value at specified location\n *\n * @param {Number} row\n * @param {Number} col\n * @return {Boolean}\n */\nBitMatrix.prototype.get = function (row, col) {\n return this.data[row * this.size + col]\n}\n\n/**\n * Applies xor operator at specified location\n * (used during masking process)\n *\n * @param {Number} row\n * @param {Number} col\n * @param {Boolean} value\n */\nBitMatrix.prototype.xor = function (row, col, value) {\n this.data[row * this.size + col] ^= value\n}\n\n/**\n * Check if bit at specified location is reserved\n *\n * @param {Number} row\n * @param {Number} col\n * @return {Boolean}\n */\nBitMatrix.prototype.isReserved = function (row, col) {\n return this.reservedBit[row * this.size + col]\n}\n\nmodule.exports = BitMatrix\n","const encodeUtf8 = require('encode-utf8')\nconst Mode = require('./mode')\n\nfunction ByteData (data) {\n this.mode = Mode.BYTE\n this.data = new Uint8Array(encodeUtf8(data))\n}\n\nByteData.getBitsLength = function getBitsLength (length) {\n return length * 8\n}\n\nByteData.prototype.getLength = function getLength () {\n return this.data.length\n}\n\nByteData.prototype.getBitsLength = function getBitsLength () {\n return ByteData.getBitsLength(this.data.length)\n}\n\nByteData.prototype.write = function (bitBuffer) {\n for (let i = 0, l = this.data.length; i < l; i++) {\n bitBuffer.put(this.data[i], 8)\n }\n}\n\nmodule.exports = ByteData\n","const ECLevel = require('./error-correction-level')\r\n\r\nconst EC_BLOCKS_TABLE = [\r\n// L M Q H\r\n 1, 1, 1, 1,\r\n 1, 1, 1, 1,\r\n 1, 1, 2, 2,\r\n 1, 2, 2, 4,\r\n 1, 2, 4, 4,\r\n 2, 4, 4, 4,\r\n 2, 4, 6, 5,\r\n 2, 4, 6, 6,\r\n 2, 5, 8, 8,\r\n 4, 5, 8, 8,\r\n 4, 5, 8, 11,\r\n 4, 8, 10, 11,\r\n 4, 9, 12, 16,\r\n 4, 9, 16, 16,\r\n 6, 10, 12, 18,\r\n 6, 10, 17, 16,\r\n 6, 11, 16, 19,\r\n 6, 13, 18, 21,\r\n 7, 14, 21, 25,\r\n 8, 16, 20, 25,\r\n 8, 17, 23, 25,\r\n 9, 17, 23, 34,\r\n 9, 18, 25, 30,\r\n 10, 20, 27, 32,\r\n 12, 21, 29, 35,\r\n 12, 23, 34, 37,\r\n 12, 25, 34, 40,\r\n 13, 26, 35, 42,\r\n 14, 28, 38, 45,\r\n 15, 29, 40, 48,\r\n 16, 31, 43, 51,\r\n 17, 33, 45, 54,\r\n 18, 35, 48, 57,\r\n 19, 37, 51, 60,\r\n 19, 38, 53, 63,\r\n 20, 40, 56, 66,\r\n 21, 43, 59, 70,\r\n 22, 45, 62, 74,\r\n 24, 47, 65, 77,\r\n 25, 49, 68, 81\r\n]\r\n\r\nconst EC_CODEWORDS_TABLE = [\r\n// L M Q H\r\n 7, 10, 13, 17,\r\n 10, 16, 22, 28,\r\n 15, 26, 36, 44,\r\n 20, 36, 52, 64,\r\n 26, 48, 72, 88,\r\n 36, 64, 96, 112,\r\n 40, 72, 108, 130,\r\n 48, 88, 132, 156,\r\n 60, 110, 160, 192,\r\n 72, 130, 192, 224,\r\n 80, 150, 224, 264,\r\n 96, 176, 260, 308,\r\n 104, 198, 288, 352,\r\n 120, 216, 320, 384,\r\n 132, 240, 360, 432,\r\n 144, 280, 408, 480,\r\n 168, 308, 448, 532,\r\n 180, 338, 504, 588,\r\n 196, 364, 546, 650,\r\n 224, 416, 600, 700,\r\n 224, 442, 644, 750,\r\n 252, 476, 690, 816,\r\n 270, 504, 750, 900,\r\n 300, 560, 810, 960,\r\n 312, 588, 870, 1050,\r\n 336, 644, 952, 1110,\r\n 360, 700, 1020, 1200,\r\n 390, 728, 1050, 1260,\r\n 420, 784, 1140, 1350,\r\n 450, 812, 1200, 1440,\r\n 480, 868, 1290, 1530,\r\n 510, 924, 1350, 1620,\r\n 540, 980, 1440, 1710,\r\n 570, 1036, 1530, 1800,\r\n 570, 1064, 1590, 1890,\r\n 600, 1120, 1680, 1980,\r\n 630, 1204, 1770, 2100,\r\n 660, 1260, 1860, 2220,\r\n 720, 1316, 1950, 2310,\r\n 750, 1372, 2040, 2430\r\n]\r\n\r\n/**\r\n * Returns the number of error correction block that the QR Code should contain\r\n * for the specified version and error correction level.\r\n *\r\n * @param {Number} version QR Code version\r\n * @param {Number} errorCorrectionLevel Error correction level\r\n * @return {Number} Number of error correction blocks\r\n */\r\nexports.getBlocksCount = function getBlocksCount (version, errorCorrectionLevel) {\r\n switch (errorCorrectionLevel) {\r\n case ECLevel.L:\r\n return EC_BLOCKS_TABLE[(version - 1) * 4 + 0]\r\n case ECLevel.M:\r\n return EC_BLOCKS_TABLE[(version - 1) * 4 + 1]\r\n case ECLevel.Q:\r\n return EC_BLOCKS_TABLE[(version - 1) * 4 + 2]\r\n case ECLevel.H:\r\n return EC_BLOCKS_TABLE[(version - 1) * 4 + 3]\r\n default:\r\n return undefined\r\n }\r\n}\r\n\r\n/**\r\n * Returns the number of error correction codewords to use for the specified\r\n * version and error correction level.\r\n *\r\n * @param {Number} version QR Code version\r\n * @param {Number} errorCorrectionLevel Error correction level\r\n * @return {Number} Number of error correction codewords\r\n */\r\nexports.getTotalCodewordsCount = function getTotalCodewordsCount (version, errorCorrectionLevel) {\r\n switch (errorCorrectionLevel) {\r\n case ECLevel.L:\r\n return EC_CODEWORDS_TABLE[(version - 1) * 4 + 0]\r\n case ECLevel.M:\r\n return EC_CODEWORDS_TABLE[(version - 1) * 4 + 1]\r\n case ECLevel.Q:\r\n return EC_CODEWORDS_TABLE[(version - 1) * 4 + 2]\r\n case ECLevel.H:\r\n return EC_CODEWORDS_TABLE[(version - 1) * 4 + 3]\r\n default:\r\n return undefined\r\n }\r\n}\r\n","exports.L = { bit: 1 }\nexports.M = { bit: 0 }\nexports.Q = { bit: 3 }\nexports.H = { bit: 2 }\n\nfunction fromString (string) {\n if (typeof string !== 'string') {\n throw new Error('Param is not a string')\n }\n\n const lcStr = string.toLowerCase()\n\n switch (lcStr) {\n case 'l':\n case 'low':\n return exports.L\n\n case 'm':\n case 'medium':\n return exports.M\n\n case 'q':\n case 'quartile':\n return exports.Q\n\n case 'h':\n case 'high':\n return exports.H\n\n default:\n throw new Error('Unknown EC Level: ' + string)\n }\n}\n\nexports.isValid = function isValid (level) {\n return level && typeof level.bit !== 'undefined' &&\n level.bit >= 0 && level.bit < 4\n}\n\nexports.from = function from (value, defaultValue) {\n if (exports.isValid(value)) {\n return value\n }\n\n try {\n return fromString(value)\n } catch (e) {\n return defaultValue\n }\n}\n","const getSymbolSize = require('./utils').getSymbolSize\nconst FINDER_PATTERN_SIZE = 7\n\n/**\n * Returns an array containing the positions of each finder pattern.\n * Each array's element represent the top-left point of the pattern as (x, y) coordinates\n *\n * @param {Number} version QR Code version\n * @return {Array} Array of coordinates\n */\nexports.getPositions = function getPositions (version) {\n const size = getSymbolSize(version)\n\n return [\n // top-left\n [0, 0],\n // top-right\n [size - FINDER_PATTERN_SIZE, 0],\n // bottom-left\n [0, size - FINDER_PATTERN_SIZE]\n ]\n}\n","const Utils = require('./utils')\n\nconst G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0)\nconst G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1)\nconst G15_BCH = Utils.getBCHDigit(G15)\n\n/**\n * Returns format information with relative error correction bits\n *\n * The format information is a 15-bit sequence containing 5 data bits,\n * with 10 error correction bits calculated using the (15, 5) BCH code.\n *\n * @param {Number} errorCorrectionLevel Error correction level\n * @param {Number} mask Mask pattern\n * @return {Number} Encoded format information bits\n */\nexports.getEncodedBits = function getEncodedBits (errorCorrectionLevel, mask) {\n const data = ((errorCorrectionLevel.bit << 3) | mask)\n let d = data << 10\n\n while (Utils.getBCHDigit(d) - G15_BCH >= 0) {\n d ^= (G15 << (Utils.getBCHDigit(d) - G15_BCH))\n }\n\n // xor final data with mask pattern in order to ensure that\n // no combination of Error Correction Level and data mask pattern\n // will result in an all-zero data string\n return ((data << 10) | d) ^ G15_MASK\n}\n","const EXP_TABLE = new Uint8Array(512)\nconst LOG_TABLE = new Uint8Array(256)\n/**\n * Precompute the log and anti-log tables for faster computation later\n *\n * For each possible value in the galois field 2^8, we will pre-compute\n * the logarithm and anti-logarithm (exponential) of this value\n *\n * ref {@link https://en.wikiversity.org/wiki/Reed%E2%80%93Solomon_codes_for_coders#Introduction_to_mathematical_fields}\n */\n;(function initTables () {\n let x = 1\n for (let i = 0; i < 255; i++) {\n EXP_TABLE[i] = x\n LOG_TABLE[x] = i\n\n x <<= 1 // multiply by 2\n\n // The QR code specification says to use byte-wise modulo 100011101 arithmetic.\n // This means that when a number is 256 or larger, it should be XORed with 0x11D.\n if (x & 0x100) { // similar to x >= 256, but a lot faster (because 0x100 == 256)\n x ^= 0x11D\n }\n }\n\n // Optimization: double the size of the anti-log table so that we don't need to mod 255 to\n // stay inside the bounds (because we will mainly use this table for the multiplication of\n // two GF numbers, no more).\n // @see {@link mul}\n for (let i = 255; i < 512; i++) {\n EXP_TABLE[i] = EXP_TABLE[i - 255]\n }\n}())\n\n/**\n * Returns log value of n inside Galois Field\n *\n * @param {Number} n\n * @return {Number}\n */\nexports.log = function log (n) {\n if (n < 1) throw new Error('log(' + n + ')')\n return LOG_TABLE[n]\n}\n\n/**\n * Returns anti-log value of n inside Galois Field\n *\n * @param {Number} n\n * @return {Number}\n */\nexports.exp = function exp (n) {\n return EXP_TABLE[n]\n}\n\n/**\n * Multiplies two number inside Galois Field\n *\n * @param {Number} x\n * @param {Number} y\n * @return {Number}\n */\nexports.mul = function mul (x, y) {\n if (x === 0 || y === 0) return 0\n\n // should be EXP_TABLE[(LOG_TABLE[x] + LOG_TABLE[y]) % 255] if EXP_TABLE wasn't oversized\n // @see {@link initTables}\n return EXP_TABLE[LOG_TABLE[x] + LOG_TABLE[y]]\n}\n","const Mode = require('./mode')\nconst Utils = require('./utils')\n\nfunction KanjiData (data) {\n this.mode = Mode.KANJI\n this.data = data\n}\n\nKanjiData.getBitsLength = function getBitsLength (length) {\n return length * 13\n}\n\nKanjiData.prototype.getLength = function getLength () {\n return this.data.length\n}\n\nKanjiData.prototype.getBitsLength = function getBitsLength () {\n return KanjiData.getBitsLength(this.data.length)\n}\n\nKanjiData.prototype.write = function (bitBuffer) {\n let i\n\n // In the Shift JIS system, Kanji characters are represented by a two byte combination.\n // These byte values are shifted from the JIS X 0208 values.\n // JIS X 0208 gives details of the shift coded representation.\n for (i = 0; i < this.data.length; i++) {\n let value = Utils.toSJIS(this.data[i])\n\n // For characters with Shift JIS values from 0x8140 to 0x9FFC:\n if (value >= 0x8140 && value <= 0x9FFC) {\n // Subtract 0x8140 from Shift JIS value\n value -= 0x8140\n\n // For characters with Shift JIS values from 0xE040 to 0xEBBF\n } else if (value >= 0xE040 && value <= 0xEBBF) {\n // Subtract 0xC140 from Shift JIS value\n value -= 0xC140\n } else {\n throw new Error(\n 'Invalid SJIS character: ' + this.data[i] + '\\n' +\n 'Make sure your charset is UTF-8')\n }\n\n // Multiply most significant byte of result by 0xC0\n // and add least significant byte to product\n value = (((value >>> 8) & 0xff) * 0xC0) + (value & 0xff)\n\n // Convert result to a 13-bit binary string\n bitBuffer.put(value, 13)\n }\n}\n\nmodule.exports = KanjiData\n","/**\n * Data mask pattern reference\n * @type {Object}\n */\nexports.Patterns = {\n PATTERN000: 0,\n PATTERN001: 1,\n PATTERN010: 2,\n PATTERN011: 3,\n PATTERN100: 4,\n PATTERN101: 5,\n PATTERN110: 6,\n PATTERN111: 7\n}\n\n/**\n * Weighted penalty scores for the undesirable features\n * @type {Object}\n */\nconst PenaltyScores = {\n N1: 3,\n N2: 3,\n N3: 40,\n N4: 10\n}\n\n/**\n * Check if mask pattern value is valid\n *\n * @param {Number} mask Mask pattern\n * @return {Boolean} true if valid, false otherwise\n */\nexports.isValid = function isValid (mask) {\n return mask != null && mask !== '' && !isNaN(mask) && mask >= 0 && mask <= 7\n}\n\n/**\n * Returns mask pattern from a value.\n * If value is not valid, returns undefined\n *\n * @param {Number|String} value Mask pattern value\n * @return {Number} Valid mask pattern or undefined\n */\nexports.from = function from (value) {\n return exports.isValid(value) ? parseInt(value, 10) : undefined\n}\n\n/**\n* Find adjacent modules in row/column with the same color\n* and assign a penalty value.\n*\n* Points: N1 + i\n* i is the amount by which the number of adjacent modules of the same color exceeds 5\n*/\nexports.getPenaltyN1 = function getPenaltyN1 (data) {\n const size = data.size\n let points = 0\n let sameCountCol = 0\n let sameCountRow = 0\n let lastCol = null\n let lastRow = null\n\n for (let row = 0; row < size; row++) {\n sameCountCol = sameCountRow = 0\n lastCol = lastRow = null\n\n for (let col = 0; col < size; col++) {\n let module = data.get(row, col)\n if (module === lastCol) {\n sameCountCol++\n } else {\n if (sameCountCol >= 5) points += PenaltyScores.N1 + (sameCountCol - 5)\n lastCol = module\n sameCountCol = 1\n }\n\n module = data.get(col, row)\n if (module === lastRow) {\n sameCountRow++\n } else {\n if (sameCountRow >= 5) points += PenaltyScores.N1 + (sameCountRow - 5)\n lastRow = module\n sameCountRow = 1\n }\n }\n\n if (sameCountCol >= 5) points += PenaltyScores.N1 + (sameCountCol - 5)\n if (sameCountRow >= 5) points += PenaltyScores.N1 + (sameCountRow - 5)\n }\n\n return points\n}\n\n/**\n * Find 2x2 blocks with the same color and assign a penalty value\n *\n * Points: N2 * (m - 1) * (n - 1)\n */\nexports.getPenaltyN2 = function getPenaltyN2 (data) {\n const size = data.size\n let points = 0\n\n for (let row = 0; row < size - 1; row++) {\n for (let col = 0; col < size - 1; col++) {\n const last = data.get(row, col) +\n data.get(row, col + 1) +\n data.get(row + 1, col) +\n data.get(row + 1, col + 1)\n\n if (last === 4 || last === 0) points++\n }\n }\n\n return points * PenaltyScores.N2\n}\n\n/**\n * Find 1:1:3:1:1 ratio (dark:light:dark:light:dark) pattern in row/column,\n * preceded or followed by light area 4 modules wide\n *\n * Points: N3 * number of pattern found\n */\nexports.getPenaltyN3 = function getPenaltyN3 (data) {\n const size = data.size\n let points = 0\n let bitsCol = 0\n let bitsRow = 0\n\n for (let row = 0; row < size; row++) {\n bitsCol = bitsRow = 0\n for (let col = 0; col < size; col++) {\n bitsCol = ((bitsCol << 1) & 0x7FF) | data.get(row, col)\n if (col >= 10 && (bitsCol === 0x5D0 || bitsCol === 0x05D)) points++\n\n bitsRow = ((bitsRow << 1) & 0x7FF) | data.get(col, row)\n if (col >= 10 && (bitsRow === 0x5D0 || bitsRow === 0x05D)) points++\n }\n }\n\n return points * PenaltyScores.N3\n}\n\n/**\n * Calculate proportion of dark modules in entire symbol\n *\n * Points: N4 * k\n *\n * k is the rating of the deviation of the proportion of dark modules\n * in the symbol from 50% in steps of 5%\n */\nexports.getPenaltyN4 = function getPenaltyN4 (data) {\n let darkCount = 0\n const modulesCount = data.data.length\n\n for (let i = 0; i < modulesCount; i++) darkCount += data.data[i]\n\n const k = Math.abs(Math.ceil((darkCount * 100 / modulesCount) / 5) - 10)\n\n return k * PenaltyScores.N4\n}\n\n/**\n * Return mask value at given position\n *\n * @param {Number} maskPattern Pattern reference value\n * @param {Number} i Row\n * @param {Number} j Column\n * @return {Boolean} Mask value\n */\nfunction getMaskAt (maskPattern, i, j) {\n switch (maskPattern) {\n case exports.Patterns.PATTERN000: return (i + j) % 2 === 0\n case exports.Patterns.PATTERN001: return i % 2 === 0\n case exports.Patterns.PATTERN010: return j % 3 === 0\n case exports.Patterns.PATTERN011: return (i + j) % 3 === 0\n case exports.Patterns.PATTERN100: return (Math.floor(i / 2) + Math.floor(j / 3)) % 2 === 0\n case exports.Patterns.PATTERN101: return (i * j) % 2 + (i * j) % 3 === 0\n case exports.Patterns.PATTERN110: return ((i * j) % 2 + (i * j) % 3) % 2 === 0\n case exports.Patterns.PATTERN111: return ((i * j) % 3 + (i + j) % 2) % 2 === 0\n\n default: throw new Error('bad maskPattern:' + maskPattern)\n }\n}\n\n/**\n * Apply a mask pattern to a BitMatrix\n *\n * @param {Number} pattern Pattern reference number\n * @param {BitMatrix} data BitMatrix data\n */\nexports.applyMask = function applyMask (pattern, data) {\n const size = data.size\n\n for (let col = 0; col < size; col++) {\n for (let row = 0; row < size; row++) {\n if (data.isReserved(row, col)) continue\n data.xor(row, col, getMaskAt(pattern, row, col))\n }\n }\n}\n\n/**\n * Returns the best mask pattern for data\n *\n * @param {BitMatrix} data\n * @return {Number} Mask pattern reference number\n */\nexports.getBestMask = function getBestMask (data, setupFormatFunc) {\n const numPatterns = Object.keys(exports.Patterns).length\n let bestPattern = 0\n let lowerPenalty = Infinity\n\n for (let p = 0; p < numPatterns; p++) {\n setupFormatFunc(p)\n exports.applyMask(p, data)\n\n // Calculate penalty\n const penalty =\n exports.getPenaltyN1(data) +\n exports.getPenaltyN2(data) +\n exports.getPenaltyN3(data) +\n exports.getPenaltyN4(data)\n\n // Undo previously applied mask\n exports.applyMask(p, data)\n\n if (penalty < lowerPenalty) {\n lowerPenalty = penalty\n bestPattern = p\n }\n }\n\n return bestPattern\n}\n","const VersionCheck = require('./version-check')\nconst Regex = require('./regex')\n\n/**\n * Numeric mode encodes data from the decimal digit set (0 - 9)\n * (byte values 30HEX to 39HEX).\n * Normally, 3 data characters are represented by 10 bits.\n *\n * @type {Object}\n */\nexports.NUMERIC = {\n id: 'Numeric',\n bit: 1 << 0,\n ccBits: [10, 12, 14]\n}\n\n/**\n * Alphanumeric mode encodes data from a set of 45 characters,\n * i.e. 10 numeric digits (0 - 9),\n * 26 alphabetic characters (A - Z),\n * and 9 symbols (SP, $, %, *, +, -, ., /, :).\n * Normally, two input characters are represented by 11 bits.\n *\n * @type {Object}\n */\nexports.ALPHANUMERIC = {\n id: 'Alphanumeric',\n bit: 1 << 1,\n ccBits: [9, 11, 13]\n}\n\n/**\n * In byte mode, data is encoded at 8 bits per character.\n *\n * @type {Object}\n */\nexports.BYTE = {\n id: 'Byte',\n bit: 1 << 2,\n ccBits: [8, 16, 16]\n}\n\n/**\n * The Kanji mode efficiently encodes Kanji characters in accordance with\n * the Shift JIS system based on JIS X 0208.\n * The Shift JIS values are shifted from the JIS X 0208 values.\n * JIS X 0208 gives details of the shift coded representation.\n * Each two-byte character value is compacted to a 13-bit binary codeword.\n *\n * @type {Object}\n */\nexports.KANJI = {\n id: 'Kanji',\n bit: 1 << 3,\n ccBits: [8, 10, 12]\n}\n\n/**\n * Mixed mode will contain a sequences of data in a combination of any of\n * the modes described above\n *\n * @type {Object}\n */\nexports.MIXED = {\n bit: -1\n}\n\n/**\n * Returns the number of bits needed to store the data length\n * according to QR Code specifications.\n *\n * @param {Mode} mode Data mode\n * @param {Number} version QR Code version\n * @return {Number} Number of bits\n */\nexports.getCharCountIndicator = function getCharCountIndicator (mode, version) {\n if (!mode.ccBits) throw new Error('Invalid mode: ' + mode)\n\n if (!VersionCheck.isValid(version)) {\n throw new Error('Invalid version: ' + version)\n }\n\n if (version >= 1 && version < 10) return mode.ccBits[0]\n else if (version < 27) return mode.ccBits[1]\n return mode.ccBits[2]\n}\n\n/**\n * Returns the most efficient mode to store the specified data\n *\n * @param {String} dataStr Input data string\n * @return {Mode} Best mode\n */\nexports.getBestModeForData = function getBestModeForData (dataStr) {\n if (Regex.testNumeric(dataStr)) return exports.NUMERIC\n else if (Regex.testAlphanumeric(dataStr)) return exports.ALPHANUMERIC\n else if (Regex.testKanji(dataStr)) return exports.KANJI\n else return exports.BYTE\n}\n\n/**\n * Return mode name as string\n *\n * @param {Mode} mode Mode object\n * @returns {String} Mode name\n */\nexports.toString = function toString (mode) {\n if (mode && mode.id) return mode.id\n throw new Error('Invalid mode')\n}\n\n/**\n * Check if input param is a valid mode object\n *\n * @param {Mode} mode Mode object\n * @returns {Boolean} True if valid mode, false otherwise\n */\nexports.isValid = function isValid (mode) {\n return mode && mode.bit && mode.ccBits\n}\n\n/**\n * Get mode object from its name\n *\n * @param {String} string Mode name\n * @returns {Mode} Mode object\n */\nfunction fromString (string) {\n if (typeof string !== 'string') {\n throw new Error('Param is not a string')\n }\n\n const lcStr = string.toLowerCase()\n\n switch (lcStr) {\n case 'numeric':\n return exports.NUMERIC\n case 'alphanumeric':\n return exports.ALPHANUMERIC\n case 'kanji':\n return exports.KANJI\n case 'byte':\n return exports.BYTE\n default:\n throw new Error('Unknown mode: ' + string)\n }\n}\n\n/**\n * Returns mode from a value.\n * If value is not a valid mode, returns defaultValue\n *\n * @param {Mode|String} value Encoding mode\n * @param {Mode} defaultValue Fallback value\n * @return {Mode} Encoding mode\n */\nexports.from = function from (value, defaultValue) {\n if (exports.isValid(value)) {\n return value\n }\n\n try {\n return fromString(value)\n } catch (e) {\n return defaultValue\n }\n}\n","const Mode = require('./mode')\n\nfunction NumericData (data) {\n this.mode = Mode.NUMERIC\n this.data = data.toString()\n}\n\nNumericData.getBitsLength = function getBitsLength (length) {\n return 10 * Math.floor(length / 3) + ((length % 3) ? ((length % 3) * 3 + 1) : 0)\n}\n\nNumericData.prototype.getLength = function getLength () {\n return this.data.length\n}\n\nNumericData.prototype.getBitsLength = function getBitsLength () {\n return NumericData.getBitsLength(this.data.length)\n}\n\nNumericData.prototype.write = function write (bitBuffer) {\n let i, group, value\n\n // The input data string is divided into groups of three digits,\n // and each group is converted to its 10-bit binary equivalent.\n for (i = 0; i + 3 <= this.data.length; i += 3) {\n group = this.data.substr(i, 3)\n value = parseInt(group, 10)\n\n bitBuffer.put(value, 10)\n }\n\n // If the number of input digits is not an exact multiple of three,\n // the final one or two digits are converted to 4 or 7 bits respectively.\n const remainingNum = this.data.length - i\n if (remainingNum > 0) {\n group = this.data.substr(i)\n value = parseInt(group, 10)\n\n bitBuffer.put(value, remainingNum * 3 + 1)\n }\n}\n\nmodule.exports = NumericData\n","const GF = require('./galois-field')\n\n/**\n * Multiplies two polynomials inside Galois Field\n *\n * @param {Uint8Array} p1 Polynomial\n * @param {Uint8Array} p2 Polynomial\n * @return {Uint8Array} Product of p1 and p2\n */\nexports.mul = function mul (p1, p2) {\n const coeff = new Uint8Array(p1.length + p2.length - 1)\n\n for (let i = 0; i < p1.length; i++) {\n for (let j = 0; j < p2.length; j++) {\n coeff[i + j] ^= GF.mul(p1[i], p2[j])\n }\n }\n\n return coeff\n}\n\n/**\n * Calculate the remainder of polynomials division\n *\n * @param {Uint8Array} divident Polynomial\n * @param {Uint8Array} divisor Polynomial\n * @return {Uint8Array} Remainder\n */\nexports.mod = function mod (divident, divisor) {\n let result = new Uint8Array(divident)\n\n while ((result.length - divisor.length) >= 0) {\n const coeff = result[0]\n\n for (let i = 0; i < divisor.length; i++) {\n result[i] ^= GF.mul(divisor[i], coeff)\n }\n\n // remove all zeros from buffer head\n let offset = 0\n while (offset < result.length && result[offset] === 0) offset++\n result = result.slice(offset)\n }\n\n return result\n}\n\n/**\n * Generate an irreducible generator polynomial of specified degree\n * (used by Reed-Solomon encoder)\n *\n * @param {Number} degree Degree of the generator polynomial\n * @return {Uint8Array} Buffer containing polynomial coefficients\n */\nexports.generateECPolynomial = function generateECPolynomial (degree) {\n let poly = new Uint8Array([1])\n for (let i = 0; i < degree; i++) {\n poly = exports.mul(poly, new Uint8Array([1, GF.exp(i)]))\n }\n\n return poly\n}\n","const Utils = require('./utils')\nconst ECLevel = require('./error-correction-level')\nconst BitBuffer = require('./bit-buffer')\nconst BitMatrix = require('./bit-matrix')\nconst AlignmentPattern = require('./alignment-pattern')\nconst FinderPattern = require('./finder-pattern')\nconst MaskPattern = require('./mask-pattern')\nconst ECCode = require('./error-correction-code')\nconst ReedSolomonEncoder = require('./reed-solomon-encoder')\nconst Version = require('./version')\nconst FormatInfo = require('./format-info')\nconst Mode = require('./mode')\nconst Segments = require('./segments')\n\n/**\n * QRCode for JavaScript\n *\n * modified by Ryan Day for nodejs support\n * Copyright (c) 2011 Ryan Day\n *\n * Licensed under the MIT license:\n * http://www.opensource.org/licenses/mit-license.php\n *\n//---------------------------------------------------------------------\n// QRCode for JavaScript\n//\n// Copyright (c) 2009 Kazuhiko Arase\n//\n// URL: http://www.d-project.com/\n//\n// Licensed under the MIT license:\n// http://www.opensource.org/licenses/mit-license.php\n//\n// The word \"QR Code\" is registered trademark of\n// DENSO WAVE INCORPORATED\n// http://www.denso-wave.com/qrcode/faqpatent-e.html\n//\n//---------------------------------------------------------------------\n*/\n\n/**\n * Add finder patterns bits to matrix\n *\n * @param {BitMatrix} matrix Modules matrix\n * @param {Number} version QR Code version\n */\nfunction setupFinderPattern (matrix, version) {\n const size = matrix.size\n const pos = FinderPattern.getPositions(version)\n\n for (let i = 0; i < pos.length; i++) {\n const row = pos[i][0]\n const col = pos[i][1]\n\n for (let r = -1; r <= 7; r++) {\n if (row + r <= -1 || size <= row + r) continue\n\n for (let c = -1; c <= 7; c++) {\n if (col + c <= -1 || size <= col + c) continue\n\n if ((r >= 0 && r <= 6 && (c === 0 || c === 6)) ||\n (c >= 0 && c <= 6 && (r === 0 || r === 6)) ||\n (r >= 2 && r <= 4 && c >= 2 && c <= 4)) {\n matrix.set(row + r, col + c, true, true)\n } else {\n matrix.set(row + r, col + c, false, true)\n }\n }\n }\n }\n}\n\n/**\n * Add timing pattern bits to matrix\n *\n * Note: this function must be called before {@link setupAlignmentPattern}\n *\n * @param {BitMatrix} matrix Modules matrix\n */\nfunction setupTimingPattern (matrix) {\n const size = matrix.size\n\n for (let r = 8; r < size - 8; r++) {\n const value = r % 2 === 0\n matrix.set(r, 6, value, true)\n matrix.set(6, r, value, true)\n }\n}\n\n/**\n * Add alignment patterns bits to matrix\n *\n * Note: this function must be called after {@link setupTimingPattern}\n *\n * @param {BitMatrix} matrix Modules matrix\n * @param {Number} version QR Code version\n */\nfunction setupAlignmentPattern (matrix, version) {\n const pos = AlignmentPattern.getPositions(version)\n\n for (let i = 0; i < pos.length; i++) {\n const row = pos[i][0]\n const col = pos[i][1]\n\n for (let r = -2; r <= 2; r++) {\n for (let c = -2; c <= 2; c++) {\n if (r === -2 || r === 2 || c === -2 || c === 2 ||\n (r === 0 && c === 0)) {\n matrix.set(row + r, col + c, true, true)\n } else {\n matrix.set(row + r, col + c, false, true)\n }\n }\n }\n }\n}\n\n/**\n * Add version info bits to matrix\n *\n * @param {BitMatrix} matrix Modules matrix\n * @param {Number} version QR Code version\n */\nfunction setupVersionInfo (matrix, version) {\n const size = matrix.size\n const bits = Version.getEncodedBits(version)\n let row, col, mod\n\n for (let i = 0; i < 18; i++) {\n row = Math.floor(i / 3)\n col = i % 3 + size - 8 - 3\n mod = ((bits >> i) & 1) === 1\n\n matrix.set(row, col, mod, true)\n matrix.set(col, row, mod, true)\n }\n}\n\n/**\n * Add format info bits to matrix\n *\n * @param {BitMatrix} matrix Modules matrix\n * @param {ErrorCorrectionLevel} errorCorrectionLevel Error correction level\n * @param {Number} maskPattern Mask pattern reference value\n */\nfunction setupFormatInfo (matrix, errorCorrectionLevel, maskPattern) {\n const size = matrix.size\n const bits = FormatInfo.getEncodedBits(errorCorrectionLevel, maskPattern)\n let i, mod\n\n for (i = 0; i < 15; i++) {\n mod = ((bits >> i) & 1) === 1\n\n // vertical\n if (i < 6) {\n matrix.set(i, 8, mod, true)\n } else if (i < 8) {\n matrix.set(i + 1, 8, mod, true)\n } else {\n matrix.set(size - 15 + i, 8, mod, true)\n }\n\n // horizontal\n if (i < 8) {\n matrix.set(8, size - i - 1, mod, true)\n } else if (i < 9) {\n matrix.set(8, 15 - i - 1 + 1, mod, true)\n } else {\n matrix.set(8, 15 - i - 1, mod, true)\n }\n }\n\n // fixed module\n matrix.set(size - 8, 8, 1, true)\n}\n\n/**\n * Add encoded data bits to matrix\n *\n * @param {BitMatrix} matrix Modules matrix\n * @param {Uint8Array} data Data codewords\n */\nfunction setupData (matrix, data) {\n const size = matrix.size\n let inc = -1\n let row = size - 1\n let bitIndex = 7\n let byteIndex = 0\n\n for (let col = size - 1; col > 0; col -= 2) {\n if (col === 6) col--\n\n while (true) {\n for (let c = 0; c < 2; c++) {\n if (!matrix.isReserved(row, col - c)) {\n let dark = false\n\n if (byteIndex < data.length) {\n dark = (((data[byteIndex] >>> bitIndex) & 1) === 1)\n }\n\n matrix.set(row, col - c, dark)\n bitIndex--\n\n if (bitIndex === -1) {\n byteIndex++\n bitIndex = 7\n }\n }\n }\n\n row += inc\n\n if (row < 0 || size <= row) {\n row -= inc\n inc = -inc\n break\n }\n }\n }\n}\n\n/**\n * Create encoded codewords from data input\n *\n * @param {Number} version QR Code version\n * @param {ErrorCorrectionLevel} errorCorrectionLevel Error correction level\n * @param {ByteData} data Data input\n * @return {Uint8Array} Buffer containing encoded codewords\n */\nfunction createData (version, errorCorrectionLevel, segments) {\n // Prepare data buffer\n const buffer = new BitBuffer()\n\n segments.forEach(function (data) {\n // prefix data with mode indicator (4 bits)\n buffer.put(data.mode.bit, 4)\n\n // Prefix data with character count indicator.\n // The character count indicator is a string of bits that represents the\n // number of characters that are being encoded.\n // The character count indicator must be placed after the mode indicator\n // and must be a certain number of bits long, depending on the QR version\n // and data mode\n // @see {@link Mode.getCharCountIndicator}.\n buffer.put(data.getLength(), Mode.getCharCountIndicator(data.mode, version))\n\n // add binary data sequence to buffer\n data.write(buffer)\n })\n\n // Calculate required number of bits\n const totalCodewords = Utils.getSymbolTotalCodewords(version)\n const ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)\n const dataTotalCodewordsBits = (totalCodewords - ecTotalCodewords) * 8\n\n // Add a terminator.\n // If the bit string is shorter than the total number of required bits,\n // a terminator of up to four 0s must be added to the right side of the string.\n // If the bit string is more than four bits shorter than the required number of bits,\n // add four 0s to the end.\n if (buffer.getLengthInBits() + 4 <= dataTotalCodewordsBits) {\n buffer.put(0, 4)\n }\n\n // If the bit string is fewer than four bits shorter, add only the number of 0s that\n // are needed to reach the required number of bits.\n\n // After adding the terminator, if the number of bits in the string is not a multiple of 8,\n // pad the string on the right with 0s to make the string's length a multiple of 8.\n while (buffer.getLengthInBits() % 8 !== 0) {\n buffer.putBit(0)\n }\n\n // Add pad bytes if the string is still shorter than the total number of required bits.\n // Extend the buffer to fill the data capacity of the symbol corresponding to\n // the Version and Error Correction Level by adding the Pad Codewords 11101100 (0xEC)\n // and 00010001 (0x11) alternately.\n const remainingByte = (dataTotalCodewordsBits - buffer.getLengthInBits()) / 8\n for (let i = 0; i < remainingByte; i++) {\n buffer.put(i % 2 ? 0x11 : 0xEC, 8)\n }\n\n return createCodewords(buffer, version, errorCorrectionLevel)\n}\n\n/**\n * Encode input data with Reed-Solomon and return codewords with\n * relative error correction bits\n *\n * @param {BitBuffer} bitBuffer Data to encode\n * @param {Number} version QR Code version\n * @param {ErrorCorrectionLevel} errorCorrectionLevel Error correction level\n * @return {Uint8Array} Buffer containing encoded codewords\n */\nfunction createCodewords (bitBuffer, version, errorCorrectionLevel) {\n // Total codewords for this QR code version (Data + Error correction)\n const totalCodewords = Utils.getSymbolTotalCodewords(version)\n\n // Total number of error correction codewords\n const ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)\n\n // Total number of data codewords\n const dataTotalCodewords = totalCodewords - ecTotalCodewords\n\n // Total number of blocks\n const ecTotalBlocks = ECCode.getBlocksCount(version, errorCorrectionLevel)\n\n // Calculate how many blocks each group should contain\n const blocksInGroup2 = totalCodewords % ecTotalBlocks\n const blocksInGroup1 = ecTotalBlocks - blocksInGroup2\n\n const totalCodewordsInGroup1 = Math.floor(totalCodewords / ecTotalBlocks)\n\n const dataCodewordsInGroup1 = Math.floor(dataTotalCodewords / ecTotalBlocks)\n const dataCodewordsInGroup2 = dataCodewordsInGroup1 + 1\n\n // Number of EC codewords is the same for both groups\n const ecCount = totalCodewordsInGroup1 - dataCodewordsInGroup1\n\n // Initialize a Reed-Solomon encoder with a generator polynomial of degree ecCount\n const rs = new ReedSolomonEncoder(ecCount)\n\n let offset = 0\n const dcData = new Array(ecTotalBlocks)\n const ecData = new Array(ecTotalBlocks)\n let maxDataSize = 0\n const buffer = new Uint8Array(bitBuffer.buffer)\n\n // Divide the buffer into the required number of blocks\n for (let b = 0; b < ecTotalBlocks; b++) {\n const dataSize = b < blocksInGroup1 ? dataCodewordsInGroup1 : dataCodewordsInGroup2\n\n // extract a block of data from buffer\n dcData[b] = buffer.slice(offset, offset + dataSize)\n\n // Calculate EC codewords for this data block\n ecData[b] = rs.encode(dcData[b])\n\n offset += dataSize\n maxDataSize = Math.max(maxDataSize, dataSize)\n }\n\n // Create final data\n // Interleave the data and error correction codewords from each block\n const data = new Uint8Array(totalCodewords)\n let index = 0\n let i, r\n\n // Add data codewords\n for (i = 0; i < maxDataSize; i++) {\n for (r = 0; r < ecTotalBlocks; r++) {\n if (i < dcData[r].length) {\n data[index++] = dcData[r][i]\n }\n }\n }\n\n // Apped EC codewords\n for (i = 0; i < ecCount; i++) {\n for (r = 0; r < ecTotalBlocks; r++) {\n data[index++] = ecData[r][i]\n }\n }\n\n return data\n}\n\n/**\n * Build QR Code symbol\n *\n * @param {String} data Input string\n * @param {Number} version QR Code version\n * @param {ErrorCorretionLevel} errorCorrectionLevel Error level\n * @param {MaskPattern} maskPattern Mask pattern\n * @return {Object} Object containing symbol data\n */\nfunction createSymbol (data, version, errorCorrectionLevel, maskPattern) {\n let segments\n\n if (Array.isArray(data)) {\n segments = Segments.fromArray(data)\n } else if (typeof data === 'string') {\n let estimatedVersion = version\n\n if (!estimatedVersion) {\n const rawSegments = Segments.rawSplit(data)\n\n // Estimate best version that can contain raw splitted segments\n estimatedVersion = Version.getBestVersionForData(rawSegments, errorCorrectionLevel)\n }\n\n // Build optimized segments\n // If estimated version is undefined, try with the highest version\n segments = Segments.fromString(data, estimatedVersion || 40)\n } else {\n throw new Error('Invalid data')\n }\n\n // Get the min version that can contain data\n const bestVersion = Version.getBestVersionForData(segments, errorCorrectionLevel)\n\n // If no version is found, data cannot be stored\n if (!bestVersion) {\n throw new Error('The amount of data is too big to be stored in a QR Code')\n }\n\n // If not specified, use min version as default\n if (!version) {\n version = bestVersion\n\n // Check if the specified version can contain the data\n } else if (version < bestVersion) {\n throw new Error('\\n' +\n 'The chosen QR Code version cannot contain this amount of data.\\n' +\n 'Minimum version required to store current data is: ' + bestVersion + '.\\n'\n )\n }\n\n const dataBits = createData(version, errorCorrectionLevel, segments)\n\n // Allocate matrix buffer\n const moduleCount = Utils.getSymbolSize(version)\n const modules = new BitMatrix(moduleCount)\n\n // Add function modules\n setupFinderPattern(modules, version)\n setupTimingPattern(modules)\n setupAlignmentPattern(modules, version)\n\n // Add temporary dummy bits for format info just to set them as reserved.\n // This is needed to prevent these bits from being masked by {@link MaskPattern.applyMask}\n // since the masking operation must be performed only on the encoding region.\n // These blocks will be replaced with correct values later in code.\n setupFormatInfo(modules, errorCorrectionLevel, 0)\n\n if (version >= 7) {\n setupVersionInfo(modules, version)\n }\n\n // Add data codewords\n setupData(modules, dataBits)\n\n if (isNaN(maskPattern)) {\n // Find best mask pattern\n maskPattern = MaskPattern.getBestMask(modules,\n setupFormatInfo.bind(null, modules, errorCorrectionLevel))\n }\n\n // Apply mask pattern\n MaskPattern.applyMask(maskPattern, modules)\n\n // Replace format info bits with correct values\n setupFormatInfo(modules, errorCorrectionLevel, maskPattern)\n\n return {\n modules: modules,\n version: version,\n errorCorrectionLevel: errorCorrectionLevel,\n maskPattern: maskPattern,\n segments: segments\n }\n}\n\n/**\n * QR Code\n *\n * @param {String | Array} data Input data\n * @param {Object} options Optional configurations\n * @param {Number} options.version QR Code version\n * @param {String} options.errorCorrectionLevel Error correction level\n * @param {Function} options.toSJISFunc Helper func to convert utf8 to sjis\n */\nexports.create = function create (data, options) {\n if (typeof data === 'undefined' || data === '') {\n throw new Error('No input text')\n }\n\n let errorCorrectionLevel = ECLevel.M\n let version\n let mask\n\n if (typeof options !== 'undefined') {\n // Use higher error correction level as default\n errorCorrectionLevel = ECLevel.from(options.errorCorrectionLevel, ECLevel.M)\n version = Version.from(options.version)\n mask = MaskPattern.from(options.maskPattern)\n\n if (options.toSJISFunc) {\n Utils.setToSJISFunction(options.toSJISFunc)\n }\n }\n\n return createSymbol(data, version, errorCorrectionLevel, mask)\n}\n","const Polynomial = require('./polynomial')\n\nfunction ReedSolomonEncoder (degree) {\n this.genPoly = undefined\n this.degree = degree\n\n if (this.degree) this.initialize(this.degree)\n}\n\n/**\n * Initialize the encoder.\n * The input param should correspond to the number of error correction codewords.\n *\n * @param {Number} degree\n */\nReedSolomonEncoder.prototype.initialize = function initialize (degree) {\n // create an irreducible generator polynomial\n this.degree = degree\n this.genPoly = Polynomial.generateECPolynomial(this.degree)\n}\n\n/**\n * Encodes a chunk of data\n *\n * @param {Uint8Array} data Buffer containing input data\n * @return {Uint8Array} Buffer containing encoded data\n */\nReedSolomonEncoder.prototype.encode = function encode (data) {\n if (!this.genPoly) {\n throw new Error('Encoder not initialized')\n }\n\n // Calculate EC for this data block\n // extends data size to data+genPoly size\n const paddedData = new Uint8Array(data.length + this.degree)\n paddedData.set(data)\n\n // The error correction codewords are the remainder after dividing the data codewords\n // by a generator polynomial\n const remainder = Polynomial.mod(paddedData, this.genPoly)\n\n // return EC data blocks (last n byte, where n is the degree of genPoly)\n // If coefficients number in remainder are less than genPoly degree,\n // pad with 0s to the left to reach the needed number of coefficients\n const start = this.degree - remainder.length\n if (start > 0) {\n const buff = new Uint8Array(this.degree)\n buff.set(remainder, start)\n\n return buff\n }\n\n return remainder\n}\n\nmodule.exports = ReedSolomonEncoder\n","const numeric = '[0-9]+'\nconst alphanumeric = '[A-Z $%*+\\\\-./:]+'\nlet kanji = '(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|' +\n '[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|' +\n '[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|' +\n '[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+'\nkanji = kanji.replace(/u/g, '\\\\u')\n\nconst byte = '(?:(?![A-Z0-9 $%*+\\\\-./:]|' + kanji + ')(?:.|[\\r\\n]))+'\n\nexports.KANJI = new RegExp(kanji, 'g')\nexports.BYTE_KANJI = new RegExp('[^A-Z0-9 $%*+\\\\-./:]+', 'g')\nexports.BYTE = new RegExp(byte, 'g')\nexports.NUMERIC = new RegExp(numeric, 'g')\nexports.ALPHANUMERIC = new RegExp(alphanumeric, 'g')\n\nconst TEST_KANJI = new RegExp('^' + kanji + '$')\nconst TEST_NUMERIC = new RegExp('^' + numeric + '$')\nconst TEST_ALPHANUMERIC = new RegExp('^[A-Z0-9 $%*+\\\\-./:]+$')\n\nexports.testKanji = function testKanji (str) {\n return TEST_KANJI.test(str)\n}\n\nexports.testNumeric = function testNumeric (str) {\n return TEST_NUMERIC.test(str)\n}\n\nexports.testAlphanumeric = function testAlphanumeric (str) {\n return TEST_ALPHANUMERIC.test(str)\n}\n","const Mode = require('./mode')\nconst NumericData = require('./numeric-data')\nconst AlphanumericData = require('./alphanumeric-data')\nconst ByteData = require('./byte-data')\nconst KanjiData = require('./kanji-data')\nconst Regex = require('./regex')\nconst Utils = require('./utils')\nconst dijkstra = require('dijkstrajs')\n\n/**\n * Returns UTF8 byte length\n *\n * @param {String} str Input string\n * @return {Number} Number of byte\n */\nfunction getStringByteLength (str) {\n return unescape(encodeURIComponent(str)).length\n}\n\n/**\n * Get a list of segments of the specified mode\n * from a string\n *\n * @param {Mode} mode Segment mode\n * @param {String} str String to process\n * @return {Array} Array of object with segments data\n */\nfunction getSegments (regex, mode, str) {\n const segments = []\n let result\n\n while ((result = regex.exec(str)) !== null) {\n segments.push({\n data: result[0],\n index: result.index,\n mode: mode,\n length: result[0].length\n })\n }\n\n return segments\n}\n\n/**\n * Extracts a series of segments with the appropriate\n * modes from a string\n *\n * @param {String} dataStr Input string\n * @return {Array} Array of object with segments data\n */\nfunction getSegmentsFromString (dataStr) {\n const numSegs = getSegments(Regex.NUMERIC, Mode.NUMERIC, dataStr)\n const alphaNumSegs = getSegments(Regex.ALPHANUMERIC, Mode.ALPHANUMERIC, dataStr)\n let byteSegs\n let kanjiSegs\n\n if (Utils.isKanjiModeEnabled()) {\n byteSegs = getSegments(Regex.BYTE, Mode.BYTE, dataStr)\n kanjiSegs = getSegments(Regex.KANJI, Mode.KANJI, dataStr)\n } else {\n byteSegs = getSegments(Regex.BYTE_KANJI, Mode.BYTE, dataStr)\n kanjiSegs = []\n }\n\n const segs = numSegs.concat(alphaNumSegs, byteSegs, kanjiSegs)\n\n return segs\n .sort(function (s1, s2) {\n return s1.index - s2.index\n })\n .map(function (obj) {\n return {\n data: obj.data,\n mode: obj.mode,\n length: obj.length\n }\n })\n}\n\n/**\n * Returns how many bits are needed to encode a string of\n * specified length with the specified mode\n *\n * @param {Number} length String length\n * @param {Mode} mode Segment mode\n * @return {Number} Bit length\n */\nfunction getSegmentBitsLength (length, mode) {\n switch (mode) {\n case Mode.NUMERIC:\n return NumericData.getBitsLength(length)\n case Mode.ALPHANUMERIC:\n return AlphanumericData.getBitsLength(length)\n case Mode.KANJI:\n return KanjiData.getBitsLength(length)\n case Mode.BYTE:\n return ByteData.getBitsLength(length)\n }\n}\n\n/**\n * Merges adjacent segments which have the same mode\n *\n * @param {Array} segs Array of object with segments data\n * @return {Array} Array of object with segments data\n */\nfunction mergeSegments (segs) {\n return segs.reduce(function (acc, curr) {\n const prevSeg = acc.length - 1 >= 0 ? acc[acc.length - 1] : null\n if (prevSeg && prevSeg.mode === curr.mode) {\n acc[acc.length - 1].data += curr.data\n return acc\n }\n\n acc.push(curr)\n return acc\n }, [])\n}\n\n/**\n * Generates a list of all possible nodes combination which\n * will be used to build a segments graph.\n *\n * Nodes are divided by groups. Each group will contain a list of all the modes\n * in which is possible to encode the given text.\n *\n * For example the text '12345' can be encoded as Numeric, Alphanumeric or Byte.\n * The group for '12345' will contain then 3 objects, one for each\n * possible encoding mode.\n *\n * Each node represents a possible segment.\n *\n * @param {Array} segs Array of object with segments data\n * @return {Array} Array of object with segments data\n */\nfunction buildNodes (segs) {\n const nodes = []\n for (let i = 0; i < segs.length; i++) {\n const seg = segs[i]\n\n switch (seg.mode) {\n case Mode.NUMERIC:\n nodes.push([seg,\n { data: seg.data, mode: Mode.ALPHANUMERIC, length: seg.length },\n { data: seg.data, mode: Mode.BYTE, length: seg.length }\n ])\n break\n case Mode.ALPHANUMERIC:\n nodes.push([seg,\n { data: seg.data, mode: Mode.BYTE, length: seg.length }\n ])\n break\n case Mode.KANJI:\n nodes.push([seg,\n { data: seg.data, mode: Mode.BYTE, length: getStringByteLength(seg.data) }\n ])\n break\n case Mode.BYTE:\n nodes.push([\n { data: seg.data, mode: Mode.BYTE, length: getStringByteLength(seg.data) }\n ])\n }\n }\n\n return nodes\n}\n\n/**\n * Builds a graph from a list of nodes.\n * All segments in each node group will be connected with all the segments of\n * the next group and so on.\n *\n * At each connection will be assigned a weight depending on the\n * segment's byte length.\n *\n * @param {Array} nodes Array of object with segments data\n * @param {Number} version QR Code version\n * @return {Object} Graph of all possible segments\n */\nfunction buildGraph (nodes, version) {\n const table = {}\n const graph = { start: {} }\n let prevNodeIds = ['start']\n\n for (let i = 0; i < nodes.length; i++) {\n const nodeGroup = nodes[i]\n const currentNodeIds = []\n\n for (let j = 0; j < nodeGroup.length; j++) {\n const node = nodeGroup[j]\n const key = '' + i + j\n\n currentNodeIds.push(key)\n table[key] = { node: node, lastCount: 0 }\n graph[key] = {}\n\n for (let n = 0; n < prevNodeIds.length; n++) {\n const prevNodeId = prevNodeIds[n]\n\n if (table[prevNodeId] && table[prevNodeId].node.mode === node.mode) {\n graph[prevNodeId][key] =\n getSegmentBitsLength(table[prevNodeId].lastCount + node.length, node.mode) -\n getSegmentBitsLength(table[prevNodeId].lastCount, node.mode)\n\n table[prevNodeId].lastCount += node.length\n } else {\n if (table[prevNodeId]) table[prevNodeId].lastCount = node.length\n\n graph[prevNodeId][key] = getSegmentBitsLength(node.length, node.mode) +\n 4 + Mode.getCharCountIndicator(node.mode, version) // switch cost\n }\n }\n }\n\n prevNodeIds = currentNodeIds\n }\n\n for (let n = 0; n < prevNodeIds.length; n++) {\n graph[prevNodeIds[n]].end = 0\n }\n\n return { map: graph, table: table }\n}\n\n/**\n * Builds a segment from a specified data and mode.\n * If a mode is not specified, the more suitable will be used.\n *\n * @param {String} data Input data\n * @param {Mode | String} modesHint Data mode\n * @return {Segment} Segment\n */\nfunction buildSingleSegment (data, modesHint) {\n let mode\n const bestMode = Mode.getBestModeForData(data)\n\n mode = Mode.from(modesHint, bestMode)\n\n // Make sure data can be encoded\n if (mode !== Mode.BYTE && mode.bit < bestMode.bit) {\n throw new Error('\"' + data + '\"' +\n ' cannot be encoded with mode ' + Mode.toString(mode) +\n '.\\n Suggested mode is: ' + Mode.toString(bestMode))\n }\n\n // Use Mode.BYTE if Kanji support is disabled\n if (mode === Mode.KANJI && !Utils.isKanjiModeEnabled()) {\n mode = Mode.BYTE\n }\n\n switch (mode) {\n case Mode.NUMERIC:\n return new NumericData(data)\n\n case Mode.ALPHANUMERIC:\n return new AlphanumericData(data)\n\n case Mode.KANJI:\n return new KanjiData(data)\n\n case Mode.BYTE:\n return new ByteData(data)\n }\n}\n\n/**\n * Builds a list of segments from an array.\n * Array can contain Strings or Objects with segment's info.\n *\n * For each item which is a string, will be generated a segment with the given\n * string and the more appropriate encoding mode.\n *\n * For each item which is an object, will be generated a segment with the given\n * data and mode.\n * Objects must contain at least the property \"data\".\n * If property \"mode\" is not present, the more suitable mode will be used.\n *\n * @param {Array} array Array of objects with segments data\n * @return {Array} Array of Segments\n */\nexports.fromArray = function fromArray (array) {\n return array.reduce(function (acc, seg) {\n if (typeof seg === 'string') {\n acc.push(buildSingleSegment(seg, null))\n } else if (seg.data) {\n acc.push(buildSingleSegment(seg.data, seg.mode))\n }\n\n return acc\n }, [])\n}\n\n/**\n * Builds an optimized sequence of segments from a string,\n * which will produce the shortest possible bitstream.\n *\n * @param {String} data Input string\n * @param {Number} version QR Code version\n * @return {Array} Array of segments\n */\nexports.fromString = function fromString (data, version) {\n const segs = getSegmentsFromString(data, Utils.isKanjiModeEnabled())\n\n const nodes = buildNodes(segs)\n const graph = buildGraph(nodes, version)\n const path = dijkstra.find_path(graph.map, 'start', 'end')\n\n const optimizedSegs = []\n for (let i = 1; i < path.length - 1; i++) {\n optimizedSegs.push(graph.table[path[i]].node)\n }\n\n return exports.fromArray(mergeSegments(optimizedSegs))\n}\n\n/**\n * Splits a string in various segments with the modes which\n * best represent their content.\n * The produced segments are far from being optimized.\n * The output of this function is only used to estimate a QR Code version\n * which may contain the data.\n *\n * @param {string} data Input string\n * @return {Array} Array of segments\n */\nexports.rawSplit = function rawSplit (data) {\n return exports.fromArray(\n getSegmentsFromString(data, Utils.isKanjiModeEnabled())\n )\n}\n","let toSJISFunction\nconst CODEWORDS_COUNT = [\n 0, // Not used\n 26, 44, 70, 100, 134, 172, 196, 242, 292, 346,\n 404, 466, 532, 581, 655, 733, 815, 901, 991, 1085,\n 1156, 1258, 1364, 1474, 1588, 1706, 1828, 1921, 2051, 2185,\n 2323, 2465, 2611, 2761, 2876, 3034, 3196, 3362, 3532, 3706\n]\n\n/**\n * Returns the QR Code size for the specified version\n *\n * @param {Number} version QR Code version\n * @return {Number} size of QR code\n */\nexports.getSymbolSize = function getSymbolSize (version) {\n if (!version) throw new Error('\"version\" cannot be null or undefined')\n if (version < 1 || version > 40) throw new Error('\"version\" should be in range from 1 to 40')\n return version * 4 + 17\n}\n\n/**\n * Returns the total number of codewords used to store data and EC information.\n *\n * @param {Number} version QR Code version\n * @return {Number} Data length in bits\n */\nexports.getSymbolTotalCodewords = function getSymbolTotalCodewords (version) {\n return CODEWORDS_COUNT[version]\n}\n\n/**\n * Encode data with Bose-Chaudhuri-Hocquenghem\n *\n * @param {Number} data Value to encode\n * @return {Number} Encoded value\n */\nexports.getBCHDigit = function (data) {\n let digit = 0\n\n while (data !== 0) {\n digit++\n data >>>= 1\n }\n\n return digit\n}\n\nexports.setToSJISFunction = function setToSJISFunction (f) {\n if (typeof f !== 'function') {\n throw new Error('\"toSJISFunc\" is not a valid function.')\n }\n\n toSJISFunction = f\n}\n\nexports.isKanjiModeEnabled = function () {\n return typeof toSJISFunction !== 'undefined'\n}\n\nexports.toSJIS = function toSJIS (kanji) {\n return toSJISFunction(kanji)\n}\n","/**\n * Check if QR Code version is valid\n *\n * @param {Number} version QR Code version\n * @return {Boolean} true if valid version, false otherwise\n */\nexports.isValid = function isValid (version) {\n return !isNaN(version) && version >= 1 && version <= 40\n}\n","const Utils = require('./utils')\nconst ECCode = require('./error-correction-code')\nconst ECLevel = require('./error-correction-level')\nconst Mode = require('./mode')\nconst VersionCheck = require('./version-check')\n\n// Generator polynomial used to encode version information\nconst G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0)\nconst G18_BCH = Utils.getBCHDigit(G18)\n\nfunction getBestVersionForDataLength (mode, length, errorCorrectionLevel) {\n for (let currentVersion = 1; currentVersion <= 40; currentVersion++) {\n if (length <= exports.getCapacity(currentVersion, errorCorrectionLevel, mode)) {\n return currentVersion\n }\n }\n\n return undefined\n}\n\nfunction getReservedBitsCount (mode, version) {\n // Character count indicator + mode indicator bits\n return Mode.getCharCountIndicator(mode, version) + 4\n}\n\nfunction getTotalBitsFromDataArray (segments, version) {\n let totalBits = 0\n\n segments.forEach(function (data) {\n const reservedBits = getReservedBitsCount(data.mode, version)\n totalBits += reservedBits + data.getBitsLength()\n })\n\n return totalBits\n}\n\nfunction getBestVersionForMixedData (segments, errorCorrectionLevel) {\n for (let currentVersion = 1; currentVersion <= 40; currentVersion++) {\n const length = getTotalBitsFromDataArray(segments, currentVersion)\n if (length <= exports.getCapacity(currentVersion, errorCorrectionLevel, Mode.MIXED)) {\n return currentVersion\n }\n }\n\n return undefined\n}\n\n/**\n * Returns version number from a value.\n * If value is not a valid version, returns defaultValue\n *\n * @param {Number|String} value QR Code version\n * @param {Number} defaultValue Fallback value\n * @return {Number} QR Code version number\n */\nexports.from = function from (value, defaultValue) {\n if (VersionCheck.isValid(value)) {\n return parseInt(value, 10)\n }\n\n return defaultValue\n}\n\n/**\n * Returns how much data can be stored with the specified QR code version\n * and error correction level\n *\n * @param {Number} version QR Code version (1-40)\n * @param {Number} errorCorrectionLevel Error correction level\n * @param {Mode} mode Data mode\n * @return {Number} Quantity of storable data\n */\nexports.getCapacity = function getCapacity (version, errorCorrectionLevel, mode) {\n if (!VersionCheck.isValid(version)) {\n throw new Error('Invalid QR Code version')\n }\n\n // Use Byte mode as default\n if (typeof mode === 'undefined') mode = Mode.BYTE\n\n // Total codewords for this QR code version (Data + Error correction)\n const totalCodewords = Utils.getSymbolTotalCodewords(version)\n\n // Total number of error correction codewords\n const ecTotalCodewords = ECCode.getTotalCodewordsCount(version, errorCorrectionLevel)\n\n // Total number of data codewords\n const dataTotalCodewordsBits = (totalCodewords - ecTotalCodewords) * 8\n\n if (mode === Mode.MIXED) return dataTotalCodewordsBits\n\n const usableBits = dataTotalCodewordsBits - getReservedBitsCount(mode, version)\n\n // Return max number of storable codewords\n switch (mode) {\n case Mode.NUMERIC:\n return Math.floor((usableBits / 10) * 3)\n\n case Mode.ALPHANUMERIC:\n return Math.floor((usableBits / 11) * 2)\n\n case Mode.KANJI:\n return Math.floor(usableBits / 13)\n\n case Mode.BYTE:\n default:\n return Math.floor(usableBits / 8)\n }\n}\n\n/**\n * Returns the minimum version needed to contain the amount of data\n *\n * @param {Segment} data Segment of data\n * @param {Number} [errorCorrectionLevel=H] Error correction level\n * @param {Mode} mode Data mode\n * @return {Number} QR Code version\n */\nexports.getBestVersionForData = function getBestVersionForData (data, errorCorrectionLevel) {\n let seg\n\n const ecl = ECLevel.from(errorCorrectionLevel, ECLevel.M)\n\n if (Array.isArray(data)) {\n if (data.length > 1) {\n return getBestVersionForMixedData(data, ecl)\n }\n\n if (data.length === 0) {\n return 1\n }\n\n seg = data[0]\n } else {\n seg = data\n }\n\n return getBestVersionForDataLength(seg.mode, seg.getLength(), ecl)\n}\n\n/**\n * Returns version information with relative error correction bits\n *\n * The version information is included in QR Code symbols of version 7 or larger.\n * It consists of an 18-bit sequence containing 6 data bits,\n * with 12 error correction bits calculated using the (18, 6) Golay code.\n *\n * @param {Number} version QR Code version\n * @return {Number} Encoded version info bits\n */\nexports.getEncodedBits = function getEncodedBits (version) {\n if (!VersionCheck.isValid(version) || version < 7) {\n throw new Error('Invalid QR Code version')\n }\n\n let d = version << 12\n\n while (Utils.getBCHDigit(d) - G18_BCH >= 0) {\n d ^= (G18 << (Utils.getBCHDigit(d) - G18_BCH))\n }\n\n return (version << 12) | d\n}\n","const Utils = require('./utils')\n\nfunction clearCanvas (ctx, canvas, size) {\n ctx.clearRect(0, 0, canvas.width, canvas.height)\n\n if (!canvas.style) canvas.style = {}\n canvas.height = size\n canvas.width = size\n canvas.style.height = size + 'px'\n canvas.style.width = size + 'px'\n}\n\nfunction getCanvasElement () {\n try {\n return document.createElement('canvas')\n } catch (e) {\n throw new Error('You need to specify a canvas element')\n }\n}\n\nexports.render = function render (qrData, canvas, options) {\n let opts = options\n let canvasEl = canvas\n\n if (typeof opts === 'undefined' && (!canvas || !canvas.getContext)) {\n opts = canvas\n canvas = undefined\n }\n\n if (!canvas) {\n canvasEl = getCanvasElement()\n }\n\n opts = Utils.getOptions(opts)\n const size = Utils.getImageWidth(qrData.modules.size, opts)\n\n const ctx = canvasEl.getContext('2d')\n const image = ctx.createImageData(size, size)\n Utils.qrToImageData(image.data, qrData, opts)\n\n clearCanvas(ctx, canvasEl, size)\n ctx.putImageData(image, 0, 0)\n\n return canvasEl\n}\n\nexports.renderToDataURL = function renderToDataURL (qrData, canvas, options) {\n let opts = options\n\n if (typeof opts === 'undefined' && (!canvas || !canvas.getContext)) {\n opts = canvas\n canvas = undefined\n }\n\n if (!opts) opts = {}\n\n const canvasEl = exports.render(qrData, canvas, opts)\n\n const type = opts.type || 'image/png'\n const rendererOpts = opts.rendererOpts || {}\n\n return canvasEl.toDataURL(type, rendererOpts.quality)\n}\n","const Utils = require('./utils')\n\nfunction getColorAttrib (color, attrib) {\n const alpha = color.a / 255\n const str = attrib + '=\"' + color.hex + '\"'\n\n return alpha < 1\n ? str + ' ' + attrib + '-opacity=\"' + alpha.toFixed(2).slice(1) + '\"'\n : str\n}\n\nfunction svgCmd (cmd, x, y) {\n let str = cmd + x\n if (typeof y !== 'undefined') str += ' ' + y\n\n return str\n}\n\nfunction qrToPath (data, size, margin) {\n let path = ''\n let moveBy = 0\n let newRow = false\n let lineLength = 0\n\n for (let i = 0; i < data.length; i++) {\n const col = Math.floor(i % size)\n const row = Math.floor(i / size)\n\n if (!col && !newRow) newRow = true\n\n if (data[i]) {\n lineLength++\n\n if (!(i > 0 && col > 0 && data[i - 1])) {\n path += newRow\n ? svgCmd('M', col + margin, 0.5 + row + margin)\n : svgCmd('m', moveBy, 0)\n\n moveBy = 0\n newRow = false\n }\n\n if (!(col + 1 < size && data[i + 1])) {\n path += svgCmd('h', lineLength)\n lineLength = 0\n }\n } else {\n moveBy++\n }\n }\n\n return path\n}\n\nexports.render = function render (qrData, options, cb) {\n const opts = Utils.getOptions(options)\n const size = qrData.modules.size\n const data = qrData.modules.data\n const qrcodesize = size + opts.margin * 2\n\n const bg = !opts.color.light.a\n ? ''\n : ''\n\n const path =\n ''\n\n const viewBox = 'viewBox=\"' + '0 0 ' + qrcodesize + ' ' + qrcodesize + '\"'\n\n const width = !opts.width ? '' : 'width=\"' + opts.width + '\" height=\"' + opts.width + '\" '\n\n const svgTag = '' + bg + path + '\\n'\n\n if (typeof cb === 'function') {\n cb(null, svgTag)\n }\n\n return svgTag\n}\n","function hex2rgba (hex) {\n if (typeof hex === 'number') {\n hex = hex.toString()\n }\n\n if (typeof hex !== 'string') {\n throw new Error('Color should be defined as hex string')\n }\n\n let hexCode = hex.slice().replace('#', '').split('')\n if (hexCode.length < 3 || hexCode.length === 5 || hexCode.length > 8) {\n throw new Error('Invalid hex color: ' + hex)\n }\n\n // Convert from short to long form (fff -> ffffff)\n if (hexCode.length === 3 || hexCode.length === 4) {\n hexCode = Array.prototype.concat.apply([], hexCode.map(function (c) {\n return [c, c]\n }))\n }\n\n // Add default alpha value\n if (hexCode.length === 6) hexCode.push('F', 'F')\n\n const hexValue = parseInt(hexCode.join(''), 16)\n\n return {\n r: (hexValue >> 24) & 255,\n g: (hexValue >> 16) & 255,\n b: (hexValue >> 8) & 255,\n a: hexValue & 255,\n hex: '#' + hexCode.slice(0, 6).join('')\n }\n}\n\nexports.getOptions = function getOptions (options) {\n if (!options) options = {}\n if (!options.color) options.color = {}\n\n const margin = typeof options.margin === 'undefined' ||\n options.margin === null ||\n options.margin < 0\n ? 4\n : options.margin\n\n const width = options.width && options.width >= 21 ? options.width : undefined\n const scale = options.scale || 4\n\n return {\n width: width,\n scale: width ? 4 : scale,\n margin: margin,\n color: {\n dark: hex2rgba(options.color.dark || '#000000ff'),\n light: hex2rgba(options.color.light || '#ffffffff')\n },\n type: options.type,\n rendererOpts: options.rendererOpts || {}\n }\n}\n\nexports.getScale = function getScale (qrSize, opts) {\n return opts.width && opts.width >= qrSize + opts.margin * 2\n ? opts.width / (qrSize + opts.margin * 2)\n : opts.scale\n}\n\nexports.getImageWidth = function getImageWidth (qrSize, opts) {\n const scale = exports.getScale(qrSize, opts)\n return Math.floor((qrSize + opts.margin * 2) * scale)\n}\n\nexports.qrToImageData = function qrToImageData (imgData, qr, opts) {\n const size = qr.modules.size\n const data = qr.modules.data\n const scale = exports.getScale(size, opts)\n const symbolSize = Math.floor((size + opts.margin * 2) * scale)\n const scaledMargin = opts.margin * scale\n const palette = [opts.color.light, opts.color.dark]\n\n for (let i = 0; i < symbolSize; i++) {\n for (let j = 0; j < symbolSize; j++) {\n let posDst = (i * symbolSize + j) * 4\n let pxColor = opts.color.light\n\n if (i >= scaledMargin && j >= scaledMargin &&\n i < symbolSize - scaledMargin && j < symbolSize - scaledMargin) {\n const iSrc = Math.floor((i - scaledMargin) / scale)\n const jSrc = Math.floor((j - scaledMargin) / scale)\n pxColor = palette[data[iSrc * size + jSrc] ? 1 : 0]\n }\n\n imgData[posDst++] = pxColor.r\n imgData[posDst++] = pxColor.g\n imgData[posDst++] = pxColor.b\n imgData[posDst] = pxColor.a\n }\n }\n}\n","import { Injectable, EventEmitter, InjectionToken, Inject, Directive, ElementRef, ChangeDetectorRef, Input, Pipe, NgModule } from '@angular/core';\nimport { of, isObservable, forkJoin, concat, defer } from 'rxjs';\nimport { take, shareReplay, map, concatMap, switchMap } from 'rxjs/operators';\n\n/**\n * @fileoverview added by tsickle\n * Generated from: lib/translate.loader.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/**\n * @abstract\n */\nimport * as ɵngcc0 from '@angular/core';\nclass TranslateLoader {\n}\nif (false) {\n /**\n * @abstract\n * @param {?} lang\n * @return {?}\n */\n TranslateLoader.prototype.getTranslation = function (lang) { };\n}\n/**\n * This loader is just a placeholder that does nothing, in case you don't need a loader at all\n */\nclass TranslateFakeLoader extends TranslateLoader {\n /**\n * @param {?} lang\n * @return {?}\n */\n getTranslation(lang) {\n return of({});\n }\n}\nTranslateFakeLoader.ɵfac = /*@__PURE__*/ function () { let ɵTranslateFakeLoader_BaseFactory; return function TranslateFakeLoader_Factory(t) { return (ɵTranslateFakeLoader_BaseFactory || (ɵTranslateFakeLoader_BaseFactory = ɵngcc0.ɵɵgetInheritedFactory(TranslateFakeLoader)))(t || TranslateFakeLoader); }; }();\nTranslateFakeLoader.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: TranslateFakeLoader, factory: TranslateFakeLoader.ɵfac });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(TranslateFakeLoader, [{\n type: Injectable\n }], null, null); })();\n\n/**\n * @fileoverview added by tsickle\n * Generated from: lib/missing-translation-handler.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/**\n * @record\n */\nfunction MissingTranslationHandlerParams() { }\nif (false) {\n /**\n * the key that's missing in translation files\n * @type {?}\n */\n MissingTranslationHandlerParams.prototype.key;\n /**\n * an instance of the service that was unable to translate the key.\n * @type {?}\n */\n MissingTranslationHandlerParams.prototype.translateService;\n /**\n * interpolation params that were passed along for translating the given key.\n * @type {?|undefined}\n */\n MissingTranslationHandlerParams.prototype.interpolateParams;\n}\n/**\n * @abstract\n */\nclass MissingTranslationHandler {\n}\nif (false) {\n /**\n * A function that handles missing translations.\n *\n * @abstract\n * @param {?} params context for resolving a missing translation\n * @return {?} a value or an observable\n * If it returns a value, then this value is used.\n * If it return an observable, the value returned by this observable will be used (except if the method was \"instant\").\n * If it doesn't return then the key will be used as a value\n */\n MissingTranslationHandler.prototype.handle = function (params) { };\n}\n/**\n * This handler is just a placeholder that does nothing, in case you don't need a missing translation handler at all\n */\nclass FakeMissingTranslationHandler {\n /**\n * @param {?} params\n * @return {?}\n */\n handle(params) {\n return params.key;\n }\n}\nFakeMissingTranslationHandler.ɵfac = function FakeMissingTranslationHandler_Factory(t) { return new (t || FakeMissingTranslationHandler)(); };\nFakeMissingTranslationHandler.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: FakeMissingTranslationHandler, factory: FakeMissingTranslationHandler.ɵfac });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(FakeMissingTranslationHandler, [{\n type: Injectable\n }], null, null); })();\n\n/**\n * @fileoverview added by tsickle\n * Generated from: lib/util.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/* tslint:disable */\n/**\n * Determines if two objects or two values are equivalent.\n *\n * Two objects or values are considered equivalent if at least one of the following is true:\n *\n * * Both objects or values pass `===` comparison.\n * * Both objects or values are of the same type and all of their properties are equal by\n * comparing them with `equals`.\n *\n * @param {?} o1 Object or value to compare.\n * @param {?} o2 Object or value to compare.\n * @return {?} true if arguments are equal.\n */\nfunction equals(o1, o2) {\n if (o1 === o2)\n return true;\n if (o1 === null || o2 === null)\n return false;\n if (o1 !== o1 && o2 !== o2)\n return true; // NaN === NaN\n // NaN === NaN\n /** @type {?} */\n let t1 = typeof o1;\n /** @type {?} */\n let t2 = typeof o2;\n /** @type {?} */\n let length;\n /** @type {?} */\n let key;\n /** @type {?} */\n let keySet;\n if (t1 == t2 && t1 == 'object') {\n if (Array.isArray(o1)) {\n if (!Array.isArray(o2))\n return false;\n if ((length = o1.length) == o2.length) {\n for (key = 0; key < length; key++) {\n if (!equals(o1[key], o2[key]))\n return false;\n }\n return true;\n }\n }\n else {\n if (Array.isArray(o2)) {\n return false;\n }\n keySet = Object.create(null);\n for (key in o1) {\n if (!equals(o1[key], o2[key])) {\n return false;\n }\n keySet[key] = true;\n }\n for (key in o2) {\n if (!(key in keySet) && typeof o2[key] !== 'undefined') {\n return false;\n }\n }\n return true;\n }\n }\n return false;\n}\n/* tslint:enable */\n/**\n * @param {?} value\n * @return {?}\n */\nfunction isDefined(value) {\n return typeof value !== 'undefined' && value !== null;\n}\n/**\n * @param {?} item\n * @return {?}\n */\nfunction isObject(item) {\n return (item && typeof item === 'object' && !Array.isArray(item));\n}\n/**\n * @param {?} target\n * @param {?} source\n * @return {?}\n */\nfunction mergeDeep(target, source) {\n /** @type {?} */\n let output = Object.assign({}, target);\n if (isObject(target) && isObject(source)) {\n Object.keys(source).forEach((/**\n * @param {?} key\n * @return {?}\n */\n (key) => {\n if (isObject(source[key])) {\n if (!(key in target)) {\n Object.assign(output, { [key]: source[key] });\n }\n else {\n output[key] = mergeDeep(target[key], source[key]);\n }\n }\n else {\n Object.assign(output, { [key]: source[key] });\n }\n }));\n }\n return output;\n}\n\n/**\n * @fileoverview added by tsickle\n * Generated from: lib/translate.parser.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/**\n * @abstract\n */\nclass TranslateParser {\n}\nif (false) {\n /**\n * Interpolates a string to replace parameters\n * \"This is a {{ key }}\" ==> \"This is a value\", with params = { key: \"value\" }\n * @abstract\n * @param {?} expr\n * @param {?=} params\n * @return {?}\n */\n TranslateParser.prototype.interpolate = function (expr, params) { };\n /**\n * Gets a value from an object by composed key\n * parser.getValue({ key1: { keyA: 'valueI' }}, 'key1.keyA') ==> 'valueI'\n * @abstract\n * @param {?} target\n * @param {?} key\n * @return {?}\n */\n TranslateParser.prototype.getValue = function (target, key) { };\n}\nclass TranslateDefaultParser extends TranslateParser {\n constructor() {\n super(...arguments);\n this.templateMatcher = /{{\\s?([^{}\\s]*)\\s?}}/g;\n }\n /**\n * @param {?} expr\n * @param {?=} params\n * @return {?}\n */\n interpolate(expr, params) {\n /** @type {?} */\n let result;\n if (typeof expr === 'string') {\n result = this.interpolateString(expr, params);\n }\n else if (typeof expr === 'function') {\n result = this.interpolateFunction(expr, params);\n }\n else {\n // this should not happen, but an unrelated TranslateService test depends on it\n result = (/** @type {?} */ (expr));\n }\n return result;\n }\n /**\n * @param {?} target\n * @param {?} key\n * @return {?}\n */\n getValue(target, key) {\n /** @type {?} */\n let keys = typeof key === 'string' ? key.split('.') : [key];\n key = '';\n do {\n key += keys.shift();\n if (isDefined(target) && isDefined(target[key]) && (typeof target[key] === 'object' || !keys.length)) {\n target = target[key];\n key = '';\n }\n else if (!keys.length) {\n target = undefined;\n }\n else {\n key += '.';\n }\n } while (keys.length);\n return target;\n }\n /**\n * @private\n * @param {?} fn\n * @param {?=} params\n * @return {?}\n */\n interpolateFunction(fn, params) {\n return fn(params);\n }\n /**\n * @private\n * @param {?} expr\n * @param {?=} params\n * @return {?}\n */\n interpolateString(expr, params) {\n if (!params) {\n return expr;\n }\n return expr.replace(this.templateMatcher, (/**\n * @param {?} substring\n * @param {?} b\n * @return {?}\n */\n (substring, b) => {\n /** @type {?} */\n let r = this.getValue(params, b);\n return isDefined(r) ? r : substring;\n }));\n }\n}\nTranslateDefaultParser.ɵfac = /*@__PURE__*/ function () { let ɵTranslateDefaultParser_BaseFactory; return function TranslateDefaultParser_Factory(t) { return (ɵTranslateDefaultParser_BaseFactory || (ɵTranslateDefaultParser_BaseFactory = ɵngcc0.ɵɵgetInheritedFactory(TranslateDefaultParser)))(t || TranslateDefaultParser); }; }();\nTranslateDefaultParser.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: TranslateDefaultParser, factory: TranslateDefaultParser.ɵfac });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(TranslateDefaultParser, [{\n type: Injectable\n }], null, null); })();\nif (false) {\n /** @type {?} */\n TranslateDefaultParser.prototype.templateMatcher;\n}\n\n/**\n * @fileoverview added by tsickle\n * Generated from: lib/translate.compiler.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/**\n * @abstract\n */\nclass TranslateCompiler {\n}\nif (false) {\n /**\n * @abstract\n * @param {?} value\n * @param {?} lang\n * @return {?}\n */\n TranslateCompiler.prototype.compile = function (value, lang) { };\n /**\n * @abstract\n * @param {?} translations\n * @param {?} lang\n * @return {?}\n */\n TranslateCompiler.prototype.compileTranslations = function (translations, lang) { };\n}\n/**\n * This compiler is just a placeholder that does nothing, in case you don't need a compiler at all\n */\nclass TranslateFakeCompiler extends TranslateCompiler {\n /**\n * @param {?} value\n * @param {?} lang\n * @return {?}\n */\n compile(value, lang) {\n return value;\n }\n /**\n * @param {?} translations\n * @param {?} lang\n * @return {?}\n */\n compileTranslations(translations, lang) {\n return translations;\n }\n}\nTranslateFakeCompiler.ɵfac = /*@__PURE__*/ function () { let ɵTranslateFakeCompiler_BaseFactory; return function TranslateFakeCompiler_Factory(t) { return (ɵTranslateFakeCompiler_BaseFactory || (ɵTranslateFakeCompiler_BaseFactory = ɵngcc0.ɵɵgetInheritedFactory(TranslateFakeCompiler)))(t || TranslateFakeCompiler); }; }();\nTranslateFakeCompiler.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: TranslateFakeCompiler, factory: TranslateFakeCompiler.ɵfac });\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(TranslateFakeCompiler, [{\n type: Injectable\n }], null, null); })();\n\n/**\n * @fileoverview added by tsickle\n * Generated from: lib/translate.store.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\nclass TranslateStore {\n constructor() {\n /**\n * The lang currently used\n */\n this.currentLang = this.defaultLang;\n /**\n * a list of translations per lang\n */\n this.translations = {};\n /**\n * an array of langs\n */\n this.langs = [];\n /**\n * An EventEmitter to listen to translation change events\n * onTranslationChange.subscribe((params: TranslationChangeEvent) => {\n * // do something\n * });\n */\n this.onTranslationChange = new EventEmitter();\n /**\n * An EventEmitter to listen to lang change events\n * onLangChange.subscribe((params: LangChangeEvent) => {\n * // do something\n * });\n */\n this.onLangChange = new EventEmitter();\n /**\n * An EventEmitter to listen to default lang change events\n * onDefaultLangChange.subscribe((params: DefaultLangChangeEvent) => {\n * // do something\n * });\n */\n this.onDefaultLangChange = new EventEmitter();\n }\n}\nif (false) {\n /**\n * The default lang to fallback when translations are missing on the current lang\n * @type {?}\n */\n TranslateStore.prototype.defaultLang;\n /**\n * The lang currently used\n * @type {?}\n */\n TranslateStore.prototype.currentLang;\n /**\n * a list of translations per lang\n * @type {?}\n */\n TranslateStore.prototype.translations;\n /**\n * an array of langs\n * @type {?}\n */\n TranslateStore.prototype.langs;\n /**\n * An EventEmitter to listen to translation change events\n * onTranslationChange.subscribe((params: TranslationChangeEvent) => {\n * // do something\n * });\n * @type {?}\n */\n TranslateStore.prototype.onTranslationChange;\n /**\n * An EventEmitter to listen to lang change events\n * onLangChange.subscribe((params: LangChangeEvent) => {\n * // do something\n * });\n * @type {?}\n */\n TranslateStore.prototype.onLangChange;\n /**\n * An EventEmitter to listen to default lang change events\n * onDefaultLangChange.subscribe((params: DefaultLangChangeEvent) => {\n * // do something\n * });\n * @type {?}\n */\n TranslateStore.prototype.onDefaultLangChange;\n}\n\n/**\n * @fileoverview added by tsickle\n * Generated from: lib/translate.service.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/** @type {?} */\nconst USE_STORE = new InjectionToken('USE_STORE');\n/** @type {?} */\nconst USE_DEFAULT_LANG = new InjectionToken('USE_DEFAULT_LANG');\n/** @type {?} */\nconst DEFAULT_LANGUAGE = new InjectionToken('DEFAULT_LANGUAGE');\n/** @type {?} */\nconst USE_EXTEND = new InjectionToken('USE_EXTEND');\n/**\n * @record\n */\nfunction TranslationChangeEvent() { }\nif (false) {\n /** @type {?} */\n TranslationChangeEvent.prototype.translations;\n /** @type {?} */\n TranslationChangeEvent.prototype.lang;\n}\n/**\n * @record\n */\nfunction LangChangeEvent() { }\nif (false) {\n /** @type {?} */\n LangChangeEvent.prototype.lang;\n /** @type {?} */\n LangChangeEvent.prototype.translations;\n}\n/**\n * @record\n */\nfunction DefaultLangChangeEvent() { }\nif (false) {\n /** @type {?} */\n DefaultLangChangeEvent.prototype.lang;\n /** @type {?} */\n DefaultLangChangeEvent.prototype.translations;\n}\nclass TranslateService {\n /**\n *\n * @param {?} store an instance of the store (that is supposed to be unique)\n * @param {?} currentLoader An instance of the loader currently used\n * @param {?} compiler An instance of the compiler currently used\n * @param {?} parser An instance of the parser currently used\n * @param {?} missingTranslationHandler A handler for missing translations.\n * @param {?=} useDefaultLang whether we should use default language translation when current language translation is missing.\n * @param {?=} isolate whether this service should use the store or not\n * @param {?=} extend To make a child module extend (and use) translations from parent modules.\n * @param {?=} defaultLanguage Set the default language using configuration\n */\n constructor(store, currentLoader, compiler, parser, missingTranslationHandler, useDefaultLang = true, isolate = false, extend = false, defaultLanguage) {\n this.store = store;\n this.currentLoader = currentLoader;\n this.compiler = compiler;\n this.parser = parser;\n this.missingTranslationHandler = missingTranslationHandler;\n this.useDefaultLang = useDefaultLang;\n this.isolate = isolate;\n this.extend = extend;\n this.pending = false;\n this._onTranslationChange = new EventEmitter();\n this._onLangChange = new EventEmitter();\n this._onDefaultLangChange = new EventEmitter();\n this._langs = [];\n this._translations = {};\n this._translationRequests = {};\n /** set the default language from configuration */\n if (defaultLanguage) {\n this.setDefaultLang(defaultLanguage);\n }\n }\n /**\n * An EventEmitter to listen to translation change events\n * onTranslationChange.subscribe((params: TranslationChangeEvent) => {\n * // do something\n * });\n * @return {?}\n */\n get onTranslationChange() {\n return this.isolate ? this._onTranslationChange : this.store.onTranslationChange;\n }\n /**\n * An EventEmitter to listen to lang change events\n * onLangChange.subscribe((params: LangChangeEvent) => {\n * // do something\n * });\n * @return {?}\n */\n get onLangChange() {\n return this.isolate ? this._onLangChange : this.store.onLangChange;\n }\n /**\n * An EventEmitter to listen to default lang change events\n * onDefaultLangChange.subscribe((params: DefaultLangChangeEvent) => {\n * // do something\n * });\n * @return {?}\n */\n get onDefaultLangChange() {\n return this.isolate ? this._onDefaultLangChange : this.store.onDefaultLangChange;\n }\n /**\n * The default lang to fallback when translations are missing on the current lang\n * @return {?}\n */\n get defaultLang() {\n return this.isolate ? this._defaultLang : this.store.defaultLang;\n }\n /**\n * @param {?} defaultLang\n * @return {?}\n */\n set defaultLang(defaultLang) {\n if (this.isolate) {\n this._defaultLang = defaultLang;\n }\n else {\n this.store.defaultLang = defaultLang;\n }\n }\n /**\n * The lang currently used\n * @return {?}\n */\n get currentLang() {\n return this.isolate ? this._currentLang : this.store.currentLang;\n }\n /**\n * @param {?} currentLang\n * @return {?}\n */\n set currentLang(currentLang) {\n if (this.isolate) {\n this._currentLang = currentLang;\n }\n else {\n this.store.currentLang = currentLang;\n }\n }\n /**\n * an array of langs\n * @return {?}\n */\n get langs() {\n return this.isolate ? this._langs : this.store.langs;\n }\n /**\n * @param {?} langs\n * @return {?}\n */\n set langs(langs) {\n if (this.isolate) {\n this._langs = langs;\n }\n else {\n this.store.langs = langs;\n }\n }\n /**\n * a list of translations per lang\n * @return {?}\n */\n get translations() {\n return this.isolate ? this._translations : this.store.translations;\n }\n /**\n * @param {?} translations\n * @return {?}\n */\n set translations(translations) {\n if (this.isolate) {\n this._translations = translations;\n }\n else {\n this.store.translations = translations;\n }\n }\n /**\n * Sets the default language to use as a fallback\n * @param {?} lang\n * @return {?}\n */\n setDefaultLang(lang) {\n if (lang === this.defaultLang) {\n return;\n }\n /** @type {?} */\n let pending = this.retrieveTranslations(lang);\n if (typeof pending !== \"undefined\") {\n // on init set the defaultLang immediately\n if (this.defaultLang == null) {\n this.defaultLang = lang;\n }\n pending.pipe(take(1))\n .subscribe((/**\n * @param {?} res\n * @return {?}\n */\n (res) => {\n this.changeDefaultLang(lang);\n }));\n }\n else { // we already have this language\n this.changeDefaultLang(lang);\n }\n }\n /**\n * Gets the default language used\n * @return {?}\n */\n getDefaultLang() {\n return this.defaultLang;\n }\n /**\n * Changes the lang currently used\n * @param {?} lang\n * @return {?}\n */\n use(lang) {\n // don't change the language if the language given is already selected\n if (lang === this.currentLang) {\n return of(this.translations[lang]);\n }\n /** @type {?} */\n let pending = this.retrieveTranslations(lang);\n if (typeof pending !== \"undefined\") {\n // on init set the currentLang immediately\n if (!this.currentLang) {\n this.currentLang = lang;\n }\n pending.pipe(take(1))\n .subscribe((/**\n * @param {?} res\n * @return {?}\n */\n (res) => {\n this.changeLang(lang);\n }));\n return pending;\n }\n else { // we have this language, return an Observable\n this.changeLang(lang);\n return of(this.translations[lang]);\n }\n }\n /**\n * Retrieves the given translations\n * @private\n * @param {?} lang\n * @return {?}\n */\n retrieveTranslations(lang) {\n /** @type {?} */\n let pending;\n // if this language is unavailable or extend is true, ask for it\n if (typeof this.translations[lang] === \"undefined\" || this.extend) {\n this._translationRequests[lang] = this._translationRequests[lang] || this.getTranslation(lang);\n pending = this._translationRequests[lang];\n }\n return pending;\n }\n /**\n * Gets an object of translations for a given language with the current loader\n * and passes it through the compiler\n * @param {?} lang\n * @return {?}\n */\n getTranslation(lang) {\n this.pending = true;\n /** @type {?} */\n const loadingTranslations = this.currentLoader.getTranslation(lang).pipe(shareReplay(1), take(1));\n this.loadingTranslations = loadingTranslations.pipe(map((/**\n * @param {?} res\n * @return {?}\n */\n (res) => this.compiler.compileTranslations(res, lang))), shareReplay(1), take(1));\n this.loadingTranslations\n .subscribe({\n next: (/**\n * @param {?} res\n * @return {?}\n */\n (res) => {\n this.translations[lang] = this.extend && this.translations[lang] ? Object.assign(Object.assign({}, res), this.translations[lang]) : res;\n this.updateLangs();\n this.pending = false;\n }),\n error: (/**\n * @param {?} err\n * @return {?}\n */\n (err) => {\n this.pending = false;\n })\n });\n return loadingTranslations;\n }\n /**\n * Manually sets an object of translations for a given language\n * after passing it through the compiler\n * @param {?} lang\n * @param {?} translations\n * @param {?=} shouldMerge\n * @return {?}\n */\n setTranslation(lang, translations, shouldMerge = false) {\n translations = this.compiler.compileTranslations(translations, lang);\n if ((shouldMerge || this.extend) && this.translations[lang]) {\n this.translations[lang] = mergeDeep(this.translations[lang], translations);\n }\n else {\n this.translations[lang] = translations;\n }\n this.updateLangs();\n this.onTranslationChange.emit({ lang: lang, translations: this.translations[lang] });\n }\n /**\n * Returns an array of currently available langs\n * @return {?}\n */\n getLangs() {\n return this.langs;\n }\n /**\n * Add available langs\n * @param {?} langs\n * @return {?}\n */\n addLangs(langs) {\n langs.forEach((/**\n * @param {?} lang\n * @return {?}\n */\n (lang) => {\n if (this.langs.indexOf(lang) === -1) {\n this.langs.push(lang);\n }\n }));\n }\n /**\n * Update the list of available langs\n * @private\n * @return {?}\n */\n updateLangs() {\n this.addLangs(Object.keys(this.translations));\n }\n /**\n * Returns the parsed result of the translations\n * @param {?} translations\n * @param {?} key\n * @param {?=} interpolateParams\n * @return {?}\n */\n getParsedResult(translations, key, interpolateParams) {\n /** @type {?} */\n let res;\n if (key instanceof Array) {\n /** @type {?} */\n let result = {};\n /** @type {?} */\n let observables = false;\n for (let k of key) {\n result[k] = this.getParsedResult(translations, k, interpolateParams);\n if (isObservable(result[k])) {\n observables = true;\n }\n }\n if (observables) {\n /** @type {?} */\n const sources = key.map((/**\n * @param {?} k\n * @return {?}\n */\n k => isObservable(result[k]) ? result[k] : of((/** @type {?} */ (result[k])))));\n return forkJoin(sources).pipe(map((/**\n * @param {?} arr\n * @return {?}\n */\n (arr) => {\n /** @type {?} */\n let obj = {};\n arr.forEach((/**\n * @param {?} value\n * @param {?} index\n * @return {?}\n */\n (value, index) => {\n obj[key[index]] = value;\n }));\n return obj;\n })));\n }\n return result;\n }\n if (translations) {\n res = this.parser.interpolate(this.parser.getValue(translations, key), interpolateParams);\n }\n if (typeof res === \"undefined\" && this.defaultLang != null && this.defaultLang !== this.currentLang && this.useDefaultLang) {\n res = this.parser.interpolate(this.parser.getValue(this.translations[this.defaultLang], key), interpolateParams);\n }\n if (typeof res === \"undefined\") {\n /** @type {?} */\n let params = { key, translateService: this };\n if (typeof interpolateParams !== 'undefined') {\n params.interpolateParams = interpolateParams;\n }\n res = this.missingTranslationHandler.handle(params);\n }\n return typeof res !== \"undefined\" ? res : key;\n }\n /**\n * Gets the translated value of a key (or an array of keys)\n * @param {?} key\n * @param {?=} interpolateParams\n * @return {?} the translated key, or an object of translated keys\n */\n get(key, interpolateParams) {\n if (!isDefined(key) || !key.length) {\n throw new Error(`Parameter \"key\" required`);\n }\n // check if we are loading a new translation to use\n if (this.pending) {\n return this.loadingTranslations.pipe(concatMap((/**\n * @param {?} res\n * @return {?}\n */\n (res) => {\n res = this.getParsedResult(res, key, interpolateParams);\n return isObservable(res) ? res : of(res);\n })));\n }\n else {\n /** @type {?} */\n let res = this.getParsedResult(this.translations[this.currentLang], key, interpolateParams);\n return isObservable(res) ? res : of(res);\n }\n }\n /**\n * Returns a stream of translated values of a key (or an array of keys) which updates\n * whenever the translation changes.\n * @param {?} key\n * @param {?=} interpolateParams\n * @return {?} A stream of the translated key, or an object of translated keys\n */\n getStreamOnTranslationChange(key, interpolateParams) {\n if (!isDefined(key) || !key.length) {\n throw new Error(`Parameter \"key\" required`);\n }\n return concat(defer((/**\n * @return {?}\n */\n () => this.get(key, interpolateParams))), this.onTranslationChange.pipe(switchMap((/**\n * @param {?} event\n * @return {?}\n */\n (event) => {\n /** @type {?} */\n const res = this.getParsedResult(event.translations, key, interpolateParams);\n if (typeof res.subscribe === 'function') {\n return res;\n }\n else {\n return of(res);\n }\n }))));\n }\n /**\n * Returns a stream of translated values of a key (or an array of keys) which updates\n * whenever the language changes.\n * @param {?} key\n * @param {?=} interpolateParams\n * @return {?} A stream of the translated key, or an object of translated keys\n */\n stream(key, interpolateParams) {\n if (!isDefined(key) || !key.length) {\n throw new Error(`Parameter \"key\" required`);\n }\n return concat(defer((/**\n * @return {?}\n */\n () => this.get(key, interpolateParams))), this.onLangChange.pipe(switchMap((/**\n * @param {?} event\n * @return {?}\n */\n (event) => {\n /** @type {?} */\n const res = this.getParsedResult(event.translations, key, interpolateParams);\n return isObservable(res) ? res : of(res);\n }))));\n }\n /**\n * Returns a translation instantly from the internal state of loaded translation.\n * All rules regarding the current language, the preferred language of even fallback languages will be used except any promise handling.\n * @param {?} key\n * @param {?=} interpolateParams\n * @return {?}\n */\n instant(key, interpolateParams) {\n if (!isDefined(key) || !key.length) {\n throw new Error(`Parameter \"key\" required`);\n }\n /** @type {?} */\n let res = this.getParsedResult(this.translations[this.currentLang], key, interpolateParams);\n if (isObservable(res)) {\n if (key instanceof Array) {\n /** @type {?} */\n let obj = {};\n key.forEach((/**\n * @param {?} value\n * @param {?} index\n * @return {?}\n */\n (value, index) => {\n obj[key[index]] = key[index];\n }));\n return obj;\n }\n return key;\n }\n else {\n return res;\n }\n }\n /**\n * Sets the translated value of a key, after compiling it\n * @param {?} key\n * @param {?} value\n * @param {?=} lang\n * @return {?}\n */\n set(key, value, lang = this.currentLang) {\n this.translations[lang][key] = this.compiler.compile(value, lang);\n this.updateLangs();\n this.onTranslationChange.emit({ lang: lang, translations: this.translations[lang] });\n }\n /**\n * Changes the current lang\n * @private\n * @param {?} lang\n * @return {?}\n */\n changeLang(lang) {\n this.currentLang = lang;\n this.onLangChange.emit({ lang: lang, translations: this.translations[lang] });\n // if there is no default lang, use the one that we just set\n if (this.defaultLang == null) {\n this.changeDefaultLang(lang);\n }\n }\n /**\n * Changes the default lang\n * @private\n * @param {?} lang\n * @return {?}\n */\n changeDefaultLang(lang) {\n this.defaultLang = lang;\n this.onDefaultLangChange.emit({ lang: lang, translations: this.translations[lang] });\n }\n /**\n * Allows to reload the lang file from the file\n * @param {?} lang\n * @return {?}\n */\n reloadLang(lang) {\n this.resetLang(lang);\n return this.getTranslation(lang);\n }\n /**\n * Deletes inner translation\n * @param {?} lang\n * @return {?}\n */\n resetLang(lang) {\n this._translationRequests[lang] = undefined;\n this.translations[lang] = undefined;\n }\n /**\n * Returns the language code name from the browser, e.g. \"de\"\n * @return {?}\n */\n getBrowserLang() {\n if (typeof window === 'undefined' || typeof window.navigator === 'undefined') {\n return undefined;\n }\n /** @type {?} */\n let browserLang = window.navigator.languages ? window.navigator.languages[0] : null;\n browserLang = browserLang || window.navigator.language || window.navigator.browserLanguage || window.navigator.userLanguage;\n if (typeof browserLang === 'undefined') {\n return undefined;\n }\n if (browserLang.indexOf('-') !== -1) {\n browserLang = browserLang.split('-')[0];\n }\n if (browserLang.indexOf('_') !== -1) {\n browserLang = browserLang.split('_')[0];\n }\n return browserLang;\n }\n /**\n * Returns the culture language code name from the browser, e.g. \"de-DE\"\n * @return {?}\n */\n getBrowserCultureLang() {\n if (typeof window === 'undefined' || typeof window.navigator === 'undefined') {\n return undefined;\n }\n /** @type {?} */\n let browserCultureLang = window.navigator.languages ? window.navigator.languages[0] : null;\n browserCultureLang = browserCultureLang || window.navigator.language || window.navigator.browserLanguage || window.navigator.userLanguage;\n return browserCultureLang;\n }\n}\nTranslateService.ɵfac = function TranslateService_Factory(t) { return new (t || TranslateService)(ɵngcc0.ɵɵinject(TranslateStore), ɵngcc0.ɵɵinject(TranslateLoader), ɵngcc0.ɵɵinject(TranslateCompiler), ɵngcc0.ɵɵinject(TranslateParser), ɵngcc0.ɵɵinject(MissingTranslationHandler), ɵngcc0.ɵɵinject(USE_DEFAULT_LANG), ɵngcc0.ɵɵinject(USE_STORE), ɵngcc0.ɵɵinject(USE_EXTEND), ɵngcc0.ɵɵinject(DEFAULT_LANGUAGE)); };\nTranslateService.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: TranslateService, factory: TranslateService.ɵfac });\n/** @nocollapse */\nTranslateService.ctorParameters = () => [\n { type: TranslateStore },\n { type: TranslateLoader },\n { type: TranslateCompiler },\n { type: TranslateParser },\n { type: MissingTranslationHandler },\n { type: Boolean, decorators: [{ type: Inject, args: [USE_DEFAULT_LANG,] }] },\n { type: Boolean, decorators: [{ type: Inject, args: [USE_STORE,] }] },\n { type: Boolean, decorators: [{ type: Inject, args: [USE_EXTEND,] }] },\n { type: String, decorators: [{ type: Inject, args: [DEFAULT_LANGUAGE,] }] }\n];\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(TranslateService, [{\n type: Injectable\n }], function () { return [{ type: TranslateStore }, { type: TranslateLoader }, { type: TranslateCompiler }, { type: TranslateParser }, { type: MissingTranslationHandler }, { type: Boolean, decorators: [{\n type: Inject,\n args: [USE_DEFAULT_LANG]\n }] }, { type: Boolean, decorators: [{\n type: Inject,\n args: [USE_STORE]\n }] }, { type: Boolean, decorators: [{\n type: Inject,\n args: [USE_EXTEND]\n }] }, { type: String, decorators: [{\n type: Inject,\n args: [DEFAULT_LANGUAGE]\n }] }]; }, null); })();\nif (false) {\n /**\n * @type {?}\n * @private\n */\n TranslateService.prototype.loadingTranslations;\n /**\n * @type {?}\n * @private\n */\n TranslateService.prototype.pending;\n /**\n * @type {?}\n * @private\n */\n TranslateService.prototype._onTranslationChange;\n /**\n * @type {?}\n * @private\n */\n TranslateService.prototype._onLangChange;\n /**\n * @type {?}\n * @private\n */\n TranslateService.prototype._onDefaultLangChange;\n /**\n * @type {?}\n * @private\n */\n TranslateService.prototype._defaultLang;\n /**\n * @type {?}\n * @private\n */\n TranslateService.prototype._currentLang;\n /**\n * @type {?}\n * @private\n */\n TranslateService.prototype._langs;\n /**\n * @type {?}\n * @private\n */\n TranslateService.prototype._translations;\n /**\n * @type {?}\n * @private\n */\n TranslateService.prototype._translationRequests;\n /** @type {?} */\n TranslateService.prototype.store;\n /** @type {?} */\n TranslateService.prototype.currentLoader;\n /** @type {?} */\n TranslateService.prototype.compiler;\n /** @type {?} */\n TranslateService.prototype.parser;\n /** @type {?} */\n TranslateService.prototype.missingTranslationHandler;\n /**\n * @type {?}\n * @private\n */\n TranslateService.prototype.useDefaultLang;\n /**\n * @type {?}\n * @private\n */\n TranslateService.prototype.isolate;\n /**\n * @type {?}\n * @private\n */\n TranslateService.prototype.extend;\n}\n\n/**\n * @fileoverview added by tsickle\n * Generated from: lib/translate.directive.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\nclass TranslateDirective {\n /**\n * @param {?} translateService\n * @param {?} element\n * @param {?} _ref\n */\n constructor(translateService, element, _ref) {\n this.translateService = translateService;\n this.element = element;\n this._ref = _ref;\n // subscribe to onTranslationChange event, in case the translations of the current lang change\n if (!this.onTranslationChangeSub) {\n this.onTranslationChangeSub = this.translateService.onTranslationChange.subscribe((/**\n * @param {?} event\n * @return {?}\n */\n (event) => {\n if (event.lang === this.translateService.currentLang) {\n this.checkNodes(true, event.translations);\n }\n }));\n }\n // subscribe to onLangChange event, in case the language changes\n if (!this.onLangChangeSub) {\n this.onLangChangeSub = this.translateService.onLangChange.subscribe((/**\n * @param {?} event\n * @return {?}\n */\n (event) => {\n this.checkNodes(true, event.translations);\n }));\n }\n // subscribe to onDefaultLangChange event, in case the default language changes\n if (!this.onDefaultLangChangeSub) {\n this.onDefaultLangChangeSub = this.translateService.onDefaultLangChange.subscribe((/**\n * @param {?} event\n * @return {?}\n */\n (event) => {\n this.checkNodes(true);\n }));\n }\n }\n /**\n * @param {?} key\n * @return {?}\n */\n set translate(key) {\n if (key) {\n this.key = key;\n this.checkNodes();\n }\n }\n /**\n * @param {?} params\n * @return {?}\n */\n set translateParams(params) {\n if (!equals(this.currentParams, params)) {\n this.currentParams = params;\n this.checkNodes(true);\n }\n }\n /**\n * @return {?}\n */\n ngAfterViewChecked() {\n this.checkNodes();\n }\n /**\n * @param {?=} forceUpdate\n * @param {?=} translations\n * @return {?}\n */\n checkNodes(forceUpdate = false, translations) {\n /** @type {?} */\n let nodes = this.element.nativeElement.childNodes;\n // if the element is empty\n if (!nodes.length) {\n // we add the key as content\n this.setContent(this.element.nativeElement, this.key);\n nodes = this.element.nativeElement.childNodes;\n }\n for (let i = 0; i < nodes.length; ++i) {\n /** @type {?} */\n let node = nodes[i];\n if (node.nodeType === 3) { // node type 3 is a text node\n // node type 3 is a text node\n /** @type {?} */\n let key;\n if (forceUpdate) {\n node.lastKey = null;\n }\n if (isDefined(node.lookupKey)) {\n key = node.lookupKey;\n }\n else if (this.key) {\n key = this.key;\n }\n else {\n /** @type {?} */\n let content = this.getContent(node);\n /** @type {?} */\n let trimmedContent = content.trim();\n if (trimmedContent.length) {\n node.lookupKey = trimmedContent;\n // we want to use the content as a key, not the translation value\n if (content !== node.currentValue) {\n key = trimmedContent;\n // the content was changed from the user, we'll use it as a reference if needed\n node.originalContent = content || node.originalContent;\n }\n else if (node.originalContent) { // the content seems ok, but the lang has changed\n // the current content is the translation, not the key, use the last real content as key\n key = node.originalContent.trim();\n }\n else if (content !== node.currentValue) {\n // we want to use the content as a key, not the translation value\n key = trimmedContent;\n // the content was changed from the user, we'll use it as a reference if needed\n node.originalContent = content || node.originalContent;\n }\n }\n }\n this.updateValue(key, node, translations);\n }\n }\n }\n /**\n * @param {?} key\n * @param {?} node\n * @param {?} translations\n * @return {?}\n */\n updateValue(key, node, translations) {\n if (key) {\n if (node.lastKey === key && this.lastParams === this.currentParams) {\n return;\n }\n this.lastParams = this.currentParams;\n /** @type {?} */\n let onTranslation = (/**\n * @param {?} res\n * @return {?}\n */\n (res) => {\n if (res !== key) {\n node.lastKey = key;\n }\n if (!node.originalContent) {\n node.originalContent = this.getContent(node);\n }\n node.currentValue = isDefined(res) ? res : (node.originalContent || key);\n // we replace in the original content to preserve spaces that we might have trimmed\n this.setContent(node, this.key ? node.currentValue : node.originalContent.replace(key, node.currentValue));\n this._ref.markForCheck();\n });\n if (isDefined(translations)) {\n /** @type {?} */\n let res = this.translateService.getParsedResult(translations, key, this.currentParams);\n if (isObservable(res)) {\n res.subscribe(onTranslation);\n }\n else {\n onTranslation(res);\n }\n }\n else {\n this.translateService.get(key, this.currentParams).subscribe(onTranslation);\n }\n }\n }\n /**\n * @param {?} node\n * @return {?}\n */\n getContent(node) {\n return isDefined(node.textContent) ? node.textContent : node.data;\n }\n /**\n * @param {?} node\n * @param {?} content\n * @return {?}\n */\n setContent(node, content) {\n if (isDefined(node.textContent)) {\n node.textContent = content;\n }\n else {\n node.data = content;\n }\n }\n /**\n * @return {?}\n */\n ngOnDestroy() {\n if (this.onLangChangeSub) {\n this.onLangChangeSub.unsubscribe();\n }\n if (this.onDefaultLangChangeSub) {\n this.onDefaultLangChangeSub.unsubscribe();\n }\n if (this.onTranslationChangeSub) {\n this.onTranslationChangeSub.unsubscribe();\n }\n }\n}\nTranslateDirective.ɵfac = function TranslateDirective_Factory(t) { return new (t || TranslateDirective)(ɵngcc0.ɵɵdirectiveInject(TranslateService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef)); };\nTranslateDirective.ɵdir = /*@__PURE__*/ ɵngcc0.ɵɵdefineDirective({ type: TranslateDirective, selectors: [[\"\", \"translate\", \"\"], [\"\", \"ngx-translate\", \"\"]], inputs: { translate: \"translate\", translateParams: \"translateParams\" } });\n/** @nocollapse */\nTranslateDirective.ctorParameters = () => [\n { type: TranslateService },\n { type: ElementRef },\n { type: ChangeDetectorRef }\n];\nTranslateDirective.propDecorators = {\n translate: [{ type: Input }],\n translateParams: [{ type: Input }]\n};\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(TranslateDirective, [{\n type: Directive,\n args: [{\n selector: '[translate],[ngx-translate]'\n }]\n }], function () { return [{ type: TranslateService }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.ChangeDetectorRef }]; }, { translate: [{\n type: Input\n }], translateParams: [{\n type: Input\n }] }); })();\nif (false) {\n /** @type {?} */\n TranslateDirective.prototype.key;\n /** @type {?} */\n TranslateDirective.prototype.lastParams;\n /** @type {?} */\n TranslateDirective.prototype.currentParams;\n /** @type {?} */\n TranslateDirective.prototype.onLangChangeSub;\n /** @type {?} */\n TranslateDirective.prototype.onDefaultLangChangeSub;\n /** @type {?} */\n TranslateDirective.prototype.onTranslationChangeSub;\n /**\n * @type {?}\n * @private\n */\n TranslateDirective.prototype.translateService;\n /**\n * @type {?}\n * @private\n */\n TranslateDirective.prototype.element;\n /**\n * @type {?}\n * @private\n */\n TranslateDirective.prototype._ref;\n}\n\n/**\n * @fileoverview added by tsickle\n * Generated from: lib/translate.pipe.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\nclass TranslatePipe {\n /**\n * @param {?} translate\n * @param {?} _ref\n */\n constructor(translate, _ref) {\n this.translate = translate;\n this._ref = _ref;\n this.value = '';\n }\n /**\n * @param {?} key\n * @param {?=} interpolateParams\n * @param {?=} translations\n * @return {?}\n */\n updateValue(key, interpolateParams, translations) {\n /** @type {?} */\n let onTranslation = (/**\n * @param {?} res\n * @return {?}\n */\n (res) => {\n this.value = res !== undefined ? res : key;\n this.lastKey = key;\n this._ref.markForCheck();\n });\n if (translations) {\n /** @type {?} */\n let res = this.translate.getParsedResult(translations, key, interpolateParams);\n if (isObservable(res.subscribe)) {\n res.subscribe(onTranslation);\n }\n else {\n onTranslation(res);\n }\n }\n this.translate.get(key, interpolateParams).subscribe(onTranslation);\n }\n /**\n * @param {?} query\n * @param {...?} args\n * @return {?}\n */\n transform(query, ...args) {\n if (!query || !query.length) {\n return query;\n }\n // if we ask another time for the same key, return the last value\n if (equals(query, this.lastKey) && equals(args, this.lastParams)) {\n return this.value;\n }\n /** @type {?} */\n let interpolateParams;\n if (isDefined(args[0]) && args.length) {\n if (typeof args[0] === 'string' && args[0].length) {\n // we accept objects written in the template such as {n:1}, {'n':1}, {n:'v'}\n // which is why we might need to change it to real JSON objects such as {\"n\":1} or {\"n\":\"v\"}\n /** @type {?} */\n let validArgs = args[0]\n .replace(/(\\')?([a-zA-Z0-9_]+)(\\')?(\\s)?:/g, '\"$2\":')\n .replace(/:(\\s)?(\\')(.*?)(\\')/g, ':\"$3\"');\n try {\n interpolateParams = JSON.parse(validArgs);\n }\n catch (e) {\n throw new SyntaxError(`Wrong parameter in TranslatePipe. Expected a valid Object, received: ${args[0]}`);\n }\n }\n else if (typeof args[0] === 'object' && !Array.isArray(args[0])) {\n interpolateParams = args[0];\n }\n }\n // store the query, in case it changes\n this.lastKey = query;\n // store the params, in case they change\n this.lastParams = args;\n // set the value\n this.updateValue(query, interpolateParams);\n // if there is a subscription to onLangChange, clean it\n this._dispose();\n // subscribe to onTranslationChange event, in case the translations change\n if (!this.onTranslationChange) {\n this.onTranslationChange = this.translate.onTranslationChange.subscribe((/**\n * @param {?} event\n * @return {?}\n */\n (event) => {\n if (this.lastKey && event.lang === this.translate.currentLang) {\n this.lastKey = null;\n this.updateValue(query, interpolateParams, event.translations);\n }\n }));\n }\n // subscribe to onLangChange event, in case the language changes\n if (!this.onLangChange) {\n this.onLangChange = this.translate.onLangChange.subscribe((/**\n * @param {?} event\n * @return {?}\n */\n (event) => {\n if (this.lastKey) {\n this.lastKey = null; // we want to make sure it doesn't return the same value until it's been updated\n this.updateValue(query, interpolateParams, event.translations);\n }\n }));\n }\n // subscribe to onDefaultLangChange event, in case the default language changes\n if (!this.onDefaultLangChange) {\n this.onDefaultLangChange = this.translate.onDefaultLangChange.subscribe((/**\n * @return {?}\n */\n () => {\n if (this.lastKey) {\n this.lastKey = null; // we want to make sure it doesn't return the same value until it's been updated\n this.updateValue(query, interpolateParams);\n }\n }));\n }\n return this.value;\n }\n /**\n * Clean any existing subscription to change events\n * @private\n * @return {?}\n */\n _dispose() {\n if (typeof this.onTranslationChange !== 'undefined') {\n this.onTranslationChange.unsubscribe();\n this.onTranslationChange = undefined;\n }\n if (typeof this.onLangChange !== 'undefined') {\n this.onLangChange.unsubscribe();\n this.onLangChange = undefined;\n }\n if (typeof this.onDefaultLangChange !== 'undefined') {\n this.onDefaultLangChange.unsubscribe();\n this.onDefaultLangChange = undefined;\n }\n }\n /**\n * @return {?}\n */\n ngOnDestroy() {\n this._dispose();\n }\n}\nTranslatePipe.ɵfac = function TranslatePipe_Factory(t) { return new (t || TranslatePipe)(ɵngcc0.ɵɵdirectiveInject(TranslateService, 16), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef, 16)); };\nTranslatePipe.ɵpipe = /*@__PURE__*/ ɵngcc0.ɵɵdefinePipe({ name: \"translate\", type: TranslatePipe, pure: false });\nTranslatePipe.ɵprov = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjectable({ token: TranslatePipe, factory: TranslatePipe.ɵfac });\n/** @nocollapse */\nTranslatePipe.ctorParameters = () => [\n { type: TranslateService },\n { type: ChangeDetectorRef }\n];\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(TranslatePipe, [{\n type: Injectable\n }, {\n type: Pipe,\n args: [{\n name: 'translate',\n pure: false // required to update the value when the promise is resolved\n }]\n }], function () { return [{ type: TranslateService }, { type: ɵngcc0.ChangeDetectorRef }]; }, null); })();\nif (false) {\n /** @type {?} */\n TranslatePipe.prototype.value;\n /** @type {?} */\n TranslatePipe.prototype.lastKey;\n /** @type {?} */\n TranslatePipe.prototype.lastParams;\n /** @type {?} */\n TranslatePipe.prototype.onTranslationChange;\n /** @type {?} */\n TranslatePipe.prototype.onLangChange;\n /** @type {?} */\n TranslatePipe.prototype.onDefaultLangChange;\n /**\n * @type {?}\n * @private\n */\n TranslatePipe.prototype.translate;\n /**\n * @type {?}\n * @private\n */\n TranslatePipe.prototype._ref;\n}\n\n/**\n * @fileoverview added by tsickle\n * Generated from: public_api.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/**\n * @record\n */\nfunction TranslateModuleConfig() { }\nif (false) {\n /** @type {?|undefined} */\n TranslateModuleConfig.prototype.loader;\n /** @type {?|undefined} */\n TranslateModuleConfig.prototype.compiler;\n /** @type {?|undefined} */\n TranslateModuleConfig.prototype.parser;\n /** @type {?|undefined} */\n TranslateModuleConfig.prototype.missingTranslationHandler;\n /** @type {?|undefined} */\n TranslateModuleConfig.prototype.isolate;\n /** @type {?|undefined} */\n TranslateModuleConfig.prototype.extend;\n /** @type {?|undefined} */\n TranslateModuleConfig.prototype.useDefaultLang;\n /** @type {?|undefined} */\n TranslateModuleConfig.prototype.defaultLanguage;\n}\nclass TranslateModule {\n /**\n * Use this method in your root module to provide the TranslateService\n * @param {?=} config\n * @return {?}\n */\n static forRoot(config = {}) {\n return {\n ngModule: TranslateModule,\n providers: [\n config.loader || { provide: TranslateLoader, useClass: TranslateFakeLoader },\n config.compiler || { provide: TranslateCompiler, useClass: TranslateFakeCompiler },\n config.parser || { provide: TranslateParser, useClass: TranslateDefaultParser },\n config.missingTranslationHandler || { provide: MissingTranslationHandler, useClass: FakeMissingTranslationHandler },\n TranslateStore,\n { provide: USE_STORE, useValue: config.isolate },\n { provide: USE_DEFAULT_LANG, useValue: config.useDefaultLang },\n { provide: USE_EXTEND, useValue: config.extend },\n { provide: DEFAULT_LANGUAGE, useValue: config.defaultLanguage },\n TranslateService\n ]\n };\n }\n /**\n * Use this method in your other (non root) modules to import the directive/pipe\n * @param {?=} config\n * @return {?}\n */\n static forChild(config = {}) {\n return {\n ngModule: TranslateModule,\n providers: [\n config.loader || { provide: TranslateLoader, useClass: TranslateFakeLoader },\n config.compiler || { provide: TranslateCompiler, useClass: TranslateFakeCompiler },\n config.parser || { provide: TranslateParser, useClass: TranslateDefaultParser },\n config.missingTranslationHandler || { provide: MissingTranslationHandler, useClass: FakeMissingTranslationHandler },\n { provide: USE_STORE, useValue: config.isolate },\n { provide: USE_DEFAULT_LANG, useValue: config.useDefaultLang },\n { provide: USE_EXTEND, useValue: config.extend },\n { provide: DEFAULT_LANGUAGE, useValue: config.defaultLanguage },\n TranslateService\n ]\n };\n }\n}\nTranslateModule.ɵfac = function TranslateModule_Factory(t) { return new (t || TranslateModule)(); };\nTranslateModule.ɵmod = /*@__PURE__*/ ɵngcc0.ɵɵdefineNgModule({ type: TranslateModule });\nTranslateModule.ɵinj = /*@__PURE__*/ ɵngcc0.ɵɵdefineInjector({});\n(function () { (typeof ngDevMode === \"undefined\" || ngDevMode) && ɵngcc0.ɵsetClassMetadata(TranslateModule, [{\n type: NgModule,\n args: [{\n declarations: [\n TranslatePipe,\n TranslateDirective\n ],\n exports: [\n TranslatePipe,\n TranslateDirective\n ]\n }]\n }], null, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(TranslateModule, { declarations: [TranslatePipe, TranslateDirective], exports: [TranslatePipe, TranslateDirective] }); })();\n\n/**\n * @fileoverview added by tsickle\n * Generated from: ngx-translate-core.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n\nexport { DEFAULT_LANGUAGE, FakeMissingTranslationHandler, MissingTranslationHandler, TranslateCompiler, TranslateDefaultParser, TranslateDirective, TranslateFakeCompiler, TranslateFakeLoader, TranslateLoader, TranslateModule, TranslateParser, TranslatePipe, TranslateService, TranslateStore, USE_DEFAULT_LANG, USE_EXTEND, USE_STORE };\n\n","/**\n * https://github.com/gre/bezier-easing\n * BezierEasing - use bezier curve for transition easing function\n * by Gaëtan Renaudeau 2014 - 2015 – MIT License\n */\n\n// These values are established by empiricism with tests (tradeoff: performance VS precision)\nvar NEWTON_ITERATIONS = 4;\nvar NEWTON_MIN_SLOPE = 0.001;\nvar SUBDIVISION_PRECISION = 0.0000001;\nvar SUBDIVISION_MAX_ITERATIONS = 10;\n\nvar kSplineTableSize = 11;\nvar kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);\n\nvar float32ArraySupported = typeof Float32Array === 'function';\n\nfunction A (aA1, aA2) { return 1.0 - 3.0 * aA2 + 3.0 * aA1; }\nfunction B (aA1, aA2) { return 3.0 * aA2 - 6.0 * aA1; }\nfunction C (aA1) { return 3.0 * aA1; }\n\n// Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\nfunction calcBezier (aT, aA1, aA2) { return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT; }\n\n// Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.\nfunction getSlope (aT, aA1, aA2) { return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1); }\n\nfunction binarySubdivide (aX, aA, aB, mX1, mX2) {\n var currentX, currentT, i = 0;\n do {\n currentT = aA + (aB - aA) / 2.0;\n currentX = calcBezier(currentT, mX1, mX2) - aX;\n if (currentX > 0.0) {\n aB = currentT;\n } else {\n aA = currentT;\n }\n } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);\n return currentT;\n}\n\nfunction newtonRaphsonIterate (aX, aGuessT, mX1, mX2) {\n for (var i = 0; i < NEWTON_ITERATIONS; ++i) {\n var currentSlope = getSlope(aGuessT, mX1, mX2);\n if (currentSlope === 0.0) {\n return aGuessT;\n }\n var currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n aGuessT -= currentX / currentSlope;\n }\n return aGuessT;\n}\n\nfunction LinearEasing (x) {\n return x;\n}\n\nmodule.exports = function bezier (mX1, mY1, mX2, mY2) {\n if (!(0 <= mX1 && mX1 <= 1 && 0 <= mX2 && mX2 <= 1)) {\n throw new Error('bezier x values must be in [0, 1] range');\n }\n\n if (mX1 === mY1 && mX2 === mY2) {\n return LinearEasing;\n }\n\n // Precompute samples table\n var sampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);\n for (var i = 0; i < kSplineTableSize; ++i) {\n sampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);\n }\n\n function getTForX (aX) {\n var intervalStart = 0.0;\n var currentSample = 1;\n var lastSample = kSplineTableSize - 1;\n\n for (; currentSample !== lastSample && sampleValues[currentSample] <= aX; ++currentSample) {\n intervalStart += kSampleStepSize;\n }\n --currentSample;\n\n // Interpolate to provide an initial guess for t\n var dist = (aX - sampleValues[currentSample]) / (sampleValues[currentSample + 1] - sampleValues[currentSample]);\n var guessForT = intervalStart + dist * kSampleStepSize;\n\n var initialSlope = getSlope(guessForT, mX1, mX2);\n if (initialSlope >= NEWTON_MIN_SLOPE) {\n return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\n } else if (initialSlope === 0.0) {\n return guessForT;\n } else {\n return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2);\n }\n }\n\n return function BezierEasing (x) {\n // Because JavaScript number are imprecise, we should guarantee the extremes are right.\n if (x === 0) {\n return 0;\n }\n if (x === 1) {\n return 1;\n }\n return calcBezier(getTForX(x), mY1, mY2);\n };\n};\n","'use strict';\n\n/******************************************************************************\n * Created 2008-08-19.\n *\n * Dijkstra path-finding functions. Adapted from the Dijkstar Python project.\n *\n * Copyright (C) 2008\n * Wyatt Baldwin \n * All rights reserved\n *\n * Licensed under the MIT license.\n *\n * http://www.opensource.org/licenses/mit-license.php\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n *****************************************************************************/\nvar dijkstra = {\n single_source_shortest_paths: function(graph, s, d) {\n // Predecessor map for each node that has been encountered.\n // node ID => predecessor node ID\n var predecessors = {};\n\n // Costs of shortest paths from s to all nodes encountered.\n // node ID => cost\n var costs = {};\n costs[s] = 0;\n\n // Costs of shortest paths from s to all nodes encountered; differs from\n // `costs` in that it provides easy access to the node that currently has\n // the known shortest path from s.\n // XXX: Do we actually need both `costs` and `open`?\n var open = dijkstra.PriorityQueue.make();\n open.push(s, 0);\n\n var closest,\n u, v,\n cost_of_s_to_u,\n adjacent_nodes,\n cost_of_e,\n cost_of_s_to_u_plus_cost_of_e,\n cost_of_s_to_v,\n first_visit;\n while (!open.empty()) {\n // In the nodes remaining in graph that have a known cost from s,\n // find the node, u, that currently has the shortest path from s.\n closest = open.pop();\n u = closest.value;\n cost_of_s_to_u = closest.cost;\n\n // Get nodes adjacent to u...\n adjacent_nodes = graph[u] || {};\n\n // ...and explore the edges that connect u to those nodes, updating\n // the cost of the shortest paths to any or all of those nodes as\n // necessary. v is the node across the current edge from u.\n for (v in adjacent_nodes) {\n if (adjacent_nodes.hasOwnProperty(v)) {\n // Get the cost of the edge running from u to v.\n cost_of_e = adjacent_nodes[v];\n\n // Cost of s to u plus the cost of u to v across e--this is *a*\n // cost from s to v that may or may not be less than the current\n // known cost to v.\n cost_of_s_to_u_plus_cost_of_e = cost_of_s_to_u + cost_of_e;\n\n // If we haven't visited v yet OR if the current known cost from s to\n // v is greater than the new cost we just found (cost of s to u plus\n // cost of u to v across e), update v's cost in the cost list and\n // update v's predecessor in the predecessor list (it's now u).\n cost_of_s_to_v = costs[v];\n first_visit = (typeof costs[v] === 'undefined');\n if (first_visit || cost_of_s_to_v > cost_of_s_to_u_plus_cost_of_e) {\n costs[v] = cost_of_s_to_u_plus_cost_of_e;\n open.push(v, cost_of_s_to_u_plus_cost_of_e);\n predecessors[v] = u;\n }\n }\n }\n }\n\n if (typeof d !== 'undefined' && typeof costs[d] === 'undefined') {\n var msg = ['Could not find a path from ', s, ' to ', d, '.'].join('');\n throw new Error(msg);\n }\n\n return predecessors;\n },\n\n extract_shortest_path_from_predecessor_list: function(predecessors, d) {\n var nodes = [];\n var u = d;\n var predecessor;\n while (u) {\n nodes.push(u);\n predecessor = predecessors[u];\n u = predecessors[u];\n }\n nodes.reverse();\n return nodes;\n },\n\n find_path: function(graph, s, d) {\n var predecessors = dijkstra.single_source_shortest_paths(graph, s, d);\n return dijkstra.extract_shortest_path_from_predecessor_list(\n predecessors, d);\n },\n\n /**\n * A very naive priority queue implementation.\n */\n PriorityQueue: {\n make: function (opts) {\n var T = dijkstra.PriorityQueue,\n t = {},\n key;\n opts = opts || {};\n for (key in T) {\n if (T.hasOwnProperty(key)) {\n t[key] = T[key];\n }\n }\n t.queue = [];\n t.sorter = opts.sorter || T.default_sorter;\n return t;\n },\n\n default_sorter: function (a, b) {\n return a.cost - b.cost;\n },\n\n /**\n * Add a new item to the queue and ensure the highest priority element\n * is at the front of the queue.\n */\n push: function (value, cost) {\n var item = {value: value, cost: cost};\n this.queue.push(item);\n this.queue.sort(this.sorter);\n },\n\n /**\n * Return the highest priority element in the queue.\n */\n pop: function () {\n return this.queue.shift();\n },\n\n empty: function () {\n return this.queue.length === 0;\n }\n }\n};\n\n\n// node.js module exports\nif (typeof module !== 'undefined') {\n module.exports = dijkstra;\n}\n","'use strict'\n\nmodule.exports = function encodeUtf8 (input) {\n var result = []\n var size = input.length\n\n for (var index = 0; index < size; index++) {\n var point = input.charCodeAt(index)\n\n if (point >= 0xD800 && point <= 0xDBFF && size > index + 1) {\n var second = input.charCodeAt(index + 1)\n\n if (second >= 0xDC00 && second <= 0xDFFF) {\n // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n point = (point - 0xD800) * 0x400 + second - 0xDC00 + 0x10000\n index += 1\n }\n }\n\n // US-ASCII\n if (point < 0x80) {\n result.push(point)\n continue\n }\n\n // 2-byte UTF-8\n if (point < 0x800) {\n result.push((point >> 6) | 192)\n result.push((point & 63) | 128)\n continue\n }\n\n // 3-byte UTF-8\n if (point < 0xD800 || (point >= 0xE000 && point < 0x10000)) {\n result.push((point >> 12) | 224)\n result.push(((point >> 6) & 63) | 128)\n result.push((point & 63) | 128)\n continue\n }\n\n // 4-byte UTF-8\n if (point >= 0x10000 && point <= 0x10FFFF) {\n result.push((point >> 18) | 240)\n result.push(((point >> 12) & 63) | 128)\n result.push(((point >> 6) & 63) | 128)\n result.push((point & 63) | 128)\n continue\n }\n\n // Invalid character\n result.push(0xEF, 0xBF, 0xBD)\n }\n\n return new Uint8Array(result).buffer\n}\n","/* build: `node build.js modules=ALL exclude=gestures,accessors,erasing requirejs minifier=uglifyjs` */\n/*! Fabric.js Copyright 2008-2015, Printio (Juriy Zaytsev, Maxim Chernyak) */\n\nvar fabric = fabric || { version: '4.6.0' };\nif (typeof exports !== 'undefined') {\n exports.fabric = fabric;\n}\n/* _AMD_START_ */\nelse if (typeof define === 'function' && define.amd) {\n define([], function() { return fabric; });\n}\n/* _AMD_END_ */\nif (typeof document !== 'undefined' && typeof window !== 'undefined') {\n if (document instanceof (typeof HTMLDocument !== 'undefined' ? HTMLDocument : Document)) {\n fabric.document = document;\n }\n else {\n fabric.document = document.implementation.createHTMLDocument('');\n }\n fabric.window = window;\n}\nelse {\n // assume we're running under node.js when document/window are not present\n var jsdom = require('jsdom');\n var virtualWindow = new jsdom.JSDOM(\n decodeURIComponent('%3C!DOCTYPE%20html%3E%3Chtml%3E%3Chead%3E%3C%2Fhead%3E%3Cbody%3E%3C%2Fbody%3E%3C%2Fhtml%3E'),\n {\n features: {\n FetchExternalResources: ['img']\n },\n resources: 'usable'\n }).window;\n fabric.document = virtualWindow.document;\n fabric.jsdomImplForWrapper = require('jsdom/lib/jsdom/living/generated/utils').implForWrapper;\n fabric.nodeCanvas = require('jsdom/lib/jsdom/utils').Canvas;\n fabric.window = virtualWindow;\n DOMParser = fabric.window.DOMParser;\n}\n\n/**\n * True when in environment that supports touch events\n * @type boolean\n */\nfabric.isTouchSupported = 'ontouchstart' in fabric.window || 'ontouchstart' in fabric.document ||\n (fabric.window && fabric.window.navigator && fabric.window.navigator.maxTouchPoints > 0);\n\n/**\n * True when in environment that's probably Node.js\n * @type boolean\n */\nfabric.isLikelyNode = typeof Buffer !== 'undefined' &&\n typeof window === 'undefined';\n\n/* _FROM_SVG_START_ */\n/**\n * Attributes parsed from all SVG elements\n * @type array\n */\nfabric.SHARED_ATTRIBUTES = [\n 'display',\n 'transform',\n 'fill', 'fill-opacity', 'fill-rule',\n 'opacity',\n 'stroke', 'stroke-dasharray', 'stroke-linecap', 'stroke-dashoffset',\n 'stroke-linejoin', 'stroke-miterlimit',\n 'stroke-opacity', 'stroke-width',\n 'id', 'paint-order', 'vector-effect',\n 'instantiated_by_use', 'clip-path',\n];\n/* _FROM_SVG_END_ */\n\n/**\n * Pixel per Inch as a default value set to 96. Can be changed for more realistic conversion.\n */\nfabric.DPI = 96;\nfabric.reNum = '(?:[-+]?(?:\\\\d+|\\\\d*\\\\.\\\\d+)(?:[eE][-+]?\\\\d+)?)';\nfabric.commaWsp = '(?:\\\\s+,?\\\\s*|,\\\\s*)';\nfabric.rePathCommand = /([-+]?((\\d+\\.\\d+)|((\\d+)|(\\.\\d+)))(?:[eE][-+]?\\d+)?)/ig;\nfabric.reNonWord = /[ \\n\\.,;!\\?\\-]/;\nfabric.fontPaths = { };\nfabric.iMatrix = [1, 0, 0, 1, 0, 0];\nfabric.svgNS = 'http://www.w3.org/2000/svg';\n\n/**\n * Pixel limit for cache canvases. 1Mpx , 4Mpx should be fine.\n * @since 1.7.14\n * @type Number\n * @default\n */\nfabric.perfLimitSizeTotal = 2097152;\n\n/**\n * Pixel limit for cache canvases width or height. IE fixes the maximum at 5000\n * @since 1.7.14\n * @type Number\n * @default\n */\nfabric.maxCacheSideLimit = 4096;\n\n/**\n * Lowest pixel limit for cache canvases, set at 256PX\n * @since 1.7.14\n * @type Number\n * @default\n */\nfabric.minCacheSideLimit = 256;\n\n/**\n * Cache Object for widths of chars in text rendering.\n */\nfabric.charWidthsCache = { };\n\n/**\n * if webgl is enabled and available, textureSize will determine the size\n * of the canvas backend\n * @since 2.0.0\n * @type Number\n * @default\n */\nfabric.textureSize = 2048;\n\n/**\n * When 'true', style information is not retained when copy/pasting text, making\n * pasted text use destination style.\n * Defaults to 'false'.\n * @type Boolean\n * @default\n */\nfabric.disableStyleCopyPaste = false;\n\n/**\n * Enable webgl for filtering picture is available\n * A filtering backend will be initialized, this will both take memory and\n * time since a default 2048x2048 canvas will be created for the gl context\n * @since 2.0.0\n * @type Boolean\n * @default\n */\nfabric.enableGLFiltering = true;\n\n/**\n * Device Pixel Ratio\n * @see https://developer.apple.com/library/safari/documentation/AudioVideo/Conceptual/HTML-canvas-guide/SettingUptheCanvas/SettingUptheCanvas.html\n */\nfabric.devicePixelRatio = fabric.window.devicePixelRatio ||\n fabric.window.webkitDevicePixelRatio ||\n fabric.window.mozDevicePixelRatio ||\n 1;\n/**\n * Browser-specific constant to adjust CanvasRenderingContext2D.shadowBlur value,\n * which is unitless and not rendered equally across browsers.\n *\n * Values that work quite well (as of October 2017) are:\n * - Chrome: 1.5\n * - Edge: 1.75\n * - Firefox: 0.9\n * - Safari: 0.95\n *\n * @since 2.0.0\n * @type Number\n * @default 1\n */\nfabric.browserShadowBlurConstant = 1;\n\n/**\n * This object contains the result of arc to bezier conversion for faster retrieving if the same arc needs to be converted again.\n * It was an internal variable, is accessible since version 2.3.4\n */\nfabric.arcToSegmentsCache = { };\n\n/**\n * This object keeps the results of the boundsOfCurve calculation mapped by the joined arguments necessary to calculate it.\n * It does speed up calculation, if you parse and add always the same paths, but in case of heavy usage of freedrawing\n * you do not get any speed benefit and you get a big object in memory.\n * The object was a private variable before, while now is appended to the lib so that you have access to it and you\n * can eventually clear it.\n * It was an internal variable, is accessible since version 2.3.4\n */\nfabric.boundsOfCurveCache = { };\n\n/**\n * If disabled boundsOfCurveCache is not used. For apps that make heavy usage of pencil drawing probably disabling it is better\n * @default true\n */\nfabric.cachesBoundsOfCurve = true;\n\n/**\n * Skip performance testing of setupGLContext and force the use of putImageData that seems to be the one that works best on\n * Chrome + old hardware. if your users are experiencing empty images after filtering you may try to force this to true\n * this has to be set before instantiating the filtering backend ( before filtering the first image )\n * @type Boolean\n * @default false\n */\nfabric.forceGLPutImageData = false;\n\nfabric.initFilterBackend = function() {\n if (fabric.enableGLFiltering && fabric.isWebglSupported && fabric.isWebglSupported(fabric.textureSize)) {\n console.log('max texture size: ' + fabric.maxTextureSize);\n return (new fabric.WebglFilterBackend({ tileSize: fabric.textureSize }));\n }\n else if (fabric.Canvas2dFilterBackend) {\n return (new fabric.Canvas2dFilterBackend());\n }\n};\n\n\nif (typeof document !== 'undefined' && typeof window !== 'undefined') {\n // ensure globality even if entire library were function wrapped (as in Meteor.js packaging system)\n window.fabric = fabric;\n}\n\n\n(function() {\n\n /**\n * @private\n * @param {String} eventName\n * @param {Function} handler\n */\n function _removeEventListener(eventName, handler) {\n if (!this.__eventListeners[eventName]) {\n return;\n }\n var eventListener = this.__eventListeners[eventName];\n if (handler) {\n eventListener[eventListener.indexOf(handler)] = false;\n }\n else {\n fabric.util.array.fill(eventListener, false);\n }\n }\n\n /**\n * Observes specified event\n * @memberOf fabric.Observable\n * @alias on\n * @param {String|Object} eventName Event name (eg. 'after:render') or object with key/value pairs (eg. {'after:render': handler, 'selection:cleared': handler})\n * @param {Function} handler Function that receives a notification when an event of the specified type occurs\n * @return {Self} thisArg\n * @chainable\n */\n function on(eventName, handler) {\n if (!this.__eventListeners) {\n this.__eventListeners = { };\n }\n // one object with key/value pairs was passed\n if (arguments.length === 1) {\n for (var prop in eventName) {\n this.on(prop, eventName[prop]);\n }\n }\n else {\n if (!this.__eventListeners[eventName]) {\n this.__eventListeners[eventName] = [];\n }\n this.__eventListeners[eventName].push(handler);\n }\n return this;\n }\n\n function _once(eventName, handler) {\n var _handler = function () {\n handler.apply(this, arguments);\n this.off(eventName, _handler);\n }.bind(this);\n this.on(eventName, _handler);\n }\n\n function once(eventName, handler) {\n // one object with key/value pairs was passed\n if (arguments.length === 1) {\n for (var prop in eventName) {\n _once.call(this, prop, eventName[prop]);\n }\n }\n else {\n _once.call(this, eventName, handler);\n }\n return this;\n }\n\n /**\n * Stops event observing for a particular event handler. Calling this method\n * without arguments removes all handlers for all events\n * @memberOf fabric.Observable\n * @alias off\n * @param {String|Object} eventName Event name (eg. 'after:render') or object with key/value pairs (eg. {'after:render': handler, 'selection:cleared': handler})\n * @param {Function} handler Function to be deleted from EventListeners\n * @return {Self} thisArg\n * @chainable\n */\n function off(eventName, handler) {\n if (!this.__eventListeners) {\n return this;\n }\n\n // remove all key/value pairs (event name -> event handler)\n if (arguments.length === 0) {\n for (eventName in this.__eventListeners) {\n _removeEventListener.call(this, eventName);\n }\n }\n // one object with key/value pairs was passed\n else if (arguments.length === 1 && typeof arguments[0] === 'object') {\n for (var prop in eventName) {\n _removeEventListener.call(this, prop, eventName[prop]);\n }\n }\n else {\n _removeEventListener.call(this, eventName, handler);\n }\n return this;\n }\n\n /**\n * Fires event with an optional options object\n * @memberOf fabric.Observable\n * @param {String} eventName Event name to fire\n * @param {Object} [options] Options object\n * @return {Self} thisArg\n * @chainable\n */\n function fire(eventName, options) {\n if (!this.__eventListeners) {\n return this;\n }\n\n var listenersForEvent = this.__eventListeners[eventName];\n if (!listenersForEvent) {\n return this;\n }\n\n for (var i = 0, len = listenersForEvent.length; i < len; i++) {\n listenersForEvent[i] && listenersForEvent[i].call(this, options || { });\n }\n this.__eventListeners[eventName] = listenersForEvent.filter(function(value) {\n return value !== false;\n });\n return this;\n }\n\n /**\n * @namespace fabric.Observable\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-2#events}\n * @see {@link http://fabricjs.com/events|Events demo}\n */\n fabric.Observable = {\n fire: fire,\n on: on,\n once: once,\n off: off,\n };\n})();\n\n\n/**\n * @namespace fabric.Collection\n */\nfabric.Collection = {\n\n _objects: [],\n\n /**\n * Adds objects to collection, Canvas or Group, then renders canvas\n * (if `renderOnAddRemove` is not `false`).\n * in case of Group no changes to bounding box are made.\n * Objects should be instances of (or inherit from) fabric.Object\n * Use of this function is highly discouraged for groups.\n * you can add a bunch of objects with the add method but then you NEED\n * to run a addWithUpdate call for the Group class or position/bbox will be wrong.\n * @param {...fabric.Object} object Zero or more fabric instances\n * @return {Self} thisArg\n * @chainable\n */\n add: function () {\n this._objects.push.apply(this._objects, arguments);\n if (this._onObjectAdded) {\n for (var i = 0, length = arguments.length; i < length; i++) {\n this._onObjectAdded(arguments[i]);\n }\n }\n this.renderOnAddRemove && this.requestRenderAll();\n return this;\n },\n\n /**\n * Inserts an object into collection at specified index, then renders canvas (if `renderOnAddRemove` is not `false`)\n * An object should be an instance of (or inherit from) fabric.Object\n * Use of this function is highly discouraged for groups.\n * you can add a bunch of objects with the insertAt method but then you NEED\n * to run a addWithUpdate call for the Group class or position/bbox will be wrong.\n * @param {Object} object Object to insert\n * @param {Number} index Index to insert object at\n * @param {Boolean} nonSplicing When `true`, no splicing (shifting) of objects occurs\n * @return {Self} thisArg\n * @chainable\n */\n insertAt: function (object, index, nonSplicing) {\n var objects = this._objects;\n if (nonSplicing) {\n objects[index] = object;\n }\n else {\n objects.splice(index, 0, object);\n }\n this._onObjectAdded && this._onObjectAdded(object);\n this.renderOnAddRemove && this.requestRenderAll();\n return this;\n },\n\n /**\n * Removes objects from a collection, then renders canvas (if `renderOnAddRemove` is not `false`)\n * @param {...fabric.Object} object Zero or more fabric instances\n * @return {Self} thisArg\n * @chainable\n */\n remove: function() {\n var objects = this._objects,\n index, somethingRemoved = false;\n\n for (var i = 0, length = arguments.length; i < length; i++) {\n index = objects.indexOf(arguments[i]);\n\n // only call onObjectRemoved if an object was actually removed\n if (index !== -1) {\n somethingRemoved = true;\n objects.splice(index, 1);\n this._onObjectRemoved && this._onObjectRemoved(arguments[i]);\n }\n }\n\n this.renderOnAddRemove && somethingRemoved && this.requestRenderAll();\n return this;\n },\n\n /**\n * Executes given function for each object in this group\n * @param {Function} callback\n * Callback invoked with current object as first argument,\n * index - as second and an array of all objects - as third.\n * Callback is invoked in a context of Global Object (e.g. `window`)\n * when no `context` argument is given\n *\n * @param {Object} context Context (aka thisObject)\n * @return {Self} thisArg\n * @chainable\n */\n forEachObject: function(callback, context) {\n var objects = this.getObjects();\n for (var i = 0, len = objects.length; i < len; i++) {\n callback.call(context, objects[i], i, objects);\n }\n return this;\n },\n\n /**\n * Returns an array of children objects of this instance\n * Type parameter introduced in 1.3.10\n * since 2.3.5 this method return always a COPY of the array;\n * @param {String} [type] When specified, only objects of this type are returned\n * @return {Array}\n */\n getObjects: function(type) {\n if (typeof type === 'undefined') {\n return this._objects.concat();\n }\n return this._objects.filter(function(o) {\n return o.type === type;\n });\n },\n\n /**\n * Returns object at specified index\n * @param {Number} index\n * @return {Self} thisArg\n */\n item: function (index) {\n return this._objects[index];\n },\n\n /**\n * Returns true if collection contains no objects\n * @return {Boolean} true if collection is empty\n */\n isEmpty: function () {\n return this._objects.length === 0;\n },\n\n /**\n * Returns a size of a collection (i.e: length of an array containing its objects)\n * @return {Number} Collection size\n */\n size: function() {\n return this._objects.length;\n },\n\n /**\n * Returns true if collection contains an object\n * @param {Object} object Object to check against\n * @param {Boolean} [deep=false] `true` to check all descendants, `false` to check only `_objects`\n * @return {Boolean} `true` if collection contains an object\n */\n contains: function (object, deep) {\n if (this._objects.indexOf(object) > -1) {\n return true;\n }\n else if (deep) {\n return this._objects.some(function (obj) {\n return typeof obj.contains === 'function' && obj.contains(object, true);\n });\n }\n return false;\n },\n\n /**\n * Returns number representation of a collection complexity\n * @return {Number} complexity\n */\n complexity: function () {\n return this._objects.reduce(function (memo, current) {\n memo += current.complexity ? current.complexity() : 0;\n return memo;\n }, 0);\n }\n};\n\n\n/**\n * @namespace fabric.CommonMethods\n */\nfabric.CommonMethods = {\n\n /**\n * Sets object's properties from options\n * @param {Object} [options] Options object\n */\n _setOptions: function(options) {\n for (var prop in options) {\n this.set(prop, options[prop]);\n }\n },\n\n /**\n * @private\n * @param {Object} [filler] Options object\n * @param {String} [property] property to set the Gradient to\n */\n _initGradient: function(filler, property) {\n if (filler && filler.colorStops && !(filler instanceof fabric.Gradient)) {\n this.set(property, new fabric.Gradient(filler));\n }\n },\n\n /**\n * @private\n * @param {Object} [filler] Options object\n * @param {String} [property] property to set the Pattern to\n * @param {Function} [callback] callback to invoke after pattern load\n */\n _initPattern: function(filler, property, callback) {\n if (filler && filler.source && !(filler instanceof fabric.Pattern)) {\n this.set(property, new fabric.Pattern(filler, callback));\n }\n else {\n callback && callback();\n }\n },\n\n /**\n * @private\n */\n _setObject: function(obj) {\n for (var prop in obj) {\n this._set(prop, obj[prop]);\n }\n },\n\n /**\n * Sets property to a given value. When changing position/dimension -related properties (left, top, scale, angle, etc.) `set` does not update position of object's borders/controls. If you need to update those, call `setCoords()`.\n * @param {String|Object} key Property name or object (if object, iterate over the object properties)\n * @param {Object|Function} value Property value (if function, the value is passed into it and its return value is used as a new one)\n * @return {fabric.Object} thisArg\n * @chainable\n */\n set: function(key, value) {\n if (typeof key === 'object') {\n this._setObject(key);\n }\n else {\n this._set(key, value);\n }\n return this;\n },\n\n _set: function(key, value) {\n this[key] = value;\n },\n\n /**\n * Toggles specified property from `true` to `false` or from `false` to `true`\n * @param {String} property Property to toggle\n * @return {fabric.Object} thisArg\n * @chainable\n */\n toggle: function(property) {\n var value = this.get(property);\n if (typeof value === 'boolean') {\n this.set(property, !value);\n }\n return this;\n },\n\n /**\n * Basic getter\n * @param {String} property Property name\n * @return {*} value of a property\n */\n get: function(property) {\n return this[property];\n }\n};\n\n\n(function(global) {\n\n var sqrt = Math.sqrt,\n atan2 = Math.atan2,\n pow = Math.pow,\n PiBy180 = Math.PI / 180,\n PiBy2 = Math.PI / 2;\n\n /**\n * @namespace fabric.util\n */\n fabric.util = {\n\n /**\n * Calculate the cos of an angle, avoiding returning floats for known results\n * @static\n * @memberOf fabric.util\n * @param {Number} angle the angle in radians or in degree\n * @return {Number}\n */\n cos: function(angle) {\n if (angle === 0) { return 1; }\n if (angle < 0) {\n // cos(a) = cos(-a)\n angle = -angle;\n }\n var angleSlice = angle / PiBy2;\n switch (angleSlice) {\n case 1: case 3: return 0;\n case 2: return -1;\n }\n return Math.cos(angle);\n },\n\n /**\n * Calculate the sin of an angle, avoiding returning floats for known results\n * @static\n * @memberOf fabric.util\n * @param {Number} angle the angle in radians or in degree\n * @return {Number}\n */\n sin: function(angle) {\n if (angle === 0) { return 0; }\n var angleSlice = angle / PiBy2, sign = 1;\n if (angle < 0) {\n // sin(-a) = -sin(a)\n sign = -1;\n }\n switch (angleSlice) {\n case 1: return sign;\n case 2: return 0;\n case 3: return -sign;\n }\n return Math.sin(angle);\n },\n\n /**\n * Removes value from an array.\n * Presence of value (and its position in an array) is determined via `Array.prototype.indexOf`\n * @static\n * @memberOf fabric.util\n * @param {Array} array\n * @param {*} value\n * @return {Array} original array\n */\n removeFromArray: function(array, value) {\n var idx = array.indexOf(value);\n if (idx !== -1) {\n array.splice(idx, 1);\n }\n return array;\n },\n\n /**\n * Returns random number between 2 specified ones.\n * @static\n * @memberOf fabric.util\n * @param {Number} min lower limit\n * @param {Number} max upper limit\n * @return {Number} random value (between min and max)\n */\n getRandomInt: function(min, max) {\n return Math.floor(Math.random() * (max - min + 1)) + min;\n },\n\n /**\n * Transforms degrees to radians.\n * @static\n * @memberOf fabric.util\n * @param {Number} degrees value in degrees\n * @return {Number} value in radians\n */\n degreesToRadians: function(degrees) {\n return degrees * PiBy180;\n },\n\n /**\n * Transforms radians to degrees.\n * @static\n * @memberOf fabric.util\n * @param {Number} radians value in radians\n * @return {Number} value in degrees\n */\n radiansToDegrees: function(radians) {\n return radians / PiBy180;\n },\n\n /**\n * Rotates `point` around `origin` with `radians`\n * @static\n * @memberOf fabric.util\n * @param {fabric.Point} point The point to rotate\n * @param {fabric.Point} origin The origin of the rotation\n * @param {Number} radians The radians of the angle for the rotation\n * @return {fabric.Point} The new rotated point\n */\n rotatePoint: function(point, origin, radians) {\n var newPoint = new fabric.Point(point.x - origin.x, point.y - origin.y),\n v = fabric.util.rotateVector(newPoint, radians);\n return new fabric.Point(v.x, v.y).addEquals(origin);\n },\n\n /**\n * Rotates `vector` with `radians`\n * @static\n * @memberOf fabric.util\n * @param {Object} vector The vector to rotate (x and y)\n * @param {Number} radians The radians of the angle for the rotation\n * @return {Object} The new rotated point\n */\n rotateVector: function(vector, radians) {\n var sin = fabric.util.sin(radians),\n cos = fabric.util.cos(radians),\n rx = vector.x * cos - vector.y * sin,\n ry = vector.x * sin + vector.y * cos;\n return {\n x: rx,\n y: ry\n };\n },\n\n /**\n * Apply transform t to point p\n * @static\n * @memberOf fabric.util\n * @param {fabric.Point} p The point to transform\n * @param {Array} t The transform\n * @param {Boolean} [ignoreOffset] Indicates that the offset should not be applied\n * @return {fabric.Point} The transformed point\n */\n transformPoint: function(p, t, ignoreOffset) {\n if (ignoreOffset) {\n return new fabric.Point(\n t[0] * p.x + t[2] * p.y,\n t[1] * p.x + t[3] * p.y\n );\n }\n return new fabric.Point(\n t[0] * p.x + t[2] * p.y + t[4],\n t[1] * p.x + t[3] * p.y + t[5]\n );\n },\n\n /**\n * Returns coordinates of points's bounding rectangle (left, top, width, height)\n * @param {Array} points 4 points array\n * @param {Array} [transform] an array of 6 numbers representing a 2x3 transform matrix\n * @return {Object} Object with left, top, width, height properties\n */\n makeBoundingBoxFromPoints: function(points, transform) {\n if (transform) {\n for (var i = 0; i < points.length; i++) {\n points[i] = fabric.util.transformPoint(points[i], transform);\n }\n }\n var xPoints = [points[0].x, points[1].x, points[2].x, points[3].x],\n minX = fabric.util.array.min(xPoints),\n maxX = fabric.util.array.max(xPoints),\n width = maxX - minX,\n yPoints = [points[0].y, points[1].y, points[2].y, points[3].y],\n minY = fabric.util.array.min(yPoints),\n maxY = fabric.util.array.max(yPoints),\n height = maxY - minY;\n\n return {\n left: minX,\n top: minY,\n width: width,\n height: height\n };\n },\n\n /**\n * Invert transformation t\n * @static\n * @memberOf fabric.util\n * @param {Array} t The transform\n * @return {Array} The inverted transform\n */\n invertTransform: function(t) {\n var a = 1 / (t[0] * t[3] - t[1] * t[2]),\n r = [a * t[3], -a * t[1], -a * t[2], a * t[0]],\n o = fabric.util.transformPoint({ x: t[4], y: t[5] }, r, true);\n r[4] = -o.x;\n r[5] = -o.y;\n return r;\n },\n\n /**\n * A wrapper around Number#toFixed, which contrary to native method returns number, not string.\n * @static\n * @memberOf fabric.util\n * @param {Number|String} number number to operate on\n * @param {Number} fractionDigits number of fraction digits to \"leave\"\n * @return {Number}\n */\n toFixed: function(number, fractionDigits) {\n return parseFloat(Number(number).toFixed(fractionDigits));\n },\n\n /**\n * Converts from attribute value to pixel value if applicable.\n * Returns converted pixels or original value not converted.\n * @param {Number|String} value number to operate on\n * @param {Number} fontSize\n * @return {Number|String}\n */\n parseUnit: function(value, fontSize) {\n var unit = /\\D{0,2}$/.exec(value),\n number = parseFloat(value);\n if (!fontSize) {\n fontSize = fabric.Text.DEFAULT_SVG_FONT_SIZE;\n }\n switch (unit[0]) {\n case 'mm':\n return number * fabric.DPI / 25.4;\n\n case 'cm':\n return number * fabric.DPI / 2.54;\n\n case 'in':\n return number * fabric.DPI;\n\n case 'pt':\n return number * fabric.DPI / 72; // or * 4 / 3\n\n case 'pc':\n return number * fabric.DPI / 72 * 12; // or * 16\n\n case 'em':\n return number * fontSize;\n\n default:\n return number;\n }\n },\n\n /**\n * Function which always returns `false`.\n * @static\n * @memberOf fabric.util\n * @return {Boolean}\n */\n falseFunction: function() {\n return false;\n },\n\n /**\n * Returns klass \"Class\" object of given namespace\n * @memberOf fabric.util\n * @param {String} type Type of object (eg. 'circle')\n * @param {String} namespace Namespace to get klass \"Class\" object from\n * @return {Object} klass \"Class\"\n */\n getKlass: function(type, namespace) {\n // capitalize first letter only\n type = fabric.util.string.camelize(type.charAt(0).toUpperCase() + type.slice(1));\n return fabric.util.resolveNamespace(namespace)[type];\n },\n\n /**\n * Returns array of attributes for given svg that fabric parses\n * @memberOf fabric.util\n * @param {String} type Type of svg element (eg. 'circle')\n * @return {Array} string names of supported attributes\n */\n getSvgAttributes: function(type) {\n var attributes = [\n 'instantiated_by_use',\n 'style',\n 'id',\n 'class'\n ];\n switch (type) {\n case 'linearGradient':\n attributes = attributes.concat(['x1', 'y1', 'x2', 'y2', 'gradientUnits', 'gradientTransform']);\n break;\n case 'radialGradient':\n attributes = attributes.concat(['gradientUnits', 'gradientTransform', 'cx', 'cy', 'r', 'fx', 'fy', 'fr']);\n break;\n case 'stop':\n attributes = attributes.concat(['offset', 'stop-color', 'stop-opacity']);\n break;\n }\n return attributes;\n },\n\n /**\n * Returns object of given namespace\n * @memberOf fabric.util\n * @param {String} namespace Namespace string e.g. 'fabric.Image.filter' or 'fabric'\n * @return {Object} Object for given namespace (default fabric)\n */\n resolveNamespace: function(namespace) {\n if (!namespace) {\n return fabric;\n }\n\n var parts = namespace.split('.'),\n len = parts.length, i,\n obj = global || fabric.window;\n\n for (i = 0; i < len; ++i) {\n obj = obj[parts[i]];\n }\n\n return obj;\n },\n\n /**\n * Loads image element from given url and passes it to a callback\n * @memberOf fabric.util\n * @param {String} url URL representing an image\n * @param {Function} callback Callback; invoked with loaded image\n * @param {*} [context] Context to invoke callback in\n * @param {Object} [crossOrigin] crossOrigin value to set image element to\n */\n loadImage: function(url, callback, context, crossOrigin) {\n if (!url) {\n callback && callback.call(context, url);\n return;\n }\n\n var img = fabric.util.createImage();\n\n /** @ignore */\n var onLoadCallback = function () {\n callback && callback.call(context, img, false);\n img = img.onload = img.onerror = null;\n };\n\n img.onload = onLoadCallback;\n /** @ignore */\n img.onerror = function() {\n fabric.log('Error loading ' + img.src);\n callback && callback.call(context, null, true);\n img = img.onload = img.onerror = null;\n };\n\n // data-urls appear to be buggy with crossOrigin\n // https://github.com/kangax/fabric.js/commit/d0abb90f1cd5c5ef9d2a94d3fb21a22330da3e0a#commitcomment-4513767\n // see https://code.google.com/p/chromium/issues/detail?id=315152\n // https://bugzilla.mozilla.org/show_bug.cgi?id=935069\n // crossOrigin null is the same as not set.\n if (url.indexOf('data') !== 0 &&\n crossOrigin !== undefined &&\n crossOrigin !== null) {\n img.crossOrigin = crossOrigin;\n }\n\n // IE10 / IE11-Fix: SVG contents from data: URI\n // will only be available if the IMG is present\n // in the DOM (and visible)\n if (url.substring(0,14) === 'data:image/svg') {\n img.onload = null;\n fabric.util.loadImageInDom(img, onLoadCallback);\n }\n\n img.src = url;\n },\n\n /**\n * Attaches SVG image with data: URL to the dom\n * @memberOf fabric.util\n * @param {Object} img Image object with data:image/svg src\n * @param {Function} callback Callback; invoked with loaded image\n * @return {Object} DOM element (div containing the SVG image)\n */\n loadImageInDom: function(img, onLoadCallback) {\n var div = fabric.document.createElement('div');\n div.style.width = div.style.height = '1px';\n div.style.left = div.style.top = '-100%';\n div.style.position = 'absolute';\n div.appendChild(img);\n fabric.document.querySelector('body').appendChild(div);\n /**\n * Wrap in function to:\n * 1. Call existing callback\n * 2. Cleanup DOM\n */\n img.onload = function () {\n onLoadCallback();\n div.parentNode.removeChild(div);\n div = null;\n };\n },\n\n /**\n * Creates corresponding fabric instances from their object representations\n * @static\n * @memberOf fabric.util\n * @param {Array} objects Objects to enliven\n * @param {Function} callback Callback to invoke when all objects are created\n * @param {String} namespace Namespace to get klass \"Class\" object from\n * @param {Function} reviver Method for further parsing of object elements,\n * called after each fabric object created.\n */\n enlivenObjects: function(objects, callback, namespace, reviver) {\n objects = objects || [];\n\n var enlivenedObjects = [],\n numLoadedObjects = 0,\n numTotalObjects = objects.length;\n\n function onLoaded() {\n if (++numLoadedObjects === numTotalObjects) {\n callback && callback(enlivenedObjects.filter(function(obj) {\n // filter out undefined objects (objects that gave error)\n return obj;\n }));\n }\n }\n\n if (!numTotalObjects) {\n callback && callback(enlivenedObjects);\n return;\n }\n\n objects.forEach(function (o, index) {\n // if sparse array\n if (!o || !o.type) {\n onLoaded();\n return;\n }\n var klass = fabric.util.getKlass(o.type, namespace);\n klass.fromObject(o, function (obj, error) {\n error || (enlivenedObjects[index] = obj);\n reviver && reviver(o, obj, error);\n onLoaded();\n });\n });\n },\n\n /**\n * Create and wait for loading of patterns\n * @static\n * @memberOf fabric.util\n * @param {Array} patterns Objects to enliven\n * @param {Function} callback Callback to invoke when all objects are created\n * called after each fabric object created.\n */\n enlivenPatterns: function(patterns, callback) {\n patterns = patterns || [];\n\n function onLoaded() {\n if (++numLoadedPatterns === numPatterns) {\n callback && callback(enlivenedPatterns);\n }\n }\n\n var enlivenedPatterns = [],\n numLoadedPatterns = 0,\n numPatterns = patterns.length;\n\n if (!numPatterns) {\n callback && callback(enlivenedPatterns);\n return;\n }\n\n patterns.forEach(function (p, index) {\n if (p && p.source) {\n new fabric.Pattern(p, function(pattern) {\n enlivenedPatterns[index] = pattern;\n onLoaded();\n });\n }\n else {\n enlivenedPatterns[index] = p;\n onLoaded();\n }\n });\n },\n\n /**\n * Groups SVG elements (usually those retrieved from SVG document)\n * @static\n * @memberOf fabric.util\n * @param {Array} elements SVG elements to group\n * @param {Object} [options] Options object\n * @param {String} path Value to set sourcePath to\n * @return {fabric.Object|fabric.Group}\n */\n groupSVGElements: function(elements, options, path) {\n var object;\n if (elements && elements.length === 1) {\n return elements[0];\n }\n if (options) {\n if (options.width && options.height) {\n options.centerPoint = {\n x: options.width / 2,\n y: options.height / 2\n };\n }\n else {\n delete options.width;\n delete options.height;\n }\n }\n object = new fabric.Group(elements, options);\n if (typeof path !== 'undefined') {\n object.sourcePath = path;\n }\n return object;\n },\n\n /**\n * Populates an object with properties of another object\n * @static\n * @memberOf fabric.util\n * @param {Object} source Source object\n * @param {Object} destination Destination object\n * @return {Array} properties Properties names to include\n */\n populateWithProperties: function(source, destination, properties) {\n if (properties && Object.prototype.toString.call(properties) === '[object Array]') {\n for (var i = 0, len = properties.length; i < len; i++) {\n if (properties[i] in source) {\n destination[properties[i]] = source[properties[i]];\n }\n }\n }\n },\n\n /**\n * WARNING: THIS WAS TO SUPPORT OLD BROWSERS. deprecated.\n * WILL BE REMOVED IN FABRIC 5.0\n * Draws a dashed line between two points\n *\n * This method is used to draw dashed line around selection area.\n * See dotted stroke in canvas\n *\n * @param {CanvasRenderingContext2D} ctx context\n * @param {Number} x start x coordinate\n * @param {Number} y start y coordinate\n * @param {Number} x2 end x coordinate\n * @param {Number} y2 end y coordinate\n * @param {Array} da dash array pattern\n * @deprecated\n */\n drawDashedLine: function(ctx, x, y, x2, y2, da) {\n var dx = x2 - x,\n dy = y2 - y,\n len = sqrt(dx * dx + dy * dy),\n rot = atan2(dy, dx),\n dc = da.length,\n di = 0,\n draw = true;\n\n ctx.save();\n ctx.translate(x, y);\n ctx.moveTo(0, 0);\n ctx.rotate(rot);\n\n x = 0;\n while (len > x) {\n x += da[di++ % dc];\n if (x > len) {\n x = len;\n }\n ctx[draw ? 'lineTo' : 'moveTo'](x, 0);\n draw = !draw;\n }\n\n ctx.restore();\n },\n\n /**\n * Creates canvas element\n * @static\n * @memberOf fabric.util\n * @return {CanvasElement} initialized canvas element\n */\n createCanvasElement: function() {\n return fabric.document.createElement('canvas');\n },\n\n /**\n * Creates a canvas element that is a copy of another and is also painted\n * @param {CanvasElement} canvas to copy size and content of\n * @static\n * @memberOf fabric.util\n * @return {CanvasElement} initialized canvas element\n */\n copyCanvasElement: function(canvas) {\n var newCanvas = fabric.util.createCanvasElement();\n newCanvas.width = canvas.width;\n newCanvas.height = canvas.height;\n newCanvas.getContext('2d').drawImage(canvas, 0, 0);\n return newCanvas;\n },\n\n /**\n * since 2.6.0 moved from canvas instance to utility.\n * @param {CanvasElement} canvasEl to copy size and content of\n * @param {String} format 'jpeg' or 'png', in some browsers 'webp' is ok too\n * @param {Number} quality <= 1 and > 0\n * @static\n * @memberOf fabric.util\n * @return {String} data url\n */\n toDataURL: function(canvasEl, format, quality) {\n return canvasEl.toDataURL('image/' + format, quality);\n },\n\n /**\n * Creates image element (works on client and node)\n * @static\n * @memberOf fabric.util\n * @return {HTMLImageElement} HTML image element\n */\n createImage: function() {\n return fabric.document.createElement('img');\n },\n\n /**\n * Multiply matrix A by matrix B to nest transformations\n * @static\n * @memberOf fabric.util\n * @param {Array} a First transformMatrix\n * @param {Array} b Second transformMatrix\n * @param {Boolean} is2x2 flag to multiply matrices as 2x2 matrices\n * @return {Array} The product of the two transform matrices\n */\n multiplyTransformMatrices: function(a, b, is2x2) {\n // Matrix multiply a * b\n return [\n a[0] * b[0] + a[2] * b[1],\n a[1] * b[0] + a[3] * b[1],\n a[0] * b[2] + a[2] * b[3],\n a[1] * b[2] + a[3] * b[3],\n is2x2 ? 0 : a[0] * b[4] + a[2] * b[5] + a[4],\n is2x2 ? 0 : a[1] * b[4] + a[3] * b[5] + a[5]\n ];\n },\n\n /**\n * Decomposes standard 2x3 matrix into transform components\n * @static\n * @memberOf fabric.util\n * @param {Array} a transformMatrix\n * @return {Object} Components of transform\n */\n qrDecompose: function(a) {\n var angle = atan2(a[1], a[0]),\n denom = pow(a[0], 2) + pow(a[1], 2),\n scaleX = sqrt(denom),\n scaleY = (a[0] * a[3] - a[2] * a[1]) / scaleX,\n skewX = atan2(a[0] * a[2] + a[1] * a [3], denom);\n return {\n angle: angle / PiBy180,\n scaleX: scaleX,\n scaleY: scaleY,\n skewX: skewX / PiBy180,\n skewY: 0,\n translateX: a[4],\n translateY: a[5]\n };\n },\n\n /**\n * Returns a transform matrix starting from an object of the same kind of\n * the one returned from qrDecompose, useful also if you want to calculate some\n * transformations from an object that is not enlived yet\n * @static\n * @memberOf fabric.util\n * @param {Object} options\n * @param {Number} [options.angle] angle in degrees\n * @return {Number[]} transform matrix\n */\n calcRotateMatrix: function(options) {\n if (!options.angle) {\n return fabric.iMatrix.concat();\n }\n var theta = fabric.util.degreesToRadians(options.angle),\n cos = fabric.util.cos(theta),\n sin = fabric.util.sin(theta);\n return [cos, sin, -sin, cos, 0, 0];\n },\n\n /**\n * Returns a transform matrix starting from an object of the same kind of\n * the one returned from qrDecompose, useful also if you want to calculate some\n * transformations from an object that is not enlived yet.\n * is called DimensionsTransformMatrix because those properties are the one that influence\n * the size of the resulting box of the object.\n * @static\n * @memberOf fabric.util\n * @param {Object} options\n * @param {Number} [options.scaleX]\n * @param {Number} [options.scaleY]\n * @param {Boolean} [options.flipX]\n * @param {Boolean} [options.flipY]\n * @param {Number} [options.skewX]\n * @param {Number} [options.skewX]\n * @return {Number[]} transform matrix\n */\n calcDimensionsMatrix: function(options) {\n var scaleX = typeof options.scaleX === 'undefined' ? 1 : options.scaleX,\n scaleY = typeof options.scaleY === 'undefined' ? 1 : options.scaleY,\n scaleMatrix = [\n options.flipX ? -scaleX : scaleX,\n 0,\n 0,\n options.flipY ? -scaleY : scaleY,\n 0,\n 0],\n multiply = fabric.util.multiplyTransformMatrices,\n degreesToRadians = fabric.util.degreesToRadians;\n if (options.skewX) {\n scaleMatrix = multiply(\n scaleMatrix,\n [1, 0, Math.tan(degreesToRadians(options.skewX)), 1],\n true);\n }\n if (options.skewY) {\n scaleMatrix = multiply(\n scaleMatrix,\n [1, Math.tan(degreesToRadians(options.skewY)), 0, 1],\n true);\n }\n return scaleMatrix;\n },\n\n /**\n * Returns a transform matrix starting from an object of the same kind of\n * the one returned from qrDecompose, useful also if you want to calculate some\n * transformations from an object that is not enlived yet\n * @static\n * @memberOf fabric.util\n * @param {Object} options\n * @param {Number} [options.angle]\n * @param {Number} [options.scaleX]\n * @param {Number} [options.scaleY]\n * @param {Boolean} [options.flipX]\n * @param {Boolean} [options.flipY]\n * @param {Number} [options.skewX]\n * @param {Number} [options.skewX]\n * @param {Number} [options.translateX]\n * @param {Number} [options.translateY]\n * @return {Number[]} transform matrix\n */\n composeMatrix: function(options) {\n var matrix = [1, 0, 0, 1, options.translateX || 0, options.translateY || 0],\n multiply = fabric.util.multiplyTransformMatrices;\n if (options.angle) {\n matrix = multiply(matrix, fabric.util.calcRotateMatrix(options));\n }\n if (options.scaleX !== 1 || options.scaleY !== 1 ||\n options.skewX || options.skewY || options.flipX || options.flipY) {\n matrix = multiply(matrix, fabric.util.calcDimensionsMatrix(options));\n }\n return matrix;\n },\n\n /**\n * reset an object transform state to neutral. Top and left are not accounted for\n * @static\n * @memberOf fabric.util\n * @param {fabric.Object} target object to transform\n */\n resetObjectTransform: function (target) {\n target.scaleX = 1;\n target.scaleY = 1;\n target.skewX = 0;\n target.skewY = 0;\n target.flipX = false;\n target.flipY = false;\n target.rotate(0);\n },\n\n /**\n * Extract Object transform values\n * @static\n * @memberOf fabric.util\n * @param {fabric.Object} target object to read from\n * @return {Object} Components of transform\n */\n saveObjectTransform: function (target) {\n return {\n scaleX: target.scaleX,\n scaleY: target.scaleY,\n skewX: target.skewX,\n skewY: target.skewY,\n angle: target.angle,\n left: target.left,\n flipX: target.flipX,\n flipY: target.flipY,\n top: target.top\n };\n },\n\n /**\n * Returns true if context has transparent pixel\n * at specified location (taking tolerance into account)\n * @param {CanvasRenderingContext2D} ctx context\n * @param {Number} x x coordinate\n * @param {Number} y y coordinate\n * @param {Number} tolerance Tolerance\n */\n isTransparent: function(ctx, x, y, tolerance) {\n\n // If tolerance is > 0 adjust start coords to take into account.\n // If moves off Canvas fix to 0\n if (tolerance > 0) {\n if (x > tolerance) {\n x -= tolerance;\n }\n else {\n x = 0;\n }\n if (y > tolerance) {\n y -= tolerance;\n }\n else {\n y = 0;\n }\n }\n\n var _isTransparent = true, i, temp,\n imageData = ctx.getImageData(x, y, (tolerance * 2) || 1, (tolerance * 2) || 1),\n l = imageData.data.length;\n\n // Split image data - for tolerance > 1, pixelDataSize = 4;\n for (i = 3; i < l; i += 4) {\n temp = imageData.data[i];\n _isTransparent = temp <= 0;\n if (_isTransparent === false) {\n break; // Stop if colour found\n }\n }\n\n imageData = null;\n\n return _isTransparent;\n },\n\n /**\n * Parse preserveAspectRatio attribute from element\n * @param {string} attribute to be parsed\n * @return {Object} an object containing align and meetOrSlice attribute\n */\n parsePreserveAspectRatioAttribute: function(attribute) {\n var meetOrSlice = 'meet', alignX = 'Mid', alignY = 'Mid',\n aspectRatioAttrs = attribute.split(' '), align;\n\n if (aspectRatioAttrs && aspectRatioAttrs.length) {\n meetOrSlice = aspectRatioAttrs.pop();\n if (meetOrSlice !== 'meet' && meetOrSlice !== 'slice') {\n align = meetOrSlice;\n meetOrSlice = 'meet';\n }\n else if (aspectRatioAttrs.length) {\n align = aspectRatioAttrs.pop();\n }\n }\n //divide align in alignX and alignY\n alignX = align !== 'none' ? align.slice(1, 4) : 'none';\n alignY = align !== 'none' ? align.slice(5, 8) : 'none';\n return {\n meetOrSlice: meetOrSlice,\n alignX: alignX,\n alignY: alignY\n };\n },\n\n /**\n * Clear char widths cache for the given font family or all the cache if no\n * fontFamily is specified.\n * Use it if you know you are loading fonts in a lazy way and you are not waiting\n * for custom fonts to load properly when adding text objects to the canvas.\n * If a text object is added when its own font is not loaded yet, you will get wrong\n * measurement and so wrong bounding boxes.\n * After the font cache is cleared, either change the textObject text content or call\n * initDimensions() to trigger a recalculation\n * @memberOf fabric.util\n * @param {String} [fontFamily] font family to clear\n */\n clearFabricFontCache: function(fontFamily) {\n fontFamily = (fontFamily || '').toLowerCase();\n if (!fontFamily) {\n fabric.charWidthsCache = { };\n }\n else if (fabric.charWidthsCache[fontFamily]) {\n delete fabric.charWidthsCache[fontFamily];\n }\n },\n\n /**\n * Given current aspect ratio, determines the max width and height that can\n * respect the total allowed area for the cache.\n * @memberOf fabric.util\n * @param {Number} ar aspect ratio\n * @param {Number} maximumArea Maximum area you want to achieve\n * @return {Object.x} Limited dimensions by X\n * @return {Object.y} Limited dimensions by Y\n */\n limitDimsByArea: function(ar, maximumArea) {\n var roughWidth = Math.sqrt(maximumArea * ar),\n perfLimitSizeY = Math.floor(maximumArea / roughWidth);\n return { x: Math.floor(roughWidth), y: perfLimitSizeY };\n },\n\n capValue: function(min, value, max) {\n return Math.max(min, Math.min(value, max));\n },\n\n /**\n * Finds the scale for the object source to fit inside the object destination,\n * keeping aspect ratio intact.\n * respect the total allowed area for the cache.\n * @memberOf fabric.util\n * @param {Object | fabric.Object} source\n * @param {Number} source.height natural unscaled height of the object\n * @param {Number} source.width natural unscaled width of the object\n * @param {Object | fabric.Object} destination\n * @param {Number} destination.height natural unscaled height of the object\n * @param {Number} destination.width natural unscaled width of the object\n * @return {Number} scale factor to apply to source to fit into destination\n */\n findScaleToFit: function(source, destination) {\n return Math.min(destination.width / source.width, destination.height / source.height);\n },\n\n /**\n * Finds the scale for the object source to cover entirely the object destination,\n * keeping aspect ratio intact.\n * respect the total allowed area for the cache.\n * @memberOf fabric.util\n * @param {Object | fabric.Object} source\n * @param {Number} source.height natural unscaled height of the object\n * @param {Number} source.width natural unscaled width of the object\n * @param {Object | fabric.Object} destination\n * @param {Number} destination.height natural unscaled height of the object\n * @param {Number} destination.width natural unscaled width of the object\n * @return {Number} scale factor to apply to source to cover destination\n */\n findScaleToCover: function(source, destination) {\n return Math.max(destination.width / source.width, destination.height / source.height);\n },\n\n /**\n * given an array of 6 number returns something like `\"matrix(...numbers)\"`\n * @memberOf fabric.util\n * @param {Array} transform an array with 6 numbers\n * @return {String} transform matrix for svg\n * @return {Object.y} Limited dimensions by Y\n */\n matrixToSVG: function(transform) {\n return 'matrix(' + transform.map(function(value) {\n return fabric.util.toFixed(value, fabric.Object.NUM_FRACTION_DIGITS);\n }).join(' ') + ')';\n },\n\n /**\n * given an object and a transform, apply the inverse transform to the object,\n * this is equivalent to remove from that object that transformation, so that\n * added in a space with the removed transform, the object will be the same as before.\n * Removing from an object a transform that scale by 2 is like scaling it by 1/2.\n * Removing from an object a transfrom that rotate by 30deg is like rotating by 30deg\n * in the opposite direction.\n * This util is used to add objects inside transformed groups or nested groups.\n * @memberOf fabric.util\n * @param {fabric.Object} object the object you want to transform\n * @param {Array} transform the destination transform\n */\n removeTransformFromObject: function(object, transform) {\n var inverted = fabric.util.invertTransform(transform),\n finalTransform = fabric.util.multiplyTransformMatrices(inverted, object.calcOwnMatrix());\n fabric.util.applyTransformToObject(object, finalTransform);\n },\n\n /**\n * given an object and a transform, apply the transform to the object.\n * this is equivalent to change the space where the object is drawn.\n * Adding to an object a transform that scale by 2 is like scaling it by 2.\n * This is used when removing an object from an active selection for example.\n * @memberOf fabric.util\n * @param {fabric.Object} object the object you want to transform\n * @param {Array} transform the destination transform\n */\n addTransformToObject: function(object, transform) {\n fabric.util.applyTransformToObject(\n object,\n fabric.util.multiplyTransformMatrices(transform, object.calcOwnMatrix())\n );\n },\n\n /**\n * discard an object transform state and apply the one from the matrix.\n * @memberOf fabric.util\n * @param {fabric.Object} object the object you want to transform\n * @param {Array} transform the destination transform\n */\n applyTransformToObject: function(object, transform) {\n var options = fabric.util.qrDecompose(transform),\n center = new fabric.Point(options.translateX, options.translateY);\n object.flipX = false;\n object.flipY = false;\n object.set('scaleX', options.scaleX);\n object.set('scaleY', options.scaleY);\n object.skewX = options.skewX;\n object.skewY = options.skewY;\n object.angle = options.angle;\n object.setPositionByOrigin(center, 'center', 'center');\n },\n\n /**\n * given a width and height, return the size of the bounding box\n * that can contains the box with width/height with applied transform\n * described in options.\n * Use to calculate the boxes around objects for controls.\n * @memberOf fabric.util\n * @param {Number} width\n * @param {Number} height\n * @param {Object} options\n * @param {Number} options.scaleX\n * @param {Number} options.scaleY\n * @param {Number} options.skewX\n * @param {Number} options.skewY\n * @return {Object.x} width of containing\n * @return {Object.y} height of containing\n */\n sizeAfterTransform: function(width, height, options) {\n var dimX = width / 2, dimY = height / 2,\n points = [\n {\n x: -dimX,\n y: -dimY\n },\n {\n x: dimX,\n y: -dimY\n },\n {\n x: -dimX,\n y: dimY\n },\n {\n x: dimX,\n y: dimY\n }],\n transformMatrix = fabric.util.calcDimensionsMatrix(options),\n bbox = fabric.util.makeBoundingBoxFromPoints(points, transformMatrix);\n return {\n x: bbox.width,\n y: bbox.height,\n };\n }\n };\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function() {\n var _join = Array.prototype.join,\n commandLengths = {\n m: 2,\n l: 2,\n h: 1,\n v: 1,\n c: 6,\n s: 4,\n q: 4,\n t: 2,\n a: 7\n },\n repeatedCommands = {\n m: 'l',\n M: 'L'\n };\n function segmentToBezier(th2, th3, cosTh, sinTh, rx, ry, cx1, cy1, mT, fromX, fromY) {\n var costh2 = fabric.util.cos(th2),\n sinth2 = fabric.util.sin(th2),\n costh3 = fabric.util.cos(th3),\n sinth3 = fabric.util.sin(th3),\n toX = cosTh * rx * costh3 - sinTh * ry * sinth3 + cx1,\n toY = sinTh * rx * costh3 + cosTh * ry * sinth3 + cy1,\n cp1X = fromX + mT * ( -cosTh * rx * sinth2 - sinTh * ry * costh2),\n cp1Y = fromY + mT * ( -sinTh * rx * sinth2 + cosTh * ry * costh2),\n cp2X = toX + mT * ( cosTh * rx * sinth3 + sinTh * ry * costh3),\n cp2Y = toY + mT * ( sinTh * rx * sinth3 - cosTh * ry * costh3);\n\n return ['C',\n cp1X, cp1Y,\n cp2X, cp2Y,\n toX, toY\n ];\n }\n\n /* Adapted from http://dxr.mozilla.org/mozilla-central/source/content/svg/content/src/nsSVGPathDataParser.cpp\n * by Andrea Bogazzi code is under MPL. if you don't have a copy of the license you can take it here\n * http://mozilla.org/MPL/2.0/\n */\n function arcToSegments(toX, toY, rx, ry, large, sweep, rotateX) {\n var PI = Math.PI, th = rotateX * PI / 180,\n sinTh = fabric.util.sin(th),\n cosTh = fabric.util.cos(th),\n fromX = 0, fromY = 0;\n\n rx = Math.abs(rx);\n ry = Math.abs(ry);\n\n var px = -cosTh * toX * 0.5 - sinTh * toY * 0.5,\n py = -cosTh * toY * 0.5 + sinTh * toX * 0.5,\n rx2 = rx * rx, ry2 = ry * ry, py2 = py * py, px2 = px * px,\n pl = rx2 * ry2 - rx2 * py2 - ry2 * px2,\n root = 0;\n\n if (pl < 0) {\n var s = Math.sqrt(1 - pl / (rx2 * ry2));\n rx *= s;\n ry *= s;\n }\n else {\n root = (large === sweep ? -1.0 : 1.0) *\n Math.sqrt( pl / (rx2 * py2 + ry2 * px2));\n }\n\n var cx = root * rx * py / ry,\n cy = -root * ry * px / rx,\n cx1 = cosTh * cx - sinTh * cy + toX * 0.5,\n cy1 = sinTh * cx + cosTh * cy + toY * 0.5,\n mTheta = calcVectorAngle(1, 0, (px - cx) / rx, (py - cy) / ry),\n dtheta = calcVectorAngle((px - cx) / rx, (py - cy) / ry, (-px - cx) / rx, (-py - cy) / ry);\n\n if (sweep === 0 && dtheta > 0) {\n dtheta -= 2 * PI;\n }\n else if (sweep === 1 && dtheta < 0) {\n dtheta += 2 * PI;\n }\n\n // Convert into cubic bezier segments <= 90deg\n var segments = Math.ceil(Math.abs(dtheta / PI * 2)),\n result = [], mDelta = dtheta / segments,\n mT = 8 / 3 * Math.sin(mDelta / 4) * Math.sin(mDelta / 4) / Math.sin(mDelta / 2),\n th3 = mTheta + mDelta;\n\n for (var i = 0; i < segments; i++) {\n result[i] = segmentToBezier(mTheta, th3, cosTh, sinTh, rx, ry, cx1, cy1, mT, fromX, fromY);\n fromX = result[i][5];\n fromY = result[i][6];\n mTheta = th3;\n th3 += mDelta;\n }\n return result;\n }\n\n /*\n * Private\n */\n function calcVectorAngle(ux, uy, vx, vy) {\n var ta = Math.atan2(uy, ux),\n tb = Math.atan2(vy, vx);\n if (tb >= ta) {\n return tb - ta;\n }\n else {\n return 2 * Math.PI - (ta - tb);\n }\n }\n\n /**\n * Calculate bounding box of a beziercurve\n * @param {Number} x0 starting point\n * @param {Number} y0\n * @param {Number} x1 first control point\n * @param {Number} y1\n * @param {Number} x2 secondo control point\n * @param {Number} y2\n * @param {Number} x3 end of bezier\n * @param {Number} y3\n */\n // taken from http://jsbin.com/ivomiq/56/edit no credits available for that.\n // TODO: can we normalize this with the starting points set at 0 and then translated the bbox?\n function getBoundsOfCurve(x0, y0, x1, y1, x2, y2, x3, y3) {\n var argsString;\n if (fabric.cachesBoundsOfCurve) {\n argsString = _join.call(arguments);\n if (fabric.boundsOfCurveCache[argsString]) {\n return fabric.boundsOfCurveCache[argsString];\n }\n }\n\n var sqrt = Math.sqrt,\n min = Math.min, max = Math.max,\n abs = Math.abs, tvalues = [],\n bounds = [[], []],\n a, b, c, t, t1, t2, b2ac, sqrtb2ac;\n\n b = 6 * x0 - 12 * x1 + 6 * x2;\n a = -3 * x0 + 9 * x1 - 9 * x2 + 3 * x3;\n c = 3 * x1 - 3 * x0;\n\n for (var i = 0; i < 2; ++i) {\n if (i > 0) {\n b = 6 * y0 - 12 * y1 + 6 * y2;\n a = -3 * y0 + 9 * y1 - 9 * y2 + 3 * y3;\n c = 3 * y1 - 3 * y0;\n }\n\n if (abs(a) < 1e-12) {\n if (abs(b) < 1e-12) {\n continue;\n }\n t = -c / b;\n if (0 < t && t < 1) {\n tvalues.push(t);\n }\n continue;\n }\n b2ac = b * b - 4 * c * a;\n if (b2ac < 0) {\n continue;\n }\n sqrtb2ac = sqrt(b2ac);\n t1 = (-b + sqrtb2ac) / (2 * a);\n if (0 < t1 && t1 < 1) {\n tvalues.push(t1);\n }\n t2 = (-b - sqrtb2ac) / (2 * a);\n if (0 < t2 && t2 < 1) {\n tvalues.push(t2);\n }\n }\n\n var x, y, j = tvalues.length, jlen = j, mt;\n while (j--) {\n t = tvalues[j];\n mt = 1 - t;\n x = (mt * mt * mt * x0) + (3 * mt * mt * t * x1) + (3 * mt * t * t * x2) + (t * t * t * x3);\n bounds[0][j] = x;\n\n y = (mt * mt * mt * y0) + (3 * mt * mt * t * y1) + (3 * mt * t * t * y2) + (t * t * t * y3);\n bounds[1][j] = y;\n }\n\n bounds[0][jlen] = x0;\n bounds[1][jlen] = y0;\n bounds[0][jlen + 1] = x3;\n bounds[1][jlen + 1] = y3;\n var result = [\n {\n x: min.apply(null, bounds[0]),\n y: min.apply(null, bounds[1])\n },\n {\n x: max.apply(null, bounds[0]),\n y: max.apply(null, bounds[1])\n }\n ];\n if (fabric.cachesBoundsOfCurve) {\n fabric.boundsOfCurveCache[argsString] = result;\n }\n return result;\n }\n\n /**\n * Converts arc to a bunch of bezier curves\n * @param {Number} fx starting point x\n * @param {Number} fy starting point y\n * @param {Array} coords Arc command\n */\n function fromArcToBeziers(fx, fy, coords) {\n var rx = coords[1],\n ry = coords[2],\n rot = coords[3],\n large = coords[4],\n sweep = coords[5],\n tx = coords[6],\n ty = coords[7],\n segsNorm = arcToSegments(tx - fx, ty - fy, rx, ry, large, sweep, rot);\n\n for (var i = 0, len = segsNorm.length; i < len; i++) {\n segsNorm[i][1] += fx;\n segsNorm[i][2] += fy;\n segsNorm[i][3] += fx;\n segsNorm[i][4] += fy;\n segsNorm[i][5] += fx;\n segsNorm[i][6] += fy;\n }\n return segsNorm;\n };\n\n /**\n * This function take a parsed SVG path and make it simpler for fabricJS logic.\n * simplification consist of: only UPPERCASE absolute commands ( relative converted to absolute )\n * S converted in C, T converted in Q, A converted in C.\n * @param {Array} path the array of commands of a parsed svg path for fabric.Path\n * @return {Array} the simplified array of commands of a parsed svg path for fabric.Path\n */\n function makePathSimpler(path) {\n // x and y represent the last point of the path. the previous command point.\n // we add them to each relative command to make it an absolute comment.\n // we also swap the v V h H with L, because are easier to transform.\n var x = 0, y = 0, len = path.length,\n // x1 and y1 represent the last point of the subpath. the subpath is started with\n // m or M command. When a z or Z command is drawn, x and y need to be resetted to\n // the last x1 and y1.\n x1 = 0, y1 = 0, current, i, converted,\n // previous will host the letter of the previous command, to handle S and T.\n // controlX and controlY will host the previous reflected control point\n destinationPath = [], previous, controlX, controlY;\n for (i = 0; i < len; ++i) {\n converted = false;\n current = path[i].slice(0);\n switch (current[0]) { // first letter\n case 'l': // lineto, relative\n current[0] = 'L';\n current[1] += x;\n current[2] += y;\n // falls through\n case 'L':\n x = current[1];\n y = current[2];\n break;\n case 'h': // horizontal lineto, relative\n current[1] += x;\n // falls through\n case 'H':\n current[0] = 'L';\n current[2] = y;\n x = current[1];\n break;\n case 'v': // vertical lineto, relative\n current[1] += y;\n // falls through\n case 'V':\n current[0] = 'L';\n y = current[1];\n current[1] = x;\n current[2] = y;\n break;\n case 'm': // moveTo, relative\n current[0] = 'M';\n current[1] += x;\n current[2] += y;\n // falls through\n case 'M':\n x = current[1];\n y = current[2];\n x1 = current[1];\n y1 = current[2];\n break;\n case 'c': // bezierCurveTo, relative\n current[0] = 'C';\n current[1] += x;\n current[2] += y;\n current[3] += x;\n current[4] += y;\n current[5] += x;\n current[6] += y;\n // falls through\n case 'C':\n controlX = current[3];\n controlY = current[4];\n x = current[5];\n y = current[6];\n break;\n case 's': // shorthand cubic bezierCurveTo, relative\n current[0] = 'S';\n current[1] += x;\n current[2] += y;\n current[3] += x;\n current[4] += y;\n // falls through\n case 'S':\n // would be sScC but since we are swapping sSc for C, we check just that.\n if (previous === 'C') {\n // calculate reflection of previous control points\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n }\n else {\n // If there is no previous command or if the previous command was not a C, c, S, or s,\n // the control point is coincident with the current point\n controlX = x;\n controlY = y;\n }\n x = current[3];\n y = current[4];\n current[0] = 'C';\n current[5] = current[3];\n current[6] = current[4];\n current[3] = current[1];\n current[4] = current[2];\n current[1] = controlX;\n current[2] = controlY;\n // current[3] and current[4] are NOW the second control point.\n // we keep it for the next reflection.\n controlX = current[3];\n controlY = current[4];\n break;\n case 'q': // quadraticCurveTo, relative\n current[0] = 'Q';\n current[1] += x;\n current[2] += y;\n current[3] += x;\n current[4] += y;\n // falls through\n case 'Q':\n controlX = current[1];\n controlY = current[2];\n x = current[3];\n y = current[4];\n break;\n case 't': // shorthand quadraticCurveTo, relative\n current[0] = 'T';\n current[1] += x;\n current[2] += y;\n // falls through\n case 'T':\n if (previous === 'Q') {\n // calculate reflection of previous control point\n controlX = 2 * x - controlX;\n controlY = 2 * y - controlY;\n }\n else {\n // If there is no previous command or if the previous command was not a Q, q, T or t,\n // assume the control point is coincident with the current point\n controlX = x;\n controlY = y;\n }\n current[0] = 'Q';\n x = current[1];\n y = current[2];\n current[1] = controlX;\n current[2] = controlY;\n current[3] = x;\n current[4] = y;\n break;\n case 'a':\n current[0] = 'A';\n current[6] += x;\n current[7] += y;\n // falls through\n case 'A':\n converted = true;\n destinationPath = destinationPath.concat(fromArcToBeziers(x, y, current));\n x = current[6];\n y = current[7];\n break;\n case 'z':\n case 'Z':\n x = x1;\n y = y1;\n break;\n default:\n }\n if (!converted) {\n destinationPath.push(current);\n }\n previous = current[0];\n }\n return destinationPath;\n };\n\n /**\n * Calc length from point x1,y1 to x2,y2\n * @param {Number} x1 starting point x\n * @param {Number} y1 starting point y\n * @param {Number} x2 starting point x\n * @param {Number} y2 starting point y\n * @return {Number} length of segment\n */\n function calcLineLength(x1, y1, x2, y2) {\n return Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\n }\n\n // functions for the Cubic beizer\n // taken from: https://github.com/konvajs/konva/blob/7.0.5/src/shapes/Path.ts#L350\n function CB1(t) {\n return t * t * t;\n }\n function CB2(t) {\n return 3 * t * t * (1 - t);\n }\n function CB3(t) {\n return 3 * t * (1 - t) * (1 - t);\n }\n function CB4(t) {\n return (1 - t) * (1 - t) * (1 - t);\n }\n\n function getPointOnCubicBezierIterator(p1x, p1y, p2x, p2y, p3x, p3y, p4x, p4y) {\n return function(pct) {\n var c1 = CB1(pct), c2 = CB2(pct), c3 = CB3(pct), c4 = CB4(pct);\n return {\n x: p4x * c1 + p3x * c2 + p2x * c3 + p1x * c4,\n y: p4y * c1 + p3y * c2 + p2y * c3 + p1y * c4\n };\n };\n }\n\n function getTangentCubicIterator(p1x, p1y, p2x, p2y, p3x, p3y, p4x, p4y) {\n return function (pct) {\n var invT = 1 - pct,\n tangentX = (3 * invT * invT * (p2x - p1x)) + (6 * invT * pct * (p3x - p2x)) +\n (3 * pct * pct * (p4x - p3x)),\n tangentY = (3 * invT * invT * (p2y - p1y)) + (6 * invT * pct * (p3y - p2y)) +\n (3 * pct * pct * (p4y - p3y));\n return Math.atan2(tangentY, tangentX);\n };\n }\n\n function QB1(t) {\n return t * t;\n }\n\n function QB2(t) {\n return 2 * t * (1 - t);\n }\n\n function QB3(t) {\n return (1 - t) * (1 - t);\n }\n\n function getPointOnQuadraticBezierIterator(p1x, p1y, p2x, p2y, p3x, p3y) {\n return function(pct) {\n var c1 = QB1(pct), c2 = QB2(pct), c3 = QB3(pct);\n return {\n x: p3x * c1 + p2x * c2 + p1x * c3,\n y: p3y * c1 + p2y * c2 + p1y * c3\n };\n };\n }\n\n function getTangentQuadraticIterator(p1x, p1y, p2x, p2y, p3x, p3y) {\n return function (pct) {\n var invT = 1 - pct,\n tangentX = (2 * invT * (p2x - p1x)) + (2 * pct * (p3x - p2x)),\n tangentY = (2 * invT * (p2y - p1y)) + (2 * pct * (p3y - p2y));\n return Math.atan2(tangentY, tangentX);\n };\n }\n\n\n // this will run over a path segment ( a cubic or quadratic segment) and approximate it\n // with 100 segemnts. This will good enough to calculate the length of the curve\n function pathIterator(iterator, x1, y1) {\n var tempP = { x: x1, y: y1 }, p, tmpLen = 0, perc;\n for (perc = 1; perc <= 100; perc += 1) {\n p = iterator(perc / 100);\n tmpLen += calcLineLength(tempP.x, tempP.y, p.x, p.y);\n tempP = p;\n }\n return tmpLen;\n }\n\n /**\n * Given a pathInfo, and a distance in pixels, find the percentage from 0 to 1\n * that correspond to that pixels run over the path.\n * The percentage will be then used to find the correct point on the canvas for the path.\n * @param {Array} segInfo fabricJS collection of information on a parsed path\n * @param {Number} distance from starting point, in pixels.\n * @return {Object} info object with x and y ( the point on canvas ) and angle, the tangent on that point;\n */\n function findPercentageForDistance(segInfo, distance) {\n var perc = 0, tmpLen = 0, iterator = segInfo.iterator, tempP = { x: segInfo.x, y: segInfo.y },\n p, nextLen, nextStep = 0.01, angleFinder = segInfo.angleFinder, lastPerc;\n // nextStep > 0.0001 covers 0.00015625 that 1/64th of 1/100\n // the path\n while (tmpLen < distance && perc <= 1 && nextStep > 0.0001) {\n p = iterator(perc);\n lastPerc = perc;\n nextLen = calcLineLength(tempP.x, tempP.y, p.x, p.y);\n // compare tmpLen each cycle with distance, decide next perc to test.\n if ((nextLen + tmpLen) > distance) {\n // we discard this step and we make smaller steps.\n nextStep /= 2;\n perc -= nextStep;\n }\n else {\n tempP = p;\n perc += nextStep;\n tmpLen += nextLen;\n }\n }\n p.angle = angleFinder(lastPerc);\n return p;\n }\n\n /**\n * Run over a parsed and simplifed path and extrac some informations.\n * informations are length of each command and starting point\n * @param {Array} path fabricJS parsed path commands\n * @return {Array} path commands informations\n */\n function getPathSegmentsInfo(path) {\n var totalLength = 0, len = path.length, current,\n //x2 and y2 are the coords of segment start\n //x1 and y1 are the coords of the current point\n x1 = 0, y1 = 0, x2 = 0, y2 = 0, info = [], iterator, tempInfo, angleFinder;\n for (var i = 0; i < len; i++) {\n current = path[i];\n tempInfo = {\n x: x1,\n y: y1,\n command: current[0],\n };\n switch (current[0]) { //first letter\n case 'M':\n tempInfo.length = 0;\n x2 = x1 = current[1];\n y2 = y1 = current[2];\n break;\n case 'L':\n tempInfo.length = calcLineLength(x1, y1, current[1], current[2]);\n x1 = current[1];\n y1 = current[2];\n break;\n case 'C':\n iterator = getPointOnCubicBezierIterator(\n x1,\n y1,\n current[1],\n current[2],\n current[3],\n current[4],\n current[5],\n current[6]\n );\n angleFinder = getTangentCubicIterator(\n x1,\n y1,\n current[1],\n current[2],\n current[3],\n current[4],\n current[5],\n current[6]\n );\n tempInfo.iterator = iterator;\n tempInfo.angleFinder = angleFinder;\n tempInfo.length = pathIterator(iterator, x1, y1);\n x1 = current[5];\n y1 = current[6];\n break;\n case 'Q':\n iterator = getPointOnQuadraticBezierIterator(\n x1,\n y1,\n current[1],\n current[2],\n current[3],\n current[4]\n );\n angleFinder = getTangentQuadraticIterator(\n x1,\n y1,\n current[1],\n current[2],\n current[3],\n current[4]\n );\n tempInfo.iterator = iterator;\n tempInfo.angleFinder = angleFinder;\n tempInfo.length = pathIterator(iterator, x1, y1);\n x1 = current[3];\n y1 = current[4];\n break;\n case 'Z':\n case 'z':\n // we add those in order to ease calculations later\n tempInfo.destX = x2;\n tempInfo.destY = y2;\n tempInfo.length = calcLineLength(x1, y1, x2, y2);\n x1 = x2;\n y1 = y2;\n break;\n }\n totalLength += tempInfo.length;\n info.push(tempInfo);\n }\n info.push({ length: totalLength, x: x1, y: y1 });\n return info;\n }\n\n function getPointOnPath(path, distance, infos) {\n if (!infos) {\n infos = getPathSegmentsInfo(path);\n }\n var i = 0;\n while ((distance - infos[i].length > 0) && i < (infos.length - 2)) {\n distance -= infos[i].length;\n i++;\n }\n // var distance = infos[infos.length - 1] * perc;\n var segInfo = infos[i], segPercent = distance / segInfo.length,\n command = segInfo.command, segment = path[i], info;\n\n switch (command) {\n case 'M':\n return { x: segInfo.x, y: segInfo.y, angle: 0 };\n case 'Z':\n case 'z':\n info = new fabric.Point(segInfo.x, segInfo.y).lerp(\n new fabric.Point(segInfo.destX, segInfo.destY),\n segPercent\n );\n info.angle = Math.atan2(segInfo.destY - segInfo.y, segInfo.destX - segInfo.x);\n return info;\n case 'L':\n info = new fabric.Point(segInfo.x, segInfo.y).lerp(\n new fabric.Point(segment[1], segment[2]),\n segPercent\n );\n info.angle = Math.atan2(segment[2] - segInfo.y, segment[1] - segInfo.x);\n return info;\n case 'C':\n return findPercentageForDistance(segInfo, distance);\n case 'Q':\n return findPercentageForDistance(segInfo, distance);\n }\n }\n\n /**\n *\n * @param {string} pathString\n * @return {(string|number)[][]} An array of SVG path commands\n * @example Usage\n * parsePath('M 3 4 Q 3 5 2 1 4 0 Q 9 12 2 1 4 0') === [\n * ['M', 3, 4],\n * ['Q', 3, 5, 2, 1, 4, 0],\n * ['Q', 9, 12, 2, 1, 4, 0],\n * ];\n *\n */\n function parsePath(pathString) {\n var result = [],\n coords = [],\n currentPath,\n parsed,\n re = fabric.rePathCommand,\n rNumber = '[-+]?(?:\\\\d*\\\\.\\\\d+|\\\\d+\\\\.?)(?:[eE][-+]?\\\\d+)?\\\\s*',\n rNumberCommaWsp = '(' + rNumber + ')' + fabric.commaWsp,\n rFlagCommaWsp = '([01])' + fabric.commaWsp + '?',\n rArcSeq = rNumberCommaWsp + '?' + rNumberCommaWsp + '?' + rNumberCommaWsp + rFlagCommaWsp + rFlagCommaWsp +\n rNumberCommaWsp + '?(' + rNumber + ')',\n regArcArgumentSequence = new RegExp(rArcSeq, 'g'),\n match,\n coordsStr,\n // one of commands (m,M,l,L,q,Q,c,C,etc.) followed by non-command characters (i.e. command values)\n path;\n if (!pathString || !pathString.match) {\n return result;\n }\n path = pathString.match(/[mzlhvcsqta][^mzlhvcsqta]*/gi);\n\n for (var i = 0, coordsParsed, len = path.length; i < len; i++) {\n currentPath = path[i];\n\n coordsStr = currentPath.slice(1).trim();\n coords.length = 0;\n\n var command = currentPath.charAt(0);\n coordsParsed = [command];\n\n if (command.toLowerCase() === 'a') {\n // arcs have special flags that apparently don't require spaces so handle special\n for (var args; (args = regArcArgumentSequence.exec(coordsStr));) {\n for (var j = 1; j < args.length; j++) {\n coords.push(args[j]);\n }\n }\n }\n else {\n while ((match = re.exec(coordsStr))) {\n coords.push(match[0]);\n }\n }\n\n for (var j = 0, jlen = coords.length; j < jlen; j++) {\n parsed = parseFloat(coords[j]);\n if (!isNaN(parsed)) {\n coordsParsed.push(parsed);\n }\n }\n\n var commandLength = commandLengths[command.toLowerCase()],\n repeatedCommand = repeatedCommands[command] || command;\n\n if (coordsParsed.length - 1 > commandLength) {\n for (var k = 1, klen = coordsParsed.length; k < klen; k += commandLength) {\n result.push([command].concat(coordsParsed.slice(k, k + commandLength)));\n command = repeatedCommand;\n }\n }\n else {\n result.push(coordsParsed);\n }\n }\n\n return result;\n };\n\n /**\n *\n * Converts points to a smooth SVG path\n * @param {{ x: number,y: number }[]} points Array of points\n * @param {number} [correction] Apply a correction to the path (usually we use `width / 1000`). If value is undefined 0 is used as the correction value.\n * @return {(string|number)[][]} An array of SVG path commands\n */\n function getSmoothPathFromPoints(points, correction) {\n var path = [], i,\n p1 = new fabric.Point(points[0].x, points[0].y),\n p2 = new fabric.Point(points[1].x, points[1].y),\n len = points.length, multSignX = 1, multSignY = 0, manyPoints = len > 2;\n correction = correction || 0;\n\n if (manyPoints) {\n multSignX = points[2].x < p2.x ? -1 : points[2].x === p2.x ? 0 : 1;\n multSignY = points[2].y < p2.y ? -1 : points[2].y === p2.y ? 0 : 1;\n }\n path.push(['M', p1.x - multSignX * correction, p1.y - multSignY * correction]);\n for (i = 1; i < len; i++) {\n if (!p1.eq(p2)) {\n var midPoint = p1.midPointFrom(p2);\n // p1 is our bezier control point\n // midpoint is our endpoint\n // start point is p(i-1) value.\n path.push(['Q', p1.x, p1.y, midPoint.x, midPoint.y]);\n }\n p1 = points[i];\n if ((i + 1) < points.length) {\n p2 = points[i + 1];\n }\n }\n if (manyPoints) {\n multSignX = p1.x > points[i - 2].x ? 1 : p1.x === points[i - 2].x ? 0 : -1;\n multSignY = p1.y > points[i - 2].y ? 1 : p1.y === points[i - 2].y ? 0 : -1;\n }\n path.push(['L', p1.x + multSignX * correction, p1.y + multSignY * correction]);\n return path;\n }\n /**\n * Transform a path by transforming each segment.\n * it has to be a simplified path or it won't work.\n * WARNING: this depends from pathOffset for correct operation\n * @param {Array} path fabricJS parsed and simplified path commands\n * @param {Array} transform matrix that represent the transformation\n * @param {Object} [pathOffset] the fabric.Path pathOffset\n * @param {Number} pathOffset.x\n * @param {Number} pathOffset.y\n * @returns {Array} the transformed path\n */\n function transformPath(path, transform, pathOffset) {\n if (pathOffset) {\n transform = fabric.util.multiplyTransformMatrices(\n transform,\n [1, 0, 0, 1, -pathOffset.x, -pathOffset.y]\n );\n }\n return path.map(function(pathSegment) {\n var newSegment = pathSegment.slice(0), point = {};\n for (var i = 1; i < pathSegment.length - 1; i += 2) {\n point.x = pathSegment[i];\n point.y = pathSegment[i + 1];\n point = fabric.util.transformPoint(point, transform);\n newSegment[i] = point.x;\n newSegment[i + 1] = point.y;\n }\n return newSegment;\n });\n }\n\n /**\n * Calculate bounding box of a elliptic-arc\n * @deprecated\n * @param {Number} fx start point of arc\n * @param {Number} fy\n * @param {Number} rx horizontal radius\n * @param {Number} ry vertical radius\n * @param {Number} rot angle of horizontal axis\n * @param {Number} large 1 or 0, whatever the arc is the big or the small on the 2 points\n * @param {Number} sweep 1 or 0, 1 clockwise or counterclockwise direction\n * @param {Number} tx end point of arc\n * @param {Number} ty\n */\n function getBoundsOfArc(fx, fy, rx, ry, rot, large, sweep, tx, ty) {\n\n var fromX = 0, fromY = 0, bound, bounds = [],\n segs = arcToSegments(tx - fx, ty - fy, rx, ry, large, sweep, rot);\n\n for (var i = 0, len = segs.length; i < len; i++) {\n bound = getBoundsOfCurve(fromX, fromY, segs[i][1], segs[i][2], segs[i][3], segs[i][4], segs[i][5], segs[i][6]);\n bounds.push({ x: bound[0].x + fx, y: bound[0].y + fy });\n bounds.push({ x: bound[1].x + fx, y: bound[1].y + fy });\n fromX = segs[i][5];\n fromY = segs[i][6];\n }\n return bounds;\n };\n\n /**\n * Draws arc\n * @deprecated\n * @param {CanvasRenderingContext2D} ctx\n * @param {Number} fx\n * @param {Number} fy\n * @param {Array} coords coords of the arc, without the front 'A/a'\n */\n function drawArc(ctx, fx, fy, coords) {\n coords = coords.slice(0).unshift('X'); // command A or a does not matter\n var beziers = fromArcToBeziers(fx, fy, coords);\n beziers.forEach(function(bezier) {\n ctx.bezierCurveTo.apply(ctx, bezier.slice(1));\n });\n };\n\n /**\n * Join path commands to go back to svg format\n * @param {Array} pathData fabricJS parsed path commands\n * @return {String} joined path 'M 0 0 L 20 30'\n */\n fabric.util.joinPath = function(pathData) {\n return pathData.map(function (segment) { return segment.join(' '); }).join(' ');\n };\n fabric.util.parsePath = parsePath;\n fabric.util.makePathSimpler = makePathSimpler;\n fabric.util.getSmoothPathFromPoints = getSmoothPathFromPoints;\n fabric.util.getPathSegmentsInfo = getPathSegmentsInfo;\n fabric.util.getBoundsOfCurve = getBoundsOfCurve;\n fabric.util.getPointOnPath = getPointOnPath;\n fabric.util.transformPath = transformPath;\n /**\n * Typo of `fromArcToBeziers` kept for not breaking the api once corrected.\n * Will be removed in fabric 5.0\n * @deprecated\n */\n fabric.util.fromArcToBeizers = fromArcToBeziers;\n // kept because we do not want to make breaking changes.\n // but useless and deprecated.\n fabric.util.getBoundsOfArc = getBoundsOfArc;\n fabric.util.drawArc = drawArc;\n})();\n\n\n(function() {\n\n var slice = Array.prototype.slice;\n\n /**\n * Invokes method on all items in a given array\n * @memberOf fabric.util.array\n * @param {Array} array Array to iterate over\n * @param {String} method Name of a method to invoke\n * @return {Array}\n */\n function invoke(array, method) {\n var args = slice.call(arguments, 2), result = [];\n for (var i = 0, len = array.length; i < len; i++) {\n result[i] = args.length ? array[i][method].apply(array[i], args) : array[i][method].call(array[i]);\n }\n return result;\n }\n\n /**\n * Finds maximum value in array (not necessarily \"first\" one)\n * @memberOf fabric.util.array\n * @param {Array} array Array to iterate over\n * @param {String} byProperty\n * @return {*}\n */\n function max(array, byProperty) {\n return find(array, byProperty, function(value1, value2) {\n return value1 >= value2;\n });\n }\n\n /**\n * Finds minimum value in array (not necessarily \"first\" one)\n * @memberOf fabric.util.array\n * @param {Array} array Array to iterate over\n * @param {String} byProperty\n * @return {*}\n */\n function min(array, byProperty) {\n return find(array, byProperty, function(value1, value2) {\n return value1 < value2;\n });\n }\n\n /**\n * @private\n */\n function fill(array, value) {\n var k = array.length;\n while (k--) {\n array[k] = value;\n }\n return array;\n }\n\n /**\n * @private\n */\n function find(array, byProperty, condition) {\n if (!array || array.length === 0) {\n return;\n }\n\n var i = array.length - 1,\n result = byProperty ? array[i][byProperty] : array[i];\n if (byProperty) {\n while (i--) {\n if (condition(array[i][byProperty], result)) {\n result = array[i][byProperty];\n }\n }\n }\n else {\n while (i--) {\n if (condition(array[i], result)) {\n result = array[i];\n }\n }\n }\n return result;\n }\n\n /**\n * @namespace fabric.util.array\n */\n fabric.util.array = {\n fill: fill,\n invoke: invoke,\n min: min,\n max: max\n };\n\n})();\n\n\n(function() {\n /**\n * Copies all enumerable properties of one js object to another\n * this does not and cannot compete with generic utils.\n * Does not clone or extend fabric.Object subclasses.\n * This is mostly for internal use and has extra handling for fabricJS objects\n * it skips the canvas and group properties in deep cloning.\n * @memberOf fabric.util.object\n * @param {Object} destination Where to copy to\n * @param {Object} source Where to copy from\n * @param {Boolean} [deep] Whether to extend nested objects\n * @return {Object}\n */\n\n function extend(destination, source, deep) {\n // JScript DontEnum bug is not taken care of\n // the deep clone is for internal use, is not meant to avoid\n // javascript traps or cloning html element or self referenced objects.\n if (deep) {\n if (!fabric.isLikelyNode && source instanceof Element) {\n // avoid cloning deep images, canvases,\n destination = source;\n }\n else if (source instanceof Array) {\n destination = [];\n for (var i = 0, len = source.length; i < len; i++) {\n destination[i] = extend({ }, source[i], deep);\n }\n }\n else if (source && typeof source === 'object') {\n for (var property in source) {\n if (property === 'canvas' || property === 'group') {\n // we do not want to clone this props at all.\n // we want to keep the keys in the copy\n destination[property] = null;\n }\n else if (source.hasOwnProperty(property)) {\n destination[property] = extend({ }, source[property], deep);\n }\n }\n }\n else {\n // this sounds odd for an extend but is ok for recursive use\n destination = source;\n }\n }\n else {\n for (var property in source) {\n destination[property] = source[property];\n }\n }\n return destination;\n }\n\n /**\n * Creates an empty object and copies all enumerable properties of another object to it\n * This method is mostly for internal use, and not intended for duplicating shapes in canvas. \n * @memberOf fabric.util.object\n * @param {Object} object Object to clone\n * @param {Boolean} [deep] Whether to clone nested objects\n * @return {Object}\n */\n\n //TODO: this function return an empty object if you try to clone null\n function clone(object, deep) {\n return extend({ }, object, deep);\n }\n\n /** @namespace fabric.util.object */\n fabric.util.object = {\n extend: extend,\n clone: clone\n };\n fabric.util.object.extend(fabric.util, fabric.Observable);\n})();\n\n\n(function() {\n\n /**\n * Camelizes a string\n * @memberOf fabric.util.string\n * @param {String} string String to camelize\n * @return {String} Camelized version of a string\n */\n function camelize(string) {\n return string.replace(/-+(.)?/g, function(match, character) {\n return character ? character.toUpperCase() : '';\n });\n }\n\n /**\n * Capitalizes a string\n * @memberOf fabric.util.string\n * @param {String} string String to capitalize\n * @param {Boolean} [firstLetterOnly] If true only first letter is capitalized\n * and other letters stay untouched, if false first letter is capitalized\n * and other letters are converted to lowercase.\n * @return {String} Capitalized version of a string\n */\n function capitalize(string, firstLetterOnly) {\n return string.charAt(0).toUpperCase() +\n (firstLetterOnly ? string.slice(1) : string.slice(1).toLowerCase());\n }\n\n /**\n * Escapes XML in a string\n * @memberOf fabric.util.string\n * @param {String} string String to escape\n * @return {String} Escaped version of a string\n */\n function escapeXml(string) {\n return string.replace(/&/g, '&')\n .replace(/\"/g, '"')\n .replace(/'/g, ''')\n .replace(//g, '>');\n }\n\n /**\n * Divide a string in the user perceived single units\n * @memberOf fabric.util.string\n * @param {String} textstring String to escape\n * @return {Array} array containing the graphemes\n */\n function graphemeSplit(textstring) {\n var i = 0, chr, graphemes = [];\n for (i = 0, chr; i < textstring.length; i++) {\n if ((chr = getWholeChar(textstring, i)) === false) {\n continue;\n }\n graphemes.push(chr);\n }\n return graphemes;\n }\n\n // taken from mdn in the charAt doc page.\n function getWholeChar(str, i) {\n var code = str.charCodeAt(i);\n\n if (isNaN(code)) {\n return ''; // Position not found\n }\n if (code < 0xD800 || code > 0xDFFF) {\n return str.charAt(i);\n }\n\n // High surrogate (could change last hex to 0xDB7F to treat high private\n // surrogates as single characters)\n if (0xD800 <= code && code <= 0xDBFF) {\n if (str.length <= (i + 1)) {\n throw 'High surrogate without following low surrogate';\n }\n var next = str.charCodeAt(i + 1);\n if (0xDC00 > next || next > 0xDFFF) {\n throw 'High surrogate without following low surrogate';\n }\n return str.charAt(i) + str.charAt(i + 1);\n }\n // Low surrogate (0xDC00 <= code && code <= 0xDFFF)\n if (i === 0) {\n throw 'Low surrogate without preceding high surrogate';\n }\n var prev = str.charCodeAt(i - 1);\n\n // (could change last hex to 0xDB7F to treat high private\n // surrogates as single characters)\n if (0xD800 > prev || prev > 0xDBFF) {\n throw 'Low surrogate without preceding high surrogate';\n }\n // We can pass over low surrogates now as the second component\n // in a pair which we have already processed\n return false;\n }\n\n\n /**\n * String utilities\n * @namespace fabric.util.string\n */\n fabric.util.string = {\n camelize: camelize,\n capitalize: capitalize,\n escapeXml: escapeXml,\n graphemeSplit: graphemeSplit\n };\n})();\n\n\n(function() {\n\n var slice = Array.prototype.slice, emptyFunction = function() { },\n\n IS_DONTENUM_BUGGY = (function() {\n for (var p in { toString: 1 }) {\n if (p === 'toString') {\n return false;\n }\n }\n return true;\n })(),\n\n /** @ignore */\n addMethods = function(klass, source, parent) {\n for (var property in source) {\n\n if (property in klass.prototype &&\n typeof klass.prototype[property] === 'function' &&\n (source[property] + '').indexOf('callSuper') > -1) {\n\n klass.prototype[property] = (function(property) {\n return function() {\n\n var superclass = this.constructor.superclass;\n this.constructor.superclass = parent;\n var returnValue = source[property].apply(this, arguments);\n this.constructor.superclass = superclass;\n\n if (property !== 'initialize') {\n return returnValue;\n }\n };\n })(property);\n }\n else {\n klass.prototype[property] = source[property];\n }\n\n if (IS_DONTENUM_BUGGY) {\n if (source.toString !== Object.prototype.toString) {\n klass.prototype.toString = source.toString;\n }\n if (source.valueOf !== Object.prototype.valueOf) {\n klass.prototype.valueOf = source.valueOf;\n }\n }\n }\n };\n\n function Subclass() { }\n\n function callSuper(methodName) {\n var parentMethod = null,\n _this = this;\n\n // climb prototype chain to find method not equal to callee's method\n while (_this.constructor.superclass) {\n var superClassMethod = _this.constructor.superclass.prototype[methodName];\n if (_this[methodName] !== superClassMethod) {\n parentMethod = superClassMethod;\n break;\n }\n // eslint-disable-next-line\n _this = _this.constructor.superclass.prototype;\n }\n\n if (!parentMethod) {\n return console.log('tried to callSuper ' + methodName + ', method not found in prototype chain', this);\n }\n\n return (arguments.length > 1)\n ? parentMethod.apply(this, slice.call(arguments, 1))\n : parentMethod.call(this);\n }\n\n /**\n * Helper for creation of \"classes\".\n * @memberOf fabric.util\n * @param {Function} [parent] optional \"Class\" to inherit from\n * @param {Object} [properties] Properties shared by all instances of this class\n * (be careful modifying objects defined here as this would affect all instances)\n */\n function createClass() {\n var parent = null,\n properties = slice.call(arguments, 0);\n\n if (typeof properties[0] === 'function') {\n parent = properties.shift();\n }\n function klass() {\n this.initialize.apply(this, arguments);\n }\n\n klass.superclass = parent;\n klass.subclasses = [];\n\n if (parent) {\n Subclass.prototype = parent.prototype;\n klass.prototype = new Subclass();\n parent.subclasses.push(klass);\n }\n for (var i = 0, length = properties.length; i < length; i++) {\n addMethods(klass, properties[i], parent);\n }\n if (!klass.prototype.initialize) {\n klass.prototype.initialize = emptyFunction;\n }\n klass.prototype.constructor = klass;\n klass.prototype.callSuper = callSuper;\n return klass;\n }\n\n fabric.util.createClass = createClass;\n})();\n\n\n(function () {\n // since ie11 can use addEventListener but they do not support options, i need to check\n var couldUseAttachEvent = !!fabric.document.createElement('div').attachEvent,\n touchEvents = ['touchstart', 'touchmove', 'touchend'];\n /**\n * Adds an event listener to an element\n * @function\n * @memberOf fabric.util\n * @param {HTMLElement} element\n * @param {String} eventName\n * @param {Function} handler\n */\n fabric.util.addListener = function(element, eventName, handler, options) {\n element && element.addEventListener(eventName, handler, couldUseAttachEvent ? false : options);\n };\n\n /**\n * Removes an event listener from an element\n * @function\n * @memberOf fabric.util\n * @param {HTMLElement} element\n * @param {String} eventName\n * @param {Function} handler\n */\n fabric.util.removeListener = function(element, eventName, handler, options) {\n element && element.removeEventListener(eventName, handler, couldUseAttachEvent ? false : options);\n };\n\n function getTouchInfo(event) {\n var touchProp = event.changedTouches;\n if (touchProp && touchProp[0]) {\n return touchProp[0];\n }\n return event;\n }\n\n fabric.util.getPointer = function(event) {\n var element = event.target,\n scroll = fabric.util.getScrollLeftTop(element),\n _evt = getTouchInfo(event);\n return {\n x: _evt.clientX + scroll.left,\n y: _evt.clientY + scroll.top\n };\n };\n\n fabric.util.isTouchEvent = function(event) {\n return touchEvents.indexOf(event.type) > -1 || event.pointerType === 'touch';\n };\n})();\n\n\n(function () {\n\n /**\n * Cross-browser wrapper for setting element's style\n * @memberOf fabric.util\n * @param {HTMLElement} element\n * @param {Object} styles\n * @return {HTMLElement} Element that was passed as a first argument\n */\n function setStyle(element, styles) {\n var elementStyle = element.style;\n if (!elementStyle) {\n return element;\n }\n if (typeof styles === 'string') {\n element.style.cssText += ';' + styles;\n return styles.indexOf('opacity') > -1\n ? setOpacity(element, styles.match(/opacity:\\s*(\\d?\\.?\\d*)/)[1])\n : element;\n }\n for (var property in styles) {\n if (property === 'opacity') {\n setOpacity(element, styles[property]);\n }\n else {\n var normalizedProperty = (property === 'float' || property === 'cssFloat')\n ? (typeof elementStyle.styleFloat === 'undefined' ? 'cssFloat' : 'styleFloat')\n : property;\n elementStyle[normalizedProperty] = styles[property];\n }\n }\n return element;\n }\n\n var parseEl = fabric.document.createElement('div'),\n supportsOpacity = typeof parseEl.style.opacity === 'string',\n supportsFilters = typeof parseEl.style.filter === 'string',\n reOpacity = /alpha\\s*\\(\\s*opacity\\s*=\\s*([^\\)]+)\\)/,\n\n /** @ignore */\n setOpacity = function (element) { return element; };\n\n if (supportsOpacity) {\n /** @ignore */\n setOpacity = function(element, value) {\n element.style.opacity = value;\n return element;\n };\n }\n else if (supportsFilters) {\n /** @ignore */\n setOpacity = function(element, value) {\n var es = element.style;\n if (element.currentStyle && !element.currentStyle.hasLayout) {\n es.zoom = 1;\n }\n if (reOpacity.test(es.filter)) {\n value = value >= 0.9999 ? '' : ('alpha(opacity=' + (value * 100) + ')');\n es.filter = es.filter.replace(reOpacity, value);\n }\n else {\n es.filter += ' alpha(opacity=' + (value * 100) + ')';\n }\n return element;\n };\n }\n\n fabric.util.setStyle = setStyle;\n\n})();\n\n\n(function() {\n\n var _slice = Array.prototype.slice;\n\n /**\n * Takes id and returns an element with that id (if one exists in a document)\n * @memberOf fabric.util\n * @param {String|HTMLElement} id\n * @return {HTMLElement|null}\n */\n function getById(id) {\n return typeof id === 'string' ? fabric.document.getElementById(id) : id;\n }\n\n var sliceCanConvertNodelists,\n /**\n * Converts an array-like object (e.g. arguments or NodeList) to an array\n * @memberOf fabric.util\n * @param {Object} arrayLike\n * @return {Array}\n */\n toArray = function(arrayLike) {\n return _slice.call(arrayLike, 0);\n };\n\n try {\n sliceCanConvertNodelists = toArray(fabric.document.childNodes) instanceof Array;\n }\n catch (err) { }\n\n if (!sliceCanConvertNodelists) {\n toArray = function(arrayLike) {\n var arr = new Array(arrayLike.length), i = arrayLike.length;\n while (i--) {\n arr[i] = arrayLike[i];\n }\n return arr;\n };\n }\n\n /**\n * Creates specified element with specified attributes\n * @memberOf fabric.util\n * @param {String} tagName Type of an element to create\n * @param {Object} [attributes] Attributes to set on an element\n * @return {HTMLElement} Newly created element\n */\n function makeElement(tagName, attributes) {\n var el = fabric.document.createElement(tagName);\n for (var prop in attributes) {\n if (prop === 'class') {\n el.className = attributes[prop];\n }\n else if (prop === 'for') {\n el.htmlFor = attributes[prop];\n }\n else {\n el.setAttribute(prop, attributes[prop]);\n }\n }\n return el;\n }\n\n /**\n * Adds class to an element\n * @memberOf fabric.util\n * @param {HTMLElement} element Element to add class to\n * @param {String} className Class to add to an element\n */\n function addClass(element, className) {\n if (element && (' ' + element.className + ' ').indexOf(' ' + className + ' ') === -1) {\n element.className += (element.className ? ' ' : '') + className;\n }\n }\n\n /**\n * Wraps element with another element\n * @memberOf fabric.util\n * @param {HTMLElement} element Element to wrap\n * @param {HTMLElement|String} wrapper Element to wrap with\n * @param {Object} [attributes] Attributes to set on a wrapper\n * @return {HTMLElement} wrapper\n */\n function wrapElement(element, wrapper, attributes) {\n if (typeof wrapper === 'string') {\n wrapper = makeElement(wrapper, attributes);\n }\n if (element.parentNode) {\n element.parentNode.replaceChild(wrapper, element);\n }\n wrapper.appendChild(element);\n return wrapper;\n }\n\n /**\n * Returns element scroll offsets\n * @memberOf fabric.util\n * @param {HTMLElement} element Element to operate on\n * @return {Object} Object with left/top values\n */\n function getScrollLeftTop(element) {\n\n var left = 0,\n top = 0,\n docElement = fabric.document.documentElement,\n body = fabric.document.body || {\n scrollLeft: 0, scrollTop: 0\n };\n\n // While loop checks (and then sets element to) .parentNode OR .host\n // to account for ShadowDOM. We still want to traverse up out of ShadowDOM,\n // but the .parentNode of a root ShadowDOM node will always be null, instead\n // it should be accessed through .host. See http://stackoverflow.com/a/24765528/4383938\n while (element && (element.parentNode || element.host)) {\n\n // Set element to element parent, or 'host' in case of ShadowDOM\n element = element.parentNode || element.host;\n\n if (element === fabric.document) {\n left = body.scrollLeft || docElement.scrollLeft || 0;\n top = body.scrollTop || docElement.scrollTop || 0;\n }\n else {\n left += element.scrollLeft || 0;\n top += element.scrollTop || 0;\n }\n\n if (element.nodeType === 1 && element.style.position === 'fixed') {\n break;\n }\n }\n\n return { left: left, top: top };\n }\n\n /**\n * Returns offset for a given element\n * @function\n * @memberOf fabric.util\n * @param {HTMLElement} element Element to get offset for\n * @return {Object} Object with \"left\" and \"top\" properties\n */\n function getElementOffset(element) {\n var docElem,\n doc = element && element.ownerDocument,\n box = { left: 0, top: 0 },\n offset = { left: 0, top: 0 },\n scrollLeftTop,\n offsetAttributes = {\n borderLeftWidth: 'left',\n borderTopWidth: 'top',\n paddingLeft: 'left',\n paddingTop: 'top'\n };\n\n if (!doc) {\n return offset;\n }\n\n for (var attr in offsetAttributes) {\n offset[offsetAttributes[attr]] += parseInt(getElementStyle(element, attr), 10) || 0;\n }\n\n docElem = doc.documentElement;\n if ( typeof element.getBoundingClientRect !== 'undefined' ) {\n box = element.getBoundingClientRect();\n }\n\n scrollLeftTop = getScrollLeftTop(element);\n\n return {\n left: box.left + scrollLeftTop.left - (docElem.clientLeft || 0) + offset.left,\n top: box.top + scrollLeftTop.top - (docElem.clientTop || 0) + offset.top\n };\n }\n\n /**\n * Returns style attribute value of a given element\n * @memberOf fabric.util\n * @param {HTMLElement} element Element to get style attribute for\n * @param {String} attr Style attribute to get for element\n * @return {String} Style attribute value of the given element.\n */\n var getElementStyle;\n if (fabric.document.defaultView && fabric.document.defaultView.getComputedStyle) {\n getElementStyle = function(element, attr) {\n var style = fabric.document.defaultView.getComputedStyle(element, null);\n return style ? style[attr] : undefined;\n };\n }\n else {\n getElementStyle = function(element, attr) {\n var value = element.style[attr];\n if (!value && element.currentStyle) {\n value = element.currentStyle[attr];\n }\n return value;\n };\n }\n\n (function () {\n var style = fabric.document.documentElement.style,\n selectProp = 'userSelect' in style\n ? 'userSelect'\n : 'MozUserSelect' in style\n ? 'MozUserSelect'\n : 'WebkitUserSelect' in style\n ? 'WebkitUserSelect'\n : 'KhtmlUserSelect' in style\n ? 'KhtmlUserSelect'\n : '';\n\n /**\n * Makes element unselectable\n * @memberOf fabric.util\n * @param {HTMLElement} element Element to make unselectable\n * @return {HTMLElement} Element that was passed in\n */\n function makeElementUnselectable(element) {\n if (typeof element.onselectstart !== 'undefined') {\n element.onselectstart = fabric.util.falseFunction;\n }\n if (selectProp) {\n element.style[selectProp] = 'none';\n }\n else if (typeof element.unselectable === 'string') {\n element.unselectable = 'on';\n }\n return element;\n }\n\n /**\n * Makes element selectable\n * @memberOf fabric.util\n * @param {HTMLElement} element Element to make selectable\n * @return {HTMLElement} Element that was passed in\n */\n function makeElementSelectable(element) {\n if (typeof element.onselectstart !== 'undefined') {\n element.onselectstart = null;\n }\n if (selectProp) {\n element.style[selectProp] = '';\n }\n else if (typeof element.unselectable === 'string') {\n element.unselectable = '';\n }\n return element;\n }\n\n fabric.util.makeElementUnselectable = makeElementUnselectable;\n fabric.util.makeElementSelectable = makeElementSelectable;\n })();\n\n function getNodeCanvas(element) {\n var impl = fabric.jsdomImplForWrapper(element);\n return impl._canvas || impl._image;\n };\n\n function cleanUpJsdomNode(element) {\n if (!fabric.isLikelyNode) {\n return;\n }\n var impl = fabric.jsdomImplForWrapper(element);\n if (impl) {\n impl._image = null;\n impl._canvas = null;\n // unsure if necessary\n impl._currentSrc = null;\n impl._attributes = null;\n impl._classList = null;\n }\n }\n\n function setImageSmoothing(ctx, value) {\n ctx.imageSmoothingEnabled = ctx.imageSmoothingEnabled || ctx.webkitImageSmoothingEnabled\n || ctx.mozImageSmoothingEnabled || ctx.msImageSmoothingEnabled || ctx.oImageSmoothingEnabled;\n ctx.imageSmoothingEnabled = value;\n }\n\n /**\n * setImageSmoothing sets the context imageSmoothingEnabled property.\n * Used by canvas and by ImageObject.\n * @memberOf fabric.util\n * @since 4.0.0\n * @param {HTMLRenderingContext2D} ctx to set on\n * @param {Boolean} value true or false\n */\n fabric.util.setImageSmoothing = setImageSmoothing;\n fabric.util.getById = getById;\n fabric.util.toArray = toArray;\n fabric.util.addClass = addClass;\n fabric.util.makeElement = makeElement;\n fabric.util.wrapElement = wrapElement;\n fabric.util.getScrollLeftTop = getScrollLeftTop;\n fabric.util.getElementOffset = getElementOffset;\n fabric.util.getNodeCanvas = getNodeCanvas;\n fabric.util.cleanUpJsdomNode = cleanUpJsdomNode;\n\n})();\n\n\n(function() {\n\n function addParamToUrl(url, param) {\n return url + (/\\?/.test(url) ? '&' : '?') + param;\n }\n\n function emptyFn() { }\n\n /**\n * Cross-browser abstraction for sending XMLHttpRequest\n * @memberOf fabric.util\n * @param {String} url URL to send XMLHttpRequest to\n * @param {Object} [options] Options object\n * @param {String} [options.method=\"GET\"]\n * @param {String} [options.parameters] parameters to append to url in GET or in body\n * @param {String} [options.body] body to send with POST or PUT request\n * @param {Function} options.onComplete Callback to invoke when request is completed\n * @return {XMLHttpRequest} request\n */\n function request(url, options) {\n options || (options = { });\n\n var method = options.method ? options.method.toUpperCase() : 'GET',\n onComplete = options.onComplete || function() { },\n xhr = new fabric.window.XMLHttpRequest(),\n body = options.body || options.parameters;\n\n /** @ignore */\n xhr.onreadystatechange = function() {\n if (xhr.readyState === 4) {\n onComplete(xhr);\n xhr.onreadystatechange = emptyFn;\n }\n };\n\n if (method === 'GET') {\n body = null;\n if (typeof options.parameters === 'string') {\n url = addParamToUrl(url, options.parameters);\n }\n }\n\n xhr.open(method, url, true);\n\n if (method === 'POST' || method === 'PUT') {\n xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n }\n\n xhr.send(body);\n return xhr;\n }\n\n fabric.util.request = request;\n})();\n\n\n/**\n * Wrapper around `console.log` (when available)\n * @param {*} [values] Values to log\n */\nfabric.log = console.log;\n\n/**\n * Wrapper around `console.warn` (when available)\n * @param {*} [values] Values to log as a warning\n */\nfabric.warn = console.warn;\n\n\n(function() {\n\n function noop() {\n return false;\n }\n\n function defaultEasing(t, b, c, d) {\n return -c * Math.cos(t / d * (Math.PI / 2)) + c + b;\n }\n\n /**\n * Changes value from one to another within certain period of time, invoking callbacks as value is being changed.\n * @memberOf fabric.util\n * @param {Object} [options] Animation options\n * @param {Function} [options.onChange] Callback; invoked on every value change\n * @param {Function} [options.onComplete] Callback; invoked when value change is completed\n * @param {Number} [options.startValue=0] Starting value\n * @param {Number} [options.endValue=100] Ending value\n * @param {Number} [options.byValue=100] Value to modify the property by\n * @param {Function} [options.easing] Easing function\n * @param {Number} [options.duration=500] Duration of change (in ms)\n * @param {Function} [options.abort] Additional function with logic. If returns true, onComplete is called.\n * @returns {Function} abort function\n */\n function animate(options) {\n var cancel = false;\n requestAnimFrame(function(timestamp) {\n options || (options = { });\n\n var start = timestamp || +new Date(),\n duration = options.duration || 500,\n finish = start + duration, time,\n onChange = options.onChange || noop,\n abort = options.abort || noop,\n onComplete = options.onComplete || noop,\n easing = options.easing || defaultEasing,\n startValue = 'startValue' in options ? options.startValue : 0,\n endValue = 'endValue' in options ? options.endValue : 100,\n byValue = options.byValue || endValue - startValue;\n\n options.onStart && options.onStart();\n\n (function tick(ticktime) {\n // TODO: move abort call after calculation\n // and pass (current,valuePerc, timePerc) as arguments\n time = ticktime || +new Date();\n var currentTime = time > finish ? duration : (time - start),\n timePerc = currentTime / duration,\n current = easing(currentTime, startValue, byValue, duration),\n valuePerc = Math.abs((current - startValue) / byValue);\n if (cancel) {\n return;\n }\n if (abort(current, valuePerc, timePerc)) {\n // remove this in 4.0\n // does to even make sense to abort and run onComplete?\n onComplete(endValue, 1, 1);\n return;\n }\n if (time > finish) {\n onChange(endValue, 1, 1);\n onComplete(endValue, 1, 1);\n return;\n }\n else {\n onChange(current, valuePerc, timePerc);\n requestAnimFrame(tick);\n }\n })(start);\n });\n return function() {\n cancel = true;\n };\n }\n\n var _requestAnimFrame = fabric.window.requestAnimationFrame ||\n fabric.window.webkitRequestAnimationFrame ||\n fabric.window.mozRequestAnimationFrame ||\n fabric.window.oRequestAnimationFrame ||\n fabric.window.msRequestAnimationFrame ||\n function(callback) {\n return fabric.window.setTimeout(callback, 1000 / 60);\n };\n\n var _cancelAnimFrame = fabric.window.cancelAnimationFrame || fabric.window.clearTimeout;\n\n /**\n * requestAnimationFrame polyfill based on http://paulirish.com/2011/requestanimationframe-for-smart-animating/\n * In order to get a precise start time, `requestAnimFrame` should be called as an entry into the method\n * @memberOf fabric.util\n * @param {Function} callback Callback to invoke\n * @param {DOMElement} element optional Element to associate with animation\n */\n function requestAnimFrame() {\n return _requestAnimFrame.apply(fabric.window, arguments);\n }\n\n function cancelAnimFrame() {\n return _cancelAnimFrame.apply(fabric.window, arguments);\n }\n\n fabric.util.animate = animate;\n fabric.util.requestAnimFrame = requestAnimFrame;\n fabric.util.cancelAnimFrame = cancelAnimFrame;\n})();\n\n\n(function() {\n // Calculate an in-between color. Returns a \"rgba()\" string.\n // Credit: Edwin Martin \n // http://www.bitstorm.org/jquery/color-animation/jquery.animate-colors.js\n function calculateColor(begin, end, pos) {\n var color = 'rgba('\n + parseInt((begin[0] + pos * (end[0] - begin[0])), 10) + ','\n + parseInt((begin[1] + pos * (end[1] - begin[1])), 10) + ','\n + parseInt((begin[2] + pos * (end[2] - begin[2])), 10);\n\n color += ',' + (begin && end ? parseFloat(begin[3] + pos * (end[3] - begin[3])) : 1);\n color += ')';\n return color;\n }\n\n /**\n * Changes the color from one to another within certain period of time, invoking callbacks as value is being changed.\n * @memberOf fabric.util\n * @param {String} fromColor The starting color in hex or rgb(a) format.\n * @param {String} toColor The starting color in hex or rgb(a) format.\n * @param {Number} [duration] Duration of change (in ms).\n * @param {Object} [options] Animation options\n * @param {Function} [options.onChange] Callback; invoked on every value change\n * @param {Function} [options.onComplete] Callback; invoked when value change is completed\n * @param {Function} [options.colorEasing] Easing function. Note that this function only take two arguments (currentTime, duration). Thus the regular animation easing functions cannot be used.\n * @param {Function} [options.abort] Additional function with logic. If returns true, onComplete is called.\n * @returns {Function} abort function\n */\n function animateColor(fromColor, toColor, duration, options) {\n var startColor = new fabric.Color(fromColor).getSource(),\n endColor = new fabric.Color(toColor).getSource(),\n originalOnComplete = options.onComplete,\n originalOnChange = options.onChange;\n options = options || {};\n\n return fabric.util.animate(fabric.util.object.extend(options, {\n duration: duration || 500,\n startValue: startColor,\n endValue: endColor,\n byValue: endColor,\n easing: function (currentTime, startValue, byValue, duration) {\n var posValue = options.colorEasing\n ? options.colorEasing(currentTime, duration)\n : 1 - Math.cos(currentTime / duration * (Math.PI / 2));\n return calculateColor(startValue, byValue, posValue);\n },\n // has to take in account for color restoring;\n onComplete: function(current, valuePerc, timePerc) {\n if (originalOnComplete) {\n return originalOnComplete(\n calculateColor(endColor, endColor, 0),\n valuePerc,\n timePerc\n );\n }\n },\n onChange: function(current, valuePerc, timePerc) {\n if (originalOnChange) {\n if (Array.isArray(current)) {\n return originalOnChange(\n calculateColor(current, current, 0),\n valuePerc,\n timePerc\n );\n }\n originalOnChange(current, valuePerc, timePerc);\n }\n }\n }));\n }\n\n fabric.util.animateColor = animateColor;\n\n})();\n\n\n(function() {\n\n function normalize(a, c, p, s) {\n if (a < Math.abs(c)) {\n a = c;\n s = p / 4;\n }\n else {\n //handle the 0/0 case:\n if (c === 0 && a === 0) {\n s = p / (2 * Math.PI) * Math.asin(1);\n }\n else {\n s = p / (2 * Math.PI) * Math.asin(c / a);\n }\n }\n return { a: a, c: c, p: p, s: s };\n }\n\n function elastic(opts, t, d) {\n return opts.a *\n Math.pow(2, 10 * (t -= 1)) *\n Math.sin( (t * d - opts.s) * (2 * Math.PI) / opts.p );\n }\n\n /**\n * Cubic easing out\n * @memberOf fabric.util.ease\n */\n function easeOutCubic(t, b, c, d) {\n return c * ((t = t / d - 1) * t * t + 1) + b;\n }\n\n /**\n * Cubic easing in and out\n * @memberOf fabric.util.ease\n */\n function easeInOutCubic(t, b, c, d) {\n t /= d / 2;\n if (t < 1) {\n return c / 2 * t * t * t + b;\n }\n return c / 2 * ((t -= 2) * t * t + 2) + b;\n }\n\n /**\n * Quartic easing in\n * @memberOf fabric.util.ease\n */\n function easeInQuart(t, b, c, d) {\n return c * (t /= d) * t * t * t + b;\n }\n\n /**\n * Quartic easing out\n * @memberOf fabric.util.ease\n */\n function easeOutQuart(t, b, c, d) {\n return -c * ((t = t / d - 1) * t * t * t - 1) + b;\n }\n\n /**\n * Quartic easing in and out\n * @memberOf fabric.util.ease\n */\n function easeInOutQuart(t, b, c, d) {\n t /= d / 2;\n if (t < 1) {\n return c / 2 * t * t * t * t + b;\n }\n return -c / 2 * ((t -= 2) * t * t * t - 2) + b;\n }\n\n /**\n * Quintic easing in\n * @memberOf fabric.util.ease\n */\n function easeInQuint(t, b, c, d) {\n return c * (t /= d) * t * t * t * t + b;\n }\n\n /**\n * Quintic easing out\n * @memberOf fabric.util.ease\n */\n function easeOutQuint(t, b, c, d) {\n return c * ((t = t / d - 1) * t * t * t * t + 1) + b;\n }\n\n /**\n * Quintic easing in and out\n * @memberOf fabric.util.ease\n */\n function easeInOutQuint(t, b, c, d) {\n t /= d / 2;\n if (t < 1) {\n return c / 2 * t * t * t * t * t + b;\n }\n return c / 2 * ((t -= 2) * t * t * t * t + 2) + b;\n }\n\n /**\n * Sinusoidal easing in\n * @memberOf fabric.util.ease\n */\n function easeInSine(t, b, c, d) {\n return -c * Math.cos(t / d * (Math.PI / 2)) + c + b;\n }\n\n /**\n * Sinusoidal easing out\n * @memberOf fabric.util.ease\n */\n function easeOutSine(t, b, c, d) {\n return c * Math.sin(t / d * (Math.PI / 2)) + b;\n }\n\n /**\n * Sinusoidal easing in and out\n * @memberOf fabric.util.ease\n */\n function easeInOutSine(t, b, c, d) {\n return -c / 2 * (Math.cos(Math.PI * t / d) - 1) + b;\n }\n\n /**\n * Exponential easing in\n * @memberOf fabric.util.ease\n */\n function easeInExpo(t, b, c, d) {\n return (t === 0) ? b : c * Math.pow(2, 10 * (t / d - 1)) + b;\n }\n\n /**\n * Exponential easing out\n * @memberOf fabric.util.ease\n */\n function easeOutExpo(t, b, c, d) {\n return (t === d) ? b + c : c * (-Math.pow(2, -10 * t / d) + 1) + b;\n }\n\n /**\n * Exponential easing in and out\n * @memberOf fabric.util.ease\n */\n function easeInOutExpo(t, b, c, d) {\n if (t === 0) {\n return b;\n }\n if (t === d) {\n return b + c;\n }\n t /= d / 2;\n if (t < 1) {\n return c / 2 * Math.pow(2, 10 * (t - 1)) + b;\n }\n return c / 2 * (-Math.pow(2, -10 * --t) + 2) + b;\n }\n\n /**\n * Circular easing in\n * @memberOf fabric.util.ease\n */\n function easeInCirc(t, b, c, d) {\n return -c * (Math.sqrt(1 - (t /= d) * t) - 1) + b;\n }\n\n /**\n * Circular easing out\n * @memberOf fabric.util.ease\n */\n function easeOutCirc(t, b, c, d) {\n return c * Math.sqrt(1 - (t = t / d - 1) * t) + b;\n }\n\n /**\n * Circular easing in and out\n * @memberOf fabric.util.ease\n */\n function easeInOutCirc(t, b, c, d) {\n t /= d / 2;\n if (t < 1) {\n return -c / 2 * (Math.sqrt(1 - t * t) - 1) + b;\n }\n return c / 2 * (Math.sqrt(1 - (t -= 2) * t) + 1) + b;\n }\n\n /**\n * Elastic easing in\n * @memberOf fabric.util.ease\n */\n function easeInElastic(t, b, c, d) {\n var s = 1.70158, p = 0, a = c;\n if (t === 0) {\n return b;\n }\n t /= d;\n if (t === 1) {\n return b + c;\n }\n if (!p) {\n p = d * 0.3;\n }\n var opts = normalize(a, c, p, s);\n return -elastic(opts, t, d) + b;\n }\n\n /**\n * Elastic easing out\n * @memberOf fabric.util.ease\n */\n function easeOutElastic(t, b, c, d) {\n var s = 1.70158, p = 0, a = c;\n if (t === 0) {\n return b;\n }\n t /= d;\n if (t === 1) {\n return b + c;\n }\n if (!p) {\n p = d * 0.3;\n }\n var opts = normalize(a, c, p, s);\n return opts.a * Math.pow(2, -10 * t) * Math.sin((t * d - opts.s) * (2 * Math.PI) / opts.p ) + opts.c + b;\n }\n\n /**\n * Elastic easing in and out\n * @memberOf fabric.util.ease\n */\n function easeInOutElastic(t, b, c, d) {\n var s = 1.70158, p = 0, a = c;\n if (t === 0) {\n return b;\n }\n t /= d / 2;\n if (t === 2) {\n return b + c;\n }\n if (!p) {\n p = d * (0.3 * 1.5);\n }\n var opts = normalize(a, c, p, s);\n if (t < 1) {\n return -0.5 * elastic(opts, t, d) + b;\n }\n return opts.a * Math.pow(2, -10 * (t -= 1)) *\n Math.sin((t * d - opts.s) * (2 * Math.PI) / opts.p ) * 0.5 + opts.c + b;\n }\n\n /**\n * Backwards easing in\n * @memberOf fabric.util.ease\n */\n function easeInBack(t, b, c, d, s) {\n if (s === undefined) {\n s = 1.70158;\n }\n return c * (t /= d) * t * ((s + 1) * t - s) + b;\n }\n\n /**\n * Backwards easing out\n * @memberOf fabric.util.ease\n */\n function easeOutBack(t, b, c, d, s) {\n if (s === undefined) {\n s = 1.70158;\n }\n return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;\n }\n\n /**\n * Backwards easing in and out\n * @memberOf fabric.util.ease\n */\n function easeInOutBack(t, b, c, d, s) {\n if (s === undefined) {\n s = 1.70158;\n }\n t /= d / 2;\n if (t < 1) {\n return c / 2 * (t * t * (((s *= (1.525)) + 1) * t - s)) + b;\n }\n return c / 2 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2) + b;\n }\n\n /**\n * Bouncing easing in\n * @memberOf fabric.util.ease\n */\n function easeInBounce(t, b, c, d) {\n return c - easeOutBounce (d - t, 0, c, d) + b;\n }\n\n /**\n * Bouncing easing out\n * @memberOf fabric.util.ease\n */\n function easeOutBounce(t, b, c, d) {\n if ((t /= d) < (1 / 2.75)) {\n return c * (7.5625 * t * t) + b;\n }\n else if (t < (2 / 2.75)) {\n return c * (7.5625 * (t -= (1.5 / 2.75)) * t + 0.75) + b;\n }\n else if (t < (2.5 / 2.75)) {\n return c * (7.5625 * (t -= (2.25 / 2.75)) * t + 0.9375) + b;\n }\n else {\n return c * (7.5625 * (t -= (2.625 / 2.75)) * t + 0.984375) + b;\n }\n }\n\n /**\n * Bouncing easing in and out\n * @memberOf fabric.util.ease\n */\n function easeInOutBounce(t, b, c, d) {\n if (t < d / 2) {\n return easeInBounce (t * 2, 0, c, d) * 0.5 + b;\n }\n return easeOutBounce(t * 2 - d, 0, c, d) * 0.5 + c * 0.5 + b;\n }\n\n /**\n * Easing functions\n * See Easing Equations by Robert Penner\n * @namespace fabric.util.ease\n */\n fabric.util.ease = {\n\n /**\n * Quadratic easing in\n * @memberOf fabric.util.ease\n */\n easeInQuad: function(t, b, c, d) {\n return c * (t /= d) * t + b;\n },\n\n /**\n * Quadratic easing out\n * @memberOf fabric.util.ease\n */\n easeOutQuad: function(t, b, c, d) {\n return -c * (t /= d) * (t - 2) + b;\n },\n\n /**\n * Quadratic easing in and out\n * @memberOf fabric.util.ease\n */\n easeInOutQuad: function(t, b, c, d) {\n t /= (d / 2);\n if (t < 1) {\n return c / 2 * t * t + b;\n }\n return -c / 2 * ((--t) * (t - 2) - 1) + b;\n },\n\n /**\n * Cubic easing in\n * @memberOf fabric.util.ease\n */\n easeInCubic: function(t, b, c, d) {\n return c * (t /= d) * t * t + b;\n },\n\n easeOutCubic: easeOutCubic,\n easeInOutCubic: easeInOutCubic,\n easeInQuart: easeInQuart,\n easeOutQuart: easeOutQuart,\n easeInOutQuart: easeInOutQuart,\n easeInQuint: easeInQuint,\n easeOutQuint: easeOutQuint,\n easeInOutQuint: easeInOutQuint,\n easeInSine: easeInSine,\n easeOutSine: easeOutSine,\n easeInOutSine: easeInOutSine,\n easeInExpo: easeInExpo,\n easeOutExpo: easeOutExpo,\n easeInOutExpo: easeInOutExpo,\n easeInCirc: easeInCirc,\n easeOutCirc: easeOutCirc,\n easeInOutCirc: easeInOutCirc,\n easeInElastic: easeInElastic,\n easeOutElastic: easeOutElastic,\n easeInOutElastic: easeInOutElastic,\n easeInBack: easeInBack,\n easeOutBack: easeOutBack,\n easeInOutBack: easeInOutBack,\n easeInBounce: easeInBounce,\n easeOutBounce: easeOutBounce,\n easeInOutBounce: easeInOutBounce\n };\n\n})();\n\n\n(function(global) {\n\n 'use strict';\n\n /**\n * @name fabric\n * @namespace\n */\n\n var fabric = global.fabric || (global.fabric = { }),\n extend = fabric.util.object.extend,\n clone = fabric.util.object.clone,\n toFixed = fabric.util.toFixed,\n parseUnit = fabric.util.parseUnit,\n multiplyTransformMatrices = fabric.util.multiplyTransformMatrices,\n\n svgValidTagNames = ['path', 'circle', 'polygon', 'polyline', 'ellipse', 'rect', 'line',\n 'image', 'text'],\n svgViewBoxElements = ['symbol', 'image', 'marker', 'pattern', 'view', 'svg'],\n svgInvalidAncestors = ['pattern', 'defs', 'symbol', 'metadata', 'clipPath', 'mask', 'desc'],\n svgValidParents = ['symbol', 'g', 'a', 'svg', 'clipPath', 'defs'],\n\n attributesMap = {\n cx: 'left',\n x: 'left',\n r: 'radius',\n cy: 'top',\n y: 'top',\n display: 'visible',\n visibility: 'visible',\n transform: 'transformMatrix',\n 'fill-opacity': 'fillOpacity',\n 'fill-rule': 'fillRule',\n 'font-family': 'fontFamily',\n 'font-size': 'fontSize',\n 'font-style': 'fontStyle',\n 'font-weight': 'fontWeight',\n 'letter-spacing': 'charSpacing',\n 'paint-order': 'paintFirst',\n 'stroke-dasharray': 'strokeDashArray',\n 'stroke-dashoffset': 'strokeDashOffset',\n 'stroke-linecap': 'strokeLineCap',\n 'stroke-linejoin': 'strokeLineJoin',\n 'stroke-miterlimit': 'strokeMiterLimit',\n 'stroke-opacity': 'strokeOpacity',\n 'stroke-width': 'strokeWidth',\n 'text-decoration': 'textDecoration',\n 'text-anchor': 'textAnchor',\n opacity: 'opacity',\n 'clip-path': 'clipPath',\n 'clip-rule': 'clipRule',\n 'vector-effect': 'strokeUniform',\n 'image-rendering': 'imageSmoothing',\n },\n\n colorAttributes = {\n stroke: 'strokeOpacity',\n fill: 'fillOpacity'\n },\n\n fSize = 'font-size', cPath = 'clip-path';\n\n fabric.svgValidTagNamesRegEx = getSvgRegex(svgValidTagNames);\n fabric.svgViewBoxElementsRegEx = getSvgRegex(svgViewBoxElements);\n fabric.svgInvalidAncestorsRegEx = getSvgRegex(svgInvalidAncestors);\n fabric.svgValidParentsRegEx = getSvgRegex(svgValidParents);\n\n fabric.cssRules = { };\n fabric.gradientDefs = { };\n fabric.clipPaths = { };\n\n function normalizeAttr(attr) {\n // transform attribute names\n if (attr in attributesMap) {\n return attributesMap[attr];\n }\n return attr;\n }\n\n function normalizeValue(attr, value, parentAttributes, fontSize) {\n var isArray = Object.prototype.toString.call(value) === '[object Array]',\n parsed;\n\n if ((attr === 'fill' || attr === 'stroke') && value === 'none') {\n value = '';\n }\n else if (attr === 'strokeUniform') {\n return (value === 'non-scaling-stroke');\n }\n else if (attr === 'strokeDashArray') {\n if (value === 'none') {\n value = null;\n }\n else {\n value = value.replace(/,/g, ' ').split(/\\s+/).map(parseFloat);\n }\n }\n else if (attr === 'transformMatrix') {\n if (parentAttributes && parentAttributes.transformMatrix) {\n value = multiplyTransformMatrices(\n parentAttributes.transformMatrix, fabric.parseTransformAttribute(value));\n }\n else {\n value = fabric.parseTransformAttribute(value);\n }\n }\n else if (attr === 'visible') {\n value = value !== 'none' && value !== 'hidden';\n // display=none on parent element always takes precedence over child element\n if (parentAttributes && parentAttributes.visible === false) {\n value = false;\n }\n }\n else if (attr === 'opacity') {\n value = parseFloat(value);\n if (parentAttributes && typeof parentAttributes.opacity !== 'undefined') {\n value *= parentAttributes.opacity;\n }\n }\n else if (attr === 'textAnchor' /* text-anchor */) {\n value = value === 'start' ? 'left' : value === 'end' ? 'right' : 'center';\n }\n else if (attr === 'charSpacing') {\n // parseUnit returns px and we convert it to em\n parsed = parseUnit(value, fontSize) / fontSize * 1000;\n }\n else if (attr === 'paintFirst') {\n var fillIndex = value.indexOf('fill');\n var strokeIndex = value.indexOf('stroke');\n var value = 'fill';\n if (fillIndex > -1 && strokeIndex > -1 && strokeIndex < fillIndex) {\n value = 'stroke';\n }\n else if (fillIndex === -1 && strokeIndex > -1) {\n value = 'stroke';\n }\n }\n else if (attr === 'href' || attr === 'xlink:href' || attr === 'font') {\n return value;\n }\n else if (attr === 'imageSmoothing') {\n return (value === 'optimizeQuality');\n }\n else {\n parsed = isArray ? value.map(parseUnit) : parseUnit(value, fontSize);\n }\n\n return (!isArray && isNaN(parsed) ? value : parsed);\n }\n\n /**\n * @private\n */\n function getSvgRegex(arr) {\n return new RegExp('^(' + arr.join('|') + ')\\\\b', 'i');\n }\n\n /**\n * @private\n * @param {Object} attributes Array of attributes to parse\n */\n function _setStrokeFillOpacity(attributes) {\n for (var attr in colorAttributes) {\n\n if (typeof attributes[colorAttributes[attr]] === 'undefined' || attributes[attr] === '') {\n continue;\n }\n\n if (typeof attributes[attr] === 'undefined') {\n if (!fabric.Object.prototype[attr]) {\n continue;\n }\n attributes[attr] = fabric.Object.prototype[attr];\n }\n\n if (attributes[attr].indexOf('url(') === 0) {\n continue;\n }\n\n var color = new fabric.Color(attributes[attr]);\n attributes[attr] = color.setAlpha(toFixed(color.getAlpha() * attributes[colorAttributes[attr]], 2)).toRgba();\n }\n return attributes;\n }\n\n /**\n * @private\n */\n function _getMultipleNodes(doc, nodeNames) {\n var nodeName, nodeArray = [], nodeList, i, len;\n for (i = 0, len = nodeNames.length; i < len; i++) {\n nodeName = nodeNames[i];\n nodeList = doc.getElementsByTagName(nodeName);\n nodeArray = nodeArray.concat(Array.prototype.slice.call(nodeList));\n }\n return nodeArray;\n }\n\n /**\n * Parses \"transform\" attribute, returning an array of values\n * @static\n * @function\n * @memberOf fabric\n * @param {String} attributeValue String containing attribute value\n * @return {Array} Array of 6 elements representing transformation matrix\n */\n fabric.parseTransformAttribute = (function() {\n function rotateMatrix(matrix, args) {\n var cos = fabric.util.cos(args[0]), sin = fabric.util.sin(args[0]),\n x = 0, y = 0;\n if (args.length === 3) {\n x = args[1];\n y = args[2];\n }\n\n matrix[0] = cos;\n matrix[1] = sin;\n matrix[2] = -sin;\n matrix[3] = cos;\n matrix[4] = x - (cos * x - sin * y);\n matrix[5] = y - (sin * x + cos * y);\n }\n\n function scaleMatrix(matrix, args) {\n var multiplierX = args[0],\n multiplierY = (args.length === 2) ? args[1] : args[0];\n\n matrix[0] = multiplierX;\n matrix[3] = multiplierY;\n }\n\n function skewMatrix(matrix, args, pos) {\n matrix[pos] = Math.tan(fabric.util.degreesToRadians(args[0]));\n }\n\n function translateMatrix(matrix, args) {\n matrix[4] = args[0];\n if (args.length === 2) {\n matrix[5] = args[1];\n }\n }\n\n // identity matrix\n var iMatrix = fabric.iMatrix,\n\n // == begin transform regexp\n number = fabric.reNum,\n\n commaWsp = fabric.commaWsp,\n\n skewX = '(?:(skewX)\\\\s*\\\\(\\\\s*(' + number + ')\\\\s*\\\\))',\n\n skewY = '(?:(skewY)\\\\s*\\\\(\\\\s*(' + number + ')\\\\s*\\\\))',\n\n rotate = '(?:(rotate)\\\\s*\\\\(\\\\s*(' + number + ')(?:' +\n commaWsp + '(' + number + ')' +\n commaWsp + '(' + number + '))?\\\\s*\\\\))',\n\n scale = '(?:(scale)\\\\s*\\\\(\\\\s*(' + number + ')(?:' +\n commaWsp + '(' + number + '))?\\\\s*\\\\))',\n\n translate = '(?:(translate)\\\\s*\\\\(\\\\s*(' + number + ')(?:' +\n commaWsp + '(' + number + '))?\\\\s*\\\\))',\n\n matrix = '(?:(matrix)\\\\s*\\\\(\\\\s*' +\n '(' + number + ')' + commaWsp +\n '(' + number + ')' + commaWsp +\n '(' + number + ')' + commaWsp +\n '(' + number + ')' + commaWsp +\n '(' + number + ')' + commaWsp +\n '(' + number + ')' +\n '\\\\s*\\\\))',\n\n transform = '(?:' +\n matrix + '|' +\n translate + '|' +\n scale + '|' +\n rotate + '|' +\n skewX + '|' +\n skewY +\n ')',\n\n transforms = '(?:' + transform + '(?:' + commaWsp + '*' + transform + ')*' + ')',\n\n transformList = '^\\\\s*(?:' + transforms + '?)\\\\s*$',\n\n // http://www.w3.org/TR/SVG/coords.html#TransformAttribute\n reTransformList = new RegExp(transformList),\n // == end transform regexp\n\n reTransform = new RegExp(transform, 'g');\n\n return function(attributeValue) {\n\n // start with identity matrix\n var matrix = iMatrix.concat(),\n matrices = [];\n\n // return if no argument was given or\n // an argument does not match transform attribute regexp\n if (!attributeValue || (attributeValue && !reTransformList.test(attributeValue))) {\n return matrix;\n }\n\n attributeValue.replace(reTransform, function(match) {\n\n var m = new RegExp(transform).exec(match).filter(function (match) {\n // match !== '' && match != null\n return (!!match);\n }),\n operation = m[1],\n args = m.slice(2).map(parseFloat);\n\n switch (operation) {\n case 'translate':\n translateMatrix(matrix, args);\n break;\n case 'rotate':\n args[0] = fabric.util.degreesToRadians(args[0]);\n rotateMatrix(matrix, args);\n break;\n case 'scale':\n scaleMatrix(matrix, args);\n break;\n case 'skewX':\n skewMatrix(matrix, args, 2);\n break;\n case 'skewY':\n skewMatrix(matrix, args, 1);\n break;\n case 'matrix':\n matrix = args;\n break;\n }\n\n // snapshot current matrix into matrices array\n matrices.push(matrix.concat());\n // reset\n matrix = iMatrix.concat();\n });\n\n var combinedMatrix = matrices[0];\n while (matrices.length > 1) {\n matrices.shift();\n combinedMatrix = fabric.util.multiplyTransformMatrices(combinedMatrix, matrices[0]);\n }\n return combinedMatrix;\n };\n })();\n\n /**\n * @private\n */\n function parseStyleString(style, oStyle) {\n var attr, value;\n style.replace(/;\\s*$/, '').split(';').forEach(function (chunk) {\n var pair = chunk.split(':');\n\n attr = pair[0].trim().toLowerCase();\n value = pair[1].trim();\n\n oStyle[attr] = value;\n });\n }\n\n /**\n * @private\n */\n function parseStyleObject(style, oStyle) {\n var attr, value;\n for (var prop in style) {\n if (typeof style[prop] === 'undefined') {\n continue;\n }\n\n attr = prop.toLowerCase();\n value = style[prop];\n\n oStyle[attr] = value;\n }\n }\n\n /**\n * @private\n */\n function getGlobalStylesForElement(element, svgUid) {\n var styles = { };\n for (var rule in fabric.cssRules[svgUid]) {\n if (elementMatchesRule(element, rule.split(' '))) {\n for (var property in fabric.cssRules[svgUid][rule]) {\n styles[property] = fabric.cssRules[svgUid][rule][property];\n }\n }\n }\n return styles;\n }\n\n /**\n * @private\n */\n function elementMatchesRule(element, selectors) {\n var firstMatching, parentMatching = true;\n //start from rightmost selector.\n firstMatching = selectorMatches(element, selectors.pop());\n if (firstMatching && selectors.length) {\n parentMatching = doesSomeParentMatch(element, selectors);\n }\n return firstMatching && parentMatching && (selectors.length === 0);\n }\n\n function doesSomeParentMatch(element, selectors) {\n var selector, parentMatching = true;\n while (element.parentNode && element.parentNode.nodeType === 1 && selectors.length) {\n if (parentMatching) {\n selector = selectors.pop();\n }\n element = element.parentNode;\n parentMatching = selectorMatches(element, selector);\n }\n return selectors.length === 0;\n }\n\n /**\n * @private\n */\n function selectorMatches(element, selector) {\n var nodeName = element.nodeName,\n classNames = element.getAttribute('class'),\n id = element.getAttribute('id'), matcher, i;\n // i check if a selector matches slicing away part from it.\n // if i get empty string i should match\n matcher = new RegExp('^' + nodeName, 'i');\n selector = selector.replace(matcher, '');\n if (id && selector.length) {\n matcher = new RegExp('#' + id + '(?![a-zA-Z\\\\-]+)', 'i');\n selector = selector.replace(matcher, '');\n }\n if (classNames && selector.length) {\n classNames = classNames.split(' ');\n for (i = classNames.length; i--;) {\n matcher = new RegExp('\\\\.' + classNames[i] + '(?![a-zA-Z\\\\-]+)', 'i');\n selector = selector.replace(matcher, '');\n }\n }\n return selector.length === 0;\n }\n\n /**\n * @private\n * to support IE8 missing getElementById on SVGdocument and on node xmlDOM\n */\n function elementById(doc, id) {\n var el;\n doc.getElementById && (el = doc.getElementById(id));\n if (el) {\n return el;\n }\n var node, i, len, nodelist = doc.getElementsByTagName('*');\n for (i = 0, len = nodelist.length; i < len; i++) {\n node = nodelist[i];\n if (id === node.getAttribute('id')) {\n return node;\n }\n }\n }\n\n /**\n * @private\n */\n function parseUseDirectives(doc) {\n var nodelist = _getMultipleNodes(doc, ['use', 'svg:use']), i = 0;\n while (nodelist.length && i < nodelist.length) {\n var el = nodelist[i],\n xlinkAttribute = el.getAttribute('xlink:href') || el.getAttribute('href');\n\n if (xlinkAttribute === null) {\n return;\n }\n\n var xlink = xlinkAttribute.substr(1),\n x = el.getAttribute('x') || 0,\n y = el.getAttribute('y') || 0,\n el2 = elementById(doc, xlink).cloneNode(true),\n currentTrans = (el2.getAttribute('transform') || '') + ' translate(' + x + ', ' + y + ')',\n parentNode,\n oldLength = nodelist.length, attr,\n j,\n attrs,\n len,\n namespace = fabric.svgNS;\n\n applyViewboxTransform(el2);\n if (/^svg$/i.test(el2.nodeName)) {\n var el3 = el2.ownerDocument.createElementNS(namespace, 'g');\n for (j = 0, attrs = el2.attributes, len = attrs.length; j < len; j++) {\n attr = attrs.item(j);\n el3.setAttributeNS(namespace, attr.nodeName, attr.nodeValue);\n }\n // el2.firstChild != null\n while (el2.firstChild) {\n el3.appendChild(el2.firstChild);\n }\n el2 = el3;\n }\n\n for (j = 0, attrs = el.attributes, len = attrs.length; j < len; j++) {\n attr = attrs.item(j);\n if (attr.nodeName === 'x' || attr.nodeName === 'y' ||\n attr.nodeName === 'xlink:href' || attr.nodeName === 'href') {\n continue;\n }\n\n if (attr.nodeName === 'transform') {\n currentTrans = attr.nodeValue + ' ' + currentTrans;\n }\n else {\n el2.setAttribute(attr.nodeName, attr.nodeValue);\n }\n }\n\n el2.setAttribute('transform', currentTrans);\n el2.setAttribute('instantiated_by_use', '1');\n el2.removeAttribute('id');\n parentNode = el.parentNode;\n parentNode.replaceChild(el2, el);\n // some browsers do not shorten nodelist after replaceChild (IE8)\n if (nodelist.length === oldLength) {\n i++;\n }\n }\n }\n\n // http://www.w3.org/TR/SVG/coords.html#ViewBoxAttribute\n // matches, e.g.: +14.56e-12, etc.\n var reViewBoxAttrValue = new RegExp(\n '^' +\n '\\\\s*(' + fabric.reNum + '+)\\\\s*,?' +\n '\\\\s*(' + fabric.reNum + '+)\\\\s*,?' +\n '\\\\s*(' + fabric.reNum + '+)\\\\s*,?' +\n '\\\\s*(' + fabric.reNum + '+)\\\\s*' +\n '$'\n );\n\n /**\n * Add a element that envelop all child elements and makes the viewbox transformMatrix descend on all elements\n */\n function applyViewboxTransform(element) {\n if (!fabric.svgViewBoxElementsRegEx.test(element.nodeName)) {\n return {};\n }\n var viewBoxAttr = element.getAttribute('viewBox'),\n scaleX = 1,\n scaleY = 1,\n minX = 0,\n minY = 0,\n viewBoxWidth, viewBoxHeight, matrix, el,\n widthAttr = element.getAttribute('width'),\n heightAttr = element.getAttribute('height'),\n x = element.getAttribute('x') || 0,\n y = element.getAttribute('y') || 0,\n preserveAspectRatio = element.getAttribute('preserveAspectRatio') || '',\n missingViewBox = (!viewBoxAttr || !(viewBoxAttr = viewBoxAttr.match(reViewBoxAttrValue))),\n missingDimAttr = (!widthAttr || !heightAttr || widthAttr === '100%' || heightAttr === '100%'),\n toBeParsed = missingViewBox && missingDimAttr,\n parsedDim = { }, translateMatrix = '', widthDiff = 0, heightDiff = 0;\n\n parsedDim.width = 0;\n parsedDim.height = 0;\n parsedDim.toBeParsed = toBeParsed;\n\n if (missingViewBox) {\n if (((x || y) && element.parentNode && element.parentNode.nodeName !== '#document')) {\n translateMatrix = ' translate(' + parseUnit(x) + ' ' + parseUnit(y) + ') ';\n matrix = (element.getAttribute('transform') || '') + translateMatrix;\n element.setAttribute('transform', matrix);\n element.removeAttribute('x');\n element.removeAttribute('y');\n }\n }\n\n if (toBeParsed) {\n return parsedDim;\n }\n\n if (missingViewBox) {\n parsedDim.width = parseUnit(widthAttr);\n parsedDim.height = parseUnit(heightAttr);\n // set a transform for elements that have x y and are inner(only) SVGs\n return parsedDim;\n }\n minX = -parseFloat(viewBoxAttr[1]);\n minY = -parseFloat(viewBoxAttr[2]);\n viewBoxWidth = parseFloat(viewBoxAttr[3]);\n viewBoxHeight = parseFloat(viewBoxAttr[4]);\n parsedDim.minX = minX;\n parsedDim.minY = minY;\n parsedDim.viewBoxWidth = viewBoxWidth;\n parsedDim.viewBoxHeight = viewBoxHeight;\n if (!missingDimAttr) {\n parsedDim.width = parseUnit(widthAttr);\n parsedDim.height = parseUnit(heightAttr);\n scaleX = parsedDim.width / viewBoxWidth;\n scaleY = parsedDim.height / viewBoxHeight;\n }\n else {\n parsedDim.width = viewBoxWidth;\n parsedDim.height = viewBoxHeight;\n }\n\n // default is to preserve aspect ratio\n preserveAspectRatio = fabric.util.parsePreserveAspectRatioAttribute(preserveAspectRatio);\n if (preserveAspectRatio.alignX !== 'none') {\n //translate all container for the effect of Mid, Min, Max\n if (preserveAspectRatio.meetOrSlice === 'meet') {\n scaleY = scaleX = (scaleX > scaleY ? scaleY : scaleX);\n // calculate additional translation to move the viewbox\n }\n if (preserveAspectRatio.meetOrSlice === 'slice') {\n scaleY = scaleX = (scaleX > scaleY ? scaleX : scaleY);\n // calculate additional translation to move the viewbox\n }\n widthDiff = parsedDim.width - viewBoxWidth * scaleX;\n heightDiff = parsedDim.height - viewBoxHeight * scaleX;\n if (preserveAspectRatio.alignX === 'Mid') {\n widthDiff /= 2;\n }\n if (preserveAspectRatio.alignY === 'Mid') {\n heightDiff /= 2;\n }\n if (preserveAspectRatio.alignX === 'Min') {\n widthDiff = 0;\n }\n if (preserveAspectRatio.alignY === 'Min') {\n heightDiff = 0;\n }\n }\n\n if (scaleX === 1 && scaleY === 1 && minX === 0 && minY === 0 && x === 0 && y === 0) {\n return parsedDim;\n }\n if ((x || y) && element.parentNode.nodeName !== '#document') {\n translateMatrix = ' translate(' + parseUnit(x) + ' ' + parseUnit(y) + ') ';\n }\n\n matrix = translateMatrix + ' matrix(' + scaleX +\n ' 0' +\n ' 0 ' +\n scaleY + ' ' +\n (minX * scaleX + widthDiff) + ' ' +\n (minY * scaleY + heightDiff) + ') ';\n // seems unused.\n // parsedDim.viewboxTransform = fabric.parseTransformAttribute(matrix);\n if (element.nodeName === 'svg') {\n el = element.ownerDocument.createElementNS(fabric.svgNS, 'g');\n // element.firstChild != null\n while (element.firstChild) {\n el.appendChild(element.firstChild);\n }\n element.appendChild(el);\n }\n else {\n el = element;\n el.removeAttribute('x');\n el.removeAttribute('y');\n matrix = el.getAttribute('transform') + matrix;\n }\n el.setAttribute('transform', matrix);\n return parsedDim;\n }\n\n function hasAncestorWithNodeName(element, nodeName) {\n while (element && (element = element.parentNode)) {\n if (element.nodeName && nodeName.test(element.nodeName.replace('svg:', ''))\n && !element.getAttribute('instantiated_by_use')) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Parses an SVG document, converts it to an array of corresponding fabric.* instances and passes them to a callback\n * @static\n * @function\n * @memberOf fabric\n * @param {SVGDocument} doc SVG document to parse\n * @param {Function} callback Callback to call when parsing is finished;\n * It's being passed an array of elements (parsed from a document).\n * @param {Function} [reviver] Method for further parsing of SVG elements, called after each fabric object created.\n * @param {Object} [parsingOptions] options for parsing document\n * @param {String} [parsingOptions.crossOrigin] crossOrigin settings\n */\n fabric.parseSVGDocument = function(doc, callback, reviver, parsingOptions) {\n if (!doc) {\n return;\n }\n\n parseUseDirectives(doc);\n\n var svgUid = fabric.Object.__uid++, i, len,\n options = applyViewboxTransform(doc),\n descendants = fabric.util.toArray(doc.getElementsByTagName('*'));\n options.crossOrigin = parsingOptions && parsingOptions.crossOrigin;\n options.svgUid = svgUid;\n\n if (descendants.length === 0 && fabric.isLikelyNode) {\n // we're likely in node, where \"o3-xml\" library fails to gEBTN(\"*\")\n // https://github.com/ajaxorg/node-o3-xml/issues/21\n descendants = doc.selectNodes('//*[name(.)!=\"svg\"]');\n var arr = [];\n for (i = 0, len = descendants.length; i < len; i++) {\n arr[i] = descendants[i];\n }\n descendants = arr;\n }\n\n var elements = descendants.filter(function(el) {\n applyViewboxTransform(el);\n return fabric.svgValidTagNamesRegEx.test(el.nodeName.replace('svg:', '')) &&\n !hasAncestorWithNodeName(el, fabric.svgInvalidAncestorsRegEx); // http://www.w3.org/TR/SVG/struct.html#DefsElement\n });\n if (!elements || (elements && !elements.length)) {\n callback && callback([], {});\n return;\n }\n var clipPaths = { };\n descendants.filter(function(el) {\n return el.nodeName.replace('svg:', '') === 'clipPath';\n }).forEach(function(el) {\n var id = el.getAttribute('id');\n clipPaths[id] = fabric.util.toArray(el.getElementsByTagName('*')).filter(function(el) {\n return fabric.svgValidTagNamesRegEx.test(el.nodeName.replace('svg:', ''));\n });\n });\n fabric.gradientDefs[svgUid] = fabric.getGradientDefs(doc);\n fabric.cssRules[svgUid] = fabric.getCSSRules(doc);\n fabric.clipPaths[svgUid] = clipPaths;\n // Precedence of rules: style > class > attribute\n fabric.parseElements(elements, function(instances, elements) {\n if (callback) {\n callback(instances, options, elements, descendants);\n delete fabric.gradientDefs[svgUid];\n delete fabric.cssRules[svgUid];\n delete fabric.clipPaths[svgUid];\n }\n }, clone(options), reviver, parsingOptions);\n };\n\n function recursivelyParseGradientsXlink(doc, gradient) {\n var gradientsAttrs = ['gradientTransform', 'x1', 'x2', 'y1', 'y2', 'gradientUnits', 'cx', 'cy', 'r', 'fx', 'fy'],\n xlinkAttr = 'xlink:href',\n xLink = gradient.getAttribute(xlinkAttr).substr(1),\n referencedGradient = elementById(doc, xLink);\n if (referencedGradient && referencedGradient.getAttribute(xlinkAttr)) {\n recursivelyParseGradientsXlink(doc, referencedGradient);\n }\n gradientsAttrs.forEach(function(attr) {\n if (referencedGradient && !gradient.hasAttribute(attr) && referencedGradient.hasAttribute(attr)) {\n gradient.setAttribute(attr, referencedGradient.getAttribute(attr));\n }\n });\n if (!gradient.children.length) {\n var referenceClone = referencedGradient.cloneNode(true);\n while (referenceClone.firstChild) {\n gradient.appendChild(referenceClone.firstChild);\n }\n }\n gradient.removeAttribute(xlinkAttr);\n }\n\n var reFontDeclaration = new RegExp(\n '(normal|italic)?\\\\s*(normal|small-caps)?\\\\s*' +\n '(normal|bold|bolder|lighter|100|200|300|400|500|600|700|800|900)?\\\\s*(' +\n fabric.reNum +\n '(?:px|cm|mm|em|pt|pc|in)*)(?:\\\\/(normal|' + fabric.reNum + '))?\\\\s+(.*)');\n\n extend(fabric, {\n /**\n * Parses a short font declaration, building adding its properties to a style object\n * @static\n * @function\n * @memberOf fabric\n * @param {String} value font declaration\n * @param {Object} oStyle definition\n */\n parseFontDeclaration: function(value, oStyle) {\n var match = value.match(reFontDeclaration);\n\n if (!match) {\n return;\n }\n var fontStyle = match[1],\n // font variant is not used\n // fontVariant = match[2],\n fontWeight = match[3],\n fontSize = match[4],\n lineHeight = match[5],\n fontFamily = match[6];\n\n if (fontStyle) {\n oStyle.fontStyle = fontStyle;\n }\n if (fontWeight) {\n oStyle.fontWeight = isNaN(parseFloat(fontWeight)) ? fontWeight : parseFloat(fontWeight);\n }\n if (fontSize) {\n oStyle.fontSize = parseUnit(fontSize);\n }\n if (fontFamily) {\n oStyle.fontFamily = fontFamily;\n }\n if (lineHeight) {\n oStyle.lineHeight = lineHeight === 'normal' ? 1 : lineHeight;\n }\n },\n\n /**\n * Parses an SVG document, returning all of the gradient declarations found in it\n * @static\n * @function\n * @memberOf fabric\n * @param {SVGDocument} doc SVG document to parse\n * @return {Object} Gradient definitions; key corresponds to element id, value -- to gradient definition element\n */\n getGradientDefs: function(doc) {\n var tagArray = [\n 'linearGradient',\n 'radialGradient',\n 'svg:linearGradient',\n 'svg:radialGradient'],\n elList = _getMultipleNodes(doc, tagArray),\n el, j = 0, gradientDefs = { };\n j = elList.length;\n while (j--) {\n el = elList[j];\n if (el.getAttribute('xlink:href')) {\n recursivelyParseGradientsXlink(doc, el);\n }\n gradientDefs[el.getAttribute('id')] = el;\n }\n return gradientDefs;\n },\n\n /**\n * Returns an object of attributes' name/value, given element and an array of attribute names;\n * Parses parent \"g\" nodes recursively upwards.\n * @static\n * @memberOf fabric\n * @param {DOMElement} element Element to parse\n * @param {Array} attributes Array of attributes to parse\n * @return {Object} object containing parsed attributes' names/values\n */\n parseAttributes: function(element, attributes, svgUid) {\n\n if (!element) {\n return;\n }\n\n var value,\n parentAttributes = { },\n fontSize, parentFontSize;\n\n if (typeof svgUid === 'undefined') {\n svgUid = element.getAttribute('svgUid');\n }\n // if there's a parent container (`g` or `a` or `symbol` node), parse its attributes recursively upwards\n if (element.parentNode && fabric.svgValidParentsRegEx.test(element.parentNode.nodeName)) {\n parentAttributes = fabric.parseAttributes(element.parentNode, attributes, svgUid);\n }\n\n var ownAttributes = attributes.reduce(function(memo, attr) {\n value = element.getAttribute(attr);\n if (value) { // eslint-disable-line\n memo[attr] = value;\n }\n return memo;\n }, { });\n // add values parsed from style, which take precedence over attributes\n // (see: http://www.w3.org/TR/SVG/styling.html#UsingPresentationAttributes)\n var cssAttrs = extend(\n getGlobalStylesForElement(element, svgUid),\n fabric.parseStyleAttribute(element)\n );\n ownAttributes = extend(\n ownAttributes,\n cssAttrs\n );\n if (cssAttrs[cPath]) {\n element.setAttribute(cPath, cssAttrs[cPath]);\n }\n fontSize = parentFontSize = parentAttributes.fontSize || fabric.Text.DEFAULT_SVG_FONT_SIZE;\n if (ownAttributes[fSize]) {\n // looks like the minimum should be 9px when dealing with ems. this is what looks like in browsers.\n ownAttributes[fSize] = fontSize = parseUnit(ownAttributes[fSize], parentFontSize);\n }\n\n var normalizedAttr, normalizedValue, normalizedStyle = {};\n for (var attr in ownAttributes) {\n normalizedAttr = normalizeAttr(attr);\n normalizedValue = normalizeValue(normalizedAttr, ownAttributes[attr], parentAttributes, fontSize);\n normalizedStyle[normalizedAttr] = normalizedValue;\n }\n if (normalizedStyle && normalizedStyle.font) {\n fabric.parseFontDeclaration(normalizedStyle.font, normalizedStyle);\n }\n var mergedAttrs = extend(parentAttributes, normalizedStyle);\n return fabric.svgValidParentsRegEx.test(element.nodeName) ? mergedAttrs : _setStrokeFillOpacity(mergedAttrs);\n },\n\n /**\n * Transforms an array of svg elements to corresponding fabric.* instances\n * @static\n * @memberOf fabric\n * @param {Array} elements Array of elements to parse\n * @param {Function} callback Being passed an array of fabric instances (transformed from SVG elements)\n * @param {Object} [options] Options object\n * @param {Function} [reviver] Method for further parsing of SVG elements, called after each fabric object created.\n */\n parseElements: function(elements, callback, options, reviver, parsingOptions) {\n new fabric.ElementsParser(elements, callback, options, reviver, parsingOptions).parse();\n },\n\n /**\n * Parses \"style\" attribute, retuning an object with values\n * @static\n * @memberOf fabric\n * @param {SVGElement} element Element to parse\n * @return {Object} Objects with values parsed from style attribute of an element\n */\n parseStyleAttribute: function(element) {\n var oStyle = { },\n style = element.getAttribute('style');\n\n if (!style) {\n return oStyle;\n }\n\n if (typeof style === 'string') {\n parseStyleString(style, oStyle);\n }\n else {\n parseStyleObject(style, oStyle);\n }\n\n return oStyle;\n },\n\n /**\n * Parses \"points\" attribute, returning an array of values\n * @static\n * @memberOf fabric\n * @param {String} points points attribute string\n * @return {Array} array of points\n */\n parsePointsAttribute: function(points) {\n\n // points attribute is required and must not be empty\n if (!points) {\n return null;\n }\n\n // replace commas with whitespace and remove bookending whitespace\n points = points.replace(/,/g, ' ').trim();\n\n points = points.split(/\\s+/);\n var parsedPoints = [], i, len;\n\n for (i = 0, len = points.length; i < len; i += 2) {\n parsedPoints.push({\n x: parseFloat(points[i]),\n y: parseFloat(points[i + 1])\n });\n }\n\n // odd number of points is an error\n // if (parsedPoints.length % 2 !== 0) {\n // return null;\n // }\n\n return parsedPoints;\n },\n\n /**\n * Returns CSS rules for a given SVG document\n * @static\n * @function\n * @memberOf fabric\n * @param {SVGDocument} doc SVG document to parse\n * @return {Object} CSS rules of this document\n */\n getCSSRules: function(doc) {\n var styles = doc.getElementsByTagName('style'), i, len,\n allRules = { }, rules;\n\n // very crude parsing of style contents\n for (i = 0, len = styles.length; i < len; i++) {\n var styleContents = styles[i].textContent;\n\n // remove comments\n styleContents = styleContents.replace(/\\/\\*[\\s\\S]*?\\*\\//g, '');\n if (styleContents.trim() === '') {\n continue;\n }\n rules = styleContents.match(/[^{]*\\{[\\s\\S]*?\\}/g);\n rules = rules.map(function(rule) { return rule.trim(); });\n // eslint-disable-next-line no-loop-func\n rules.forEach(function(rule) {\n\n var match = rule.match(/([\\s\\S]*?)\\s*\\{([^}]*)\\}/),\n ruleObj = { }, declaration = match[2].trim(),\n propertyValuePairs = declaration.replace(/;$/, '').split(/\\s*;\\s*/);\n\n for (i = 0, len = propertyValuePairs.length; i < len; i++) {\n var pair = propertyValuePairs[i].split(/\\s*:\\s*/),\n property = pair[0],\n value = pair[1];\n ruleObj[property] = value;\n }\n rule = match[1];\n rule.split(',').forEach(function(_rule) {\n _rule = _rule.replace(/^svg/i, '').trim();\n if (_rule === '') {\n return;\n }\n if (allRules[_rule]) {\n fabric.util.object.extend(allRules[_rule], ruleObj);\n }\n else {\n allRules[_rule] = fabric.util.object.clone(ruleObj);\n }\n });\n });\n }\n return allRules;\n },\n\n /**\n * Takes url corresponding to an SVG document, and parses it into a set of fabric objects.\n * Note that SVG is fetched via XMLHttpRequest, so it needs to conform to SOP (Same Origin Policy)\n * @memberOf fabric\n * @param {String} url\n * @param {Function} callback\n * @param {Function} [reviver] Method for further parsing of SVG elements, called after each fabric object created.\n * @param {Object} [options] Object containing options for parsing\n * @param {String} [options.crossOrigin] crossOrigin crossOrigin setting to use for external resources\n */\n loadSVGFromURL: function(url, callback, reviver, options) {\n\n url = url.replace(/^\\n\\s*/, '').trim();\n new fabric.util.request(url, {\n method: 'get',\n onComplete: onComplete\n });\n\n function onComplete(r) {\n\n var xml = r.responseXML;\n if (!xml || !xml.documentElement) {\n callback && callback(null);\n return false;\n }\n\n fabric.parseSVGDocument(xml.documentElement, function (results, _options, elements, allElements) {\n callback && callback(results, _options, elements, allElements);\n }, reviver, options);\n }\n },\n\n /**\n * Takes string corresponding to an SVG document, and parses it into a set of fabric objects\n * @memberOf fabric\n * @param {String} string\n * @param {Function} callback\n * @param {Function} [reviver] Method for further parsing of SVG elements, called after each fabric object created.\n * @param {Object} [options] Object containing options for parsing\n * @param {String} [options.crossOrigin] crossOrigin crossOrigin setting to use for external resources\n */\n loadSVGFromString: function(string, callback, reviver, options) {\n var parser = new fabric.window.DOMParser(),\n doc = parser.parseFromString(string.trim(), 'text/xml');\n fabric.parseSVGDocument(doc.documentElement, function (results, _options, elements, allElements) {\n callback(results, _options, elements, allElements);\n }, reviver, options);\n }\n });\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\nfabric.ElementsParser = function(elements, callback, options, reviver, parsingOptions, doc) {\n this.elements = elements;\n this.callback = callback;\n this.options = options;\n this.reviver = reviver;\n this.svgUid = (options && options.svgUid) || 0;\n this.parsingOptions = parsingOptions;\n this.regexUrl = /^url\\(['\"]?#([^'\"]+)['\"]?\\)/g;\n this.doc = doc;\n};\n\n(function(proto) {\n proto.parse = function() {\n this.instances = new Array(this.elements.length);\n this.numElements = this.elements.length;\n this.createObjects();\n };\n\n proto.createObjects = function() {\n var _this = this;\n this.elements.forEach(function(element, i) {\n element.setAttribute('svgUid', _this.svgUid);\n _this.createObject(element, i);\n });\n };\n\n proto.findTag = function(el) {\n return fabric[fabric.util.string.capitalize(el.tagName.replace('svg:', ''))];\n };\n\n proto.createObject = function(el, index) {\n var klass = this.findTag(el);\n if (klass && klass.fromElement) {\n try {\n klass.fromElement(el, this.createCallback(index, el), this.options);\n }\n catch (err) {\n fabric.log(err);\n }\n }\n else {\n this.checkIfDone();\n }\n };\n\n proto.createCallback = function(index, el) {\n var _this = this;\n return function(obj) {\n var _options;\n _this.resolveGradient(obj, el, 'fill');\n _this.resolveGradient(obj, el, 'stroke');\n if (obj instanceof fabric.Image && obj._originalElement) {\n _options = obj.parsePreserveAspectRatioAttribute(el);\n }\n obj._removeTransformMatrix(_options);\n _this.resolveClipPath(obj, el);\n _this.reviver && _this.reviver(el, obj);\n _this.instances[index] = obj;\n _this.checkIfDone();\n };\n };\n\n proto.extractPropertyDefinition = function(obj, property, storage) {\n var value = obj[property], regex = this.regexUrl;\n if (!regex.test(value)) {\n return;\n }\n regex.lastIndex = 0;\n var id = regex.exec(value)[1];\n regex.lastIndex = 0;\n return fabric[storage][this.svgUid][id];\n };\n\n proto.resolveGradient = function(obj, el, property) {\n var gradientDef = this.extractPropertyDefinition(obj, property, 'gradientDefs');\n if (gradientDef) {\n var opacityAttr = el.getAttribute(property + '-opacity');\n var gradient = fabric.Gradient.fromElement(gradientDef, obj, opacityAttr, this.options);\n obj.set(property, gradient);\n }\n };\n\n proto.createClipPathCallback = function(obj, container) {\n return function(_newObj) {\n _newObj._removeTransformMatrix();\n _newObj.fillRule = _newObj.clipRule;\n container.push(_newObj);\n };\n };\n\n proto.resolveClipPath = function(obj, usingElement) {\n var clipPath = this.extractPropertyDefinition(obj, 'clipPath', 'clipPaths'),\n element, klass, objTransformInv, container, gTransform, options;\n if (clipPath) {\n container = [];\n objTransformInv = fabric.util.invertTransform(obj.calcTransformMatrix());\n // move the clipPath tag as sibling to the real element that is using it\n var clipPathTag = clipPath[0].parentNode;\n var clipPathOwner = usingElement;\n while (clipPathOwner.parentNode && clipPathOwner.getAttribute('clip-path') !== obj.clipPath) {\n clipPathOwner = clipPathOwner.parentNode;\n }\n clipPathOwner.parentNode.appendChild(clipPathTag);\n for (var i = 0; i < clipPath.length; i++) {\n element = clipPath[i];\n klass = this.findTag(element);\n klass.fromElement(\n element,\n this.createClipPathCallback(obj, container),\n this.options\n );\n }\n if (container.length === 1) {\n clipPath = container[0];\n }\n else {\n clipPath = new fabric.Group(container);\n }\n gTransform = fabric.util.multiplyTransformMatrices(\n objTransformInv,\n clipPath.calcTransformMatrix()\n );\n if (clipPath.clipPath) {\n this.resolveClipPath(clipPath, clipPathOwner);\n }\n var options = fabric.util.qrDecompose(gTransform);\n clipPath.flipX = false;\n clipPath.flipY = false;\n clipPath.set('scaleX', options.scaleX);\n clipPath.set('scaleY', options.scaleY);\n clipPath.angle = options.angle;\n clipPath.skewX = options.skewX;\n clipPath.skewY = 0;\n clipPath.setPositionByOrigin({ x: options.translateX, y: options.translateY }, 'center', 'center');\n obj.clipPath = clipPath;\n }\n else {\n // if clip-path does not resolve to any element, delete the property.\n delete obj.clipPath;\n }\n };\n\n proto.checkIfDone = function() {\n if (--this.numElements === 0) {\n this.instances = this.instances.filter(function(el) {\n // eslint-disable-next-line no-eq-null, eqeqeq\n return el != null;\n });\n this.callback(this.instances, this.elements);\n }\n };\n})(fabric.ElementsParser.prototype);\n\n\n(function(global) {\n\n 'use strict';\n\n /* Adaptation of work of Kevin Lindsey (kevin@kevlindev.com) */\n\n var fabric = global.fabric || (global.fabric = { });\n\n if (fabric.Point) {\n fabric.warn('fabric.Point is already defined');\n return;\n }\n\n fabric.Point = Point;\n\n /**\n * Point class\n * @class fabric.Point\n * @memberOf fabric\n * @constructor\n * @param {Number} x\n * @param {Number} y\n * @return {fabric.Point} thisArg\n */\n function Point(x, y) {\n this.x = x;\n this.y = y;\n }\n\n Point.prototype = /** @lends fabric.Point.prototype */ {\n\n type: 'point',\n\n constructor: Point,\n\n /**\n * Adds another point to this one and returns another one\n * @param {fabric.Point} that\n * @return {fabric.Point} new Point instance with added values\n */\n add: function (that) {\n return new Point(this.x + that.x, this.y + that.y);\n },\n\n /**\n * Adds another point to this one\n * @param {fabric.Point} that\n * @return {fabric.Point} thisArg\n * @chainable\n */\n addEquals: function (that) {\n this.x += that.x;\n this.y += that.y;\n return this;\n },\n\n /**\n * Adds value to this point and returns a new one\n * @param {Number} scalar\n * @return {fabric.Point} new Point with added value\n */\n scalarAdd: function (scalar) {\n return new Point(this.x + scalar, this.y + scalar);\n },\n\n /**\n * Adds value to this point\n * @param {Number} scalar\n * @return {fabric.Point} thisArg\n * @chainable\n */\n scalarAddEquals: function (scalar) {\n this.x += scalar;\n this.y += scalar;\n return this;\n },\n\n /**\n * Subtracts another point from this point and returns a new one\n * @param {fabric.Point} that\n * @return {fabric.Point} new Point object with subtracted values\n */\n subtract: function (that) {\n return new Point(this.x - that.x, this.y - that.y);\n },\n\n /**\n * Subtracts another point from this point\n * @param {fabric.Point} that\n * @return {fabric.Point} thisArg\n * @chainable\n */\n subtractEquals: function (that) {\n this.x -= that.x;\n this.y -= that.y;\n return this;\n },\n\n /**\n * Subtracts value from this point and returns a new one\n * @param {Number} scalar\n * @return {fabric.Point}\n */\n scalarSubtract: function (scalar) {\n return new Point(this.x - scalar, this.y - scalar);\n },\n\n /**\n * Subtracts value from this point\n * @param {Number} scalar\n * @return {fabric.Point} thisArg\n * @chainable\n */\n scalarSubtractEquals: function (scalar) {\n this.x -= scalar;\n this.y -= scalar;\n return this;\n },\n\n /**\n * Multiplies this point by a value and returns a new one\n * TODO: rename in scalarMultiply in 2.0\n * @param {Number} scalar\n * @return {fabric.Point}\n */\n multiply: function (scalar) {\n return new Point(this.x * scalar, this.y * scalar);\n },\n\n /**\n * Multiplies this point by a value\n * TODO: rename in scalarMultiplyEquals in 2.0\n * @param {Number} scalar\n * @return {fabric.Point} thisArg\n * @chainable\n */\n multiplyEquals: function (scalar) {\n this.x *= scalar;\n this.y *= scalar;\n return this;\n },\n\n /**\n * Divides this point by a value and returns a new one\n * TODO: rename in scalarDivide in 2.0\n * @param {Number} scalar\n * @return {fabric.Point}\n */\n divide: function (scalar) {\n return new Point(this.x / scalar, this.y / scalar);\n },\n\n /**\n * Divides this point by a value\n * TODO: rename in scalarDivideEquals in 2.0\n * @param {Number} scalar\n * @return {fabric.Point} thisArg\n * @chainable\n */\n divideEquals: function (scalar) {\n this.x /= scalar;\n this.y /= scalar;\n return this;\n },\n\n /**\n * Returns true if this point is equal to another one\n * @param {fabric.Point} that\n * @return {Boolean}\n */\n eq: function (that) {\n return (this.x === that.x && this.y === that.y);\n },\n\n /**\n * Returns true if this point is less than another one\n * @param {fabric.Point} that\n * @return {Boolean}\n */\n lt: function (that) {\n return (this.x < that.x && this.y < that.y);\n },\n\n /**\n * Returns true if this point is less than or equal to another one\n * @param {fabric.Point} that\n * @return {Boolean}\n */\n lte: function (that) {\n return (this.x <= that.x && this.y <= that.y);\n },\n\n /**\n\n * Returns true if this point is greater another one\n * @param {fabric.Point} that\n * @return {Boolean}\n */\n gt: function (that) {\n return (this.x > that.x && this.y > that.y);\n },\n\n /**\n * Returns true if this point is greater than or equal to another one\n * @param {fabric.Point} that\n * @return {Boolean}\n */\n gte: function (that) {\n return (this.x >= that.x && this.y >= that.y);\n },\n\n /**\n * Returns new point which is the result of linear interpolation with this one and another one\n * @param {fabric.Point} that\n * @param {Number} t , position of interpolation, between 0 and 1 default 0.5\n * @return {fabric.Point}\n */\n lerp: function (that, t) {\n if (typeof t === 'undefined') {\n t = 0.5;\n }\n t = Math.max(Math.min(1, t), 0);\n return new Point(this.x + (that.x - this.x) * t, this.y + (that.y - this.y) * t);\n },\n\n /**\n * Returns distance from this point and another one\n * @param {fabric.Point} that\n * @return {Number}\n */\n distanceFrom: function (that) {\n var dx = this.x - that.x,\n dy = this.y - that.y;\n return Math.sqrt(dx * dx + dy * dy);\n },\n\n /**\n * Returns the point between this point and another one\n * @param {fabric.Point} that\n * @return {fabric.Point}\n */\n midPointFrom: function (that) {\n return this.lerp(that);\n },\n\n /**\n * Returns a new point which is the min of this and another one\n * @param {fabric.Point} that\n * @return {fabric.Point}\n */\n min: function (that) {\n return new Point(Math.min(this.x, that.x), Math.min(this.y, that.y));\n },\n\n /**\n * Returns a new point which is the max of this and another one\n * @param {fabric.Point} that\n * @return {fabric.Point}\n */\n max: function (that) {\n return new Point(Math.max(this.x, that.x), Math.max(this.y, that.y));\n },\n\n /**\n * Returns string representation of this point\n * @return {String}\n */\n toString: function () {\n return this.x + ',' + this.y;\n },\n\n /**\n * Sets x/y of this point\n * @param {Number} x\n * @param {Number} y\n * @chainable\n */\n setXY: function (x, y) {\n this.x = x;\n this.y = y;\n return this;\n },\n\n /**\n * Sets x of this point\n * @param {Number} x\n * @chainable\n */\n setX: function (x) {\n this.x = x;\n return this;\n },\n\n /**\n * Sets y of this point\n * @param {Number} y\n * @chainable\n */\n setY: function (y) {\n this.y = y;\n return this;\n },\n\n /**\n * Sets x/y of this point from another point\n * @param {fabric.Point} that\n * @chainable\n */\n setFromPoint: function (that) {\n this.x = that.x;\n this.y = that.y;\n return this;\n },\n\n /**\n * Swaps x/y of this point and another point\n * @param {fabric.Point} that\n */\n swap: function (that) {\n var x = this.x,\n y = this.y;\n this.x = that.x;\n this.y = that.y;\n that.x = x;\n that.y = y;\n },\n\n /**\n * return a cloned instance of the point\n * @return {fabric.Point}\n */\n clone: function () {\n return new Point(this.x, this.y);\n }\n };\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n /* Adaptation of work of Kevin Lindsey (kevin@kevlindev.com) */\n var fabric = global.fabric || (global.fabric = { });\n\n if (fabric.Intersection) {\n fabric.warn('fabric.Intersection is already defined');\n return;\n }\n\n /**\n * Intersection class\n * @class fabric.Intersection\n * @memberOf fabric\n * @constructor\n */\n function Intersection(status) {\n this.status = status;\n this.points = [];\n }\n\n fabric.Intersection = Intersection;\n\n fabric.Intersection.prototype = /** @lends fabric.Intersection.prototype */ {\n\n constructor: Intersection,\n\n /**\n * Appends a point to intersection\n * @param {fabric.Point} point\n * @return {fabric.Intersection} thisArg\n * @chainable\n */\n appendPoint: function (point) {\n this.points.push(point);\n return this;\n },\n\n /**\n * Appends points to intersection\n * @param {Array} points\n * @return {fabric.Intersection} thisArg\n * @chainable\n */\n appendPoints: function (points) {\n this.points = this.points.concat(points);\n return this;\n }\n };\n\n /**\n * Checks if one line intersects another\n * TODO: rename in intersectSegmentSegment\n * @static\n * @param {fabric.Point} a1\n * @param {fabric.Point} a2\n * @param {fabric.Point} b1\n * @param {fabric.Point} b2\n * @return {fabric.Intersection}\n */\n fabric.Intersection.intersectLineLine = function (a1, a2, b1, b2) {\n var result,\n uaT = (b2.x - b1.x) * (a1.y - b1.y) - (b2.y - b1.y) * (a1.x - b1.x),\n ubT = (a2.x - a1.x) * (a1.y - b1.y) - (a2.y - a1.y) * (a1.x - b1.x),\n uB = (b2.y - b1.y) * (a2.x - a1.x) - (b2.x - b1.x) * (a2.y - a1.y);\n if (uB !== 0) {\n var ua = uaT / uB,\n ub = ubT / uB;\n if (0 <= ua && ua <= 1 && 0 <= ub && ub <= 1) {\n result = new Intersection('Intersection');\n result.appendPoint(new fabric.Point(a1.x + ua * (a2.x - a1.x), a1.y + ua * (a2.y - a1.y)));\n }\n else {\n result = new Intersection();\n }\n }\n else {\n if (uaT === 0 || ubT === 0) {\n result = new Intersection('Coincident');\n }\n else {\n result = new Intersection('Parallel');\n }\n }\n return result;\n };\n\n /**\n * Checks if line intersects polygon\n * TODO: rename in intersectSegmentPolygon\n * fix detection of coincident\n * @static\n * @param {fabric.Point} a1\n * @param {fabric.Point} a2\n * @param {Array} points\n * @return {fabric.Intersection}\n */\n fabric.Intersection.intersectLinePolygon = function(a1, a2, points) {\n var result = new Intersection(),\n length = points.length,\n b1, b2, inter, i;\n\n for (i = 0; i < length; i++) {\n b1 = points[i];\n b2 = points[(i + 1) % length];\n inter = Intersection.intersectLineLine(a1, a2, b1, b2);\n\n result.appendPoints(inter.points);\n }\n if (result.points.length > 0) {\n result.status = 'Intersection';\n }\n return result;\n };\n\n /**\n * Checks if polygon intersects another polygon\n * @static\n * @param {Array} points1\n * @param {Array} points2\n * @return {fabric.Intersection}\n */\n fabric.Intersection.intersectPolygonPolygon = function (points1, points2) {\n var result = new Intersection(),\n length = points1.length, i;\n\n for (i = 0; i < length; i++) {\n var a1 = points1[i],\n a2 = points1[(i + 1) % length],\n inter = Intersection.intersectLinePolygon(a1, a2, points2);\n\n result.appendPoints(inter.points);\n }\n if (result.points.length > 0) {\n result.status = 'Intersection';\n }\n return result;\n };\n\n /**\n * Checks if polygon intersects rectangle\n * @static\n * @param {Array} points\n * @param {fabric.Point} r1\n * @param {fabric.Point} r2\n * @return {fabric.Intersection}\n */\n fabric.Intersection.intersectPolygonRectangle = function (points, r1, r2) {\n var min = r1.min(r2),\n max = r1.max(r2),\n topRight = new fabric.Point(max.x, min.y),\n bottomLeft = new fabric.Point(min.x, max.y),\n inter1 = Intersection.intersectLinePolygon(min, topRight, points),\n inter2 = Intersection.intersectLinePolygon(topRight, max, points),\n inter3 = Intersection.intersectLinePolygon(max, bottomLeft, points),\n inter4 = Intersection.intersectLinePolygon(bottomLeft, min, points),\n result = new Intersection();\n\n result.appendPoints(inter1.points);\n result.appendPoints(inter2.points);\n result.appendPoints(inter3.points);\n result.appendPoints(inter4.points);\n\n if (result.points.length > 0) {\n result.status = 'Intersection';\n }\n return result;\n };\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { });\n\n if (fabric.Color) {\n fabric.warn('fabric.Color is already defined.');\n return;\n }\n\n /**\n * Color class\n * The purpose of {@link fabric.Color} is to abstract and encapsulate common color operations;\n * {@link fabric.Color} is a constructor and creates instances of {@link fabric.Color} objects.\n *\n * @class fabric.Color\n * @param {String} color optional in hex or rgb(a) or hsl format or from known color list\n * @return {fabric.Color} thisArg\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-2/#colors}\n */\n function Color(color) {\n if (!color) {\n this.setSource([0, 0, 0, 1]);\n }\n else {\n this._tryParsingColor(color);\n }\n }\n\n fabric.Color = Color;\n\n fabric.Color.prototype = /** @lends fabric.Color.prototype */ {\n\n /**\n * @private\n * @param {String|Array} color Color value to parse\n */\n _tryParsingColor: function(color) {\n var source;\n\n if (color in Color.colorNameMap) {\n color = Color.colorNameMap[color];\n }\n\n if (color === 'transparent') {\n source = [255, 255, 255, 0];\n }\n\n if (!source) {\n source = Color.sourceFromHex(color);\n }\n if (!source) {\n source = Color.sourceFromRgb(color);\n }\n if (!source) {\n source = Color.sourceFromHsl(color);\n }\n if (!source) {\n //if color is not recognize let's make black as canvas does\n source = [0, 0, 0, 1];\n }\n if (source) {\n this.setSource(source);\n }\n },\n\n /**\n * Adapted from https://github.com/mjijackson\n * @private\n * @param {Number} r Red color value\n * @param {Number} g Green color value\n * @param {Number} b Blue color value\n * @return {Array} Hsl color\n */\n _rgbToHsl: function(r, g, b) {\n r /= 255; g /= 255; b /= 255;\n\n var h, s, l,\n max = fabric.util.array.max([r, g, b]),\n min = fabric.util.array.min([r, g, b]);\n\n l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0; // achromatic\n }\n else {\n var d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n\n return [\n Math.round(h * 360),\n Math.round(s * 100),\n Math.round(l * 100)\n ];\n },\n\n /**\n * Returns source of this color (where source is an array representation; ex: [200, 200, 100, 1])\n * @return {Array}\n */\n getSource: function() {\n return this._source;\n },\n\n /**\n * Sets source of this color (where source is an array representation; ex: [200, 200, 100, 1])\n * @param {Array} source\n */\n setSource: function(source) {\n this._source = source;\n },\n\n /**\n * Returns color representation in RGB format\n * @return {String} ex: rgb(0-255,0-255,0-255)\n */\n toRgb: function() {\n var source = this.getSource();\n return 'rgb(' + source[0] + ',' + source[1] + ',' + source[2] + ')';\n },\n\n /**\n * Returns color representation in RGBA format\n * @return {String} ex: rgba(0-255,0-255,0-255,0-1)\n */\n toRgba: function() {\n var source = this.getSource();\n return 'rgba(' + source[0] + ',' + source[1] + ',' + source[2] + ',' + source[3] + ')';\n },\n\n /**\n * Returns color representation in HSL format\n * @return {String} ex: hsl(0-360,0%-100%,0%-100%)\n */\n toHsl: function() {\n var source = this.getSource(),\n hsl = this._rgbToHsl(source[0], source[1], source[2]);\n\n return 'hsl(' + hsl[0] + ',' + hsl[1] + '%,' + hsl[2] + '%)';\n },\n\n /**\n * Returns color representation in HSLA format\n * @return {String} ex: hsla(0-360,0%-100%,0%-100%,0-1)\n */\n toHsla: function() {\n var source = this.getSource(),\n hsl = this._rgbToHsl(source[0], source[1], source[2]);\n\n return 'hsla(' + hsl[0] + ',' + hsl[1] + '%,' + hsl[2] + '%,' + source[3] + ')';\n },\n\n /**\n * Returns color representation in HEX format\n * @return {String} ex: FF5555\n */\n toHex: function() {\n var source = this.getSource(), r, g, b;\n\n r = source[0].toString(16);\n r = (r.length === 1) ? ('0' + r) : r;\n\n g = source[1].toString(16);\n g = (g.length === 1) ? ('0' + g) : g;\n\n b = source[2].toString(16);\n b = (b.length === 1) ? ('0' + b) : b;\n\n return r.toUpperCase() + g.toUpperCase() + b.toUpperCase();\n },\n\n /**\n * Returns color representation in HEXA format\n * @return {String} ex: FF5555CC\n */\n toHexa: function() {\n var source = this.getSource(), a;\n\n a = Math.round(source[3] * 255);\n a = a.toString(16);\n a = (a.length === 1) ? ('0' + a) : a;\n\n return this.toHex() + a.toUpperCase();\n },\n\n /**\n * Gets value of alpha channel for this color\n * @return {Number} 0-1\n */\n getAlpha: function() {\n return this.getSource()[3];\n },\n\n /**\n * Sets value of alpha channel for this color\n * @param {Number} alpha Alpha value 0-1\n * @return {fabric.Color} thisArg\n */\n setAlpha: function(alpha) {\n var source = this.getSource();\n source[3] = alpha;\n this.setSource(source);\n return this;\n },\n\n /**\n * Transforms color to its grayscale representation\n * @return {fabric.Color} thisArg\n */\n toGrayscale: function() {\n var source = this.getSource(),\n average = parseInt((source[0] * 0.3 + source[1] * 0.59 + source[2] * 0.11).toFixed(0), 10),\n currentAlpha = source[3];\n this.setSource([average, average, average, currentAlpha]);\n return this;\n },\n\n /**\n * Transforms color to its black and white representation\n * @param {Number} threshold\n * @return {fabric.Color} thisArg\n */\n toBlackWhite: function(threshold) {\n var source = this.getSource(),\n average = (source[0] * 0.3 + source[1] * 0.59 + source[2] * 0.11).toFixed(0),\n currentAlpha = source[3];\n\n threshold = threshold || 127;\n\n average = (Number(average) < Number(threshold)) ? 0 : 255;\n this.setSource([average, average, average, currentAlpha]);\n return this;\n },\n\n /**\n * Overlays color with another color\n * @param {String|fabric.Color} otherColor\n * @return {fabric.Color} thisArg\n */\n overlayWith: function(otherColor) {\n if (!(otherColor instanceof Color)) {\n otherColor = new Color(otherColor);\n }\n\n var result = [],\n alpha = this.getAlpha(),\n otherAlpha = 0.5,\n source = this.getSource(),\n otherSource = otherColor.getSource(), i;\n\n for (i = 0; i < 3; i++) {\n result.push(Math.round((source[i] * (1 - otherAlpha)) + (otherSource[i] * otherAlpha)));\n }\n\n result[3] = alpha;\n this.setSource(result);\n return this;\n }\n };\n\n /**\n * Regex matching color in RGB or RGBA formats (ex: rgb(0, 0, 0), rgba(255, 100, 10, 0.5), rgba( 255 , 100 , 10 , 0.5 ), rgb(1,1,1), rgba(100%, 60%, 10%, 0.5))\n * @static\n * @field\n * @memberOf fabric.Color\n */\n // eslint-disable-next-line max-len\n fabric.Color.reRGBa = /^rgba?\\(\\s*(\\d{1,3}(?:\\.\\d+)?\\%?)\\s*,\\s*(\\d{1,3}(?:\\.\\d+)?\\%?)\\s*,\\s*(\\d{1,3}(?:\\.\\d+)?\\%?)\\s*(?:\\s*,\\s*((?:\\d*\\.?\\d+)?)\\s*)?\\)$/i;\n\n /**\n * Regex matching color in HSL or HSLA formats (ex: hsl(200, 80%, 10%), hsla(300, 50%, 80%, 0.5), hsla( 300 , 50% , 80% , 0.5 ))\n * @static\n * @field\n * @memberOf fabric.Color\n */\n fabric.Color.reHSLa = /^hsla?\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3}\\%)\\s*,\\s*(\\d{1,3}\\%)\\s*(?:\\s*,\\s*(\\d+(?:\\.\\d+)?)\\s*)?\\)$/i;\n\n /**\n * Regex matching color in HEX format (ex: #FF5544CC, #FF5555, 010155, aff)\n * @static\n * @field\n * @memberOf fabric.Color\n */\n fabric.Color.reHex = /^#?([0-9a-f]{8}|[0-9a-f]{6}|[0-9a-f]{4}|[0-9a-f]{3})$/i;\n\n /**\n * Map of the 148 color names with HEX code\n * @static\n * @field\n * @memberOf fabric.Color\n * @see: https://www.w3.org/TR/css3-color/#svg-color\n */\n fabric.Color.colorNameMap = {\n aliceblue: '#F0F8FF',\n antiquewhite: '#FAEBD7',\n aqua: '#00FFFF',\n aquamarine: '#7FFFD4',\n azure: '#F0FFFF',\n beige: '#F5F5DC',\n bisque: '#FFE4C4',\n black: '#000000',\n blanchedalmond: '#FFEBCD',\n blue: '#0000FF',\n blueviolet: '#8A2BE2',\n brown: '#A52A2A',\n burlywood: '#DEB887',\n cadetblue: '#5F9EA0',\n chartreuse: '#7FFF00',\n chocolate: '#D2691E',\n coral: '#FF7F50',\n cornflowerblue: '#6495ED',\n cornsilk: '#FFF8DC',\n crimson: '#DC143C',\n cyan: '#00FFFF',\n darkblue: '#00008B',\n darkcyan: '#008B8B',\n darkgoldenrod: '#B8860B',\n darkgray: '#A9A9A9',\n darkgrey: '#A9A9A9',\n darkgreen: '#006400',\n darkkhaki: '#BDB76B',\n darkmagenta: '#8B008B',\n darkolivegreen: '#556B2F',\n darkorange: '#FF8C00',\n darkorchid: '#9932CC',\n darkred: '#8B0000',\n darksalmon: '#E9967A',\n darkseagreen: '#8FBC8F',\n darkslateblue: '#483D8B',\n darkslategray: '#2F4F4F',\n darkslategrey: '#2F4F4F',\n darkturquoise: '#00CED1',\n darkviolet: '#9400D3',\n deeppink: '#FF1493',\n deepskyblue: '#00BFFF',\n dimgray: '#696969',\n dimgrey: '#696969',\n dodgerblue: '#1E90FF',\n firebrick: '#B22222',\n floralwhite: '#FFFAF0',\n forestgreen: '#228B22',\n fuchsia: '#FF00FF',\n gainsboro: '#DCDCDC',\n ghostwhite: '#F8F8FF',\n gold: '#FFD700',\n goldenrod: '#DAA520',\n gray: '#808080',\n grey: '#808080',\n green: '#008000',\n greenyellow: '#ADFF2F',\n honeydew: '#F0FFF0',\n hotpink: '#FF69B4',\n indianred: '#CD5C5C',\n indigo: '#4B0082',\n ivory: '#FFFFF0',\n khaki: '#F0E68C',\n lavender: '#E6E6FA',\n lavenderblush: '#FFF0F5',\n lawngreen: '#7CFC00',\n lemonchiffon: '#FFFACD',\n lightblue: '#ADD8E6',\n lightcoral: '#F08080',\n lightcyan: '#E0FFFF',\n lightgoldenrodyellow: '#FAFAD2',\n lightgray: '#D3D3D3',\n lightgrey: '#D3D3D3',\n lightgreen: '#90EE90',\n lightpink: '#FFB6C1',\n lightsalmon: '#FFA07A',\n lightseagreen: '#20B2AA',\n lightskyblue: '#87CEFA',\n lightslategray: '#778899',\n lightslategrey: '#778899',\n lightsteelblue: '#B0C4DE',\n lightyellow: '#FFFFE0',\n lime: '#00FF00',\n limegreen: '#32CD32',\n linen: '#FAF0E6',\n magenta: '#FF00FF',\n maroon: '#800000',\n mediumaquamarine: '#66CDAA',\n mediumblue: '#0000CD',\n mediumorchid: '#BA55D3',\n mediumpurple: '#9370DB',\n mediumseagreen: '#3CB371',\n mediumslateblue: '#7B68EE',\n mediumspringgreen: '#00FA9A',\n mediumturquoise: '#48D1CC',\n mediumvioletred: '#C71585',\n midnightblue: '#191970',\n mintcream: '#F5FFFA',\n mistyrose: '#FFE4E1',\n moccasin: '#FFE4B5',\n navajowhite: '#FFDEAD',\n navy: '#000080',\n oldlace: '#FDF5E6',\n olive: '#808000',\n olivedrab: '#6B8E23',\n orange: '#FFA500',\n orangered: '#FF4500',\n orchid: '#DA70D6',\n palegoldenrod: '#EEE8AA',\n palegreen: '#98FB98',\n paleturquoise: '#AFEEEE',\n palevioletred: '#DB7093',\n papayawhip: '#FFEFD5',\n peachpuff: '#FFDAB9',\n peru: '#CD853F',\n pink: '#FFC0CB',\n plum: '#DDA0DD',\n powderblue: '#B0E0E6',\n purple: '#800080',\n rebeccapurple: '#663399',\n red: '#FF0000',\n rosybrown: '#BC8F8F',\n royalblue: '#4169E1',\n saddlebrown: '#8B4513',\n salmon: '#FA8072',\n sandybrown: '#F4A460',\n seagreen: '#2E8B57',\n seashell: '#FFF5EE',\n sienna: '#A0522D',\n silver: '#C0C0C0',\n skyblue: '#87CEEB',\n slateblue: '#6A5ACD',\n slategray: '#708090',\n slategrey: '#708090',\n snow: '#FFFAFA',\n springgreen: '#00FF7F',\n steelblue: '#4682B4',\n tan: '#D2B48C',\n teal: '#008080',\n thistle: '#D8BFD8',\n tomato: '#FF6347',\n turquoise: '#40E0D0',\n violet: '#EE82EE',\n wheat: '#F5DEB3',\n white: '#FFFFFF',\n whitesmoke: '#F5F5F5',\n yellow: '#FFFF00',\n yellowgreen: '#9ACD32'\n };\n\n /**\n * @private\n * @param {Number} p\n * @param {Number} q\n * @param {Number} t\n * @return {Number}\n */\n function hue2rgb(p, q, t) {\n if (t < 0) {\n t += 1;\n }\n if (t > 1) {\n t -= 1;\n }\n if (t < 1 / 6) {\n return p + (q - p) * 6 * t;\n }\n if (t < 1 / 2) {\n return q;\n }\n if (t < 2 / 3) {\n return p + (q - p) * (2 / 3 - t) * 6;\n }\n return p;\n }\n\n /**\n * Returns new color object, when given a color in RGB format\n * @memberOf fabric.Color\n * @param {String} color Color value ex: rgb(0-255,0-255,0-255)\n * @return {fabric.Color}\n */\n fabric.Color.fromRgb = function(color) {\n return Color.fromSource(Color.sourceFromRgb(color));\n };\n\n /**\n * Returns array representation (ex: [100, 100, 200, 1]) of a color that's in RGB or RGBA format\n * @memberOf fabric.Color\n * @param {String} color Color value ex: rgb(0-255,0-255,0-255), rgb(0%-100%,0%-100%,0%-100%)\n * @return {Array} source\n */\n fabric.Color.sourceFromRgb = function(color) {\n var match = color.match(Color.reRGBa);\n if (match) {\n var r = parseInt(match[1], 10) / (/%$/.test(match[1]) ? 100 : 1) * (/%$/.test(match[1]) ? 255 : 1),\n g = parseInt(match[2], 10) / (/%$/.test(match[2]) ? 100 : 1) * (/%$/.test(match[2]) ? 255 : 1),\n b = parseInt(match[3], 10) / (/%$/.test(match[3]) ? 100 : 1) * (/%$/.test(match[3]) ? 255 : 1);\n\n return [\n parseInt(r, 10),\n parseInt(g, 10),\n parseInt(b, 10),\n match[4] ? parseFloat(match[4]) : 1\n ];\n }\n };\n\n /**\n * Returns new color object, when given a color in RGBA format\n * @static\n * @function\n * @memberOf fabric.Color\n * @param {String} color\n * @return {fabric.Color}\n */\n fabric.Color.fromRgba = Color.fromRgb;\n\n /**\n * Returns new color object, when given a color in HSL format\n * @param {String} color Color value ex: hsl(0-260,0%-100%,0%-100%)\n * @memberOf fabric.Color\n * @return {fabric.Color}\n */\n fabric.Color.fromHsl = function(color) {\n return Color.fromSource(Color.sourceFromHsl(color));\n };\n\n /**\n * Returns array representation (ex: [100, 100, 200, 1]) of a color that's in HSL or HSLA format.\n * Adapted from https://github.com/mjijackson\n * @memberOf fabric.Color\n * @param {String} color Color value ex: hsl(0-360,0%-100%,0%-100%) or hsla(0-360,0%-100%,0%-100%, 0-1)\n * @return {Array} source\n * @see http://http://www.w3.org/TR/css3-color/#hsl-color\n */\n fabric.Color.sourceFromHsl = function(color) {\n var match = color.match(Color.reHSLa);\n if (!match) {\n return;\n }\n\n var h = (((parseFloat(match[1]) % 360) + 360) % 360) / 360,\n s = parseFloat(match[2]) / (/%$/.test(match[2]) ? 100 : 1),\n l = parseFloat(match[3]) / (/%$/.test(match[3]) ? 100 : 1),\n r, g, b;\n\n if (s === 0) {\n r = g = b = l;\n }\n else {\n var q = l <= 0.5 ? l * (s + 1) : l + s - l * s,\n p = l * 2 - q;\n\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return [\n Math.round(r * 255),\n Math.round(g * 255),\n Math.round(b * 255),\n match[4] ? parseFloat(match[4]) : 1\n ];\n };\n\n /**\n * Returns new color object, when given a color in HSLA format\n * @static\n * @function\n * @memberOf fabric.Color\n * @param {String} color\n * @return {fabric.Color}\n */\n fabric.Color.fromHsla = Color.fromHsl;\n\n /**\n * Returns new color object, when given a color in HEX format\n * @static\n * @memberOf fabric.Color\n * @param {String} color Color value ex: FF5555\n * @return {fabric.Color}\n */\n fabric.Color.fromHex = function(color) {\n return Color.fromSource(Color.sourceFromHex(color));\n };\n\n /**\n * Returns array representation (ex: [100, 100, 200, 1]) of a color that's in HEX format\n * @static\n * @memberOf fabric.Color\n * @param {String} color ex: FF5555 or FF5544CC (RGBa)\n * @return {Array} source\n */\n fabric.Color.sourceFromHex = function(color) {\n if (color.match(Color.reHex)) {\n var value = color.slice(color.indexOf('#') + 1),\n isShortNotation = (value.length === 3 || value.length === 4),\n isRGBa = (value.length === 8 || value.length === 4),\n r = isShortNotation ? (value.charAt(0) + value.charAt(0)) : value.substring(0, 2),\n g = isShortNotation ? (value.charAt(1) + value.charAt(1)) : value.substring(2, 4),\n b = isShortNotation ? (value.charAt(2) + value.charAt(2)) : value.substring(4, 6),\n a = isRGBa ? (isShortNotation ? (value.charAt(3) + value.charAt(3)) : value.substring(6, 8)) : 'FF';\n\n return [\n parseInt(r, 16),\n parseInt(g, 16),\n parseInt(b, 16),\n parseFloat((parseInt(a, 16) / 255).toFixed(2))\n ];\n }\n };\n\n /**\n * Returns new color object, when given color in array representation (ex: [200, 100, 100, 0.5])\n * @static\n * @memberOf fabric.Color\n * @param {Array} source\n * @return {fabric.Color}\n */\n fabric.Color.fromSource = function(source) {\n var oColor = new Color();\n oColor.setSource(source);\n return oColor;\n };\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n scaleMap = ['e', 'se', 's', 'sw', 'w', 'nw', 'n', 'ne', 'e'],\n skewMap = ['ns', 'nesw', 'ew', 'nwse'],\n controls = {},\n LEFT = 'left', TOP = 'top', RIGHT = 'right', BOTTOM = 'bottom', CENTER = 'center',\n opposite = {\n top: BOTTOM,\n bottom: TOP,\n left: RIGHT,\n right: LEFT,\n center: CENTER,\n }, radiansToDegrees = fabric.util.radiansToDegrees,\n sign = (Math.sign || function(x) { return ((x > 0) - (x < 0)) || +x; });\n\n /**\n * Combine control position and object angle to find the control direction compared\n * to the object center.\n * @param {fabric.Object} fabricObject the fabric object for which we are rendering controls\n * @param {fabric.Control} control the control class\n * @return {Number} 0 - 7 a quadrant number\n */\n function findCornerQuadrant(fabricObject, control) {\n var cornerAngle = fabricObject.angle + radiansToDegrees(Math.atan2(control.y, control.x)) + 360;\n return Math.round((cornerAngle % 360) / 45);\n }\n\n function fireEvent(eventName, options) {\n var target = options.transform.target,\n canvas = target.canvas,\n canvasOptions = fabric.util.object.clone(options);\n canvasOptions.target = target;\n canvas && canvas.fire('object:' + eventName, canvasOptions);\n target.fire(eventName, options);\n }\n\n /**\n * Inspect event and fabricObject properties to understand if the scaling action\n * @param {Event} eventData from the user action\n * @param {fabric.Object} fabricObject the fabric object about to scale\n * @return {Boolean} true if scale is proportional\n */\n function scaleIsProportional(eventData, fabricObject) {\n var canvas = fabricObject.canvas, uniScaleKey = canvas.uniScaleKey,\n uniformIsToggled = eventData[uniScaleKey];\n return (canvas.uniformScaling && !uniformIsToggled) ||\n (!canvas.uniformScaling && uniformIsToggled);\n }\n\n /**\n * Checks if transform is centered\n * @param {Object} transform transform data\n * @return {Boolean} true if transform is centered\n */\n function isTransformCentered(transform) {\n return transform.originX === CENTER && transform.originY === CENTER;\n }\n\n /**\n * Inspect fabricObject to understand if the current scaling action is allowed\n * @param {fabric.Object} fabricObject the fabric object about to scale\n * @param {String} by 'x' or 'y' or ''\n * @param {Boolean} scaleProportionally true if we are trying to scale proportionally\n * @return {Boolean} true if scaling is not allowed at current conditions\n */\n function scalingIsForbidden(fabricObject, by, scaleProportionally) {\n var lockX = fabricObject.lockScalingX, lockY = fabricObject.lockScalingY;\n if (lockX && lockY) {\n return true;\n }\n if (!by && (lockX || lockY) && scaleProportionally) {\n return true;\n }\n if (lockX && by === 'x') {\n return true;\n }\n if (lockY && by === 'y') {\n return true;\n }\n return false;\n }\n\n /**\n * return the correct cursor style for the scale action\n * @param {Event} eventData the javascript event that is causing the scale\n * @param {fabric.Control} control the control that is interested in the action\n * @param {fabric.Object} fabricObject the fabric object that is interested in the action\n * @return {String} a valid css string for the cursor\n */\n function scaleCursorStyleHandler(eventData, control, fabricObject) {\n var notAllowed = 'not-allowed',\n scaleProportionally = scaleIsProportional(eventData, fabricObject),\n by = '';\n if (control.x !== 0 && control.y === 0) {\n by = 'x';\n }\n else if (control.x === 0 && control.y !== 0) {\n by = 'y';\n }\n if (scalingIsForbidden(fabricObject, by, scaleProportionally)) {\n return notAllowed;\n }\n var n = findCornerQuadrant(fabricObject, control);\n return scaleMap[n] + '-resize';\n }\n\n /**\n * return the correct cursor style for the skew action\n * @param {Event} eventData the javascript event that is causing the scale\n * @param {fabric.Control} control the control that is interested in the action\n * @param {fabric.Object} fabricObject the fabric object that is interested in the action\n * @return {String} a valid css string for the cursor\n */\n function skewCursorStyleHandler(eventData, control, fabricObject) {\n var notAllowed = 'not-allowed';\n if (control.x !== 0 && fabricObject.lockSkewingY) {\n return notAllowed;\n }\n if (control.y !== 0 && fabricObject.lockSkewingX) {\n return notAllowed;\n }\n var n = findCornerQuadrant(fabricObject, control) % 4;\n return skewMap[n] + '-resize';\n }\n\n /**\n * Combine skew and scale style handlers to cover fabric standard use case\n * @param {Event} eventData the javascript event that is causing the scale\n * @param {fabric.Control} control the control that is interested in the action\n * @param {fabric.Object} fabricObject the fabric object that is interested in the action\n * @return {String} a valid css string for the cursor\n */\n function scaleSkewCursorStyleHandler(eventData, control, fabricObject) {\n if (eventData[fabricObject.canvas.altActionKey]) {\n return controls.skewCursorStyleHandler(eventData, control, fabricObject);\n }\n return controls.scaleCursorStyleHandler(eventData, control, fabricObject);\n }\n\n /**\n * Inspect event, control and fabricObject to return the correct action name\n * @param {Event} eventData the javascript event that is causing the scale\n * @param {fabric.Control} control the control that is interested in the action\n * @param {fabric.Object} fabricObject the fabric object that is interested in the action\n * @return {String} an action name\n */\n function scaleOrSkewActionName(eventData, control, fabricObject) {\n var isAlternative = eventData[fabricObject.canvas.altActionKey];\n if (control.x === 0) {\n // then is scaleY or skewX\n return isAlternative ? 'skewX' : 'scaleY';\n }\n if (control.y === 0) {\n // then is scaleY or skewX\n return isAlternative ? 'skewY' : 'scaleX';\n }\n }\n\n /**\n * Find the correct style for the control that is used for rotation.\n * this function is very simple and it just take care of not-allowed or standard cursor\n * @param {Event} eventData the javascript event that is causing the scale\n * @param {fabric.Control} control the control that is interested in the action\n * @param {fabric.Object} fabricObject the fabric object that is interested in the action\n * @return {String} a valid css string for the cursor\n */\n function rotationStyleHandler(eventData, control, fabricObject) {\n if (fabricObject.lockRotation) {\n return 'not-allowed';\n }\n return control.cursorStyle;\n }\n\n function commonEventInfo(eventData, transform, x, y) {\n return {\n e: eventData,\n transform: transform,\n pointer: {\n x: x,\n y: y,\n }\n };\n }\n\n /**\n * Wrap an action handler with saving/restoring object position on the transform.\n * this is the code that permits to objects to keep their position while transforming.\n * @param {Function} actionHandler the function to wrap\n * @return {Function} a function with an action handler signature\n */\n function wrapWithFixedAnchor(actionHandler) {\n return function(eventData, transform, x, y) {\n var target = transform.target, centerPoint = target.getCenterPoint(),\n constraint = target.translateToOriginPoint(centerPoint, transform.originX, transform.originY),\n actionPerformed = actionHandler(eventData, transform, x, y);\n target.setPositionByOrigin(constraint, transform.originX, transform.originY);\n return actionPerformed;\n };\n }\n\n /**\n * Wrap an action handler with firing an event if the action is performed\n * @param {Function} actionHandler the function to wrap\n * @return {Function} a function with an action handler signature\n */\n function wrapWithFireEvent(eventName, actionHandler) {\n return function(eventData, transform, x, y) {\n var actionPerformed = actionHandler(eventData, transform, x, y);\n if (actionPerformed) {\n fireEvent(eventName, commonEventInfo(eventData, transform, x, y));\n }\n return actionPerformed;\n };\n }\n\n /**\n * Transforms a point described by x and y in a distance from the top left corner of the object\n * bounding box.\n * @param {Object} transform\n * @param {String} originX\n * @param {String} originY\n * @param {number} x\n * @param {number} y\n * @return {Fabric.Point} the normalized point\n */\n function getLocalPoint(transform, originX, originY, x, y) {\n var target = transform.target,\n control = target.controls[transform.corner],\n zoom = target.canvas.getZoom(),\n padding = target.padding / zoom,\n localPoint = target.toLocalPoint(new fabric.Point(x, y), originX, originY);\n if (localPoint.x >= padding) {\n localPoint.x -= padding;\n }\n if (localPoint.x <= -padding) {\n localPoint.x += padding;\n }\n if (localPoint.y >= padding) {\n localPoint.y -= padding;\n }\n if (localPoint.y <= padding) {\n localPoint.y += padding;\n }\n localPoint.x -= control.offsetX;\n localPoint.y -= control.offsetY;\n return localPoint;\n }\n\n /**\n * Detect if the fabric object is flipped on one side.\n * @param {fabric.Object} target\n * @return {Boolean} true if one flip, but not two.\n */\n function targetHasOneFlip(target) {\n return target.flipX !== target.flipY;\n }\n\n /**\n * Utility function to compensate the scale factor when skew is applied on both axes\n * @private\n */\n function compensateScaleForSkew(target, oppositeSkew, scaleToCompensate, axis, reference) {\n if (target[oppositeSkew] !== 0) {\n var newDim = target._getTransformedDimensions()[axis];\n var newValue = reference / newDim * target[scaleToCompensate];\n target.set(scaleToCompensate, newValue);\n }\n }\n\n /**\n * Action handler for skewing on the X axis\n * @private\n */\n function skewObjectX(eventData, transform, x, y) {\n var target = transform.target,\n // find how big the object would be, if there was no skewX. takes in account scaling\n dimNoSkew = target._getTransformedDimensions(0, target.skewY),\n localPoint = getLocalPoint(transform, transform.originX, transform.originY, x, y),\n // the mouse is in the center of the object, and we want it to stay there.\n // so the object will grow twice as much as the mouse.\n // this makes the skew growth to localPoint * 2 - dimNoSkew.\n totalSkewSize = Math.abs(localPoint.x * 2) - dimNoSkew.x,\n currentSkew = target.skewX, newSkew;\n if (totalSkewSize < 2) {\n // let's make it easy to go back to position 0.\n newSkew = 0;\n }\n else {\n newSkew = radiansToDegrees(\n Math.atan2((totalSkewSize / target.scaleX), (dimNoSkew.y / target.scaleY))\n );\n // now we have to find the sign of the skew.\n // it mostly depend on the origin of transformation.\n if (transform.originX === LEFT && transform.originY === BOTTOM) {\n newSkew = -newSkew;\n }\n if (transform.originX === RIGHT && transform.originY === TOP) {\n newSkew = -newSkew;\n }\n if (targetHasOneFlip(target)) {\n newSkew = -newSkew;\n }\n }\n var hasSkewed = currentSkew !== newSkew;\n if (hasSkewed) {\n var dimBeforeSkewing = target._getTransformedDimensions().y;\n target.set('skewX', newSkew);\n compensateScaleForSkew(target, 'skewY', 'scaleY', 'y', dimBeforeSkewing);\n }\n return hasSkewed;\n }\n\n /**\n * Action handler for skewing on the Y axis\n * @private\n */\n function skewObjectY(eventData, transform, x, y) {\n var target = transform.target,\n // find how big the object would be, if there was no skewX. takes in account scaling\n dimNoSkew = target._getTransformedDimensions(target.skewX, 0),\n localPoint = getLocalPoint(transform, transform.originX, transform.originY, x, y),\n // the mouse is in the center of the object, and we want it to stay there.\n // so the object will grow twice as much as the mouse.\n // this makes the skew growth to localPoint * 2 - dimNoSkew.\n totalSkewSize = Math.abs(localPoint.y * 2) - dimNoSkew.y,\n currentSkew = target.skewY, newSkew;\n if (totalSkewSize < 2) {\n // let's make it easy to go back to position 0.\n newSkew = 0;\n }\n else {\n newSkew = radiansToDegrees(\n Math.atan2((totalSkewSize / target.scaleY), (dimNoSkew.x / target.scaleX))\n );\n // now we have to find the sign of the skew.\n // it mostly depend on the origin of transformation.\n if (transform.originX === LEFT && transform.originY === BOTTOM) {\n newSkew = -newSkew;\n }\n if (transform.originX === RIGHT && transform.originY === TOP) {\n newSkew = -newSkew;\n }\n if (targetHasOneFlip(target)) {\n newSkew = -newSkew;\n }\n }\n var hasSkewed = currentSkew !== newSkew;\n if (hasSkewed) {\n var dimBeforeSkewing = target._getTransformedDimensions().x;\n target.set('skewY', newSkew);\n compensateScaleForSkew(target, 'skewX', 'scaleX', 'x', dimBeforeSkewing);\n }\n return hasSkewed;\n }\n\n /**\n * Wrapped Action handler for skewing on the Y axis, takes care of the\n * skew direction and determine the correct transform origin for the anchor point\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\n function skewHandlerX(eventData, transform, x, y) {\n // step1 figure out and change transform origin.\n // if skewX > 0 and originY bottom we anchor on right\n // if skewX > 0 and originY top we anchor on left\n // if skewX < 0 and originY bottom we anchor on left\n // if skewX < 0 and originY top we anchor on right\n // if skewX is 0, we look for mouse position to understand where are we going.\n var target = transform.target, currentSkew = target.skewX, originX, originY = transform.originY;\n if (target.lockSkewingX) {\n return false;\n }\n if (currentSkew === 0) {\n var localPointFromCenter = getLocalPoint(transform, CENTER, CENTER, x, y);\n if (localPointFromCenter.x > 0) {\n // we are pulling right, anchor left;\n originX = LEFT;\n }\n else {\n // we are pulling right, anchor right\n originX = RIGHT;\n }\n }\n else {\n if (currentSkew > 0) {\n originX = originY === TOP ? LEFT : RIGHT;\n }\n if (currentSkew < 0) {\n originX = originY === TOP ? RIGHT : LEFT;\n }\n // is the object flipped on one side only? swap the origin.\n if (targetHasOneFlip(target)) {\n originX = originX === LEFT ? RIGHT : LEFT;\n }\n }\n\n // once we have the origin, we find the anchor point\n transform.originX = originX;\n var finalHandler = wrapWithFireEvent('skewing', wrapWithFixedAnchor(skewObjectX));\n return finalHandler(eventData, transform, x, y);\n }\n\n /**\n * Wrapped Action handler for skewing on the Y axis, takes care of the\n * skew direction and determine the correct transform origin for the anchor point\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\n function skewHandlerY(eventData, transform, x, y) {\n // step1 figure out and change transform origin.\n // if skewY > 0 and originX left we anchor on top\n // if skewY > 0 and originX right we anchor on bottom\n // if skewY < 0 and originX left we anchor on bottom\n // if skewY < 0 and originX right we anchor on top\n // if skewY is 0, we look for mouse position to understand where are we going.\n var target = transform.target, currentSkew = target.skewY, originY, originX = transform.originX;\n if (target.lockSkewingY) {\n return false;\n }\n if (currentSkew === 0) {\n var localPointFromCenter = getLocalPoint(transform, CENTER, CENTER, x, y);\n if (localPointFromCenter.y > 0) {\n // we are pulling down, anchor up;\n originY = TOP;\n }\n else {\n // we are pulling up, anchor down\n originY = BOTTOM;\n }\n }\n else {\n if (currentSkew > 0) {\n originY = originX === LEFT ? TOP : BOTTOM;\n }\n if (currentSkew < 0) {\n originY = originX === LEFT ? BOTTOM : TOP;\n }\n // is the object flipped on one side only? swap the origin.\n if (targetHasOneFlip(target)) {\n originY = originY === TOP ? BOTTOM : TOP;\n }\n }\n\n // once we have the origin, we find the anchor point\n transform.originY = originY;\n var finalHandler = wrapWithFireEvent('skewing', wrapWithFixedAnchor(skewObjectY));\n return finalHandler(eventData, transform, x, y);\n }\n\n /**\n * Action handler for rotation and snapping, without anchor point.\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n * @private\n */\n function rotationWithSnapping(eventData, transform, x, y) {\n var t = transform,\n target = t.target,\n pivotPoint = target.translateToOriginPoint(target.getCenterPoint(), t.originX, t.originY);\n\n if (target.lockRotation) {\n return false;\n }\n\n var lastAngle = Math.atan2(t.ey - pivotPoint.y, t.ex - pivotPoint.x),\n curAngle = Math.atan2(y - pivotPoint.y, x - pivotPoint.x),\n angle = radiansToDegrees(curAngle - lastAngle + t.theta),\n hasRotated = true;\n\n if (target.snapAngle > 0) {\n var snapAngle = target.snapAngle,\n snapThreshold = target.snapThreshold || snapAngle,\n rightAngleLocked = Math.ceil(angle / snapAngle) * snapAngle,\n leftAngleLocked = Math.floor(angle / snapAngle) * snapAngle;\n\n if (Math.abs(angle - leftAngleLocked) < snapThreshold) {\n angle = leftAngleLocked;\n }\n else if (Math.abs(angle - rightAngleLocked) < snapThreshold) {\n angle = rightAngleLocked;\n }\n }\n\n // normalize angle to positive value\n if (angle < 0) {\n angle = 360 + angle;\n }\n angle %= 360;\n\n hasRotated = target.angle !== angle;\n target.angle = angle;\n return hasRotated;\n }\n\n /**\n * Basic scaling logic, reused with different constrain for scaling X,Y, freely or equally.\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @param {Object} options additional information for scaling\n * @param {String} options.by 'x', 'y', 'equally' or '' to indicate type of scaling\n * @return {Boolean} true if some change happened\n * @private\n */\n function scaleObject(eventData, transform, x, y, options) {\n options = options || {};\n var target = transform.target,\n lockScalingX = target.lockScalingX, lockScalingY = target.lockScalingY,\n by = options.by, newPoint, scaleX, scaleY, dim,\n scaleProportionally = scaleIsProportional(eventData, target),\n forbidScaling = scalingIsForbidden(target, by, scaleProportionally),\n signX, signY, gestureScale = transform.gestureScale;\n\n if (forbidScaling) {\n return false;\n }\n if (gestureScale) {\n scaleX = transform.scaleX * gestureScale;\n scaleY = transform.scaleY * gestureScale;\n }\n else {\n newPoint = getLocalPoint(transform, transform.originX, transform.originY, x, y);\n // use of sign: We use sign to detect change of direction of an action. sign usually change when\n // we cross the origin point with the mouse. So a scale flip for example. There is an issue when scaling\n // by center and scaling using one middle control ( default: mr, mt, ml, mb), the mouse movement can easily\n // cross many time the origin point and flip the object. so we need a way to filter out the noise.\n // This ternary here should be ok to filter out X scaling when we want Y only and vice versa.\n signX = by !== 'y' ? sign(newPoint.x) : 1;\n signY = by !== 'x' ? sign(newPoint.y) : 1;\n if (!transform.signX) {\n transform.signX = signX;\n }\n if (!transform.signY) {\n transform.signY = signY;\n }\n\n if (target.lockScalingFlip &&\n (transform.signX !== signX || transform.signY !== signY)\n ) {\n return false;\n }\n\n dim = target._getTransformedDimensions();\n // missing detection of flip and logic to switch the origin\n if (scaleProportionally && !by) {\n // uniform scaling\n var distance = Math.abs(newPoint.x) + Math.abs(newPoint.y),\n original = transform.original,\n originalDistance = Math.abs(dim.x * original.scaleX / target.scaleX) +\n Math.abs(dim.y * original.scaleY / target.scaleY),\n scale = distance / originalDistance;\n scaleX = original.scaleX * scale;\n scaleY = original.scaleY * scale;\n }\n else {\n scaleX = Math.abs(newPoint.x * target.scaleX / dim.x);\n scaleY = Math.abs(newPoint.y * target.scaleY / dim.y);\n }\n // if we are scaling by center, we need to double the scale\n if (isTransformCentered(transform)) {\n scaleX *= 2;\n scaleY *= 2;\n }\n if (transform.signX !== signX && by !== 'y') {\n transform.originX = opposite[transform.originX];\n scaleX *= -1;\n transform.signX = signX;\n }\n if (transform.signY !== signY && by !== 'x') {\n transform.originY = opposite[transform.originY];\n scaleY *= -1;\n transform.signY = signY;\n }\n }\n // minScale is taken are in the setter.\n var oldScaleX = target.scaleX, oldScaleY = target.scaleY;\n if (!by) {\n !lockScalingX && target.set('scaleX', scaleX);\n !lockScalingY && target.set('scaleY', scaleY);\n }\n else {\n // forbidden cases already handled on top here.\n by === 'x' && target.set('scaleX', scaleX);\n by === 'y' && target.set('scaleY', scaleY);\n }\n return oldScaleX !== target.scaleX || oldScaleY !== target.scaleY;\n }\n\n /**\n * Generic scaling logic, to scale from corners either equally or freely.\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\n function scaleObjectFromCorner(eventData, transform, x, y) {\n return scaleObject(eventData, transform, x, y);\n }\n\n /**\n * Scaling logic for the X axis.\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\n function scaleObjectX(eventData, transform, x, y) {\n return scaleObject(eventData, transform, x, y , { by: 'x' });\n }\n\n /**\n * Scaling logic for the Y axis.\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\n function scaleObjectY(eventData, transform, x, y) {\n return scaleObject(eventData, transform, x, y , { by: 'y' });\n }\n\n /**\n * Composed action handler to either scale Y or skew X\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\n function scalingYOrSkewingX(eventData, transform, x, y) {\n // ok some safety needed here.\n if (eventData[transform.target.canvas.altActionKey]) {\n return controls.skewHandlerX(eventData, transform, x, y);\n }\n return controls.scalingY(eventData, transform, x, y);\n }\n\n /**\n * Composed action handler to either scale X or skew Y\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\n function scalingXOrSkewingY(eventData, transform, x, y) {\n // ok some safety needed here.\n if (eventData[transform.target.canvas.altActionKey]) {\n return controls.skewHandlerY(eventData, transform, x, y);\n }\n return controls.scalingX(eventData, transform, x, y);\n }\n\n /**\n * Action handler to change textbox width\n * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if some change happened\n */\n function changeWidth(eventData, transform, x, y) {\n var target = transform.target, localPoint = getLocalPoint(transform, transform.originX, transform.originY, x, y),\n strokePadding = target.strokeWidth / (target.strokeUniform ? target.scaleX : 1),\n multiplier = isTransformCentered(transform) ? 2 : 1,\n oldWidth = target.width,\n newWidth = Math.abs(localPoint.x * multiplier / target.scaleX) - strokePadding;\n target.set('width', Math.max(newWidth, 0));\n return oldWidth !== newWidth;\n }\n\n /**\n * Action handler\n * @private\n * @param {Event} eventData javascript event that is doing the transform\n * @param {Object} transform javascript object containing a series of information around the current transform\n * @param {number} x current mouse x position, canvas normalized\n * @param {number} y current mouse y position, canvas normalized\n * @return {Boolean} true if the translation occurred\n */\n function dragHandler(eventData, transform, x, y) {\n var target = transform.target,\n newLeft = x - transform.offsetX,\n newTop = y - transform.offsetY,\n moveX = !target.get('lockMovementX') && target.left !== newLeft,\n moveY = !target.get('lockMovementY') && target.top !== newTop;\n moveX && target.set('left', newLeft);\n moveY && target.set('top', newTop);\n if (moveX || moveY) {\n fireEvent('moving', commonEventInfo(eventData, transform, x, y));\n }\n return moveX || moveY;\n }\n\n controls.scaleCursorStyleHandler = scaleCursorStyleHandler;\n controls.skewCursorStyleHandler = skewCursorStyleHandler;\n controls.scaleSkewCursorStyleHandler = scaleSkewCursorStyleHandler;\n controls.rotationWithSnapping = wrapWithFireEvent('rotating', wrapWithFixedAnchor(rotationWithSnapping));\n controls.scalingEqually = wrapWithFireEvent('scaling', wrapWithFixedAnchor( scaleObjectFromCorner));\n controls.scalingX = wrapWithFireEvent('scaling', wrapWithFixedAnchor(scaleObjectX));\n controls.scalingY = wrapWithFireEvent('scaling', wrapWithFixedAnchor(scaleObjectY));\n controls.scalingYOrSkewingX = scalingYOrSkewingX;\n controls.scalingXOrSkewingY = scalingXOrSkewingY;\n controls.changeWidth = wrapWithFireEvent('resizing', wrapWithFixedAnchor(changeWidth));\n controls.skewHandlerX = skewHandlerX;\n controls.skewHandlerY = skewHandlerY;\n controls.dragHandler = dragHandler;\n controls.scaleOrSkewActionName = scaleOrSkewActionName;\n controls.rotationStyleHandler = rotationStyleHandler;\n controls.fireEvent = fireEvent;\n controls.wrapWithFixedAnchor = wrapWithFixedAnchor;\n controls.wrapWithFireEvent = wrapWithFireEvent;\n controls.getLocalPoint = getLocalPoint;\n fabric.controlsUtils = controls;\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n degreesToRadians = fabric.util.degreesToRadians,\n controls = fabric.controlsUtils;\n\n /**\n * Render a round control, as per fabric features.\n * This function is written to respect object properties like transparentCorners, cornerSize\n * cornerColor, cornerStrokeColor\n * plus the addition of offsetY and offsetX.\n * @param {CanvasRenderingContext2D} ctx context to render on\n * @param {Number} left x coordinate where the control center should be\n * @param {Number} top y coordinate where the control center should be\n * @param {Object} styleOverride override for fabric.Object controls style\n * @param {fabric.Object} fabricObject the fabric object for which we are rendering controls\n */\n function renderCircleControl (ctx, left, top, styleOverride, fabricObject) {\n styleOverride = styleOverride || {};\n var xSize = this.sizeX || styleOverride.cornerSize || fabricObject.cornerSize,\n ySize = this.sizeY || styleOverride.cornerSize || fabricObject.cornerSize,\n transparentCorners = typeof styleOverride.transparentCorners !== 'undefined' ?\n styleOverride.transparentCorners : fabricObject.transparentCorners,\n methodName = transparentCorners ? 'stroke' : 'fill',\n stroke = !transparentCorners && (styleOverride.cornerStrokeColor || fabricObject.cornerStrokeColor),\n myLeft = left,\n myTop = top, size;\n ctx.save();\n ctx.fillStyle = styleOverride.cornerColor || fabricObject.cornerColor;\n ctx.strokeStyle = styleOverride.cornerStrokeColor || fabricObject.cornerStrokeColor;\n // as soon as fabric react v5, remove ie11, use proper ellipse code.\n if (xSize > ySize) {\n size = xSize;\n ctx.scale(1.0, ySize / xSize);\n myTop = top * xSize / ySize;\n }\n else if (ySize > xSize) {\n size = ySize;\n ctx.scale(xSize / ySize, 1.0);\n myLeft = left * ySize / xSize;\n }\n else {\n size = xSize;\n }\n // this is still wrong\n ctx.lineWidth = 1;\n ctx.beginPath();\n ctx.arc(myLeft, myTop, size / 2, 0, 2 * Math.PI, false);\n ctx[methodName]();\n if (stroke) {\n ctx.stroke();\n }\n ctx.restore();\n }\n\n /**\n * Render a square control, as per fabric features.\n * This function is written to respect object properties like transparentCorners, cornerSize\n * cornerColor, cornerStrokeColor\n * plus the addition of offsetY and offsetX.\n * @param {CanvasRenderingContext2D} ctx context to render on\n * @param {Number} left x coordinate where the control center should be\n * @param {Number} top y coordinate where the control center should be\n * @param {Object} styleOverride override for fabric.Object controls style\n * @param {fabric.Object} fabricObject the fabric object for which we are rendering controls\n */\n function renderSquareControl(ctx, left, top, styleOverride, fabricObject) {\n styleOverride = styleOverride || {};\n var xSize = this.sizeX || styleOverride.cornerSize || fabricObject.cornerSize,\n ySize = this.sizeY || styleOverride.cornerSize || fabricObject.cornerSize,\n transparentCorners = typeof styleOverride.transparentCorners !== 'undefined' ?\n styleOverride.transparentCorners : fabricObject.transparentCorners,\n methodName = transparentCorners ? 'stroke' : 'fill',\n stroke = !transparentCorners && (\n styleOverride.cornerStrokeColor || fabricObject.cornerStrokeColor\n ), xSizeBy2 = xSize / 2, ySizeBy2 = ySize / 2;\n ctx.save();\n ctx.fillStyle = styleOverride.cornerColor || fabricObject.cornerColor;\n ctx.strokeStyle = styleOverride.cornerStrokeColor || fabricObject.cornerStrokeColor;\n // this is still wrong\n ctx.lineWidth = 1;\n ctx.translate(left, top);\n ctx.rotate(degreesToRadians(fabricObject.angle));\n // this does not work, and fixed with ( && ) does not make sense.\n // to have real transparent corners we need the controls on upperCanvas\n // transparentCorners || ctx.clearRect(-xSizeBy2, -ySizeBy2, xSize, ySize);\n ctx[methodName + 'Rect'](-xSizeBy2, -ySizeBy2, xSize, ySize);\n if (stroke) {\n ctx.strokeRect(-xSizeBy2, -ySizeBy2, xSize, ySize);\n }\n ctx.restore();\n }\n\n controls.renderCircleControl = renderCircleControl;\n controls.renderSquareControl = renderSquareControl;\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { });\n\n function Control(options) {\n for (var i in options) {\n this[i] = options[i];\n }\n }\n\n fabric.Control = Control;\n\n fabric.Control.prototype = /** @lends fabric.Control.prototype */ {\n\n /**\n * keep track of control visibility.\n * mainly for backward compatibility.\n * if you do not want to see a control, you can remove it\n * from the controlset.\n * @type {Boolean}\n * @default true\n */\n visible: true,\n\n /**\n * Name of the action that the control will likely execute.\n * This is optional. FabricJS uses to identify what the user is doing for some\n * extra optimizations. If you are writing a custom control and you want to know\n * somewhere else in the code what is going on, you can use this string here.\n * you can also provide a custom getActionName if your control run multiple actions\n * depending on some external state.\n * default to scale since is the most common, used on 4 corners by default\n * @type {String}\n * @default 'scale'\n */\n actionName: 'scale',\n\n /**\n * Drawing angle of the control.\n * NOT used for now, but name marked as needed for internal logic\n * example: to reuse the same drawing function for different rotated controls\n * @type {Number}\n * @default 0\n */\n angle: 0,\n\n /**\n * Relative position of the control. X\n * 0,0 is the center of the Object, while -0.5 (left) or 0.5 (right) are the extremities\n * of the bounding box.\n * @type {Number}\n * @default 0\n */\n x: 0,\n\n /**\n * Relative position of the control. Y\n * 0,0 is the center of the Object, while -0.5 (top) or 0.5 (bottom) are the extremities\n * of the bounding box.\n * @type {Number}\n * @default 0\n */\n y: 0,\n\n /**\n * Horizontal offset of the control from the defined position. In pixels\n * Positive offset moves the control to the right, negative to the left.\n * It used when you want to have position of control that does not scale with\n * the bounding box. Example: rotation control is placed at x:0, y: 0.5 on\n * the boundindbox, with an offset of 30 pixels vertically. Those 30 pixels will\n * stay 30 pixels no matter how the object is big. Another example is having 2\n * controls in the corner, that stay in the same position when the object scale.\n * of the bounding box.\n * @type {Number}\n * @default 0\n */\n offsetX: 0,\n\n /**\n * Vertical offset of the control from the defined position. In pixels\n * Positive offset moves the control to the bottom, negative to the top.\n * @type {Number}\n * @default 0\n */\n offsetY: 0,\n\n /**\n * Sets the length of the control. If null, defaults to object's cornerSize.\n * Expects both sizeX and sizeY to be set when set.\n * @type {?Number}\n * @default null\n */\n sizeX: null,\n\n /**\n * Sets the height of the control. If null, defaults to object's cornerSize.\n * Expects both sizeX and sizeY to be set when set.\n * @type {?Number}\n * @default null\n */\n sizeY: null,\n\n /**\n * Sets the length of the touch area of the control. If null, defaults to object's touchCornerSize.\n * Expects both touchSizeX and touchSizeY to be set when set.\n * @type {?Number}\n * @default null\n */\n touchSizeX: null,\n\n /**\n * Sets the height of the touch area of the control. If null, defaults to object's touchCornerSize.\n * Expects both touchSizeX and touchSizeY to be set when set.\n * @type {?Number}\n * @default null\n */\n touchSizeY: null,\n\n /**\n * Css cursor style to display when the control is hovered.\n * if the method `cursorStyleHandler` is provided, this property is ignored.\n * @type {String}\n * @default 'crosshair'\n */\n cursorStyle: 'crosshair',\n\n /**\n * If controls has an offsetY or offsetX, draw a line that connects\n * the control to the bounding box\n * @type {Boolean}\n * @default false\n */\n withConnection: false,\n\n /**\n * The control actionHandler, provide one to handle action ( control being moved )\n * @param {Event} eventData the native mouse event\n * @param {Object} transformData properties of the current transform\n * @param {Number} x x position of the cursor\n * @param {Number} y y position of the cursor\n * @return {Boolean} true if the action/event modified the object\n */\n actionHandler: function(/* eventData, transformData, x, y */) { },\n\n /**\n * The control handler for mouse down, provide one to handle mouse down on control\n * @param {Event} eventData the native mouse event\n * @param {Object} transformData properties of the current transform\n * @param {Number} x x position of the cursor\n * @param {Number} y y position of the cursor\n * @return {Boolean} true if the action/event modified the object\n */\n mouseDownHandler: function(/* eventData, transformData, x, y */) { },\n\n /**\n * The control mouseUpHandler, provide one to handle an effect on mouse up.\n * @param {Event} eventData the native mouse event\n * @param {Object} transformData properties of the current transform\n * @param {Number} x x position of the cursor\n * @param {Number} y y position of the cursor\n * @return {Boolean} true if the action/event modified the object\n */\n mouseUpHandler: function(/* eventData, transformData, x, y */) { },\n\n /**\n * Returns control actionHandler\n * @param {Event} eventData the native mouse event\n * @param {fabric.Object} fabricObject on which the control is displayed\n * @param {fabric.Control} control control for which the action handler is being asked\n * @return {Function} the action handler\n */\n getActionHandler: function(/* eventData, fabricObject, control */) {\n return this.actionHandler;\n },\n\n /**\n * Returns control mouseDown handler\n * @param {Event} eventData the native mouse event\n * @param {fabric.Object} fabricObject on which the control is displayed\n * @param {fabric.Control} control control for which the action handler is being asked\n * @return {Function} the action handler\n */\n getMouseDownHandler: function(/* eventData, fabricObject, control */) {\n return this.mouseDownHandler;\n },\n\n /**\n * Returns control mouseUp handler\n * @param {Event} eventData the native mouse event\n * @param {fabric.Object} fabricObject on which the control is displayed\n * @param {fabric.Control} control control for which the action handler is being asked\n * @return {Function} the action handler\n */\n getMouseUpHandler: function(/* eventData, fabricObject, control */) {\n return this.mouseUpHandler;\n },\n\n /**\n * Returns control cursorStyle for css using cursorStyle. If you need a more elaborate\n * function you can pass one in the constructor\n * the cursorStyle property\n * @param {Event} eventData the native mouse event\n * @param {fabric.Control} control the current control ( likely this)\n * @param {fabric.Object} object on which the control is displayed\n * @return {String}\n */\n cursorStyleHandler: function(eventData, control /* fabricObject */) {\n return control.cursorStyle;\n },\n\n /**\n * Returns the action name. The basic implementation just return the actionName property.\n * @param {Event} eventData the native mouse event\n * @param {fabric.Control} control the current control ( likely this)\n * @param {fabric.Object} object on which the control is displayed\n * @return {String}\n */\n getActionName: function(eventData, control /* fabricObject */) {\n return control.actionName;\n },\n\n /**\n * Returns controls visibility\n * @param {fabric.Object} object on which the control is displayed\n * @param {String} controlKey key where the control is memorized on the\n * @return {Boolean}\n */\n getVisibility: function(fabricObject, controlKey) {\n var objectVisibility = fabricObject._controlsVisibility;\n if (objectVisibility && typeof objectVisibility[controlKey] !== 'undefined') {\n return objectVisibility[controlKey];\n }\n return this.visible;\n },\n\n /**\n * Sets controls visibility\n * @param {Boolean} visibility for the object\n * @return {Void}\n */\n setVisibility: function(visibility /* name, fabricObject */) {\n this.visible = visibility;\n },\n\n\n positionHandler: function(dim, finalMatrix /*, fabricObject, currentControl */) {\n var point = fabric.util.transformPoint({\n x: this.x * dim.x + this.offsetX,\n y: this.y * dim.y + this.offsetY }, finalMatrix);\n return point;\n },\n\n /**\n * Returns the coords for this control based on object values.\n * @param {Number} objectAngle angle from the fabric object holding the control\n * @param {Number} objectCornerSize cornerSize from the fabric object holding the control (or touchCornerSize if\n * isTouch is true)\n * @param {Number} centerX x coordinate where the control center should be\n * @param {Number} centerY y coordinate where the control center should be\n * @param {boolean} isTouch true if touch corner, false if normal corner\n */\n calcCornerCoords: function(objectAngle, objectCornerSize, centerX, centerY, isTouch) {\n var cosHalfOffset,\n sinHalfOffset,\n cosHalfOffsetComp,\n sinHalfOffsetComp,\n xSize = (isTouch) ? this.touchSizeX : this.sizeX,\n ySize = (isTouch) ? this.touchSizeY : this.sizeY;\n if (xSize && ySize && xSize !== ySize) {\n // handle rectangular corners\n var controlTriangleAngle = Math.atan2(ySize, xSize);\n var cornerHypotenuse = Math.sqrt(xSize * xSize + ySize * ySize) / 2;\n var newTheta = controlTriangleAngle - fabric.util.degreesToRadians(objectAngle);\n var newThetaComp = Math.PI / 2 - controlTriangleAngle - fabric.util.degreesToRadians(objectAngle);\n cosHalfOffset = cornerHypotenuse * fabric.util.cos(newTheta);\n sinHalfOffset = cornerHypotenuse * fabric.util.sin(newTheta);\n // use complementary angle for two corners\n cosHalfOffsetComp = cornerHypotenuse * fabric.util.cos(newThetaComp);\n sinHalfOffsetComp = cornerHypotenuse * fabric.util.sin(newThetaComp);\n }\n else {\n // handle square corners\n // use default object corner size unless size is defined\n var cornerSize = (xSize && ySize) ? xSize : objectCornerSize;\n /* 0.7071067812 stands for sqrt(2)/2 */\n cornerHypotenuse = cornerSize * 0.7071067812;\n // complementary angles are equal since they're both 45 degrees\n var newTheta = fabric.util.degreesToRadians(45 - objectAngle);\n cosHalfOffset = cosHalfOffsetComp = cornerHypotenuse * fabric.util.cos(newTheta);\n sinHalfOffset = sinHalfOffsetComp = cornerHypotenuse * fabric.util.sin(newTheta);\n }\n\n return {\n tl: {\n x: centerX - sinHalfOffsetComp,\n y: centerY - cosHalfOffsetComp,\n },\n tr: {\n x: centerX + cosHalfOffset,\n y: centerY - sinHalfOffset,\n },\n bl: {\n x: centerX - cosHalfOffset,\n y: centerY + sinHalfOffset,\n },\n br: {\n x: centerX + sinHalfOffsetComp,\n y: centerY + cosHalfOffsetComp,\n },\n };\n },\n\n /**\n * Render function for the control.\n * When this function runs the context is unscaled. unrotate. Just retina scaled.\n * all the functions will have to translate to the point left,top before starting Drawing\n * if they want to draw a control where the position is detected.\n * left and top are the result of the positionHandler function\n * @param {RenderingContext2D} ctx the context where the control will be drawn\n * @param {Number} left position of the canvas where we are about to render the control.\n * @param {Number} top position of the canvas where we are about to render the control.\n * @param {Object} styleOverride\n * @param {fabric.Object} fabricObject the object where the control is about to be rendered\n */\n render: function(ctx, left, top, styleOverride, fabricObject) {\n styleOverride = styleOverride || {};\n switch (styleOverride.cornerStyle || fabricObject.cornerStyle) {\n case 'circle':\n fabric.controlsUtils.renderCircleControl.call(this, ctx, left, top, styleOverride, fabricObject);\n break;\n default:\n fabric.controlsUtils.renderSquareControl.call(this, ctx, left, top, styleOverride, fabricObject);\n }\n },\n };\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function() {\n\n /* _FROM_SVG_START_ */\n function getColorStop(el, multiplier) {\n var style = el.getAttribute('style'),\n offset = el.getAttribute('offset') || 0,\n color, colorAlpha, opacity, i;\n\n // convert percents to absolute values\n offset = parseFloat(offset) / (/%$/.test(offset) ? 100 : 1);\n offset = offset < 0 ? 0 : offset > 1 ? 1 : offset;\n if (style) {\n var keyValuePairs = style.split(/\\s*;\\s*/);\n\n if (keyValuePairs[keyValuePairs.length - 1] === '') {\n keyValuePairs.pop();\n }\n\n for (i = keyValuePairs.length; i--; ) {\n\n var split = keyValuePairs[i].split(/\\s*:\\s*/),\n key = split[0].trim(),\n value = split[1].trim();\n\n if (key === 'stop-color') {\n color = value;\n }\n else if (key === 'stop-opacity') {\n opacity = value;\n }\n }\n }\n\n if (!color) {\n color = el.getAttribute('stop-color') || 'rgb(0,0,0)';\n }\n if (!opacity) {\n opacity = el.getAttribute('stop-opacity');\n }\n\n color = new fabric.Color(color);\n colorAlpha = color.getAlpha();\n opacity = isNaN(parseFloat(opacity)) ? 1 : parseFloat(opacity);\n opacity *= colorAlpha * multiplier;\n\n return {\n offset: offset,\n color: color.toRgb(),\n opacity: opacity\n };\n }\n\n function getLinearCoords(el) {\n return {\n x1: el.getAttribute('x1') || 0,\n y1: el.getAttribute('y1') || 0,\n x2: el.getAttribute('x2') || '100%',\n y2: el.getAttribute('y2') || 0\n };\n }\n\n function getRadialCoords(el) {\n return {\n x1: el.getAttribute('fx') || el.getAttribute('cx') || '50%',\n y1: el.getAttribute('fy') || el.getAttribute('cy') || '50%',\n r1: 0,\n x2: el.getAttribute('cx') || '50%',\n y2: el.getAttribute('cy') || '50%',\n r2: el.getAttribute('r') || '50%'\n };\n }\n /* _FROM_SVG_END_ */\n\n var clone = fabric.util.object.clone;\n\n /**\n * Gradient class\n * @class fabric.Gradient\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-2#gradients}\n * @see {@link fabric.Gradient#initialize} for constructor definition\n */\n fabric.Gradient = fabric.util.createClass(/** @lends fabric.Gradient.prototype */ {\n\n /**\n * Horizontal offset for aligning gradients coming from SVG when outside pathgroups\n * @type Number\n * @default 0\n */\n offsetX: 0,\n\n /**\n * Vertical offset for aligning gradients coming from SVG when outside pathgroups\n * @type Number\n * @default 0\n */\n offsetY: 0,\n\n /**\n * A transform matrix to apply to the gradient before painting.\n * Imported from svg gradients, is not applied with the current transform in the center.\n * Before this transform is applied, the origin point is at the top left corner of the object\n * plus the addition of offsetY and offsetX.\n * @type Number[]\n * @default null\n */\n gradientTransform: null,\n\n /**\n * coordinates units for coords.\n * If `pixels`, the number of coords are in the same unit of width / height.\n * If set as `percentage` the coords are still a number, but 1 means 100% of width\n * for the X and 100% of the height for the y. It can be bigger than 1 and negative.\n * allowed values pixels or percentage.\n * @type String\n * @default 'pixels'\n */\n gradientUnits: 'pixels',\n\n /**\n * Gradient type linear or radial\n * @type String\n * @default 'pixels'\n */\n type: 'linear',\n\n /**\n * Constructor\n * @param {Object} options Options object with type, coords, gradientUnits and colorStops\n * @param {Object} [options.type] gradient type linear or radial\n * @param {Object} [options.gradientUnits] gradient units\n * @param {Object} [options.offsetX] SVG import compatibility\n * @param {Object} [options.offsetY] SVG import compatibility\n * @param {Object[]} options.colorStops contains the colorstops.\n * @param {Object} options.coords contains the coords of the gradient\n * @param {Number} [options.coords.x1] X coordiante of the first point for linear or of the focal point for radial\n * @param {Number} [options.coords.y1] Y coordiante of the first point for linear or of the focal point for radial\n * @param {Number} [options.coords.x2] X coordiante of the second point for linear or of the center point for radial\n * @param {Number} [options.coords.y2] Y coordiante of the second point for linear or of the center point for radial\n * @param {Number} [options.coords.r1] only for radial gradient, radius of the inner circle\n * @param {Number} [options.coords.r2] only for radial gradient, radius of the external circle\n * @return {fabric.Gradient} thisArg\n */\n initialize: function(options) {\n options || (options = { });\n options.coords || (options.coords = { });\n\n var coords, _this = this;\n\n // sets everything, then coords and colorstops get sets again\n Object.keys(options).forEach(function(option) {\n _this[option] = options[option];\n });\n\n if (this.id) {\n this.id += '_' + fabric.Object.__uid++;\n }\n else {\n this.id = fabric.Object.__uid++;\n }\n\n coords = {\n x1: options.coords.x1 || 0,\n y1: options.coords.y1 || 0,\n x2: options.coords.x2 || 0,\n y2: options.coords.y2 || 0\n };\n\n if (this.type === 'radial') {\n coords.r1 = options.coords.r1 || 0;\n coords.r2 = options.coords.r2 || 0;\n }\n\n this.coords = coords;\n this.colorStops = options.colorStops.slice();\n },\n\n /**\n * Adds another colorStop\n * @param {Object} colorStop Object with offset and color\n * @return {fabric.Gradient} thisArg\n */\n addColorStop: function(colorStops) {\n for (var position in colorStops) {\n var color = new fabric.Color(colorStops[position]);\n this.colorStops.push({\n offset: parseFloat(position),\n color: color.toRgb(),\n opacity: color.getAlpha()\n });\n }\n return this;\n },\n\n /**\n * Returns object representation of a gradient\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object}\n */\n toObject: function(propertiesToInclude) {\n var object = {\n type: this.type,\n coords: this.coords,\n colorStops: this.colorStops,\n offsetX: this.offsetX,\n offsetY: this.offsetY,\n gradientUnits: this.gradientUnits,\n gradientTransform: this.gradientTransform ? this.gradientTransform.concat() : this.gradientTransform\n };\n fabric.util.populateWithProperties(this, object, propertiesToInclude);\n\n return object;\n },\n\n /* _TO_SVG_START_ */\n /**\n * Returns SVG representation of an gradient\n * @param {Object} object Object to create a gradient for\n * @return {String} SVG representation of an gradient (linear/radial)\n */\n toSVG: function(object, options) {\n var coords = clone(this.coords, true), i, len, options = options || {},\n markup, commonAttributes, colorStops = clone(this.colorStops, true),\n needsSwap = coords.r1 > coords.r2,\n transform = this.gradientTransform ? this.gradientTransform.concat() : fabric.iMatrix.concat(),\n offsetX = -this.offsetX, offsetY = -this.offsetY,\n withViewport = !!options.additionalTransform,\n gradientUnits = this.gradientUnits === 'pixels' ? 'userSpaceOnUse' : 'objectBoundingBox';\n // colorStops must be sorted ascending\n colorStops.sort(function(a, b) {\n return a.offset - b.offset;\n });\n\n if (gradientUnits === 'objectBoundingBox') {\n offsetX /= object.width;\n offsetY /= object.height;\n }\n else {\n offsetX += object.width / 2;\n offsetY += object.height / 2;\n }\n if (object.type === 'path' && this.gradientUnits !== 'percentage') {\n offsetX -= object.pathOffset.x;\n offsetY -= object.pathOffset.y;\n }\n\n\n transform[4] -= offsetX;\n transform[5] -= offsetY;\n\n commonAttributes = 'id=\"SVGID_' + this.id +\n '\" gradientUnits=\"' + gradientUnits + '\"';\n commonAttributes += ' gradientTransform=\"' + (withViewport ?\n options.additionalTransform + ' ' : '') + fabric.util.matrixToSVG(transform) + '\" ';\n\n if (this.type === 'linear') {\n markup = [\n '\\n'\n ];\n }\n else if (this.type === 'radial') {\n // svg radial gradient has just 1 radius. the biggest.\n markup = [\n '\\n'\n ];\n }\n\n if (this.type === 'radial') {\n if (needsSwap) {\n // svg goes from internal to external radius. if radius are inverted, swap color stops.\n colorStops = colorStops.concat();\n colorStops.reverse();\n for (i = 0, len = colorStops.length; i < len; i++) {\n colorStops[i].offset = 1 - colorStops[i].offset;\n }\n }\n var minRadius = Math.min(coords.r1, coords.r2);\n if (minRadius > 0) {\n // i have to shift all colorStops and add new one in 0.\n var maxRadius = Math.max(coords.r1, coords.r2),\n percentageShift = minRadius / maxRadius;\n for (i = 0, len = colorStops.length; i < len; i++) {\n colorStops[i].offset += percentageShift * (1 - colorStops[i].offset);\n }\n }\n }\n\n for (i = 0, len = colorStops.length; i < len; i++) {\n var colorStop = colorStops[i];\n markup.push(\n '\\n'\n );\n }\n\n markup.push((this.type === 'linear' ? '\\n' : '\\n'));\n\n return markup.join('');\n },\n /* _TO_SVG_END_ */\n\n /**\n * Returns an instance of CanvasGradient\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @return {CanvasGradient}\n */\n toLive: function(ctx) {\n var gradient, coords = fabric.util.object.clone(this.coords), i, len;\n\n if (!this.type) {\n return;\n }\n\n if (this.type === 'linear') {\n gradient = ctx.createLinearGradient(\n coords.x1, coords.y1, coords.x2, coords.y2);\n }\n else if (this.type === 'radial') {\n gradient = ctx.createRadialGradient(\n coords.x1, coords.y1, coords.r1, coords.x2, coords.y2, coords.r2);\n }\n\n for (i = 0, len = this.colorStops.length; i < len; i++) {\n var color = this.colorStops[i].color,\n opacity = this.colorStops[i].opacity,\n offset = this.colorStops[i].offset;\n\n if (typeof opacity !== 'undefined') {\n color = new fabric.Color(color).setAlpha(opacity).toRgba();\n }\n gradient.addColorStop(offset, color);\n }\n\n return gradient;\n }\n });\n\n fabric.util.object.extend(fabric.Gradient, {\n\n /* _FROM_SVG_START_ */\n /**\n * Returns {@link fabric.Gradient} instance from an SVG element\n * @static\n * @memberOf fabric.Gradient\n * @param {SVGGradientElement} el SVG gradient element\n * @param {fabric.Object} instance\n * @param {String} opacityAttr A fill-opacity or stroke-opacity attribute to multiply to each stop's opacity.\n * @param {Object} svgOptions an object containing the size of the SVG in order to parse correctly gradients\n * that uses gradientUnits as 'userSpaceOnUse' and percentages.\n * @param {Object.number} viewBoxWidth width part of the viewBox attribute on svg\n * @param {Object.number} viewBoxHeight height part of the viewBox attribute on svg\n * @param {Object.number} width width part of the svg tag if viewBox is not specified\n * @param {Object.number} height height part of the svg tag if viewBox is not specified\n * @return {fabric.Gradient} Gradient instance\n * @see http://www.w3.org/TR/SVG/pservers.html#LinearGradientElement\n * @see http://www.w3.org/TR/SVG/pservers.html#RadialGradientElement\n */\n fromElement: function(el, instance, opacityAttr, svgOptions) {\n /**\n * @example:\n *\n * \n * \n * \n * \n *\n * OR\n *\n * \n * \n * \n * \n *\n * OR\n *\n * \n * \n * \n * \n * \n *\n * OR\n *\n * \n * \n * \n * \n * \n *\n */\n\n var multiplier = parseFloat(opacityAttr) / (/%$/.test(opacityAttr) ? 100 : 1);\n multiplier = multiplier < 0 ? 0 : multiplier > 1 ? 1 : multiplier;\n if (isNaN(multiplier)) {\n multiplier = 1;\n }\n\n var colorStopEls = el.getElementsByTagName('stop'),\n type,\n gradientUnits = el.getAttribute('gradientUnits') === 'userSpaceOnUse' ?\n 'pixels' : 'percentage',\n gradientTransform = el.getAttribute('gradientTransform') || '',\n colorStops = [],\n coords, i, offsetX = 0, offsetY = 0,\n transformMatrix;\n if (el.nodeName === 'linearGradient' || el.nodeName === 'LINEARGRADIENT') {\n type = 'linear';\n coords = getLinearCoords(el);\n }\n else {\n type = 'radial';\n coords = getRadialCoords(el);\n }\n\n for (i = colorStopEls.length; i--; ) {\n colorStops.push(getColorStop(colorStopEls[i], multiplier));\n }\n\n transformMatrix = fabric.parseTransformAttribute(gradientTransform);\n\n __convertPercentUnitsToValues(instance, coords, svgOptions, gradientUnits);\n\n if (gradientUnits === 'pixels') {\n offsetX = -instance.left;\n offsetY = -instance.top;\n }\n\n var gradient = new fabric.Gradient({\n id: el.getAttribute('id'),\n type: type,\n coords: coords,\n colorStops: colorStops,\n gradientUnits: gradientUnits,\n gradientTransform: transformMatrix,\n offsetX: offsetX,\n offsetY: offsetY,\n });\n\n return gradient;\n }\n /* _FROM_SVG_END_ */\n });\n\n /**\n * @private\n */\n function __convertPercentUnitsToValues(instance, options, svgOptions, gradientUnits) {\n var propValue, finalValue;\n Object.keys(options).forEach(function(prop) {\n propValue = options[prop];\n if (propValue === 'Infinity') {\n finalValue = 1;\n }\n else if (propValue === '-Infinity') {\n finalValue = 0;\n }\n else {\n finalValue = parseFloat(options[prop], 10);\n if (typeof propValue === 'string' && /^(\\d+\\.\\d+)%|(\\d+)%$/.test(propValue)) {\n finalValue *= 0.01;\n if (gradientUnits === 'pixels') {\n // then we need to fix those percentages here in svg parsing\n if (prop === 'x1' || prop === 'x2' || prop === 'r2') {\n finalValue *= svgOptions.viewBoxWidth || svgOptions.width;\n }\n if (prop === 'y1' || prop === 'y2') {\n finalValue *= svgOptions.viewBoxHeight || svgOptions.height;\n }\n }\n }\n }\n options[prop] = finalValue;\n });\n }\n})();\n\n\n(function() {\n\n 'use strict';\n\n var toFixed = fabric.util.toFixed;\n\n /**\n * Pattern class\n * @class fabric.Pattern\n * @see {@link http://fabricjs.com/patterns|Pattern demo}\n * @see {@link http://fabricjs.com/dynamic-patterns|DynamicPattern demo}\n * @see {@link fabric.Pattern#initialize} for constructor definition\n */\n\n\n fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ {\n\n /**\n * Repeat property of a pattern (one of repeat, repeat-x, repeat-y or no-repeat)\n * @type String\n * @default\n */\n repeat: 'repeat',\n\n /**\n * Pattern horizontal offset from object's left/top corner\n * @type Number\n * @default\n */\n offsetX: 0,\n\n /**\n * Pattern vertical offset from object's left/top corner\n * @type Number\n * @default\n */\n offsetY: 0,\n\n /**\n * crossOrigin value (one of \"\", \"anonymous\", \"use-credentials\")\n * @see https://developer.mozilla.org/en-US/docs/HTML/CORS_settings_attributes\n * @type String\n * @default\n */\n crossOrigin: '',\n\n /**\n * transform matrix to change the pattern, imported from svgs.\n * @type Array\n * @default\n */\n patternTransform: null,\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n * @param {Function} [callback] function to invoke after callback init.\n * @return {fabric.Pattern} thisArg\n */\n initialize: function(options, callback) {\n options || (options = { });\n\n this.id = fabric.Object.__uid++;\n this.setOptions(options);\n if (!options.source || (options.source && typeof options.source !== 'string')) {\n callback && callback(this);\n return;\n }\n else {\n // img src string\n var _this = this;\n this.source = fabric.util.createImage();\n fabric.util.loadImage(options.source, function(img, isError) {\n _this.source = img;\n callback && callback(_this, isError);\n }, null, this.crossOrigin);\n }\n },\n\n /**\n * Returns object representation of a pattern\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} Object representation of a pattern instance\n */\n toObject: function(propertiesToInclude) {\n var NUM_FRACTION_DIGITS = fabric.Object.NUM_FRACTION_DIGITS,\n source, object;\n\n // element\n if (typeof this.source.src === 'string') {\n source = this.source.src;\n }\n // element\n else if (typeof this.source === 'object' && this.source.toDataURL) {\n source = this.source.toDataURL();\n }\n\n object = {\n type: 'pattern',\n source: source,\n repeat: this.repeat,\n crossOrigin: this.crossOrigin,\n offsetX: toFixed(this.offsetX, NUM_FRACTION_DIGITS),\n offsetY: toFixed(this.offsetY, NUM_FRACTION_DIGITS),\n patternTransform: this.patternTransform ? this.patternTransform.concat() : null\n };\n fabric.util.populateWithProperties(this, object, propertiesToInclude);\n\n return object;\n },\n\n /* _TO_SVG_START_ */\n /**\n * Returns SVG representation of a pattern\n * @param {fabric.Object} object\n * @return {String} SVG representation of a pattern\n */\n toSVG: function(object) {\n var patternSource = typeof this.source === 'function' ? this.source() : this.source,\n patternWidth = patternSource.width / object.width,\n patternHeight = patternSource.height / object.height,\n patternOffsetX = this.offsetX / object.width,\n patternOffsetY = this.offsetY / object.height,\n patternImgSrc = '';\n if (this.repeat === 'repeat-x' || this.repeat === 'no-repeat') {\n patternHeight = 1;\n if (patternOffsetY) {\n patternHeight += Math.abs(patternOffsetY);\n }\n }\n if (this.repeat === 'repeat-y' || this.repeat === 'no-repeat') {\n patternWidth = 1;\n if (patternOffsetX) {\n patternWidth += Math.abs(patternOffsetX);\n }\n\n }\n if (patternSource.src) {\n patternImgSrc = patternSource.src;\n }\n else if (patternSource.toDataURL) {\n patternImgSrc = patternSource.toDataURL();\n }\n\n return '\\n' +\n '\\n' +\n '\\n';\n },\n /* _TO_SVG_END_ */\n\n setOptions: function(options) {\n for (var prop in options) {\n this[prop] = options[prop];\n }\n },\n\n /**\n * Returns an instance of CanvasPattern\n * @param {CanvasRenderingContext2D} ctx Context to create pattern\n * @return {CanvasPattern}\n */\n toLive: function(ctx) {\n var source = this.source;\n // if the image failed to load, return, and allow rest to continue loading\n if (!source) {\n return '';\n }\n\n // if an image\n if (typeof source.src !== 'undefined') {\n if (!source.complete) {\n return '';\n }\n if (source.naturalWidth === 0 || source.naturalHeight === 0) {\n return '';\n }\n }\n return ctx.createPattern(source, this.repeat);\n }\n });\n})();\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n toFixed = fabric.util.toFixed;\n\n if (fabric.Shadow) {\n fabric.warn('fabric.Shadow is already defined.');\n return;\n }\n\n /**\n * Shadow class\n * @class fabric.Shadow\n * @see {@link http://fabricjs.com/shadows|Shadow demo}\n * @see {@link fabric.Shadow#initialize} for constructor definition\n */\n fabric.Shadow = fabric.util.createClass(/** @lends fabric.Shadow.prototype */ {\n\n /**\n * Shadow color\n * @type String\n * @default\n */\n color: 'rgb(0,0,0)',\n\n /**\n * Shadow blur\n * @type Number\n */\n blur: 0,\n\n /**\n * Shadow horizontal offset\n * @type Number\n * @default\n */\n offsetX: 0,\n\n /**\n * Shadow vertical offset\n * @type Number\n * @default\n */\n offsetY: 0,\n\n /**\n * Whether the shadow should affect stroke operations\n * @type Boolean\n * @default\n */\n affectStroke: false,\n\n /**\n * Indicates whether toObject should include default values\n * @type Boolean\n * @default\n */\n includeDefaultValues: true,\n\n /**\n * When `false`, the shadow will scale with the object.\n * When `true`, the shadow's offsetX, offsetY, and blur will not be affected by the object's scale.\n * default to false\n * @type Boolean\n * @default\n */\n nonScaling: false,\n\n /**\n * Constructor\n * @param {Object|String} [options] Options object with any of color, blur, offsetX, offsetY properties or string (e.g. \"rgba(0,0,0,0.2) 2px 2px 10px\")\n * @return {fabric.Shadow} thisArg\n */\n initialize: function(options) {\n\n if (typeof options === 'string') {\n options = this._parseShadow(options);\n }\n\n for (var prop in options) {\n this[prop] = options[prop];\n }\n\n this.id = fabric.Object.__uid++;\n },\n\n /**\n * @private\n * @param {String} shadow Shadow value to parse\n * @return {Object} Shadow object with color, offsetX, offsetY and blur\n */\n _parseShadow: function(shadow) {\n var shadowStr = shadow.trim(),\n offsetsAndBlur = fabric.Shadow.reOffsetsAndBlur.exec(shadowStr) || [],\n color = shadowStr.replace(fabric.Shadow.reOffsetsAndBlur, '') || 'rgb(0,0,0)';\n\n return {\n color: color.trim(),\n offsetX: parseFloat(offsetsAndBlur[1], 10) || 0,\n offsetY: parseFloat(offsetsAndBlur[2], 10) || 0,\n blur: parseFloat(offsetsAndBlur[3], 10) || 0\n };\n },\n\n /**\n * Returns a string representation of an instance\n * @see http://www.w3.org/TR/css-text-decor-3/#text-shadow\n * @return {String} Returns CSS3 text-shadow declaration\n */\n toString: function() {\n return [this.offsetX, this.offsetY, this.blur, this.color].join('px ');\n },\n\n /* _TO_SVG_START_ */\n /**\n * Returns SVG representation of a shadow\n * @param {fabric.Object} object\n * @return {String} SVG representation of a shadow\n */\n toSVG: function(object) {\n var fBoxX = 40, fBoxY = 40, NUM_FRACTION_DIGITS = fabric.Object.NUM_FRACTION_DIGITS,\n offset = fabric.util.rotateVector(\n { x: this.offsetX, y: this.offsetY },\n fabric.util.degreesToRadians(-object.angle)),\n BLUR_BOX = 20, color = new fabric.Color(this.color);\n\n if (object.width && object.height) {\n //http://www.w3.org/TR/SVG/filters.html#FilterEffectsRegion\n // we add some extra space to filter box to contain the blur ( 20 )\n fBoxX = toFixed((Math.abs(offset.x) + this.blur) / object.width, NUM_FRACTION_DIGITS) * 100 + BLUR_BOX;\n fBoxY = toFixed((Math.abs(offset.y) + this.blur) / object.height, NUM_FRACTION_DIGITS) * 100 + BLUR_BOX;\n }\n if (object.flipX) {\n offset.x *= -1;\n }\n if (object.flipY) {\n offset.y *= -1;\n }\n\n return (\n '\\n' +\n '\\t\\n' +\n '\\t\\n' +\n '\\t\\n' +\n '\\t\\n' +\n '\\t\\n' +\n '\\t\\t\\n' +\n '\\t\\t\\n' +\n '\\t\\n' +\n '\\n');\n },\n /* _TO_SVG_END_ */\n\n /**\n * Returns object representation of a shadow\n * @return {Object} Object representation of a shadow instance\n */\n toObject: function() {\n if (this.includeDefaultValues) {\n return {\n color: this.color,\n blur: this.blur,\n offsetX: this.offsetX,\n offsetY: this.offsetY,\n affectStroke: this.affectStroke,\n nonScaling: this.nonScaling\n };\n }\n var obj = { }, proto = fabric.Shadow.prototype;\n\n ['color', 'blur', 'offsetX', 'offsetY', 'affectStroke', 'nonScaling'].forEach(function(prop) {\n if (this[prop] !== proto[prop]) {\n obj[prop] = this[prop];\n }\n }, this);\n\n return obj;\n }\n });\n\n /**\n * Regex matching shadow offsetX, offsetY and blur (ex: \"2px 2px 10px rgba(0,0,0,0.2)\", \"rgb(0,255,0) 2px 2px\")\n * @static\n * @field\n * @memberOf fabric.Shadow\n */\n // eslint-disable-next-line max-len\n fabric.Shadow.reOffsetsAndBlur = /(?:\\s|^)(-?\\d+(?:\\.\\d*)?(?:px)?(?:\\s?|$))?(-?\\d+(?:\\.\\d*)?(?:px)?(?:\\s?|$))?(\\d+(?:\\.\\d*)?(?:px)?)?(?:\\s?|$)(?:$|\\s)/;\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function () {\n\n 'use strict';\n\n if (fabric.StaticCanvas) {\n fabric.warn('fabric.StaticCanvas is already defined.');\n return;\n }\n\n // aliases for faster resolution\n var extend = fabric.util.object.extend,\n getElementOffset = fabric.util.getElementOffset,\n removeFromArray = fabric.util.removeFromArray,\n toFixed = fabric.util.toFixed,\n transformPoint = fabric.util.transformPoint,\n invertTransform = fabric.util.invertTransform,\n getNodeCanvas = fabric.util.getNodeCanvas,\n createCanvasElement = fabric.util.createCanvasElement,\n\n CANVAS_INIT_ERROR = new Error('Could not initialize `canvas` element');\n\n /**\n * Static canvas class\n * @class fabric.StaticCanvas\n * @mixes fabric.Collection\n * @mixes fabric.Observable\n * @see {@link http://fabricjs.com/static_canvas|StaticCanvas demo}\n * @see {@link fabric.StaticCanvas#initialize} for constructor definition\n * @fires before:render\n * @fires after:render\n * @fires canvas:cleared\n * @fires object:added\n * @fires object:removed\n */\n fabric.StaticCanvas = fabric.util.createClass(fabric.CommonMethods, /** @lends fabric.StaticCanvas.prototype */ {\n\n /**\n * Constructor\n * @param {HTMLElement | String} el <canvas> element to initialize instance on\n * @param {Object} [options] Options object\n * @return {Object} thisArg\n */\n initialize: function(el, options) {\n options || (options = { });\n this.renderAndResetBound = this.renderAndReset.bind(this);\n this.requestRenderAllBound = this.requestRenderAll.bind(this);\n this._initStatic(el, options);\n },\n\n /**\n * Background color of canvas instance.\n * Should be set via {@link fabric.StaticCanvas#setBackgroundColor}.\n * @type {(String|fabric.Pattern)}\n * @default\n */\n backgroundColor: '',\n\n /**\n * Background image of canvas instance.\n * since 2.4.0 image caching is active, please when putting an image as background, add to the\n * canvas property a reference to the canvas it is on. Otherwise the image cannot detect the zoom\n * vale. As an alternative you can disable image objectCaching\n * @type fabric.Image\n * @default\n */\n backgroundImage: null,\n\n /**\n * Overlay color of canvas instance.\n * Should be set via {@link fabric.StaticCanvas#setOverlayColor}\n * @since 1.3.9\n * @type {(String|fabric.Pattern)}\n * @default\n */\n overlayColor: '',\n\n /**\n * Overlay image of canvas instance.\n * since 2.4.0 image caching is active, please when putting an image as overlay, add to the\n * canvas property a reference to the canvas it is on. Otherwise the image cannot detect the zoom\n * vale. As an alternative you can disable image objectCaching\n * @type fabric.Image\n * @default\n */\n overlayImage: null,\n\n /**\n * Indicates whether toObject/toDatalessObject should include default values\n * if set to false, takes precedence over the object value.\n * @type Boolean\n * @default\n */\n includeDefaultValues: true,\n\n /**\n * Indicates whether objects' state should be saved\n * @type Boolean\n * @default\n */\n stateful: false,\n\n /**\n * Indicates whether {@link fabric.Collection.add}, {@link fabric.Collection.insertAt} and {@link fabric.Collection.remove},\n * {@link fabric.StaticCanvas.moveTo}, {@link fabric.StaticCanvas.clear} and many more, should also re-render canvas.\n * Disabling this option will not give a performance boost when adding/removing a lot of objects to/from canvas at once\n * since the renders are quequed and executed one per frame.\n * Disabling is suggested anyway and managing the renders of the app manually is not a big effort ( canvas.requestRenderAll() )\n * Left default to true to do not break documentation and old app, fiddles.\n * @type Boolean\n * @default\n */\n renderOnAddRemove: true,\n\n /**\n * Indicates whether object controls (borders/controls) are rendered above overlay image\n * @type Boolean\n * @default\n */\n controlsAboveOverlay: false,\n\n /**\n * Indicates whether the browser can be scrolled when using a touchscreen and dragging on the canvas\n * @type Boolean\n * @default\n */\n allowTouchScrolling: false,\n\n /**\n * Indicates whether this canvas will use image smoothing, this is on by default in browsers\n * @type Boolean\n * @default\n */\n imageSmoothingEnabled: true,\n\n /**\n * The transformation (in the format of Canvas transform) which focuses the viewport\n * @type Array\n * @default\n */\n viewportTransform: fabric.iMatrix.concat(),\n\n /**\n * if set to false background image is not affected by viewport transform\n * @since 1.6.3\n * @type Boolean\n * @default\n */\n backgroundVpt: true,\n\n /**\n * if set to false overlya image is not affected by viewport transform\n * @since 1.6.3\n * @type Boolean\n * @default\n */\n overlayVpt: true,\n\n /**\n * When true, canvas is scaled by devicePixelRatio for better rendering on retina screens\n * @type Boolean\n * @default\n */\n enableRetinaScaling: true,\n\n /**\n * Describe canvas element extension over design\n * properties are tl,tr,bl,br.\n * if canvas is not zoomed/panned those points are the four corner of canvas\n * if canvas is viewportTransformed you those points indicate the extension\n * of canvas element in plain untrasformed coordinates\n * The coordinates get updated with @method calcViewportBoundaries.\n * @memberOf fabric.StaticCanvas.prototype\n */\n vptCoords: { },\n\n /**\n * Based on vptCoords and object.aCoords, skip rendering of objects that\n * are not included in current viewport.\n * May greatly help in applications with crowded canvas and use of zoom/pan\n * If One of the corner of the bounding box of the object is on the canvas\n * the objects get rendered.\n * @memberOf fabric.StaticCanvas.prototype\n * @type Boolean\n * @default\n */\n skipOffscreen: true,\n\n /**\n * a fabricObject that, without stroke define a clipping area with their shape. filled in black\n * the clipPath object gets used when the canvas has rendered, and the context is placed in the\n * top left corner of the canvas.\n * clipPath will clip away controls, if you do not want this to happen use controlsAboveOverlay = true\n * @type fabric.Object\n */\n clipPath: undefined,\n\n /**\n * @private\n * @param {HTMLElement | String} el <canvas> element to initialize instance on\n * @param {Object} [options] Options object\n */\n _initStatic: function(el, options) {\n var cb = this.requestRenderAllBound;\n this._objects = [];\n this._createLowerCanvas(el);\n this._initOptions(options);\n // only initialize retina scaling once\n if (!this.interactive) {\n this._initRetinaScaling();\n }\n\n if (options.overlayImage) {\n this.setOverlayImage(options.overlayImage, cb);\n }\n if (options.backgroundImage) {\n this.setBackgroundImage(options.backgroundImage, cb);\n }\n if (options.backgroundColor) {\n this.setBackgroundColor(options.backgroundColor, cb);\n }\n if (options.overlayColor) {\n this.setOverlayColor(options.overlayColor, cb);\n }\n this.calcOffset();\n },\n\n /**\n * @private\n */\n _isRetinaScaling: function() {\n return (fabric.devicePixelRatio !== 1 && this.enableRetinaScaling);\n },\n\n /**\n * @private\n * @return {Number} retinaScaling if applied, otherwise 1;\n */\n getRetinaScaling: function() {\n return this._isRetinaScaling() ? fabric.devicePixelRatio : 1;\n },\n\n /**\n * @private\n */\n _initRetinaScaling: function() {\n if (!this._isRetinaScaling()) {\n return;\n }\n var scaleRatio = fabric.devicePixelRatio;\n this.__initRetinaScaling(scaleRatio, this.lowerCanvasEl, this.contextContainer);\n if (this.upperCanvasEl) {\n this.__initRetinaScaling(scaleRatio, this.upperCanvasEl, this.contextTop);\n }\n },\n\n __initRetinaScaling: function(scaleRatio, canvas, context) {\n canvas.setAttribute('width', this.width * scaleRatio);\n canvas.setAttribute('height', this.height * scaleRatio);\n context.scale(scaleRatio, scaleRatio);\n },\n\n\n /**\n * Calculates canvas element offset relative to the document\n * This method is also attached as \"resize\" event handler of window\n * @return {fabric.Canvas} instance\n * @chainable\n */\n calcOffset: function () {\n this._offset = getElementOffset(this.lowerCanvasEl);\n return this;\n },\n\n /**\n * Sets {@link fabric.StaticCanvas#overlayImage|overlay image} for this canvas\n * @param {(fabric.Image|String)} image fabric.Image instance or URL of an image to set overlay to\n * @param {Function} callback callback to invoke when image is loaded and set as an overlay\n * @param {Object} [options] Optional options to set for the {@link fabric.Image|overlay image}.\n * @return {fabric.Canvas} thisArg\n * @chainable\n * @see {@link http://jsfiddle.net/fabricjs/MnzHT/|jsFiddle demo}\n * @example Normal overlayImage with left/top = 0\n * canvas.setOverlayImage('http://fabricjs.com/assets/jail_cell_bars.png', canvas.renderAll.bind(canvas), {\n * // Needed to position overlayImage at 0/0\n * originX: 'left',\n * originY: 'top'\n * });\n * @example overlayImage with different properties\n * canvas.setOverlayImage('http://fabricjs.com/assets/jail_cell_bars.png', canvas.renderAll.bind(canvas), {\n * opacity: 0.5,\n * angle: 45,\n * left: 400,\n * top: 400,\n * originX: 'left',\n * originY: 'top'\n * });\n * @example Stretched overlayImage #1 - width/height correspond to canvas width/height\n * fabric.Image.fromURL('http://fabricjs.com/assets/jail_cell_bars.png', function(img, isError) {\n * img.set({width: canvas.width, height: canvas.height, originX: 'left', originY: 'top'});\n * canvas.setOverlayImage(img, canvas.renderAll.bind(canvas));\n * });\n * @example Stretched overlayImage #2 - width/height correspond to canvas width/height\n * canvas.setOverlayImage('http://fabricjs.com/assets/jail_cell_bars.png', canvas.renderAll.bind(canvas), {\n * width: canvas.width,\n * height: canvas.height,\n * // Needed to position overlayImage at 0/0\n * originX: 'left',\n * originY: 'top'\n * });\n * @example overlayImage loaded from cross-origin\n * canvas.setOverlayImage('http://fabricjs.com/assets/jail_cell_bars.png', canvas.renderAll.bind(canvas), {\n * opacity: 0.5,\n * angle: 45,\n * left: 400,\n * top: 400,\n * originX: 'left',\n * originY: 'top',\n * crossOrigin: 'anonymous'\n * });\n */\n setOverlayImage: function (image, callback, options) {\n return this.__setBgOverlayImage('overlayImage', image, callback, options);\n },\n\n /**\n * Sets {@link fabric.StaticCanvas#backgroundImage|background image} for this canvas\n * @param {(fabric.Image|String)} image fabric.Image instance or URL of an image to set background to\n * @param {Function} callback Callback to invoke when image is loaded and set as background\n * @param {Object} [options] Optional options to set for the {@link fabric.Image|background image}.\n * @return {fabric.Canvas} thisArg\n * @chainable\n * @see {@link http://jsfiddle.net/djnr8o7a/28/|jsFiddle demo}\n * @example Normal backgroundImage with left/top = 0\n * canvas.setBackgroundImage('http://fabricjs.com/assets/honey_im_subtle.png', canvas.renderAll.bind(canvas), {\n * // Needed to position backgroundImage at 0/0\n * originX: 'left',\n * originY: 'top'\n * });\n * @example backgroundImage with different properties\n * canvas.setBackgroundImage('http://fabricjs.com/assets/honey_im_subtle.png', canvas.renderAll.bind(canvas), {\n * opacity: 0.5,\n * angle: 45,\n * left: 400,\n * top: 400,\n * originX: 'left',\n * originY: 'top'\n * });\n * @example Stretched backgroundImage #1 - width/height correspond to canvas width/height\n * fabric.Image.fromURL('http://fabricjs.com/assets/honey_im_subtle.png', function(img, isError) {\n * img.set({width: canvas.width, height: canvas.height, originX: 'left', originY: 'top'});\n * canvas.setBackgroundImage(img, canvas.renderAll.bind(canvas));\n * });\n * @example Stretched backgroundImage #2 - width/height correspond to canvas width/height\n * canvas.setBackgroundImage('http://fabricjs.com/assets/honey_im_subtle.png', canvas.renderAll.bind(canvas), {\n * width: canvas.width,\n * height: canvas.height,\n * // Needed to position backgroundImage at 0/0\n * originX: 'left',\n * originY: 'top'\n * });\n * @example backgroundImage loaded from cross-origin\n * canvas.setBackgroundImage('http://fabricjs.com/assets/honey_im_subtle.png', canvas.renderAll.bind(canvas), {\n * opacity: 0.5,\n * angle: 45,\n * left: 400,\n * top: 400,\n * originX: 'left',\n * originY: 'top',\n * crossOrigin: 'anonymous'\n * });\n */\n // TODO: fix stretched examples\n setBackgroundImage: function (image, callback, options) {\n return this.__setBgOverlayImage('backgroundImage', image, callback, options);\n },\n\n /**\n * Sets {@link fabric.StaticCanvas#overlayColor|foreground color} for this canvas\n * @param {(String|fabric.Pattern)} overlayColor Color or pattern to set foreground color to\n * @param {Function} callback Callback to invoke when foreground color is set\n * @return {fabric.Canvas} thisArg\n * @chainable\n * @see {@link http://jsfiddle.net/fabricjs/pB55h/|jsFiddle demo}\n * @example Normal overlayColor - color value\n * canvas.setOverlayColor('rgba(255, 73, 64, 0.6)', canvas.renderAll.bind(canvas));\n * @example fabric.Pattern used as overlayColor\n * canvas.setOverlayColor({\n * source: 'http://fabricjs.com/assets/escheresque_ste.png'\n * }, canvas.renderAll.bind(canvas));\n * @example fabric.Pattern used as overlayColor with repeat and offset\n * canvas.setOverlayColor({\n * source: 'http://fabricjs.com/assets/escheresque_ste.png',\n * repeat: 'repeat',\n * offsetX: 200,\n * offsetY: 100\n * }, canvas.renderAll.bind(canvas));\n */\n setOverlayColor: function(overlayColor, callback) {\n return this.__setBgOverlayColor('overlayColor', overlayColor, callback);\n },\n\n /**\n * Sets {@link fabric.StaticCanvas#backgroundColor|background color} for this canvas\n * @param {(String|fabric.Pattern)} backgroundColor Color or pattern to set background color to\n * @param {Function} callback Callback to invoke when background color is set\n * @return {fabric.Canvas} thisArg\n * @chainable\n * @see {@link http://jsfiddle.net/fabricjs/hXzvk/|jsFiddle demo}\n * @example Normal backgroundColor - color value\n * canvas.setBackgroundColor('rgba(255, 73, 64, 0.6)', canvas.renderAll.bind(canvas));\n * @example fabric.Pattern used as backgroundColor\n * canvas.setBackgroundColor({\n * source: 'http://fabricjs.com/assets/escheresque_ste.png'\n * }, canvas.renderAll.bind(canvas));\n * @example fabric.Pattern used as backgroundColor with repeat and offset\n * canvas.setBackgroundColor({\n * source: 'http://fabricjs.com/assets/escheresque_ste.png',\n * repeat: 'repeat',\n * offsetX: 200,\n * offsetY: 100\n * }, canvas.renderAll.bind(canvas));\n */\n setBackgroundColor: function(backgroundColor, callback) {\n return this.__setBgOverlayColor('backgroundColor', backgroundColor, callback);\n },\n\n /**\n * @private\n * @param {String} property Property to set ({@link fabric.StaticCanvas#backgroundImage|backgroundImage}\n * or {@link fabric.StaticCanvas#overlayImage|overlayImage})\n * @param {(fabric.Image|String|null)} image fabric.Image instance, URL of an image or null to set background or overlay to\n * @param {Function} callback Callback to invoke when image is loaded and set as background or overlay. The first argument is the created image, the second argument is a flag indicating whether an error occurred or not.\n * @param {Object} [options] Optional options to set for the {@link fabric.Image|image}.\n */\n __setBgOverlayImage: function(property, image, callback, options) {\n if (typeof image === 'string') {\n fabric.util.loadImage(image, function(img, isError) {\n if (img) {\n var instance = new fabric.Image(img, options);\n this[property] = instance;\n instance.canvas = this;\n }\n callback && callback(img, isError);\n }, this, options && options.crossOrigin);\n }\n else {\n options && image.setOptions(options);\n this[property] = image;\n image && (image.canvas = this);\n callback && callback(image, false);\n }\n\n return this;\n },\n\n /**\n * @private\n * @param {String} property Property to set ({@link fabric.StaticCanvas#backgroundColor|backgroundColor}\n * or {@link fabric.StaticCanvas#overlayColor|overlayColor})\n * @param {(Object|String|null)} color Object with pattern information, color value or null\n * @param {Function} [callback] Callback is invoked when color is set\n */\n __setBgOverlayColor: function(property, color, callback) {\n this[property] = color;\n this._initGradient(color, property);\n this._initPattern(color, property, callback);\n return this;\n },\n\n /**\n * @private\n */\n _createCanvasElement: function() {\n var element = createCanvasElement();\n if (!element) {\n throw CANVAS_INIT_ERROR;\n }\n if (!element.style) {\n element.style = { };\n }\n if (typeof element.getContext === 'undefined') {\n throw CANVAS_INIT_ERROR;\n }\n return element;\n },\n\n /**\n * @private\n * @param {Object} [options] Options object\n */\n _initOptions: function (options) {\n var lowerCanvasEl = this.lowerCanvasEl;\n this._setOptions(options);\n\n this.width = this.width || parseInt(lowerCanvasEl.width, 10) || 0;\n this.height = this.height || parseInt(lowerCanvasEl.height, 10) || 0;\n\n if (!this.lowerCanvasEl.style) {\n return;\n }\n\n lowerCanvasEl.width = this.width;\n lowerCanvasEl.height = this.height;\n\n lowerCanvasEl.style.width = this.width + 'px';\n lowerCanvasEl.style.height = this.height + 'px';\n\n this.viewportTransform = this.viewportTransform.slice();\n },\n\n /**\n * Creates a bottom canvas\n * @private\n * @param {HTMLElement} [canvasEl]\n */\n _createLowerCanvas: function (canvasEl) {\n // canvasEl === 'HTMLCanvasElement' does not work on jsdom/node\n if (canvasEl && canvasEl.getContext) {\n this.lowerCanvasEl = canvasEl;\n }\n else {\n this.lowerCanvasEl = fabric.util.getById(canvasEl) || this._createCanvasElement();\n }\n\n fabric.util.addClass(this.lowerCanvasEl, 'lower-canvas');\n this._originalCanvasStyle = this.lowerCanvasEl.style;\n if (this.interactive) {\n this._applyCanvasStyle(this.lowerCanvasEl);\n }\n\n this.contextContainer = this.lowerCanvasEl.getContext('2d');\n },\n\n /**\n * Returns canvas width (in px)\n * @return {Number}\n */\n getWidth: function () {\n return this.width;\n },\n\n /**\n * Returns canvas height (in px)\n * @return {Number}\n */\n getHeight: function () {\n return this.height;\n },\n\n /**\n * Sets width of this canvas instance\n * @param {Number|String} value Value to set width to\n * @param {Object} [options] Options object\n * @param {Boolean} [options.backstoreOnly=false] Set the given dimensions only as canvas backstore dimensions\n * @param {Boolean} [options.cssOnly=false] Set the given dimensions only as css dimensions\n * @return {fabric.Canvas} instance\n * @chainable true\n */\n setWidth: function (value, options) {\n return this.setDimensions({ width: value }, options);\n },\n\n /**\n * Sets height of this canvas instance\n * @param {Number|String} value Value to set height to\n * @param {Object} [options] Options object\n * @param {Boolean} [options.backstoreOnly=false] Set the given dimensions only as canvas backstore dimensions\n * @param {Boolean} [options.cssOnly=false] Set the given dimensions only as css dimensions\n * @return {fabric.Canvas} instance\n * @chainable true\n */\n setHeight: function (value, options) {\n return this.setDimensions({ height: value }, options);\n },\n\n /**\n * Sets dimensions (width, height) of this canvas instance. when options.cssOnly flag active you should also supply the unit of measure (px/%/em)\n * @param {Object} dimensions Object with width/height properties\n * @param {Number|String} [dimensions.width] Width of canvas element\n * @param {Number|String} [dimensions.height] Height of canvas element\n * @param {Object} [options] Options object\n * @param {Boolean} [options.backstoreOnly=false] Set the given dimensions only as canvas backstore dimensions\n * @param {Boolean} [options.cssOnly=false] Set the given dimensions only as css dimensions\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n setDimensions: function (dimensions, options) {\n var cssValue;\n\n options = options || {};\n\n for (var prop in dimensions) {\n cssValue = dimensions[prop];\n\n if (!options.cssOnly) {\n this._setBackstoreDimension(prop, dimensions[prop]);\n cssValue += 'px';\n this.hasLostContext = true;\n }\n\n if (!options.backstoreOnly) {\n this._setCssDimension(prop, cssValue);\n }\n }\n if (this._isCurrentlyDrawing) {\n this.freeDrawingBrush && this.freeDrawingBrush._setBrushStyles();\n }\n this._initRetinaScaling();\n this.calcOffset();\n\n if (!options.cssOnly) {\n this.requestRenderAll();\n }\n\n return this;\n },\n\n /**\n * Helper for setting width/height\n * @private\n * @param {String} prop property (width|height)\n * @param {Number} value value to set property to\n * @return {fabric.Canvas} instance\n * @chainable true\n */\n _setBackstoreDimension: function (prop, value) {\n this.lowerCanvasEl[prop] = value;\n\n if (this.upperCanvasEl) {\n this.upperCanvasEl[prop] = value;\n }\n\n if (this.cacheCanvasEl) {\n this.cacheCanvasEl[prop] = value;\n }\n\n this[prop] = value;\n\n return this;\n },\n\n /**\n * Helper for setting css width/height\n * @private\n * @param {String} prop property (width|height)\n * @param {String} value value to set property to\n * @return {fabric.Canvas} instance\n * @chainable true\n */\n _setCssDimension: function (prop, value) {\n this.lowerCanvasEl.style[prop] = value;\n\n if (this.upperCanvasEl) {\n this.upperCanvasEl.style[prop] = value;\n }\n\n if (this.wrapperEl) {\n this.wrapperEl.style[prop] = value;\n }\n\n return this;\n },\n\n /**\n * Returns canvas zoom level\n * @return {Number}\n */\n getZoom: function () {\n return this.viewportTransform[0];\n },\n\n /**\n * Sets viewport transform of this canvas instance\n * @param {Array} vpt the transform in the form of context.transform\n * @return {fabric.Canvas} instance\n * @chainable true\n */\n setViewportTransform: function (vpt) {\n var activeObject = this._activeObject,\n backgroundObject = this.backgroundImage,\n overlayObject = this.overlayImage,\n object, i, len;\n this.viewportTransform = vpt;\n for (i = 0, len = this._objects.length; i < len; i++) {\n object = this._objects[i];\n object.group || object.setCoords(true);\n }\n if (activeObject) {\n activeObject.setCoords();\n }\n if (backgroundObject) {\n backgroundObject.setCoords(true);\n }\n if (overlayObject) {\n overlayObject.setCoords(true);\n }\n this.calcViewportBoundaries();\n this.renderOnAddRemove && this.requestRenderAll();\n return this;\n },\n\n /**\n * Sets zoom level of this canvas instance, the zoom centered around point\n * meaning that following zoom to point with the same point will have the visual\n * effect of the zoom originating from that point. The point won't move.\n * It has nothing to do with canvas center or visual center of the viewport.\n * @param {fabric.Point} point to zoom with respect to\n * @param {Number} value to set zoom to, less than 1 zooms out\n * @return {fabric.Canvas} instance\n * @chainable true\n */\n zoomToPoint: function (point, value) {\n // TODO: just change the scale, preserve other transformations\n var before = point, vpt = this.viewportTransform.slice(0);\n point = transformPoint(point, invertTransform(this.viewportTransform));\n vpt[0] = value;\n vpt[3] = value;\n var after = transformPoint(point, vpt);\n vpt[4] += before.x - after.x;\n vpt[5] += before.y - after.y;\n return this.setViewportTransform(vpt);\n },\n\n /**\n * Sets zoom level of this canvas instance\n * @param {Number} value to set zoom to, less than 1 zooms out\n * @return {fabric.Canvas} instance\n * @chainable true\n */\n setZoom: function (value) {\n this.zoomToPoint(new fabric.Point(0, 0), value);\n return this;\n },\n\n /**\n * Pan viewport so as to place point at top left corner of canvas\n * @param {fabric.Point} point to move to\n * @return {fabric.Canvas} instance\n * @chainable true\n */\n absolutePan: function (point) {\n var vpt = this.viewportTransform.slice(0);\n vpt[4] = -point.x;\n vpt[5] = -point.y;\n return this.setViewportTransform(vpt);\n },\n\n /**\n * Pans viewpoint relatively\n * @param {fabric.Point} point (position vector) to move by\n * @return {fabric.Canvas} instance\n * @chainable true\n */\n relativePan: function (point) {\n return this.absolutePan(new fabric.Point(\n -point.x - this.viewportTransform[4],\n -point.y - this.viewportTransform[5]\n ));\n },\n\n /**\n * Returns <canvas> element corresponding to this instance\n * @return {HTMLCanvasElement}\n */\n getElement: function () {\n return this.lowerCanvasEl;\n },\n\n /**\n * @private\n * @param {fabric.Object} obj Object that was added\n */\n _onObjectAdded: function(obj) {\n this.stateful && obj.setupState();\n obj._set('canvas', this);\n obj.setCoords();\n this.fire('object:added', { target: obj });\n obj.fire('added');\n },\n\n /**\n * @private\n * @param {fabric.Object} obj Object that was removed\n */\n _onObjectRemoved: function(obj) {\n this.fire('object:removed', { target: obj });\n obj.fire('removed');\n delete obj.canvas;\n },\n\n /**\n * Clears specified context of canvas element\n * @param {CanvasRenderingContext2D} ctx Context to clear\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n clearContext: function(ctx) {\n ctx.clearRect(0, 0, this.width, this.height);\n return this;\n },\n\n /**\n * Returns context of canvas where objects are drawn\n * @return {CanvasRenderingContext2D}\n */\n getContext: function () {\n return this.contextContainer;\n },\n\n /**\n * Clears all contexts (background, main, top) of an instance\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n clear: function () {\n this.remove.apply(this, this.getObjects());\n this.backgroundImage = null;\n this.overlayImage = null;\n this.backgroundColor = '';\n this.overlayColor = '';\n if (this._hasITextHandlers) {\n this.off('mouse:up', this._mouseUpITextHandler);\n this._iTextInstances = null;\n this._hasITextHandlers = false;\n }\n this.clearContext(this.contextContainer);\n this.fire('canvas:cleared');\n this.renderOnAddRemove && this.requestRenderAll();\n return this;\n },\n\n /**\n * Renders the canvas\n * @return {fabric.Canvas} instance\n * @chainable\n */\n renderAll: function () {\n var canvasToDrawOn = this.contextContainer;\n this.renderCanvas(canvasToDrawOn, this._objects);\n return this;\n },\n\n /**\n * Function created to be instance bound at initialization\n * used in requestAnimationFrame rendering\n * Let the fabricJS call it. If you call it manually you could have more\n * animationFrame stacking on to of each other\n * for an imperative rendering, use canvas.renderAll\n * @private\n * @return {fabric.Canvas} instance\n * @chainable\n */\n renderAndReset: function() {\n this.isRendering = 0;\n this.renderAll();\n },\n\n /**\n * Append a renderAll request to next animation frame.\n * unless one is already in progress, in that case nothing is done\n * a boolean flag will avoid appending more.\n * @return {fabric.Canvas} instance\n * @chainable\n */\n requestRenderAll: function () {\n if (!this.isRendering) {\n this.isRendering = fabric.util.requestAnimFrame(this.renderAndResetBound);\n }\n return this;\n },\n\n /**\n * Calculate the position of the 4 corner of canvas with current viewportTransform.\n * helps to determinate when an object is in the current rendering viewport using\n * object absolute coordinates ( aCoords )\n * @return {Object} points.tl\n * @chainable\n */\n calcViewportBoundaries: function() {\n var points = { }, width = this.width, height = this.height,\n iVpt = invertTransform(this.viewportTransform);\n points.tl = transformPoint({ x: 0, y: 0 }, iVpt);\n points.br = transformPoint({ x: width, y: height }, iVpt);\n points.tr = new fabric.Point(points.br.x, points.tl.y);\n points.bl = new fabric.Point(points.tl.x, points.br.y);\n this.vptCoords = points;\n return points;\n },\n\n cancelRequestedRender: function() {\n if (this.isRendering) {\n fabric.util.cancelAnimFrame(this.isRendering);\n this.isRendering = 0;\n }\n },\n\n /**\n * Renders background, objects, overlay and controls.\n * @param {CanvasRenderingContext2D} ctx\n * @param {Array} objects to render\n * @return {fabric.Canvas} instance\n * @chainable\n */\n renderCanvas: function(ctx, objects) {\n var v = this.viewportTransform, path = this.clipPath;\n this.cancelRequestedRender();\n this.calcViewportBoundaries();\n this.clearContext(ctx);\n fabric.util.setImageSmoothing(ctx, this.imageSmoothingEnabled);\n this.fire('before:render', { ctx: ctx, });\n this._renderBackground(ctx);\n\n ctx.save();\n //apply viewport transform once for all rendering process\n ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]);\n this._renderObjects(ctx, objects);\n ctx.restore();\n if (!this.controlsAboveOverlay && this.interactive) {\n this.drawControls(ctx);\n }\n if (path) {\n path.canvas = this;\n // needed to setup a couple of variables\n path.shouldCache();\n path._transformDone = true;\n path.renderCache({ forClipping: true });\n this.drawClipPathOnCanvas(ctx);\n }\n this._renderOverlay(ctx);\n if (this.controlsAboveOverlay && this.interactive) {\n this.drawControls(ctx);\n }\n this.fire('after:render', { ctx: ctx, });\n },\n\n /**\n * Paint the cached clipPath on the lowerCanvasEl\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n drawClipPathOnCanvas: function(ctx) {\n var v = this.viewportTransform, path = this.clipPath;\n ctx.save();\n ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]);\n // DEBUG: uncomment this line, comment the following\n // ctx.globalAlpha = 0.4;\n ctx.globalCompositeOperation = 'destination-in';\n path.transform(ctx);\n ctx.scale(1 / path.zoomX, 1 / path.zoomY);\n ctx.drawImage(path._cacheCanvas, -path.cacheTranslationX, -path.cacheTranslationY);\n ctx.restore();\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {Array} objects to render\n */\n _renderObjects: function(ctx, objects) {\n var i, len;\n for (i = 0, len = objects.length; i < len; ++i) {\n objects[i] && objects[i].render(ctx);\n }\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {string} property 'background' or 'overlay'\n */\n _renderBackgroundOrOverlay: function(ctx, property) {\n var fill = this[property + 'Color'], object = this[property + 'Image'],\n v = this.viewportTransform, needsVpt = this[property + 'Vpt'];\n if (!fill && !object) {\n return;\n }\n if (fill) {\n ctx.save();\n ctx.beginPath();\n ctx.moveTo(0, 0);\n ctx.lineTo(this.width, 0);\n ctx.lineTo(this.width, this.height);\n ctx.lineTo(0, this.height);\n ctx.closePath();\n ctx.fillStyle = fill.toLive\n ? fill.toLive(ctx, this)\n : fill;\n if (needsVpt) {\n ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]);\n }\n ctx.transform(1, 0, 0, 1, fill.offsetX || 0, fill.offsetY || 0);\n var m = fill.gradientTransform || fill.patternTransform;\n m && ctx.transform(m[0], m[1], m[2], m[3], m[4], m[5]);\n ctx.fill();\n ctx.restore();\n }\n if (object) {\n ctx.save();\n if (needsVpt) {\n ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]);\n }\n object.render(ctx);\n ctx.restore();\n }\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderBackground: function(ctx) {\n this._renderBackgroundOrOverlay(ctx, 'background');\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderOverlay: function(ctx) {\n this._renderBackgroundOrOverlay(ctx, 'overlay');\n },\n\n /**\n * Returns coordinates of a center of canvas.\n * Returned value is an object with top and left properties\n * @return {Object} object with \"top\" and \"left\" number values\n */\n getCenter: function () {\n return {\n top: this.height / 2,\n left: this.width / 2\n };\n },\n\n /**\n * Centers object horizontally in the canvas\n * @param {fabric.Object} object Object to center horizontally\n * @return {fabric.Canvas} thisArg\n */\n centerObjectH: function (object) {\n return this._centerObject(object, new fabric.Point(this.getCenter().left, object.getCenterPoint().y));\n },\n\n /**\n * Centers object vertically in the canvas\n * @param {fabric.Object} object Object to center vertically\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n centerObjectV: function (object) {\n return this._centerObject(object, new fabric.Point(object.getCenterPoint().x, this.getCenter().top));\n },\n\n /**\n * Centers object vertically and horizontally in the canvas\n * @param {fabric.Object} object Object to center vertically and horizontally\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n centerObject: function(object) {\n var center = this.getCenter();\n\n return this._centerObject(object, new fabric.Point(center.left, center.top));\n },\n\n /**\n * Centers object vertically and horizontally in the viewport\n * @param {fabric.Object} object Object to center vertically and horizontally\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n viewportCenterObject: function(object) {\n var vpCenter = this.getVpCenter();\n\n return this._centerObject(object, vpCenter);\n },\n\n /**\n * Centers object horizontally in the viewport, object.top is unchanged\n * @param {fabric.Object} object Object to center vertically and horizontally\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n viewportCenterObjectH: function(object) {\n var vpCenter = this.getVpCenter();\n this._centerObject(object, new fabric.Point(vpCenter.x, object.getCenterPoint().y));\n return this;\n },\n\n /**\n * Centers object Vertically in the viewport, object.top is unchanged\n * @param {fabric.Object} object Object to center vertically and horizontally\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n viewportCenterObjectV: function(object) {\n var vpCenter = this.getVpCenter();\n\n return this._centerObject(object, new fabric.Point(object.getCenterPoint().x, vpCenter.y));\n },\n\n /**\n * Calculate the point in canvas that correspond to the center of actual viewport.\n * @return {fabric.Point} vpCenter, viewport center\n * @chainable\n */\n getVpCenter: function() {\n var center = this.getCenter(),\n iVpt = invertTransform(this.viewportTransform);\n return transformPoint({ x: center.left, y: center.top }, iVpt);\n },\n\n /**\n * @private\n * @param {fabric.Object} object Object to center\n * @param {fabric.Point} center Center point\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n _centerObject: function(object, center) {\n object.setPositionByOrigin(center, 'center', 'center');\n object.setCoords();\n this.renderOnAddRemove && this.requestRenderAll();\n return this;\n },\n\n /**\n * Returns dataless JSON representation of canvas\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {String} json string\n */\n toDatalessJSON: function (propertiesToInclude) {\n return this.toDatalessObject(propertiesToInclude);\n },\n\n /**\n * Returns object representation of canvas\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject: function (propertiesToInclude) {\n return this._toObjectMethod('toObject', propertiesToInclude);\n },\n\n /**\n * Returns dataless object representation of canvas\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toDatalessObject: function (propertiesToInclude) {\n return this._toObjectMethod('toDatalessObject', propertiesToInclude);\n },\n\n /**\n * @private\n */\n _toObjectMethod: function (methodName, propertiesToInclude) {\n\n var clipPath = this.clipPath, data = {\n version: fabric.version,\n objects: this._toObjects(methodName, propertiesToInclude),\n };\n if (clipPath && !clipPath.excludeFromExport) {\n data.clipPath = this._toObject(this.clipPath, methodName, propertiesToInclude);\n }\n extend(data, this.__serializeBgOverlay(methodName, propertiesToInclude));\n\n fabric.util.populateWithProperties(this, data, propertiesToInclude);\n\n return data;\n },\n\n /**\n * @private\n */\n _toObjects: function(methodName, propertiesToInclude) {\n return this._objects.filter(function(object) {\n return !object.excludeFromExport;\n }).map(function(instance) {\n return this._toObject(instance, methodName, propertiesToInclude);\n }, this);\n },\n\n /**\n * @private\n */\n _toObject: function(instance, methodName, propertiesToInclude) {\n var originalValue;\n\n if (!this.includeDefaultValues) {\n originalValue = instance.includeDefaultValues;\n instance.includeDefaultValues = false;\n }\n\n var object = instance[methodName](propertiesToInclude);\n if (!this.includeDefaultValues) {\n instance.includeDefaultValues = originalValue;\n }\n return object;\n },\n\n /**\n * @private\n */\n __serializeBgOverlay: function(methodName, propertiesToInclude) {\n var data = {}, bgImage = this.backgroundImage, overlayImage = this.overlayImage,\n bgColor = this.backgroundColor, overlayColor = this.overlayColor;\n\n if (bgColor && bgColor.toObject) {\n if (!bgColor.excludeFromExport) {\n data.background = bgColor.toObject(propertiesToInclude);\n }\n }\n else if (bgColor) {\n data.background = bgColor;\n }\n\n if (overlayColor && overlayColor.toObject) {\n if (!overlayColor.excludeFromExport) {\n data.overlay = overlayColor.toObject(propertiesToInclude);\n }\n }\n else if (overlayColor) {\n data.overlay = overlayColor;\n }\n\n if (bgImage && !bgImage.excludeFromExport) {\n data.backgroundImage = this._toObject(bgImage, methodName, propertiesToInclude);\n }\n if (overlayImage && !overlayImage.excludeFromExport) {\n data.overlayImage = this._toObject(overlayImage, methodName, propertiesToInclude);\n }\n\n return data;\n },\n\n /* _TO_SVG_START_ */\n /**\n * When true, getSvgTransform() will apply the StaticCanvas.viewportTransform to the SVG transformation. When true,\n * a zoomed canvas will then produce zoomed SVG output.\n * @type Boolean\n * @default\n */\n svgViewportTransformation: true,\n\n /**\n * Returns SVG representation of canvas\n * @function\n * @param {Object} [options] Options object for SVG output\n * @param {Boolean} [options.suppressPreamble=false] If true xml tag is not included\n * @param {Object} [options.viewBox] SVG viewbox object\n * @param {Number} [options.viewBox.x] x-coordinate of viewbox\n * @param {Number} [options.viewBox.y] y-coordinate of viewbox\n * @param {Number} [options.viewBox.width] Width of viewbox\n * @param {Number} [options.viewBox.height] Height of viewbox\n * @param {String} [options.encoding=UTF-8] Encoding of SVG output\n * @param {String} [options.width] desired width of svg with or without units\n * @param {String} [options.height] desired height of svg with or without units\n * @param {Function} [reviver] Method for further parsing of svg elements, called after each fabric object converted into svg representation.\n * @return {String} SVG string\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-3#serialization}\n * @see {@link http://jsfiddle.net/fabricjs/jQ3ZZ/|jsFiddle demo}\n * @example Normal SVG output\n * var svg = canvas.toSVG();\n * @example SVG output without preamble (without <?xml ../>)\n * var svg = canvas.toSVG({suppressPreamble: true});\n * @example SVG output with viewBox attribute\n * var svg = canvas.toSVG({\n * viewBox: {\n * x: 100,\n * y: 100,\n * width: 200,\n * height: 300\n * }\n * });\n * @example SVG output with different encoding (default: UTF-8)\n * var svg = canvas.toSVG({encoding: 'ISO-8859-1'});\n * @example Modify SVG output with reviver function\n * var svg = canvas.toSVG(null, function(svg) {\n * return svg.replace('stroke-dasharray: ; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; ', '');\n * });\n */\n toSVG: function(options, reviver) {\n options || (options = { });\n options.reviver = reviver;\n var markup = [];\n\n this._setSVGPreamble(markup, options);\n this._setSVGHeader(markup, options);\n if (this.clipPath) {\n markup.push('\\n');\n }\n this._setSVGBgOverlayColor(markup, 'background');\n this._setSVGBgOverlayImage(markup, 'backgroundImage', reviver);\n this._setSVGObjects(markup, reviver);\n if (this.clipPath) {\n markup.push('\\n');\n }\n this._setSVGBgOverlayColor(markup, 'overlay');\n this._setSVGBgOverlayImage(markup, 'overlayImage', reviver);\n\n markup.push('');\n\n return markup.join('');\n },\n\n /**\n * @private\n */\n _setSVGPreamble: function(markup, options) {\n if (options.suppressPreamble) {\n return;\n }\n markup.push(\n '\\n',\n '\\n'\n );\n },\n\n /**\n * @private\n */\n _setSVGHeader: function(markup, options) {\n var width = options.width || this.width,\n height = options.height || this.height,\n vpt, viewBox = 'viewBox=\"0 0 ' + this.width + ' ' + this.height + '\" ',\n NUM_FRACTION_DIGITS = fabric.Object.NUM_FRACTION_DIGITS;\n\n if (options.viewBox) {\n viewBox = 'viewBox=\"' +\n options.viewBox.x + ' ' +\n options.viewBox.y + ' ' +\n options.viewBox.width + ' ' +\n options.viewBox.height + '\" ';\n }\n else {\n if (this.svgViewportTransformation) {\n vpt = this.viewportTransform;\n viewBox = 'viewBox=\"' +\n toFixed(-vpt[4] / vpt[0], NUM_FRACTION_DIGITS) + ' ' +\n toFixed(-vpt[5] / vpt[3], NUM_FRACTION_DIGITS) + ' ' +\n toFixed(this.width / vpt[0], NUM_FRACTION_DIGITS) + ' ' +\n toFixed(this.height / vpt[3], NUM_FRACTION_DIGITS) + '\" ';\n }\n }\n\n markup.push(\n '\\n',\n 'Created with Fabric.js ', fabric.version, '\\n',\n '\\n',\n this.createSVGFontFacesMarkup(),\n this.createSVGRefElementsMarkup(),\n this.createSVGClipPathMarkup(options),\n '\\n'\n );\n },\n\n createSVGClipPathMarkup: function(options) {\n var clipPath = this.clipPath;\n if (clipPath) {\n clipPath.clipPathId = 'CLIPPATH_' + fabric.Object.__uid++;\n return '\\n' +\n this.clipPath.toClipPathSVG(options.reviver) +\n '\\n';\n }\n return '';\n },\n\n /**\n * Creates markup containing SVG referenced elements like patterns, gradients etc.\n * @return {String}\n */\n createSVGRefElementsMarkup: function() {\n var _this = this,\n markup = ['background', 'overlay'].map(function(prop) {\n var fill = _this[prop + 'Color'];\n if (fill && fill.toLive) {\n var shouldTransform = _this[prop + 'Vpt'], vpt = _this.viewportTransform,\n object = {\n width: _this.width / (shouldTransform ? vpt[0] : 1),\n height: _this.height / (shouldTransform ? vpt[3] : 1)\n };\n return fill.toSVG(\n object,\n { additionalTransform: shouldTransform ? fabric.util.matrixToSVG(vpt) : '' }\n );\n }\n });\n return markup.join('');\n },\n\n /**\n * Creates markup containing SVG font faces,\n * font URLs for font faces must be collected by developers\n * and are not extracted from the DOM by fabricjs\n * @param {Array} objects Array of fabric objects\n * @return {String}\n */\n createSVGFontFacesMarkup: function() {\n var markup = '', fontList = { }, obj, fontFamily,\n style, row, rowIndex, _char, charIndex, i, len,\n fontPaths = fabric.fontPaths, objects = [];\n\n this._objects.forEach(function add(object) {\n objects.push(object);\n if (object._objects) {\n object._objects.forEach(add);\n }\n });\n\n for (i = 0, len = objects.length; i < len; i++) {\n obj = objects[i];\n fontFamily = obj.fontFamily;\n if (obj.type.indexOf('text') === -1 || fontList[fontFamily] || !fontPaths[fontFamily]) {\n continue;\n }\n fontList[fontFamily] = true;\n if (!obj.styles) {\n continue;\n }\n style = obj.styles;\n for (rowIndex in style) {\n row = style[rowIndex];\n for (charIndex in row) {\n _char = row[charIndex];\n fontFamily = _char.fontFamily;\n if (!fontList[fontFamily] && fontPaths[fontFamily]) {\n fontList[fontFamily] = true;\n }\n }\n }\n }\n\n for (var j in fontList) {\n markup += [\n '\\t\\t@font-face {\\n',\n '\\t\\t\\tfont-family: \\'', j, '\\';\\n',\n '\\t\\t\\tsrc: url(\\'', fontPaths[j], '\\');\\n',\n '\\t\\t}\\n'\n ].join('');\n }\n\n if (markup) {\n markup = [\n '\\t\\n'\n ].join('');\n }\n\n return markup;\n },\n\n /**\n * @private\n */\n _setSVGObjects: function(markup, reviver) {\n var instance, i, len, objects = this._objects;\n for (i = 0, len = objects.length; i < len; i++) {\n instance = objects[i];\n if (instance.excludeFromExport) {\n continue;\n }\n this._setSVGObject(markup, instance, reviver);\n }\n },\n\n /**\n * @private\n */\n _setSVGObject: function(markup, instance, reviver) {\n markup.push(instance.toSVG(reviver));\n },\n\n /**\n * @private\n */\n _setSVGBgOverlayImage: function(markup, property, reviver) {\n if (this[property] && !this[property].excludeFromExport && this[property].toSVG) {\n markup.push(this[property].toSVG(reviver));\n }\n },\n\n /**\n * @private\n */\n _setSVGBgOverlayColor: function(markup, property) {\n var filler = this[property + 'Color'], vpt = this.viewportTransform, finalWidth = this.width,\n finalHeight = this.height;\n if (!filler) {\n return;\n }\n if (filler.toLive) {\n var repeat = filler.repeat, iVpt = fabric.util.invertTransform(vpt), shouldInvert = this[property + 'Vpt'],\n additionalTransform = shouldInvert ? fabric.util.matrixToSVG(iVpt) : '';\n markup.push(\n '\\n'\n );\n }\n else {\n markup.push(\n '\\n'\n );\n }\n },\n /* _TO_SVG_END_ */\n\n /**\n * Moves an object or the objects of a multiple selection\n * to the bottom of the stack of drawn objects\n * @param {fabric.Object} object Object to send to back\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n sendToBack: function (object) {\n if (!object) {\n return this;\n }\n var activeSelection = this._activeObject,\n i, obj, objs;\n if (object === activeSelection && object.type === 'activeSelection') {\n objs = activeSelection._objects;\n for (i = objs.length; i--;) {\n obj = objs[i];\n removeFromArray(this._objects, obj);\n this._objects.unshift(obj);\n }\n }\n else {\n removeFromArray(this._objects, object);\n this._objects.unshift(object);\n }\n this.renderOnAddRemove && this.requestRenderAll();\n return this;\n },\n\n /**\n * Moves an object or the objects of a multiple selection\n * to the top of the stack of drawn objects\n * @param {fabric.Object} object Object to send\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n bringToFront: function (object) {\n if (!object) {\n return this;\n }\n var activeSelection = this._activeObject,\n i, obj, objs;\n if (object === activeSelection && object.type === 'activeSelection') {\n objs = activeSelection._objects;\n for (i = 0; i < objs.length; i++) {\n obj = objs[i];\n removeFromArray(this._objects, obj);\n this._objects.push(obj);\n }\n }\n else {\n removeFromArray(this._objects, object);\n this._objects.push(object);\n }\n this.renderOnAddRemove && this.requestRenderAll();\n return this;\n },\n\n /**\n * Moves an object or a selection down in stack of drawn objects\n * An optional parameter, intersecting allows to move the object in behind\n * the first intersecting object. Where intersection is calculated with\n * bounding box. If no intersection is found, there will not be change in the\n * stack.\n * @param {fabric.Object} object Object to send\n * @param {Boolean} [intersecting] If `true`, send object behind next lower intersecting object\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n sendBackwards: function (object, intersecting) {\n if (!object) {\n return this;\n }\n var activeSelection = this._activeObject,\n i, obj, idx, newIdx, objs, objsMoved = 0;\n\n if (object === activeSelection && object.type === 'activeSelection') {\n objs = activeSelection._objects;\n for (i = 0; i < objs.length; i++) {\n obj = objs[i];\n idx = this._objects.indexOf(obj);\n if (idx > 0 + objsMoved) {\n newIdx = idx - 1;\n removeFromArray(this._objects, obj);\n this._objects.splice(newIdx, 0, obj);\n }\n objsMoved++;\n }\n }\n else {\n idx = this._objects.indexOf(object);\n if (idx !== 0) {\n // if object is not on the bottom of stack\n newIdx = this._findNewLowerIndex(object, idx, intersecting);\n removeFromArray(this._objects, object);\n this._objects.splice(newIdx, 0, object);\n }\n }\n this.renderOnAddRemove && this.requestRenderAll();\n return this;\n },\n\n /**\n * @private\n */\n _findNewLowerIndex: function(object, idx, intersecting) {\n var newIdx, i;\n\n if (intersecting) {\n newIdx = idx;\n\n // traverse down the stack looking for the nearest intersecting object\n for (i = idx - 1; i >= 0; --i) {\n\n var isIntersecting = object.intersectsWithObject(this._objects[i]) ||\n object.isContainedWithinObject(this._objects[i]) ||\n this._objects[i].isContainedWithinObject(object);\n\n if (isIntersecting) {\n newIdx = i;\n break;\n }\n }\n }\n else {\n newIdx = idx - 1;\n }\n\n return newIdx;\n },\n\n /**\n * Moves an object or a selection up in stack of drawn objects\n * An optional parameter, intersecting allows to move the object in front\n * of the first intersecting object. Where intersection is calculated with\n * bounding box. If no intersection is found, there will not be change in the\n * stack.\n * @param {fabric.Object} object Object to send\n * @param {Boolean} [intersecting] If `true`, send object in front of next upper intersecting object\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n bringForward: function (object, intersecting) {\n if (!object) {\n return this;\n }\n var activeSelection = this._activeObject,\n i, obj, idx, newIdx, objs, objsMoved = 0;\n\n if (object === activeSelection && object.type === 'activeSelection') {\n objs = activeSelection._objects;\n for (i = objs.length; i--;) {\n obj = objs[i];\n idx = this._objects.indexOf(obj);\n if (idx < this._objects.length - 1 - objsMoved) {\n newIdx = idx + 1;\n removeFromArray(this._objects, obj);\n this._objects.splice(newIdx, 0, obj);\n }\n objsMoved++;\n }\n }\n else {\n idx = this._objects.indexOf(object);\n if (idx !== this._objects.length - 1) {\n // if object is not on top of stack (last item in an array)\n newIdx = this._findNewUpperIndex(object, idx, intersecting);\n removeFromArray(this._objects, object);\n this._objects.splice(newIdx, 0, object);\n }\n }\n this.renderOnAddRemove && this.requestRenderAll();\n return this;\n },\n\n /**\n * @private\n */\n _findNewUpperIndex: function(object, idx, intersecting) {\n var newIdx, i, len;\n\n if (intersecting) {\n newIdx = idx;\n\n // traverse up the stack looking for the nearest intersecting object\n for (i = idx + 1, len = this._objects.length; i < len; ++i) {\n\n var isIntersecting = object.intersectsWithObject(this._objects[i]) ||\n object.isContainedWithinObject(this._objects[i]) ||\n this._objects[i].isContainedWithinObject(object);\n\n if (isIntersecting) {\n newIdx = i;\n break;\n }\n }\n }\n else {\n newIdx = idx + 1;\n }\n\n return newIdx;\n },\n\n /**\n * Moves an object to specified level in stack of drawn objects\n * @param {fabric.Object} object Object to send\n * @param {Number} index Position to move to\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n moveTo: function (object, index) {\n removeFromArray(this._objects, object);\n this._objects.splice(index, 0, object);\n return this.renderOnAddRemove && this.requestRenderAll();\n },\n\n /**\n * Clears a canvas element and dispose objects\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n dispose: function () {\n // cancel eventually ongoing renders\n if (this.isRendering) {\n fabric.util.cancelAnimFrame(this.isRendering);\n this.isRendering = 0;\n }\n this.forEachObject(function(object) {\n object.dispose && object.dispose();\n });\n this._objects = [];\n if (this.backgroundImage && this.backgroundImage.dispose) {\n this.backgroundImage.dispose();\n }\n this.backgroundImage = null;\n if (this.overlayImage && this.overlayImage.dispose) {\n this.overlayImage.dispose();\n }\n this.overlayImage = null;\n this._iTextInstances = null;\n this.contextContainer = null;\n // restore canvas style\n this.lowerCanvasEl.classList.remove('lower-canvas');\n this.lowerCanvasEl.style = this._originalCanvasStyle;\n delete this._originalCanvasStyle;\n // restore canvas size to original size in case retina scaling was applied\n this.lowerCanvasEl.setAttribute('width', this.width);\n this.lowerCanvasEl.setAttribute('height', this.height);\n fabric.util.cleanUpJsdomNode(this.lowerCanvasEl);\n this.lowerCanvasEl = undefined;\n return this;\n },\n\n /**\n * Returns a string representation of an instance\n * @return {String} string representation of an instance\n */\n toString: function () {\n return '#';\n }\n });\n\n extend(fabric.StaticCanvas.prototype, fabric.Observable);\n extend(fabric.StaticCanvas.prototype, fabric.Collection);\n extend(fabric.StaticCanvas.prototype, fabric.DataURLExporter);\n\n extend(fabric.StaticCanvas, /** @lends fabric.StaticCanvas */ {\n\n /**\n * @static\n * @type String\n * @default\n */\n EMPTY_JSON: '{\"objects\": [], \"background\": \"white\"}',\n\n /**\n * Provides a way to check support of some of the canvas methods\n * (either those of HTMLCanvasElement itself, or rendering context)\n *\n * @param {String} methodName Method to check support for;\n * Could be one of \"setLineDash\"\n * @return {Boolean | null} `true` if method is supported (or at least exists),\n * `null` if canvas element or context can not be initialized\n */\n supports: function (methodName) {\n var el = createCanvasElement();\n\n if (!el || !el.getContext) {\n return null;\n }\n\n var ctx = el.getContext('2d');\n if (!ctx) {\n return null;\n }\n\n switch (methodName) {\n\n case 'setLineDash':\n return typeof ctx.setLineDash !== 'undefined';\n\n default:\n return null;\n }\n }\n });\n\n /**\n * Returns Object representation of canvas\n * this alias is provided because if you call JSON.stringify on an instance,\n * the toJSON object will be invoked if it exists.\n * Having a toJSON method means you can do JSON.stringify(myCanvas)\n * @function\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} JSON compatible object\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-3#serialization}\n * @see {@link http://jsfiddle.net/fabricjs/pec86/|jsFiddle demo}\n * @example JSON without additional properties\n * var json = canvas.toJSON();\n * @example JSON with additional properties included\n * var json = canvas.toJSON(['lockMovementX', 'lockMovementY', 'lockRotation', 'lockScalingX', 'lockScalingY']);\n * @example JSON without default values\n * canvas.includeDefaultValues = false;\n * var json = canvas.toJSON();\n */\n fabric.StaticCanvas.prototype.toJSON = fabric.StaticCanvas.prototype.toObject;\n\n if (fabric.isLikelyNode) {\n fabric.StaticCanvas.prototype.createPNGStream = function() {\n var impl = getNodeCanvas(this.lowerCanvasEl);\n return impl && impl.createPNGStream();\n };\n fabric.StaticCanvas.prototype.createJPEGStream = function(opts) {\n var impl = getNodeCanvas(this.lowerCanvasEl);\n return impl && impl.createJPEGStream(opts);\n };\n }\n})();\n\n\n/**\n * BaseBrush class\n * @class fabric.BaseBrush\n * @see {@link http://fabricjs.com/freedrawing|Freedrawing demo}\n */\nfabric.BaseBrush = fabric.util.createClass(/** @lends fabric.BaseBrush.prototype */ {\n\n /**\n * Color of a brush\n * @type String\n * @default\n */\n color: 'rgb(0, 0, 0)',\n\n /**\n * Width of a brush, has to be a Number, no string literals\n * @type Number\n * @default\n */\n width: 1,\n\n /**\n * Shadow object representing shadow of this shape.\n * Backwards incompatibility note: This property replaces \"shadowColor\" (String), \"shadowOffsetX\" (Number),\n * \"shadowOffsetY\" (Number) and \"shadowBlur\" (Number) since v1.2.12\n * @type fabric.Shadow\n * @default\n */\n shadow: null,\n\n /**\n * Line endings style of a brush (one of \"butt\", \"round\", \"square\")\n * @type String\n * @default\n */\n strokeLineCap: 'round',\n\n /**\n * Corner style of a brush (one of \"bevel\", \"round\", \"miter\")\n * @type String\n * @default\n */\n strokeLineJoin: 'round',\n\n /**\n * Maximum miter length (used for strokeLineJoin = \"miter\") of a brush's\n * @type Number\n * @default\n */\n strokeMiterLimit: 10,\n\n /**\n * Stroke Dash Array.\n * @type Array\n * @default\n */\n strokeDashArray: null,\n\n /**\n * When `true`, the free drawing is limited to the whiteboard size. Default to false.\n * @type Boolean\n * @default false\n */\n\n limitedToCanvasSize: false,\n\n\n /**\n * Sets brush styles\n * @private\n */\n _setBrushStyles: function() {\n var ctx = this.canvas.contextTop;\n ctx.strokeStyle = this.color;\n ctx.lineWidth = this.width;\n ctx.lineCap = this.strokeLineCap;\n ctx.miterLimit = this.strokeMiterLimit;\n ctx.lineJoin = this.strokeLineJoin;\n ctx.setLineDash(this.strokeDashArray || []);\n },\n\n /**\n * Sets the transformation on given context\n * @param {RenderingContext2d} ctx context to render on\n * @private\n */\n _saveAndTransform: function(ctx) {\n var v = this.canvas.viewportTransform;\n ctx.save();\n ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]);\n },\n\n /**\n * Sets brush shadow styles\n * @private\n */\n _setShadow: function() {\n if (!this.shadow) {\n return;\n }\n\n var canvas = this.canvas,\n shadow = this.shadow,\n ctx = canvas.contextTop,\n zoom = canvas.getZoom();\n if (canvas && canvas._isRetinaScaling()) {\n zoom *= fabric.devicePixelRatio;\n }\n\n ctx.shadowColor = shadow.color;\n ctx.shadowBlur = shadow.blur * zoom;\n ctx.shadowOffsetX = shadow.offsetX * zoom;\n ctx.shadowOffsetY = shadow.offsetY * zoom;\n },\n\n needsFullRender: function() {\n var color = new fabric.Color(this.color);\n return color.getAlpha() < 1 || !!this.shadow;\n },\n\n /**\n * Removes brush shadow styles\n * @private\n */\n _resetShadow: function() {\n var ctx = this.canvas.contextTop;\n\n ctx.shadowColor = '';\n ctx.shadowBlur = ctx.shadowOffsetX = ctx.shadowOffsetY = 0;\n },\n\n /**\n * Check is pointer is outside canvas boundaries\n * @param {Object} pointer\n * @private\n */\n _isOutSideCanvas: function(pointer) {\n return pointer.x < 0 || pointer.x > this.canvas.getWidth() || pointer.y < 0 || pointer.y > this.canvas.getHeight();\n }\n});\n\n\n(function() {\n /**\n * PencilBrush class\n * @class fabric.PencilBrush\n * @extends fabric.BaseBrush\n */\n fabric.PencilBrush = fabric.util.createClass(fabric.BaseBrush, /** @lends fabric.PencilBrush.prototype */ {\n\n /**\n * Discard points that are less than `decimate` pixel distant from each other\n * @type Number\n * @default 0.4\n */\n decimate: 0.4,\n\n /**\n * Constructor\n * @param {fabric.Canvas} canvas\n * @return {fabric.PencilBrush} Instance of a pencil brush\n */\n initialize: function(canvas) {\n this.canvas = canvas;\n this._points = [];\n },\n\n /**\n * Invoked inside on mouse down and mouse move\n * @param {Object} pointer\n */\n _drawSegment: function (ctx, p1, p2) {\n var midPoint = p1.midPointFrom(p2);\n ctx.quadraticCurveTo(p1.x, p1.y, midPoint.x, midPoint.y);\n return midPoint;\n },\n\n /**\n * Invoked on mouse down\n * @param {Object} pointer\n */\n onMouseDown: function(pointer, options) {\n if (!this.canvas._isMainEvent(options.e)) {\n return;\n }\n this._prepareForDrawing(pointer);\n // capture coordinates immediately\n // this allows to draw dots (when movement never occurs)\n this._captureDrawingPath(pointer);\n this._render();\n },\n\n /**\n * Invoked on mouse move\n * @param {Object} pointer\n */\n onMouseMove: function(pointer, options) {\n if (!this.canvas._isMainEvent(options.e)) {\n return;\n }\n if (this.limitedToCanvasSize === true && this._isOutSideCanvas(pointer)) {\n return;\n }\n if (this._captureDrawingPath(pointer) && this._points.length > 1) {\n if (this.needsFullRender()) {\n // redraw curve\n // clear top canvas\n this.canvas.clearContext(this.canvas.contextTop);\n this._render();\n }\n else {\n var points = this._points, length = points.length, ctx = this.canvas.contextTop;\n // draw the curve update\n this._saveAndTransform(ctx);\n if (this.oldEnd) {\n ctx.beginPath();\n ctx.moveTo(this.oldEnd.x, this.oldEnd.y);\n }\n this.oldEnd = this._drawSegment(ctx, points[length - 2], points[length - 1], true);\n ctx.stroke();\n ctx.restore();\n }\n }\n },\n\n /**\n * Invoked on mouse up\n */\n onMouseUp: function(options) {\n if (!this.canvas._isMainEvent(options.e)) {\n return true;\n }\n this.oldEnd = undefined;\n this._finalizeAndAddPath();\n return false;\n },\n\n /**\n * @private\n * @param {Object} pointer Actual mouse position related to the canvas.\n */\n _prepareForDrawing: function(pointer) {\n\n var p = new fabric.Point(pointer.x, pointer.y);\n\n this._reset();\n this._addPoint(p);\n this.canvas.contextTop.moveTo(p.x, p.y);\n },\n\n /**\n * @private\n * @param {fabric.Point} point Point to be added to points array\n */\n _addPoint: function(point) {\n if (this._points.length > 1 && point.eq(this._points[this._points.length - 1])) {\n return false;\n }\n this._points.push(point);\n return true;\n },\n\n /**\n * Clear points array and set contextTop canvas style.\n * @private\n */\n _reset: function() {\n this._points = [];\n this._setBrushStyles();\n this._setShadow();\n },\n\n /**\n * @private\n * @param {Object} pointer Actual mouse position related to the canvas.\n */\n _captureDrawingPath: function(pointer) {\n var pointerPoint = new fabric.Point(pointer.x, pointer.y);\n return this._addPoint(pointerPoint);\n },\n\n /**\n * Draw a smooth path on the topCanvas using quadraticCurveTo\n * @private\n */\n _render: function() {\n var ctx = this.canvas.contextTop, i, len,\n p1 = this._points[0],\n p2 = this._points[1];\n\n this._saveAndTransform(ctx);\n ctx.beginPath();\n //if we only have 2 points in the path and they are the same\n //it means that the user only clicked the canvas without moving the mouse\n //then we should be drawing a dot. A path isn't drawn between two identical dots\n //that's why we set them apart a bit\n if (this._points.length === 2 && p1.x === p2.x && p1.y === p2.y) {\n var width = this.width / 1000;\n p1 = new fabric.Point(p1.x, p1.y);\n p2 = new fabric.Point(p2.x, p2.y);\n p1.x -= width;\n p2.x += width;\n }\n ctx.moveTo(p1.x, p1.y);\n\n for (i = 1, len = this._points.length; i < len; i++) {\n // we pick the point between pi + 1 & pi + 2 as the\n // end point and p1 as our control point.\n this._drawSegment(ctx, p1, p2);\n p1 = this._points[i];\n p2 = this._points[i + 1];\n }\n // Draw last line as a straight line while\n // we wait for the next point to be able to calculate\n // the bezier control point\n ctx.lineTo(p1.x, p1.y);\n ctx.stroke();\n ctx.restore();\n },\n\n /**\n * Converts points to SVG path\n * @param {Array} points Array of points\n * @return {(string|number)[][]} SVG path commands\n */\n convertPointsToSVGPath: function (points) {\n var correction = this.width / 1000;\n return fabric.util.getSmoothPathFromPoints(points, correction);\n },\n\n /**\n * @private\n * @param {(string|number)[][]} pathData SVG path commands\n * @returns {boolean}\n */\n _isEmptySVGPath: function (pathData) {\n var pathString = fabric.util.joinPath(pathData);\n return pathString === 'M 0 0 Q 0 0 0 0 L 0 0';\n },\n\n /**\n * Creates fabric.Path object to add on canvas\n * @param {(string|number)[][]} pathData Path data\n * @return {fabric.Path} Path to add on canvas\n */\n createPath: function(pathData) {\n var path = new fabric.Path(pathData, {\n fill: null,\n stroke: this.color,\n strokeWidth: this.width,\n strokeLineCap: this.strokeLineCap,\n strokeMiterLimit: this.strokeMiterLimit,\n strokeLineJoin: this.strokeLineJoin,\n strokeDashArray: this.strokeDashArray,\n });\n if (this.shadow) {\n this.shadow.affectStroke = true;\n path.shadow = new fabric.Shadow(this.shadow);\n }\n\n return path;\n },\n\n /**\n * Decimate points array with the decimate value\n */\n decimatePoints: function(points, distance) {\n if (points.length <= 2) {\n return points;\n }\n var zoom = this.canvas.getZoom(), adjustedDistance = Math.pow(distance / zoom, 2),\n i, l = points.length - 1, lastPoint = points[0], newPoints = [lastPoint],\n cDistance;\n for (i = 1; i < l - 1; i++) {\n cDistance = Math.pow(lastPoint.x - points[i].x, 2) + Math.pow(lastPoint.y - points[i].y, 2);\n if (cDistance >= adjustedDistance) {\n lastPoint = points[i];\n newPoints.push(lastPoint);\n }\n }\n /**\n * Add the last point from the original line to the end of the array.\n * This ensures decimate doesn't delete the last point on the line, and ensures the line is > 1 point.\n */\n newPoints.push(points[l]);\n return newPoints;\n },\n\n /**\n * On mouseup after drawing the path on contextTop canvas\n * we use the points captured to create an new fabric path object\n * and add it to the fabric canvas.\n */\n _finalizeAndAddPath: function() {\n var ctx = this.canvas.contextTop;\n ctx.closePath();\n if (this.decimate) {\n this._points = this.decimatePoints(this._points, this.decimate);\n }\n var pathData = this.convertPointsToSVGPath(this._points);\n if (this._isEmptySVGPath(pathData)) {\n // do not create 0 width/height paths, as they are\n // rendered inconsistently across browsers\n // Firefox 4, for example, renders a dot,\n // whereas Chrome 10 renders nothing\n this.canvas.requestRenderAll();\n return;\n }\n\n var path = this.createPath(pathData);\n this.canvas.clearContext(this.canvas.contextTop);\n this.canvas.fire('before:path:created', { path: path });\n this.canvas.add(path);\n this.canvas.requestRenderAll();\n path.setCoords();\n this._resetShadow();\n\n\n // fire event 'path' created\n this.canvas.fire('path:created', { path: path });\n }\n });\n})();\n\n\n/**\n * CircleBrush class\n * @class fabric.CircleBrush\n */\nfabric.CircleBrush = fabric.util.createClass(fabric.BaseBrush, /** @lends fabric.CircleBrush.prototype */ {\n\n /**\n * Width of a brush\n * @type Number\n * @default\n */\n width: 10,\n\n /**\n * Constructor\n * @param {fabric.Canvas} canvas\n * @return {fabric.CircleBrush} Instance of a circle brush\n */\n initialize: function(canvas) {\n this.canvas = canvas;\n this.points = [];\n },\n\n /**\n * Invoked inside on mouse down and mouse move\n * @param {Object} pointer\n */\n drawDot: function(pointer) {\n var point = this.addPoint(pointer),\n ctx = this.canvas.contextTop;\n this._saveAndTransform(ctx);\n this.dot(ctx, point);\n ctx.restore();\n },\n\n dot: function(ctx, point) {\n ctx.fillStyle = point.fill;\n ctx.beginPath();\n ctx.arc(point.x, point.y, point.radius, 0, Math.PI * 2, false);\n ctx.closePath();\n ctx.fill();\n },\n\n /**\n * Invoked on mouse down\n */\n onMouseDown: function(pointer) {\n this.points.length = 0;\n this.canvas.clearContext(this.canvas.contextTop);\n this._setShadow();\n this.drawDot(pointer);\n },\n\n /**\n * Render the full state of the brush\n * @private\n */\n _render: function() {\n var ctx = this.canvas.contextTop, i, len,\n points = this.points;\n this._saveAndTransform(ctx);\n for (i = 0, len = points.length; i < len; i++) {\n this.dot(ctx, points[i]);\n }\n ctx.restore();\n },\n\n /**\n * Invoked on mouse move\n * @param {Object} pointer\n */\n onMouseMove: function(pointer) {\n if (this.limitedToCanvasSize === true && this._isOutSideCanvas(pointer)) {\n return;\n }\n if (this.needsFullRender()) {\n this.canvas.clearContext(this.canvas.contextTop);\n this.addPoint(pointer);\n this._render();\n }\n else {\n this.drawDot(pointer);\n }\n },\n\n /**\n * Invoked on mouse up\n */\n onMouseUp: function() {\n var originalRenderOnAddRemove = this.canvas.renderOnAddRemove, i, len;\n this.canvas.renderOnAddRemove = false;\n\n var circles = [];\n\n for (i = 0, len = this.points.length; i < len; i++) {\n var point = this.points[i],\n circle = new fabric.Circle({\n radius: point.radius,\n left: point.x,\n top: point.y,\n originX: 'center',\n originY: 'center',\n fill: point.fill\n });\n\n this.shadow && (circle.shadow = new fabric.Shadow(this.shadow));\n\n circles.push(circle);\n }\n var group = new fabric.Group(circles);\n group.canvas = this.canvas;\n\n this.canvas.fire('before:path:created', { path: group });\n this.canvas.add(group);\n this.canvas.fire('path:created', { path: group });\n\n this.canvas.clearContext(this.canvas.contextTop);\n this._resetShadow();\n this.canvas.renderOnAddRemove = originalRenderOnAddRemove;\n this.canvas.requestRenderAll();\n },\n\n /**\n * @param {Object} pointer\n * @return {fabric.Point} Just added pointer point\n */\n addPoint: function(pointer) {\n var pointerPoint = new fabric.Point(pointer.x, pointer.y),\n\n circleRadius = fabric.util.getRandomInt(\n Math.max(0, this.width - 20), this.width + 20) / 2,\n\n circleColor = new fabric.Color(this.color)\n .setAlpha(fabric.util.getRandomInt(0, 100) / 100)\n .toRgba();\n\n pointerPoint.radius = circleRadius;\n pointerPoint.fill = circleColor;\n\n this.points.push(pointerPoint);\n\n return pointerPoint;\n }\n});\n\n\n/**\n * SprayBrush class\n * @class fabric.SprayBrush\n */\nfabric.SprayBrush = fabric.util.createClass( fabric.BaseBrush, /** @lends fabric.SprayBrush.prototype */ {\n\n /**\n * Width of a spray\n * @type Number\n * @default\n */\n width: 10,\n\n /**\n * Density of a spray (number of dots per chunk)\n * @type Number\n * @default\n */\n density: 20,\n\n /**\n * Width of spray dots\n * @type Number\n * @default\n */\n dotWidth: 1,\n\n /**\n * Width variance of spray dots\n * @type Number\n * @default\n */\n dotWidthVariance: 1,\n\n /**\n * Whether opacity of a dot should be random\n * @type Boolean\n * @default\n */\n randomOpacity: false,\n\n /**\n * Whether overlapping dots (rectangles) should be removed (for performance reasons)\n * @type Boolean\n * @default\n */\n optimizeOverlapping: true,\n\n /**\n * Constructor\n * @param {fabric.Canvas} canvas\n * @return {fabric.SprayBrush} Instance of a spray brush\n */\n initialize: function(canvas) {\n this.canvas = canvas;\n this.sprayChunks = [];\n },\n\n /**\n * Invoked on mouse down\n * @param {Object} pointer\n */\n onMouseDown: function(pointer) {\n this.sprayChunks.length = 0;\n this.canvas.clearContext(this.canvas.contextTop);\n this._setShadow();\n\n this.addSprayChunk(pointer);\n this.render(this.sprayChunkPoints);\n },\n\n /**\n * Invoked on mouse move\n * @param {Object} pointer\n */\n onMouseMove: function(pointer) {\n if (this.limitedToCanvasSize === true && this._isOutSideCanvas(pointer)) {\n return;\n }\n this.addSprayChunk(pointer);\n this.render(this.sprayChunkPoints);\n },\n\n /**\n * Invoked on mouse up\n */\n onMouseUp: function() {\n var originalRenderOnAddRemove = this.canvas.renderOnAddRemove;\n this.canvas.renderOnAddRemove = false;\n\n var rects = [];\n\n for (var i = 0, ilen = this.sprayChunks.length; i < ilen; i++) {\n var sprayChunk = this.sprayChunks[i];\n\n for (var j = 0, jlen = sprayChunk.length; j < jlen; j++) {\n\n var rect = new fabric.Rect({\n width: sprayChunk[j].width,\n height: sprayChunk[j].width,\n left: sprayChunk[j].x + 1,\n top: sprayChunk[j].y + 1,\n originX: 'center',\n originY: 'center',\n fill: this.color\n });\n rects.push(rect);\n }\n }\n\n if (this.optimizeOverlapping) {\n rects = this._getOptimizedRects(rects);\n }\n\n var group = new fabric.Group(rects);\n this.shadow && group.set('shadow', new fabric.Shadow(this.shadow));\n this.canvas.fire('before:path:created', { path: group });\n this.canvas.add(group);\n this.canvas.fire('path:created', { path: group });\n\n this.canvas.clearContext(this.canvas.contextTop);\n this._resetShadow();\n this.canvas.renderOnAddRemove = originalRenderOnAddRemove;\n this.canvas.requestRenderAll();\n },\n\n /**\n * @private\n * @param {Array} rects\n */\n _getOptimizedRects: function(rects) {\n\n // avoid creating duplicate rects at the same coordinates\n var uniqueRects = { }, key, i, len;\n\n for (i = 0, len = rects.length; i < len; i++) {\n key = rects[i].left + '' + rects[i].top;\n if (!uniqueRects[key]) {\n uniqueRects[key] = rects[i];\n }\n }\n var uniqueRectsArray = [];\n for (key in uniqueRects) {\n uniqueRectsArray.push(uniqueRects[key]);\n }\n\n return uniqueRectsArray;\n },\n\n /**\n * Render new chunk of spray brush\n */\n render: function(sprayChunk) {\n var ctx = this.canvas.contextTop, i, len;\n ctx.fillStyle = this.color;\n\n this._saveAndTransform(ctx);\n\n for (i = 0, len = sprayChunk.length; i < len; i++) {\n var point = sprayChunk[i];\n if (typeof point.opacity !== 'undefined') {\n ctx.globalAlpha = point.opacity;\n }\n ctx.fillRect(point.x, point.y, point.width, point.width);\n }\n ctx.restore();\n },\n\n /**\n * Render all spray chunks\n */\n _render: function() {\n var ctx = this.canvas.contextTop, i, ilen;\n ctx.fillStyle = this.color;\n\n this._saveAndTransform(ctx);\n\n for (i = 0, ilen = this.sprayChunks.length; i < ilen; i++) {\n this.render(this.sprayChunks[i]);\n }\n ctx.restore();\n },\n\n /**\n * @param {Object} pointer\n */\n addSprayChunk: function(pointer) {\n this.sprayChunkPoints = [];\n\n var x, y, width, radius = this.width / 2, i;\n\n for (i = 0; i < this.density; i++) {\n\n x = fabric.util.getRandomInt(pointer.x - radius, pointer.x + radius);\n y = fabric.util.getRandomInt(pointer.y - radius, pointer.y + radius);\n\n if (this.dotWidthVariance) {\n width = fabric.util.getRandomInt(\n // bottom clamp width to 1\n Math.max(1, this.dotWidth - this.dotWidthVariance),\n this.dotWidth + this.dotWidthVariance);\n }\n else {\n width = this.dotWidth;\n }\n\n var point = new fabric.Point(x, y);\n point.width = width;\n\n if (this.randomOpacity) {\n point.opacity = fabric.util.getRandomInt(0, 100) / 100;\n }\n\n this.sprayChunkPoints.push(point);\n }\n\n this.sprayChunks.push(this.sprayChunkPoints);\n }\n});\n\n\n/**\n * PatternBrush class\n * @class fabric.PatternBrush\n * @extends fabric.BaseBrush\n */\nfabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fabric.PatternBrush.prototype */ {\n\n getPatternSrc: function() {\n\n var dotWidth = 20,\n dotDistance = 5,\n patternCanvas = fabric.util.createCanvasElement(),\n patternCtx = patternCanvas.getContext('2d');\n\n patternCanvas.width = patternCanvas.height = dotWidth + dotDistance;\n\n patternCtx.fillStyle = this.color;\n patternCtx.beginPath();\n patternCtx.arc(dotWidth / 2, dotWidth / 2, dotWidth / 2, 0, Math.PI * 2, false);\n patternCtx.closePath();\n patternCtx.fill();\n\n return patternCanvas;\n },\n\n getPatternSrcFunction: function() {\n return String(this.getPatternSrc).replace('this.color', '\"' + this.color + '\"');\n },\n\n /**\n * Creates \"pattern\" instance property\n */\n getPattern: function() {\n return this.canvas.contextTop.createPattern(this.source || this.getPatternSrc(), 'repeat');\n },\n\n /**\n * Sets brush styles\n */\n _setBrushStyles: function() {\n this.callSuper('_setBrushStyles');\n this.canvas.contextTop.strokeStyle = this.getPattern();\n },\n\n /**\n * Creates path\n */\n createPath: function(pathData) {\n var path = this.callSuper('createPath', pathData),\n topLeft = path._getLeftTopCoords().scalarAdd(path.strokeWidth / 2);\n\n path.stroke = new fabric.Pattern({\n source: this.source || this.getPatternSrcFunction(),\n offsetX: -topLeft.x,\n offsetY: -topLeft.y\n });\n return path;\n }\n});\n\n\n(function() {\n\n var getPointer = fabric.util.getPointer,\n degreesToRadians = fabric.util.degreesToRadians,\n isTouchEvent = fabric.util.isTouchEvent;\n\n /**\n * Canvas class\n * @class fabric.Canvas\n * @extends fabric.StaticCanvas\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-1#canvas}\n * @see {@link fabric.Canvas#initialize} for constructor definition\n *\n * @fires object:modified at the end of a transform or any change when statefull is true\n * @fires object:rotating while an object is being rotated from the control\n * @fires object:scaling while an object is being scaled by controls\n * @fires object:moving while an object is being dragged\n * @fires object:skewing while an object is being skewed from the controls\n *\n * @fires before:transform before a transform is is started\n * @fires before:selection:cleared\n * @fires selection:cleared\n * @fires selection:updated\n * @fires selection:created\n *\n * @fires path:created after a drawing operation ends and the path is added\n * @fires mouse:down\n * @fires mouse:move\n * @fires mouse:up\n * @fires mouse:down:before on mouse down, before the inner fabric logic runs\n * @fires mouse:move:before on mouse move, before the inner fabric logic runs\n * @fires mouse:up:before on mouse up, before the inner fabric logic runs\n * @fires mouse:over\n * @fires mouse:out\n * @fires mouse:dblclick whenever a native dbl click event fires on the canvas.\n *\n * @fires dragover\n * @fires dragenter\n * @fires dragleave\n * @fires drop\n * @fires after:render at the end of the render process, receives the context in the callback\n * @fires before:render at start the render process, receives the context in the callback\n *\n * the following events are deprecated:\n * @fires object:rotated at the end of a rotation transform\n * @fires object:scaled at the end of a scale transform\n * @fires object:moved at the end of translation transform\n * @fires object:skewed at the end of a skew transform\n */\n fabric.Canvas = fabric.util.createClass(fabric.StaticCanvas, /** @lends fabric.Canvas.prototype */ {\n\n /**\n * Constructor\n * @param {HTMLElement | String} el <canvas> element to initialize instance on\n * @param {Object} [options] Options object\n * @return {Object} thisArg\n */\n initialize: function(el, options) {\n options || (options = { });\n this.renderAndResetBound = this.renderAndReset.bind(this);\n this.requestRenderAllBound = this.requestRenderAll.bind(this);\n this._initStatic(el, options);\n this._initInteractive();\n this._createCacheCanvas();\n },\n\n /**\n * When true, objects can be transformed by one side (unproportionally)\n * when dragged on the corners that normally would not do that.\n * @type Boolean\n * @default\n * @since fabric 4.0 // changed name and default value\n */\n uniformScaling: true,\n\n /**\n * Indicates which key switches uniform scaling.\n * values: 'altKey', 'shiftKey', 'ctrlKey'.\n * If `null` or 'none' or any other string that is not a modifier key\n * feature is disabled.\n * totally wrong named. this sounds like `uniform scaling`\n * if Canvas.uniformScaling is true, pressing this will set it to false\n * and viceversa.\n * @since 1.6.2\n * @type String\n * @default\n */\n uniScaleKey: 'shiftKey',\n\n /**\n * When true, objects use center point as the origin of scale transformation.\n * Backwards incompatibility note: This property replaces \"centerTransform\" (Boolean).\n * @since 1.3.4\n * @type Boolean\n * @default\n */\n centeredScaling: false,\n\n /**\n * When true, objects use center point as the origin of rotate transformation.\n * Backwards incompatibility note: This property replaces \"centerTransform\" (Boolean).\n * @since 1.3.4\n * @type Boolean\n * @default\n */\n centeredRotation: false,\n\n /**\n * Indicates which key enable centered Transform\n * values: 'altKey', 'shiftKey', 'ctrlKey'.\n * If `null` or 'none' or any other string that is not a modifier key\n * feature is disabled feature disabled.\n * @since 1.6.2\n * @type String\n * @default\n */\n centeredKey: 'altKey',\n\n /**\n * Indicates which key enable alternate action on corner\n * values: 'altKey', 'shiftKey', 'ctrlKey'.\n * If `null` or 'none' or any other string that is not a modifier key\n * feature is disabled feature disabled.\n * @since 1.6.2\n * @type String\n * @default\n */\n altActionKey: 'shiftKey',\n\n /**\n * Indicates that canvas is interactive. This property should not be changed.\n * @type Boolean\n * @default\n */\n interactive: true,\n\n /**\n * Indicates whether group selection should be enabled\n * @type Boolean\n * @default\n */\n selection: true,\n\n /**\n * Indicates which key or keys enable multiple click selection\n * Pass value as a string or array of strings\n * values: 'altKey', 'shiftKey', 'ctrlKey'.\n * If `null` or empty or containing any other string that is not a modifier key\n * feature is disabled.\n * @since 1.6.2\n * @type String|Array\n * @default\n */\n selectionKey: 'shiftKey',\n\n /**\n * Indicates which key enable alternative selection\n * in case of target overlapping with active object\n * values: 'altKey', 'shiftKey', 'ctrlKey'.\n * For a series of reason that come from the general expectations on how\n * things should work, this feature works only for preserveObjectStacking true.\n * If `null` or 'none' or any other string that is not a modifier key\n * feature is disabled.\n * @since 1.6.5\n * @type null|String\n * @default\n */\n altSelectionKey: null,\n\n /**\n * Color of selection\n * @type String\n * @default\n */\n selectionColor: 'rgba(100, 100, 255, 0.3)', // blue\n\n /**\n * Default dash array pattern\n * If not empty the selection border is dashed\n * @type Array\n */\n selectionDashArray: [],\n\n /**\n * Color of the border of selection (usually slightly darker than color of selection itself)\n * @type String\n * @default\n */\n selectionBorderColor: 'rgba(255, 255, 255, 0.3)',\n\n /**\n * Width of a line used in object/group selection\n * @type Number\n * @default\n */\n selectionLineWidth: 1,\n\n /**\n * Select only shapes that are fully contained in the dragged selection rectangle.\n * @type Boolean\n * @default\n */\n selectionFullyContained: false,\n\n /**\n * Default cursor value used when hovering over an object on canvas\n * @type String\n * @default\n */\n hoverCursor: 'move',\n\n /**\n * Default cursor value used when moving an object on canvas\n * @type String\n * @default\n */\n moveCursor: 'move',\n\n /**\n * Default cursor value used for the entire canvas\n * @type String\n * @default\n */\n defaultCursor: 'default',\n\n /**\n * Cursor value used during free drawing\n * @type String\n * @default\n */\n freeDrawingCursor: 'crosshair',\n\n /**\n * Cursor value used for rotation point\n * @type String\n * @default\n */\n rotationCursor: 'crosshair',\n\n /**\n * Cursor value used for disabled elements ( corners with disabled action )\n * @type String\n * @since 2.0.0\n * @default\n */\n notAllowedCursor: 'not-allowed',\n\n /**\n * Default element class that's given to wrapper (div) element of canvas\n * @type String\n * @default\n */\n containerClass: 'canvas-container',\n\n /**\n * When true, object detection happens on per-pixel basis rather than on per-bounding-box\n * @type Boolean\n * @default\n */\n perPixelTargetFind: false,\n\n /**\n * Number of pixels around target pixel to tolerate (consider active) during object detection\n * @type Number\n * @default\n */\n targetFindTolerance: 0,\n\n /**\n * When true, target detection is skipped. Target detection will return always undefined.\n * click selection won't work anymore, events will fire with no targets.\n * if something is selected before setting it to true, it will be deselected at the first click.\n * area selection will still work. check the `selection` property too.\n * if you deactivate both, you should look into staticCanvas.\n * @type Boolean\n * @default\n */\n skipTargetFind: false,\n\n /**\n * When true, mouse events on canvas (mousedown/mousemove/mouseup) result in free drawing.\n * After mousedown, mousemove creates a shape,\n * and then mouseup finalizes it and adds an instance of `fabric.Path` onto canvas.\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-4#free_drawing}\n * @type Boolean\n * @default\n */\n isDrawingMode: false,\n\n /**\n * Indicates whether objects should remain in current stack position when selected.\n * When false objects are brought to top and rendered as part of the selection group\n * @type Boolean\n * @default\n */\n preserveObjectStacking: false,\n\n /**\n * Indicates the angle that an object will lock to while rotating.\n * @type Number\n * @since 1.6.7\n * @default\n */\n snapAngle: 0,\n\n /**\n * Indicates the distance from the snapAngle the rotation will lock to the snapAngle.\n * When `null`, the snapThreshold will default to the snapAngle.\n * @type null|Number\n * @since 1.6.7\n * @default\n */\n snapThreshold: null,\n\n /**\n * Indicates if the right click on canvas can output the context menu or not\n * @type Boolean\n * @since 1.6.5\n * @default\n */\n stopContextMenu: false,\n\n /**\n * Indicates if the canvas can fire right click events\n * @type Boolean\n * @since 1.6.5\n * @default\n */\n fireRightClick: false,\n\n /**\n * Indicates if the canvas can fire middle click events\n * @type Boolean\n * @since 1.7.8\n * @default\n */\n fireMiddleClick: false,\n\n /**\n * Keep track of the subTargets for Mouse Events\n * @type fabric.Object[]\n */\n targets: [],\n\n /**\n * Keep track of the hovered target\n * @type fabric.Object\n * @private\n */\n _hoveredTarget: null,\n\n /**\n * hold the list of nested targets hovered\n * @type fabric.Object[]\n * @private\n */\n _hoveredTargets: [],\n\n /**\n * @private\n */\n _initInteractive: function() {\n this._currentTransform = null;\n this._groupSelector = null;\n this._initWrapperElement();\n this._createUpperCanvas();\n this._initEventListeners();\n\n this._initRetinaScaling();\n\n this.freeDrawingBrush = fabric.PencilBrush && new fabric.PencilBrush(this);\n\n this.calcOffset();\n },\n\n /**\n * Divides objects in two groups, one to render immediately\n * and one to render as activeGroup.\n * @return {Array} objects to render immediately and pushes the other in the activeGroup.\n */\n _chooseObjectsToRender: function() {\n var activeObjects = this.getActiveObjects(),\n object, objsToRender, activeGroupObjects;\n\n if (activeObjects.length > 0 && !this.preserveObjectStacking) {\n objsToRender = [];\n activeGroupObjects = [];\n for (var i = 0, length = this._objects.length; i < length; i++) {\n object = this._objects[i];\n if (activeObjects.indexOf(object) === -1 ) {\n objsToRender.push(object);\n }\n else {\n activeGroupObjects.push(object);\n }\n }\n if (activeObjects.length > 1) {\n this._activeObject._objects = activeGroupObjects;\n }\n objsToRender.push.apply(objsToRender, activeGroupObjects);\n }\n else {\n objsToRender = this._objects;\n }\n return objsToRender;\n },\n\n /**\n * Renders both the top canvas and the secondary container canvas.\n * @return {fabric.Canvas} instance\n * @chainable\n */\n renderAll: function () {\n if (this.contextTopDirty && !this._groupSelector && !this.isDrawingMode) {\n this.clearContext(this.contextTop);\n this.contextTopDirty = false;\n }\n if (this.hasLostContext) {\n this.renderTopLayer(this.contextTop);\n }\n var canvasToDrawOn = this.contextContainer;\n this.renderCanvas(canvasToDrawOn, this._chooseObjectsToRender());\n return this;\n },\n\n renderTopLayer: function(ctx) {\n ctx.save();\n if (this.isDrawingMode && this._isCurrentlyDrawing) {\n this.freeDrawingBrush && this.freeDrawingBrush._render();\n this.contextTopDirty = true;\n }\n // we render the top context - last object\n if (this.selection && this._groupSelector) {\n this._drawSelection(ctx);\n this.contextTopDirty = true;\n }\n ctx.restore();\n },\n\n /**\n * Method to render only the top canvas.\n * Also used to render the group selection box.\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n renderTop: function () {\n var ctx = this.contextTop;\n this.clearContext(ctx);\n this.renderTopLayer(ctx);\n this.fire('after:render');\n return this;\n },\n\n /**\n * @private\n */\n _normalizePointer: function (object, pointer) {\n var m = object.calcTransformMatrix(),\n invertedM = fabric.util.invertTransform(m),\n vptPointer = this.restorePointerVpt(pointer);\n return fabric.util.transformPoint(vptPointer, invertedM);\n },\n\n /**\n * Returns true if object is transparent at a certain location\n * @param {fabric.Object} target Object to check\n * @param {Number} x Left coordinate\n * @param {Number} y Top coordinate\n * @return {Boolean}\n */\n isTargetTransparent: function (target, x, y) {\n // in case the target is the activeObject, we cannot execute this optimization\n // because we need to draw controls too.\n if (target.shouldCache() && target._cacheCanvas && target !== this._activeObject) {\n var normalizedPointer = this._normalizePointer(target, {x: x, y: y}),\n targetRelativeX = Math.max(target.cacheTranslationX + (normalizedPointer.x * target.zoomX), 0),\n targetRelativeY = Math.max(target.cacheTranslationY + (normalizedPointer.y * target.zoomY), 0);\n\n var isTransparent = fabric.util.isTransparent(\n target._cacheContext, Math.round(targetRelativeX), Math.round(targetRelativeY), this.targetFindTolerance);\n\n return isTransparent;\n }\n\n var ctx = this.contextCache,\n originalColor = target.selectionBackgroundColor, v = this.viewportTransform;\n\n target.selectionBackgroundColor = '';\n\n this.clearContext(ctx);\n\n ctx.save();\n ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]);\n target.render(ctx);\n ctx.restore();\n\n target.selectionBackgroundColor = originalColor;\n\n var isTransparent = fabric.util.isTransparent(\n ctx, x, y, this.targetFindTolerance);\n\n return isTransparent;\n },\n\n /**\n * takes an event and determines if selection key has been pressed\n * @private\n * @param {Event} e Event object\n */\n _isSelectionKeyPressed: function(e) {\n var selectionKeyPressed = false;\n\n if (Object.prototype.toString.call(this.selectionKey) === '[object Array]') {\n selectionKeyPressed = !!this.selectionKey.find(function(key) { return e[key] === true; });\n }\n else {\n selectionKeyPressed = e[this.selectionKey];\n }\n\n return selectionKeyPressed;\n },\n\n /**\n * @private\n * @param {Event} e Event object\n * @param {fabric.Object} target\n */\n _shouldClearSelection: function (e, target) {\n var activeObjects = this.getActiveObjects(),\n activeObject = this._activeObject;\n\n return (\n !target\n ||\n (target &&\n activeObject &&\n activeObjects.length > 1 &&\n activeObjects.indexOf(target) === -1 &&\n activeObject !== target &&\n !this._isSelectionKeyPressed(e))\n ||\n (target && !target.evented)\n ||\n (target &&\n !target.selectable &&\n activeObject &&\n activeObject !== target)\n );\n },\n\n /**\n * centeredScaling from object can't override centeredScaling from canvas.\n * this should be fixed, since object setting should take precedence over canvas.\n * also this should be something that will be migrated in the control properties.\n * as ability to define the origin of the transformation that the control provide.\n * @private\n * @param {fabric.Object} target\n * @param {String} action\n * @param {Boolean} altKey\n */\n _shouldCenterTransform: function (target, action, altKey) {\n if (!target) {\n return;\n }\n\n var centerTransform;\n\n if (action === 'scale' || action === 'scaleX' || action === 'scaleY' || action === 'resizing') {\n centerTransform = this.centeredScaling || target.centeredScaling;\n }\n else if (action === 'rotate') {\n centerTransform = this.centeredRotation || target.centeredRotation;\n }\n\n return centerTransform ? !altKey : altKey;\n },\n\n /**\n * should disappear before release 4.0\n * @private\n */\n _getOriginFromCorner: function(target, corner) {\n var origin = {\n x: target.originX,\n y: target.originY\n };\n\n if (corner === 'ml' || corner === 'tl' || corner === 'bl') {\n origin.x = 'right';\n }\n else if (corner === 'mr' || corner === 'tr' || corner === 'br') {\n origin.x = 'left';\n }\n\n if (corner === 'tl' || corner === 'mt' || corner === 'tr') {\n origin.y = 'bottom';\n }\n else if (corner === 'bl' || corner === 'mb' || corner === 'br') {\n origin.y = 'top';\n }\n return origin;\n },\n\n /**\n * @private\n * @param {Boolean} alreadySelected true if target is already selected\n * @param {String} corner a string representing the corner ml, mr, tl ...\n * @param {Event} e Event object\n * @param {fabric.Object} [target] inserted back to help overriding. Unused\n */\n _getActionFromCorner: function(alreadySelected, corner, e, target) {\n if (!corner || !alreadySelected) {\n return 'drag';\n }\n var control = target.controls[corner];\n return control.getActionName(e, control, target);\n },\n\n /**\n * @private\n * @param {Event} e Event object\n * @param {fabric.Object} target\n */\n _setupCurrentTransform: function (e, target, alreadySelected) {\n if (!target) {\n return;\n }\n\n var pointer = this.getPointer(e), corner = target.__corner,\n control = target.controls[corner],\n actionHandler = (alreadySelected && corner) ?\n control.getActionHandler(e, target, control) : fabric.controlsUtils.dragHandler,\n action = this._getActionFromCorner(alreadySelected, corner, e, target),\n origin = this._getOriginFromCorner(target, corner),\n altKey = e[this.centeredKey],\n transform = {\n target: target,\n action: action,\n actionHandler: actionHandler,\n corner: corner,\n scaleX: target.scaleX,\n scaleY: target.scaleY,\n skewX: target.skewX,\n skewY: target.skewY,\n // used by transation\n offsetX: pointer.x - target.left,\n offsetY: pointer.y - target.top,\n originX: origin.x,\n originY: origin.y,\n ex: pointer.x,\n ey: pointer.y,\n lastX: pointer.x,\n lastY: pointer.y,\n // unsure they are useful anymore.\n // left: target.left,\n // top: target.top,\n theta: degreesToRadians(target.angle),\n // end of unsure\n width: target.width * target.scaleX,\n shiftKey: e.shiftKey,\n altKey: altKey,\n original: fabric.util.saveObjectTransform(target),\n };\n\n if (this._shouldCenterTransform(target, action, altKey)) {\n transform.originX = 'center';\n transform.originY = 'center';\n }\n transform.original.originX = origin.x;\n transform.original.originY = origin.y;\n this._currentTransform = transform;\n this._beforeTransform(e);\n },\n\n /**\n * Set the cursor type of the canvas element\n * @param {String} value Cursor type of the canvas element.\n * @see http://www.w3.org/TR/css3-ui/#cursor\n */\n setCursor: function (value) {\n this.upperCanvasEl.style.cursor = value;\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx to draw the selection on\n */\n _drawSelection: function (ctx) {\n var selector = this._groupSelector,\n viewportStart = new fabric.Point(selector.ex, selector.ey),\n start = fabric.util.transformPoint(viewportStart, this.viewportTransform),\n viewportExtent = new fabric.Point(selector.ex + selector.left, selector.ey + selector.top),\n extent = fabric.util.transformPoint(viewportExtent, this.viewportTransform),\n minX = Math.min(start.x, extent.x),\n minY = Math.min(start.y, extent.y),\n maxX = Math.max(start.x, extent.x),\n maxY = Math.max(start.y, extent.y),\n strokeOffset = this.selectionLineWidth / 2;\n\n if (this.selectionColor) {\n ctx.fillStyle = this.selectionColor;\n ctx.fillRect(minX, minY, maxX - minX, maxY - minY);\n }\n\n if (!this.selectionLineWidth || !this.selectionBorderColor) {\n return;\n }\n ctx.lineWidth = this.selectionLineWidth;\n ctx.strokeStyle = this.selectionBorderColor;\n\n minX += strokeOffset;\n minY += strokeOffset;\n maxX -= strokeOffset;\n maxY -= strokeOffset;\n // selection border\n fabric.Object.prototype._setLineDash.call(this, ctx, this.selectionDashArray);\n ctx.strokeRect(minX, minY, maxX - minX, maxY - minY);\n },\n\n /**\n * Method that determines what object we are clicking on\n * the skipGroup parameter is for internal use, is needed for shift+click action\n * 11/09/2018 TODO: would be cool if findTarget could discern between being a full target\n * or the outside part of the corner.\n * @param {Event} e mouse event\n * @param {Boolean} skipGroup when true, activeGroup is skipped and only objects are traversed through\n * @return {fabric.Object} the target found\n */\n findTarget: function (e, skipGroup) {\n if (this.skipTargetFind) {\n return;\n }\n\n var ignoreZoom = true,\n pointer = this.getPointer(e, ignoreZoom),\n activeObject = this._activeObject,\n aObjects = this.getActiveObjects(),\n activeTarget, activeTargetSubs,\n isTouch = isTouchEvent(e),\n shouldLookForActive = (aObjects.length > 1 && !skipGroup) || aObjects.length === 1;\n\n // first check current group (if one exists)\n // active group does not check sub targets like normal groups.\n // if active group just exits.\n this.targets = [];\n\n // if we hit the corner of an activeObject, let's return that.\n if (shouldLookForActive && activeObject._findTargetCorner(pointer, isTouch)) {\n return activeObject;\n }\n if (aObjects.length > 1 && !skipGroup && activeObject === this._searchPossibleTargets([activeObject], pointer)) {\n return activeObject;\n }\n if (aObjects.length === 1 &&\n activeObject === this._searchPossibleTargets([activeObject], pointer)) {\n if (!this.preserveObjectStacking) {\n return activeObject;\n }\n else {\n activeTarget = activeObject;\n activeTargetSubs = this.targets;\n this.targets = [];\n }\n }\n var target = this._searchPossibleTargets(this._objects, pointer);\n if (e[this.altSelectionKey] && target && activeTarget && target !== activeTarget) {\n target = activeTarget;\n this.targets = activeTargetSubs;\n }\n return target;\n },\n\n /**\n * Checks point is inside the object.\n * @param {Object} [pointer] x,y object of point coordinates we want to check.\n * @param {fabric.Object} obj Object to test against\n * @param {Object} [globalPointer] x,y object of point coordinates relative to canvas used to search per pixel target.\n * @return {Boolean} true if point is contained within an area of given object\n * @private\n */\n _checkTarget: function(pointer, obj, globalPointer) {\n if (obj &&\n obj.visible &&\n obj.evented &&\n // http://www.geog.ubc.ca/courses/klink/gis.notes/ncgia/u32.html\n // http://idav.ucdavis.edu/~okreylos/TAship/Spring2000/PointInPolygon.html\n obj.containsPoint(pointer)\n ) {\n if ((this.perPixelTargetFind || obj.perPixelTargetFind) && !obj.isEditing) {\n var isTransparent = this.isTargetTransparent(obj, globalPointer.x, globalPointer.y);\n if (!isTransparent) {\n return true;\n }\n }\n else {\n return true;\n }\n }\n },\n\n /**\n * Function used to search inside objects an object that contains pointer in bounding box or that contains pointerOnCanvas when painted\n * @param {Array} [objects] objects array to look into\n * @param {Object} [pointer] x,y object of point coordinates we want to check.\n * @return {fabric.Object} object that contains pointer\n * @private\n */\n _searchPossibleTargets: function(objects, pointer) {\n // Cache all targets where their bounding box contains point.\n var target, i = objects.length, subTarget;\n // Do not check for currently grouped objects, since we check the parent group itself.\n // until we call this function specifically to search inside the activeGroup\n while (i--) {\n var objToCheck = objects[i];\n var pointerToUse = objToCheck.group ?\n this._normalizePointer(objToCheck.group, pointer) : pointer;\n if (this._checkTarget(pointerToUse, objToCheck, pointer)) {\n target = objects[i];\n if (target.subTargetCheck && target instanceof fabric.Group) {\n subTarget = this._searchPossibleTargets(target._objects, pointer);\n subTarget && this.targets.push(subTarget);\n }\n break;\n }\n }\n return target;\n },\n\n /**\n * Returns pointer coordinates without the effect of the viewport\n * @param {Object} pointer with \"x\" and \"y\" number values\n * @return {Object} object with \"x\" and \"y\" number values\n */\n restorePointerVpt: function(pointer) {\n return fabric.util.transformPoint(\n pointer,\n fabric.util.invertTransform(this.viewportTransform)\n );\n },\n\n /**\n * Returns pointer coordinates relative to canvas.\n * Can return coordinates with or without viewportTransform.\n * ignoreZoom false gives back coordinates that represent\n * the point clicked on canvas element.\n * ignoreZoom true gives back coordinates after being processed\n * by the viewportTransform ( sort of coordinates of what is displayed\n * on the canvas where you are clicking.\n * ignoreZoom true = HTMLElement coordinates relative to top,left\n * ignoreZoom false, default = fabric space coordinates, the same used for shape position\n * To interact with your shapes top and left you want to use ignoreZoom true\n * most of the time, while ignoreZoom false will give you coordinates\n * compatible with the object.oCoords system.\n * of the time.\n * @param {Event} e\n * @param {Boolean} ignoreZoom\n * @return {Object} object with \"x\" and \"y\" number values\n */\n getPointer: function (e, ignoreZoom) {\n // return cached values if we are in the event processing chain\n if (this._absolutePointer && !ignoreZoom) {\n return this._absolutePointer;\n }\n if (this._pointer && ignoreZoom) {\n return this._pointer;\n }\n\n var pointer = getPointer(e),\n upperCanvasEl = this.upperCanvasEl,\n bounds = upperCanvasEl.getBoundingClientRect(),\n boundsWidth = bounds.width || 0,\n boundsHeight = bounds.height || 0,\n cssScale;\n\n if (!boundsWidth || !boundsHeight ) {\n if ('top' in bounds && 'bottom' in bounds) {\n boundsHeight = Math.abs( bounds.top - bounds.bottom );\n }\n if ('right' in bounds && 'left' in bounds) {\n boundsWidth = Math.abs( bounds.right - bounds.left );\n }\n }\n\n this.calcOffset();\n pointer.x = pointer.x - this._offset.left;\n pointer.y = pointer.y - this._offset.top;\n if (!ignoreZoom) {\n pointer = this.restorePointerVpt(pointer);\n }\n\n var retinaScaling = this.getRetinaScaling();\n if (retinaScaling !== 1) {\n pointer.x /= retinaScaling;\n pointer.y /= retinaScaling;\n }\n\n if (boundsWidth === 0 || boundsHeight === 0) {\n // If bounds are not available (i.e. not visible), do not apply scale.\n cssScale = { width: 1, height: 1 };\n }\n else {\n cssScale = {\n width: upperCanvasEl.width / boundsWidth,\n height: upperCanvasEl.height / boundsHeight\n };\n }\n\n return {\n x: pointer.x * cssScale.width,\n y: pointer.y * cssScale.height\n };\n },\n\n /**\n * @private\n * @throws {CANVAS_INIT_ERROR} If canvas can not be initialized\n */\n _createUpperCanvas: function () {\n var lowerCanvasClass = this.lowerCanvasEl.className.replace(/\\s*lower-canvas\\s*/, ''),\n lowerCanvasEl = this.lowerCanvasEl, upperCanvasEl = this.upperCanvasEl;\n\n // there is no need to create a new upperCanvas element if we have already one.\n if (upperCanvasEl) {\n upperCanvasEl.className = '';\n }\n else {\n upperCanvasEl = this._createCanvasElement();\n this.upperCanvasEl = upperCanvasEl;\n }\n fabric.util.addClass(upperCanvasEl, 'upper-canvas ' + lowerCanvasClass);\n\n this.wrapperEl.appendChild(upperCanvasEl);\n\n this._copyCanvasStyle(lowerCanvasEl, upperCanvasEl);\n this._applyCanvasStyle(upperCanvasEl);\n this.contextTop = upperCanvasEl.getContext('2d');\n },\n\n /**\n * @private\n */\n _createCacheCanvas: function () {\n this.cacheCanvasEl = this._createCanvasElement();\n this.cacheCanvasEl.setAttribute('width', this.width);\n this.cacheCanvasEl.setAttribute('height', this.height);\n this.contextCache = this.cacheCanvasEl.getContext('2d');\n },\n\n /**\n * @private\n */\n _initWrapperElement: function () {\n this.wrapperEl = fabric.util.wrapElement(this.lowerCanvasEl, 'div', {\n 'class': this.containerClass\n });\n fabric.util.setStyle(this.wrapperEl, {\n width: this.width + 'px',\n height: this.height + 'px',\n position: 'relative'\n });\n fabric.util.makeElementUnselectable(this.wrapperEl);\n },\n\n /**\n * @private\n * @param {HTMLElement} element canvas element to apply styles on\n */\n _applyCanvasStyle: function (element) {\n var width = this.width || element.width,\n height = this.height || element.height;\n\n fabric.util.setStyle(element, {\n position: 'absolute',\n width: width + 'px',\n height: height + 'px',\n left: 0,\n top: 0,\n 'touch-action': this.allowTouchScrolling ? 'manipulation' : 'none',\n '-ms-touch-action': this.allowTouchScrolling ? 'manipulation' : 'none'\n });\n element.width = width;\n element.height = height;\n fabric.util.makeElementUnselectable(element);\n },\n\n /**\n * Copy the entire inline style from one element (fromEl) to another (toEl)\n * @private\n * @param {Element} fromEl Element style is copied from\n * @param {Element} toEl Element copied style is applied to\n */\n _copyCanvasStyle: function (fromEl, toEl) {\n toEl.style.cssText = fromEl.style.cssText;\n },\n\n /**\n * Returns context of canvas where object selection is drawn\n * @return {CanvasRenderingContext2D}\n */\n getSelectionContext: function() {\n return this.contextTop;\n },\n\n /**\n * Returns <canvas> element on which object selection is drawn\n * @return {HTMLCanvasElement}\n */\n getSelectionElement: function () {\n return this.upperCanvasEl;\n },\n\n /**\n * Returns currently active object\n * @return {fabric.Object} active object\n */\n getActiveObject: function () {\n return this._activeObject;\n },\n\n /**\n * Returns an array with the current selected objects\n * @return {fabric.Object} active object\n */\n getActiveObjects: function () {\n var active = this._activeObject;\n if (active) {\n if (active.type === 'activeSelection' && active._objects) {\n return active._objects.slice(0);\n }\n else {\n return [active];\n }\n }\n return [];\n },\n\n /**\n * @private\n * @param {fabric.Object} obj Object that was removed\n */\n _onObjectRemoved: function(obj) {\n // removing active object should fire \"selection:cleared\" events\n if (obj === this._activeObject) {\n this.fire('before:selection:cleared', { target: obj });\n this._discardActiveObject();\n this.fire('selection:cleared', { target: obj });\n obj.fire('deselected');\n }\n if (obj === this._hoveredTarget){\n this._hoveredTarget = null;\n this._hoveredTargets = [];\n }\n this.callSuper('_onObjectRemoved', obj);\n },\n\n /**\n * @private\n * Compares the old activeObject with the current one and fires correct events\n * @param {fabric.Object} obj old activeObject\n */\n _fireSelectionEvents: function(oldObjects, e) {\n var somethingChanged = false, objects = this.getActiveObjects(),\n added = [], removed = [];\n oldObjects.forEach(function(oldObject) {\n if (objects.indexOf(oldObject) === -1) {\n somethingChanged = true;\n oldObject.fire('deselected', {\n e: e,\n target: oldObject\n });\n removed.push(oldObject);\n }\n });\n objects.forEach(function(object) {\n if (oldObjects.indexOf(object) === -1) {\n somethingChanged = true;\n object.fire('selected', {\n e: e,\n target: object\n });\n added.push(object);\n }\n });\n if (oldObjects.length > 0 && objects.length > 0) {\n somethingChanged && this.fire('selection:updated', {\n e: e,\n selected: added,\n deselected: removed,\n // added for backward compatibility\n // deprecated\n updated: added[0] || removed[0],\n target: this._activeObject,\n });\n }\n else if (objects.length > 0) {\n this.fire('selection:created', {\n e: e,\n selected: added,\n target: this._activeObject,\n });\n }\n else if (oldObjects.length > 0) {\n this.fire('selection:cleared', {\n e: e,\n deselected: removed,\n });\n }\n },\n\n /**\n * Sets given object as the only active object on canvas\n * @param {fabric.Object} object Object to set as an active one\n * @param {Event} [e] Event (passed along when firing \"object:selected\")\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n setActiveObject: function (object, e) {\n var currentActives = this.getActiveObjects();\n this._setActiveObject(object, e);\n this._fireSelectionEvents(currentActives, e);\n return this;\n },\n\n /**\n * This is a private method for now.\n * This is supposed to be equivalent to setActiveObject but without firing\n * any event. There is commitment to have this stay this way.\n * This is the functional part of setActiveObject.\n * @private\n * @param {Object} object to set as active\n * @param {Event} [e] Event (passed along when firing \"object:selected\")\n * @return {Boolean} true if the selection happened\n */\n _setActiveObject: function(object, e) {\n if (this._activeObject === object) {\n return false;\n }\n if (!this._discardActiveObject(e, object)) {\n return false;\n }\n if (object.onSelect({ e: e })) {\n return false;\n }\n this._activeObject = object;\n return true;\n },\n\n /**\n * This is a private method for now.\n * This is supposed to be equivalent to discardActiveObject but without firing\n * any events. There is commitment to have this stay this way.\n * This is the functional part of discardActiveObject.\n * @param {Event} [e] Event (passed along when firing \"object:deselected\")\n * @param {Object} object to set as active\n * @return {Boolean} true if the selection happened\n * @private\n */\n _discardActiveObject: function(e, object) {\n var obj = this._activeObject;\n if (obj) {\n // onDeselect return TRUE to cancel selection;\n if (obj.onDeselect({ e: e, object: object })) {\n return false;\n }\n this._activeObject = null;\n }\n return true;\n },\n\n /**\n * Discards currently active object and fire events. If the function is called by fabric\n * as a consequence of a mouse event, the event is passed as a parameter and\n * sent to the fire function for the custom events. When used as a method the\n * e param does not have any application.\n * @param {event} e\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n discardActiveObject: function (e) {\n var currentActives = this.getActiveObjects(), activeObject = this.getActiveObject();\n if (currentActives.length) {\n this.fire('before:selection:cleared', { target: activeObject, e: e });\n }\n this._discardActiveObject(e);\n this._fireSelectionEvents(currentActives, e);\n return this;\n },\n\n /**\n * Clears a canvas element and removes all event listeners\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n dispose: function () {\n var wrapper = this.wrapperEl;\n this.removeListeners();\n wrapper.removeChild(this.upperCanvasEl);\n wrapper.removeChild(this.lowerCanvasEl);\n this.contextCache = null;\n this.contextTop = null;\n ['upperCanvasEl', 'cacheCanvasEl'].forEach((function(element) {\n fabric.util.cleanUpJsdomNode(this[element]);\n this[element] = undefined;\n }).bind(this));\n if (wrapper.parentNode) {\n wrapper.parentNode.replaceChild(this.lowerCanvasEl, this.wrapperEl);\n }\n delete this.wrapperEl;\n fabric.StaticCanvas.prototype.dispose.call(this);\n return this;\n },\n\n /**\n * Clears all contexts (background, main, top) of an instance\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n clear: function () {\n // this.discardActiveGroup();\n this.discardActiveObject();\n this.clearContext(this.contextTop);\n return this.callSuper('clear');\n },\n\n /**\n * Draws objects' controls (borders/controls)\n * @param {CanvasRenderingContext2D} ctx Context to render controls on\n */\n drawControls: function(ctx) {\n var activeObject = this._activeObject;\n\n if (activeObject) {\n activeObject._renderControls(ctx);\n }\n },\n\n /**\n * @private\n */\n _toObject: function(instance, methodName, propertiesToInclude) {\n //If the object is part of the current selection group, it should\n //be transformed appropriately\n //i.e. it should be serialised as it would appear if the selection group\n //were to be destroyed.\n var originalProperties = this._realizeGroupTransformOnObject(instance),\n object = this.callSuper('_toObject', instance, methodName, propertiesToInclude);\n //Undo the damage we did by changing all of its properties\n this._unwindGroupTransformOnObject(instance, originalProperties);\n return object;\n },\n\n /**\n * Realises an object's group transformation on it\n * @private\n * @param {fabric.Object} [instance] the object to transform (gets mutated)\n * @returns the original values of instance which were changed\n */\n _realizeGroupTransformOnObject: function(instance) {\n if (instance.group && instance.group.type === 'activeSelection' && this._activeObject === instance.group) {\n var layoutProps = ['angle', 'flipX', 'flipY', 'left', 'scaleX', 'scaleY', 'skewX', 'skewY', 'top'];\n //Copy all the positionally relevant properties across now\n var originalValues = {};\n layoutProps.forEach(function(prop) {\n originalValues[prop] = instance[prop];\n });\n fabric.util.addTransformToObject(instance, this._activeObject.calcOwnMatrix());\n return originalValues;\n }\n else {\n return null;\n }\n },\n\n /**\n * Restores the changed properties of instance\n * @private\n * @param {fabric.Object} [instance] the object to un-transform (gets mutated)\n * @param {Object} [originalValues] the original values of instance, as returned by _realizeGroupTransformOnObject\n */\n _unwindGroupTransformOnObject: function(instance, originalValues) {\n if (originalValues) {\n instance.set(originalValues);\n }\n },\n\n /**\n * @private\n */\n _setSVGObject: function(markup, instance, reviver) {\n //If the object is in a selection group, simulate what would happen to that\n //object when the group is deselected\n var originalProperties = this._realizeGroupTransformOnObject(instance);\n this.callSuper('_setSVGObject', markup, instance, reviver);\n this._unwindGroupTransformOnObject(instance, originalProperties);\n },\n\n setViewportTransform: function (vpt) {\n if (this.renderOnAddRemove && this._activeObject && this._activeObject.isEditing) {\n this._activeObject.clearContextTop();\n }\n fabric.StaticCanvas.prototype.setViewportTransform.call(this, vpt);\n }\n });\n\n // copying static properties manually to work around Opera's bug,\n // where \"prototype\" property is enumerable and overrides existing prototype\n for (var prop in fabric.StaticCanvas) {\n if (prop !== 'prototype') {\n fabric.Canvas[prop] = fabric.StaticCanvas[prop];\n }\n }\n})();\n\n\n(function() {\n\n var addListener = fabric.util.addListener,\n removeListener = fabric.util.removeListener,\n RIGHT_CLICK = 3, MIDDLE_CLICK = 2, LEFT_CLICK = 1,\n addEventOptions = { passive: false };\n\n function checkClick(e, value) {\n return e.button && (e.button === value - 1);\n }\n\n fabric.util.object.extend(fabric.Canvas.prototype, /** @lends fabric.Canvas.prototype */ {\n\n /**\n * Contains the id of the touch event that owns the fabric transform\n * @type Number\n * @private\n */\n mainTouchId: null,\n\n /**\n * Adds mouse listeners to canvas\n * @private\n */\n _initEventListeners: function () {\n // in case we initialized the class twice. This should not happen normally\n // but in some kind of applications where the canvas element may be changed\n // this is a workaround to having double listeners.\n this.removeListeners();\n this._bindEvents();\n this.addOrRemove(addListener, 'add');\n },\n\n /**\n * return an event prefix pointer or mouse.\n * @private\n */\n _getEventPrefix: function () {\n return this.enablePointerEvents ? 'pointer' : 'mouse';\n },\n\n addOrRemove: function(functor, eventjsFunctor) {\n var canvasElement = this.upperCanvasEl,\n eventTypePrefix = this._getEventPrefix();\n functor(fabric.window, 'resize', this._onResize);\n functor(canvasElement, eventTypePrefix + 'down', this._onMouseDown);\n functor(canvasElement, eventTypePrefix + 'move', this._onMouseMove, addEventOptions);\n functor(canvasElement, eventTypePrefix + 'out', this._onMouseOut);\n functor(canvasElement, eventTypePrefix + 'enter', this._onMouseEnter);\n functor(canvasElement, 'wheel', this._onMouseWheel);\n functor(canvasElement, 'contextmenu', this._onContextMenu);\n functor(canvasElement, 'dblclick', this._onDoubleClick);\n functor(canvasElement, 'dragover', this._onDragOver);\n functor(canvasElement, 'dragenter', this._onDragEnter);\n functor(canvasElement, 'dragleave', this._onDragLeave);\n functor(canvasElement, 'drop', this._onDrop);\n if (!this.enablePointerEvents) {\n functor(canvasElement, 'touchstart', this._onTouchStart, addEventOptions);\n }\n if (typeof eventjs !== 'undefined' && eventjsFunctor in eventjs) {\n eventjs[eventjsFunctor](canvasElement, 'gesture', this._onGesture);\n eventjs[eventjsFunctor](canvasElement, 'drag', this._onDrag);\n eventjs[eventjsFunctor](canvasElement, 'orientation', this._onOrientationChange);\n eventjs[eventjsFunctor](canvasElement, 'shake', this._onShake);\n eventjs[eventjsFunctor](canvasElement, 'longpress', this._onLongPress);\n }\n },\n\n /**\n * Removes all event listeners\n */\n removeListeners: function() {\n this.addOrRemove(removeListener, 'remove');\n // if you dispose on a mouseDown, before mouse up, you need to clean document to...\n var eventTypePrefix = this._getEventPrefix();\n removeListener(fabric.document, eventTypePrefix + 'up', this._onMouseUp);\n removeListener(fabric.document, 'touchend', this._onTouchEnd, addEventOptions);\n removeListener(fabric.document, eventTypePrefix + 'move', this._onMouseMove, addEventOptions);\n removeListener(fabric.document, 'touchmove', this._onMouseMove, addEventOptions);\n },\n\n /**\n * @private\n */\n _bindEvents: function() {\n if (this.eventsBound) {\n // for any reason we pass here twice we do not want to bind events twice.\n return;\n }\n this._onMouseDown = this._onMouseDown.bind(this);\n this._onTouchStart = this._onTouchStart.bind(this);\n this._onMouseMove = this._onMouseMove.bind(this);\n this._onMouseUp = this._onMouseUp.bind(this);\n this._onTouchEnd = this._onTouchEnd.bind(this);\n this._onResize = this._onResize.bind(this);\n this._onGesture = this._onGesture.bind(this);\n this._onDrag = this._onDrag.bind(this);\n this._onShake = this._onShake.bind(this);\n this._onLongPress = this._onLongPress.bind(this);\n this._onOrientationChange = this._onOrientationChange.bind(this);\n this._onMouseWheel = this._onMouseWheel.bind(this);\n this._onMouseOut = this._onMouseOut.bind(this);\n this._onMouseEnter = this._onMouseEnter.bind(this);\n this._onContextMenu = this._onContextMenu.bind(this);\n this._onDoubleClick = this._onDoubleClick.bind(this);\n this._onDragOver = this._onDragOver.bind(this);\n this._onDragEnter = this._simpleEventHandler.bind(this, 'dragenter');\n this._onDragLeave = this._simpleEventHandler.bind(this, 'dragleave');\n this._onDrop = this._simpleEventHandler.bind(this, 'drop');\n this.eventsBound = true;\n },\n\n /**\n * @private\n * @param {Event} [e] Event object fired on Event.js gesture\n * @param {Event} [self] Inner Event object\n */\n _onGesture: function(e, self) {\n this.__onTransformGesture && this.__onTransformGesture(e, self);\n },\n\n /**\n * @private\n * @param {Event} [e] Event object fired on Event.js drag\n * @param {Event} [self] Inner Event object\n */\n _onDrag: function(e, self) {\n this.__onDrag && this.__onDrag(e, self);\n },\n\n /**\n * @private\n * @param {Event} [e] Event object fired on wheel event\n */\n _onMouseWheel: function(e) {\n this.__onMouseWheel(e);\n },\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n _onMouseOut: function(e) {\n var target = this._hoveredTarget;\n this.fire('mouse:out', { target: target, e: e });\n this._hoveredTarget = null;\n target && target.fire('mouseout', { e: e });\n\n var _this = this;\n this._hoveredTargets.forEach(function(_target){\n _this.fire('mouse:out', { target: target, e: e });\n _target && target.fire('mouseout', { e: e });\n });\n this._hoveredTargets = [];\n\n if (this._iTextInstances) {\n this._iTextInstances.forEach(function(obj) {\n if (obj.isEditing) {\n obj.hiddenTextarea.focus();\n }\n });\n }\n },\n\n /**\n * @private\n * @param {Event} e Event object fired on mouseenter\n */\n _onMouseEnter: function(e) {\n // This find target and consequent 'mouse:over' is used to\n // clear old instances on hovered target.\n // calling findTarget has the side effect of killing target.__corner.\n // as a short term fix we are not firing this if we are currently transforming.\n // as a long term fix we need to separate the action of finding a target with the\n // side effects we added to it.\n if (!this._currentTransform && !this.findTarget(e)) {\n this.fire('mouse:over', { target: null, e: e });\n this._hoveredTarget = null;\n this._hoveredTargets = [];\n }\n },\n\n /**\n * @private\n * @param {Event} [e] Event object fired on Event.js orientation change\n * @param {Event} [self] Inner Event object\n */\n _onOrientationChange: function(e, self) {\n this.__onOrientationChange && this.__onOrientationChange(e, self);\n },\n\n /**\n * @private\n * @param {Event} [e] Event object fired on Event.js shake\n * @param {Event} [self] Inner Event object\n */\n _onShake: function(e, self) {\n this.__onShake && this.__onShake(e, self);\n },\n\n /**\n * @private\n * @param {Event} [e] Event object fired on Event.js shake\n * @param {Event} [self] Inner Event object\n */\n _onLongPress: function(e, self) {\n this.__onLongPress && this.__onLongPress(e, self);\n },\n\n /**\n * prevent default to allow drop event to be fired\n * @private\n * @param {Event} [e] Event object fired on Event.js shake\n */\n _onDragOver: function(e) {\n e.preventDefault();\n var target = this._simpleEventHandler('dragover', e);\n this._fireEnterLeaveEvents(target, e);\n },\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n _onContextMenu: function (e) {\n if (this.stopContextMenu) {\n e.stopPropagation();\n e.preventDefault();\n }\n return false;\n },\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n _onDoubleClick: function (e) {\n this._cacheTransformEventData(e);\n this._handleEvent(e, 'dblclick');\n this._resetTransformEventData(e);\n },\n\n /**\n * Return a the id of an event.\n * returns either the pointerId or the identifier or 0 for the mouse event\n * @private\n * @param {Event} evt Event object\n */\n getPointerId: function(evt) {\n var changedTouches = evt.changedTouches;\n\n if (changedTouches) {\n return changedTouches[0] && changedTouches[0].identifier;\n }\n\n if (this.enablePointerEvents) {\n return evt.pointerId;\n }\n\n return -1;\n },\n\n /**\n * Determines if an event has the id of the event that is considered main\n * @private\n * @param {evt} event Event object\n */\n _isMainEvent: function(evt) {\n if (evt.isPrimary === true) {\n return true;\n }\n if (evt.isPrimary === false) {\n return false;\n }\n if (evt.type === 'touchend' && evt.touches.length === 0) {\n return true;\n }\n if (evt.changedTouches) {\n return evt.changedTouches[0].identifier === this.mainTouchId;\n }\n return true;\n },\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n _onTouchStart: function(e) {\n e.preventDefault();\n if (this.mainTouchId === null) {\n this.mainTouchId = this.getPointerId(e);\n }\n this.__onMouseDown(e);\n this._resetTransformEventData();\n var canvasElement = this.upperCanvasEl,\n eventTypePrefix = this._getEventPrefix();\n addListener(fabric.document, 'touchend', this._onTouchEnd, addEventOptions);\n addListener(fabric.document, 'touchmove', this._onMouseMove, addEventOptions);\n // Unbind mousedown to prevent double triggers from touch devices\n removeListener(canvasElement, eventTypePrefix + 'down', this._onMouseDown);\n },\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n _onMouseDown: function (e) {\n this.__onMouseDown(e);\n this._resetTransformEventData();\n var canvasElement = this.upperCanvasEl,\n eventTypePrefix = this._getEventPrefix();\n removeListener(canvasElement, eventTypePrefix + 'move', this._onMouseMove, addEventOptions);\n addListener(fabric.document, eventTypePrefix + 'up', this._onMouseUp);\n addListener(fabric.document, eventTypePrefix + 'move', this._onMouseMove, addEventOptions);\n },\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n _onTouchEnd: function(e) {\n if (e.touches.length > 0) {\n // if there are still touches stop here\n return;\n }\n this.__onMouseUp(e);\n this._resetTransformEventData();\n this.mainTouchId = null;\n var eventTypePrefix = this._getEventPrefix();\n removeListener(fabric.document, 'touchend', this._onTouchEnd, addEventOptions);\n removeListener(fabric.document, 'touchmove', this._onMouseMove, addEventOptions);\n var _this = this;\n if (this._willAddMouseDown) {\n clearTimeout(this._willAddMouseDown);\n }\n this._willAddMouseDown = setTimeout(function() {\n // Wait 400ms before rebinding mousedown to prevent double triggers\n // from touch devices\n addListener(_this.upperCanvasEl, eventTypePrefix + 'down', _this._onMouseDown);\n _this._willAddMouseDown = 0;\n }, 400);\n },\n\n /**\n * @private\n * @param {Event} e Event object fired on mouseup\n */\n _onMouseUp: function (e) {\n this.__onMouseUp(e);\n this._resetTransformEventData();\n var canvasElement = this.upperCanvasEl,\n eventTypePrefix = this._getEventPrefix();\n if (this._isMainEvent(e)) {\n removeListener(fabric.document, eventTypePrefix + 'up', this._onMouseUp);\n removeListener(fabric.document, eventTypePrefix + 'move', this._onMouseMove, addEventOptions);\n addListener(canvasElement, eventTypePrefix + 'move', this._onMouseMove, addEventOptions);\n }\n },\n\n /**\n * @private\n * @param {Event} e Event object fired on mousemove\n */\n _onMouseMove: function (e) {\n !this.allowTouchScrolling && e.preventDefault && e.preventDefault();\n this.__onMouseMove(e);\n },\n\n /**\n * @private\n */\n _onResize: function () {\n this.calcOffset();\n },\n\n /**\n * Decides whether the canvas should be redrawn in mouseup and mousedown events.\n * @private\n * @param {Object} target\n */\n _shouldRender: function(target) {\n var activeObject = this._activeObject;\n\n if (\n !!activeObject !== !!target ||\n (activeObject && target && (activeObject !== target))\n ) {\n // this covers: switch of target, from target to no target, selection of target\n // multiSelection with key and mouse\n return true;\n }\n else if (activeObject && activeObject.isEditing) {\n // if we mouse up/down over a editing textbox a cursor change,\n // there is no need to re render\n return false;\n }\n return false;\n },\n\n /**\n * Method that defines the actions when mouse is released on canvas.\n * The method resets the currentTransform parameters, store the image corner\n * position in the image object and render the canvas on top.\n * @private\n * @param {Event} e Event object fired on mouseup\n */\n __onMouseUp: function (e) {\n var target, transform = this._currentTransform,\n groupSelector = this._groupSelector, shouldRender = false,\n isClick = (!groupSelector || (groupSelector.left === 0 && groupSelector.top === 0));\n this._cacheTransformEventData(e);\n target = this._target;\n this._handleEvent(e, 'up:before');\n // if right/middle click just fire events and return\n // target undefined will make the _handleEvent search the target\n if (checkClick(e, RIGHT_CLICK)) {\n if (this.fireRightClick) {\n this._handleEvent(e, 'up', RIGHT_CLICK, isClick);\n }\n return;\n }\n\n if (checkClick(e, MIDDLE_CLICK)) {\n if (this.fireMiddleClick) {\n this._handleEvent(e, 'up', MIDDLE_CLICK, isClick);\n }\n this._resetTransformEventData();\n return;\n }\n\n if (this.isDrawingMode && this._isCurrentlyDrawing) {\n this._onMouseUpInDrawingMode(e);\n return;\n }\n\n if (!this._isMainEvent(e)) {\n return;\n }\n if (transform) {\n this._finalizeCurrentTransform(e);\n shouldRender = transform.actionPerformed;\n }\n if (!isClick) {\n var targetWasActive = target === this._activeObject;\n this._maybeGroupObjects(e);\n if (!shouldRender) {\n shouldRender = (\n this._shouldRender(target) ||\n (!targetWasActive && target === this._activeObject)\n );\n }\n }\n if (target) {\n if (target.selectable && target !== this._activeObject && target.activeOn === 'up') {\n this.setActiveObject(target, e);\n shouldRender = true;\n }\n else {\n var corner = target._findTargetCorner(\n this.getPointer(e, true),\n fabric.util.isTouchEvent(e)\n );\n var control = target.controls[corner],\n mouseUpHandler = control && control.getMouseUpHandler(e, target, control);\n if (mouseUpHandler) {\n var pointer = this.getPointer(e);\n mouseUpHandler(e, transform, pointer.x, pointer.y);\n }\n }\n target.isMoving = false;\n }\n this._setCursorFromEvent(e, target);\n this._handleEvent(e, 'up', LEFT_CLICK, isClick);\n this._groupSelector = null;\n this._currentTransform = null;\n // reset the target information about which corner is selected\n target && (target.__corner = 0);\n if (shouldRender) {\n this.requestRenderAll();\n }\n else if (!isClick) {\n this.renderTop();\n }\n },\n\n /**\n * @private\n * Handle event firing for target and subtargets\n * @param {Event} e event from mouse\n * @param {String} eventType event to fire (up, down or move)\n * @return {Fabric.Object} target return the the target found, for internal reasons.\n */\n _simpleEventHandler: function(eventType, e) {\n var target = this.findTarget(e),\n targets = this.targets,\n options = {\n e: e,\n target: target,\n subTargets: targets,\n };\n this.fire(eventType, options);\n target && target.fire(eventType, options);\n if (!targets) {\n return target;\n }\n for (var i = 0; i < targets.length; i++) {\n targets[i].fire(eventType, options);\n }\n return target;\n },\n\n /**\n * @private\n * Handle event firing for target and subtargets\n * @param {Event} e event from mouse\n * @param {String} eventType event to fire (up, down or move)\n * @param {fabric.Object} targetObj receiving event\n * @param {Number} [button] button used in the event 1 = left, 2 = middle, 3 = right\n * @param {Boolean} isClick for left button only, indicates that the mouse up happened without move.\n */\n _handleEvent: function(e, eventType, button, isClick) {\n var target = this._target,\n targets = this.targets || [],\n options = {\n e: e,\n target: target,\n subTargets: targets,\n button: button || LEFT_CLICK,\n isClick: isClick || false,\n pointer: this._pointer,\n absolutePointer: this._absolutePointer,\n transform: this._currentTransform\n };\n if (eventType === 'up') {\n options.currentTarget = this.findTarget(e);\n options.currentSubTargets = this.targets;\n }\n this.fire('mouse:' + eventType, options);\n target && target.fire('mouse' + eventType, options);\n for (var i = 0; i < targets.length; i++) {\n targets[i].fire('mouse' + eventType, options);\n }\n },\n\n /**\n * @private\n * @param {Event} e send the mouse event that generate the finalize down, so it can be used in the event\n */\n _finalizeCurrentTransform: function(e) {\n\n var transform = this._currentTransform,\n target = transform.target,\n eventName,\n options = {\n e: e,\n target: target,\n transform: transform,\n action: transform.action,\n };\n\n if (target._scaling) {\n target._scaling = false;\n }\n\n target.setCoords();\n\n if (transform.actionPerformed || (this.stateful && target.hasStateChanged())) {\n if (transform.actionPerformed) {\n // this is not friendly to the new control api.\n // is deprecated.\n eventName = this._addEventOptions(options, transform);\n this._fire(eventName, options);\n }\n this._fire('modified', options);\n }\n },\n\n /**\n * Mutate option object in order to add by property and give back the event name.\n * @private\n * @deprecated since 4.2.0\n * @param {Object} options to mutate\n * @param {Object} transform to inspect action from\n */\n _addEventOptions: function(options, transform) {\n // we can probably add more details at low cost\n // scale change, rotation changes, translation changes\n var eventName, by;\n switch (transform.action) {\n case 'scaleX':\n eventName = 'scaled';\n by = 'x';\n break;\n case 'scaleY':\n eventName = 'scaled';\n by = 'y';\n break;\n case 'skewX':\n eventName = 'skewed';\n by = 'x';\n break;\n case 'skewY':\n eventName = 'skewed';\n by = 'y';\n break;\n case 'scale':\n eventName = 'scaled';\n by = 'equally';\n break;\n case 'rotate':\n eventName = 'rotated';\n break;\n case 'drag':\n eventName = 'moved';\n break;\n }\n options.by = by;\n return eventName;\n },\n\n /**\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n _onMouseDownInDrawingMode: function(e) {\n this._isCurrentlyDrawing = true;\n if (this.getActiveObject()) {\n this.discardActiveObject(e).requestRenderAll();\n }\n var pointer = this.getPointer(e);\n this.freeDrawingBrush.onMouseDown(pointer, { e: e, pointer: pointer });\n this._handleEvent(e, 'down');\n },\n\n /**\n * @private\n * @param {Event} e Event object fired on mousemove\n */\n _onMouseMoveInDrawingMode: function(e) {\n if (this._isCurrentlyDrawing) {\n var pointer = this.getPointer(e);\n this.freeDrawingBrush.onMouseMove(pointer, { e: e, pointer: pointer });\n }\n this.setCursor(this.freeDrawingCursor);\n this._handleEvent(e, 'move');\n },\n\n /**\n * @private\n * @param {Event} e Event object fired on mouseup\n */\n _onMouseUpInDrawingMode: function(e) {\n var pointer = this.getPointer(e);\n this._isCurrentlyDrawing = this.freeDrawingBrush.onMouseUp({ e: e, pointer: pointer });\n this._handleEvent(e, 'up');\n },\n\n /**\n * Method that defines the actions when mouse is clicked on canvas.\n * The method inits the currentTransform parameters and renders all the\n * canvas so the current image can be placed on the top canvas and the rest\n * in on the container one.\n * @private\n * @param {Event} e Event object fired on mousedown\n */\n __onMouseDown: function (e) {\n this._cacheTransformEventData(e);\n this._handleEvent(e, 'down:before');\n var target = this._target;\n // if right click just fire events\n if (checkClick(e, RIGHT_CLICK)) {\n if (this.fireRightClick) {\n this._handleEvent(e, 'down', RIGHT_CLICK);\n }\n return;\n }\n\n if (checkClick(e, MIDDLE_CLICK)) {\n if (this.fireMiddleClick) {\n this._handleEvent(e, 'down', MIDDLE_CLICK);\n }\n return;\n }\n\n if (this.isDrawingMode) {\n this._onMouseDownInDrawingMode(e);\n return;\n }\n\n if (!this._isMainEvent(e)) {\n return;\n }\n\n // ignore if some object is being transformed at this moment\n if (this._currentTransform) {\n return;\n }\n\n var pointer = this._pointer;\n // save pointer for check in __onMouseUp event\n this._previousPointer = pointer;\n var shouldRender = this._shouldRender(target),\n shouldGroup = this._shouldGroup(e, target);\n if (this._shouldClearSelection(e, target)) {\n this.discardActiveObject(e);\n }\n else if (shouldGroup) {\n this._handleGrouping(e, target);\n target = this._activeObject;\n }\n\n if (this.selection && (!target ||\n (!target.selectable && !target.isEditing && target !== this._activeObject))) {\n this._groupSelector = {\n ex: this._absolutePointer.x,\n ey: this._absolutePointer.y,\n top: 0,\n left: 0\n };\n }\n\n if (target) {\n var alreadySelected = target === this._activeObject;\n if (target.selectable && target.activeOn === 'down') {\n this.setActiveObject(target, e);\n }\n var corner = target._findTargetCorner(\n this.getPointer(e, true),\n fabric.util.isTouchEvent(e)\n );\n target.__corner = corner;\n if (target === this._activeObject && (corner || !shouldGroup)) {\n this._setupCurrentTransform(e, target, alreadySelected);\n var control = target.controls[corner],\n pointer = this.getPointer(e),\n mouseDownHandler = control && control.getMouseDownHandler(e, target, control);\n if (mouseDownHandler) {\n mouseDownHandler(e, this._currentTransform, pointer.x, pointer.y);\n }\n }\n }\n this._handleEvent(e, 'down');\n // we must renderAll so that we update the visuals\n (shouldRender || shouldGroup) && this.requestRenderAll();\n },\n\n /**\n * reset cache form common information needed during event processing\n * @private\n */\n _resetTransformEventData: function() {\n this._target = null;\n this._pointer = null;\n this._absolutePointer = null;\n },\n\n /**\n * Cache common information needed during event processing\n * @private\n * @param {Event} e Event object fired on event\n */\n _cacheTransformEventData: function(e) {\n // reset in order to avoid stale caching\n this._resetTransformEventData();\n this._pointer = this.getPointer(e, true);\n this._absolutePointer = this.restorePointerVpt(this._pointer);\n this._target = this._currentTransform ? this._currentTransform.target : this.findTarget(e) || null;\n },\n\n /**\n * @private\n */\n _beforeTransform: function(e) {\n var t = this._currentTransform;\n this.stateful && t.target.saveState();\n this.fire('before:transform', {\n e: e,\n transform: t,\n });\n },\n\n /**\n * Method that defines the actions when mouse is hovering the canvas.\n * The currentTransform parameter will define whether the user is rotating/scaling/translating\n * an image or neither of them (only hovering). A group selection is also possible and would cancel\n * all any other type of action.\n * In case of an image transformation only the top canvas will be rendered.\n * @private\n * @param {Event} e Event object fired on mousemove\n */\n __onMouseMove: function (e) {\n this._handleEvent(e, 'move:before');\n this._cacheTransformEventData(e);\n var target, pointer;\n\n if (this.isDrawingMode) {\n this._onMouseMoveInDrawingMode(e);\n return;\n }\n\n if (!this._isMainEvent(e)) {\n return;\n }\n\n var groupSelector = this._groupSelector;\n\n // We initially clicked in an empty area, so we draw a box for multiple selection\n if (groupSelector) {\n pointer = this._absolutePointer;\n\n groupSelector.left = pointer.x - groupSelector.ex;\n groupSelector.top = pointer.y - groupSelector.ey;\n\n this.renderTop();\n }\n else if (!this._currentTransform) {\n target = this.findTarget(e) || null;\n this._setCursorFromEvent(e, target);\n this._fireOverOutEvents(target, e);\n }\n else {\n this._transformObject(e);\n }\n this._handleEvent(e, 'move');\n this._resetTransformEventData();\n },\n\n /**\n * Manage the mouseout, mouseover events for the fabric object on the canvas\n * @param {Fabric.Object} target the target where the target from the mousemove event\n * @param {Event} e Event object fired on mousemove\n * @private\n */\n _fireOverOutEvents: function(target, e) {\n var _hoveredTarget = this._hoveredTarget,\n _hoveredTargets = this._hoveredTargets, targets = this.targets,\n length = Math.max(_hoveredTargets.length, targets.length);\n\n this.fireSyntheticInOutEvents(target, e, {\n oldTarget: _hoveredTarget,\n evtOut: 'mouseout',\n canvasEvtOut: 'mouse:out',\n evtIn: 'mouseover',\n canvasEvtIn: 'mouse:over',\n });\n for (var i = 0; i < length; i++){\n this.fireSyntheticInOutEvents(targets[i], e, {\n oldTarget: _hoveredTargets[i],\n evtOut: 'mouseout',\n evtIn: 'mouseover',\n });\n }\n this._hoveredTarget = target;\n this._hoveredTargets = this.targets.concat();\n },\n\n /**\n * Manage the dragEnter, dragLeave events for the fabric objects on the canvas\n * @param {Fabric.Object} target the target where the target from the onDrag event\n * @param {Event} e Event object fired on ondrag\n * @private\n */\n _fireEnterLeaveEvents: function(target, e) {\n var _draggedoverTarget = this._draggedoverTarget,\n _hoveredTargets = this._hoveredTargets, targets = this.targets,\n length = Math.max(_hoveredTargets.length, targets.length);\n\n this.fireSyntheticInOutEvents(target, e, {\n oldTarget: _draggedoverTarget,\n evtOut: 'dragleave',\n evtIn: 'dragenter',\n });\n for (var i = 0; i < length; i++) {\n this.fireSyntheticInOutEvents(targets[i], e, {\n oldTarget: _hoveredTargets[i],\n evtOut: 'dragleave',\n evtIn: 'dragenter',\n });\n }\n this._draggedoverTarget = target;\n },\n\n /**\n * Manage the synthetic in/out events for the fabric objects on the canvas\n * @param {Fabric.Object} target the target where the target from the supported events\n * @param {Event} e Event object fired\n * @param {Object} config configuration for the function to work\n * @param {String} config.targetName property on the canvas where the old target is stored\n * @param {String} [config.canvasEvtOut] name of the event to fire at canvas level for out\n * @param {String} config.evtOut name of the event to fire for out\n * @param {String} [config.canvasEvtIn] name of the event to fire at canvas level for in\n * @param {String} config.evtIn name of the event to fire for in\n * @private\n */\n fireSyntheticInOutEvents: function(target, e, config) {\n var inOpt, outOpt, oldTarget = config.oldTarget, outFires, inFires,\n targetChanged = oldTarget !== target, canvasEvtIn = config.canvasEvtIn, canvasEvtOut = config.canvasEvtOut;\n if (targetChanged) {\n inOpt = { e: e, target: target, previousTarget: oldTarget };\n outOpt = { e: e, target: oldTarget, nextTarget: target };\n }\n inFires = target && targetChanged;\n outFires = oldTarget && targetChanged;\n if (outFires) {\n canvasEvtOut && this.fire(canvasEvtOut, outOpt);\n oldTarget.fire(config.evtOut, outOpt);\n }\n if (inFires) {\n canvasEvtIn && this.fire(canvasEvtIn, inOpt);\n target.fire(config.evtIn, inOpt);\n }\n },\n\n /**\n * Method that defines actions when an Event Mouse Wheel\n * @param {Event} e Event object fired on mouseup\n */\n __onMouseWheel: function(e) {\n this._cacheTransformEventData(e);\n this._handleEvent(e, 'wheel');\n this._resetTransformEventData();\n },\n\n /**\n * @private\n * @param {Event} e Event fired on mousemove\n */\n _transformObject: function(e) {\n var pointer = this.getPointer(e),\n transform = this._currentTransform;\n\n transform.reset = false;\n transform.shiftKey = e.shiftKey;\n transform.altKey = e[this.centeredKey];\n\n this._performTransformAction(e, transform, pointer);\n transform.actionPerformed && this.requestRenderAll();\n },\n\n /**\n * @private\n */\n _performTransformAction: function(e, transform, pointer) {\n var x = pointer.x,\n y = pointer.y,\n action = transform.action,\n actionPerformed = false,\n actionHandler = transform.actionHandler;\n // this object could be created from the function in the control handlers\n\n\n if (actionHandler) {\n actionPerformed = actionHandler(e, transform, x, y);\n }\n if (action === 'drag' && actionPerformed) {\n transform.target.isMoving = true;\n this.setCursor(transform.target.moveCursor || this.moveCursor);\n }\n transform.actionPerformed = transform.actionPerformed || actionPerformed;\n },\n\n /**\n * @private\n */\n _fire: fabric.controlsUtils.fireEvent,\n\n /**\n * Sets the cursor depending on where the canvas is being hovered.\n * Note: very buggy in Opera\n * @param {Event} e Event object\n * @param {Object} target Object that the mouse is hovering, if so.\n */\n _setCursorFromEvent: function (e, target) {\n if (!target) {\n this.setCursor(this.defaultCursor);\n return false;\n }\n var hoverCursor = target.hoverCursor || this.hoverCursor,\n activeSelection = this._activeObject && this._activeObject.type === 'activeSelection' ?\n this._activeObject : null,\n // only show proper corner when group selection is not active\n corner = (!activeSelection || !activeSelection.contains(target))\n // here we call findTargetCorner always with undefined for the touch parameter.\n // we assume that if you are using a cursor you do not need to interact with\n // the bigger touch area.\n && target._findTargetCorner(this.getPointer(e, true));\n\n if (!corner) {\n if (target.subTargetCheck){\n // hoverCursor should come from top-most subTarget,\n // so we walk the array backwards\n this.targets.concat().reverse().map(function(_target){\n hoverCursor = _target.hoverCursor || hoverCursor;\n });\n }\n this.setCursor(hoverCursor);\n }\n else {\n this.setCursor(this.getCornerCursor(corner, target, e));\n }\n },\n\n /**\n * @private\n */\n getCornerCursor: function(corner, target, e) {\n var control = target.controls[corner];\n return control.cursorStyleHandler(e, control, target);\n }\n });\n})();\n\n\n(function() {\n\n var min = Math.min,\n max = Math.max;\n\n fabric.util.object.extend(fabric.Canvas.prototype, /** @lends fabric.Canvas.prototype */ {\n\n /**\n * @private\n * @param {Event} e Event object\n * @param {fabric.Object} target\n * @return {Boolean}\n */\n _shouldGroup: function(e, target) {\n var activeObject = this._activeObject;\n return activeObject && this._isSelectionKeyPressed(e) && target && target.selectable && this.selection &&\n (activeObject !== target || activeObject.type === 'activeSelection') && !target.onSelect({ e: e });\n },\n\n /**\n * @private\n * @param {Event} e Event object\n * @param {fabric.Object} target\n */\n _handleGrouping: function (e, target) {\n var activeObject = this._activeObject;\n // avoid multi select when shift click on a corner\n if (activeObject.__corner) {\n return;\n }\n if (target === activeObject) {\n // if it's a group, find target again, using activeGroup objects\n target = this.findTarget(e, true);\n // if even object is not found or we are on activeObjectCorner, bail out\n if (!target || !target.selectable) {\n return;\n }\n }\n if (activeObject && activeObject.type === 'activeSelection') {\n this._updateActiveSelection(target, e);\n }\n else {\n this._createActiveSelection(target, e);\n }\n },\n\n /**\n * @private\n */\n _updateActiveSelection: function(target, e) {\n var activeSelection = this._activeObject,\n currentActiveObjects = activeSelection._objects.slice(0);\n if (activeSelection.contains(target)) {\n activeSelection.removeWithUpdate(target);\n this._hoveredTarget = target;\n this._hoveredTargets = this.targets.concat();\n if (activeSelection.size() === 1) {\n // activate last remaining object\n this._setActiveObject(activeSelection.item(0), e);\n }\n }\n else {\n activeSelection.addWithUpdate(target);\n this._hoveredTarget = activeSelection;\n this._hoveredTargets = this.targets.concat();\n }\n this._fireSelectionEvents(currentActiveObjects, e);\n },\n\n /**\n * @private\n */\n _createActiveSelection: function(target, e) {\n var currentActives = this.getActiveObjects(), group = this._createGroup(target);\n this._hoveredTarget = group;\n // ISSUE 4115: should we consider subTargets here?\n // this._hoveredTargets = [];\n // this._hoveredTargets = this.targets.concat();\n this._setActiveObject(group, e);\n this._fireSelectionEvents(currentActives, e);\n },\n\n /**\n * @private\n * @param {Object} target\n */\n _createGroup: function(target) {\n var objects = this._objects,\n isActiveLower = objects.indexOf(this._activeObject) < objects.indexOf(target),\n groupObjects = isActiveLower\n ? [this._activeObject, target]\n : [target, this._activeObject];\n this._activeObject.isEditing && this._activeObject.exitEditing();\n return new fabric.ActiveSelection(groupObjects, {\n canvas: this\n });\n },\n\n /**\n * @private\n * @param {Event} e mouse event\n */\n _groupSelectedObjects: function (e) {\n\n var group = this._collectObjects(e),\n aGroup;\n\n // do not create group for 1 element only\n if (group.length === 1) {\n this.setActiveObject(group[0], e);\n }\n else if (group.length > 1) {\n aGroup = new fabric.ActiveSelection(group.reverse(), {\n canvas: this\n });\n this.setActiveObject(aGroup, e);\n }\n },\n\n /**\n * @private\n */\n _collectObjects: function(e) {\n var group = [],\n currentObject,\n x1 = this._groupSelector.ex,\n y1 = this._groupSelector.ey,\n x2 = x1 + this._groupSelector.left,\n y2 = y1 + this._groupSelector.top,\n selectionX1Y1 = new fabric.Point(min(x1, x2), min(y1, y2)),\n selectionX2Y2 = new fabric.Point(max(x1, x2), max(y1, y2)),\n allowIntersect = !this.selectionFullyContained,\n isClick = x1 === x2 && y1 === y2;\n // we iterate reverse order to collect top first in case of click.\n for (var i = this._objects.length; i--; ) {\n currentObject = this._objects[i];\n\n if (!currentObject || !currentObject.selectable || !currentObject.visible) {\n continue;\n }\n\n if ((allowIntersect && currentObject.intersectsWithRect(selectionX1Y1, selectionX2Y2, true)) ||\n currentObject.isContainedWithinRect(selectionX1Y1, selectionX2Y2, true) ||\n (allowIntersect && currentObject.containsPoint(selectionX1Y1, null, true)) ||\n (allowIntersect && currentObject.containsPoint(selectionX2Y2, null, true))\n ) {\n group.push(currentObject);\n // only add one object if it's a click\n if (isClick) {\n break;\n }\n }\n }\n\n if (group.length > 1) {\n group = group.filter(function(object) {\n return !object.onSelect({ e: e });\n });\n }\n\n return group;\n },\n\n /**\n * @private\n */\n _maybeGroupObjects: function(e) {\n if (this.selection && this._groupSelector) {\n this._groupSelectedObjects(e);\n }\n this.setCursor(this.defaultCursor);\n // clear selection and current transformation\n this._groupSelector = null;\n }\n });\n\n})();\n\n\n(function () {\n fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.StaticCanvas.prototype */ {\n\n /**\n * Exports canvas element to a dataurl image. Note that when multiplier is used, cropping is scaled appropriately\n * @param {Object} [options] Options object\n * @param {String} [options.format=png] The format of the output image. Either \"jpeg\" or \"png\"\n * @param {Number} [options.quality=1] Quality level (0..1). Only used for jpeg.\n * @param {Number} [options.multiplier=1] Multiplier to scale by, to have consistent\n * @param {Number} [options.left] Cropping left offset. Introduced in v1.2.14\n * @param {Number} [options.top] Cropping top offset. Introduced in v1.2.14\n * @param {Number} [options.width] Cropping width. Introduced in v1.2.14\n * @param {Number} [options.height] Cropping height. Introduced in v1.2.14\n * @param {Boolean} [options.enableRetinaScaling] Enable retina scaling for clone image. Introduce in 2.0.0\n * @return {String} Returns a data: URL containing a representation of the object in the format specified by options.format\n * @see {@link http://jsfiddle.net/fabricjs/NfZVb/|jsFiddle demo}\n * @example Generate jpeg dataURL with lower quality\n * var dataURL = canvas.toDataURL({\n * format: 'jpeg',\n * quality: 0.8\n * });\n * @example Generate cropped png dataURL (clipping of canvas)\n * var dataURL = canvas.toDataURL({\n * format: 'png',\n * left: 100,\n * top: 100,\n * width: 200,\n * height: 200\n * });\n * @example Generate double scaled png dataURL\n * var dataURL = canvas.toDataURL({\n * format: 'png',\n * multiplier: 2\n * });\n */\n toDataURL: function (options) {\n options || (options = { });\n\n var format = options.format || 'png',\n quality = options.quality || 1,\n multiplier = (options.multiplier || 1) * (options.enableRetinaScaling ? this.getRetinaScaling() : 1),\n canvasEl = this.toCanvasElement(multiplier, options);\n return fabric.util.toDataURL(canvasEl, format, quality);\n },\n\n /**\n * Create a new HTMLCanvas element painted with the current canvas content.\n * No need to resize the actual one or repaint it.\n * Will transfer object ownership to a new canvas, paint it, and set everything back.\n * This is an intermediary step used to get to a dataUrl but also it is useful to\n * create quick image copies of a canvas without passing for the dataUrl string\n * @param {Number} [multiplier] a zoom factor.\n * @param {Object} [cropping] Cropping informations\n * @param {Number} [cropping.left] Cropping left offset.\n * @param {Number} [cropping.top] Cropping top offset.\n * @param {Number} [cropping.width] Cropping width.\n * @param {Number} [cropping.height] Cropping height.\n */\n toCanvasElement: function(multiplier, cropping) {\n multiplier = multiplier || 1;\n cropping = cropping || { };\n var scaledWidth = (cropping.width || this.width) * multiplier,\n scaledHeight = (cropping.height || this.height) * multiplier,\n zoom = this.getZoom(),\n originalWidth = this.width,\n originalHeight = this.height,\n newZoom = zoom * multiplier,\n vp = this.viewportTransform,\n translateX = (vp[4] - (cropping.left || 0)) * multiplier,\n translateY = (vp[5] - (cropping.top || 0)) * multiplier,\n originalInteractive = this.interactive,\n newVp = [newZoom, 0, 0, newZoom, translateX, translateY],\n originalRetina = this.enableRetinaScaling,\n canvasEl = fabric.util.createCanvasElement(),\n originalContextTop = this.contextTop;\n canvasEl.width = scaledWidth;\n canvasEl.height = scaledHeight;\n this.contextTop = null;\n this.enableRetinaScaling = false;\n this.interactive = false;\n this.viewportTransform = newVp;\n this.width = scaledWidth;\n this.height = scaledHeight;\n this.calcViewportBoundaries();\n this.renderCanvas(canvasEl.getContext('2d'), this._objects);\n this.viewportTransform = vp;\n this.width = originalWidth;\n this.height = originalHeight;\n this.calcViewportBoundaries();\n this.interactive = originalInteractive;\n this.enableRetinaScaling = originalRetina;\n this.contextTop = originalContextTop;\n return canvasEl;\n },\n });\n\n})();\n\n\nfabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.StaticCanvas.prototype */ {\n /**\n * Populates canvas with data from the specified JSON.\n * JSON format must conform to the one of {@link fabric.Canvas#toJSON}\n * @param {String|Object} json JSON string or object\n * @param {Function} callback Callback, invoked when json is parsed\n * and corresponding objects (e.g: {@link fabric.Image})\n * are initialized\n * @param {Function} [reviver] Method for further parsing of JSON elements, called after each fabric object created.\n * @return {fabric.Canvas} instance\n * @chainable\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-3#deserialization}\n * @see {@link http://jsfiddle.net/fabricjs/fmgXt/|jsFiddle demo}\n * @example loadFromJSON\n * canvas.loadFromJSON(json, canvas.renderAll.bind(canvas));\n * @example loadFromJSON with reviver\n * canvas.loadFromJSON(json, canvas.renderAll.bind(canvas), function(o, object) {\n * // `o` = json object\n * // `object` = fabric.Object instance\n * // ... do some stuff ...\n * });\n */\n loadFromJSON: function (json, callback, reviver) {\n if (!json) {\n return;\n }\n\n // serialize if it wasn't already\n var serialized = (typeof json === 'string')\n ? JSON.parse(json)\n : fabric.util.object.clone(json);\n\n var _this = this,\n clipPath = serialized.clipPath,\n renderOnAddRemove = this.renderOnAddRemove;\n\n this.renderOnAddRemove = false;\n\n delete serialized.clipPath;\n\n this._enlivenObjects(serialized.objects, function (enlivenedObjects) {\n _this.clear();\n _this._setBgOverlay(serialized, function () {\n if (clipPath) {\n _this._enlivenObjects([clipPath], function (enlivenedCanvasClip) {\n _this.clipPath = enlivenedCanvasClip[0];\n _this.__setupCanvas.call(_this, serialized, enlivenedObjects, renderOnAddRemove, callback);\n });\n }\n else {\n _this.__setupCanvas.call(_this, serialized, enlivenedObjects, renderOnAddRemove, callback);\n }\n });\n }, reviver);\n return this;\n },\n\n /**\n * @private\n * @param {Object} serialized Object with background and overlay information\n * @param {Array} restored canvas objects\n * @param {Function} cached renderOnAddRemove callback\n * @param {Function} callback Invoked after all background and overlay images/patterns loaded\n */\n __setupCanvas: function(serialized, enlivenedObjects, renderOnAddRemove, callback) {\n var _this = this;\n enlivenedObjects.forEach(function(obj, index) {\n // we splice the array just in case some custom classes restored from JSON\n // will add more object to canvas at canvas init.\n _this.insertAt(obj, index);\n });\n this.renderOnAddRemove = renderOnAddRemove;\n // remove parts i cannot set as options\n delete serialized.objects;\n delete serialized.backgroundImage;\n delete serialized.overlayImage;\n delete serialized.background;\n delete serialized.overlay;\n // this._initOptions does too many things to just\n // call it. Normally loading an Object from JSON\n // create the Object instance. Here the Canvas is\n // already an instance and we are just loading things over it\n this._setOptions(serialized);\n this.renderAll();\n callback && callback();\n },\n\n /**\n * @private\n * @param {Object} serialized Object with background and overlay information\n * @param {Function} callback Invoked after all background and overlay images/patterns loaded\n */\n _setBgOverlay: function(serialized, callback) {\n var loaded = {\n backgroundColor: false,\n overlayColor: false,\n backgroundImage: false,\n overlayImage: false\n };\n\n if (!serialized.backgroundImage && !serialized.overlayImage && !serialized.background && !serialized.overlay) {\n callback && callback();\n return;\n }\n\n var cbIfLoaded = function () {\n if (loaded.backgroundImage && loaded.overlayImage && loaded.backgroundColor && loaded.overlayColor) {\n callback && callback();\n }\n };\n\n this.__setBgOverlay('backgroundImage', serialized.backgroundImage, loaded, cbIfLoaded);\n this.__setBgOverlay('overlayImage', serialized.overlayImage, loaded, cbIfLoaded);\n this.__setBgOverlay('backgroundColor', serialized.background, loaded, cbIfLoaded);\n this.__setBgOverlay('overlayColor', serialized.overlay, loaded, cbIfLoaded);\n },\n\n /**\n * @private\n * @param {String} property Property to set (backgroundImage, overlayImage, backgroundColor, overlayColor)\n * @param {(Object|String)} value Value to set\n * @param {Object} loaded Set loaded property to true if property is set\n * @param {Object} callback Callback function to invoke after property is set\n */\n __setBgOverlay: function(property, value, loaded, callback) {\n var _this = this;\n\n if (!value) {\n loaded[property] = true;\n callback && callback();\n return;\n }\n\n if (property === 'backgroundImage' || property === 'overlayImage') {\n fabric.util.enlivenObjects([value], function(enlivedObject){\n _this[property] = enlivedObject[0];\n loaded[property] = true;\n callback && callback();\n });\n }\n else {\n this['set' + fabric.util.string.capitalize(property, true)](value, function() {\n loaded[property] = true;\n callback && callback();\n });\n }\n },\n\n /**\n * @private\n * @param {Array} objects\n * @param {Function} callback\n * @param {Function} [reviver]\n */\n _enlivenObjects: function (objects, callback, reviver) {\n if (!objects || objects.length === 0) {\n callback && callback([]);\n return;\n }\n\n fabric.util.enlivenObjects(objects, function(enlivenedObjects) {\n callback && callback(enlivenedObjects);\n }, null, reviver);\n },\n\n /**\n * @private\n * @param {String} format\n * @param {Function} callback\n */\n _toDataURL: function (format, callback) {\n this.clone(function (clone) {\n callback(clone.toDataURL(format));\n });\n },\n\n /**\n * @private\n * @param {String} format\n * @param {Number} multiplier\n * @param {Function} callback\n */\n _toDataURLWithMultiplier: function (format, multiplier, callback) {\n this.clone(function (clone) {\n callback(clone.toDataURLWithMultiplier(format, multiplier));\n });\n },\n\n /**\n * Clones canvas instance\n * @param {Object} [callback] Receives cloned instance as a first argument\n * @param {Array} [properties] Array of properties to include in the cloned canvas and children\n */\n clone: function (callback, properties) {\n var data = JSON.stringify(this.toJSON(properties));\n this.cloneWithoutData(function(clone) {\n clone.loadFromJSON(data, function() {\n callback && callback(clone);\n });\n });\n },\n\n /**\n * Clones canvas instance without cloning existing data.\n * This essentially copies canvas dimensions, clipping properties, etc.\n * but leaves data empty (so that you can populate it with your own)\n * @param {Object} [callback] Receives cloned instance as a first argument\n */\n cloneWithoutData: function(callback) {\n var el = fabric.util.createCanvasElement();\n\n el.width = this.width;\n el.height = this.height;\n\n var clone = new fabric.Canvas(el);\n if (this.backgroundImage) {\n clone.setBackgroundImage(this.backgroundImage.src, function() {\n clone.renderAll();\n callback && callback(clone);\n });\n clone.backgroundImageOpacity = this.backgroundImageOpacity;\n clone.backgroundImageStretch = this.backgroundImageStretch;\n }\n else {\n callback && callback(clone);\n }\n }\n});\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n extend = fabric.util.object.extend,\n clone = fabric.util.object.clone,\n toFixed = fabric.util.toFixed,\n capitalize = fabric.util.string.capitalize,\n degreesToRadians = fabric.util.degreesToRadians,\n objectCaching = !fabric.isLikelyNode,\n ALIASING_LIMIT = 2;\n\n if (fabric.Object) {\n return;\n }\n\n /**\n * Root object class from which all 2d shape classes inherit from\n * @class fabric.Object\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-1#objects}\n * @see {@link fabric.Object#initialize} for constructor definition\n *\n * @fires added\n * @fires removed\n *\n * @fires selected\n * @fires deselected\n * @fires modified\n * @fires modified\n * @fires moved\n * @fires scaled\n * @fires rotated\n * @fires skewed\n *\n * @fires rotating\n * @fires scaling\n * @fires moving\n * @fires skewing\n *\n * @fires mousedown\n * @fires mouseup\n * @fires mouseover\n * @fires mouseout\n * @fires mousewheel\n * @fires mousedblclick\n *\n * @fires dragover\n * @fires dragenter\n * @fires dragleave\n * @fires drop\n */\n fabric.Object = fabric.util.createClass(fabric.CommonMethods, /** @lends fabric.Object.prototype */ {\n\n /**\n * Type of an object (rect, circle, path, etc.).\n * Note that this property is meant to be read-only and not meant to be modified.\n * If you modify, certain parts of Fabric (such as JSON loading) won't work correctly.\n * @type String\n * @default\n */\n type: 'object',\n\n /**\n * Horizontal origin of transformation of an object (one of \"left\", \"right\", \"center\")\n * See http://jsfiddle.net/1ow02gea/244/ on how originX/originY affect objects in groups\n * @type String\n * @default\n */\n originX: 'left',\n\n /**\n * Vertical origin of transformation of an object (one of \"top\", \"bottom\", \"center\")\n * See http://jsfiddle.net/1ow02gea/244/ on how originX/originY affect objects in groups\n * @type String\n * @default\n */\n originY: 'top',\n\n /**\n * Top position of an object. Note that by default it's relative to object top. You can change this by setting originY={top/center/bottom}\n * @type Number\n * @default\n */\n top: 0,\n\n /**\n * Left position of an object. Note that by default it's relative to object left. You can change this by setting originX={left/center/right}\n * @type Number\n * @default\n */\n left: 0,\n\n /**\n * Object width\n * @type Number\n * @default\n */\n width: 0,\n\n /**\n * Object height\n * @type Number\n * @default\n */\n height: 0,\n\n /**\n * Object scale factor (horizontal)\n * @type Number\n * @default\n */\n scaleX: 1,\n\n /**\n * Object scale factor (vertical)\n * @type Number\n * @default\n */\n scaleY: 1,\n\n /**\n * When true, an object is rendered as flipped horizontally\n * @type Boolean\n * @default\n */\n flipX: false,\n\n /**\n * When true, an object is rendered as flipped vertically\n * @type Boolean\n * @default\n */\n flipY: false,\n\n /**\n * Opacity of an object\n * @type Number\n * @default\n */\n opacity: 1,\n\n /**\n * Angle of rotation of an object (in degrees)\n * @type Number\n * @default\n */\n angle: 0,\n\n /**\n * Angle of skew on x axes of an object (in degrees)\n * @type Number\n * @default\n */\n skewX: 0,\n\n /**\n * Angle of skew on y axes of an object (in degrees)\n * @type Number\n * @default\n */\n skewY: 0,\n\n /**\n * Size of object's controlling corners (in pixels)\n * @type Number\n * @default\n */\n cornerSize: 13,\n\n /**\n * Size of object's controlling corners when touch interaction is detected\n * @type Number\n * @default\n */\n touchCornerSize: 24,\n\n /**\n * When true, object's controlling corners are rendered as transparent inside (i.e. stroke instead of fill)\n * @type Boolean\n * @default\n */\n transparentCorners: true,\n\n /**\n * Default cursor value used when hovering over this object on canvas\n * @type String\n * @default\n */\n hoverCursor: null,\n\n /**\n * Default cursor value used when moving this object on canvas\n * @type String\n * @default\n */\n moveCursor: null,\n\n /**\n * Padding between object and its controlling borders (in pixels)\n * @type Number\n * @default\n */\n padding: 0,\n\n /**\n * Color of controlling borders of an object (when it's active)\n * @type String\n * @default\n */\n borderColor: 'rgb(178,204,255)',\n\n /**\n * Array specifying dash pattern of an object's borders (hasBorder must be true)\n * @since 1.6.2\n * @type Array\n */\n borderDashArray: null,\n\n /**\n * Color of controlling corners of an object (when it's active)\n * @type String\n * @default\n */\n cornerColor: 'rgb(178,204,255)',\n\n /**\n * Color of controlling corners of an object (when it's active and transparentCorners false)\n * @since 1.6.2\n * @type String\n * @default\n */\n cornerStrokeColor: null,\n\n /**\n * Specify style of control, 'rect' or 'circle'\n * @since 1.6.2\n * @type String\n */\n cornerStyle: 'rect',\n\n /**\n * Array specifying dash pattern of an object's control (hasBorder must be true)\n * @since 1.6.2\n * @type Array\n */\n cornerDashArray: null,\n\n /**\n * When true, this object will use center point as the origin of transformation\n * when being scaled via the controls.\n * Backwards incompatibility note: This property replaces \"centerTransform\" (Boolean).\n * @since 1.3.4\n * @type Boolean\n * @default\n */\n centeredScaling: false,\n\n /**\n * When true, this object will use center point as the origin of transformation\n * when being rotated via the controls.\n * Backwards incompatibility note: This property replaces \"centerTransform\" (Boolean).\n * @since 1.3.4\n * @type Boolean\n * @default\n */\n centeredRotation: true,\n\n /**\n * Color of object's fill\n * takes css colors https://www.w3.org/TR/css-color-3/\n * @type String\n * @default\n */\n fill: 'rgb(0,0,0)',\n\n /**\n * Fill rule used to fill an object\n * accepted values are nonzero, evenodd\n * Backwards incompatibility note: This property was used for setting globalCompositeOperation until v1.4.12 (use `fabric.Object#globalCompositeOperation` instead)\n * @type String\n * @default\n */\n fillRule: 'nonzero',\n\n /**\n * Composite rule used for canvas globalCompositeOperation\n * @type String\n * @default\n */\n globalCompositeOperation: 'source-over',\n\n /**\n * Background color of an object.\n * takes css colors https://www.w3.org/TR/css-color-3/\n * @type String\n * @default\n */\n backgroundColor: '',\n\n /**\n * Selection Background color of an object. colored layer behind the object when it is active.\n * does not mix good with globalCompositeOperation methods.\n * @type String\n * @default\n */\n selectionBackgroundColor: '',\n\n /**\n * When defined, an object is rendered via stroke and this property specifies its color\n * takes css colors https://www.w3.org/TR/css-color-3/\n * @type String\n * @default\n */\n stroke: null,\n\n /**\n * Width of a stroke used to render this object\n * @type Number\n * @default\n */\n strokeWidth: 1,\n\n /**\n * Array specifying dash pattern of an object's stroke (stroke must be defined)\n * @type Array\n */\n strokeDashArray: null,\n\n /**\n * Line offset of an object's stroke\n * @type Number\n * @default\n */\n strokeDashOffset: 0,\n\n /**\n * Line endings style of an object's stroke (one of \"butt\", \"round\", \"square\")\n * @type String\n * @default\n */\n strokeLineCap: 'butt',\n\n /**\n * Corner style of an object's stroke (one of \"bevel\", \"round\", \"miter\")\n * @type String\n * @default\n */\n strokeLineJoin: 'miter',\n\n /**\n * Maximum miter length (used for strokeLineJoin = \"miter\") of an object's stroke\n * @type Number\n * @default\n */\n strokeMiterLimit: 4,\n\n /**\n * Shadow object representing shadow of this shape\n * @type fabric.Shadow\n * @default\n */\n shadow: null,\n\n /**\n * Opacity of object's controlling borders when object is active and moving\n * @type Number\n * @default\n */\n borderOpacityWhenMoving: 0.4,\n\n /**\n * Scale factor of object's controlling borders\n * bigger number will make a thicker border\n * border is 1, so this is basically a border thickness\n * since there is no way to change the border itself.\n * @type Number\n * @default\n */\n borderScaleFactor: 1,\n\n /**\n * Minimum allowed scale value of an object\n * @type Number\n * @default\n */\n minScaleLimit: 0,\n\n /**\n * When set to `false`, an object can not be selected for modification (using either point-click-based or group-based selection).\n * But events still fire on it.\n * @type Boolean\n * @default\n */\n selectable: true,\n\n /**\n * When set to `false`, an object can not be a target of events. All events propagate through it. Introduced in v1.3.4\n * @type Boolean\n * @default\n */\n evented: true,\n\n /**\n * When set to `false`, an object is not rendered on canvas\n * @type Boolean\n * @default\n */\n visible: true,\n\n /**\n * When set to `false`, object's controls are not displayed and can not be used to manipulate object\n * @type Boolean\n * @default\n */\n hasControls: true,\n\n /**\n * When set to `false`, object's controlling borders are not rendered\n * @type Boolean\n * @default\n */\n hasBorders: true,\n\n /**\n * When set to `true`, objects are \"found\" on canvas on per-pixel basis rather than according to bounding box\n * @type Boolean\n * @default\n */\n perPixelTargetFind: false,\n\n /**\n * When `false`, default object's values are not included in its serialization\n * @type Boolean\n * @default\n */\n includeDefaultValues: true,\n\n /**\n * When `true`, object horizontal movement is locked\n * @type Boolean\n * @default\n */\n lockMovementX: false,\n\n /**\n * When `true`, object vertical movement is locked\n * @type Boolean\n * @default\n */\n lockMovementY: false,\n\n /**\n * When `true`, object rotation is locked\n * @type Boolean\n * @default\n */\n lockRotation: false,\n\n /**\n * When `true`, object horizontal scaling is locked\n * @type Boolean\n * @default\n */\n lockScalingX: false,\n\n /**\n * When `true`, object vertical scaling is locked\n * @type Boolean\n * @default\n */\n lockScalingY: false,\n\n /**\n * When `true`, object horizontal skewing is locked\n * @type Boolean\n * @default\n */\n lockSkewingX: false,\n\n /**\n * When `true`, object vertical skewing is locked\n * @type Boolean\n * @default\n */\n lockSkewingY: false,\n\n /**\n * When `true`, object cannot be flipped by scaling into negative values\n * @type Boolean\n * @default\n */\n lockScalingFlip: false,\n\n /**\n * When `true`, object is not exported in OBJECT/JSON\n * @since 1.6.3\n * @type Boolean\n * @default\n */\n excludeFromExport: false,\n\n /**\n * When `true`, object is cached on an additional canvas.\n * When `false`, object is not cached unless necessary ( clipPath )\n * default to true\n * @since 1.7.0\n * @type Boolean\n * @default true\n */\n objectCaching: objectCaching,\n\n /**\n * When `true`, object properties are checked for cache invalidation. In some particular\n * situation you may want this to be disabled ( spray brush, very big, groups)\n * or if your application does not allow you to modify properties for groups child you want\n * to disable it for groups.\n * default to false\n * since 1.7.0\n * @type Boolean\n * @default false\n */\n statefullCache: false,\n\n /**\n * When `true`, cache does not get updated during scaling. The picture will get blocky if scaled\n * too much and will be redrawn with correct details at the end of scaling.\n * this setting is performance and application dependant.\n * default to true\n * since 1.7.0\n * @type Boolean\n * @default true\n */\n noScaleCache: true,\n\n /**\n * When `false`, the stoke width will scale with the object.\n * When `true`, the stroke will always match the exact pixel size entered for stroke width.\n * default to false\n * @since 2.6.0\n * @type Boolean\n * @default false\n * @type Boolean\n * @default false\n */\n strokeUniform: false,\n\n /**\n * When set to `true`, object's cache will be rerendered next render call.\n * since 1.7.0\n * @type Boolean\n * @default true\n */\n dirty: true,\n\n /**\n * keeps the value of the last hovered corner during mouse move.\n * 0 is no corner, or 'mt', 'ml', 'mtr' etc..\n * It should be private, but there is no harm in using it as\n * a read-only property.\n * @type number|string|any\n * @default 0\n */\n __corner: 0,\n\n /**\n * Determines if the fill or the stroke is drawn first (one of \"fill\" or \"stroke\")\n * @type String\n * @default\n */\n paintFirst: 'fill',\n\n /**\n * When 'down', object is set to active on mousedown/touchstart\n * When 'up', object is set to active on mouseup/touchend\n * Experimental. Let's see if this breaks anything before supporting officially\n * @private\n * since 4.4.0\n * @type String\n * @default 'down'\n */\n activeOn: 'down',\n\n /**\n * List of properties to consider when checking if state\n * of an object is changed (fabric.Object#hasStateChanged)\n * as well as for history (undo/redo) purposes\n * @type Array\n */\n stateProperties: (\n 'top left width height scaleX scaleY flipX flipY originX originY transformMatrix ' +\n 'stroke strokeWidth strokeDashArray strokeLineCap strokeDashOffset strokeLineJoin strokeMiterLimit ' +\n 'angle opacity fill globalCompositeOperation shadow visible backgroundColor ' +\n 'skewX skewY fillRule paintFirst clipPath strokeUniform'\n ).split(' '),\n\n /**\n * List of properties to consider when checking if cache needs refresh\n * Those properties are checked by statefullCache ON ( or lazy mode if we want ) or from single\n * calls to Object.set(key, value). If the key is in this list, the object is marked as dirty\n * and refreshed at the next render\n * @type Array\n */\n cacheProperties: (\n 'fill stroke strokeWidth strokeDashArray width height paintFirst strokeUniform' +\n ' strokeLineCap strokeDashOffset strokeLineJoin strokeMiterLimit backgroundColor clipPath'\n ).split(' '),\n\n /**\n * List of properties to consider for animating colors.\n * @type Array\n */\n colorProperties: (\n 'fill stroke backgroundColor'\n ).split(' '),\n\n /**\n * a fabricObject that, without stroke define a clipping area with their shape. filled in black\n * the clipPath object gets used when the object has rendered, and the context is placed in the center\n * of the object cacheCanvas.\n * If you want 0,0 of a clipPath to align with an object center, use clipPath.originX/Y to 'center'\n * @type fabric.Object\n */\n clipPath: undefined,\n\n /**\n * Meaningful ONLY when the object is used as clipPath.\n * if true, the clipPath will make the object clip to the outside of the clipPath\n * since 2.4.0\n * @type boolean\n * @default false\n */\n inverted: false,\n\n /**\n * Meaningful ONLY when the object is used as clipPath.\n * if true, the clipPath will have its top and left relative to canvas, and will\n * not be influenced by the object transform. This will make the clipPath relative\n * to the canvas, but clipping just a particular object.\n * WARNING this is beta, this feature may change or be renamed.\n * since 2.4.0\n * @type boolean\n * @default false\n */\n absolutePositioned: false,\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n */\n initialize: function(options) {\n if (options) {\n this.setOptions(options);\n }\n },\n\n /**\n * Create a the canvas used to keep the cached copy of the object\n * @private\n */\n _createCacheCanvas: function() {\n this._cacheProperties = {};\n this._cacheCanvas = fabric.util.createCanvasElement();\n this._cacheContext = this._cacheCanvas.getContext('2d');\n this._updateCacheCanvas();\n // if canvas gets created, is empty, so dirty.\n this.dirty = true;\n },\n\n /**\n * Limit the cache dimensions so that X * Y do not cross fabric.perfLimitSizeTotal\n * and each side do not cross fabric.cacheSideLimit\n * those numbers are configurable so that you can get as much detail as you want\n * making bargain with performances.\n * @param {Object} dims\n * @param {Object} dims.width width of canvas\n * @param {Object} dims.height height of canvas\n * @param {Object} dims.zoomX zoomX zoom value to unscale the canvas before drawing cache\n * @param {Object} dims.zoomY zoomY zoom value to unscale the canvas before drawing cache\n * @return {Object}.width width of canvas\n * @return {Object}.height height of canvas\n * @return {Object}.zoomX zoomX zoom value to unscale the canvas before drawing cache\n * @return {Object}.zoomY zoomY zoom value to unscale the canvas before drawing cache\n */\n _limitCacheSize: function(dims) {\n var perfLimitSizeTotal = fabric.perfLimitSizeTotal,\n width = dims.width, height = dims.height,\n max = fabric.maxCacheSideLimit, min = fabric.minCacheSideLimit;\n if (width <= max && height <= max && width * height <= perfLimitSizeTotal) {\n if (width < min) {\n dims.width = min;\n }\n if (height < min) {\n dims.height = min;\n }\n return dims;\n }\n var ar = width / height, limitedDims = fabric.util.limitDimsByArea(ar, perfLimitSizeTotal),\n capValue = fabric.util.capValue,\n x = capValue(min, limitedDims.x, max),\n y = capValue(min, limitedDims.y, max);\n if (width > x) {\n dims.zoomX /= width / x;\n dims.width = x;\n dims.capped = true;\n }\n if (height > y) {\n dims.zoomY /= height / y;\n dims.height = y;\n dims.capped = true;\n }\n return dims;\n },\n\n /**\n * Return the dimension and the zoom level needed to create a cache canvas\n * big enough to host the object to be cached.\n * @private\n * @return {Object}.x width of object to be cached\n * @return {Object}.y height of object to be cached\n * @return {Object}.width width of canvas\n * @return {Object}.height height of canvas\n * @return {Object}.zoomX zoomX zoom value to unscale the canvas before drawing cache\n * @return {Object}.zoomY zoomY zoom value to unscale the canvas before drawing cache\n */\n _getCacheCanvasDimensions: function() {\n var objectScale = this.getTotalObjectScaling(),\n // caculate dimensions without skewing\n dim = this._getTransformedDimensions(0, 0),\n neededX = dim.x * objectScale.scaleX / this.scaleX,\n neededY = dim.y * objectScale.scaleY / this.scaleY;\n return {\n // for sure this ALIASING_LIMIT is slightly creating problem\n // in situation in which the cache canvas gets an upper limit\n // also objectScale contains already scaleX and scaleY\n width: neededX + ALIASING_LIMIT,\n height: neededY + ALIASING_LIMIT,\n zoomX: objectScale.scaleX,\n zoomY: objectScale.scaleY,\n x: neededX,\n y: neededY\n };\n },\n\n /**\n * Update width and height of the canvas for cache\n * returns true or false if canvas needed resize.\n * @private\n * @return {Boolean} true if the canvas has been resized\n */\n _updateCacheCanvas: function() {\n var targetCanvas = this.canvas;\n if (this.noScaleCache && targetCanvas && targetCanvas._currentTransform) {\n var target = targetCanvas._currentTransform.target,\n action = targetCanvas._currentTransform.action;\n if (this === target && action.slice && action.slice(0, 5) === 'scale') {\n return false;\n }\n }\n var canvas = this._cacheCanvas,\n dims = this._limitCacheSize(this._getCacheCanvasDimensions()),\n minCacheSize = fabric.minCacheSideLimit,\n width = dims.width, height = dims.height, drawingWidth, drawingHeight,\n zoomX = dims.zoomX, zoomY = dims.zoomY,\n dimensionsChanged = width !== this.cacheWidth || height !== this.cacheHeight,\n zoomChanged = this.zoomX !== zoomX || this.zoomY !== zoomY,\n shouldRedraw = dimensionsChanged || zoomChanged,\n additionalWidth = 0, additionalHeight = 0, shouldResizeCanvas = false;\n if (dimensionsChanged) {\n var canvasWidth = this._cacheCanvas.width,\n canvasHeight = this._cacheCanvas.height,\n sizeGrowing = width > canvasWidth || height > canvasHeight,\n sizeShrinking = (width < canvasWidth * 0.9 || height < canvasHeight * 0.9) &&\n canvasWidth > minCacheSize && canvasHeight > minCacheSize;\n shouldResizeCanvas = sizeGrowing || sizeShrinking;\n if (sizeGrowing && !dims.capped && (width > minCacheSize || height > minCacheSize)) {\n additionalWidth = width * 0.1;\n additionalHeight = height * 0.1;\n }\n }\n if (this instanceof fabric.Text && this.path) {\n shouldRedraw = true;\n shouldResizeCanvas = true;\n additionalWidth += this.getHeightOfLine(0) * this.zoomX;\n additionalHeight += this.getHeightOfLine(0) * this.zoomY;\n }\n if (shouldRedraw) {\n if (shouldResizeCanvas) {\n canvas.width = Math.ceil(width + additionalWidth);\n canvas.height = Math.ceil(height + additionalHeight);\n }\n else {\n this._cacheContext.setTransform(1, 0, 0, 1, 0, 0);\n this._cacheContext.clearRect(0, 0, canvas.width, canvas.height);\n }\n drawingWidth = dims.x / 2;\n drawingHeight = dims.y / 2;\n this.cacheTranslationX = Math.round(canvas.width / 2 - drawingWidth) + drawingWidth;\n this.cacheTranslationY = Math.round(canvas.height / 2 - drawingHeight) + drawingHeight;\n this.cacheWidth = width;\n this.cacheHeight = height;\n this._cacheContext.translate(this.cacheTranslationX, this.cacheTranslationY);\n this._cacheContext.scale(zoomX, zoomY);\n this.zoomX = zoomX;\n this.zoomY = zoomY;\n return true;\n }\n return false;\n },\n\n /**\n * Sets object's properties from options\n * @param {Object} [options] Options object\n */\n setOptions: function(options) {\n this._setOptions(options);\n this._initGradient(options.fill, 'fill');\n this._initGradient(options.stroke, 'stroke');\n this._initPattern(options.fill, 'fill');\n this._initPattern(options.stroke, 'stroke');\n },\n\n /**\n * Transforms context when rendering an object\n * @param {CanvasRenderingContext2D} ctx Context\n */\n transform: function(ctx) {\n var needFullTransform = (this.group && !this.group._transformDone) ||\n (this.group && this.canvas && ctx === this.canvas.contextTop);\n var m = this.calcTransformMatrix(!needFullTransform);\n ctx.transform(m[0], m[1], m[2], m[3], m[4], m[5]);\n },\n\n /**\n * Returns an object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} Object representation of an instance\n */\n toObject: function(propertiesToInclude) {\n var NUM_FRACTION_DIGITS = fabric.Object.NUM_FRACTION_DIGITS,\n\n object = {\n type: this.type,\n version: fabric.version,\n originX: this.originX,\n originY: this.originY,\n left: toFixed(this.left, NUM_FRACTION_DIGITS),\n top: toFixed(this.top, NUM_FRACTION_DIGITS),\n width: toFixed(this.width, NUM_FRACTION_DIGITS),\n height: toFixed(this.height, NUM_FRACTION_DIGITS),\n fill: (this.fill && this.fill.toObject) ? this.fill.toObject() : this.fill,\n stroke: (this.stroke && this.stroke.toObject) ? this.stroke.toObject() : this.stroke,\n strokeWidth: toFixed(this.strokeWidth, NUM_FRACTION_DIGITS),\n strokeDashArray: this.strokeDashArray ? this.strokeDashArray.concat() : this.strokeDashArray,\n strokeLineCap: this.strokeLineCap,\n strokeDashOffset: this.strokeDashOffset,\n strokeLineJoin: this.strokeLineJoin,\n strokeUniform: this.strokeUniform,\n strokeMiterLimit: toFixed(this.strokeMiterLimit, NUM_FRACTION_DIGITS),\n scaleX: toFixed(this.scaleX, NUM_FRACTION_DIGITS),\n scaleY: toFixed(this.scaleY, NUM_FRACTION_DIGITS),\n angle: toFixed(this.angle, NUM_FRACTION_DIGITS),\n flipX: this.flipX,\n flipY: this.flipY,\n opacity: toFixed(this.opacity, NUM_FRACTION_DIGITS),\n shadow: (this.shadow && this.shadow.toObject) ? this.shadow.toObject() : this.shadow,\n visible: this.visible,\n backgroundColor: this.backgroundColor,\n fillRule: this.fillRule,\n paintFirst: this.paintFirst,\n globalCompositeOperation: this.globalCompositeOperation,\n skewX: toFixed(this.skewX, NUM_FRACTION_DIGITS),\n skewY: toFixed(this.skewY, NUM_FRACTION_DIGITS),\n };\n\n if (this.clipPath && !this.clipPath.excludeFromExport) {\n object.clipPath = this.clipPath.toObject(propertiesToInclude);\n object.clipPath.inverted = this.clipPath.inverted;\n object.clipPath.absolutePositioned = this.clipPath.absolutePositioned;\n }\n\n fabric.util.populateWithProperties(this, object, propertiesToInclude);\n if (!this.includeDefaultValues) {\n object = this._removeDefaultValues(object);\n }\n\n return object;\n },\n\n /**\n * Returns (dataless) object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} Object representation of an instance\n */\n toDatalessObject: function(propertiesToInclude) {\n // will be overwritten by subclasses\n return this.toObject(propertiesToInclude);\n },\n\n /**\n * @private\n * @param {Object} object\n */\n _removeDefaultValues: function(object) {\n var prototype = fabric.util.getKlass(object.type).prototype,\n stateProperties = prototype.stateProperties;\n stateProperties.forEach(function(prop) {\n if (prop === 'left' || prop === 'top') {\n return;\n }\n if (object[prop] === prototype[prop]) {\n delete object[prop];\n }\n var isArray = Object.prototype.toString.call(object[prop]) === '[object Array]' &&\n Object.prototype.toString.call(prototype[prop]) === '[object Array]';\n\n // basically a check for [] === []\n if (isArray && object[prop].length === 0 && prototype[prop].length === 0) {\n delete object[prop];\n }\n });\n\n return object;\n },\n\n /**\n * Returns a string representation of an instance\n * @return {String}\n */\n toString: function() {\n return '#';\n },\n\n /**\n * Return the object scale factor counting also the group scaling\n * @return {Object} object with scaleX and scaleY properties\n */\n getObjectScaling: function() {\n // if the object is a top level one, on the canvas, we go for simple aritmetic\n // otherwise the complex method with angles will return approximations and decimals\n // and will likely kill the cache when not needed\n // https://github.com/fabricjs/fabric.js/issues/7157\n if (!this.group) {\n return {\n scaleX: this.scaleX,\n scaleY: this.scaleY,\n };\n }\n // if we are inside a group total zoom calculation is complex, we defer to generic matrices\n var options = fabric.util.qrDecompose(this.calcTransformMatrix());\n return { scaleX: Math.abs(options.scaleX), scaleY: Math.abs(options.scaleY) };\n },\n\n /**\n * Return the object scale factor counting also the group scaling, zoom and retina\n * @return {Object} object with scaleX and scaleY properties\n */\n getTotalObjectScaling: function() {\n var scale = this.getObjectScaling(), scaleX = scale.scaleX, scaleY = scale.scaleY;\n if (this.canvas) {\n var zoom = this.canvas.getZoom();\n var retina = this.canvas.getRetinaScaling();\n scaleX *= zoom * retina;\n scaleY *= zoom * retina;\n }\n return { scaleX: scaleX, scaleY: scaleY };\n },\n\n /**\n * Return the object opacity counting also the group property\n * @return {Number}\n */\n getObjectOpacity: function() {\n var opacity = this.opacity;\n if (this.group) {\n opacity *= this.group.getObjectOpacity();\n }\n return opacity;\n },\n\n /**\n * @private\n * @param {String} key\n * @param {*} value\n * @return {fabric.Object} thisArg\n */\n _set: function(key, value) {\n var shouldConstrainValue = (key === 'scaleX' || key === 'scaleY'),\n isChanged = this[key] !== value, groupNeedsUpdate = false;\n\n if (shouldConstrainValue) {\n value = this._constrainScale(value);\n }\n if (key === 'scaleX' && value < 0) {\n this.flipX = !this.flipX;\n value *= -1;\n }\n else if (key === 'scaleY' && value < 0) {\n this.flipY = !this.flipY;\n value *= -1;\n }\n else if (key === 'shadow' && value && !(value instanceof fabric.Shadow)) {\n value = new fabric.Shadow(value);\n }\n else if (key === 'dirty' && this.group) {\n this.group.set('dirty', value);\n }\n\n this[key] = value;\n\n if (isChanged) {\n groupNeedsUpdate = this.group && this.group.isOnACache();\n if (this.cacheProperties.indexOf(key) > -1) {\n this.dirty = true;\n groupNeedsUpdate && this.group.set('dirty', true);\n }\n else if (groupNeedsUpdate && this.stateProperties.indexOf(key) > -1) {\n this.group.set('dirty', true);\n }\n }\n return this;\n },\n\n /**\n * This callback function is called by the parent group of an object every\n * time a non-delegated property changes on the group. It is passed the key\n * and value as parameters. Not adding in this function's signature to avoid\n * Travis build error about unused variables.\n */\n setOnGroup: function() {\n // implemented by sub-classes, as needed.\n },\n\n /**\n * Retrieves viewportTransform from Object's canvas if possible\n * @method getViewportTransform\n * @memberOf fabric.Object.prototype\n * @return {Array}\n */\n getViewportTransform: function() {\n if (this.canvas && this.canvas.viewportTransform) {\n return this.canvas.viewportTransform;\n }\n return fabric.iMatrix.concat();\n },\n\n /*\n * @private\n * return if the object would be visible in rendering\n * @memberOf fabric.Object.prototype\n * @return {Boolean}\n */\n isNotVisible: function() {\n return this.opacity === 0 ||\n (!this.width && !this.height && this.strokeWidth === 0) ||\n !this.visible;\n },\n\n /**\n * Renders an object on a specified context\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n render: function(ctx) {\n // do not render if width/height are zeros or object is not visible\n if (this.isNotVisible()) {\n return;\n }\n if (this.canvas && this.canvas.skipOffscreen && !this.group && !this.isOnScreen()) {\n return;\n }\n ctx.save();\n this._setupCompositeOperation(ctx);\n this.drawSelectionBackground(ctx);\n this.transform(ctx);\n this._setOpacity(ctx);\n this._setShadow(ctx, this);\n if (this.shouldCache()) {\n this.renderCache();\n this.drawCacheOnCanvas(ctx);\n }\n else {\n this._removeCacheCanvas();\n this.dirty = false;\n this.drawObject(ctx);\n if (this.objectCaching && this.statefullCache) {\n this.saveState({ propertySet: 'cacheProperties' });\n }\n }\n ctx.restore();\n },\n\n renderCache: function(options) {\n options = options || {};\n if (!this._cacheCanvas) {\n this._createCacheCanvas();\n }\n if (this.isCacheDirty()) {\n this.statefullCache && this.saveState({ propertySet: 'cacheProperties' });\n this.drawObject(this._cacheContext, options.forClipping);\n this.dirty = false;\n }\n },\n\n /**\n * Remove cacheCanvas and its dimensions from the objects\n */\n _removeCacheCanvas: function() {\n this._cacheCanvas = null;\n this.cacheWidth = 0;\n this.cacheHeight = 0;\n },\n\n /**\n * return true if the object will draw a stroke\n * Does not consider text styles. This is just a shortcut used at rendering time\n * We want it to be an approximation and be fast.\n * wrote to avoid extra caching, it has to return true when stroke happens,\n * can guess when it will not happen at 100% chance, does not matter if it misses\n * some use case where the stroke is invisible.\n * @since 3.0.0\n * @returns Boolean\n */\n hasStroke: function() {\n return this.stroke && this.stroke !== 'transparent' && this.strokeWidth !== 0;\n },\n\n /**\n * return true if the object will draw a fill\n * Does not consider text styles. This is just a shortcut used at rendering time\n * We want it to be an approximation and be fast.\n * wrote to avoid extra caching, it has to return true when fill happens,\n * can guess when it will not happen at 100% chance, does not matter if it misses\n * some use case where the fill is invisible.\n * @since 3.0.0\n * @returns Boolean\n */\n hasFill: function() {\n return this.fill && this.fill !== 'transparent';\n },\n\n /**\n * When set to `true`, force the object to have its own cache, even if it is inside a group\n * it may be needed when your object behave in a particular way on the cache and always needs\n * its own isolated canvas to render correctly.\n * Created to be overridden\n * since 1.7.12\n * @returns Boolean\n */\n needsItsOwnCache: function() {\n if (this.paintFirst === 'stroke' &&\n this.hasFill() && this.hasStroke() && typeof this.shadow === 'object') {\n return true;\n }\n if (this.clipPath) {\n return true;\n }\n return false;\n },\n\n /**\n * Decide if the object should cache or not. Create its own cache level\n * objectCaching is a global flag, wins over everything\n * needsItsOwnCache should be used when the object drawing method requires\n * a cache step. None of the fabric classes requires it.\n * Generally you do not cache objects in groups because the group outside is cached.\n * Read as: cache if is needed, or if the feature is enabled but we are not already caching.\n * @return {Boolean}\n */\n shouldCache: function() {\n this.ownCaching = this.needsItsOwnCache() || (\n this.objectCaching &&\n (!this.group || !this.group.isOnACache())\n );\n return this.ownCaching;\n },\n\n /**\n * Check if this object or a child object will cast a shadow\n * used by Group.shouldCache to know if child has a shadow recursively\n * @return {Boolean}\n */\n willDrawShadow: function() {\n return !!this.shadow && (this.shadow.offsetX !== 0 || this.shadow.offsetY !== 0);\n },\n\n /**\n * Execute the drawing operation for an object clipPath\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n drawClipPathOnCache: function(ctx) {\n var path = this.clipPath;\n ctx.save();\n // DEBUG: uncomment this line, comment the following\n // ctx.globalAlpha = 0.4\n if (path.inverted) {\n ctx.globalCompositeOperation = 'destination-out';\n }\n else {\n ctx.globalCompositeOperation = 'destination-in';\n }\n //ctx.scale(1 / 2, 1 / 2);\n if (path.absolutePositioned) {\n var m = fabric.util.invertTransform(this.calcTransformMatrix());\n ctx.transform(m[0], m[1], m[2], m[3], m[4], m[5]);\n }\n path.transform(ctx);\n ctx.scale(1 / path.zoomX, 1 / path.zoomY);\n ctx.drawImage(path._cacheCanvas, -path.cacheTranslationX, -path.cacheTranslationY);\n ctx.restore();\n },\n\n /**\n * Execute the drawing operation for an object on a specified context\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n drawObject: function(ctx, forClipping) {\n var originalFill = this.fill, originalStroke = this.stroke;\n if (forClipping) {\n this.fill = 'black';\n this.stroke = '';\n this._setClippingProperties(ctx);\n }\n else {\n this._renderBackground(ctx);\n }\n this._render(ctx);\n this._drawClipPath(ctx);\n this.fill = originalFill;\n this.stroke = originalStroke;\n },\n\n _drawClipPath: function(ctx) {\n var path = this.clipPath;\n if (!path) { return; }\n // needed to setup a couple of variables\n // path canvas gets overridden with this one.\n // TODO find a better solution?\n path.canvas = this.canvas;\n path.shouldCache();\n path._transformDone = true;\n path.renderCache({ forClipping: true });\n this.drawClipPathOnCache(ctx);\n },\n\n /**\n * Paint the cached copy of the object on the target context.\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n drawCacheOnCanvas: function(ctx) {\n ctx.scale(1 / this.zoomX, 1 / this.zoomY);\n ctx.drawImage(this._cacheCanvas, -this.cacheTranslationX, -this.cacheTranslationY);\n },\n\n /**\n * Check if cache is dirty\n * @param {Boolean} skipCanvas skip canvas checks because this object is painted\n * on parent canvas.\n */\n isCacheDirty: function(skipCanvas) {\n if (this.isNotVisible()) {\n return false;\n }\n if (this._cacheCanvas && !skipCanvas && this._updateCacheCanvas()) {\n // in this case the context is already cleared.\n return true;\n }\n else {\n if (this.dirty ||\n (this.clipPath && this.clipPath.absolutePositioned) ||\n (this.statefullCache && this.hasStateChanged('cacheProperties'))\n ) {\n if (this._cacheCanvas && !skipCanvas) {\n var width = this.cacheWidth / this.zoomX;\n var height = this.cacheHeight / this.zoomY;\n this._cacheContext.clearRect(-width / 2, -height / 2, width, height);\n }\n return true;\n }\n }\n return false;\n },\n\n /**\n * Draws a background for the object big as its untransformed dimensions\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderBackground: function(ctx) {\n if (!this.backgroundColor) {\n return;\n }\n var dim = this._getNonTransformedDimensions();\n ctx.fillStyle = this.backgroundColor;\n\n ctx.fillRect(\n -dim.x / 2,\n -dim.y / 2,\n dim.x,\n dim.y\n );\n // if there is background color no other shadows\n // should be casted\n this._removeShadow(ctx);\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _setOpacity: function(ctx) {\n if (this.group && !this.group._transformDone) {\n ctx.globalAlpha = this.getObjectOpacity();\n }\n else {\n ctx.globalAlpha *= this.opacity;\n }\n },\n\n _setStrokeStyles: function(ctx, decl) {\n var stroke = decl.stroke;\n if (stroke) {\n ctx.lineWidth = decl.strokeWidth;\n ctx.lineCap = decl.strokeLineCap;\n ctx.lineDashOffset = decl.strokeDashOffset;\n ctx.lineJoin = decl.strokeLineJoin;\n ctx.miterLimit = decl.strokeMiterLimit;\n if (stroke.toLive) {\n if (stroke.gradientUnits === 'percentage' || stroke.gradientTransform || stroke.patternTransform) {\n // need to transform gradient in a pattern.\n // this is a slow process. If you are hitting this codepath, and the object\n // is not using caching, you should consider switching it on.\n // we need a canvas as big as the current object caching canvas.\n this._applyPatternForTransformedGradient(ctx, stroke);\n }\n else {\n // is a simple gradient or pattern\n ctx.strokeStyle = stroke.toLive(ctx, this);\n this._applyPatternGradientTransform(ctx, stroke);\n }\n }\n else {\n // is a color\n ctx.strokeStyle = decl.stroke;\n }\n }\n },\n\n _setFillStyles: function(ctx, decl) {\n var fill = decl.fill;\n if (fill) {\n if (fill.toLive) {\n ctx.fillStyle = fill.toLive(ctx, this);\n this._applyPatternGradientTransform(ctx, decl.fill);\n }\n else {\n ctx.fillStyle = fill;\n }\n }\n },\n\n _setClippingProperties: function(ctx) {\n ctx.globalAlpha = 1;\n ctx.strokeStyle = 'transparent';\n ctx.fillStyle = '#000000';\n },\n\n /**\n * @private\n * Sets line dash\n * @param {CanvasRenderingContext2D} ctx Context to set the dash line on\n * @param {Array} dashArray array representing dashes\n */\n _setLineDash: function(ctx, dashArray) {\n if (!dashArray || dashArray.length === 0) {\n return;\n }\n // Spec requires the concatenation of two copies the dash list when the number of elements is odd\n if (1 & dashArray.length) {\n dashArray.push.apply(dashArray, dashArray);\n }\n ctx.setLineDash(dashArray);\n },\n\n /**\n * Renders controls and borders for the object\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {Object} [styleOverride] properties to override the object style\n */\n _renderControls: function(ctx, styleOverride) {\n var vpt = this.getViewportTransform(),\n matrix = this.calcTransformMatrix(),\n options, drawBorders, drawControls;\n styleOverride = styleOverride || { };\n drawBorders = typeof styleOverride.hasBorders !== 'undefined' ? styleOverride.hasBorders : this.hasBorders;\n drawControls = typeof styleOverride.hasControls !== 'undefined' ? styleOverride.hasControls : this.hasControls;\n matrix = fabric.util.multiplyTransformMatrices(vpt, matrix);\n options = fabric.util.qrDecompose(matrix);\n ctx.save();\n ctx.translate(options.translateX, options.translateY);\n ctx.lineWidth = 1 * this.borderScaleFactor;\n if (!this.group) {\n ctx.globalAlpha = this.isMoving ? this.borderOpacityWhenMoving : 1;\n }\n ctx.rotate(degreesToRadians(options.angle));\n if (styleOverride.forActiveSelection || this.group) {\n drawBorders && this.drawBordersInGroup(ctx, options, styleOverride);\n }\n else {\n drawBorders && this.drawBorders(ctx, styleOverride);\n }\n drawControls && this.drawControls(ctx, styleOverride);\n ctx.restore();\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _setShadow: function(ctx) {\n if (!this.shadow) {\n return;\n }\n\n var shadow = this.shadow, canvas = this.canvas, scaling,\n multX = (canvas && canvas.viewportTransform[0]) || 1,\n multY = (canvas && canvas.viewportTransform[3]) || 1;\n if (shadow.nonScaling) {\n scaling = { scaleX: 1, scaleY: 1 };\n }\n else {\n scaling = this.getObjectScaling();\n }\n if (canvas && canvas._isRetinaScaling()) {\n multX *= fabric.devicePixelRatio;\n multY *= fabric.devicePixelRatio;\n }\n ctx.shadowColor = shadow.color;\n ctx.shadowBlur = shadow.blur * fabric.browserShadowBlurConstant *\n (multX + multY) * (scaling.scaleX + scaling.scaleY) / 4;\n ctx.shadowOffsetX = shadow.offsetX * multX * scaling.scaleX;\n ctx.shadowOffsetY = shadow.offsetY * multY * scaling.scaleY;\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _removeShadow: function(ctx) {\n if (!this.shadow) {\n return;\n }\n\n ctx.shadowColor = '';\n ctx.shadowBlur = ctx.shadowOffsetX = ctx.shadowOffsetY = 0;\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {Object} filler fabric.Pattern or fabric.Gradient\n * @return {Object} offset.offsetX offset for text rendering\n * @return {Object} offset.offsetY offset for text rendering\n */\n _applyPatternGradientTransform: function(ctx, filler) {\n if (!filler || !filler.toLive) {\n return { offsetX: 0, offsetY: 0 };\n }\n var t = filler.gradientTransform || filler.patternTransform;\n var offsetX = -this.width / 2 + filler.offsetX || 0,\n offsetY = -this.height / 2 + filler.offsetY || 0;\n\n if (filler.gradientUnits === 'percentage') {\n ctx.transform(this.width, 0, 0, this.height, offsetX, offsetY);\n }\n else {\n ctx.transform(1, 0, 0, 1, offsetX, offsetY);\n }\n if (t) {\n ctx.transform(t[0], t[1], t[2], t[3], t[4], t[5]);\n }\n return { offsetX: offsetX, offsetY: offsetY };\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderPaintInOrder: function(ctx) {\n if (this.paintFirst === 'stroke') {\n this._renderStroke(ctx);\n this._renderFill(ctx);\n }\n else {\n this._renderFill(ctx);\n this._renderStroke(ctx);\n }\n },\n\n /**\n * @private\n * function that actually render something on the context.\n * empty here to allow Obects to work on tests to benchmark fabric functionalites\n * not related to rendering\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render: function(/* ctx */) {\n\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderFill: function(ctx) {\n if (!this.fill) {\n return;\n }\n\n ctx.save();\n this._setFillStyles(ctx, this);\n if (this.fillRule === 'evenodd') {\n ctx.fill('evenodd');\n }\n else {\n ctx.fill();\n }\n ctx.restore();\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderStroke: function(ctx) {\n if (!this.stroke || this.strokeWidth === 0) {\n return;\n }\n\n if (this.shadow && !this.shadow.affectStroke) {\n this._removeShadow(ctx);\n }\n\n ctx.save();\n if (this.strokeUniform && this.group) {\n var scaling = this.getObjectScaling();\n ctx.scale(1 / scaling.scaleX, 1 / scaling.scaleY);\n }\n else if (this.strokeUniform) {\n ctx.scale(1 / this.scaleX, 1 / this.scaleY);\n }\n this._setLineDash(ctx, this.strokeDashArray);\n this._setStrokeStyles(ctx, this);\n ctx.stroke();\n ctx.restore();\n },\n\n /**\n * This function try to patch the missing gradientTransform on canvas gradients.\n * transforming a context to transform the gradient, is going to transform the stroke too.\n * we want to transform the gradient but not the stroke operation, so we create\n * a transformed gradient on a pattern and then we use the pattern instead of the gradient.\n * this method has drwabacks: is slow, is in low resolution, needs a patch for when the size\n * is limited.\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {fabric.Gradient} filler a fabric gradient instance\n */\n _applyPatternForTransformedGradient: function(ctx, filler) {\n var dims = this._limitCacheSize(this._getCacheCanvasDimensions()),\n pCanvas = fabric.util.createCanvasElement(), pCtx, retinaScaling = this.canvas.getRetinaScaling(),\n width = dims.x / this.scaleX / retinaScaling, height = dims.y / this.scaleY / retinaScaling;\n pCanvas.width = width;\n pCanvas.height = height;\n pCtx = pCanvas.getContext('2d');\n pCtx.beginPath(); pCtx.moveTo(0, 0); pCtx.lineTo(width, 0); pCtx.lineTo(width, height);\n pCtx.lineTo(0, height); pCtx.closePath();\n pCtx.translate(width / 2, height / 2);\n pCtx.scale(\n dims.zoomX / this.scaleX / retinaScaling,\n dims.zoomY / this.scaleY / retinaScaling\n );\n this._applyPatternGradientTransform(pCtx, filler);\n pCtx.fillStyle = filler.toLive(ctx);\n pCtx.fill();\n ctx.translate(-this.width / 2 - this.strokeWidth / 2, -this.height / 2 - this.strokeWidth / 2);\n ctx.scale(\n retinaScaling * this.scaleX / dims.zoomX,\n retinaScaling * this.scaleY / dims.zoomY\n );\n ctx.strokeStyle = pCtx.createPattern(pCanvas, 'no-repeat');\n },\n\n /**\n * This function is an helper for svg import. it returns the center of the object in the svg\n * untransformed coordinates\n * @private\n * @return {Object} center point from element coordinates\n */\n _findCenterFromElement: function() {\n return { x: this.left + this.width / 2, y: this.top + this.height / 2 };\n },\n\n /**\n * This function is an helper for svg import. it decompose the transformMatrix\n * and assign properties to object.\n * untransformed coordinates\n * @private\n * @chainable\n */\n _assignTransformMatrixProps: function() {\n if (this.transformMatrix) {\n var options = fabric.util.qrDecompose(this.transformMatrix);\n this.flipX = false;\n this.flipY = false;\n this.set('scaleX', options.scaleX);\n this.set('scaleY', options.scaleY);\n this.angle = options.angle;\n this.skewX = options.skewX;\n this.skewY = 0;\n }\n },\n\n /**\n * This function is an helper for svg import. it removes the transform matrix\n * and set to object properties that fabricjs can handle\n * @private\n * @param {Object} preserveAspectRatioOptions\n * @return {thisArg}\n */\n _removeTransformMatrix: function(preserveAspectRatioOptions) {\n var center = this._findCenterFromElement();\n if (this.transformMatrix) {\n this._assignTransformMatrixProps();\n center = fabric.util.transformPoint(center, this.transformMatrix);\n }\n this.transformMatrix = null;\n if (preserveAspectRatioOptions) {\n this.scaleX *= preserveAspectRatioOptions.scaleX;\n this.scaleY *= preserveAspectRatioOptions.scaleY;\n this.cropX = preserveAspectRatioOptions.cropX;\n this.cropY = preserveAspectRatioOptions.cropY;\n center.x += preserveAspectRatioOptions.offsetLeft;\n center.y += preserveAspectRatioOptions.offsetTop;\n this.width = preserveAspectRatioOptions.width;\n this.height = preserveAspectRatioOptions.height;\n }\n this.setPositionByOrigin(center, 'center', 'center');\n },\n\n /**\n * Clones an instance, using a callback method will work for every object.\n * @param {Function} callback Callback is invoked with a clone as a first argument\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n */\n clone: function(callback, propertiesToInclude) {\n var objectForm = this.toObject(propertiesToInclude);\n if (this.constructor.fromObject) {\n this.constructor.fromObject(objectForm, callback);\n }\n else {\n fabric.Object._fromObject('Object', objectForm, callback);\n }\n },\n\n /**\n * Creates an instance of fabric.Image out of an object\n * makes use of toCanvasElement.\n * Once this method was based on toDataUrl and loadImage, so it also had a quality\n * and format option. toCanvasElement is faster and produce no loss of quality.\n * If you need to get a real Jpeg or Png from an object, using toDataURL is the right way to do it.\n * toCanvasElement and then toBlob from the obtained canvas is also a good option.\n * This method is sync now, but still support the callback because we did not want to break.\n * When fabricJS 5.0 will be planned, this will probably be changed to not have a callback.\n * @param {Function} callback callback, invoked with an instance as a first argument\n * @param {Object} [options] for clone as image, passed to toDataURL\n * @param {Number} [options.multiplier=1] Multiplier to scale by\n * @param {Number} [options.left] Cropping left offset. Introduced in v1.2.14\n * @param {Number} [options.top] Cropping top offset. Introduced in v1.2.14\n * @param {Number} [options.width] Cropping width. Introduced in v1.2.14\n * @param {Number} [options.height] Cropping height. Introduced in v1.2.14\n * @param {Boolean} [options.enableRetinaScaling] Enable retina scaling for clone image. Introduce in 1.6.4\n * @param {Boolean} [options.withoutTransform] Remove current object transform ( no scale , no angle, no flip, no skew ). Introduced in 2.3.4\n * @param {Boolean} [options.withoutShadow] Remove current object shadow. Introduced in 2.4.2\n * @return {fabric.Object} thisArg\n */\n cloneAsImage: function(callback, options) {\n var canvasEl = this.toCanvasElement(options);\n if (callback) {\n callback(new fabric.Image(canvasEl));\n }\n return this;\n },\n\n /**\n * Converts an object into a HTMLCanvas element\n * @param {Object} options Options object\n * @param {Number} [options.multiplier=1] Multiplier to scale by\n * @param {Number} [options.left] Cropping left offset. Introduced in v1.2.14\n * @param {Number} [options.top] Cropping top offset. Introduced in v1.2.14\n * @param {Number} [options.width] Cropping width. Introduced in v1.2.14\n * @param {Number} [options.height] Cropping height. Introduced in v1.2.14\n * @param {Boolean} [options.enableRetinaScaling] Enable retina scaling for clone image. Introduce in 1.6.4\n * @param {Boolean} [options.withoutTransform] Remove current object transform ( no scale , no angle, no flip, no skew ). Introduced in 2.3.4\n * @param {Boolean} [options.withoutShadow] Remove current object shadow. Introduced in 2.4.2\n * @return {HTMLCanvasElement} Returns DOM element with the fabric.Object\n */\n toCanvasElement: function(options) {\n options || (options = { });\n\n var utils = fabric.util, origParams = utils.saveObjectTransform(this),\n originalGroup = this.group,\n originalShadow = this.shadow, abs = Math.abs,\n multiplier = (options.multiplier || 1) * (options.enableRetinaScaling ? fabric.devicePixelRatio : 1);\n delete this.group;\n if (options.withoutTransform) {\n utils.resetObjectTransform(this);\n }\n if (options.withoutShadow) {\n this.shadow = null;\n }\n\n var el = fabric.util.createCanvasElement(),\n // skip canvas zoom and calculate with setCoords now.\n boundingRect = this.getBoundingRect(true, true),\n shadow = this.shadow, scaling,\n shadowOffset = { x: 0, y: 0 }, shadowBlur,\n width, height;\n\n if (shadow) {\n shadowBlur = shadow.blur;\n if (shadow.nonScaling) {\n scaling = { scaleX: 1, scaleY: 1 };\n }\n else {\n scaling = this.getObjectScaling();\n }\n // consider non scaling shadow.\n shadowOffset.x = 2 * Math.round(abs(shadow.offsetX) + shadowBlur) * (abs(scaling.scaleX));\n shadowOffset.y = 2 * Math.round(abs(shadow.offsetY) + shadowBlur) * (abs(scaling.scaleY));\n }\n width = boundingRect.width + shadowOffset.x;\n height = boundingRect.height + shadowOffset.y;\n // if the current width/height is not an integer\n // we need to make it so.\n el.width = Math.ceil(width);\n el.height = Math.ceil(height);\n var canvas = new fabric.StaticCanvas(el, {\n enableRetinaScaling: false,\n renderOnAddRemove: false,\n skipOffscreen: false,\n });\n if (options.format === 'jpeg') {\n canvas.backgroundColor = '#fff';\n }\n this.setPositionByOrigin(new fabric.Point(canvas.width / 2, canvas.height / 2), 'center', 'center');\n\n var originalCanvas = this.canvas;\n canvas.add(this);\n var canvasEl = canvas.toCanvasElement(multiplier || 1, options);\n this.shadow = originalShadow;\n this.set('canvas', originalCanvas);\n if (originalGroup) {\n this.group = originalGroup;\n }\n this.set(origParams).setCoords();\n // canvas.dispose will call image.dispose that will nullify the elements\n // since this canvas is a simple element for the process, we remove references\n // to objects in this way in order to avoid object trashing.\n canvas._objects = [];\n canvas.dispose();\n canvas = null;\n\n return canvasEl;\n },\n\n /**\n * Converts an object into a data-url-like string\n * @param {Object} options Options object\n * @param {String} [options.format=png] The format of the output image. Either \"jpeg\" or \"png\"\n * @param {Number} [options.quality=1] Quality level (0..1). Only used for jpeg.\n * @param {Number} [options.multiplier=1] Multiplier to scale by\n * @param {Number} [options.left] Cropping left offset. Introduced in v1.2.14\n * @param {Number} [options.top] Cropping top offset. Introduced in v1.2.14\n * @param {Number} [options.width] Cropping width. Introduced in v1.2.14\n * @param {Number} [options.height] Cropping height. Introduced in v1.2.14\n * @param {Boolean} [options.enableRetinaScaling] Enable retina scaling for clone image. Introduce in 1.6.4\n * @param {Boolean} [options.withoutTransform] Remove current object transform ( no scale , no angle, no flip, no skew ). Introduced in 2.3.4\n * @param {Boolean} [options.withoutShadow] Remove current object shadow. Introduced in 2.4.2\n * @return {String} Returns a data: URL containing a representation of the object in the format specified by options.format\n */\n toDataURL: function(options) {\n options || (options = { });\n return fabric.util.toDataURL(this.toCanvasElement(options), options.format || 'png', options.quality || 1);\n },\n\n /**\n * Returns true if specified type is identical to the type of an instance\n * @param {String} type Type to check against\n * @return {Boolean}\n */\n isType: function(type) {\n return this.type === type;\n },\n\n /**\n * Returns complexity of an instance\n * @return {Number} complexity of this instance (is 1 unless subclassed)\n */\n complexity: function() {\n return 1;\n },\n\n /**\n * Returns a JSON representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} JSON\n */\n toJSON: function(propertiesToInclude) {\n // delegate, not alias\n return this.toObject(propertiesToInclude);\n },\n\n /**\n * Sets \"angle\" of an instance with centered rotation\n * @param {Number} angle Angle value (in degrees)\n * @return {fabric.Object} thisArg\n * @chainable\n */\n rotate: function(angle) {\n var shouldCenterOrigin = (this.originX !== 'center' || this.originY !== 'center') && this.centeredRotation;\n\n if (shouldCenterOrigin) {\n this._setOriginToCenter();\n }\n\n this.set('angle', angle);\n\n if (shouldCenterOrigin) {\n this._resetOrigin();\n }\n\n return this;\n },\n\n /**\n * Centers object horizontally on canvas to which it was added last.\n * You might need to call `setCoords` on an object after centering, to update controls area.\n * @return {fabric.Object} thisArg\n * @chainable\n */\n centerH: function () {\n this.canvas && this.canvas.centerObjectH(this);\n return this;\n },\n\n /**\n * Centers object horizontally on current viewport of canvas to which it was added last.\n * You might need to call `setCoords` on an object after centering, to update controls area.\n * @return {fabric.Object} thisArg\n * @chainable\n */\n viewportCenterH: function () {\n this.canvas && this.canvas.viewportCenterObjectH(this);\n return this;\n },\n\n /**\n * Centers object vertically on canvas to which it was added last.\n * You might need to call `setCoords` on an object after centering, to update controls area.\n * @return {fabric.Object} thisArg\n * @chainable\n */\n centerV: function () {\n this.canvas && this.canvas.centerObjectV(this);\n return this;\n },\n\n /**\n * Centers object vertically on current viewport of canvas to which it was added last.\n * You might need to call `setCoords` on an object after centering, to update controls area.\n * @return {fabric.Object} thisArg\n * @chainable\n */\n viewportCenterV: function () {\n this.canvas && this.canvas.viewportCenterObjectV(this);\n return this;\n },\n\n /**\n * Centers object vertically and horizontally on canvas to which is was added last\n * You might need to call `setCoords` on an object after centering, to update controls area.\n * @return {fabric.Object} thisArg\n * @chainable\n */\n center: function () {\n this.canvas && this.canvas.centerObject(this);\n return this;\n },\n\n /**\n * Centers object on current viewport of canvas to which it was added last.\n * You might need to call `setCoords` on an object after centering, to update controls area.\n * @return {fabric.Object} thisArg\n * @chainable\n */\n viewportCenter: function () {\n this.canvas && this.canvas.viewportCenterObject(this);\n return this;\n },\n\n /**\n * Returns coordinates of a pointer relative to an object\n * @param {Event} e Event to operate upon\n * @param {Object} [pointer] Pointer to operate upon (instead of event)\n * @return {Object} Coordinates of a pointer (x, y)\n */\n getLocalPointer: function(e, pointer) {\n pointer = pointer || this.canvas.getPointer(e);\n var pClicked = new fabric.Point(pointer.x, pointer.y),\n objectLeftTop = this._getLeftTopCoords();\n if (this.angle) {\n pClicked = fabric.util.rotatePoint(\n pClicked, objectLeftTop, degreesToRadians(-this.angle));\n }\n return {\n x: pClicked.x - objectLeftTop.x,\n y: pClicked.y - objectLeftTop.y\n };\n },\n\n /**\n * Sets canvas globalCompositeOperation for specific object\n * custom composition operation for the particular object can be specified using globalCompositeOperation property\n * @param {CanvasRenderingContext2D} ctx Rendering canvas context\n */\n _setupCompositeOperation: function (ctx) {\n if (this.globalCompositeOperation) {\n ctx.globalCompositeOperation = this.globalCompositeOperation;\n }\n }\n });\n\n fabric.util.createAccessors && fabric.util.createAccessors(fabric.Object);\n\n extend(fabric.Object.prototype, fabric.Observable);\n\n /**\n * Defines the number of fraction digits to use when serializing object values.\n * You can use it to increase/decrease precision of such values like left, top, scaleX, scaleY, etc.\n * @static\n * @memberOf fabric.Object\n * @constant\n * @type Number\n */\n fabric.Object.NUM_FRACTION_DIGITS = 2;\n\n fabric.Object._fromObject = function(className, object, callback, extraParam) {\n var klass = fabric[className];\n object = clone(object, true);\n fabric.util.enlivenPatterns([object.fill, object.stroke], function(patterns) {\n if (typeof patterns[0] !== 'undefined') {\n object.fill = patterns[0];\n }\n if (typeof patterns[1] !== 'undefined') {\n object.stroke = patterns[1];\n }\n fabric.util.enlivenObjects([object.clipPath], function(enlivedProps) {\n object.clipPath = enlivedProps[0];\n var instance = extraParam ? new klass(object[extraParam], object) : new klass(object);\n callback && callback(instance);\n });\n });\n };\n\n /**\n * Unique id used internally when creating SVG elements\n * @static\n * @memberOf fabric.Object\n * @type Number\n */\n fabric.Object.__uid = 0;\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function() {\n\n var degreesToRadians = fabric.util.degreesToRadians,\n originXOffset = {\n left: -0.5,\n center: 0,\n right: 0.5\n },\n originYOffset = {\n top: -0.5,\n center: 0,\n bottom: 0.5\n };\n\n fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prototype */ {\n\n /**\n * Translates the coordinates from a set of origin to another (based on the object's dimensions)\n * @param {fabric.Point} point The point which corresponds to the originX and originY params\n * @param {String} fromOriginX Horizontal origin: 'left', 'center' or 'right'\n * @param {String} fromOriginY Vertical origin: 'top', 'center' or 'bottom'\n * @param {String} toOriginX Horizontal origin: 'left', 'center' or 'right'\n * @param {String} toOriginY Vertical origin: 'top', 'center' or 'bottom'\n * @return {fabric.Point}\n */\n translateToGivenOrigin: function(point, fromOriginX, fromOriginY, toOriginX, toOriginY) {\n var x = point.x,\n y = point.y,\n offsetX, offsetY, dim;\n\n if (typeof fromOriginX === 'string') {\n fromOriginX = originXOffset[fromOriginX];\n }\n else {\n fromOriginX -= 0.5;\n }\n\n if (typeof toOriginX === 'string') {\n toOriginX = originXOffset[toOriginX];\n }\n else {\n toOriginX -= 0.5;\n }\n\n offsetX = toOriginX - fromOriginX;\n\n if (typeof fromOriginY === 'string') {\n fromOriginY = originYOffset[fromOriginY];\n }\n else {\n fromOriginY -= 0.5;\n }\n\n if (typeof toOriginY === 'string') {\n toOriginY = originYOffset[toOriginY];\n }\n else {\n toOriginY -= 0.5;\n }\n\n offsetY = toOriginY - fromOriginY;\n\n if (offsetX || offsetY) {\n dim = this._getTransformedDimensions();\n x = point.x + offsetX * dim.x;\n y = point.y + offsetY * dim.y;\n }\n\n return new fabric.Point(x, y);\n },\n\n /**\n * Translates the coordinates from origin to center coordinates (based on the object's dimensions)\n * @param {fabric.Point} point The point which corresponds to the originX and originY params\n * @param {String} originX Horizontal origin: 'left', 'center' or 'right'\n * @param {String} originY Vertical origin: 'top', 'center' or 'bottom'\n * @return {fabric.Point}\n */\n translateToCenterPoint: function(point, originX, originY) {\n var p = this.translateToGivenOrigin(point, originX, originY, 'center', 'center');\n if (this.angle) {\n return fabric.util.rotatePoint(p, point, degreesToRadians(this.angle));\n }\n return p;\n },\n\n /**\n * Translates the coordinates from center to origin coordinates (based on the object's dimensions)\n * @param {fabric.Point} center The point which corresponds to center of the object\n * @param {String} originX Horizontal origin: 'left', 'center' or 'right'\n * @param {String} originY Vertical origin: 'top', 'center' or 'bottom'\n * @return {fabric.Point}\n */\n translateToOriginPoint: function(center, originX, originY) {\n var p = this.translateToGivenOrigin(center, 'center', 'center', originX, originY);\n if (this.angle) {\n return fabric.util.rotatePoint(p, center, degreesToRadians(this.angle));\n }\n return p;\n },\n\n /**\n * Returns the real center coordinates of the object\n * @return {fabric.Point}\n */\n getCenterPoint: function() {\n var leftTop = new fabric.Point(this.left, this.top);\n return this.translateToCenterPoint(leftTop, this.originX, this.originY);\n },\n\n /**\n * Returns the coordinates of the object based on center coordinates\n * @param {fabric.Point} point The point which corresponds to the originX and originY params\n * @return {fabric.Point}\n */\n // getOriginPoint: function(center) {\n // return this.translateToOriginPoint(center, this.originX, this.originY);\n // },\n\n /**\n * Returns the coordinates of the object as if it has a different origin\n * @param {String} originX Horizontal origin: 'left', 'center' or 'right'\n * @param {String} originY Vertical origin: 'top', 'center' or 'bottom'\n * @return {fabric.Point}\n */\n getPointByOrigin: function(originX, originY) {\n var center = this.getCenterPoint();\n return this.translateToOriginPoint(center, originX, originY);\n },\n\n /**\n * Returns the point in local coordinates\n * @param {fabric.Point} point The point relative to the global coordinate system\n * @param {String} originX Horizontal origin: 'left', 'center' or 'right'\n * @param {String} originY Vertical origin: 'top', 'center' or 'bottom'\n * @return {fabric.Point}\n */\n toLocalPoint: function(point, originX, originY) {\n var center = this.getCenterPoint(),\n p, p2;\n\n if (typeof originX !== 'undefined' && typeof originY !== 'undefined' ) {\n p = this.translateToGivenOrigin(center, 'center', 'center', originX, originY);\n }\n else {\n p = new fabric.Point(this.left, this.top);\n }\n\n p2 = new fabric.Point(point.x, point.y);\n if (this.angle) {\n p2 = fabric.util.rotatePoint(p2, center, -degreesToRadians(this.angle));\n }\n return p2.subtractEquals(p);\n },\n\n /**\n * Returns the point in global coordinates\n * @param {fabric.Point} The point relative to the local coordinate system\n * @return {fabric.Point}\n */\n // toGlobalPoint: function(point) {\n // return fabric.util.rotatePoint(point, this.getCenterPoint(), degreesToRadians(this.angle)).addEquals(new fabric.Point(this.left, this.top));\n // },\n\n /**\n * Sets the position of the object taking into consideration the object's origin\n * @param {fabric.Point} pos The new position of the object\n * @param {String} originX Horizontal origin: 'left', 'center' or 'right'\n * @param {String} originY Vertical origin: 'top', 'center' or 'bottom'\n * @return {void}\n */\n setPositionByOrigin: function(pos, originX, originY) {\n var center = this.translateToCenterPoint(pos, originX, originY),\n position = this.translateToOriginPoint(center, this.originX, this.originY);\n this.set('left', position.x);\n this.set('top', position.y);\n },\n\n /**\n * @param {String} to One of 'left', 'center', 'right'\n */\n adjustPosition: function(to) {\n var angle = degreesToRadians(this.angle),\n hypotFull = this.getScaledWidth(),\n xFull = fabric.util.cos(angle) * hypotFull,\n yFull = fabric.util.sin(angle) * hypotFull,\n offsetFrom, offsetTo;\n\n //TODO: this function does not consider mixed situation like top, center.\n if (typeof this.originX === 'string') {\n offsetFrom = originXOffset[this.originX];\n }\n else {\n offsetFrom = this.originX - 0.5;\n }\n if (typeof to === 'string') {\n offsetTo = originXOffset[to];\n }\n else {\n offsetTo = to - 0.5;\n }\n this.left += xFull * (offsetTo - offsetFrom);\n this.top += yFull * (offsetTo - offsetFrom);\n this.setCoords();\n this.originX = to;\n },\n\n /**\n * Sets the origin/position of the object to it's center point\n * @private\n * @return {void}\n */\n _setOriginToCenter: function() {\n this._originalOriginX = this.originX;\n this._originalOriginY = this.originY;\n\n var center = this.getCenterPoint();\n\n this.originX = 'center';\n this.originY = 'center';\n\n this.left = center.x;\n this.top = center.y;\n },\n\n /**\n * Resets the origin/position of the object to it's original origin\n * @private\n * @return {void}\n */\n _resetOrigin: function() {\n var originPoint = this.translateToOriginPoint(\n this.getCenterPoint(),\n this._originalOriginX,\n this._originalOriginY);\n\n this.originX = this._originalOriginX;\n this.originY = this._originalOriginY;\n\n this.left = originPoint.x;\n this.top = originPoint.y;\n\n this._originalOriginX = null;\n this._originalOriginY = null;\n },\n\n /**\n * @private\n */\n _getLeftTopCoords: function() {\n return this.translateToOriginPoint(this.getCenterPoint(), 'left', 'top');\n },\n });\n\n})();\n\n\n(function() {\n\n function arrayFromCoords(coords) {\n return [\n new fabric.Point(coords.tl.x, coords.tl.y),\n new fabric.Point(coords.tr.x, coords.tr.y),\n new fabric.Point(coords.br.x, coords.br.y),\n new fabric.Point(coords.bl.x, coords.bl.y)\n ];\n }\n\n var util = fabric.util,\n degreesToRadians = util.degreesToRadians,\n multiplyMatrices = util.multiplyTransformMatrices,\n transformPoint = util.transformPoint;\n\n util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prototype */ {\n\n /**\n * Describe object's corner position in canvas element coordinates.\n * properties are depending on control keys and padding the main controls.\n * each property is an object with x, y and corner.\n * The `corner` property contains in a similar manner the 4 points of the\n * interactive area of the corner.\n * The coordinates depends from the controls positionHandler and are used\n * to draw and locate controls\n * @memberOf fabric.Object.prototype\n */\n oCoords: null,\n\n /**\n * Describe object's corner position in canvas object absolute coordinates\n * properties are tl,tr,bl,br and describe the four main corner.\n * each property is an object with x, y, instance of Fabric.Point.\n * The coordinates depends from this properties: width, height, scaleX, scaleY\n * skewX, skewY, angle, strokeWidth, top, left.\n * Those coordinates are useful to understand where an object is. They get updated\n * with oCoords but they do not need to be updated when zoom or panning change.\n * The coordinates get updated with @method setCoords.\n * You can calculate them without updating with @method calcACoords();\n * @memberOf fabric.Object.prototype\n */\n aCoords: null,\n\n /**\n * Describe object's corner position in canvas element coordinates.\n * includes padding. Used of object detection.\n * set and refreshed with setCoords and calcCoords.\n * @memberOf fabric.Object.prototype\n */\n lineCoords: null,\n\n /**\n * storage for object transform matrix\n */\n ownMatrixCache: null,\n\n /**\n * storage for object full transform matrix\n */\n matrixCache: null,\n\n /**\n * custom controls interface\n * controls are added by default_controls.js\n */\n controls: { },\n\n /**\n * return correct set of coordinates for intersection\n * this will return either aCoords or lineCoords.\n * @param {Boolean} absolute will return aCoords if true or lineCoords\n * @return {Object} {tl, tr, br, bl} points\n */\n _getCoords: function(absolute, calculate) {\n if (calculate) {\n return (absolute ? this.calcACoords() : this.calcLineCoords());\n }\n if (!this.aCoords || !this.lineCoords) {\n this.setCoords(true);\n }\n return (absolute ? this.aCoords : this.lineCoords);\n },\n\n /**\n * return correct set of coordinates for intersection\n * this will return either aCoords or lineCoords.\n * The coords are returned in an array.\n * @return {Array} [tl, tr, br, bl] of points\n */\n getCoords: function(absolute, calculate) {\n return arrayFromCoords(this._getCoords(absolute, calculate));\n },\n\n /**\n * Checks if object intersects with an area formed by 2 points\n * @param {Object} pointTL top-left point of area\n * @param {Object} pointBR bottom-right point of area\n * @param {Boolean} [absolute] use coordinates without viewportTransform\n * @param {Boolean} [calculate] use coordinates of current position instead of .oCoords\n * @return {Boolean} true if object intersects with an area formed by 2 points\n */\n intersectsWithRect: function(pointTL, pointBR, absolute, calculate) {\n var coords = this.getCoords(absolute, calculate),\n intersection = fabric.Intersection.intersectPolygonRectangle(\n coords,\n pointTL,\n pointBR\n );\n return intersection.status === 'Intersection';\n },\n\n /**\n * Checks if object intersects with another object\n * @param {Object} other Object to test\n * @param {Boolean} [absolute] use coordinates without viewportTransform\n * @param {Boolean} [calculate] use coordinates of current position instead of .oCoords\n * @return {Boolean} true if object intersects with another object\n */\n intersectsWithObject: function(other, absolute, calculate) {\n var intersection = fabric.Intersection.intersectPolygonPolygon(\n this.getCoords(absolute, calculate),\n other.getCoords(absolute, calculate)\n );\n\n return intersection.status === 'Intersection'\n || other.isContainedWithinObject(this, absolute, calculate)\n || this.isContainedWithinObject(other, absolute, calculate);\n },\n\n /**\n * Checks if object is fully contained within area of another object\n * @param {Object} other Object to test\n * @param {Boolean} [absolute] use coordinates without viewportTransform\n * @param {Boolean} [calculate] use coordinates of current position instead of .oCoords\n * @return {Boolean} true if object is fully contained within area of another object\n */\n isContainedWithinObject: function(other, absolute, calculate) {\n var points = this.getCoords(absolute, calculate),\n otherCoords = absolute ? other.aCoords : other.lineCoords,\n i = 0, lines = other._getImageLines(otherCoords);\n for (; i < 4; i++) {\n if (!other.containsPoint(points[i], lines)) {\n return false;\n }\n }\n return true;\n },\n\n /**\n * Checks if object is fully contained within area formed by 2 points\n * @param {Object} pointTL top-left point of area\n * @param {Object} pointBR bottom-right point of area\n * @param {Boolean} [absolute] use coordinates without viewportTransform\n * @param {Boolean} [calculate] use coordinates of current position instead of .oCoords\n * @return {Boolean} true if object is fully contained within area formed by 2 points\n */\n isContainedWithinRect: function(pointTL, pointBR, absolute, calculate) {\n var boundingRect = this.getBoundingRect(absolute, calculate);\n\n return (\n boundingRect.left >= pointTL.x &&\n boundingRect.left + boundingRect.width <= pointBR.x &&\n boundingRect.top >= pointTL.y &&\n boundingRect.top + boundingRect.height <= pointBR.y\n );\n },\n\n /**\n * Checks if point is inside the object\n * @param {fabric.Point} point Point to check against\n * @param {Object} [lines] object returned from @method _getImageLines\n * @param {Boolean} [absolute] use coordinates without viewportTransform\n * @param {Boolean} [calculate] use coordinates of current position instead of .oCoords\n * @return {Boolean} true if point is inside the object\n */\n containsPoint: function(point, lines, absolute, calculate) {\n var coords = this._getCoords(absolute, calculate),\n lines = lines || this._getImageLines(coords),\n xPoints = this._findCrossPoints(point, lines);\n // if xPoints is odd then point is inside the object\n return (xPoints !== 0 && xPoints % 2 === 1);\n },\n\n /**\n * Checks if object is contained within the canvas with current viewportTransform\n * the check is done stopping at first point that appears on screen\n * @param {Boolean} [calculate] use coordinates of current position instead of .aCoords\n * @return {Boolean} true if object is fully or partially contained within canvas\n */\n isOnScreen: function(calculate) {\n if (!this.canvas) {\n return false;\n }\n var pointTL = this.canvas.vptCoords.tl, pointBR = this.canvas.vptCoords.br;\n var points = this.getCoords(true, calculate);\n // if some point is on screen, the object is on screen.\n if (points.some(function(point) {\n return point.x <= pointBR.x && point.x >= pointTL.x &&\n point.y <= pointBR.y && point.y >= pointTL.y;\n })) {\n return true;\n }\n // no points on screen, check intersection with absolute coordinates\n if (this.intersectsWithRect(pointTL, pointBR, true, calculate)) {\n return true;\n }\n return this._containsCenterOfCanvas(pointTL, pointBR, calculate);\n },\n\n /**\n * Checks if the object contains the midpoint between canvas extremities\n * Does not make sense outside the context of isOnScreen and isPartiallyOnScreen\n * @private\n * @param {Fabric.Point} pointTL Top Left point\n * @param {Fabric.Point} pointBR Top Right point\n * @param {Boolean} calculate use coordinates of current position instead of .oCoords\n * @return {Boolean} true if the object contains the point\n */\n _containsCenterOfCanvas: function(pointTL, pointBR, calculate) {\n // worst case scenario the object is so big that contains the screen\n var centerPoint = { x: (pointTL.x + pointBR.x) / 2, y: (pointTL.y + pointBR.y) / 2 };\n if (this.containsPoint(centerPoint, null, true, calculate)) {\n return true;\n }\n return false;\n },\n\n /**\n * Checks if object is partially contained within the canvas with current viewportTransform\n * @param {Boolean} [calculate] use coordinates of current position instead of .oCoords\n * @return {Boolean} true if object is partially contained within canvas\n */\n isPartiallyOnScreen: function(calculate) {\n if (!this.canvas) {\n return false;\n }\n var pointTL = this.canvas.vptCoords.tl, pointBR = this.canvas.vptCoords.br;\n if (this.intersectsWithRect(pointTL, pointBR, true, calculate)) {\n return true;\n }\n var allPointsAreOutside = this.getCoords(true, calculate).every(function(point) {\n return (point.x >= pointBR.x || point.x <= pointTL.x) &&\n (point.y >= pointBR.y || point.y <= pointTL.y);\n });\n return allPointsAreOutside && this._containsCenterOfCanvas(pointTL, pointBR, calculate);\n },\n\n /**\n * Method that returns an object with the object edges in it, given the coordinates of the corners\n * @private\n * @param {Object} oCoords Coordinates of the object corners\n */\n _getImageLines: function(oCoords) {\n\n var lines = {\n topline: {\n o: oCoords.tl,\n d: oCoords.tr\n },\n rightline: {\n o: oCoords.tr,\n d: oCoords.br\n },\n bottomline: {\n o: oCoords.br,\n d: oCoords.bl\n },\n leftline: {\n o: oCoords.bl,\n d: oCoords.tl\n }\n };\n\n // // debugging\n // if (this.canvas.contextTop) {\n // this.canvas.contextTop.fillRect(lines.bottomline.d.x, lines.bottomline.d.y, 2, 2);\n // this.canvas.contextTop.fillRect(lines.bottomline.o.x, lines.bottomline.o.y, 2, 2);\n //\n // this.canvas.contextTop.fillRect(lines.leftline.d.x, lines.leftline.d.y, 2, 2);\n // this.canvas.contextTop.fillRect(lines.leftline.o.x, lines.leftline.o.y, 2, 2);\n //\n // this.canvas.contextTop.fillRect(lines.topline.d.x, lines.topline.d.y, 2, 2);\n // this.canvas.contextTop.fillRect(lines.topline.o.x, lines.topline.o.y, 2, 2);\n //\n // this.canvas.contextTop.fillRect(lines.rightline.d.x, lines.rightline.d.y, 2, 2);\n // this.canvas.contextTop.fillRect(lines.rightline.o.x, lines.rightline.o.y, 2, 2);\n // }\n\n return lines;\n },\n\n /**\n * Helper method to determine how many cross points are between the 4 object edges\n * and the horizontal line determined by a point on canvas\n * @private\n * @param {fabric.Point} point Point to check\n * @param {Object} lines Coordinates of the object being evaluated\n */\n // remove yi, not used but left code here just in case.\n _findCrossPoints: function(point, lines) {\n var b1, b2, a1, a2, xi, // yi,\n xcount = 0,\n iLine;\n\n for (var lineKey in lines) {\n iLine = lines[lineKey];\n // optimisation 1: line below point. no cross\n if ((iLine.o.y < point.y) && (iLine.d.y < point.y)) {\n continue;\n }\n // optimisation 2: line above point. no cross\n if ((iLine.o.y >= point.y) && (iLine.d.y >= point.y)) {\n continue;\n }\n // optimisation 3: vertical line case\n if ((iLine.o.x === iLine.d.x) && (iLine.o.x >= point.x)) {\n xi = iLine.o.x;\n // yi = point.y;\n }\n // calculate the intersection point\n else {\n b1 = 0;\n b2 = (iLine.d.y - iLine.o.y) / (iLine.d.x - iLine.o.x);\n a1 = point.y - b1 * point.x;\n a2 = iLine.o.y - b2 * iLine.o.x;\n\n xi = -(a1 - a2) / (b1 - b2);\n // yi = a1 + b1 * xi;\n }\n // dont count xi < point.x cases\n if (xi >= point.x) {\n xcount += 1;\n }\n // optimisation 4: specific for square images\n if (xcount === 2) {\n break;\n }\n }\n return xcount;\n },\n\n /**\n * Returns coordinates of object's bounding rectangle (left, top, width, height)\n * the box is intended as aligned to axis of canvas.\n * @param {Boolean} [absolute] use coordinates without viewportTransform\n * @param {Boolean} [calculate] use coordinates of current position instead of .oCoords / .aCoords\n * @return {Object} Object with left, top, width, height properties\n */\n getBoundingRect: function(absolute, calculate) {\n var coords = this.getCoords(absolute, calculate);\n return util.makeBoundingBoxFromPoints(coords);\n },\n\n /**\n * Returns width of an object's bounding box counting transformations\n * before 2.0 it was named getWidth();\n * @return {Number} width value\n */\n getScaledWidth: function() {\n return this._getTransformedDimensions().x;\n },\n\n /**\n * Returns height of an object bounding box counting transformations\n * before 2.0 it was named getHeight();\n * @return {Number} height value\n */\n getScaledHeight: function() {\n return this._getTransformedDimensions().y;\n },\n\n /**\n * Makes sure the scale is valid and modifies it if necessary\n * @private\n * @param {Number} value\n * @return {Number}\n */\n _constrainScale: function(value) {\n if (Math.abs(value) < this.minScaleLimit) {\n if (value < 0) {\n return -this.minScaleLimit;\n }\n else {\n return this.minScaleLimit;\n }\n }\n else if (value === 0) {\n return 0.0001;\n }\n return value;\n },\n\n /**\n * Scales an object (equally by x and y)\n * @param {Number} value Scale factor\n * @return {fabric.Object} thisArg\n * @chainable\n */\n scale: function(value) {\n this._set('scaleX', value);\n this._set('scaleY', value);\n return this.setCoords();\n },\n\n /**\n * Scales an object to a given width, with respect to bounding box (scaling by x/y equally)\n * @param {Number} value New width value\n * @param {Boolean} absolute ignore viewport\n * @return {fabric.Object} thisArg\n * @chainable\n */\n scaleToWidth: function(value, absolute) {\n // adjust to bounding rect factor so that rotated shapes would fit as well\n var boundingRectFactor = this.getBoundingRect(absolute).width / this.getScaledWidth();\n return this.scale(value / this.width / boundingRectFactor);\n },\n\n /**\n * Scales an object to a given height, with respect to bounding box (scaling by x/y equally)\n * @param {Number} value New height value\n * @param {Boolean} absolute ignore viewport\n * @return {fabric.Object} thisArg\n * @chainable\n */\n scaleToHeight: function(value, absolute) {\n // adjust to bounding rect factor so that rotated shapes would fit as well\n var boundingRectFactor = this.getBoundingRect(absolute).height / this.getScaledHeight();\n return this.scale(value / this.height / boundingRectFactor);\n },\n\n /**\n * Calculates and returns the .coords of an object.\n * unused by the library, only for the end dev.\n * @return {Object} Object with tl, tr, br, bl ....\n * @chainable\n * @deprecated\n */\n calcCoords: function(absolute) {\n // this is a compatibility function to avoid removing calcCoords now.\n if (absolute) {\n return this.calcACoords();\n }\n return this.calcOCoords();\n },\n\n calcLineCoords: function() {\n var vpt = this.getViewportTransform(),\n padding = this.padding, angle = degreesToRadians(this.angle),\n cos = util.cos(angle), sin = util.sin(angle),\n cosP = cos * padding, sinP = sin * padding, cosPSinP = cosP + sinP,\n cosPMinusSinP = cosP - sinP, aCoords = this.calcACoords();\n\n var lineCoords = {\n tl: transformPoint(aCoords.tl, vpt),\n tr: transformPoint(aCoords.tr, vpt),\n bl: transformPoint(aCoords.bl, vpt),\n br: transformPoint(aCoords.br, vpt),\n };\n\n if (padding) {\n lineCoords.tl.x -= cosPMinusSinP;\n lineCoords.tl.y -= cosPSinP;\n lineCoords.tr.x += cosPSinP;\n lineCoords.tr.y -= cosPMinusSinP;\n lineCoords.bl.x -= cosPSinP;\n lineCoords.bl.y += cosPMinusSinP;\n lineCoords.br.x += cosPMinusSinP;\n lineCoords.br.y += cosPSinP;\n }\n\n return lineCoords;\n },\n\n calcOCoords: function() {\n var rotateMatrix = this._calcRotateMatrix(),\n translateMatrix = this._calcTranslateMatrix(),\n vpt = this.getViewportTransform(),\n startMatrix = multiplyMatrices(vpt, translateMatrix),\n finalMatrix = multiplyMatrices(startMatrix, rotateMatrix),\n finalMatrix = multiplyMatrices(finalMatrix, [1 / vpt[0], 0, 0, 1 / vpt[3], 0, 0]),\n dim = this._calculateCurrentDimensions(),\n coords = {};\n this.forEachControl(function(control, key, fabricObject) {\n coords[key] = control.positionHandler(dim, finalMatrix, fabricObject);\n });\n\n // debug code\n // var canvas = this.canvas;\n // setTimeout(function() {\n // canvas.contextTop.clearRect(0, 0, 700, 700);\n // canvas.contextTop.fillStyle = 'green';\n // Object.keys(coords).forEach(function(key) {\n // var control = coords[key];\n // canvas.contextTop.fillRect(control.x, control.y, 3, 3);\n // });\n // }, 50);\n return coords;\n },\n\n calcACoords: function() {\n var rotateMatrix = this._calcRotateMatrix(),\n translateMatrix = this._calcTranslateMatrix(),\n finalMatrix = multiplyMatrices(translateMatrix, rotateMatrix),\n dim = this._getTransformedDimensions(),\n w = dim.x / 2, h = dim.y / 2;\n return {\n // corners\n tl: transformPoint({ x: -w, y: -h }, finalMatrix),\n tr: transformPoint({ x: w, y: -h }, finalMatrix),\n bl: transformPoint({ x: -w, y: h }, finalMatrix),\n br: transformPoint({ x: w, y: h }, finalMatrix)\n };\n },\n\n /**\n * Sets corner and controls position coordinates based on current angle, width and height, left and top.\n * oCoords are used to find the corners\n * aCoords are used to quickly find an object on the canvas\n * lineCoords are used to quickly find object during pointer events.\n * See {@link https://github.com/kangax/fabric.js/wiki/When-to-call-setCoords|When-to-call-setCoords}\n * @param {Boolean} [skipCorners] skip calculation of oCoords.\n * @return {fabric.Object} thisArg\n * @chainable\n */\n setCoords: function(skipCorners) {\n this.aCoords = this.calcACoords();\n // in case we are in a group, for how the inner group target check works,\n // lineCoords are exactly aCoords. Since the vpt gets absorbed by the normalized pointer.\n this.lineCoords = this.group ? this.aCoords : this.calcLineCoords();\n if (skipCorners) {\n return this;\n }\n // set coordinates of the draggable boxes in the corners used to scale/rotate the image\n this.oCoords = this.calcOCoords();\n this._setCornerCoords && this._setCornerCoords();\n return this;\n },\n\n /**\n * calculate rotation matrix of an object\n * @return {Array} rotation matrix for the object\n */\n _calcRotateMatrix: function() {\n return util.calcRotateMatrix(this);\n },\n\n /**\n * calculate the translation matrix for an object transform\n * @return {Array} rotation matrix for the object\n */\n _calcTranslateMatrix: function() {\n var center = this.getCenterPoint();\n return [1, 0, 0, 1, center.x, center.y];\n },\n\n transformMatrixKey: function(skipGroup) {\n var sep = '_', prefix = '';\n if (!skipGroup && this.group) {\n prefix = this.group.transformMatrixKey(skipGroup) + sep;\n };\n return prefix + this.top + sep + this.left + sep + this.scaleX + sep + this.scaleY +\n sep + this.skewX + sep + this.skewY + sep + this.angle + sep + this.originX + sep + this.originY +\n sep + this.width + sep + this.height + sep + this.strokeWidth + this.flipX + this.flipY;\n },\n\n /**\n * calculate transform matrix that represents the current transformations from the\n * object's properties.\n * @param {Boolean} [skipGroup] return transform matrix for object not counting parent transformations\n * There are some situation in which this is useful to avoid the fake rotation.\n * @return {Array} transform matrix for the object\n */\n calcTransformMatrix: function(skipGroup) {\n var matrix = this.calcOwnMatrix();\n if (skipGroup || !this.group) {\n return matrix;\n }\n var key = this.transformMatrixKey(skipGroup), cache = this.matrixCache || (this.matrixCache = {});\n if (cache.key === key) {\n return cache.value;\n }\n if (this.group) {\n matrix = multiplyMatrices(this.group.calcTransformMatrix(false), matrix);\n }\n cache.key = key;\n cache.value = matrix;\n return matrix;\n },\n\n /**\n * calculate transform matrix that represents the current transformations from the\n * object's properties, this matrix does not include the group transformation\n * @return {Array} transform matrix for the object\n */\n calcOwnMatrix: function() {\n var key = this.transformMatrixKey(true), cache = this.ownMatrixCache || (this.ownMatrixCache = {});\n if (cache.key === key) {\n return cache.value;\n }\n var tMatrix = this._calcTranslateMatrix(),\n options = {\n angle: this.angle,\n translateX: tMatrix[4],\n translateY: tMatrix[5],\n scaleX: this.scaleX,\n scaleY: this.scaleY,\n skewX: this.skewX,\n skewY: this.skewY,\n flipX: this.flipX,\n flipY: this.flipY,\n };\n cache.key = key;\n cache.value = util.composeMatrix(options);\n return cache.value;\n },\n\n /*\n * Calculate object dimensions from its properties\n * @private\n * @deprecated since 3.4.0, please use fabric.util._calcDimensionsTransformMatrix\n * not including or including flipX, flipY to emulate the flipping boolean\n * @return {Object} .x width dimension\n * @return {Object} .y height dimension\n */\n _calcDimensionsTransformMatrix: function(skewX, skewY, flipping) {\n return util.calcDimensionsMatrix({\n skewX: skewX,\n skewY: skewY,\n scaleX: this.scaleX * (flipping && this.flipX ? -1 : 1),\n scaleY: this.scaleY * (flipping && this.flipY ? -1 : 1)\n });\n },\n\n /*\n * Calculate object dimensions from its properties\n * @private\n * @return {Object} .x width dimension\n * @return {Object} .y height dimension\n */\n _getNonTransformedDimensions: function() {\n var strokeWidth = this.strokeWidth,\n w = this.width + strokeWidth,\n h = this.height + strokeWidth;\n return { x: w, y: h };\n },\n\n /*\n * Calculate object bounding box dimensions from its properties scale, skew.\n * @param {Number} skewX, a value to override current skewX\n * @param {Number} skewY, a value to override current skewY\n * @private\n * @return {Object} .x width dimension\n * @return {Object} .y height dimension\n */\n _getTransformedDimensions: function(skewX, skewY) {\n if (typeof skewX === 'undefined') {\n skewX = this.skewX;\n }\n if (typeof skewY === 'undefined') {\n skewY = this.skewY;\n }\n var dimensions, dimX, dimY,\n noSkew = skewX === 0 && skewY === 0;\n\n if (this.strokeUniform) {\n dimX = this.width;\n dimY = this.height;\n }\n else {\n dimensions = this._getNonTransformedDimensions();\n dimX = dimensions.x;\n dimY = dimensions.y;\n }\n if (noSkew) {\n return this._finalizeDimensions(dimX * this.scaleX, dimY * this.scaleY);\n }\n var bbox = util.sizeAfterTransform(dimX, dimY, {\n scaleX: this.scaleX,\n scaleY: this.scaleY,\n skewX: skewX,\n skewY: skewY,\n });\n return this._finalizeDimensions(bbox.x, bbox.y);\n },\n\n /*\n * Calculate object bounding box dimensions from its properties scale, skew.\n * @param Number width width of the bbox\n * @param Number height height of the bbox\n * @private\n * @return {Object} .x finalized width dimension\n * @return {Object} .y finalized height dimension\n */\n _finalizeDimensions: function(width, height) {\n return this.strokeUniform ?\n { x: width + this.strokeWidth, y: height + this.strokeWidth }\n :\n { x: width, y: height };\n },\n\n /*\n * Calculate object dimensions for controls box, including padding and canvas zoom.\n * and active selection\n * private\n */\n _calculateCurrentDimensions: function() {\n var vpt = this.getViewportTransform(),\n dim = this._getTransformedDimensions(),\n p = transformPoint(dim, vpt, true);\n return p.scalarAdd(2 * this.padding);\n },\n });\n})();\n\n\nfabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prototype */ {\n\n /**\n * Moves an object to the bottom of the stack of drawn objects\n * @return {fabric.Object} thisArg\n * @chainable\n */\n sendToBack: function() {\n if (this.group) {\n fabric.StaticCanvas.prototype.sendToBack.call(this.group, this);\n }\n else if (this.canvas) {\n this.canvas.sendToBack(this);\n }\n return this;\n },\n\n /**\n * Moves an object to the top of the stack of drawn objects\n * @return {fabric.Object} thisArg\n * @chainable\n */\n bringToFront: function() {\n if (this.group) {\n fabric.StaticCanvas.prototype.bringToFront.call(this.group, this);\n }\n else if (this.canvas) {\n this.canvas.bringToFront(this);\n }\n return this;\n },\n\n /**\n * Moves an object down in stack of drawn objects\n * @param {Boolean} [intersecting] If `true`, send object behind next lower intersecting object\n * @return {fabric.Object} thisArg\n * @chainable\n */\n sendBackwards: function(intersecting) {\n if (this.group) {\n fabric.StaticCanvas.prototype.sendBackwards.call(this.group, this, intersecting);\n }\n else if (this.canvas) {\n this.canvas.sendBackwards(this, intersecting);\n }\n return this;\n },\n\n /**\n * Moves an object up in stack of drawn objects\n * @param {Boolean} [intersecting] If `true`, send object in front of next upper intersecting object\n * @return {fabric.Object} thisArg\n * @chainable\n */\n bringForward: function(intersecting) {\n if (this.group) {\n fabric.StaticCanvas.prototype.bringForward.call(this.group, this, intersecting);\n }\n else if (this.canvas) {\n this.canvas.bringForward(this, intersecting);\n }\n return this;\n },\n\n /**\n * Moves an object to specified level in stack of drawn objects\n * @param {Number} index New position of object\n * @return {fabric.Object} thisArg\n * @chainable\n */\n moveTo: function(index) {\n if (this.group && this.group.type !== 'activeSelection') {\n fabric.StaticCanvas.prototype.moveTo.call(this.group, this, index);\n }\n else if (this.canvas) {\n this.canvas.moveTo(this, index);\n }\n return this;\n }\n});\n\n\n/* _TO_SVG_START_ */\n(function() {\n function getSvgColorString(prop, value) {\n if (!value) {\n return prop + ': none; ';\n }\n else if (value.toLive) {\n return prop + ': url(#SVGID_' + value.id + '); ';\n }\n else {\n var color = new fabric.Color(value),\n str = prop + ': ' + color.toRgb() + '; ',\n opacity = color.getAlpha();\n if (opacity !== 1) {\n //change the color in rgb + opacity\n str += prop + '-opacity: ' + opacity.toString() + '; ';\n }\n return str;\n }\n }\n\n var toFixed = fabric.util.toFixed;\n\n fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prototype */ {\n /**\n * Returns styles-string for svg-export\n * @param {Boolean} skipShadow a boolean to skip shadow filter output\n * @return {String}\n */\n getSvgStyles: function(skipShadow) {\n\n var fillRule = this.fillRule ? this.fillRule : 'nonzero',\n strokeWidth = this.strokeWidth ? this.strokeWidth : '0',\n strokeDashArray = this.strokeDashArray ? this.strokeDashArray.join(' ') : 'none',\n strokeDashOffset = this.strokeDashOffset ? this.strokeDashOffset : '0',\n strokeLineCap = this.strokeLineCap ? this.strokeLineCap : 'butt',\n strokeLineJoin = this.strokeLineJoin ? this.strokeLineJoin : 'miter',\n strokeMiterLimit = this.strokeMiterLimit ? this.strokeMiterLimit : '4',\n opacity = typeof this.opacity !== 'undefined' ? this.opacity : '1',\n visibility = this.visible ? '' : ' visibility: hidden;',\n filter = skipShadow ? '' : this.getSvgFilter(),\n fill = getSvgColorString('fill', this.fill),\n stroke = getSvgColorString('stroke', this.stroke);\n\n return [\n stroke,\n 'stroke-width: ', strokeWidth, '; ',\n 'stroke-dasharray: ', strokeDashArray, '; ',\n 'stroke-linecap: ', strokeLineCap, '; ',\n 'stroke-dashoffset: ', strokeDashOffset, '; ',\n 'stroke-linejoin: ', strokeLineJoin, '; ',\n 'stroke-miterlimit: ', strokeMiterLimit, '; ',\n fill,\n 'fill-rule: ', fillRule, '; ',\n 'opacity: ', opacity, ';',\n filter,\n visibility\n ].join('');\n },\n\n /**\n * Returns styles-string for svg-export\n * @param {Object} style the object from which to retrieve style properties\n * @param {Boolean} useWhiteSpace a boolean to include an additional attribute in the style.\n * @return {String}\n */\n getSvgSpanStyles: function(style, useWhiteSpace) {\n var term = '; ';\n var fontFamily = style.fontFamily ?\n 'font-family: ' + (((style.fontFamily.indexOf('\\'') === -1 && style.fontFamily.indexOf('\"') === -1) ?\n '\\'' + style.fontFamily + '\\'' : style.fontFamily)) + term : '';\n var strokeWidth = style.strokeWidth ? 'stroke-width: ' + style.strokeWidth + term : '',\n fontFamily = fontFamily,\n fontSize = style.fontSize ? 'font-size: ' + style.fontSize + 'px' + term : '',\n fontStyle = style.fontStyle ? 'font-style: ' + style.fontStyle + term : '',\n fontWeight = style.fontWeight ? 'font-weight: ' + style.fontWeight + term : '',\n fill = style.fill ? getSvgColorString('fill', style.fill) : '',\n stroke = style.stroke ? getSvgColorString('stroke', style.stroke) : '',\n textDecoration = this.getSvgTextDecoration(style),\n deltaY = style.deltaY ? 'baseline-shift: ' + (-style.deltaY) + '; ' : '';\n if (textDecoration) {\n textDecoration = 'text-decoration: ' + textDecoration + term;\n }\n\n return [\n stroke,\n strokeWidth,\n fontFamily,\n fontSize,\n fontStyle,\n fontWeight,\n textDecoration,\n fill,\n deltaY,\n useWhiteSpace ? 'white-space: pre; ' : ''\n ].join('');\n },\n\n /**\n * Returns text-decoration property for svg-export\n * @param {Object} style the object from which to retrieve style properties\n * @return {String}\n */\n getSvgTextDecoration: function(style) {\n return ['overline', 'underline', 'line-through'].filter(function(decoration) {\n return style[decoration.replace('-', '')];\n }).join(' ');\n },\n\n /**\n * Returns filter for svg shadow\n * @return {String}\n */\n getSvgFilter: function() {\n return this.shadow ? 'filter: url(#SVGID_' + this.shadow.id + ');' : '';\n },\n\n /**\n * Returns id attribute for svg output\n * @return {String}\n */\n getSvgCommons: function() {\n return [\n this.id ? 'id=\"' + this.id + '\" ' : '',\n this.clipPath ? 'clip-path=\"url(#' + this.clipPath.clipPathId + ')\" ' : '',\n ].join('');\n },\n\n /**\n * Returns transform-string for svg-export\n * @param {Boolean} use the full transform or the single object one.\n * @return {String}\n */\n getSvgTransform: function(full, additionalTransform) {\n var transform = full ? this.calcTransformMatrix() : this.calcOwnMatrix(),\n svgTransform = 'transform=\"' + fabric.util.matrixToSVG(transform);\n return svgTransform +\n (additionalTransform || '') + '\" ';\n },\n\n _setSVGBg: function(textBgRects) {\n if (this.backgroundColor) {\n var NUM_FRACTION_DIGITS = fabric.Object.NUM_FRACTION_DIGITS;\n textBgRects.push(\n '\\t\\t\\n');\n }\n },\n\n /**\n * Returns svg representation of an instance\n * @param {Function} [reviver] Method for further parsing of svg representation.\n * @return {String} svg representation of an instance\n */\n toSVG: function(reviver) {\n return this._createBaseSVGMarkup(this._toSVG(reviver), { reviver: reviver });\n },\n\n /**\n * Returns svg clipPath representation of an instance\n * @param {Function} [reviver] Method for further parsing of svg representation.\n * @return {String} svg representation of an instance\n */\n toClipPathSVG: function(reviver) {\n return '\\t' + this._createBaseClipPathSVGMarkup(this._toSVG(reviver), { reviver: reviver });\n },\n\n /**\n * @private\n */\n _createBaseClipPathSVGMarkup: function(objectMarkup, options) {\n options = options || {};\n var reviver = options.reviver,\n additionalTransform = options.additionalTransform || '',\n commonPieces = [\n this.getSvgTransform(true, additionalTransform),\n this.getSvgCommons(),\n ].join(''),\n // insert commons in the markup, style and svgCommons\n index = objectMarkup.indexOf('COMMON_PARTS');\n objectMarkup[index] = commonPieces;\n return reviver ? reviver(objectMarkup.join('')) : objectMarkup.join('');\n },\n\n /**\n * @private\n */\n _createBaseSVGMarkup: function(objectMarkup, options) {\n options = options || {};\n var noStyle = options.noStyle,\n reviver = options.reviver,\n styleInfo = noStyle ? '' : 'style=\"' + this.getSvgStyles() + '\" ',\n shadowInfo = options.withShadow ? 'style=\"' + this.getSvgFilter() + '\" ' : '',\n clipPath = this.clipPath,\n vectorEffect = this.strokeUniform ? 'vector-effect=\"non-scaling-stroke\" ' : '',\n absoluteClipPath = clipPath && clipPath.absolutePositioned,\n stroke = this.stroke, fill = this.fill, shadow = this.shadow,\n commonPieces, markup = [], clipPathMarkup,\n // insert commons in the markup, style and svgCommons\n index = objectMarkup.indexOf('COMMON_PARTS'),\n additionalTransform = options.additionalTransform;\n if (clipPath) {\n clipPath.clipPathId = 'CLIPPATH_' + fabric.Object.__uid++;\n clipPathMarkup = '\\n' +\n clipPath.toClipPathSVG(reviver) +\n '\\n';\n }\n if (absoluteClipPath) {\n markup.push(\n '\\n'\n );\n }\n markup.push(\n '\\n'\n );\n commonPieces = [\n styleInfo,\n vectorEffect,\n noStyle ? '' : this.addPaintOrder(), ' ',\n additionalTransform ? 'transform=\"' + additionalTransform + '\" ' : '',\n ].join('');\n objectMarkup[index] = commonPieces;\n if (fill && fill.toLive) {\n markup.push(fill.toSVG(this));\n }\n if (stroke && stroke.toLive) {\n markup.push(stroke.toSVG(this));\n }\n if (shadow) {\n markup.push(shadow.toSVG(this));\n }\n if (clipPath) {\n markup.push(clipPathMarkup);\n }\n markup.push(objectMarkup.join(''));\n markup.push('\\n');\n absoluteClipPath && markup.push('\\n');\n return reviver ? reviver(markup.join('')) : markup.join('');\n },\n\n addPaintOrder: function() {\n return this.paintFirst !== 'fill' ? ' paint-order=\"' + this.paintFirst + '\" ' : '';\n }\n });\n})();\n/* _TO_SVG_END_ */\n\n\n(function() {\n\n var extend = fabric.util.object.extend,\n originalSet = 'stateProperties';\n\n /*\n Depends on `stateProperties`\n */\n function saveProps(origin, destination, props) {\n var tmpObj = { }, deep = true;\n props.forEach(function(prop) {\n tmpObj[prop] = origin[prop];\n });\n\n extend(origin[destination], tmpObj, deep);\n }\n\n function _isEqual(origValue, currentValue, firstPass) {\n if (origValue === currentValue) {\n // if the objects are identical, return\n return true;\n }\n else if (Array.isArray(origValue)) {\n if (!Array.isArray(currentValue) || origValue.length !== currentValue.length) {\n return false;\n }\n for (var i = 0, len = origValue.length; i < len; i++) {\n if (!_isEqual(origValue[i], currentValue[i])) {\n return false;\n }\n }\n return true;\n }\n else if (origValue && typeof origValue === 'object') {\n var keys = Object.keys(origValue), key;\n if (!currentValue ||\n typeof currentValue !== 'object' ||\n (!firstPass && keys.length !== Object.keys(currentValue).length)\n ) {\n return false;\n }\n for (var i = 0, len = keys.length; i < len; i++) {\n key = keys[i];\n // since clipPath is in the statefull cache list and the clipPath objects\n // would be iterated as an object, this would lead to possible infinite recursion\n // we do not want to compare those.\n if (key === 'canvas' || key === 'group') {\n continue;\n }\n if (!_isEqual(origValue[key], currentValue[key])) {\n return false;\n }\n }\n return true;\n }\n }\n\n\n fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prototype */ {\n\n /**\n * Returns true if object state (one of its state properties) was changed\n * @param {String} [propertySet] optional name for the set of property we want to save\n * @return {Boolean} true if instance' state has changed since `{@link fabric.Object#saveState}` was called\n */\n hasStateChanged: function(propertySet) {\n propertySet = propertySet || originalSet;\n var dashedPropertySet = '_' + propertySet;\n if (Object.keys(this[dashedPropertySet]).length < this[propertySet].length) {\n return true;\n }\n return !_isEqual(this[dashedPropertySet], this, true);\n },\n\n /**\n * Saves state of an object\n * @param {Object} [options] Object with additional `stateProperties` array to include when saving state\n * @return {fabric.Object} thisArg\n */\n saveState: function(options) {\n var propertySet = options && options.propertySet || originalSet,\n destination = '_' + propertySet;\n if (!this[destination]) {\n return this.setupState(options);\n }\n saveProps(this, destination, this[propertySet]);\n if (options && options.stateProperties) {\n saveProps(this, destination, options.stateProperties);\n }\n return this;\n },\n\n /**\n * Setups state of an object\n * @param {Object} [options] Object with additional `stateProperties` array to include when saving state\n * @return {fabric.Object} thisArg\n */\n setupState: function(options) {\n options = options || { };\n var propertySet = options.propertySet || originalSet;\n options.propertySet = propertySet;\n this['_' + propertySet] = { };\n this.saveState(options);\n return this;\n }\n });\n})();\n\n\n(function() {\n\n var degreesToRadians = fabric.util.degreesToRadians;\n\n fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prototype */ {\n /**\n * Determines which corner has been clicked\n * @private\n * @param {Object} pointer The pointer indicating the mouse position\n * @return {String|Boolean} corner code (tl, tr, bl, br, etc.), or false if nothing is found\n */\n _findTargetCorner: function(pointer, forTouch) {\n // objects in group, anykind, are not self modificable,\n // must not return an hovered corner.\n if (!this.hasControls || this.group || (!this.canvas || this.canvas._activeObject !== this)) {\n return false;\n }\n\n var ex = pointer.x,\n ey = pointer.y,\n xPoints,\n lines, keys = Object.keys(this.oCoords),\n j = keys.length - 1, i;\n this.__corner = 0;\n\n // cycle in reverse order so we pick first the one on top\n for (; j >= 0; j--) {\n i = keys[j];\n if (!this.isControlVisible(i)) {\n continue;\n }\n\n lines = this._getImageLines(forTouch ? this.oCoords[i].touchCorner : this.oCoords[i].corner);\n // // debugging\n //\n // this.canvas.contextTop.fillRect(lines.bottomline.d.x, lines.bottomline.d.y, 2, 2);\n // this.canvas.contextTop.fillRect(lines.bottomline.o.x, lines.bottomline.o.y, 2, 2);\n //\n // this.canvas.contextTop.fillRect(lines.leftline.d.x, lines.leftline.d.y, 2, 2);\n // this.canvas.contextTop.fillRect(lines.leftline.o.x, lines.leftline.o.y, 2, 2);\n //\n // this.canvas.contextTop.fillRect(lines.topline.d.x, lines.topline.d.y, 2, 2);\n // this.canvas.contextTop.fillRect(lines.topline.o.x, lines.topline.o.y, 2, 2);\n //\n // this.canvas.contextTop.fillRect(lines.rightline.d.x, lines.rightline.d.y, 2, 2);\n // this.canvas.contextTop.fillRect(lines.rightline.o.x, lines.rightline.o.y, 2, 2);\n\n xPoints = this._findCrossPoints({ x: ex, y: ey }, lines);\n if (xPoints !== 0 && xPoints % 2 === 1) {\n this.__corner = i;\n return i;\n }\n }\n return false;\n },\n\n /**\n * Calls a function for each control. The function gets called,\n * with the control, the object that is calling the iterator and the control's key\n * @param {Function} fn function to iterate over the controls over\n */\n forEachControl: function(fn) {\n for (var i in this.controls) {\n fn(this.controls[i], i, this);\n };\n },\n\n /**\n * Sets the coordinates of the draggable boxes in the corners of\n * the image used to scale/rotate it.\n * note: if we would switch to ROUND corner area, all of this would disappear.\n * everything would resolve to a single point and a pythagorean theorem for the distance\n * @private\n */\n _setCornerCoords: function() {\n var coords = this.oCoords;\n\n for (var control in coords) {\n var controlObject = this.controls[control];\n coords[control].corner = controlObject.calcCornerCoords(\n this.angle, this.cornerSize, coords[control].x, coords[control].y, false);\n coords[control].touchCorner = controlObject.calcCornerCoords(\n this.angle, this.touchCornerSize, coords[control].x, coords[control].y, true);\n }\n },\n\n /**\n * Draws a colored layer behind the object, inside its selection borders.\n * Requires public options: padding, selectionBackgroundColor\n * this function is called when the context is transformed\n * has checks to be skipped when the object is on a staticCanvas\n * @param {CanvasRenderingContext2D} ctx Context to draw on\n * @return {fabric.Object} thisArg\n * @chainable\n */\n drawSelectionBackground: function(ctx) {\n if (!this.selectionBackgroundColor ||\n (this.canvas && !this.canvas.interactive) ||\n (this.canvas && this.canvas._activeObject !== this)\n ) {\n return this;\n }\n ctx.save();\n var center = this.getCenterPoint(), wh = this._calculateCurrentDimensions(),\n vpt = this.canvas.viewportTransform;\n ctx.translate(center.x, center.y);\n ctx.scale(1 / vpt[0], 1 / vpt[3]);\n ctx.rotate(degreesToRadians(this.angle));\n ctx.fillStyle = this.selectionBackgroundColor;\n ctx.fillRect(-wh.x / 2, -wh.y / 2, wh.x, wh.y);\n ctx.restore();\n return this;\n },\n\n /**\n * Draws borders of an object's bounding box.\n * Requires public properties: width, height\n * Requires public options: padding, borderColor\n * @param {CanvasRenderingContext2D} ctx Context to draw on\n * @param {Object} styleOverride object to override the object style\n * @return {fabric.Object} thisArg\n * @chainable\n */\n drawBorders: function(ctx, styleOverride) {\n styleOverride = styleOverride || {};\n var wh = this._calculateCurrentDimensions(),\n strokeWidth = this.borderScaleFactor,\n width = wh.x + strokeWidth,\n height = wh.y + strokeWidth,\n hasControls = typeof styleOverride.hasControls !== 'undefined' ?\n styleOverride.hasControls : this.hasControls,\n shouldStroke = false;\n\n ctx.save();\n ctx.strokeStyle = styleOverride.borderColor || this.borderColor;\n this._setLineDash(ctx, styleOverride.borderDashArray || this.borderDashArray);\n\n ctx.strokeRect(\n -width / 2,\n -height / 2,\n width,\n height\n );\n\n if (hasControls) {\n ctx.beginPath();\n this.forEachControl(function(control, key, fabricObject) {\n // in this moment, the ctx is centered on the object.\n // width and height of the above function are the size of the bbox.\n if (control.withConnection && control.getVisibility(fabricObject, key)) {\n // reset movement for each control\n shouldStroke = true;\n ctx.moveTo(control.x * width, control.y * height);\n ctx.lineTo(\n control.x * width + control.offsetX,\n control.y * height + control.offsetY\n );\n }\n });\n if (shouldStroke) {\n ctx.stroke();\n }\n }\n ctx.restore();\n return this;\n },\n\n /**\n * Draws borders of an object's bounding box when it is inside a group.\n * Requires public properties: width, height\n * Requires public options: padding, borderColor\n * @param {CanvasRenderingContext2D} ctx Context to draw on\n * @param {object} options object representing current object parameters\n * @param {Object} styleOverride object to override the object style\n * @return {fabric.Object} thisArg\n * @chainable\n */\n drawBordersInGroup: function(ctx, options, styleOverride) {\n styleOverride = styleOverride || {};\n var bbox = fabric.util.sizeAfterTransform(this.width, this.height, options),\n strokeWidth = this.strokeWidth,\n strokeUniform = this.strokeUniform,\n borderScaleFactor = this.borderScaleFactor,\n width =\n bbox.x + strokeWidth * (strokeUniform ? this.canvas.getZoom() : options.scaleX) + borderScaleFactor,\n height =\n bbox.y + strokeWidth * (strokeUniform ? this.canvas.getZoom() : options.scaleY) + borderScaleFactor;\n ctx.save();\n this._setLineDash(ctx, styleOverride.borderDashArray || this.borderDashArray);\n ctx.strokeStyle = styleOverride.borderColor || this.borderColor;\n ctx.strokeRect(\n -width / 2,\n -height / 2,\n width,\n height\n );\n\n ctx.restore();\n return this;\n },\n\n /**\n * Draws corners of an object's bounding box.\n * Requires public properties: width, height\n * Requires public options: cornerSize, padding\n * @param {CanvasRenderingContext2D} ctx Context to draw on\n * @param {Object} styleOverride object to override the object style\n * @return {fabric.Object} thisArg\n * @chainable\n */\n drawControls: function(ctx, styleOverride) {\n styleOverride = styleOverride || {};\n ctx.save();\n var retinaScaling = this.canvas.getRetinaScaling(), matrix, p;\n ctx.setTransform(retinaScaling, 0, 0, retinaScaling, 0, 0);\n ctx.strokeStyle = ctx.fillStyle = styleOverride.cornerColor || this.cornerColor;\n if (!this.transparentCorners) {\n ctx.strokeStyle = styleOverride.cornerStrokeColor || this.cornerStrokeColor;\n }\n this._setLineDash(ctx, styleOverride.cornerDashArray || this.cornerDashArray);\n this.setCoords();\n if (this.group) {\n // fabricJS does not really support drawing controls inside groups,\n // this piece of code here helps having at least the control in places.\n // If an application needs to show some objects as selected because of some UI state\n // can still call Object._renderControls() on any object they desire, independently of groups.\n // using no padding, circular controls and hiding the rotating cursor is higly suggested,\n matrix = this.group.calcTransformMatrix();\n }\n this.forEachControl(function(control, key, fabricObject) {\n p = fabricObject.oCoords[key];\n if (control.getVisibility(fabricObject, key)) {\n if (matrix) {\n p = fabric.util.transformPoint(p, matrix);\n }\n control.render(ctx, p.x, p.y, styleOverride, fabricObject);\n }\n });\n ctx.restore();\n\n return this;\n },\n\n /**\n * Returns true if the specified control is visible, false otherwise.\n * @param {String} controlKey The key of the control. Possible values are 'tl', 'tr', 'br', 'bl', 'ml', 'mt', 'mr', 'mb', 'mtr'.\n * @returns {Boolean} true if the specified control is visible, false otherwise\n */\n isControlVisible: function(controlKey) {\n return this.controls[controlKey] && this.controls[controlKey].getVisibility(this, controlKey);\n },\n\n /**\n * Sets the visibility of the specified control.\n * @param {String} controlKey The key of the control. Possible values are 'tl', 'tr', 'br', 'bl', 'ml', 'mt', 'mr', 'mb', 'mtr'.\n * @param {Boolean} visible true to set the specified control visible, false otherwise\n * @return {fabric.Object} thisArg\n * @chainable\n */\n setControlVisible: function(controlKey, visible) {\n if (!this._controlsVisibility) {\n this._controlsVisibility = {};\n }\n this._controlsVisibility[controlKey] = visible;\n return this;\n },\n\n /**\n * Sets the visibility state of object controls.\n * @param {Object} [options] Options object\n * @param {Boolean} [options.bl] true to enable the bottom-left control, false to disable it\n * @param {Boolean} [options.br] true to enable the bottom-right control, false to disable it\n * @param {Boolean} [options.mb] true to enable the middle-bottom control, false to disable it\n * @param {Boolean} [options.ml] true to enable the middle-left control, false to disable it\n * @param {Boolean} [options.mr] true to enable the middle-right control, false to disable it\n * @param {Boolean} [options.mt] true to enable the middle-top control, false to disable it\n * @param {Boolean} [options.tl] true to enable the top-left control, false to disable it\n * @param {Boolean} [options.tr] true to enable the top-right control, false to disable it\n * @param {Boolean} [options.mtr] true to enable the middle-top-rotate control, false to disable it\n * @return {fabric.Object} thisArg\n * @chainable\n */\n setControlsVisibility: function(options) {\n options || (options = { });\n\n for (var p in options) {\n this.setControlVisible(p, options[p]);\n }\n return this;\n },\n\n\n /**\n * This callback function is called every time _discardActiveObject or _setActiveObject\n * try to to deselect this object. If the function returns true, the process is cancelled\n * @param {Object} [options] options sent from the upper functions\n * @param {Event} [options.e] event if the process is generated by an event\n */\n onDeselect: function() {\n // implemented by sub-classes, as needed.\n },\n\n\n /**\n * This callback function is called every time _discardActiveObject or _setActiveObject\n * try to to select this object. If the function returns true, the process is cancelled\n * @param {Object} [options] options sent from the upper functions\n * @param {Event} [options.e] event if the process is generated by an event\n */\n onSelect: function() {\n // implemented by sub-classes, as needed.\n }\n });\n})();\n\n\nfabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.StaticCanvas.prototype */ {\n\n /**\n * Animation duration (in ms) for fx* methods\n * @type Number\n * @default\n */\n FX_DURATION: 500,\n\n /**\n * Centers object horizontally with animation.\n * @param {fabric.Object} object Object to center\n * @param {Object} [callbacks] Callbacks object with optional \"onComplete\" and/or \"onChange\" properties\n * @param {Function} [callbacks.onComplete] Invoked on completion\n * @param {Function} [callbacks.onChange] Invoked on every step of animation\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n fxCenterObjectH: function (object, callbacks) {\n callbacks = callbacks || { };\n\n var empty = function() { },\n onComplete = callbacks.onComplete || empty,\n onChange = callbacks.onChange || empty,\n _this = this;\n\n fabric.util.animate({\n startValue: object.left,\n endValue: this.getCenter().left,\n duration: this.FX_DURATION,\n onChange: function(value) {\n object.set('left', value);\n _this.requestRenderAll();\n onChange();\n },\n onComplete: function() {\n object.setCoords();\n onComplete();\n }\n });\n\n return this;\n },\n\n /**\n * Centers object vertically with animation.\n * @param {fabric.Object} object Object to center\n * @param {Object} [callbacks] Callbacks object with optional \"onComplete\" and/or \"onChange\" properties\n * @param {Function} [callbacks.onComplete] Invoked on completion\n * @param {Function} [callbacks.onChange] Invoked on every step of animation\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n fxCenterObjectV: function (object, callbacks) {\n callbacks = callbacks || { };\n\n var empty = function() { },\n onComplete = callbacks.onComplete || empty,\n onChange = callbacks.onChange || empty,\n _this = this;\n\n fabric.util.animate({\n startValue: object.top,\n endValue: this.getCenter().top,\n duration: this.FX_DURATION,\n onChange: function(value) {\n object.set('top', value);\n _this.requestRenderAll();\n onChange();\n },\n onComplete: function() {\n object.setCoords();\n onComplete();\n }\n });\n\n return this;\n },\n\n /**\n * Same as `fabric.Canvas#remove` but animated\n * @param {fabric.Object} object Object to remove\n * @param {Object} [callbacks] Callbacks object with optional \"onComplete\" and/or \"onChange\" properties\n * @param {Function} [callbacks.onComplete] Invoked on completion\n * @param {Function} [callbacks.onChange] Invoked on every step of animation\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n fxRemove: function (object, callbacks) {\n callbacks = callbacks || { };\n\n var empty = function() { },\n onComplete = callbacks.onComplete || empty,\n onChange = callbacks.onChange || empty,\n _this = this;\n\n fabric.util.animate({\n startValue: object.opacity,\n endValue: 0,\n duration: this.FX_DURATION,\n onChange: function(value) {\n object.set('opacity', value);\n _this.requestRenderAll();\n onChange();\n },\n onComplete: function () {\n _this.remove(object);\n onComplete();\n }\n });\n\n return this;\n }\n});\n\nfabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prototype */ {\n /**\n * Animates object's properties\n * @param {String|Object} property Property to animate (if string) or properties to animate (if object)\n * @param {Number|Object} value Value to animate property to (if string was given first) or options object\n * @return {fabric.Object} thisArg\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-2#animation}\n * @chainable\n *\n * As object — multiple properties\n *\n * object.animate({ left: ..., top: ... });\n * object.animate({ left: ..., top: ... }, { duration: ... });\n *\n * As string — one property\n *\n * object.animate('left', ...);\n * object.animate('left', { duration: ... });\n *\n */\n animate: function() {\n if (arguments[0] && typeof arguments[0] === 'object') {\n var propsToAnimate = [], prop, skipCallbacks;\n for (prop in arguments[0]) {\n propsToAnimate.push(prop);\n }\n for (var i = 0, len = propsToAnimate.length; i < len; i++) {\n prop = propsToAnimate[i];\n skipCallbacks = i !== len - 1;\n this._animate(prop, arguments[0][prop], arguments[1], skipCallbacks);\n }\n }\n else {\n this._animate.apply(this, arguments);\n }\n return this;\n },\n\n /**\n * @private\n * @param {String} property Property to animate\n * @param {String} to Value to animate to\n * @param {Object} [options] Options object\n * @param {Boolean} [skipCallbacks] When true, callbacks like onchange and oncomplete are not invoked\n */\n _animate: function(property, to, options, skipCallbacks) {\n var _this = this, propPair;\n\n to = to.toString();\n\n if (!options) {\n options = { };\n }\n else {\n options = fabric.util.object.clone(options);\n }\n\n if (~property.indexOf('.')) {\n propPair = property.split('.');\n }\n\n var propIsColor =\n _this.colorProperties.indexOf(property) > -1 ||\n (propPair && _this.colorProperties.indexOf(propPair[1]) > -1);\n\n var currentValue = propPair\n ? this.get(propPair[0])[propPair[1]]\n : this.get(property);\n\n if (!('from' in options)) {\n options.from = currentValue;\n }\n\n if (!propIsColor) {\n if (~to.indexOf('=')) {\n to = currentValue + parseFloat(to.replace('=', ''));\n }\n else {\n to = parseFloat(to);\n }\n }\n\n var _options = {\n startValue: options.from,\n endValue: to,\n byValue: options.by,\n easing: options.easing,\n duration: options.duration,\n abort: options.abort && function(value, valueProgress, timeProgress) {\n return options.abort.call(_this, value, valueProgress, timeProgress);\n },\n onChange: function (value, valueProgress, timeProgress) {\n if (propPair) {\n _this[propPair[0]][propPair[1]] = value;\n }\n else {\n _this.set(property, value);\n }\n if (skipCallbacks) {\n return;\n }\n options.onChange && options.onChange(value, valueProgress, timeProgress);\n },\n onComplete: function (value, valueProgress, timeProgress) {\n if (skipCallbacks) {\n return;\n }\n\n _this.setCoords();\n options.onComplete && options.onComplete(value, valueProgress, timeProgress);\n }\n };\n\n if (propIsColor) {\n return fabric.util.animateColor(_options.startValue, _options.endValue, _options.duration, _options);\n }\n else {\n return fabric.util.animate(_options);\n }\n }\n});\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n extend = fabric.util.object.extend,\n clone = fabric.util.object.clone,\n coordProps = { x1: 1, x2: 1, y1: 1, y2: 1 };\n\n if (fabric.Line) {\n fabric.warn('fabric.Line is already defined');\n return;\n }\n\n /**\n * Line class\n * @class fabric.Line\n * @extends fabric.Object\n * @see {@link fabric.Line#initialize} for constructor definition\n */\n fabric.Line = fabric.util.createClass(fabric.Object, /** @lends fabric.Line.prototype */ {\n\n /**\n * Type of an object\n * @type String\n * @default\n */\n type: 'line',\n\n /**\n * x value or first line edge\n * @type Number\n * @default\n */\n x1: 0,\n\n /**\n * y value or first line edge\n * @type Number\n * @default\n */\n y1: 0,\n\n /**\n * x value or second line edge\n * @type Number\n * @default\n */\n x2: 0,\n\n /**\n * y value or second line edge\n * @type Number\n * @default\n */\n y2: 0,\n\n cacheProperties: fabric.Object.prototype.cacheProperties.concat('x1', 'x2', 'y1', 'y2'),\n\n /**\n * Constructor\n * @param {Array} [points] Array of points\n * @param {Object} [options] Options object\n * @return {fabric.Line} thisArg\n */\n initialize: function(points, options) {\n if (!points) {\n points = [0, 0, 0, 0];\n }\n\n this.callSuper('initialize', options);\n\n this.set('x1', points[0]);\n this.set('y1', points[1]);\n this.set('x2', points[2]);\n this.set('y2', points[3]);\n\n this._setWidthHeight(options);\n },\n\n /**\n * @private\n * @param {Object} [options] Options\n */\n _setWidthHeight: function(options) {\n options || (options = { });\n\n this.width = Math.abs(this.x2 - this.x1);\n this.height = Math.abs(this.y2 - this.y1);\n\n this.left = 'left' in options\n ? options.left\n : this._getLeftToOriginX();\n\n this.top = 'top' in options\n ? options.top\n : this._getTopToOriginY();\n },\n\n /**\n * @private\n * @param {String} key\n * @param {*} value\n */\n _set: function(key, value) {\n this.callSuper('_set', key, value);\n if (typeof coordProps[key] !== 'undefined') {\n this._setWidthHeight();\n }\n return this;\n },\n\n /**\n * @private\n * @return {Number} leftToOriginX Distance from left edge of canvas to originX of Line.\n */\n _getLeftToOriginX: makeEdgeToOriginGetter(\n { // property names\n origin: 'originX',\n axis1: 'x1',\n axis2: 'x2',\n dimension: 'width'\n },\n { // possible values of origin\n nearest: 'left',\n center: 'center',\n farthest: 'right'\n }\n ),\n\n /**\n * @private\n * @return {Number} topToOriginY Distance from top edge of canvas to originY of Line.\n */\n _getTopToOriginY: makeEdgeToOriginGetter(\n { // property names\n origin: 'originY',\n axis1: 'y1',\n axis2: 'y2',\n dimension: 'height'\n },\n { // possible values of origin\n nearest: 'top',\n center: 'center',\n farthest: 'bottom'\n }\n ),\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render: function(ctx) {\n ctx.beginPath();\n\n\n var p = this.calcLinePoints();\n ctx.moveTo(p.x1, p.y1);\n ctx.lineTo(p.x2, p.y2);\n\n ctx.lineWidth = this.strokeWidth;\n\n // TODO: test this\n // make sure setting \"fill\" changes color of a line\n // (by copying fillStyle to strokeStyle, since line is stroked, not filled)\n var origStrokeStyle = ctx.strokeStyle;\n ctx.strokeStyle = this.stroke || ctx.fillStyle;\n this.stroke && this._renderStroke(ctx);\n ctx.strokeStyle = origStrokeStyle;\n },\n\n /**\n * This function is an helper for svg import. it returns the center of the object in the svg\n * untransformed coordinates\n * @private\n * @return {Object} center point from element coordinates\n */\n _findCenterFromElement: function() {\n return {\n x: (this.x1 + this.x2) / 2,\n y: (this.y1 + this.y2) / 2,\n };\n },\n\n /**\n * Returns object representation of an instance\n * @method toObject\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject: function(propertiesToInclude) {\n return extend(this.callSuper('toObject', propertiesToInclude), this.calcLinePoints());\n },\n\n /*\n * Calculate object dimensions from its properties\n * @private\n */\n _getNonTransformedDimensions: function() {\n var dim = this.callSuper('_getNonTransformedDimensions');\n if (this.strokeLineCap === 'butt') {\n if (this.width === 0) {\n dim.y -= this.strokeWidth;\n }\n if (this.height === 0) {\n dim.x -= this.strokeWidth;\n }\n }\n return dim;\n },\n\n /**\n * Recalculates line points given width and height\n * @private\n */\n calcLinePoints: function() {\n var xMult = this.x1 <= this.x2 ? -1 : 1,\n yMult = this.y1 <= this.y2 ? -1 : 1,\n x1 = (xMult * this.width * 0.5),\n y1 = (yMult * this.height * 0.5),\n x2 = (xMult * this.width * -0.5),\n y2 = (yMult * this.height * -0.5);\n\n return {\n x1: x1,\n x2: x2,\n y1: y1,\n y2: y2\n };\n },\n\n /* _TO_SVG_START_ */\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG: function() {\n var p = this.calcLinePoints();\n return [\n '\\n'\n ];\n },\n /* _TO_SVG_END_ */\n });\n\n /* _FROM_SVG_START_ */\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link fabric.Line.fromElement})\n * @static\n * @memberOf fabric.Line\n * @see http://www.w3.org/TR/SVG/shapes.html#LineElement\n */\n fabric.Line.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat('x1 y1 x2 y2'.split(' '));\n\n /**\n * Returns fabric.Line instance from an SVG element\n * @static\n * @memberOf fabric.Line\n * @param {SVGElement} element Element to parse\n * @param {Object} [options] Options object\n * @param {Function} [callback] callback function invoked after parsing\n */\n fabric.Line.fromElement = function(element, callback, options) {\n options = options || { };\n var parsedAttributes = fabric.parseAttributes(element, fabric.Line.ATTRIBUTE_NAMES),\n points = [\n parsedAttributes.x1 || 0,\n parsedAttributes.y1 || 0,\n parsedAttributes.x2 || 0,\n parsedAttributes.y2 || 0\n ];\n callback(new fabric.Line(points, extend(parsedAttributes, options)));\n };\n /* _FROM_SVG_END_ */\n\n /**\n * Returns fabric.Line instance from an object representation\n * @static\n * @memberOf fabric.Line\n * @param {Object} object Object to create an instance from\n * @param {function} [callback] invoked with new instance as first argument\n */\n fabric.Line.fromObject = function(object, callback) {\n function _callback(instance) {\n delete instance.points;\n callback && callback(instance);\n };\n var options = clone(object, true);\n options.points = [object.x1, object.y1, object.x2, object.y2];\n fabric.Object._fromObject('Line', options, _callback, 'points');\n };\n\n /**\n * Produces a function that calculates distance from canvas edge to Line origin.\n */\n function makeEdgeToOriginGetter(propertyNames, originValues) {\n var origin = propertyNames.origin,\n axis1 = propertyNames.axis1,\n axis2 = propertyNames.axis2,\n dimension = propertyNames.dimension,\n nearest = originValues.nearest,\n center = originValues.center,\n farthest = originValues.farthest;\n\n return function() {\n switch (this.get(origin)) {\n case nearest:\n return Math.min(this.get(axis1), this.get(axis2));\n case center:\n return Math.min(this.get(axis1), this.get(axis2)) + (0.5 * this.get(dimension));\n case farthest:\n return Math.max(this.get(axis1), this.get(axis2));\n }\n };\n\n }\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n pi = Math.PI;\n\n if (fabric.Circle) {\n fabric.warn('fabric.Circle is already defined.');\n return;\n }\n\n /**\n * Circle class\n * @class fabric.Circle\n * @extends fabric.Object\n * @see {@link fabric.Circle#initialize} for constructor definition\n */\n fabric.Circle = fabric.util.createClass(fabric.Object, /** @lends fabric.Circle.prototype */ {\n\n /**\n * Type of an object\n * @type String\n * @default\n */\n type: 'circle',\n\n /**\n * Radius of this circle\n * @type Number\n * @default\n */\n radius: 0,\n\n /**\n * Start angle of the circle, moving clockwise\n * deprecated type, this should be in degree, this was an oversight.\n * probably will change to degrees in next major version\n * @type Number\n * @default 0\n */\n startAngle: 0,\n\n /**\n * End angle of the circle\n * deprecated type, this should be in degree, this was an oversight.\n * probably will change to degrees in next major version\n * @type Number\n * @default 2Pi\n */\n endAngle: pi * 2,\n\n cacheProperties: fabric.Object.prototype.cacheProperties.concat('radius', 'startAngle', 'endAngle'),\n\n /**\n * @private\n * @param {String} key\n * @param {*} value\n * @return {fabric.Circle} thisArg\n */\n _set: function(key, value) {\n this.callSuper('_set', key, value);\n\n if (key === 'radius') {\n this.setRadius(value);\n }\n\n return this;\n },\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject: function(propertiesToInclude) {\n return this.callSuper('toObject', ['radius', 'startAngle', 'endAngle'].concat(propertiesToInclude));\n },\n\n /* _TO_SVG_START_ */\n\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG: function() {\n var svgString, x = 0, y = 0,\n angle = (this.endAngle - this.startAngle) % ( 2 * pi);\n\n if (angle === 0) {\n svgString = [\n '\\n'\n ];\n }\n else {\n var startX = fabric.util.cos(this.startAngle) * this.radius,\n startY = fabric.util.sin(this.startAngle) * this.radius,\n endX = fabric.util.cos(this.endAngle) * this.radius,\n endY = fabric.util.sin(this.endAngle) * this.radius,\n largeFlag = angle > pi ? '1' : '0';\n svgString = [\n '\\n'\n ];\n }\n return svgString;\n },\n /* _TO_SVG_END_ */\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx context to render on\n */\n _render: function(ctx) {\n ctx.beginPath();\n ctx.arc(\n 0,\n 0,\n this.radius,\n this.startAngle,\n this.endAngle, false);\n this._renderPaintInOrder(ctx);\n },\n\n /**\n * Returns horizontal radius of an object (according to how an object is scaled)\n * @return {Number}\n */\n getRadiusX: function() {\n return this.get('radius') * this.get('scaleX');\n },\n\n /**\n * Returns vertical radius of an object (according to how an object is scaled)\n * @return {Number}\n */\n getRadiusY: function() {\n return this.get('radius') * this.get('scaleY');\n },\n\n /**\n * Sets radius of an object (and updates width accordingly)\n * @return {fabric.Circle} thisArg\n */\n setRadius: function(value) {\n this.radius = value;\n return this.set('width', value * 2).set('height', value * 2);\n },\n });\n\n /* _FROM_SVG_START_ */\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link fabric.Circle.fromElement})\n * @static\n * @memberOf fabric.Circle\n * @see: http://www.w3.org/TR/SVG/shapes.html#CircleElement\n */\n fabric.Circle.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat('cx cy r'.split(' '));\n\n /**\n * Returns {@link fabric.Circle} instance from an SVG element\n * @static\n * @memberOf fabric.Circle\n * @param {SVGElement} element Element to parse\n * @param {Function} [callback] Options callback invoked after parsing is finished\n * @param {Object} [options] Options object\n * @throws {Error} If value of `r` attribute is missing or invalid\n */\n fabric.Circle.fromElement = function(element, callback) {\n var parsedAttributes = fabric.parseAttributes(element, fabric.Circle.ATTRIBUTE_NAMES);\n\n if (!isValidRadius(parsedAttributes)) {\n throw new Error('value of `r` attribute is required and can not be negative');\n }\n\n parsedAttributes.left = (parsedAttributes.left || 0) - parsedAttributes.radius;\n parsedAttributes.top = (parsedAttributes.top || 0) - parsedAttributes.radius;\n callback(new fabric.Circle(parsedAttributes));\n };\n\n /**\n * @private\n */\n function isValidRadius(attributes) {\n return (('radius' in attributes) && (attributes.radius >= 0));\n }\n /* _FROM_SVG_END_ */\n\n /**\n * Returns {@link fabric.Circle} instance from an object representation\n * @static\n * @memberOf fabric.Circle\n * @param {Object} object Object to create an instance from\n * @param {function} [callback] invoked with new instance as first argument\n * @return {void}\n */\n fabric.Circle.fromObject = function(object, callback) {\n fabric.Object._fromObject('Circle', object, callback);\n };\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { });\n\n if (fabric.Triangle) {\n fabric.warn('fabric.Triangle is already defined');\n return;\n }\n\n /**\n * Triangle class\n * @class fabric.Triangle\n * @extends fabric.Object\n * @return {fabric.Triangle} thisArg\n * @see {@link fabric.Triangle#initialize} for constructor definition\n */\n fabric.Triangle = fabric.util.createClass(fabric.Object, /** @lends fabric.Triangle.prototype */ {\n\n /**\n * Type of an object\n * @type String\n * @default\n */\n type: 'triangle',\n\n /**\n * Width is set to 100 to compensate the old initialize code that was setting it to 100\n * @type Number\n * @default\n */\n width: 100,\n\n /**\n * Height is set to 100 to compensate the old initialize code that was setting it to 100\n * @type Number\n * @default\n */\n height: 100,\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render: function(ctx) {\n var widthBy2 = this.width / 2,\n heightBy2 = this.height / 2;\n\n ctx.beginPath();\n ctx.moveTo(-widthBy2, heightBy2);\n ctx.lineTo(0, -heightBy2);\n ctx.lineTo(widthBy2, heightBy2);\n ctx.closePath();\n\n this._renderPaintInOrder(ctx);\n },\n\n /* _TO_SVG_START_ */\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG: function() {\n var widthBy2 = this.width / 2,\n heightBy2 = this.height / 2,\n points = [\n -widthBy2 + ' ' + heightBy2,\n '0 ' + -heightBy2,\n widthBy2 + ' ' + heightBy2\n ].join(',');\n return [\n ''\n ];\n },\n /* _TO_SVG_END_ */\n });\n\n /**\n * Returns {@link fabric.Triangle} instance from an object representation\n * @static\n * @memberOf fabric.Triangle\n * @param {Object} object Object to create an instance from\n * @param {function} [callback] invoked with new instance as first argument\n */\n fabric.Triangle.fromObject = function(object, callback) {\n return fabric.Object._fromObject('Triangle', object, callback);\n };\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n piBy2 = Math.PI * 2;\n\n if (fabric.Ellipse) {\n fabric.warn('fabric.Ellipse is already defined.');\n return;\n }\n\n /**\n * Ellipse class\n * @class fabric.Ellipse\n * @extends fabric.Object\n * @return {fabric.Ellipse} thisArg\n * @see {@link fabric.Ellipse#initialize} for constructor definition\n */\n fabric.Ellipse = fabric.util.createClass(fabric.Object, /** @lends fabric.Ellipse.prototype */ {\n\n /**\n * Type of an object\n * @type String\n * @default\n */\n type: 'ellipse',\n\n /**\n * Horizontal radius\n * @type Number\n * @default\n */\n rx: 0,\n\n /**\n * Vertical radius\n * @type Number\n * @default\n */\n ry: 0,\n\n cacheProperties: fabric.Object.prototype.cacheProperties.concat('rx', 'ry'),\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n * @return {fabric.Ellipse} thisArg\n */\n initialize: function(options) {\n this.callSuper('initialize', options);\n this.set('rx', options && options.rx || 0);\n this.set('ry', options && options.ry || 0);\n },\n\n /**\n * @private\n * @param {String} key\n * @param {*} value\n * @return {fabric.Ellipse} thisArg\n */\n _set: function(key, value) {\n this.callSuper('_set', key, value);\n switch (key) {\n\n case 'rx':\n this.rx = value;\n this.set('width', value * 2);\n break;\n\n case 'ry':\n this.ry = value;\n this.set('height', value * 2);\n break;\n\n }\n return this;\n },\n\n /**\n * Returns horizontal radius of an object (according to how an object is scaled)\n * @return {Number}\n */\n getRx: function() {\n return this.get('rx') * this.get('scaleX');\n },\n\n /**\n * Returns Vertical radius of an object (according to how an object is scaled)\n * @return {Number}\n */\n getRy: function() {\n return this.get('ry') * this.get('scaleY');\n },\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject: function(propertiesToInclude) {\n return this.callSuper('toObject', ['rx', 'ry'].concat(propertiesToInclude));\n },\n\n /* _TO_SVG_START_ */\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG: function() {\n return [\n '\\n'\n ];\n },\n /* _TO_SVG_END_ */\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx context to render on\n */\n _render: function(ctx) {\n ctx.beginPath();\n ctx.save();\n ctx.transform(1, 0, 0, this.ry / this.rx, 0, 0);\n ctx.arc(\n 0,\n 0,\n this.rx,\n 0,\n piBy2,\n false);\n ctx.restore();\n this._renderPaintInOrder(ctx);\n },\n });\n\n /* _FROM_SVG_START_ */\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link fabric.Ellipse.fromElement})\n * @static\n * @memberOf fabric.Ellipse\n * @see http://www.w3.org/TR/SVG/shapes.html#EllipseElement\n */\n fabric.Ellipse.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat('cx cy rx ry'.split(' '));\n\n /**\n * Returns {@link fabric.Ellipse} instance from an SVG element\n * @static\n * @memberOf fabric.Ellipse\n * @param {SVGElement} element Element to parse\n * @param {Function} [callback] Options callback invoked after parsing is finished\n * @return {fabric.Ellipse}\n */\n fabric.Ellipse.fromElement = function(element, callback) {\n\n var parsedAttributes = fabric.parseAttributes(element, fabric.Ellipse.ATTRIBUTE_NAMES);\n\n parsedAttributes.left = (parsedAttributes.left || 0) - parsedAttributes.rx;\n parsedAttributes.top = (parsedAttributes.top || 0) - parsedAttributes.ry;\n callback(new fabric.Ellipse(parsedAttributes));\n };\n /* _FROM_SVG_END_ */\n\n /**\n * Returns {@link fabric.Ellipse} instance from an object representation\n * @static\n * @memberOf fabric.Ellipse\n * @param {Object} object Object to create an instance from\n * @param {function} [callback] invoked with new instance as first argument\n * @return {void}\n */\n fabric.Ellipse.fromObject = function(object, callback) {\n fabric.Object._fromObject('Ellipse', object, callback);\n };\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n extend = fabric.util.object.extend;\n\n if (fabric.Rect) {\n fabric.warn('fabric.Rect is already defined');\n return;\n }\n\n /**\n * Rectangle class\n * @class fabric.Rect\n * @extends fabric.Object\n * @return {fabric.Rect} thisArg\n * @see {@link fabric.Rect#initialize} for constructor definition\n */\n fabric.Rect = fabric.util.createClass(fabric.Object, /** @lends fabric.Rect.prototype */ {\n\n /**\n * List of properties to consider when checking if state of an object is changed ({@link fabric.Object#hasStateChanged})\n * as well as for history (undo/redo) purposes\n * @type Array\n */\n stateProperties: fabric.Object.prototype.stateProperties.concat('rx', 'ry'),\n\n /**\n * Type of an object\n * @type String\n * @default\n */\n type: 'rect',\n\n /**\n * Horizontal border radius\n * @type Number\n * @default\n */\n rx: 0,\n\n /**\n * Vertical border radius\n * @type Number\n * @default\n */\n ry: 0,\n\n cacheProperties: fabric.Object.prototype.cacheProperties.concat('rx', 'ry'),\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n * @return {Object} thisArg\n */\n initialize: function(options) {\n this.callSuper('initialize', options);\n this._initRxRy();\n },\n\n /**\n * Initializes rx/ry attributes\n * @private\n */\n _initRxRy: function() {\n if (this.rx && !this.ry) {\n this.ry = this.rx;\n }\n else if (this.ry && !this.rx) {\n this.rx = this.ry;\n }\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render: function(ctx) {\n\n // 1x1 case (used in spray brush) optimization was removed because\n // with caching and higher zoom level this makes more damage than help\n\n var rx = this.rx ? Math.min(this.rx, this.width / 2) : 0,\n ry = this.ry ? Math.min(this.ry, this.height / 2) : 0,\n w = this.width,\n h = this.height,\n x = -this.width / 2,\n y = -this.height / 2,\n isRounded = rx !== 0 || ry !== 0,\n /* \"magic number\" for bezier approximations of arcs (http://itc.ktu.lt/itc354/Riskus354.pdf) */\n k = 1 - 0.5522847498;\n ctx.beginPath();\n\n ctx.moveTo(x + rx, y);\n\n ctx.lineTo(x + w - rx, y);\n isRounded && ctx.bezierCurveTo(x + w - k * rx, y, x + w, y + k * ry, x + w, y + ry);\n\n ctx.lineTo(x + w, y + h - ry);\n isRounded && ctx.bezierCurveTo(x + w, y + h - k * ry, x + w - k * rx, y + h, x + w - rx, y + h);\n\n ctx.lineTo(x + rx, y + h);\n isRounded && ctx.bezierCurveTo(x + k * rx, y + h, x, y + h - k * ry, x, y + h - ry);\n\n ctx.lineTo(x, y + ry);\n isRounded && ctx.bezierCurveTo(x, y + k * ry, x + k * rx, y, x + rx, y);\n\n ctx.closePath();\n\n this._renderPaintInOrder(ctx);\n },\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject: function(propertiesToInclude) {\n return this.callSuper('toObject', ['rx', 'ry'].concat(propertiesToInclude));\n },\n\n /* _TO_SVG_START_ */\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG: function() {\n var x = -this.width / 2, y = -this.height / 2;\n return [\n '\\n'\n ];\n },\n /* _TO_SVG_END_ */\n });\n\n /* _FROM_SVG_START_ */\n /**\n * List of attribute names to account for when parsing SVG element (used by `fabric.Rect.fromElement`)\n * @static\n * @memberOf fabric.Rect\n * @see: http://www.w3.org/TR/SVG/shapes.html#RectElement\n */\n fabric.Rect.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat('x y rx ry width height'.split(' '));\n\n /**\n * Returns {@link fabric.Rect} instance from an SVG element\n * @static\n * @memberOf fabric.Rect\n * @param {SVGElement} element Element to parse\n * @param {Function} callback callback function invoked after parsing\n * @param {Object} [options] Options object\n */\n fabric.Rect.fromElement = function(element, callback, options) {\n if (!element) {\n return callback(null);\n }\n options = options || { };\n\n var parsedAttributes = fabric.parseAttributes(element, fabric.Rect.ATTRIBUTE_NAMES);\n parsedAttributes.left = parsedAttributes.left || 0;\n parsedAttributes.top = parsedAttributes.top || 0;\n parsedAttributes.height = parsedAttributes.height || 0;\n parsedAttributes.width = parsedAttributes.width || 0;\n var rect = new fabric.Rect(extend((options ? fabric.util.object.clone(options) : { }), parsedAttributes));\n rect.visible = rect.visible && rect.width > 0 && rect.height > 0;\n callback(rect);\n };\n /* _FROM_SVG_END_ */\n\n /**\n * Returns {@link fabric.Rect} instance from an object representation\n * @static\n * @memberOf fabric.Rect\n * @param {Object} object Object to create an instance from\n * @param {Function} [callback] Callback to invoke when an fabric.Rect instance is created\n */\n fabric.Rect.fromObject = function(object, callback) {\n return fabric.Object._fromObject('Rect', object, callback);\n };\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n extend = fabric.util.object.extend,\n min = fabric.util.array.min,\n max = fabric.util.array.max,\n toFixed = fabric.util.toFixed;\n\n if (fabric.Polyline) {\n fabric.warn('fabric.Polyline is already defined');\n return;\n }\n\n /**\n * Polyline class\n * @class fabric.Polyline\n * @extends fabric.Object\n * @see {@link fabric.Polyline#initialize} for constructor definition\n */\n fabric.Polyline = fabric.util.createClass(fabric.Object, /** @lends fabric.Polyline.prototype */ {\n\n /**\n * Type of an object\n * @type String\n * @default\n */\n type: 'polyline',\n\n /**\n * Points array\n * @type Array\n * @default\n */\n points: null,\n\n cacheProperties: fabric.Object.prototype.cacheProperties.concat('points'),\n\n /**\n * Constructor\n * @param {Array} points Array of points (where each point is an object with x and y)\n * @param {Object} [options] Options object\n * @return {fabric.Polyline} thisArg\n * @example\n * var poly = new fabric.Polyline([\n * { x: 10, y: 10 },\n * { x: 50, y: 30 },\n * { x: 40, y: 70 },\n * { x: 60, y: 50 },\n * { x: 100, y: 150 },\n * { x: 40, y: 100 }\n * ], {\n * stroke: 'red',\n * left: 100,\n * top: 100\n * });\n */\n initialize: function(points, options) {\n options = options || {};\n this.points = points || [];\n this.callSuper('initialize', options);\n this._setPositionDimensions(options);\n },\n\n _setPositionDimensions: function(options) {\n var calcDim = this._calcDimensions(options), correctLeftTop;\n this.width = calcDim.width;\n this.height = calcDim.height;\n if (!options.fromSVG) {\n correctLeftTop = this.translateToGivenOrigin(\n { x: calcDim.left - this.strokeWidth / 2, y: calcDim.top - this.strokeWidth / 2 },\n 'left',\n 'top',\n this.originX,\n this.originY\n );\n }\n if (typeof options.left === 'undefined') {\n this.left = options.fromSVG ? calcDim.left : correctLeftTop.x;\n }\n if (typeof options.top === 'undefined') {\n this.top = options.fromSVG ? calcDim.top : correctLeftTop.y;\n }\n this.pathOffset = {\n x: calcDim.left + this.width / 2,\n y: calcDim.top + this.height / 2\n };\n },\n\n /**\n * Calculate the polygon min and max point from points array,\n * returning an object with left, top, width, height to measure the\n * polygon size\n * @return {Object} object.left X coordinate of the polygon leftmost point\n * @return {Object} object.top Y coordinate of the polygon topmost point\n * @return {Object} object.width distance between X coordinates of the polygon leftmost and rightmost point\n * @return {Object} object.height distance between Y coordinates of the polygon topmost and bottommost point\n * @private\n */\n _calcDimensions: function() {\n\n var points = this.points,\n minX = min(points, 'x') || 0,\n minY = min(points, 'y') || 0,\n maxX = max(points, 'x') || 0,\n maxY = max(points, 'y') || 0,\n width = (maxX - minX),\n height = (maxY - minY);\n\n return {\n left: minX,\n top: minY,\n width: width,\n height: height\n };\n },\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} Object representation of an instance\n */\n toObject: function(propertiesToInclude) {\n return extend(this.callSuper('toObject', propertiesToInclude), {\n points: this.points.concat()\n });\n },\n\n /* _TO_SVG_START_ */\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG: function() {\n var points = [], diffX = this.pathOffset.x, diffY = this.pathOffset.y,\n NUM_FRACTION_DIGITS = fabric.Object.NUM_FRACTION_DIGITS;\n\n for (var i = 0, len = this.points.length; i < len; i++) {\n points.push(\n toFixed(this.points[i].x - diffX, NUM_FRACTION_DIGITS), ',',\n toFixed(this.points[i].y - diffY, NUM_FRACTION_DIGITS), ' '\n );\n }\n return [\n '<' + this.type + ' ', 'COMMON_PARTS',\n 'points=\"', points.join(''),\n '\" />\\n'\n ];\n },\n /* _TO_SVG_END_ */\n\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n commonRender: function(ctx) {\n var point, len = this.points.length,\n x = this.pathOffset.x,\n y = this.pathOffset.y;\n\n if (!len || isNaN(this.points[len - 1].y)) {\n // do not draw if no points or odd points\n // NaN comes from parseFloat of a empty string in parser\n return false;\n }\n ctx.beginPath();\n ctx.moveTo(this.points[0].x - x, this.points[0].y - y);\n for (var i = 0; i < len; i++) {\n point = this.points[i];\n ctx.lineTo(point.x - x, point.y - y);\n }\n return true;\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render: function(ctx) {\n if (!this.commonRender(ctx)) {\n return;\n }\n this._renderPaintInOrder(ctx);\n },\n\n /**\n * Returns complexity of an instance\n * @return {Number} complexity of this instance\n */\n complexity: function() {\n return this.get('points').length;\n }\n });\n\n /* _FROM_SVG_START_ */\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link fabric.Polyline.fromElement})\n * @static\n * @memberOf fabric.Polyline\n * @see: http://www.w3.org/TR/SVG/shapes.html#PolylineElement\n */\n fabric.Polyline.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat();\n\n /**\n * Returns fabric.Polyline instance from an SVG element\n * @static\n * @memberOf fabric.Polyline\n * @param {SVGElement} element Element to parser\n * @param {Function} callback callback function invoked after parsing\n * @param {Object} [options] Options object\n */\n fabric.Polyline.fromElementGenerator = function(_class) {\n return function(element, callback, options) {\n if (!element) {\n return callback(null);\n }\n options || (options = { });\n\n var points = fabric.parsePointsAttribute(element.getAttribute('points')),\n parsedAttributes = fabric.parseAttributes(element, fabric[_class].ATTRIBUTE_NAMES);\n parsedAttributes.fromSVG = true;\n callback(new fabric[_class](points, extend(parsedAttributes, options)));\n };\n };\n\n fabric.Polyline.fromElement = fabric.Polyline.fromElementGenerator('Polyline');\n\n /* _FROM_SVG_END_ */\n\n /**\n * Returns fabric.Polyline instance from an object representation\n * @static\n * @memberOf fabric.Polyline\n * @param {Object} object Object to create an instance from\n * @param {Function} [callback] Callback to invoke when an fabric.Path instance is created\n */\n fabric.Polyline.fromObject = function(object, callback) {\n return fabric.Object._fromObject('Polyline', object, callback, 'points');\n };\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { });\n\n if (fabric.Polygon) {\n fabric.warn('fabric.Polygon is already defined');\n return;\n }\n\n /**\n * Polygon class\n * @class fabric.Polygon\n * @extends fabric.Polyline\n * @see {@link fabric.Polygon#initialize} for constructor definition\n */\n fabric.Polygon = fabric.util.createClass(fabric.Polyline, /** @lends fabric.Polygon.prototype */ {\n\n /**\n * Type of an object\n * @type String\n * @default\n */\n type: 'polygon',\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render: function(ctx) {\n if (!this.commonRender(ctx)) {\n return;\n }\n ctx.closePath();\n this._renderPaintInOrder(ctx);\n },\n\n });\n\n /* _FROM_SVG_START_ */\n /**\n * List of attribute names to account for when parsing SVG element (used by `fabric.Polygon.fromElement`)\n * @static\n * @memberOf fabric.Polygon\n * @see: http://www.w3.org/TR/SVG/shapes.html#PolygonElement\n */\n fabric.Polygon.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat();\n\n /**\n * Returns {@link fabric.Polygon} instance from an SVG element\n * @static\n * @memberOf fabric.Polygon\n * @param {SVGElement} element Element to parse\n * @param {Function} callback callback function invoked after parsing\n * @param {Object} [options] Options object\n */\n fabric.Polygon.fromElement = fabric.Polyline.fromElementGenerator('Polygon');\n /* _FROM_SVG_END_ */\n\n /**\n * Returns fabric.Polygon instance from an object representation\n * @static\n * @memberOf fabric.Polygon\n * @param {Object} object Object to create an instance from\n * @param {Function} [callback] Callback to invoke when an fabric.Path instance is created\n * @return {void}\n */\n fabric.Polygon.fromObject = function(object, callback) {\n fabric.Object._fromObject('Polygon', object, callback, 'points');\n };\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n min = fabric.util.array.min,\n max = fabric.util.array.max,\n extend = fabric.util.object.extend,\n _toString = Object.prototype.toString,\n toFixed = fabric.util.toFixed;\n\n if (fabric.Path) {\n fabric.warn('fabric.Path is already defined');\n return;\n }\n\n /**\n * Path class\n * @class fabric.Path\n * @extends fabric.Object\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-1#path_and_pathgroup}\n * @see {@link fabric.Path#initialize} for constructor definition\n */\n fabric.Path = fabric.util.createClass(fabric.Object, /** @lends fabric.Path.prototype */ {\n\n /**\n * Type of an object\n * @type String\n * @default\n */\n type: 'path',\n\n /**\n * Array of path points\n * @type Array\n * @default\n */\n path: null,\n\n cacheProperties: fabric.Object.prototype.cacheProperties.concat('path', 'fillRule'),\n\n stateProperties: fabric.Object.prototype.stateProperties.concat('path'),\n\n /**\n * Constructor\n * @param {Array|String} path Path data (sequence of coordinates and corresponding \"command\" tokens)\n * @param {Object} [options] Options object\n * @return {fabric.Path} thisArg\n */\n initialize: function(path, options) {\n options = options || { };\n this.callSuper('initialize', options);\n if (!path) {\n path = [];\n }\n\n var fromArray = _toString.call(path) === '[object Array]';\n\n this.path = fabric.util.makePathSimpler(\n fromArray ? path : fabric.util.parsePath(path)\n );\n\n if (!this.path) {\n return;\n }\n fabric.Polyline.prototype._setPositionDimensions.call(this, options);\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx context to render path on\n */\n _renderPathCommands: function(ctx) {\n var current, // current instruction\n subpathStartX = 0,\n subpathStartY = 0,\n x = 0, // current x\n y = 0, // current y\n controlX = 0, // current control point x\n controlY = 0, // current control point y\n l = -this.pathOffset.x,\n t = -this.pathOffset.y;\n\n ctx.beginPath();\n\n for (var i = 0, len = this.path.length; i < len; ++i) {\n\n current = this.path[i];\n\n switch (current[0]) { // first letter\n\n case 'L': // lineto, absolute\n x = current[1];\n y = current[2];\n ctx.lineTo(x + l, y + t);\n break;\n\n case 'M': // moveTo, absolute\n x = current[1];\n y = current[2];\n subpathStartX = x;\n subpathStartY = y;\n ctx.moveTo(x + l, y + t);\n break;\n\n case 'C': // bezierCurveTo, absolute\n x = current[5];\n y = current[6];\n controlX = current[3];\n controlY = current[4];\n ctx.bezierCurveTo(\n current[1] + l,\n current[2] + t,\n controlX + l,\n controlY + t,\n x + l,\n y + t\n );\n break;\n\n case 'Q': // quadraticCurveTo, absolute\n ctx.quadraticCurveTo(\n current[1] + l,\n current[2] + t,\n current[3] + l,\n current[4] + t\n );\n x = current[3];\n y = current[4];\n controlX = current[1];\n controlY = current[2];\n break;\n\n case 'z':\n case 'Z':\n x = subpathStartX;\n y = subpathStartY;\n ctx.closePath();\n break;\n }\n }\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx context to render path on\n */\n _render: function(ctx) {\n this._renderPathCommands(ctx);\n this._renderPaintInOrder(ctx);\n },\n\n /**\n * Returns string representation of an instance\n * @return {String} string representation of an instance\n */\n toString: function() {\n return '#';\n },\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject: function(propertiesToInclude) {\n return extend(this.callSuper('toObject', propertiesToInclude), {\n path: this.path.map(function(item) { return item.slice(); }),\n });\n },\n\n /**\n * Returns dataless object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toDatalessObject: function(propertiesToInclude) {\n var o = this.toObject(['sourcePath'].concat(propertiesToInclude));\n if (o.sourcePath) {\n delete o.path;\n }\n return o;\n },\n\n /* _TO_SVG_START_ */\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG: function() {\n var path = fabric.util.joinPath(this.path);\n return [\n '\\n'\n ];\n },\n\n _getOffsetTransform: function() {\n var digits = fabric.Object.NUM_FRACTION_DIGITS;\n return ' translate(' + toFixed(-this.pathOffset.x, digits) + ', ' +\n toFixed(-this.pathOffset.y, digits) + ')';\n },\n\n /**\n * Returns svg clipPath representation of an instance\n * @param {Function} [reviver] Method for further parsing of svg representation.\n * @return {String} svg representation of an instance\n */\n toClipPathSVG: function(reviver) {\n var additionalTransform = this._getOffsetTransform();\n return '\\t' + this._createBaseClipPathSVGMarkup(\n this._toSVG(), { reviver: reviver, additionalTransform: additionalTransform }\n );\n },\n\n /**\n * Returns svg representation of an instance\n * @param {Function} [reviver] Method for further parsing of svg representation.\n * @return {String} svg representation of an instance\n */\n toSVG: function(reviver) {\n var additionalTransform = this._getOffsetTransform();\n return this._createBaseSVGMarkup(this._toSVG(), { reviver: reviver, additionalTransform: additionalTransform });\n },\n /* _TO_SVG_END_ */\n\n /**\n * Returns number representation of an instance complexity\n * @return {Number} complexity of this instance\n */\n complexity: function() {\n return this.path.length;\n },\n\n /**\n * @private\n */\n _calcDimensions: function() {\n\n var aX = [],\n aY = [],\n current, // current instruction\n subpathStartX = 0,\n subpathStartY = 0,\n x = 0, // current x\n y = 0, // current y\n bounds;\n\n for (var i = 0, len = this.path.length; i < len; ++i) {\n\n current = this.path[i];\n\n switch (current[0]) { // first letter\n\n case 'L': // lineto, absolute\n x = current[1];\n y = current[2];\n bounds = [];\n break;\n\n case 'M': // moveTo, absolute\n x = current[1];\n y = current[2];\n subpathStartX = x;\n subpathStartY = y;\n bounds = [];\n break;\n\n case 'C': // bezierCurveTo, absolute\n bounds = fabric.util.getBoundsOfCurve(x, y,\n current[1],\n current[2],\n current[3],\n current[4],\n current[5],\n current[6]\n );\n x = current[5];\n y = current[6];\n break;\n\n case 'Q': // quadraticCurveTo, absolute\n bounds = fabric.util.getBoundsOfCurve(x, y,\n current[1],\n current[2],\n current[1],\n current[2],\n current[3],\n current[4]\n );\n x = current[3];\n y = current[4];\n break;\n\n case 'z':\n case 'Z':\n x = subpathStartX;\n y = subpathStartY;\n break;\n }\n bounds.forEach(function (point) {\n aX.push(point.x);\n aY.push(point.y);\n });\n aX.push(x);\n aY.push(y);\n }\n\n var minX = min(aX) || 0,\n minY = min(aY) || 0,\n maxX = max(aX) || 0,\n maxY = max(aY) || 0,\n deltaX = maxX - minX,\n deltaY = maxY - minY;\n\n return {\n left: minX,\n top: minY,\n width: deltaX,\n height: deltaY\n };\n }\n });\n\n /**\n * Creates an instance of fabric.Path from an object\n * @static\n * @memberOf fabric.Path\n * @param {Object} object\n * @param {Function} [callback] Callback to invoke when an fabric.Path instance is created\n */\n fabric.Path.fromObject = function(object, callback) {\n if (typeof object.sourcePath === 'string') {\n var pathUrl = object.sourcePath;\n fabric.loadSVGFromURL(pathUrl, function (elements) {\n var path = elements[0];\n path.setOptions(object);\n callback && callback(path);\n });\n }\n else {\n fabric.Object._fromObject('Path', object, callback, 'path');\n }\n };\n\n /* _FROM_SVG_START_ */\n /**\n * List of attribute names to account for when parsing SVG element (used by `fabric.Path.fromElement`)\n * @static\n * @memberOf fabric.Path\n * @see http://www.w3.org/TR/SVG/paths.html#PathElement\n */\n fabric.Path.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat(['d']);\n\n /**\n * Creates an instance of fabric.Path from an SVG element\n * @static\n * @memberOf fabric.Path\n * @param {SVGElement} element to parse\n * @param {Function} callback Callback to invoke when an fabric.Path instance is created\n * @param {Object} [options] Options object\n * @param {Function} [callback] Options callback invoked after parsing is finished\n */\n fabric.Path.fromElement = function(element, callback, options) {\n var parsedAttributes = fabric.parseAttributes(element, fabric.Path.ATTRIBUTE_NAMES);\n parsedAttributes.fromSVG = true;\n callback(new fabric.Path(parsedAttributes.d, extend(parsedAttributes, options)));\n };\n /* _FROM_SVG_END_ */\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n min = fabric.util.array.min,\n max = fabric.util.array.max;\n\n if (fabric.Group) {\n return;\n }\n\n /**\n * Group class\n * @class fabric.Group\n * @extends fabric.Object\n * @mixes fabric.Collection\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-3#groups}\n * @see {@link fabric.Group#initialize} for constructor definition\n */\n fabric.Group = fabric.util.createClass(fabric.Object, fabric.Collection, /** @lends fabric.Group.prototype */ {\n\n /**\n * Type of an object\n * @type String\n * @default\n */\n type: 'group',\n\n /**\n * Width of stroke\n * @type Number\n * @default\n */\n strokeWidth: 0,\n\n /**\n * Indicates if click, mouseover, mouseout events & hoverCursor should also check for subtargets\n * @type Boolean\n * @default\n */\n subTargetCheck: false,\n\n /**\n * Groups are container, do not render anything on theyr own, ence no cache properties\n * @type Array\n * @default\n */\n cacheProperties: [],\n\n /**\n * setOnGroup is a method used for TextBox that is no more used since 2.0.0 The behavior is still\n * available setting this boolean to true.\n * @type Boolean\n * @since 2.0.0\n * @default\n */\n useSetOnGroup: false,\n\n /**\n * Constructor\n * @param {Object} objects Group objects\n * @param {Object} [options] Options object\n * @param {Boolean} [isAlreadyGrouped] if true, objects have been grouped already.\n * @return {Object} thisArg\n */\n initialize: function(objects, options, isAlreadyGrouped) {\n options = options || {};\n this._objects = [];\n // if objects enclosed in a group have been grouped already,\n // we cannot change properties of objects.\n // Thus we need to set options to group without objects,\n isAlreadyGrouped && this.callSuper('initialize', options);\n this._objects = objects || [];\n for (var i = this._objects.length; i--; ) {\n this._objects[i].group = this;\n }\n\n if (!isAlreadyGrouped) {\n var center = options && options.centerPoint;\n // we want to set origins before calculating the bounding box.\n // so that the topleft can be set with that in mind.\n // if specific top and left are passed, are overwritten later\n // with the callSuper('initialize', options)\n if (options.originX !== undefined) {\n this.originX = options.originX;\n }\n if (options.originY !== undefined) {\n this.originY = options.originY;\n }\n // if coming from svg i do not want to calc bounds.\n // i assume width and height are passed along options\n center || this._calcBounds();\n this._updateObjectsCoords(center);\n delete options.centerPoint;\n this.callSuper('initialize', options);\n }\n else {\n this._updateObjectsACoords();\n }\n\n this.setCoords();\n },\n\n /**\n * @private\n */\n _updateObjectsACoords: function() {\n var skipControls = true;\n for (var i = this._objects.length; i--; ){\n this._objects[i].setCoords(skipControls);\n }\n },\n\n /**\n * @private\n * @param {Boolean} [skipCoordsChange] if true, coordinates of objects enclosed in a group do not change\n */\n _updateObjectsCoords: function(center) {\n var center = center || this.getCenterPoint();\n for (var i = this._objects.length; i--; ){\n this._updateObjectCoords(this._objects[i], center);\n }\n },\n\n /**\n * @private\n * @param {Object} object\n * @param {fabric.Point} center, current center of group.\n */\n _updateObjectCoords: function(object, center) {\n var objectLeft = object.left,\n objectTop = object.top,\n skipControls = true;\n\n object.set({\n left: objectLeft - center.x,\n top: objectTop - center.y\n });\n object.group = this;\n object.setCoords(skipControls);\n },\n\n /**\n * Returns string represenation of a group\n * @return {String}\n */\n toString: function() {\n return '#';\n },\n\n /**\n * Adds an object to a group; Then recalculates group's dimension, position.\n * @param {Object} object\n * @return {fabric.Group} thisArg\n * @chainable\n */\n addWithUpdate: function(object) {\n var nested = !!this.group;\n this._restoreObjectsState();\n fabric.util.resetObjectTransform(this);\n if (object) {\n if (nested) {\n // if this group is inside another group, we need to pre transform the object\n fabric.util.removeTransformFromObject(object, this.group.calcTransformMatrix());\n }\n this._objects.push(object);\n object.group = this;\n object._set('canvas', this.canvas);\n }\n this._calcBounds();\n this._updateObjectsCoords();\n this.dirty = true;\n if (nested) {\n this.group.addWithUpdate();\n }\n else {\n this.setCoords();\n }\n return this;\n },\n\n /**\n * Removes an object from a group; Then recalculates group's dimension, position.\n * @param {Object} object\n * @return {fabric.Group} thisArg\n * @chainable\n */\n removeWithUpdate: function(object) {\n this._restoreObjectsState();\n fabric.util.resetObjectTransform(this);\n\n this.remove(object);\n this._calcBounds();\n this._updateObjectsCoords();\n this.setCoords();\n this.dirty = true;\n return this;\n },\n\n /**\n * @private\n */\n _onObjectAdded: function(object) {\n this.dirty = true;\n object.group = this;\n object._set('canvas', this.canvas);\n },\n\n /**\n * @private\n */\n _onObjectRemoved: function(object) {\n this.dirty = true;\n delete object.group;\n },\n\n /**\n * @private\n */\n _set: function(key, value) {\n var i = this._objects.length;\n if (this.useSetOnGroup) {\n while (i--) {\n this._objects[i].setOnGroup(key, value);\n }\n }\n if (key === 'canvas') {\n while (i--) {\n this._objects[i]._set(key, value);\n }\n }\n fabric.Object.prototype._set.call(this, key, value);\n },\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject: function(propertiesToInclude) {\n var _includeDefaultValues = this.includeDefaultValues;\n var objsToObject = this._objects\n .filter(function (obj) {\n return !obj.excludeFromExport;\n })\n .map(function (obj) {\n var originalDefaults = obj.includeDefaultValues;\n obj.includeDefaultValues = _includeDefaultValues;\n var _obj = obj.toObject(propertiesToInclude);\n obj.includeDefaultValues = originalDefaults;\n return _obj;\n });\n var obj = fabric.Object.prototype.toObject.call(this, propertiesToInclude);\n obj.objects = objsToObject;\n return obj;\n },\n\n /**\n * Returns object representation of an instance, in dataless mode.\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toDatalessObject: function(propertiesToInclude) {\n var objsToObject, sourcePath = this.sourcePath;\n if (sourcePath) {\n objsToObject = sourcePath;\n }\n else {\n var _includeDefaultValues = this.includeDefaultValues;\n objsToObject = this._objects.map(function(obj) {\n var originalDefaults = obj.includeDefaultValues;\n obj.includeDefaultValues = _includeDefaultValues;\n var _obj = obj.toDatalessObject(propertiesToInclude);\n obj.includeDefaultValues = originalDefaults;\n return _obj;\n });\n }\n var obj = fabric.Object.prototype.toDatalessObject.call(this, propertiesToInclude);\n obj.objects = objsToObject;\n return obj;\n },\n\n /**\n * Renders instance on a given context\n * @param {CanvasRenderingContext2D} ctx context to render instance on\n */\n render: function(ctx) {\n this._transformDone = true;\n this.callSuper('render', ctx);\n this._transformDone = false;\n },\n\n /**\n * Decide if the object should cache or not. Create its own cache level\n * needsItsOwnCache should be used when the object drawing method requires\n * a cache step. None of the fabric classes requires it.\n * Generally you do not cache objects in groups because the group is already cached.\n * @return {Boolean}\n */\n shouldCache: function() {\n var ownCache = fabric.Object.prototype.shouldCache.call(this);\n if (ownCache) {\n for (var i = 0, len = this._objects.length; i < len; i++) {\n if (this._objects[i].willDrawShadow()) {\n this.ownCaching = false;\n return false;\n }\n }\n }\n return ownCache;\n },\n\n /**\n * Check if this object or a child object will cast a shadow\n * @return {Boolean}\n */\n willDrawShadow: function() {\n if (fabric.Object.prototype.willDrawShadow.call(this)) {\n return true;\n }\n for (var i = 0, len = this._objects.length; i < len; i++) {\n if (this._objects[i].willDrawShadow()) {\n return true;\n }\n }\n return false;\n },\n\n /**\n * Check if this group or its parent group are caching, recursively up\n * @return {Boolean}\n */\n isOnACache: function() {\n return this.ownCaching || (this.group && this.group.isOnACache());\n },\n\n /**\n * Execute the drawing operation for an object on a specified context\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n drawObject: function(ctx) {\n for (var i = 0, len = this._objects.length; i < len; i++) {\n this._objects[i].render(ctx);\n }\n this._drawClipPath(ctx);\n },\n\n /**\n * Check if cache is dirty\n */\n isCacheDirty: function(skipCanvas) {\n if (this.callSuper('isCacheDirty', skipCanvas)) {\n return true;\n }\n if (!this.statefullCache) {\n return false;\n }\n for (var i = 0, len = this._objects.length; i < len; i++) {\n if (this._objects[i].isCacheDirty(true)) {\n if (this._cacheCanvas) {\n // if this group has not a cache canvas there is nothing to clean\n var x = this.cacheWidth / this.zoomX, y = this.cacheHeight / this.zoomY;\n this._cacheContext.clearRect(-x / 2, -y / 2, x, y);\n }\n return true;\n }\n }\n return false;\n },\n\n /**\n * Restores original state of each of group objects (original state is that which was before group was created).\n * if the nested boolean is true, the original state will be restored just for the\n * first group and not for all the group chain\n * @private\n * @param {Boolean} nested tell the function to restore object state up to the parent group and not more\n * @return {fabric.Group} thisArg\n * @chainable\n */\n _restoreObjectsState: function() {\n var groupMatrix = this.calcOwnMatrix();\n this._objects.forEach(function(object) {\n // instead of using _this = this;\n fabric.util.addTransformToObject(object, groupMatrix);\n delete object.group;\n object.setCoords();\n });\n return this;\n },\n\n /**\n * Realises the transform from this group onto the supplied object\n * i.e. it tells you what would happen if the supplied object was in\n * the group, and then the group was destroyed. It mutates the supplied\n * object.\n * Warning: this method is not useful anymore, it has been kept to no break the api.\n * is not used in the fabricJS codebase\n * this method will be reduced to using the utility.\n * @private\n * @deprecated\n * @param {fabric.Object} object\n * @param {Array} parentMatrix parent transformation\n * @return {fabric.Object} transformedObject\n */\n realizeTransform: function(object, parentMatrix) {\n fabric.util.addTransformToObject(object, parentMatrix);\n return object;\n },\n\n /**\n * Destroys a group (restoring state of its objects)\n * @return {fabric.Group} thisArg\n * @chainable\n */\n destroy: function() {\n // when group is destroyed objects needs to get a repaint to be eventually\n // displayed on canvas.\n this._objects.forEach(function(object) {\n object.set('dirty', true);\n });\n return this._restoreObjectsState();\n },\n\n /**\n * make a group an active selection, remove the group from canvas\n * the group has to be on canvas for this to work.\n * @return {fabric.ActiveSelection} thisArg\n * @chainable\n */\n toActiveSelection: function() {\n if (!this.canvas) {\n return;\n }\n var objects = this._objects, canvas = this.canvas;\n this._objects = [];\n var options = this.toObject();\n delete options.objects;\n var activeSelection = new fabric.ActiveSelection([]);\n activeSelection.set(options);\n activeSelection.type = 'activeSelection';\n canvas.remove(this);\n objects.forEach(function(object) {\n object.group = activeSelection;\n object.dirty = true;\n canvas.add(object);\n });\n activeSelection.canvas = canvas;\n activeSelection._objects = objects;\n canvas._activeObject = activeSelection;\n activeSelection.setCoords();\n return activeSelection;\n },\n\n /**\n * Destroys a group (restoring state of its objects)\n * @return {fabric.Group} thisArg\n * @chainable\n */\n ungroupOnCanvas: function() {\n return this._restoreObjectsState();\n },\n\n /**\n * Sets coordinates of all objects inside group\n * @return {fabric.Group} thisArg\n * @chainable\n */\n setObjectsCoords: function() {\n var skipControls = true;\n this.forEachObject(function(object) {\n object.setCoords(skipControls);\n });\n return this;\n },\n\n /**\n * @private\n */\n _calcBounds: function(onlyWidthHeight) {\n var aX = [],\n aY = [],\n o, prop, coords,\n props = ['tr', 'br', 'bl', 'tl'],\n i = 0, iLen = this._objects.length,\n j, jLen = props.length;\n\n for ( ; i < iLen; ++i) {\n o = this._objects[i];\n coords = o.calcACoords();\n for (j = 0; j < jLen; j++) {\n prop = props[j];\n aX.push(coords[prop].x);\n aY.push(coords[prop].y);\n }\n o.aCoords = coords;\n }\n\n this._getBounds(aX, aY, onlyWidthHeight);\n },\n\n /**\n * @private\n */\n _getBounds: function(aX, aY, onlyWidthHeight) {\n var minXY = new fabric.Point(min(aX), min(aY)),\n maxXY = new fabric.Point(max(aX), max(aY)),\n top = minXY.y || 0, left = minXY.x || 0,\n width = (maxXY.x - minXY.x) || 0,\n height = (maxXY.y - minXY.y) || 0;\n this.width = width;\n this.height = height;\n if (!onlyWidthHeight) {\n // the bounding box always finds the topleft most corner.\n // whatever is the group origin, we set up here the left/top position.\n this.setPositionByOrigin({ x: left, y: top }, 'left', 'top');\n }\n },\n\n /* _TO_SVG_START_ */\n /**\n * Returns svg representation of an instance\n * @param {Function} [reviver] Method for further parsing of svg representation.\n * @return {String} svg representation of an instance\n */\n _toSVG: function(reviver) {\n var svgString = ['\\n'];\n\n for (var i = 0, len = this._objects.length; i < len; i++) {\n svgString.push('\\t\\t', this._objects[i].toSVG(reviver));\n }\n svgString.push('\\n');\n return svgString;\n },\n\n /**\n * Returns styles-string for svg-export, specific version for group\n * @return {String}\n */\n getSvgStyles: function() {\n var opacity = typeof this.opacity !== 'undefined' && this.opacity !== 1 ?\n 'opacity: ' + this.opacity + ';' : '',\n visibility = this.visible ? '' : ' visibility: hidden;';\n return [\n opacity,\n this.getSvgFilter(),\n visibility\n ].join('');\n },\n\n /**\n * Returns svg clipPath representation of an instance\n * @param {Function} [reviver] Method for further parsing of svg representation.\n * @return {String} svg representation of an instance\n */\n toClipPathSVG: function(reviver) {\n var svgString = [];\n\n for (var i = 0, len = this._objects.length; i < len; i++) {\n svgString.push('\\t', this._objects[i].toClipPathSVG(reviver));\n }\n\n return this._createBaseClipPathSVGMarkup(svgString, { reviver: reviver });\n },\n /* _TO_SVG_END_ */\n });\n\n /**\n * Returns {@link fabric.Group} instance from an object representation\n * @static\n * @memberOf fabric.Group\n * @param {Object} object Object to create a group from\n * @param {Function} [callback] Callback to invoke when an group instance is created\n */\n fabric.Group.fromObject = function(object, callback) {\n var objects = object.objects,\n options = fabric.util.object.clone(object, true);\n delete options.objects;\n if (typeof objects === 'string') {\n // it has to be an url or something went wrong.\n fabric.loadSVGFromURL(objects, function (elements) {\n var group = fabric.util.groupSVGElements(elements, object, objects);\n group.set(options);\n callback && callback(group);\n });\n return;\n }\n fabric.util.enlivenObjects(objects, function(enlivenedObjects) {\n fabric.util.enlivenObjects([object.clipPath], function(enlivedClipPath) {\n var options = fabric.util.object.clone(object, true);\n options.clipPath = enlivedClipPath[0];\n delete options.objects;\n callback && callback(new fabric.Group(enlivenedObjects, options, true));\n });\n });\n };\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { });\n\n if (fabric.ActiveSelection) {\n return;\n }\n\n /**\n * Group class\n * @class fabric.ActiveSelection\n * @extends fabric.Group\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-3#groups}\n * @see {@link fabric.ActiveSelection#initialize} for constructor definition\n */\n fabric.ActiveSelection = fabric.util.createClass(fabric.Group, /** @lends fabric.ActiveSelection.prototype */ {\n\n /**\n * Type of an object\n * @type String\n * @default\n */\n type: 'activeSelection',\n\n /**\n * Constructor\n * @param {Object} objects ActiveSelection objects\n * @param {Object} [options] Options object\n * @return {Object} thisArg\n */\n initialize: function(objects, options) {\n options = options || {};\n this._objects = objects || [];\n for (var i = this._objects.length; i--; ) {\n this._objects[i].group = this;\n }\n\n if (options.originX) {\n this.originX = options.originX;\n }\n if (options.originY) {\n this.originY = options.originY;\n }\n this._calcBounds();\n this._updateObjectsCoords();\n fabric.Object.prototype.initialize.call(this, options);\n this.setCoords();\n },\n\n /**\n * Change te activeSelection to a normal group,\n * High level function that automatically adds it to canvas as\n * active object. no events fired.\n * @since 2.0.0\n * @return {fabric.Group}\n */\n toGroup: function() {\n var objects = this._objects.concat();\n this._objects = [];\n var options = fabric.Object.prototype.toObject.call(this);\n var newGroup = new fabric.Group([]);\n delete options.type;\n newGroup.set(options);\n objects.forEach(function(object) {\n object.canvas.remove(object);\n object.group = newGroup;\n });\n newGroup._objects = objects;\n if (!this.canvas) {\n return newGroup;\n }\n var canvas = this.canvas;\n canvas.add(newGroup);\n canvas._activeObject = newGroup;\n newGroup.setCoords();\n return newGroup;\n },\n\n /**\n * If returns true, deselection is cancelled.\n * @since 2.0.0\n * @return {Boolean} [cancel]\n */\n onDeselect: function() {\n this.destroy();\n return false;\n },\n\n /**\n * Returns string representation of a group\n * @return {String}\n */\n toString: function() {\n return '#';\n },\n\n /**\n * Decide if the object should cache or not. Create its own cache level\n * objectCaching is a global flag, wins over everything\n * needsItsOwnCache should be used when the object drawing method requires\n * a cache step. None of the fabric classes requires it.\n * Generally you do not cache objects in groups because the group outside is cached.\n * @return {Boolean}\n */\n shouldCache: function() {\n return false;\n },\n\n /**\n * Check if this group or its parent group are caching, recursively up\n * @return {Boolean}\n */\n isOnACache: function() {\n return false;\n },\n\n /**\n * Renders controls and borders for the object\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {Object} [styleOverride] properties to override the object style\n * @param {Object} [childrenOverride] properties to override the children overrides\n */\n _renderControls: function(ctx, styleOverride, childrenOverride) {\n ctx.save();\n ctx.globalAlpha = this.isMoving ? this.borderOpacityWhenMoving : 1;\n this.callSuper('_renderControls', ctx, styleOverride);\n childrenOverride = childrenOverride || { };\n if (typeof childrenOverride.hasControls === 'undefined') {\n childrenOverride.hasControls = false;\n }\n childrenOverride.forActiveSelection = true;\n for (var i = 0, len = this._objects.length; i < len; i++) {\n this._objects[i]._renderControls(ctx, childrenOverride);\n }\n ctx.restore();\n },\n });\n\n /**\n * Returns {@link fabric.ActiveSelection} instance from an object representation\n * @static\n * @memberOf fabric.ActiveSelection\n * @param {Object} object Object to create a group from\n * @param {Function} [callback] Callback to invoke when an ActiveSelection instance is created\n */\n fabric.ActiveSelection.fromObject = function(object, callback) {\n fabric.util.enlivenObjects(object.objects, function(enlivenedObjects) {\n delete object.objects;\n callback && callback(new fabric.ActiveSelection(enlivenedObjects, object, true));\n });\n };\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var extend = fabric.util.object.extend;\n\n if (!global.fabric) {\n global.fabric = { };\n }\n\n if (global.fabric.Image) {\n fabric.warn('fabric.Image is already defined.');\n return;\n }\n\n /**\n * Image class\n * @class fabric.Image\n * @extends fabric.Object\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-1#images}\n * @see {@link fabric.Image#initialize} for constructor definition\n */\n fabric.Image = fabric.util.createClass(fabric.Object, /** @lends fabric.Image.prototype */ {\n\n /**\n * Type of an object\n * @type String\n * @default\n */\n type: 'image',\n\n /**\n * Width of a stroke.\n * For image quality a stroke multiple of 2 gives better results.\n * @type Number\n * @default\n */\n strokeWidth: 0,\n\n /**\n * When calling {@link fabric.Image.getSrc}, return value from element src with `element.getAttribute('src')`.\n * This allows for relative urls as image src.\n * @since 2.7.0\n * @type Boolean\n * @default\n */\n srcFromAttribute: false,\n\n /**\n * private\n * contains last value of scaleX to detect\n * if the Image got resized after the last Render\n * @type Number\n */\n _lastScaleX: 1,\n\n /**\n * private\n * contains last value of scaleY to detect\n * if the Image got resized after the last Render\n * @type Number\n */\n _lastScaleY: 1,\n\n /**\n * private\n * contains last value of scaling applied by the apply filter chain\n * @type Number\n */\n _filterScalingX: 1,\n\n /**\n * private\n * contains last value of scaling applied by the apply filter chain\n * @type Number\n */\n _filterScalingY: 1,\n\n /**\n * minimum scale factor under which any resizeFilter is triggered to resize the image\n * 0 will disable the automatic resize. 1 will trigger automatically always.\n * number bigger than 1 are not implemented yet.\n * @type Number\n */\n minimumScaleTrigger: 0.5,\n\n /**\n * List of properties to consider when checking if\n * state of an object is changed ({@link fabric.Object#hasStateChanged})\n * as well as for history (undo/redo) purposes\n * @type Array\n */\n stateProperties: fabric.Object.prototype.stateProperties.concat('cropX', 'cropY'),\n\n /**\n * List of properties to consider when checking if cache needs refresh\n * Those properties are checked by statefullCache ON ( or lazy mode if we want ) or from single\n * calls to Object.set(key, value). If the key is in this list, the object is marked as dirty\n * and refreshed at the next render\n * @type Array\n */\n cacheProperties: fabric.Object.prototype.cacheProperties.concat('cropX', 'cropY'),\n\n /**\n * key used to retrieve the texture representing this image\n * @since 2.0.0\n * @type String\n * @default\n */\n cacheKey: '',\n\n /**\n * Image crop in pixels from original image size.\n * @since 2.0.0\n * @type Number\n * @default\n */\n cropX: 0,\n\n /**\n * Image crop in pixels from original image size.\n * @since 2.0.0\n * @type Number\n * @default\n */\n cropY: 0,\n\n /**\n * Indicates whether this canvas will use image smoothing when painting this image.\n * Also influence if the cacheCanvas for this image uses imageSmoothing\n * @since 4.0.0-beta.11\n * @type Boolean\n * @default\n */\n imageSmoothing: true,\n\n /**\n * Constructor\n * Image can be initialized with any canvas drawable or a string.\n * The string should be a url and will be loaded as an image.\n * Canvas and Image element work out of the box, while videos require extra code to work.\n * Please check video element events for seeking.\n * @param {HTMLImageElement | HTMLCanvasElement | HTMLVideoElement | String} element Image element\n * @param {Object} [options] Options object\n * @param {function} [callback] callback function to call after eventual filters applied.\n * @return {fabric.Image} thisArg\n */\n initialize: function(element, options) {\n options || (options = { });\n this.filters = [];\n this.cacheKey = 'texture' + fabric.Object.__uid++;\n this.callSuper('initialize', options);\n this._initElement(element, options);\n },\n\n /**\n * Returns image element which this instance if based on\n * @return {HTMLImageElement} Image element\n */\n getElement: function() {\n return this._element || {};\n },\n\n /**\n * Sets image element for this instance to a specified one.\n * If filters defined they are applied to new image.\n * You might need to call `canvas.renderAll` and `object.setCoords` after replacing, to render new image and update controls area.\n * @param {HTMLImageElement} element\n * @param {Object} [options] Options object\n * @return {fabric.Image} thisArg\n * @chainable\n */\n setElement: function(element, options) {\n this.removeTexture(this.cacheKey);\n this.removeTexture(this.cacheKey + '_filtered');\n this._element = element;\n this._originalElement = element;\n this._initConfig(options);\n if (this.filters.length !== 0) {\n this.applyFilters();\n }\n // resizeFilters work on the already filtered copy.\n // we need to apply resizeFilters AFTER normal filters.\n // applyResizeFilters is run more often than normal filters\n // and is triggered by user interactions rather than dev code\n if (this.resizeFilter) {\n this.applyResizeFilters();\n }\n return this;\n },\n\n /**\n * Delete a single texture if in webgl mode\n */\n removeTexture: function(key) {\n var backend = fabric.filterBackend;\n if (backend && backend.evictCachesForKey) {\n backend.evictCachesForKey(key);\n }\n },\n\n /**\n * Delete textures, reference to elements and eventually JSDOM cleanup\n */\n dispose: function() {\n this.removeTexture(this.cacheKey);\n this.removeTexture(this.cacheKey + '_filtered');\n this._cacheContext = undefined;\n ['_originalElement', '_element', '_filteredEl', '_cacheCanvas'].forEach((function(element) {\n fabric.util.cleanUpJsdomNode(this[element]);\n this[element] = undefined;\n }).bind(this));\n },\n\n /**\n * Get the crossOrigin value (of the corresponding image element)\n */\n getCrossOrigin: function() {\n return this._originalElement && (this._originalElement.crossOrigin || null);\n },\n\n /**\n * Returns original size of an image\n * @return {Object} Object with \"width\" and \"height\" properties\n */\n getOriginalSize: function() {\n var element = this.getElement();\n return {\n width: element.naturalWidth || element.width,\n height: element.naturalHeight || element.height\n };\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _stroke: function(ctx) {\n if (!this.stroke || this.strokeWidth === 0) {\n return;\n }\n var w = this.width / 2, h = this.height / 2;\n ctx.beginPath();\n ctx.moveTo(-w, -h);\n ctx.lineTo(w, -h);\n ctx.lineTo(w, h);\n ctx.lineTo(-w, h);\n ctx.lineTo(-w, -h);\n ctx.closePath();\n },\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} Object representation of an instance\n */\n toObject: function(propertiesToInclude) {\n var filters = [];\n\n this.filters.forEach(function(filterObj) {\n if (filterObj) {\n filters.push(filterObj.toObject());\n }\n });\n var object = extend(\n this.callSuper(\n 'toObject',\n ['cropX', 'cropY'].concat(propertiesToInclude)\n ), {\n src: this.getSrc(),\n crossOrigin: this.getCrossOrigin(),\n filters: filters,\n });\n if (this.resizeFilter) {\n object.resizeFilter = this.resizeFilter.toObject();\n }\n return object;\n },\n\n /**\n * Returns true if an image has crop applied, inspecting values of cropX,cropY,width,height.\n * @return {Boolean}\n */\n hasCrop: function() {\n return this.cropX || this.cropY || this.width < this._element.width || this.height < this._element.height;\n },\n\n /* _TO_SVG_START_ */\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG: function() {\n var svgString = [], imageMarkup = [], strokeSvg, element = this._element,\n x = -this.width / 2, y = -this.height / 2, clipPath = '', imageRendering = '';\n if (!element) {\n return [];\n }\n if (this.hasCrop()) {\n var clipPathId = fabric.Object.__uid++;\n svgString.push(\n '\\n',\n '\\t\\n',\n '\\n'\n );\n clipPath = ' clip-path=\"url(#imageCrop_' + clipPathId + ')\" ';\n }\n if (!this.imageSmoothing) {\n imageRendering = '\" image-rendering=\"optimizeSpeed';\n }\n imageMarkup.push('\\t element with actual transformation, then offsetting object to the top/left\n // so that object's center aligns with container's left/top\n '\" width=\"', element.width || element.naturalWidth,\n '\" height=\"', element.height || element.height,\n imageRendering,\n '\"', clipPath,\n '>\\n');\n\n if (this.stroke || this.strokeDashArray) {\n var origFill = this.fill;\n this.fill = null;\n strokeSvg = [\n '\\t\\n'\n ];\n this.fill = origFill;\n }\n if (this.paintFirst !== 'fill') {\n svgString = svgString.concat(strokeSvg, imageMarkup);\n }\n else {\n svgString = svgString.concat(imageMarkup, strokeSvg);\n }\n return svgString;\n },\n /* _TO_SVG_END_ */\n\n /**\n * Returns source of an image\n * @param {Boolean} filtered indicates if the src is needed for svg\n * @return {String} Source of an image\n */\n getSrc: function(filtered) {\n var element = filtered ? this._element : this._originalElement;\n if (element) {\n if (element.toDataURL) {\n return element.toDataURL();\n }\n\n if (this.srcFromAttribute) {\n return element.getAttribute('src');\n }\n else {\n return element.src;\n }\n }\n else {\n return this.src || '';\n }\n },\n\n /**\n * Sets source of an image\n * @param {String} src Source string (URL)\n * @param {Function} [callback] Callback is invoked when image has been loaded (and all filters have been applied)\n * @param {Object} [options] Options object\n * @param {String} [options.crossOrigin] crossOrigin value (one of \"\", \"anonymous\", \"use-credentials\")\n * @see https://developer.mozilla.org/en-US/docs/HTML/CORS_settings_attributes\n * @return {fabric.Image} thisArg\n * @chainable\n */\n setSrc: function(src, callback, options) {\n fabric.util.loadImage(src, function(img, isError) {\n this.setElement(img, options);\n this._setWidthHeight();\n callback && callback(this, isError);\n }, this, options && options.crossOrigin);\n return this;\n },\n\n /**\n * Returns string representation of an instance\n * @return {String} String representation of an instance\n */\n toString: function() {\n return '#';\n },\n\n applyResizeFilters: function() {\n var filter = this.resizeFilter,\n minimumScale = this.minimumScaleTrigger,\n objectScale = this.getTotalObjectScaling(),\n scaleX = objectScale.scaleX,\n scaleY = objectScale.scaleY,\n elementToFilter = this._filteredEl || this._originalElement;\n if (this.group) {\n this.set('dirty', true);\n }\n if (!filter || (scaleX > minimumScale && scaleY > minimumScale)) {\n this._element = elementToFilter;\n this._filterScalingX = 1;\n this._filterScalingY = 1;\n this._lastScaleX = scaleX;\n this._lastScaleY = scaleY;\n return;\n }\n if (!fabric.filterBackend) {\n fabric.filterBackend = fabric.initFilterBackend();\n }\n var canvasEl = fabric.util.createCanvasElement(),\n cacheKey = this._filteredEl ? (this.cacheKey + '_filtered') : this.cacheKey,\n sourceWidth = elementToFilter.width, sourceHeight = elementToFilter.height;\n canvasEl.width = sourceWidth;\n canvasEl.height = sourceHeight;\n this._element = canvasEl;\n this._lastScaleX = filter.scaleX = scaleX;\n this._lastScaleY = filter.scaleY = scaleY;\n fabric.filterBackend.applyFilters(\n [filter], elementToFilter, sourceWidth, sourceHeight, this._element, cacheKey);\n this._filterScalingX = canvasEl.width / this._originalElement.width;\n this._filterScalingY = canvasEl.height / this._originalElement.height;\n },\n\n /**\n * Applies filters assigned to this image (from \"filters\" array) or from filter param\n * @method applyFilters\n * @param {Array} filters to be applied\n * @param {Boolean} forResizing specify if the filter operation is a resize operation\n * @return {thisArg} return the fabric.Image object\n * @chainable\n */\n applyFilters: function(filters) {\n\n filters = filters || this.filters || [];\n filters = filters.filter(function(filter) { return filter && !filter.isNeutralState(); });\n this.set('dirty', true);\n\n // needs to clear out or WEBGL will not resize correctly\n this.removeTexture(this.cacheKey + '_filtered');\n\n if (filters.length === 0) {\n this._element = this._originalElement;\n this._filteredEl = null;\n this._filterScalingX = 1;\n this._filterScalingY = 1;\n return this;\n }\n\n var imgElement = this._originalElement,\n sourceWidth = imgElement.naturalWidth || imgElement.width,\n sourceHeight = imgElement.naturalHeight || imgElement.height;\n\n if (this._element === this._originalElement) {\n // if the element is the same we need to create a new element\n var canvasEl = fabric.util.createCanvasElement();\n canvasEl.width = sourceWidth;\n canvasEl.height = sourceHeight;\n this._element = canvasEl;\n this._filteredEl = canvasEl;\n }\n else {\n // clear the existing element to get new filter data\n // also dereference the eventual resized _element\n this._element = this._filteredEl;\n this._filteredEl.getContext('2d').clearRect(0, 0, sourceWidth, sourceHeight);\n // we also need to resize again at next renderAll, so remove saved _lastScaleX/Y\n this._lastScaleX = 1;\n this._lastScaleY = 1;\n }\n if (!fabric.filterBackend) {\n fabric.filterBackend = fabric.initFilterBackend();\n }\n fabric.filterBackend.applyFilters(\n filters, this._originalElement, sourceWidth, sourceHeight, this._element, this.cacheKey);\n if (this._originalElement.width !== this._element.width ||\n this._originalElement.height !== this._element.height) {\n this._filterScalingX = this._element.width / this._originalElement.width;\n this._filterScalingY = this._element.height / this._originalElement.height;\n }\n return this;\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render: function(ctx) {\n fabric.util.setImageSmoothing(ctx, this.imageSmoothing);\n if (this.isMoving !== true && this.resizeFilter && this._needsResize()) {\n this.applyResizeFilters();\n }\n this._stroke(ctx);\n this._renderPaintInOrder(ctx);\n },\n\n /**\n * Paint the cached copy of the object on the target context.\n * it will set the imageSmoothing for the draw operation\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n drawCacheOnCanvas: function(ctx) {\n fabric.util.setImageSmoothing(ctx, this.imageSmoothing);\n fabric.Object.prototype.drawCacheOnCanvas.call(this, ctx);\n },\n\n /**\n * Decide if the object should cache or not. Create its own cache level\n * needsItsOwnCache should be used when the object drawing method requires\n * a cache step. None of the fabric classes requires it.\n * Generally you do not cache objects in groups because the group outside is cached.\n * This is the special image version where we would like to avoid caching where possible.\n * Essentially images do not benefit from caching. They may require caching, and in that\n * case we do it. Also caching an image usually ends in a loss of details.\n * A full performance audit should be done.\n * @return {Boolean}\n */\n shouldCache: function() {\n return this.needsItsOwnCache();\n },\n\n _renderFill: function(ctx) {\n var elementToDraw = this._element;\n if (!elementToDraw) {\n return;\n }\n var scaleX = this._filterScalingX, scaleY = this._filterScalingY,\n w = this.width, h = this.height, min = Math.min, max = Math.max,\n // crop values cannot be lesser than 0.\n cropX = max(this.cropX, 0), cropY = max(this.cropY, 0),\n elWidth = elementToDraw.naturalWidth || elementToDraw.width,\n elHeight = elementToDraw.naturalHeight || elementToDraw.height,\n sX = cropX * scaleX,\n sY = cropY * scaleY,\n // the width height cannot exceed element width/height, starting from the crop offset.\n sW = min(w * scaleX, elWidth - sX),\n sH = min(h * scaleY, elHeight - sY),\n x = -w / 2, y = -h / 2,\n maxDestW = min(w, elWidth / scaleX - cropX),\n maxDestH = min(h, elHeight / scaleY - cropY);\n\n elementToDraw && ctx.drawImage(elementToDraw, sX, sY, sW, sH, x, y, maxDestW, maxDestH);\n },\n\n /**\n * needed to check if image needs resize\n * @private\n */\n _needsResize: function() {\n var scale = this.getTotalObjectScaling();\n return (scale.scaleX !== this._lastScaleX || scale.scaleY !== this._lastScaleY);\n },\n\n /**\n * @private\n */\n _resetWidthHeight: function() {\n this.set(this.getOriginalSize());\n },\n\n /**\n * The Image class's initialization method. This method is automatically\n * called by the constructor.\n * @private\n * @param {HTMLImageElement|String} element The element representing the image\n * @param {Object} [options] Options object\n */\n _initElement: function(element, options) {\n this.setElement(fabric.util.getById(element), options);\n fabric.util.addClass(this.getElement(), fabric.Image.CSS_CANVAS);\n },\n\n /**\n * @private\n * @param {Object} [options] Options object\n */\n _initConfig: function(options) {\n options || (options = { });\n this.setOptions(options);\n this._setWidthHeight(options);\n },\n\n /**\n * @private\n * @param {Array} filters to be initialized\n * @param {Function} callback Callback to invoke when all fabric.Image.filters instances are created\n */\n _initFilters: function(filters, callback) {\n if (filters && filters.length) {\n fabric.util.enlivenObjects(filters, function(enlivenedObjects) {\n callback && callback(enlivenedObjects);\n }, 'fabric.Image.filters');\n }\n else {\n callback && callback();\n }\n },\n\n /**\n * @private\n * Set the width and the height of the image object, using the element or the\n * options.\n * @param {Object} [options] Object with width/height properties\n */\n _setWidthHeight: function(options) {\n options || (options = { });\n var el = this.getElement();\n this.width = options.width || el.naturalWidth || el.width || 0;\n this.height = options.height || el.naturalHeight || el.height || 0;\n },\n\n /**\n * Calculate offset for center and scale factor for the image in order to respect\n * the preserveAspectRatio attribute\n * @private\n * @return {Object}\n */\n parsePreserveAspectRatioAttribute: function() {\n var pAR = fabric.util.parsePreserveAspectRatioAttribute(this.preserveAspectRatio || ''),\n rWidth = this._element.width, rHeight = this._element.height,\n scaleX = 1, scaleY = 1, offsetLeft = 0, offsetTop = 0, cropX = 0, cropY = 0,\n offset, pWidth = this.width, pHeight = this.height, parsedAttributes = { width: pWidth, height: pHeight };\n if (pAR && (pAR.alignX !== 'none' || pAR.alignY !== 'none')) {\n if (pAR.meetOrSlice === 'meet') {\n scaleX = scaleY = fabric.util.findScaleToFit(this._element, parsedAttributes);\n offset = (pWidth - rWidth * scaleX) / 2;\n if (pAR.alignX === 'Min') {\n offsetLeft = -offset;\n }\n if (pAR.alignX === 'Max') {\n offsetLeft = offset;\n }\n offset = (pHeight - rHeight * scaleY) / 2;\n if (pAR.alignY === 'Min') {\n offsetTop = -offset;\n }\n if (pAR.alignY === 'Max') {\n offsetTop = offset;\n }\n }\n if (pAR.meetOrSlice === 'slice') {\n scaleX = scaleY = fabric.util.findScaleToCover(this._element, parsedAttributes);\n offset = rWidth - pWidth / scaleX;\n if (pAR.alignX === 'Mid') {\n cropX = offset / 2;\n }\n if (pAR.alignX === 'Max') {\n cropX = offset;\n }\n offset = rHeight - pHeight / scaleY;\n if (pAR.alignY === 'Mid') {\n cropY = offset / 2;\n }\n if (pAR.alignY === 'Max') {\n cropY = offset;\n }\n rWidth = pWidth / scaleX;\n rHeight = pHeight / scaleY;\n }\n }\n else {\n scaleX = pWidth / rWidth;\n scaleY = pHeight / rHeight;\n }\n return {\n width: rWidth,\n height: rHeight,\n scaleX: scaleX,\n scaleY: scaleY,\n offsetLeft: offsetLeft,\n offsetTop: offsetTop,\n cropX: cropX,\n cropY: cropY\n };\n }\n });\n\n /**\n * Default CSS class name for canvas\n * @static\n * @type String\n * @default\n */\n fabric.Image.CSS_CANVAS = 'canvas-img';\n\n /**\n * Alias for getSrc\n * @static\n */\n fabric.Image.prototype.getSvgSrc = fabric.Image.prototype.getSrc;\n\n /**\n * Creates an instance of fabric.Image from its object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {Function} callback Callback to invoke when an image instance is created\n */\n fabric.Image.fromObject = function(_object, callback) {\n var object = fabric.util.object.clone(_object);\n fabric.util.loadImage(object.src, function(img, isError) {\n if (isError) {\n callback && callback(null, true);\n return;\n }\n fabric.Image.prototype._initFilters.call(object, object.filters, function(filters) {\n object.filters = filters || [];\n fabric.Image.prototype._initFilters.call(object, [object.resizeFilter], function(resizeFilters) {\n object.resizeFilter = resizeFilters[0];\n fabric.util.enlivenObjects([object.clipPath], function(enlivedProps) {\n object.clipPath = enlivedProps[0];\n var image = new fabric.Image(img, object);\n callback(image, false);\n });\n });\n });\n }, null, object.crossOrigin);\n };\n\n /**\n * Creates an instance of fabric.Image from an URL string\n * @static\n * @param {String} url URL to create an image from\n * @param {Function} [callback] Callback to invoke when image is created (newly created image is passed as a first argument). Second argument is a boolean indicating if an error occurred or not.\n * @param {Object} [imgOptions] Options object\n */\n fabric.Image.fromURL = function(url, callback, imgOptions) {\n fabric.util.loadImage(url, function(img, isError) {\n callback && callback(new fabric.Image(img, imgOptions), isError);\n }, null, imgOptions && imgOptions.crossOrigin);\n };\n\n /* _FROM_SVG_START_ */\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link fabric.Image.fromElement})\n * @static\n * @see {@link http://www.w3.org/TR/SVG/struct.html#ImageElement}\n */\n fabric.Image.ATTRIBUTE_NAMES =\n fabric.SHARED_ATTRIBUTES.concat(\n 'x y width height preserveAspectRatio xlink:href crossOrigin image-rendering'.split(' ')\n );\n\n /**\n * Returns {@link fabric.Image} instance from an SVG element\n * @static\n * @param {SVGElement} element Element to parse\n * @param {Object} [options] Options object\n * @param {Function} callback Callback to execute when fabric.Image object is created\n * @return {fabric.Image} Instance of fabric.Image\n */\n fabric.Image.fromElement = function(element, callback, options) {\n var parsedAttributes = fabric.parseAttributes(element, fabric.Image.ATTRIBUTE_NAMES);\n fabric.Image.fromURL(parsedAttributes['xlink:href'], callback,\n extend((options ? fabric.util.object.clone(options) : { }), parsedAttributes));\n };\n /* _FROM_SVG_END_ */\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\nfabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prototype */ {\n\n /**\n * @private\n * @return {Number} angle value\n */\n _getAngleValueForStraighten: function() {\n var angle = this.angle % 360;\n if (angle > 0) {\n return Math.round((angle - 1) / 90) * 90;\n }\n return Math.round(angle / 90) * 90;\n },\n\n /**\n * Straightens an object (rotating it from current angle to one of 0, 90, 180, 270, etc. depending on which is closer)\n * @return {fabric.Object} thisArg\n * @chainable\n */\n straighten: function() {\n this.rotate(this._getAngleValueForStraighten());\n return this;\n },\n\n /**\n * Same as {@link fabric.Object.prototype.straighten} but with animation\n * @param {Object} callbacks Object with callback functions\n * @param {Function} [callbacks.onComplete] Invoked on completion\n * @param {Function} [callbacks.onChange] Invoked on every step of animation\n * @return {fabric.Object} thisArg\n * @chainable\n */\n fxStraighten: function(callbacks) {\n callbacks = callbacks || { };\n\n var empty = function() { },\n onComplete = callbacks.onComplete || empty,\n onChange = callbacks.onChange || empty,\n _this = this;\n\n fabric.util.animate({\n startValue: this.get('angle'),\n endValue: this._getAngleValueForStraighten(),\n duration: this.FX_DURATION,\n onChange: function(value) {\n _this.rotate(value);\n onChange();\n },\n onComplete: function() {\n _this.setCoords();\n onComplete();\n },\n });\n\n return this;\n }\n});\n\nfabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.StaticCanvas.prototype */ {\n\n /**\n * Straightens object, then rerenders canvas\n * @param {fabric.Object} object Object to straighten\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n straightenObject: function (object) {\n object.straighten();\n this.requestRenderAll();\n return this;\n },\n\n /**\n * Same as {@link fabric.Canvas.prototype.straightenObject}, but animated\n * @param {fabric.Object} object Object to straighten\n * @return {fabric.Canvas} thisArg\n * @chainable\n */\n fxStraightenObject: function (object) {\n object.fxStraighten({\n onChange: this.requestRenderAllBound\n });\n return this;\n }\n});\n\n\n(function() {\n\n 'use strict';\n\n /**\n * Tests if webgl supports certain precision\n * @param {WebGL} Canvas WebGL context to test on\n * @param {String} Precision to test can be any of following: 'lowp', 'mediump', 'highp'\n * @returns {Boolean} Whether the user's browser WebGL supports given precision.\n */\n function testPrecision(gl, precision){\n var fragmentSource = 'precision ' + precision + ' float;\\nvoid main(){}';\n var fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);\n gl.shaderSource(fragmentShader, fragmentSource);\n gl.compileShader(fragmentShader);\n if (!gl.getShaderParameter(fragmentShader, gl.COMPILE_STATUS)) {\n return false;\n }\n return true;\n }\n\n /**\n * Indicate whether this filtering backend is supported by the user's browser.\n * @param {Number} tileSize check if the tileSize is supported\n * @returns {Boolean} Whether the user's browser supports WebGL.\n */\n fabric.isWebglSupported = function(tileSize) {\n if (fabric.isLikelyNode) {\n return false;\n }\n tileSize = tileSize || fabric.WebglFilterBackend.prototype.tileSize;\n var canvas = document.createElement('canvas');\n var gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl');\n var isSupported = false;\n // eslint-disable-next-line\n if (gl) {\n fabric.maxTextureSize = gl.getParameter(gl.MAX_TEXTURE_SIZE);\n isSupported = fabric.maxTextureSize >= tileSize;\n var precisions = ['highp', 'mediump', 'lowp'];\n for (var i = 0; i < 3; i++){\n if (testPrecision(gl, precisions[i])){\n fabric.webGlPrecision = precisions[i];\n break;\n };\n }\n }\n this.isSupported = isSupported;\n return isSupported;\n };\n\n fabric.WebglFilterBackend = WebglFilterBackend;\n\n /**\n * WebGL filter backend.\n */\n function WebglFilterBackend(options) {\n if (options && options.tileSize) {\n this.tileSize = options.tileSize;\n }\n this.setupGLContext(this.tileSize, this.tileSize);\n this.captureGPUInfo();\n };\n\n WebglFilterBackend.prototype = /** @lends fabric.WebglFilterBackend.prototype */ {\n\n tileSize: 2048,\n\n /**\n * Experimental. This object is a sort of repository of help layers used to avoid\n * of recreating them during frequent filtering. If you are previewing a filter with\n * a slider you probably do not want to create help layers every filter step.\n * in this object there will be appended some canvases, created once, resized sometimes\n * cleared never. Clearing is left to the developer.\n **/\n resources: {\n\n },\n\n /**\n * Setup a WebGL context suitable for filtering, and bind any needed event handlers.\n */\n setupGLContext: function(width, height) {\n this.dispose();\n this.createWebGLCanvas(width, height);\n // eslint-disable-next-line\n this.aPosition = new Float32Array([0, 0, 0, 1, 1, 0, 1, 1]);\n this.chooseFastestCopyGLTo2DMethod(width, height);\n },\n\n /**\n * Pick a method to copy data from GL context to 2d canvas. In some browsers using\n * putImageData is faster than drawImage for that specific operation.\n */\n chooseFastestCopyGLTo2DMethod: function(width, height) {\n var canMeasurePerf = typeof window.performance !== 'undefined', canUseImageData;\n try {\n new ImageData(1, 1);\n canUseImageData = true;\n }\n catch (e) {\n canUseImageData = false;\n }\n // eslint-disable-next-line no-undef\n var canUseArrayBuffer = typeof ArrayBuffer !== 'undefined';\n // eslint-disable-next-line no-undef\n var canUseUint8Clamped = typeof Uint8ClampedArray !== 'undefined';\n\n if (!(canMeasurePerf && canUseImageData && canUseArrayBuffer && canUseUint8Clamped)) {\n return;\n }\n\n var targetCanvas = fabric.util.createCanvasElement();\n // eslint-disable-next-line no-undef\n var imageBuffer = new ArrayBuffer(width * height * 4);\n if (fabric.forceGLPutImageData) {\n this.imageBuffer = imageBuffer;\n this.copyGLTo2D = copyGLTo2DPutImageData;\n return;\n }\n var testContext = {\n imageBuffer: imageBuffer,\n destinationWidth: width,\n destinationHeight: height,\n targetCanvas: targetCanvas\n };\n var startTime, drawImageTime, putImageDataTime;\n targetCanvas.width = width;\n targetCanvas.height = height;\n\n startTime = window.performance.now();\n copyGLTo2DDrawImage.call(testContext, this.gl, testContext);\n drawImageTime = window.performance.now() - startTime;\n\n startTime = window.performance.now();\n copyGLTo2DPutImageData.call(testContext, this.gl, testContext);\n putImageDataTime = window.performance.now() - startTime;\n\n if (drawImageTime > putImageDataTime) {\n this.imageBuffer = imageBuffer;\n this.copyGLTo2D = copyGLTo2DPutImageData;\n }\n else {\n this.copyGLTo2D = copyGLTo2DDrawImage;\n }\n },\n\n /**\n * Create a canvas element and associated WebGL context and attaches them as\n * class properties to the GLFilterBackend class.\n */\n createWebGLCanvas: function(width, height) {\n var canvas = fabric.util.createCanvasElement();\n canvas.width = width;\n canvas.height = height;\n var glOptions = {\n alpha: true,\n premultipliedAlpha: false,\n depth: false,\n stencil: false,\n antialias: false\n },\n gl = canvas.getContext('webgl', glOptions);\n if (!gl) {\n gl = canvas.getContext('experimental-webgl', glOptions);\n }\n if (!gl) {\n return;\n }\n gl.clearColor(0, 0, 0, 0);\n // this canvas can fire webglcontextlost and webglcontextrestored\n this.canvas = canvas;\n this.gl = gl;\n },\n\n /**\n * Attempts to apply the requested filters to the source provided, drawing the filtered output\n * to the provided target canvas.\n *\n * @param {Array} filters The filters to apply.\n * @param {HTMLImageElement|HTMLCanvasElement} source The source to be filtered.\n * @param {Number} width The width of the source input.\n * @param {Number} height The height of the source input.\n * @param {HTMLCanvasElement} targetCanvas The destination for filtered output to be drawn.\n * @param {String|undefined} cacheKey A key used to cache resources related to the source. If\n * omitted, caching will be skipped.\n */\n applyFilters: function(filters, source, width, height, targetCanvas, cacheKey) {\n var gl = this.gl;\n var cachedTexture;\n if (cacheKey) {\n cachedTexture = this.getCachedTexture(cacheKey, source);\n }\n var pipelineState = {\n originalWidth: source.width || source.originalWidth,\n originalHeight: source.height || source.originalHeight,\n sourceWidth: width,\n sourceHeight: height,\n destinationWidth: width,\n destinationHeight: height,\n context: gl,\n sourceTexture: this.createTexture(gl, width, height, !cachedTexture && source),\n targetTexture: this.createTexture(gl, width, height),\n originalTexture: cachedTexture ||\n this.createTexture(gl, width, height, !cachedTexture && source),\n passes: filters.length,\n webgl: true,\n aPosition: this.aPosition,\n programCache: this.programCache,\n pass: 0,\n filterBackend: this,\n targetCanvas: targetCanvas\n };\n var tempFbo = gl.createFramebuffer();\n gl.bindFramebuffer(gl.FRAMEBUFFER, tempFbo);\n filters.forEach(function(filter) { filter && filter.applyTo(pipelineState); });\n resizeCanvasIfNeeded(pipelineState);\n this.copyGLTo2D(gl, pipelineState);\n gl.bindTexture(gl.TEXTURE_2D, null);\n gl.deleteTexture(pipelineState.sourceTexture);\n gl.deleteTexture(pipelineState.targetTexture);\n gl.deleteFramebuffer(tempFbo);\n targetCanvas.getContext('2d').setTransform(1, 0, 0, 1, 0, 0);\n return pipelineState;\n },\n\n /**\n * Detach event listeners, remove references, and clean up caches.\n */\n dispose: function() {\n if (this.canvas) {\n this.canvas = null;\n this.gl = null;\n }\n this.clearWebGLCaches();\n },\n\n /**\n * Wipe out WebGL-related caches.\n */\n clearWebGLCaches: function() {\n this.programCache = {};\n this.textureCache = {};\n },\n\n /**\n * Create a WebGL texture object.\n *\n * Accepts specific dimensions to initialize the texture to or a source image.\n *\n * @param {WebGLRenderingContext} gl The GL context to use for creating the texture.\n * @param {Number} width The width to initialize the texture at.\n * @param {Number} height The height to initialize the texture.\n * @param {HTMLImageElement|HTMLCanvasElement} textureImageSource A source for the texture data.\n * @returns {WebGLTexture}\n */\n createTexture: function(gl, width, height, textureImageSource) {\n var texture = gl.createTexture();\n gl.bindTexture(gl.TEXTURE_2D, texture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n if (textureImageSource) {\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, textureImageSource);\n }\n else {\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);\n }\n return texture;\n },\n\n /**\n * Can be optionally used to get a texture from the cache array\n *\n * If an existing texture is not found, a new texture is created and cached.\n *\n * @param {String} uniqueId A cache key to use to find an existing texture.\n * @param {HTMLImageElement|HTMLCanvasElement} textureImageSource A source to use to create the\n * texture cache entry if one does not already exist.\n */\n getCachedTexture: function(uniqueId, textureImageSource) {\n if (this.textureCache[uniqueId]) {\n return this.textureCache[uniqueId];\n }\n else {\n var texture = this.createTexture(\n this.gl, textureImageSource.width, textureImageSource.height, textureImageSource);\n this.textureCache[uniqueId] = texture;\n return texture;\n }\n },\n\n /**\n * Clear out cached resources related to a source image that has been\n * filtered previously.\n *\n * @param {String} cacheKey The cache key provided when the source image was filtered.\n */\n evictCachesForKey: function(cacheKey) {\n if (this.textureCache[cacheKey]) {\n this.gl.deleteTexture(this.textureCache[cacheKey]);\n delete this.textureCache[cacheKey];\n }\n },\n\n copyGLTo2D: copyGLTo2DDrawImage,\n\n /**\n * Attempt to extract GPU information strings from a WebGL context.\n *\n * Useful information when debugging or blacklisting specific GPUs.\n *\n * @returns {Object} A GPU info object with renderer and vendor strings.\n */\n captureGPUInfo: function() {\n if (this.gpuInfo) {\n return this.gpuInfo;\n }\n var gl = this.gl, gpuInfo = { renderer: '', vendor: '' };\n if (!gl) {\n return gpuInfo;\n }\n var ext = gl.getExtension('WEBGL_debug_renderer_info');\n if (ext) {\n var renderer = gl.getParameter(ext.UNMASKED_RENDERER_WEBGL);\n var vendor = gl.getParameter(ext.UNMASKED_VENDOR_WEBGL);\n if (renderer) {\n gpuInfo.renderer = renderer.toLowerCase();\n }\n if (vendor) {\n gpuInfo.vendor = vendor.toLowerCase();\n }\n }\n this.gpuInfo = gpuInfo;\n return gpuInfo;\n },\n };\n})();\n\nfunction resizeCanvasIfNeeded(pipelineState) {\n var targetCanvas = pipelineState.targetCanvas,\n width = targetCanvas.width, height = targetCanvas.height,\n dWidth = pipelineState.destinationWidth,\n dHeight = pipelineState.destinationHeight;\n\n if (width !== dWidth || height !== dHeight) {\n targetCanvas.width = dWidth;\n targetCanvas.height = dHeight;\n }\n}\n\n/**\n * Copy an input WebGL canvas on to an output 2D canvas.\n *\n * The WebGL canvas is assumed to be upside down, with the top-left pixel of the\n * desired output image appearing in the bottom-left corner of the WebGL canvas.\n *\n * @param {WebGLRenderingContext} sourceContext The WebGL context to copy from.\n * @param {HTMLCanvasElement} targetCanvas The 2D target canvas to copy on to.\n * @param {Object} pipelineState The 2D target canvas to copy on to.\n */\nfunction copyGLTo2DDrawImage(gl, pipelineState) {\n var glCanvas = gl.canvas, targetCanvas = pipelineState.targetCanvas,\n ctx = targetCanvas.getContext('2d');\n ctx.translate(0, targetCanvas.height); // move it down again\n ctx.scale(1, -1); // vertical flip\n // where is my image on the big glcanvas?\n var sourceY = glCanvas.height - targetCanvas.height;\n ctx.drawImage(glCanvas, 0, sourceY, targetCanvas.width, targetCanvas.height, 0, 0,\n targetCanvas.width, targetCanvas.height);\n}\n\n/**\n * Copy an input WebGL canvas on to an output 2D canvas using 2d canvas' putImageData\n * API. Measurably faster than using ctx.drawImage in Firefox (version 54 on OSX Sierra).\n *\n * @param {WebGLRenderingContext} sourceContext The WebGL context to copy from.\n * @param {HTMLCanvasElement} targetCanvas The 2D target canvas to copy on to.\n * @param {Object} pipelineState The 2D target canvas to copy on to.\n */\nfunction copyGLTo2DPutImageData(gl, pipelineState) {\n var targetCanvas = pipelineState.targetCanvas, ctx = targetCanvas.getContext('2d'),\n dWidth = pipelineState.destinationWidth,\n dHeight = pipelineState.destinationHeight,\n numBytes = dWidth * dHeight * 4;\n\n // eslint-disable-next-line no-undef\n var u8 = new Uint8Array(this.imageBuffer, 0, numBytes);\n // eslint-disable-next-line no-undef\n var u8Clamped = new Uint8ClampedArray(this.imageBuffer, 0, numBytes);\n\n gl.readPixels(0, 0, dWidth, dHeight, gl.RGBA, gl.UNSIGNED_BYTE, u8);\n var imgData = new ImageData(u8Clamped, dWidth, dHeight);\n ctx.putImageData(imgData, 0, 0);\n}\n\n\n(function() {\n\n 'use strict';\n\n var noop = function() {};\n\n fabric.Canvas2dFilterBackend = Canvas2dFilterBackend;\n\n /**\n * Canvas 2D filter backend.\n */\n function Canvas2dFilterBackend() {};\n\n Canvas2dFilterBackend.prototype = /** @lends fabric.Canvas2dFilterBackend.prototype */ {\n evictCachesForKey: noop,\n dispose: noop,\n clearWebGLCaches: noop,\n\n /**\n * Experimental. This object is a sort of repository of help layers used to avoid\n * of recreating them during frequent filtering. If you are previewing a filter with\n * a slider you probably do not want to create help layers every filter step.\n * in this object there will be appended some canvases, created once, resized sometimes\n * cleared never. Clearing is left to the developer.\n **/\n resources: {\n\n },\n\n /**\n * Apply a set of filters against a source image and draw the filtered output\n * to the provided destination canvas.\n *\n * @param {EnhancedFilter} filters The filter to apply.\n * @param {HTMLImageElement|HTMLCanvasElement} sourceElement The source to be filtered.\n * @param {Number} sourceWidth The width of the source input.\n * @param {Number} sourceHeight The height of the source input.\n * @param {HTMLCanvasElement} targetCanvas The destination for filtered output to be drawn.\n */\n applyFilters: function(filters, sourceElement, sourceWidth, sourceHeight, targetCanvas) {\n var ctx = targetCanvas.getContext('2d');\n ctx.drawImage(sourceElement, 0, 0, sourceWidth, sourceHeight);\n var imageData = ctx.getImageData(0, 0, sourceWidth, sourceHeight);\n var originalImageData = ctx.getImageData(0, 0, sourceWidth, sourceHeight);\n var pipelineState = {\n sourceWidth: sourceWidth,\n sourceHeight: sourceHeight,\n imageData: imageData,\n originalEl: sourceElement,\n originalImageData: originalImageData,\n canvasEl: targetCanvas,\n ctx: ctx,\n filterBackend: this,\n };\n filters.forEach(function(filter) { filter.applyTo(pipelineState); });\n if (pipelineState.imageData.width !== sourceWidth || pipelineState.imageData.height !== sourceHeight) {\n targetCanvas.width = pipelineState.imageData.width;\n targetCanvas.height = pipelineState.imageData.height;\n }\n ctx.putImageData(pipelineState.imageData, 0, 0);\n return pipelineState;\n },\n\n };\n})();\n\n\n/**\n * @namespace fabric.Image.filters\n * @memberOf fabric.Image\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-2#image_filters}\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n */\nfabric.Image = fabric.Image || { };\nfabric.Image.filters = fabric.Image.filters || { };\n\n/**\n * Root filter class from which all filter classes inherit from\n * @class fabric.Image.filters.BaseFilter\n * @memberOf fabric.Image.filters\n */\nfabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Image.filters.BaseFilter.prototype */ {\n\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n type: 'BaseFilter',\n\n /**\n * Array of attributes to send with buffers. do not modify\n * @private\n */\n\n vertexSource: 'attribute vec2 aPosition;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'void main() {\\n' +\n 'vTexCoord = aPosition;\\n' +\n 'gl_Position = vec4(aPosition * 2.0 - 1.0, 0.0, 1.0);\\n' +\n '}',\n\n fragmentSource: 'precision highp float;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'void main() {\\n' +\n 'gl_FragColor = texture2D(uTexture, vTexCoord);\\n' +\n '}',\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n */\n initialize: function(options) {\n if (options) {\n this.setOptions(options);\n }\n },\n\n /**\n * Sets filter's properties from options\n * @param {Object} [options] Options object\n */\n setOptions: function(options) {\n for (var prop in options) {\n this[prop] = options[prop];\n }\n },\n\n /**\n * Compile this filter's shader program.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context to use for shader compilation.\n * @param {String} fragmentSource fragmentShader source for compilation\n * @param {String} vertexSource vertexShader source for compilation\n */\n createProgram: function(gl, fragmentSource, vertexSource) {\n fragmentSource = fragmentSource || this.fragmentSource;\n vertexSource = vertexSource || this.vertexSource;\n if (fabric.webGlPrecision !== 'highp'){\n fragmentSource = fragmentSource.replace(\n /precision highp float/g,\n 'precision ' + fabric.webGlPrecision + ' float'\n );\n }\n var vertexShader = gl.createShader(gl.VERTEX_SHADER);\n gl.shaderSource(vertexShader, vertexSource);\n gl.compileShader(vertexShader);\n if (!gl.getShaderParameter(vertexShader, gl.COMPILE_STATUS)) {\n throw new Error(\n // eslint-disable-next-line prefer-template\n 'Vertex shader compile error for ' + this.type + ': ' +\n gl.getShaderInfoLog(vertexShader)\n );\n }\n\n var fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);\n gl.shaderSource(fragmentShader, fragmentSource);\n gl.compileShader(fragmentShader);\n if (!gl.getShaderParameter(fragmentShader, gl.COMPILE_STATUS)) {\n throw new Error(\n // eslint-disable-next-line prefer-template\n 'Fragment shader compile error for ' + this.type + ': ' +\n gl.getShaderInfoLog(fragmentShader)\n );\n }\n\n var program = gl.createProgram();\n gl.attachShader(program, vertexShader);\n gl.attachShader(program, fragmentShader);\n gl.linkProgram(program);\n if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\n throw new Error(\n // eslint-disable-next-line prefer-template\n 'Shader link error for \"${this.type}\" ' +\n gl.getProgramInfoLog(program)\n );\n }\n\n var attributeLocations = this.getAttributeLocations(gl, program);\n var uniformLocations = this.getUniformLocations(gl, program) || { };\n uniformLocations.uStepW = gl.getUniformLocation(program, 'uStepW');\n uniformLocations.uStepH = gl.getUniformLocation(program, 'uStepH');\n return {\n program: program,\n attributeLocations: attributeLocations,\n uniformLocations: uniformLocations\n };\n },\n\n /**\n * Return a map of attribute names to WebGLAttributeLocation objects.\n *\n * @param {WebGLRenderingContext} gl The canvas context used to compile the shader program.\n * @param {WebGLShaderProgram} program The shader program from which to take attribute locations.\n * @returns {Object} A map of attribute names to attribute locations.\n */\n getAttributeLocations: function(gl, program) {\n return {\n aPosition: gl.getAttribLocation(program, 'aPosition'),\n };\n },\n\n /**\n * Return a map of uniform names to WebGLUniformLocation objects.\n *\n * Intended to be overridden by subclasses.\n *\n * @param {WebGLRenderingContext} gl The canvas context used to compile the shader program.\n * @param {WebGLShaderProgram} program The shader program from which to take uniform locations.\n * @returns {Object} A map of uniform names to uniform locations.\n */\n getUniformLocations: function (/* gl, program */) {\n // in case i do not need any special uniform i need to return an empty object\n return { };\n },\n\n /**\n * Send attribute data from this filter to its shader program on the GPU.\n *\n * @param {WebGLRenderingContext} gl The canvas context used to compile the shader program.\n * @param {Object} attributeLocations A map of shader attribute names to their locations.\n */\n sendAttributeData: function(gl, attributeLocations, aPositionData) {\n var attributeLocation = attributeLocations.aPosition;\n var buffer = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer);\n gl.enableVertexAttribArray(attributeLocation);\n gl.vertexAttribPointer(attributeLocation, 2, gl.FLOAT, false, 0, 0);\n gl.bufferData(gl.ARRAY_BUFFER, aPositionData, gl.STATIC_DRAW);\n },\n\n _setupFrameBuffer: function(options) {\n var gl = options.context, width, height;\n if (options.passes > 1) {\n width = options.destinationWidth;\n height = options.destinationHeight;\n if (options.sourceWidth !== width || options.sourceHeight !== height) {\n gl.deleteTexture(options.targetTexture);\n options.targetTexture = options.filterBackend.createTexture(gl, width, height);\n }\n gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D,\n options.targetTexture, 0);\n }\n else {\n // draw last filter on canvas and not to framebuffer.\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n gl.finish();\n }\n },\n\n _swapTextures: function(options) {\n options.passes--;\n options.pass++;\n var temp = options.targetTexture;\n options.targetTexture = options.sourceTexture;\n options.sourceTexture = temp;\n },\n\n /**\n * Generic isNeutral implementation for one parameter based filters.\n * Used only in image applyFilters to discard filters that will not have an effect\n * on the image\n * Other filters may need their own version ( ColorMatrix, HueRotation, gamma, ComposedFilter )\n * @param {Object} options\n **/\n isNeutralState: function(/* options */) {\n var main = this.mainParameter,\n _class = fabric.Image.filters[this.type].prototype;\n if (main) {\n if (Array.isArray(_class[main])) {\n for (var i = _class[main].length; i--;) {\n if (this[main][i] !== _class[main][i]) {\n return false;\n }\n }\n return true;\n }\n else {\n return _class[main] === this[main];\n }\n }\n else {\n return false;\n }\n },\n\n /**\n * Apply this filter to the input image data provided.\n *\n * Determines whether to use WebGL or Canvas2D based on the options.webgl flag.\n *\n * @param {Object} options\n * @param {Number} options.passes The number of filters remaining to be executed\n * @param {Boolean} options.webgl Whether to use webgl to render the filter.\n * @param {WebGLTexture} options.sourceTexture The texture setup as the source to be filtered.\n * @param {WebGLTexture} options.targetTexture The texture where filtered output should be drawn.\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n */\n applyTo: function(options) {\n if (options.webgl) {\n this._setupFrameBuffer(options);\n this.applyToWebGL(options);\n this._swapTextures(options);\n }\n else {\n this.applyTo2d(options);\n }\n },\n\n /**\n * Retrieves the cached shader.\n * @param {Object} options\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n */\n retrieveShader: function(options) {\n if (!options.programCache.hasOwnProperty(this.type)) {\n options.programCache[this.type] = this.createProgram(options.context);\n }\n return options.programCache[this.type];\n },\n\n /**\n * Apply this filter using webgl.\n *\n * @param {Object} options\n * @param {Number} options.passes The number of filters remaining to be executed\n * @param {Boolean} options.webgl Whether to use webgl to render the filter.\n * @param {WebGLTexture} options.originalTexture The texture of the original input image.\n * @param {WebGLTexture} options.sourceTexture The texture setup as the source to be filtered.\n * @param {WebGLTexture} options.targetTexture The texture where filtered output should be drawn.\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n */\n applyToWebGL: function(options) {\n var gl = options.context;\n var shader = this.retrieveShader(options);\n if (options.pass === 0 && options.originalTexture) {\n gl.bindTexture(gl.TEXTURE_2D, options.originalTexture);\n }\n else {\n gl.bindTexture(gl.TEXTURE_2D, options.sourceTexture);\n }\n gl.useProgram(shader.program);\n this.sendAttributeData(gl, shader.attributeLocations, options.aPosition);\n\n gl.uniform1f(shader.uniformLocations.uStepW, 1 / options.sourceWidth);\n gl.uniform1f(shader.uniformLocations.uStepH, 1 / options.sourceHeight);\n\n this.sendUniformData(gl, shader.uniformLocations);\n gl.viewport(0, 0, options.destinationWidth, options.destinationHeight);\n gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\n },\n\n bindAdditionalTexture: function(gl, texture, textureUnit) {\n gl.activeTexture(textureUnit);\n gl.bindTexture(gl.TEXTURE_2D, texture);\n // reset active texture to 0 as usual\n gl.activeTexture(gl.TEXTURE0);\n },\n\n unbindAdditionalTexture: function(gl, textureUnit) {\n gl.activeTexture(textureUnit);\n gl.bindTexture(gl.TEXTURE_2D, null);\n gl.activeTexture(gl.TEXTURE0);\n },\n\n getMainParameter: function() {\n return this[this.mainParameter];\n },\n\n setMainParameter: function(value) {\n this[this.mainParameter] = value;\n },\n\n /**\n * Send uniform data from this filter to its shader program on the GPU.\n *\n * Intended to be overridden by subclasses.\n *\n * @param {WebGLRenderingContext} gl The canvas context used to compile the shader program.\n * @param {Object} uniformLocations A map of shader uniform names to their locations.\n */\n sendUniformData: function(/* gl, uniformLocations */) {\n // Intentionally left blank. Override me in subclasses.\n },\n\n /**\n * If needed by a 2d filter, this functions can create an helper canvas to be used\n * remember that options.targetCanvas is available for use till end of chain.\n */\n createHelpLayer: function(options) {\n if (!options.helpLayer) {\n var helpLayer = document.createElement('canvas');\n helpLayer.width = options.sourceWidth;\n helpLayer.height = options.sourceHeight;\n options.helpLayer = helpLayer;\n }\n },\n\n /**\n * Returns object representation of an instance\n * @return {Object} Object representation of an instance\n */\n toObject: function() {\n var object = { type: this.type }, mainP = this.mainParameter;\n if (mainP) {\n object[mainP] = this[mainP];\n }\n return object;\n },\n\n /**\n * Returns a JSON representation of an instance\n * @return {Object} JSON\n */\n toJSON: function() {\n // delegate, not alias\n return this.toObject();\n }\n});\n\nfabric.Image.filters.BaseFilter.fromObject = function(object, callback) {\n var filter = new fabric.Image.filters[object.type](object);\n callback && callback(filter);\n return filter;\n};\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n\n /**\n * Color Matrix filter class\n * @class fabric.Image.filters.ColorMatrix\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @see {@link fabric.Image.filters.ColorMatrix#initialize} for constructor definition\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n * @see {@Link http://www.webwasp.co.uk/tutorials/219/Color_Matrix_Filter.php}\n * @see {@Link http://phoboslab.org/log/2013/11/fast-image-filters-with-webgl}\n * @example Kodachrome filter\n * var filter = new fabric.Image.filters.ColorMatrix({\n * matrix: [\n 1.1285582396593525, -0.3967382283601348, -0.03992559172921793, 0, 63.72958762196502,\n -0.16404339962244616, 1.0835251566291304, -0.05498805115633132, 0, 24.732407896706203,\n -0.16786010706155763, -0.5603416277695248, 1.6014850761964943, 0, 35.62982807460946,\n 0, 0, 0, 1, 0\n ]\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\n filters.ColorMatrix = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.ColorMatrix.prototype */ {\n\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n type: 'ColorMatrix',\n\n fragmentSource: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'uniform mat4 uColorMatrix;\\n' +\n 'uniform vec4 uConstants;\\n' +\n 'void main() {\\n' +\n 'vec4 color = texture2D(uTexture, vTexCoord);\\n' +\n 'color *= uColorMatrix;\\n' +\n 'color += uConstants;\\n' +\n 'gl_FragColor = color;\\n' +\n '}',\n\n /**\n * Colormatrix for pixels.\n * array of 20 floats. Numbers in positions 4, 9, 14, 19 loose meaning\n * outside the -1, 1 range.\n * 0.0039215686 is the part of 1 that get translated to 1 in 2d\n * @param {Array} matrix array of 20 numbers.\n * @default\n */\n matrix: [\n 1, 0, 0, 0, 0,\n 0, 1, 0, 0, 0,\n 0, 0, 1, 0, 0,\n 0, 0, 0, 1, 0\n ],\n\n mainParameter: 'matrix',\n\n /**\n * Lock the colormatrix on the color part, skipping alpha, manly for non webgl scenario\n * to save some calculation\n */\n colorsOnly: true,\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n */\n initialize: function(options) {\n this.callSuper('initialize', options);\n // create a new array instead mutating the prototype with push\n this.matrix = this.matrix.slice(0);\n },\n\n /**\n * Apply the ColorMatrix operation to a Uint8Array representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8Array to be filtered.\n */\n applyTo2d: function(options) {\n var imageData = options.imageData,\n data = imageData.data,\n iLen = data.length,\n m = this.matrix,\n r, g, b, a, i, colorsOnly = this.colorsOnly;\n\n for (i = 0; i < iLen; i += 4) {\n r = data[i];\n g = data[i + 1];\n b = data[i + 2];\n if (colorsOnly) {\n data[i] = r * m[0] + g * m[1] + b * m[2] + m[4] * 255;\n data[i + 1] = r * m[5] + g * m[6] + b * m[7] + m[9] * 255;\n data[i + 2] = r * m[10] + g * m[11] + b * m[12] + m[14] * 255;\n }\n else {\n a = data[i + 3];\n data[i] = r * m[0] + g * m[1] + b * m[2] + a * m[3] + m[4] * 255;\n data[i + 1] = r * m[5] + g * m[6] + b * m[7] + a * m[8] + m[9] * 255;\n data[i + 2] = r * m[10] + g * m[11] + b * m[12] + a * m[13] + m[14] * 255;\n data[i + 3] = r * m[15] + g * m[16] + b * m[17] + a * m[18] + m[19] * 255;\n }\n }\n },\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations: function(gl, program) {\n return {\n uColorMatrix: gl.getUniformLocation(program, 'uColorMatrix'),\n uConstants: gl.getUniformLocation(program, 'uConstants'),\n };\n },\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData: function(gl, uniformLocations) {\n var m = this.matrix,\n matrix = [\n m[0], m[1], m[2], m[3],\n m[5], m[6], m[7], m[8],\n m[10], m[11], m[12], m[13],\n m[15], m[16], m[17], m[18]\n ],\n constants = [m[4], m[9], m[14], m[19]];\n gl.uniformMatrix4fv(uniformLocations.uColorMatrix, false, matrix);\n gl.uniform4fv(uniformLocations.uConstants, constants);\n },\n });\n\n /**\n * Returns filter instance from an object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {function} [callback] function to invoke after filter creation\n * @return {fabric.Image.filters.ColorMatrix} Instance of fabric.Image.filters.ColorMatrix\n */\n fabric.Image.filters.ColorMatrix.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n\n /**\n * Brightness filter class\n * @class fabric.Image.filters.Brightness\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @see {@link fabric.Image.filters.Brightness#initialize} for constructor definition\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n * @example\n * var filter = new fabric.Image.filters.Brightness({\n * brightness: 0.05\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\n filters.Brightness = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Brightness.prototype */ {\n\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n type: 'Brightness',\n\n /**\n * Fragment source for the brightness program\n */\n fragmentSource: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform float uBrightness;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'void main() {\\n' +\n 'vec4 color = texture2D(uTexture, vTexCoord);\\n' +\n 'color.rgb += uBrightness;\\n' +\n 'gl_FragColor = color;\\n' +\n '}',\n\n /**\n * Brightness value, from -1 to 1.\n * translated to -255 to 255 for 2d\n * 0.0039215686 is the part of 1 that get translated to 1 in 2d\n * @param {Number} brightness\n * @default\n */\n brightness: 0,\n\n /**\n * Describe the property that is the filter parameter\n * @param {String} m\n * @default\n */\n mainParameter: 'brightness',\n\n /**\n * Apply the Brightness operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d: function(options) {\n if (this.brightness === 0) {\n return;\n }\n var imageData = options.imageData,\n data = imageData.data, i, len = data.length,\n brightness = Math.round(this.brightness * 255);\n for (i = 0; i < len; i += 4) {\n data[i] = data[i] + brightness;\n data[i + 1] = data[i + 1] + brightness;\n data[i + 2] = data[i + 2] + brightness;\n }\n },\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations: function(gl, program) {\n return {\n uBrightness: gl.getUniformLocation(program, 'uBrightness'),\n };\n },\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData: function(gl, uniformLocations) {\n gl.uniform1f(uniformLocations.uBrightness, this.brightness);\n },\n });\n\n /**\n * Returns filter instance from an object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {function} [callback] to be invoked after filter creation\n * @return {fabric.Image.filters.Brightness} Instance of fabric.Image.filters.Brightness\n */\n fabric.Image.filters.Brightness.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n extend = fabric.util.object.extend,\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n\n /**\n * Adapted from html5rocks article\n * @class fabric.Image.filters.Convolute\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @see {@link fabric.Image.filters.Convolute#initialize} for constructor definition\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n * @example Sharpen filter\n * var filter = new fabric.Image.filters.Convolute({\n * matrix: [ 0, -1, 0,\n * -1, 5, -1,\n * 0, -1, 0 ]\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n * @example Blur filter\n * var filter = new fabric.Image.filters.Convolute({\n * matrix: [ 1/9, 1/9, 1/9,\n * 1/9, 1/9, 1/9,\n * 1/9, 1/9, 1/9 ]\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n * @example Emboss filter\n * var filter = new fabric.Image.filters.Convolute({\n * matrix: [ 1, 1, 1,\n * 1, 0.7, -1,\n * -1, -1, -1 ]\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n * @example Emboss filter with opaqueness\n * var filter = new fabric.Image.filters.Convolute({\n * opaque: true,\n * matrix: [ 1, 1, 1,\n * 1, 0.7, -1,\n * -1, -1, -1 ]\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n */\n filters.Convolute = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Convolute.prototype */ {\n\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n type: 'Convolute',\n\n /*\n * Opaque value (true/false)\n */\n opaque: false,\n\n /*\n * matrix for the filter, max 9x9\n */\n matrix: [0, 0, 0, 0, 1, 0, 0, 0, 0],\n\n /**\n * Fragment source for the brightness program\n */\n fragmentSource: {\n Convolute_3_1: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform float uMatrix[9];\\n' +\n 'uniform float uStepW;\\n' +\n 'uniform float uStepH;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'void main() {\\n' +\n 'vec4 color = vec4(0, 0, 0, 0);\\n' +\n 'for (float h = 0.0; h < 3.0; h+=1.0) {\\n' +\n 'for (float w = 0.0; w < 3.0; w+=1.0) {\\n' +\n 'vec2 matrixPos = vec2(uStepW * (w - 1), uStepH * (h - 1));\\n' +\n 'color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 3.0 + w)];\\n' +\n '}\\n' +\n '}\\n' +\n 'gl_FragColor = color;\\n' +\n '}',\n Convolute_3_0: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform float uMatrix[9];\\n' +\n 'uniform float uStepW;\\n' +\n 'uniform float uStepH;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'void main() {\\n' +\n 'vec4 color = vec4(0, 0, 0, 1);\\n' +\n 'for (float h = 0.0; h < 3.0; h+=1.0) {\\n' +\n 'for (float w = 0.0; w < 3.0; w+=1.0) {\\n' +\n 'vec2 matrixPos = vec2(uStepW * (w - 1.0), uStepH * (h - 1.0));\\n' +\n 'color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 3.0 + w)];\\n' +\n '}\\n' +\n '}\\n' +\n 'float alpha = texture2D(uTexture, vTexCoord).a;\\n' +\n 'gl_FragColor = color;\\n' +\n 'gl_FragColor.a = alpha;\\n' +\n '}',\n Convolute_5_1: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform float uMatrix[25];\\n' +\n 'uniform float uStepW;\\n' +\n 'uniform float uStepH;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'void main() {\\n' +\n 'vec4 color = vec4(0, 0, 0, 0);\\n' +\n 'for (float h = 0.0; h < 5.0; h+=1.0) {\\n' +\n 'for (float w = 0.0; w < 5.0; w+=1.0) {\\n' +\n 'vec2 matrixPos = vec2(uStepW * (w - 2.0), uStepH * (h - 2.0));\\n' +\n 'color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 5.0 + w)];\\n' +\n '}\\n' +\n '}\\n' +\n 'gl_FragColor = color;\\n' +\n '}',\n Convolute_5_0: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform float uMatrix[25];\\n' +\n 'uniform float uStepW;\\n' +\n 'uniform float uStepH;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'void main() {\\n' +\n 'vec4 color = vec4(0, 0, 0, 1);\\n' +\n 'for (float h = 0.0; h < 5.0; h+=1.0) {\\n' +\n 'for (float w = 0.0; w < 5.0; w+=1.0) {\\n' +\n 'vec2 matrixPos = vec2(uStepW * (w - 2.0), uStepH * (h - 2.0));\\n' +\n 'color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 5.0 + w)];\\n' +\n '}\\n' +\n '}\\n' +\n 'float alpha = texture2D(uTexture, vTexCoord).a;\\n' +\n 'gl_FragColor = color;\\n' +\n 'gl_FragColor.a = alpha;\\n' +\n '}',\n Convolute_7_1: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform float uMatrix[49];\\n' +\n 'uniform float uStepW;\\n' +\n 'uniform float uStepH;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'void main() {\\n' +\n 'vec4 color = vec4(0, 0, 0, 0);\\n' +\n 'for (float h = 0.0; h < 7.0; h+=1.0) {\\n' +\n 'for (float w = 0.0; w < 7.0; w+=1.0) {\\n' +\n 'vec2 matrixPos = vec2(uStepW * (w - 3.0), uStepH * (h - 3.0));\\n' +\n 'color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 7.0 + w)];\\n' +\n '}\\n' +\n '}\\n' +\n 'gl_FragColor = color;\\n' +\n '}',\n Convolute_7_0: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform float uMatrix[49];\\n' +\n 'uniform float uStepW;\\n' +\n 'uniform float uStepH;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'void main() {\\n' +\n 'vec4 color = vec4(0, 0, 0, 1);\\n' +\n 'for (float h = 0.0; h < 7.0; h+=1.0) {\\n' +\n 'for (float w = 0.0; w < 7.0; w+=1.0) {\\n' +\n 'vec2 matrixPos = vec2(uStepW * (w - 3.0), uStepH * (h - 3.0));\\n' +\n 'color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 7.0 + w)];\\n' +\n '}\\n' +\n '}\\n' +\n 'float alpha = texture2D(uTexture, vTexCoord).a;\\n' +\n 'gl_FragColor = color;\\n' +\n 'gl_FragColor.a = alpha;\\n' +\n '}',\n Convolute_9_1: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform float uMatrix[81];\\n' +\n 'uniform float uStepW;\\n' +\n 'uniform float uStepH;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'void main() {\\n' +\n 'vec4 color = vec4(0, 0, 0, 0);\\n' +\n 'for (float h = 0.0; h < 9.0; h+=1.0) {\\n' +\n 'for (float w = 0.0; w < 9.0; w+=1.0) {\\n' +\n 'vec2 matrixPos = vec2(uStepW * (w - 4.0), uStepH * (h - 4.0));\\n' +\n 'color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 9.0 + w)];\\n' +\n '}\\n' +\n '}\\n' +\n 'gl_FragColor = color;\\n' +\n '}',\n Convolute_9_0: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform float uMatrix[81];\\n' +\n 'uniform float uStepW;\\n' +\n 'uniform float uStepH;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'void main() {\\n' +\n 'vec4 color = vec4(0, 0, 0, 1);\\n' +\n 'for (float h = 0.0; h < 9.0; h+=1.0) {\\n' +\n 'for (float w = 0.0; w < 9.0; w+=1.0) {\\n' +\n 'vec2 matrixPos = vec2(uStepW * (w - 4.0), uStepH * (h - 4.0));\\n' +\n 'color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 9.0 + w)];\\n' +\n '}\\n' +\n '}\\n' +\n 'float alpha = texture2D(uTexture, vTexCoord).a;\\n' +\n 'gl_FragColor = color;\\n' +\n 'gl_FragColor.a = alpha;\\n' +\n '}',\n },\n\n /**\n * Constructor\n * @memberOf fabric.Image.filters.Convolute.prototype\n * @param {Object} [options] Options object\n * @param {Boolean} [options.opaque=false] Opaque value (true/false)\n * @param {Array} [options.matrix] Filter matrix\n */\n\n\n /**\n * Retrieves the cached shader.\n * @param {Object} options\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n */\n retrieveShader: function(options) {\n var size = Math.sqrt(this.matrix.length);\n var cacheKey = this.type + '_' + size + '_' + (this.opaque ? 1 : 0);\n var shaderSource = this.fragmentSource[cacheKey];\n if (!options.programCache.hasOwnProperty(cacheKey)) {\n options.programCache[cacheKey] = this.createProgram(options.context, shaderSource);\n }\n return options.programCache[cacheKey];\n },\n\n /**\n * Apply the Brightness operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d: function(options) {\n var imageData = options.imageData,\n data = imageData.data,\n weights = this.matrix,\n side = Math.round(Math.sqrt(weights.length)),\n halfSide = Math.floor(side / 2),\n sw = imageData.width,\n sh = imageData.height,\n output = options.ctx.createImageData(sw, sh),\n dst = output.data,\n // go through the destination image pixels\n alphaFac = this.opaque ? 1 : 0,\n r, g, b, a, dstOff,\n scx, scy, srcOff, wt,\n x, y, cx, cy;\n\n for (y = 0; y < sh; y++) {\n for (x = 0; x < sw; x++) {\n dstOff = (y * sw + x) * 4;\n // calculate the weighed sum of the source image pixels that\n // fall under the convolution matrix\n r = 0; g = 0; b = 0; a = 0;\n\n for (cy = 0; cy < side; cy++) {\n for (cx = 0; cx < side; cx++) {\n scy = y + cy - halfSide;\n scx = x + cx - halfSide;\n\n // eslint-disable-next-line max-depth\n if (scy < 0 || scy >= sh || scx < 0 || scx >= sw) {\n continue;\n }\n\n srcOff = (scy * sw + scx) * 4;\n wt = weights[cy * side + cx];\n\n r += data[srcOff] * wt;\n g += data[srcOff + 1] * wt;\n b += data[srcOff + 2] * wt;\n // eslint-disable-next-line max-depth\n if (!alphaFac) {\n a += data[srcOff + 3] * wt;\n }\n }\n }\n dst[dstOff] = r;\n dst[dstOff + 1] = g;\n dst[dstOff + 2] = b;\n if (!alphaFac) {\n dst[dstOff + 3] = a;\n }\n else {\n dst[dstOff + 3] = data[dstOff + 3];\n }\n }\n }\n options.imageData = output;\n },\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations: function(gl, program) {\n return {\n uMatrix: gl.getUniformLocation(program, 'uMatrix'),\n uOpaque: gl.getUniformLocation(program, 'uOpaque'),\n uHalfSize: gl.getUniformLocation(program, 'uHalfSize'),\n uSize: gl.getUniformLocation(program, 'uSize'),\n };\n },\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData: function(gl, uniformLocations) {\n gl.uniform1fv(uniformLocations.uMatrix, this.matrix);\n },\n\n /**\n * Returns object representation of an instance\n * @return {Object} Object representation of an instance\n */\n toObject: function() {\n return extend(this.callSuper('toObject'), {\n opaque: this.opaque,\n matrix: this.matrix\n });\n }\n });\n\n /**\n * Returns filter instance from an object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {function} [callback] to be invoked after filter creation\n * @return {fabric.Image.filters.Convolute} Instance of fabric.Image.filters.Convolute\n */\n fabric.Image.filters.Convolute.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n\n /**\n * Grayscale image filter class\n * @class fabric.Image.filters.Grayscale\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n * @example\n * var filter = new fabric.Image.filters.Grayscale();\n * object.filters.push(filter);\n * object.applyFilters();\n */\n filters.Grayscale = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Grayscale.prototype */ {\n\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n type: 'Grayscale',\n\n fragmentSource: {\n average: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'void main() {\\n' +\n 'vec4 color = texture2D(uTexture, vTexCoord);\\n' +\n 'float average = (color.r + color.b + color.g) / 3.0;\\n' +\n 'gl_FragColor = vec4(average, average, average, color.a);\\n' +\n '}',\n lightness: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform int uMode;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'void main() {\\n' +\n 'vec4 col = texture2D(uTexture, vTexCoord);\\n' +\n 'float average = (max(max(col.r, col.g),col.b) + min(min(col.r, col.g),col.b)) / 2.0;\\n' +\n 'gl_FragColor = vec4(average, average, average, col.a);\\n' +\n '}',\n luminosity: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform int uMode;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'void main() {\\n' +\n 'vec4 col = texture2D(uTexture, vTexCoord);\\n' +\n 'float average = 0.21 * col.r + 0.72 * col.g + 0.07 * col.b;\\n' +\n 'gl_FragColor = vec4(average, average, average, col.a);\\n' +\n '}',\n },\n\n\n /**\n * Grayscale mode, between 'average', 'lightness', 'luminosity'\n * @param {String} type\n * @default\n */\n mode: 'average',\n\n mainParameter: 'mode',\n\n /**\n * Apply the Grayscale operation to a Uint8Array representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8Array to be filtered.\n */\n applyTo2d: function(options) {\n var imageData = options.imageData,\n data = imageData.data, i,\n len = data.length, value,\n mode = this.mode;\n for (i = 0; i < len; i += 4) {\n if (mode === 'average') {\n value = (data[i] + data[i + 1] + data[i + 2]) / 3;\n }\n else if (mode === 'lightness') {\n value = (Math.min(data[i], data[i + 1], data[i + 2]) +\n Math.max(data[i], data[i + 1], data[i + 2])) / 2;\n }\n else if (mode === 'luminosity') {\n value = 0.21 * data[i] + 0.72 * data[i + 1] + 0.07 * data[i + 2];\n }\n data[i] = value;\n data[i + 1] = value;\n data[i + 2] = value;\n }\n },\n\n /**\n * Retrieves the cached shader.\n * @param {Object} options\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n */\n retrieveShader: function(options) {\n var cacheKey = this.type + '_' + this.mode;\n if (!options.programCache.hasOwnProperty(cacheKey)) {\n var shaderSource = this.fragmentSource[this.mode];\n options.programCache[cacheKey] = this.createProgram(options.context, shaderSource);\n }\n return options.programCache[cacheKey];\n },\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations: function(gl, program) {\n return {\n uMode: gl.getUniformLocation(program, 'uMode'),\n };\n },\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData: function(gl, uniformLocations) {\n // default average mode.\n var mode = 1;\n gl.uniform1i(uniformLocations.uMode, mode);\n },\n\n /**\n * Grayscale filter isNeutralState implementation\n * The filter is never neutral\n * on the image\n **/\n isNeutralState: function() {\n return false;\n },\n });\n\n /**\n * Returns filter instance from an object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {function} [callback] to be invoked after filter creation\n * @return {fabric.Image.filters.Grayscale} Instance of fabric.Image.filters.Grayscale\n */\n fabric.Image.filters.Grayscale.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n\n /**\n * Invert filter class\n * @class fabric.Image.filters.Invert\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n * @example\n * var filter = new fabric.Image.filters.Invert();\n * object.filters.push(filter);\n * object.applyFilters(canvas.renderAll.bind(canvas));\n */\n filters.Invert = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Invert.prototype */ {\n\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n type: 'Invert',\n\n fragmentSource: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform int uInvert;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'void main() {\\n' +\n 'vec4 color = texture2D(uTexture, vTexCoord);\\n' +\n 'if (uInvert == 1) {\\n' +\n 'gl_FragColor = vec4(1.0 - color.r,1.0 -color.g,1.0 -color.b,color.a);\\n' +\n '} else {\\n' +\n 'gl_FragColor = color;\\n' +\n '}\\n' +\n '}',\n\n /**\n * Filter invert. if false, does nothing\n * @param {Boolean} invert\n * @default\n */\n invert: true,\n\n mainParameter: 'invert',\n\n /**\n * Apply the Invert operation to a Uint8Array representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8Array to be filtered.\n */\n applyTo2d: function(options) {\n var imageData = options.imageData,\n data = imageData.data, i,\n len = data.length;\n for (i = 0; i < len; i += 4) {\n data[i] = 255 - data[i];\n data[i + 1] = 255 - data[i + 1];\n data[i + 2] = 255 - data[i + 2];\n }\n },\n\n /**\n * Invert filter isNeutralState implementation\n * Used only in image applyFilters to discard filters that will not have an effect\n * on the image\n * @param {Object} options\n **/\n isNeutralState: function() {\n return !this.invert;\n },\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations: function(gl, program) {\n return {\n uInvert: gl.getUniformLocation(program, 'uInvert'),\n };\n },\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData: function(gl, uniformLocations) {\n gl.uniform1i(uniformLocations.uInvert, this.invert);\n },\n });\n\n /**\n * Returns filter instance from an object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {function} [callback] to be invoked after filter creation\n * @return {fabric.Image.filters.Invert} Instance of fabric.Image.filters.Invert\n */\n fabric.Image.filters.Invert.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n extend = fabric.util.object.extend,\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n\n /**\n * Noise filter class\n * @class fabric.Image.filters.Noise\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @see {@link fabric.Image.filters.Noise#initialize} for constructor definition\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n * @example\n * var filter = new fabric.Image.filters.Noise({\n * noise: 700\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n */\n filters.Noise = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Noise.prototype */ {\n\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n type: 'Noise',\n\n /**\n * Fragment source for the noise program\n */\n fragmentSource: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform float uStepH;\\n' +\n 'uniform float uNoise;\\n' +\n 'uniform float uSeed;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'float rand(vec2 co, float seed, float vScale) {\\n' +\n 'return fract(sin(dot(co.xy * vScale ,vec2(12.9898 , 78.233))) * 43758.5453 * (seed + 0.01) / 2.0);\\n' +\n '}\\n' +\n 'void main() {\\n' +\n 'vec4 color = texture2D(uTexture, vTexCoord);\\n' +\n 'color.rgb += (0.5 - rand(vTexCoord, uSeed, 0.1 / uStepH)) * uNoise;\\n' +\n 'gl_FragColor = color;\\n' +\n '}',\n\n /**\n * Describe the property that is the filter parameter\n * @param {String} m\n * @default\n */\n mainParameter: 'noise',\n\n /**\n * Noise value, from\n * @param {Number} noise\n * @default\n */\n noise: 0,\n\n /**\n * Apply the Brightness operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d: function(options) {\n if (this.noise === 0) {\n return;\n }\n var imageData = options.imageData,\n data = imageData.data, i, len = data.length,\n noise = this.noise, rand;\n\n for (i = 0, len = data.length; i < len; i += 4) {\n\n rand = (0.5 - Math.random()) * noise;\n\n data[i] += rand;\n data[i + 1] += rand;\n data[i + 2] += rand;\n }\n },\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations: function(gl, program) {\n return {\n uNoise: gl.getUniformLocation(program, 'uNoise'),\n uSeed: gl.getUniformLocation(program, 'uSeed'),\n };\n },\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData: function(gl, uniformLocations) {\n gl.uniform1f(uniformLocations.uNoise, this.noise / 255);\n gl.uniform1f(uniformLocations.uSeed, Math.random());\n },\n\n /**\n * Returns object representation of an instance\n * @return {Object} Object representation of an instance\n */\n toObject: function() {\n return extend(this.callSuper('toObject'), {\n noise: this.noise\n });\n }\n });\n\n /**\n * Returns filter instance from an object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {Function} [callback] to be invoked after filter creation\n * @return {fabric.Image.filters.Noise} Instance of fabric.Image.filters.Noise\n */\n fabric.Image.filters.Noise.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n\n /**\n * Pixelate filter class\n * @class fabric.Image.filters.Pixelate\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @see {@link fabric.Image.filters.Pixelate#initialize} for constructor definition\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n * @example\n * var filter = new fabric.Image.filters.Pixelate({\n * blocksize: 8\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\n filters.Pixelate = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Pixelate.prototype */ {\n\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n type: 'Pixelate',\n\n blocksize: 4,\n\n mainParameter: 'blocksize',\n\n /**\n * Fragment source for the Pixelate program\n */\n fragmentSource: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform float uBlocksize;\\n' +\n 'uniform float uStepW;\\n' +\n 'uniform float uStepH;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'void main() {\\n' +\n 'float blockW = uBlocksize * uStepW;\\n' +\n 'float blockH = uBlocksize * uStepW;\\n' +\n 'int posX = int(vTexCoord.x / blockW);\\n' +\n 'int posY = int(vTexCoord.y / blockH);\\n' +\n 'float fposX = float(posX);\\n' +\n 'float fposY = float(posY);\\n' +\n 'vec2 squareCoords = vec2(fposX * blockW, fposY * blockH);\\n' +\n 'vec4 color = texture2D(uTexture, squareCoords);\\n' +\n 'gl_FragColor = color;\\n' +\n '}',\n\n /**\n * Apply the Pixelate operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d: function(options) {\n var imageData = options.imageData,\n data = imageData.data,\n iLen = imageData.height,\n jLen = imageData.width,\n index, i, j, r, g, b, a,\n _i, _j, _iLen, _jLen;\n\n for (i = 0; i < iLen; i += this.blocksize) {\n for (j = 0; j < jLen; j += this.blocksize) {\n\n index = (i * 4) * jLen + (j * 4);\n\n r = data[index];\n g = data[index + 1];\n b = data[index + 2];\n a = data[index + 3];\n\n _iLen = Math.min(i + this.blocksize, iLen);\n _jLen = Math.min(j + this.blocksize, jLen);\n for (_i = i; _i < _iLen; _i++) {\n for (_j = j; _j < _jLen; _j++) {\n index = (_i * 4) * jLen + (_j * 4);\n data[index] = r;\n data[index + 1] = g;\n data[index + 2] = b;\n data[index + 3] = a;\n }\n }\n }\n }\n },\n\n /**\n * Indicate when the filter is not gonna apply changes to the image\n **/\n isNeutralState: function() {\n return this.blocksize === 1;\n },\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations: function(gl, program) {\n return {\n uBlocksize: gl.getUniformLocation(program, 'uBlocksize'),\n uStepW: gl.getUniformLocation(program, 'uStepW'),\n uStepH: gl.getUniformLocation(program, 'uStepH'),\n };\n },\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData: function(gl, uniformLocations) {\n gl.uniform1f(uniformLocations.uBlocksize, this.blocksize);\n },\n });\n\n /**\n * Returns filter instance from an object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {Function} [callback] to be invoked after filter creation\n * @return {fabric.Image.filters.Pixelate} Instance of fabric.Image.filters.Pixelate\n */\n fabric.Image.filters.Pixelate.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n extend = fabric.util.object.extend,\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n\n /**\n * Remove white filter class\n * @class fabric.Image.filters.RemoveColor\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @see {@link fabric.Image.filters.RemoveColor#initialize} for constructor definition\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n * @example\n * var filter = new fabric.Image.filters.RemoveColor({\n * threshold: 0.2,\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n */\n filters.RemoveColor = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.RemoveColor.prototype */ {\n\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n type: 'RemoveColor',\n\n /**\n * Color to remove, in any format understood by fabric.Color.\n * @param {String} type\n * @default\n */\n color: '#FFFFFF',\n\n /**\n * Fragment source for the brightness program\n */\n fragmentSource: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform vec4 uLow;\\n' +\n 'uniform vec4 uHigh;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'void main() {\\n' +\n 'gl_FragColor = texture2D(uTexture, vTexCoord);\\n' +\n 'if(all(greaterThan(gl_FragColor.rgb,uLow.rgb)) && all(greaterThan(uHigh.rgb,gl_FragColor.rgb))) {\\n' +\n 'gl_FragColor.a = 0.0;\\n' +\n '}\\n' +\n '}',\n\n /**\n * distance to actual color, as value up or down from each r,g,b\n * between 0 and 1\n **/\n distance: 0.02,\n\n /**\n * For color to remove inside distance, use alpha channel for a smoother deletion\n * NOT IMPLEMENTED YET\n **/\n useAlpha: false,\n\n /**\n * Constructor\n * @memberOf fabric.Image.filters.RemoveWhite.prototype\n * @param {Object} [options] Options object\n * @param {Number} [options.color=#RRGGBB] Threshold value\n * @param {Number} [options.distance=10] Distance value\n */\n\n /**\n * Applies filter to canvas element\n * @param {Object} canvasEl Canvas element to apply filter to\n */\n applyTo2d: function(options) {\n var imageData = options.imageData,\n data = imageData.data, i,\n distance = this.distance * 255,\n r, g, b,\n source = new fabric.Color(this.color).getSource(),\n lowC = [\n source[0] - distance,\n source[1] - distance,\n source[2] - distance,\n ],\n highC = [\n source[0] + distance,\n source[1] + distance,\n source[2] + distance,\n ];\n\n\n for (i = 0; i < data.length; i += 4) {\n r = data[i];\n g = data[i + 1];\n b = data[i + 2];\n\n if (r > lowC[0] &&\n g > lowC[1] &&\n b > lowC[2] &&\n r < highC[0] &&\n g < highC[1] &&\n b < highC[2]) {\n data[i + 3] = 0;\n }\n }\n },\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations: function(gl, program) {\n return {\n uLow: gl.getUniformLocation(program, 'uLow'),\n uHigh: gl.getUniformLocation(program, 'uHigh'),\n };\n },\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData: function(gl, uniformLocations) {\n var source = new fabric.Color(this.color).getSource(),\n distance = parseFloat(this.distance),\n lowC = [\n 0 + source[0] / 255 - distance,\n 0 + source[1] / 255 - distance,\n 0 + source[2] / 255 - distance,\n 1\n ],\n highC = [\n source[0] / 255 + distance,\n source[1] / 255 + distance,\n source[2] / 255 + distance,\n 1\n ];\n gl.uniform4fv(uniformLocations.uLow, lowC);\n gl.uniform4fv(uniformLocations.uHigh, highC);\n },\n\n /**\n * Returns object representation of an instance\n * @return {Object} Object representation of an instance\n */\n toObject: function() {\n return extend(this.callSuper('toObject'), {\n color: this.color,\n distance: this.distance\n });\n }\n });\n\n /**\n * Returns filter instance from an object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {Function} [callback] to be invoked after filter creation\n * @return {fabric.Image.filters.RemoveColor} Instance of fabric.Image.filters.RemoveWhite\n */\n fabric.Image.filters.RemoveColor.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n\n var matrices = {\n Brownie: [\n 0.59970,0.34553,-0.27082,0,0.186,\n -0.03770,0.86095,0.15059,0,-0.1449,\n 0.24113,-0.07441,0.44972,0,-0.02965,\n 0,0,0,1,0\n ],\n Vintage: [\n 0.62793,0.32021,-0.03965,0,0.03784,\n 0.02578,0.64411,0.03259,0,0.02926,\n 0.04660,-0.08512,0.52416,0,0.02023,\n 0,0,0,1,0\n ],\n Kodachrome: [\n 1.12855,-0.39673,-0.03992,0,0.24991,\n -0.16404,1.08352,-0.05498,0,0.09698,\n -0.16786,-0.56034,1.60148,0,0.13972,\n 0,0,0,1,0\n ],\n Technicolor: [\n 1.91252,-0.85453,-0.09155,0,0.04624,\n -0.30878,1.76589,-0.10601,0,-0.27589,\n -0.23110,-0.75018,1.84759,0,0.12137,\n 0,0,0,1,0\n ],\n Polaroid: [\n 1.438,-0.062,-0.062,0,0,\n -0.122,1.378,-0.122,0,0,\n -0.016,-0.016,1.483,0,0,\n 0,0,0,1,0\n ],\n Sepia: [\n 0.393, 0.769, 0.189, 0, 0,\n 0.349, 0.686, 0.168, 0, 0,\n 0.272, 0.534, 0.131, 0, 0,\n 0, 0, 0, 1, 0\n ],\n BlackWhite: [\n 1.5, 1.5, 1.5, 0, -1,\n 1.5, 1.5, 1.5, 0, -1,\n 1.5, 1.5, 1.5, 0, -1,\n 0, 0, 0, 1, 0,\n ]\n };\n\n for (var key in matrices) {\n filters[key] = createClass(filters.ColorMatrix, /** @lends fabric.Image.filters.Sepia.prototype */ {\n\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n type: key,\n\n /**\n * Colormatrix for the effect\n * array of 20 floats. Numbers in positions 4, 9, 14, 19 loose meaning\n * outside the -1, 1 range.\n * @param {Array} matrix array of 20 numbers.\n * @default\n */\n matrix: matrices[key],\n\n /**\n * Lock the matrix export for this kind of static, parameter less filters.\n */\n mainParameter: false,\n /**\n * Lock the colormatrix on the color part, skipping alpha\n */\n colorsOnly: true,\n\n });\n fabric.Image.filters[key].fromObject = fabric.Image.filters.BaseFilter.fromObject;\n }\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n 'use strict';\n\n var fabric = global.fabric,\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n\n /**\n * Color Blend filter class\n * @class fabric.Image.filter.BlendColor\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @example\n * var filter = new fabric.Image.filters.BlendColor({\n * color: '#000',\n * mode: 'multiply'\n * });\n *\n * var filter = new fabric.Image.filters.BlendImage({\n * image: fabricImageObject,\n * mode: 'multiply',\n * alpha: 0.5\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n */\n\n filters.BlendColor = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Blend.prototype */ {\n type: 'BlendColor',\n\n /**\n * Color to make the blend operation with. default to a reddish color since black or white\n * gives always strong result.\n **/\n color: '#F95C63',\n\n /**\n * Blend mode for the filter: one of multiply, add, diff, screen, subtract,\n * darken, lighten, overlay, exclusion, tint.\n **/\n mode: 'multiply',\n\n /**\n * alpha value. represent the strength of the blend color operation.\n **/\n alpha: 1,\n\n /**\n * Fragment source for the Multiply program\n */\n fragmentSource: {\n multiply: 'gl_FragColor.rgb *= uColor.rgb;\\n',\n screen: 'gl_FragColor.rgb = 1.0 - (1.0 - gl_FragColor.rgb) * (1.0 - uColor.rgb);\\n',\n add: 'gl_FragColor.rgb += uColor.rgb;\\n',\n diff: 'gl_FragColor.rgb = abs(gl_FragColor.rgb - uColor.rgb);\\n',\n subtract: 'gl_FragColor.rgb -= uColor.rgb;\\n',\n lighten: 'gl_FragColor.rgb = max(gl_FragColor.rgb, uColor.rgb);\\n',\n darken: 'gl_FragColor.rgb = min(gl_FragColor.rgb, uColor.rgb);\\n',\n exclusion: 'gl_FragColor.rgb += uColor.rgb - 2.0 * (uColor.rgb * gl_FragColor.rgb);\\n',\n overlay: 'if (uColor.r < 0.5) {\\n' +\n 'gl_FragColor.r *= 2.0 * uColor.r;\\n' +\n '} else {\\n' +\n 'gl_FragColor.r = 1.0 - 2.0 * (1.0 - gl_FragColor.r) * (1.0 - uColor.r);\\n' +\n '}\\n' +\n 'if (uColor.g < 0.5) {\\n' +\n 'gl_FragColor.g *= 2.0 * uColor.g;\\n' +\n '} else {\\n' +\n 'gl_FragColor.g = 1.0 - 2.0 * (1.0 - gl_FragColor.g) * (1.0 - uColor.g);\\n' +\n '}\\n' +\n 'if (uColor.b < 0.5) {\\n' +\n 'gl_FragColor.b *= 2.0 * uColor.b;\\n' +\n '} else {\\n' +\n 'gl_FragColor.b = 1.0 - 2.0 * (1.0 - gl_FragColor.b) * (1.0 - uColor.b);\\n' +\n '}\\n',\n tint: 'gl_FragColor.rgb *= (1.0 - uColor.a);\\n' +\n 'gl_FragColor.rgb += uColor.rgb;\\n',\n },\n\n /**\n * build the fragment source for the filters, joining the common part with\n * the specific one.\n * @param {String} mode the mode of the filter, a key of this.fragmentSource\n * @return {String} the source to be compiled\n * @private\n */\n buildSource: function(mode) {\n return 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform vec4 uColor;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'void main() {\\n' +\n 'vec4 color = texture2D(uTexture, vTexCoord);\\n' +\n 'gl_FragColor = color;\\n' +\n 'if (color.a > 0.0) {\\n' +\n this.fragmentSource[mode] +\n '}\\n' +\n '}';\n },\n\n /**\n * Retrieves the cached shader.\n * @param {Object} options\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n */\n retrieveShader: function(options) {\n var cacheKey = this.type + '_' + this.mode, shaderSource;\n if (!options.programCache.hasOwnProperty(cacheKey)) {\n shaderSource = this.buildSource(this.mode);\n options.programCache[cacheKey] = this.createProgram(options.context, shaderSource);\n }\n return options.programCache[cacheKey];\n },\n\n /**\n * Apply the Blend operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d: function(options) {\n var imageData = options.imageData,\n data = imageData.data, iLen = data.length,\n tr, tg, tb,\n r, g, b,\n source, alpha1 = 1 - this.alpha;\n\n source = new fabric.Color(this.color).getSource();\n tr = source[0] * this.alpha;\n tg = source[1] * this.alpha;\n tb = source[2] * this.alpha;\n\n for (var i = 0; i < iLen; i += 4) {\n\n r = data[i];\n g = data[i + 1];\n b = data[i + 2];\n\n switch (this.mode) {\n case 'multiply':\n data[i] = r * tr / 255;\n data[i + 1] = g * tg / 255;\n data[i + 2] = b * tb / 255;\n break;\n case 'screen':\n data[i] = 255 - (255 - r) * (255 - tr) / 255;\n data[i + 1] = 255 - (255 - g) * (255 - tg) / 255;\n data[i + 2] = 255 - (255 - b) * (255 - tb) / 255;\n break;\n case 'add':\n data[i] = r + tr;\n data[i + 1] = g + tg;\n data[i + 2] = b + tb;\n break;\n case 'diff':\n case 'difference':\n data[i] = Math.abs(r - tr);\n data[i + 1] = Math.abs(g - tg);\n data[i + 2] = Math.abs(b - tb);\n break;\n case 'subtract':\n data[i] = r - tr;\n data[i + 1] = g - tg;\n data[i + 2] = b - tb;\n break;\n case 'darken':\n data[i] = Math.min(r, tr);\n data[i + 1] = Math.min(g, tg);\n data[i + 2] = Math.min(b, tb);\n break;\n case 'lighten':\n data[i] = Math.max(r, tr);\n data[i + 1] = Math.max(g, tg);\n data[i + 2] = Math.max(b, tb);\n break;\n case 'overlay':\n data[i] = tr < 128 ? (2 * r * tr / 255) : (255 - 2 * (255 - r) * (255 - tr) / 255);\n data[i + 1] = tg < 128 ? (2 * g * tg / 255) : (255 - 2 * (255 - g) * (255 - tg) / 255);\n data[i + 2] = tb < 128 ? (2 * b * tb / 255) : (255 - 2 * (255 - b) * (255 - tb) / 255);\n break;\n case 'exclusion':\n data[i] = tr + r - ((2 * tr * r) / 255);\n data[i + 1] = tg + g - ((2 * tg * g) / 255);\n data[i + 2] = tb + b - ((2 * tb * b) / 255);\n break;\n case 'tint':\n data[i] = tr + r * alpha1;\n data[i + 1] = tg + g * alpha1;\n data[i + 2] = tb + b * alpha1;\n }\n }\n },\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations: function(gl, program) {\n return {\n uColor: gl.getUniformLocation(program, 'uColor'),\n };\n },\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData: function(gl, uniformLocations) {\n var source = new fabric.Color(this.color).getSource();\n source[0] = this.alpha * source[0] / 255;\n source[1] = this.alpha * source[1] / 255;\n source[2] = this.alpha * source[2] / 255;\n source[3] = this.alpha;\n gl.uniform4fv(uniformLocations.uColor, source);\n },\n\n /**\n * Returns object representation of an instance\n * @return {Object} Object representation of an instance\n */\n toObject: function() {\n return {\n type: this.type,\n color: this.color,\n mode: this.mode,\n alpha: this.alpha\n };\n }\n });\n\n /**\n * Returns filter instance from an object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {function} [callback] to be invoked after filter creation\n * @return {fabric.Image.filters.BlendColor} Instance of fabric.Image.filters.BlendColor\n */\n fabric.Image.filters.BlendColor.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n 'use strict';\n\n var fabric = global.fabric,\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n\n /**\n * Image Blend filter class\n * @class fabric.Image.filter.BlendImage\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @example\n * var filter = new fabric.Image.filters.BlendColor({\n * color: '#000',\n * mode: 'multiply'\n * });\n *\n * var filter = new fabric.Image.filters.BlendImage({\n * image: fabricImageObject,\n * mode: 'multiply',\n * alpha: 0.5\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n */\n\n filters.BlendImage = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.BlendImage.prototype */ {\n type: 'BlendImage',\n\n /**\n * Color to make the blend operation with. default to a reddish color since black or white\n * gives always strong result.\n **/\n image: null,\n\n /**\n * Blend mode for the filter: one of multiply, add, diff, screen, subtract,\n * darken, lighten, overlay, exclusion, tint.\n **/\n mode: 'multiply',\n\n /**\n * alpha value. represent the strength of the blend image operation.\n * not implemented.\n **/\n alpha: 1,\n\n vertexSource: 'attribute vec2 aPosition;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'varying vec2 vTexCoord2;\\n' +\n 'uniform mat3 uTransformMatrix;\\n' +\n 'void main() {\\n' +\n 'vTexCoord = aPosition;\\n' +\n 'vTexCoord2 = (uTransformMatrix * vec3(aPosition, 1.0)).xy;\\n' +\n 'gl_Position = vec4(aPosition * 2.0 - 1.0, 0.0, 1.0);\\n' +\n '}',\n\n /**\n * Fragment source for the Multiply program\n */\n fragmentSource: {\n multiply: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform sampler2D uImage;\\n' +\n 'uniform vec4 uColor;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'varying vec2 vTexCoord2;\\n' +\n 'void main() {\\n' +\n 'vec4 color = texture2D(uTexture, vTexCoord);\\n' +\n 'vec4 color2 = texture2D(uImage, vTexCoord2);\\n' +\n 'color.rgba *= color2.rgba;\\n' +\n 'gl_FragColor = color;\\n' +\n '}',\n mask: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform sampler2D uImage;\\n' +\n 'uniform vec4 uColor;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'varying vec2 vTexCoord2;\\n' +\n 'void main() {\\n' +\n 'vec4 color = texture2D(uTexture, vTexCoord);\\n' +\n 'vec4 color2 = texture2D(uImage, vTexCoord2);\\n' +\n 'color.a = color2.a;\\n' +\n 'gl_FragColor = color;\\n' +\n '}',\n },\n\n /**\n * Retrieves the cached shader.\n * @param {Object} options\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n */\n retrieveShader: function(options) {\n var cacheKey = this.type + '_' + this.mode;\n var shaderSource = this.fragmentSource[this.mode];\n if (!options.programCache.hasOwnProperty(cacheKey)) {\n options.programCache[cacheKey] = this.createProgram(options.context, shaderSource);\n }\n return options.programCache[cacheKey];\n },\n\n applyToWebGL: function(options) {\n // load texture to blend.\n var gl = options.context,\n texture = this.createTexture(options.filterBackend, this.image);\n this.bindAdditionalTexture(gl, texture, gl.TEXTURE1);\n this.callSuper('applyToWebGL', options);\n this.unbindAdditionalTexture(gl, gl.TEXTURE1);\n },\n\n createTexture: function(backend, image) {\n return backend.getCachedTexture(image.cacheKey, image._element);\n },\n\n /**\n * Calculate a transformMatrix to adapt the image to blend over\n * @param {Object} options\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n */\n calculateMatrix: function() {\n var image = this.image,\n width = image._element.width,\n height = image._element.height;\n return [\n 1 / image.scaleX, 0, 0,\n 0, 1 / image.scaleY, 0,\n -image.left / width, -image.top / height, 1\n ];\n },\n\n /**\n * Apply the Blend operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d: function(options) {\n var imageData = options.imageData,\n resources = options.filterBackend.resources,\n data = imageData.data, iLen = data.length,\n width = imageData.width,\n height = imageData.height,\n tr, tg, tb, ta,\n r, g, b, a,\n canvas1, context, image = this.image, blendData;\n\n if (!resources.blendImage) {\n resources.blendImage = fabric.util.createCanvasElement();\n }\n canvas1 = resources.blendImage;\n context = canvas1.getContext('2d');\n if (canvas1.width !== width || canvas1.height !== height) {\n canvas1.width = width;\n canvas1.height = height;\n }\n else {\n context.clearRect(0, 0, width, height);\n }\n context.setTransform(image.scaleX, 0, 0, image.scaleY, image.left, image.top);\n context.drawImage(image._element, 0, 0, width, height);\n blendData = context.getImageData(0, 0, width, height).data;\n for (var i = 0; i < iLen; i += 4) {\n\n r = data[i];\n g = data[i + 1];\n b = data[i + 2];\n a = data[i + 3];\n\n tr = blendData[i];\n tg = blendData[i + 1];\n tb = blendData[i + 2];\n ta = blendData[i + 3];\n\n switch (this.mode) {\n case 'multiply':\n data[i] = r * tr / 255;\n data[i + 1] = g * tg / 255;\n data[i + 2] = b * tb / 255;\n data[i + 3] = a * ta / 255;\n break;\n case 'mask':\n data[i + 3] = ta;\n break;\n }\n }\n },\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations: function(gl, program) {\n return {\n uTransformMatrix: gl.getUniformLocation(program, 'uTransformMatrix'),\n uImage: gl.getUniformLocation(program, 'uImage'),\n };\n },\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData: function(gl, uniformLocations) {\n var matrix = this.calculateMatrix();\n gl.uniform1i(uniformLocations.uImage, 1); // texture unit 1.\n gl.uniformMatrix3fv(uniformLocations.uTransformMatrix, false, matrix);\n },\n\n /**\n * Returns object representation of an instance\n * @return {Object} Object representation of an instance\n */\n toObject: function() {\n return {\n type: this.type,\n image: this.image && this.image.toObject(),\n mode: this.mode,\n alpha: this.alpha\n };\n }\n });\n\n /**\n * Returns filter instance from an object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {function} callback to be invoked after filter creation\n * @return {fabric.Image.filters.BlendImage} Instance of fabric.Image.filters.BlendImage\n */\n fabric.Image.filters.BlendImage.fromObject = function(object, callback) {\n fabric.Image.fromObject(object.image, function(image) {\n var options = fabric.util.object.clone(object);\n options.image = image;\n callback(new fabric.Image.filters.BlendImage(options));\n });\n };\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }), pow = Math.pow, floor = Math.floor,\n sqrt = Math.sqrt, abs = Math.abs, round = Math.round, sin = Math.sin,\n ceil = Math.ceil,\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n\n /**\n * Resize image filter class\n * @class fabric.Image.filters.Resize\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n * @example\n * var filter = new fabric.Image.filters.Resize();\n * object.filters.push(filter);\n * object.applyFilters(canvas.renderAll.bind(canvas));\n */\n filters.Resize = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Resize.prototype */ {\n\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n type: 'Resize',\n\n /**\n * Resize type\n * for webgl resizeType is just lanczos, for canvas2d can be:\n * bilinear, hermite, sliceHack, lanczos.\n * @param {String} resizeType\n * @default\n */\n resizeType: 'hermite',\n\n /**\n * Scale factor for resizing, x axis\n * @param {Number} scaleX\n * @default\n */\n scaleX: 1,\n\n /**\n * Scale factor for resizing, y axis\n * @param {Number} scaleY\n * @default\n */\n scaleY: 1,\n\n /**\n * LanczosLobes parameter for lanczos filter, valid for resizeType lanczos\n * @param {Number} lanczosLobes\n * @default\n */\n lanczosLobes: 3,\n\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations: function(gl, program) {\n return {\n uDelta: gl.getUniformLocation(program, 'uDelta'),\n uTaps: gl.getUniformLocation(program, 'uTaps'),\n };\n },\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData: function(gl, uniformLocations) {\n gl.uniform2fv(uniformLocations.uDelta, this.horizontal ? [1 / this.width, 0] : [0, 1 / this.height]);\n gl.uniform1fv(uniformLocations.uTaps, this.taps);\n },\n\n /**\n * Retrieves the cached shader.\n * @param {Object} options\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n */\n retrieveShader: function(options) {\n var filterWindow = this.getFilterWindow(), cacheKey = this.type + '_' + filterWindow;\n if (!options.programCache.hasOwnProperty(cacheKey)) {\n var fragmentShader = this.generateShader(filterWindow);\n options.programCache[cacheKey] = this.createProgram(options.context, fragmentShader);\n }\n return options.programCache[cacheKey];\n },\n\n getFilterWindow: function() {\n var scale = this.tempScale;\n return Math.ceil(this.lanczosLobes / scale);\n },\n\n getTaps: function() {\n var lobeFunction = this.lanczosCreate(this.lanczosLobes), scale = this.tempScale,\n filterWindow = this.getFilterWindow(), taps = new Array(filterWindow);\n for (var i = 1; i <= filterWindow; i++) {\n taps[i - 1] = lobeFunction(i * scale);\n }\n return taps;\n },\n\n /**\n * Generate vertex and shader sources from the necessary steps numbers\n * @param {Number} filterWindow\n */\n generateShader: function(filterWindow) {\n var offsets = new Array(filterWindow),\n fragmentShader = this.fragmentSourceTOP, filterWindow;\n\n for (var i = 1; i <= filterWindow; i++) {\n offsets[i - 1] = i + '.0 * uDelta';\n }\n\n fragmentShader += 'uniform float uTaps[' + filterWindow + '];\\n';\n fragmentShader += 'void main() {\\n';\n fragmentShader += ' vec4 color = texture2D(uTexture, vTexCoord);\\n';\n fragmentShader += ' float sum = 1.0;\\n';\n\n offsets.forEach(function(offset, i) {\n fragmentShader += ' color += texture2D(uTexture, vTexCoord + ' + offset + ') * uTaps[' + i + '];\\n';\n fragmentShader += ' color += texture2D(uTexture, vTexCoord - ' + offset + ') * uTaps[' + i + '];\\n';\n fragmentShader += ' sum += 2.0 * uTaps[' + i + '];\\n';\n });\n fragmentShader += ' gl_FragColor = color / sum;\\n';\n fragmentShader += '}';\n return fragmentShader;\n },\n\n fragmentSourceTOP: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform vec2 uDelta;\\n' +\n 'varying vec2 vTexCoord;\\n',\n\n /**\n * Apply the resize filter to the image\n * Determines whether to use WebGL or Canvas2D based on the options.webgl flag.\n *\n * @param {Object} options\n * @param {Number} options.passes The number of filters remaining to be executed\n * @param {Boolean} options.webgl Whether to use webgl to render the filter.\n * @param {WebGLTexture} options.sourceTexture The texture setup as the source to be filtered.\n * @param {WebGLTexture} options.targetTexture The texture where filtered output should be drawn.\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n */\n applyTo: function(options) {\n if (options.webgl) {\n options.passes++;\n this.width = options.sourceWidth;\n this.horizontal = true;\n this.dW = Math.round(this.width * this.scaleX);\n this.dH = options.sourceHeight;\n this.tempScale = this.dW / this.width;\n this.taps = this.getTaps();\n options.destinationWidth = this.dW;\n this._setupFrameBuffer(options);\n this.applyToWebGL(options);\n this._swapTextures(options);\n options.sourceWidth = options.destinationWidth;\n\n this.height = options.sourceHeight;\n this.horizontal = false;\n this.dH = Math.round(this.height * this.scaleY);\n this.tempScale = this.dH / this.height;\n this.taps = this.getTaps();\n options.destinationHeight = this.dH;\n this._setupFrameBuffer(options);\n this.applyToWebGL(options);\n this._swapTextures(options);\n options.sourceHeight = options.destinationHeight;\n }\n else {\n this.applyTo2d(options);\n }\n },\n\n isNeutralState: function() {\n return this.scaleX === 1 && this.scaleY === 1;\n },\n\n lanczosCreate: function(lobes) {\n return function(x) {\n if (x >= lobes || x <= -lobes) {\n return 0.0;\n }\n if (x < 1.19209290E-07 && x > -1.19209290E-07) {\n return 1.0;\n }\n x *= Math.PI;\n var xx = x / lobes;\n return (sin(x) / x) * sin(xx) / xx;\n };\n },\n\n /**\n * Applies filter to canvas element\n * @memberOf fabric.Image.filters.Resize.prototype\n * @param {Object} canvasEl Canvas element to apply filter to\n * @param {Number} scaleX\n * @param {Number} scaleY\n */\n applyTo2d: function(options) {\n var imageData = options.imageData,\n scaleX = this.scaleX,\n scaleY = this.scaleY;\n\n this.rcpScaleX = 1 / scaleX;\n this.rcpScaleY = 1 / scaleY;\n\n var oW = imageData.width, oH = imageData.height,\n dW = round(oW * scaleX), dH = round(oH * scaleY),\n newData;\n\n if (this.resizeType === 'sliceHack') {\n newData = this.sliceByTwo(options, oW, oH, dW, dH);\n }\n else if (this.resizeType === 'hermite') {\n newData = this.hermiteFastResize(options, oW, oH, dW, dH);\n }\n else if (this.resizeType === 'bilinear') {\n newData = this.bilinearFiltering(options, oW, oH, dW, dH);\n }\n else if (this.resizeType === 'lanczos') {\n newData = this.lanczosResize(options, oW, oH, dW, dH);\n }\n options.imageData = newData;\n },\n\n /**\n * Filter sliceByTwo\n * @param {Object} canvasEl Canvas element to apply filter to\n * @param {Number} oW Original Width\n * @param {Number} oH Original Height\n * @param {Number} dW Destination Width\n * @param {Number} dH Destination Height\n * @returns {ImageData}\n */\n sliceByTwo: function(options, oW, oH, dW, dH) {\n var imageData = options.imageData,\n mult = 0.5, doneW = false, doneH = false, stepW = oW * mult,\n stepH = oH * mult, resources = fabric.filterBackend.resources,\n tmpCanvas, ctx, sX = 0, sY = 0, dX = oW, dY = 0;\n if (!resources.sliceByTwo) {\n resources.sliceByTwo = document.createElement('canvas');\n }\n tmpCanvas = resources.sliceByTwo;\n if (tmpCanvas.width < oW * 1.5 || tmpCanvas.height < oH) {\n tmpCanvas.width = oW * 1.5;\n tmpCanvas.height = oH;\n }\n ctx = tmpCanvas.getContext('2d');\n ctx.clearRect(0, 0, oW * 1.5, oH);\n ctx.putImageData(imageData, 0, 0);\n\n dW = floor(dW);\n dH = floor(dH);\n\n while (!doneW || !doneH) {\n oW = stepW;\n oH = stepH;\n if (dW < floor(stepW * mult)) {\n stepW = floor(stepW * mult);\n }\n else {\n stepW = dW;\n doneW = true;\n }\n if (dH < floor(stepH * mult)) {\n stepH = floor(stepH * mult);\n }\n else {\n stepH = dH;\n doneH = true;\n }\n ctx.drawImage(tmpCanvas, sX, sY, oW, oH, dX, dY, stepW, stepH);\n sX = dX;\n sY = dY;\n dY += stepH;\n }\n return ctx.getImageData(sX, sY, dW, dH);\n },\n\n /**\n * Filter lanczosResize\n * @param {Object} canvasEl Canvas element to apply filter to\n * @param {Number} oW Original Width\n * @param {Number} oH Original Height\n * @param {Number} dW Destination Width\n * @param {Number} dH Destination Height\n * @returns {ImageData}\n */\n lanczosResize: function(options, oW, oH, dW, dH) {\n\n function process(u) {\n var v, i, weight, idx, a, red, green,\n blue, alpha, fX, fY;\n center.x = (u + 0.5) * ratioX;\n icenter.x = floor(center.x);\n for (v = 0; v < dH; v++) {\n center.y = (v + 0.5) * ratioY;\n icenter.y = floor(center.y);\n a = 0; red = 0; green = 0; blue = 0; alpha = 0;\n for (i = icenter.x - range2X; i <= icenter.x + range2X; i++) {\n if (i < 0 || i >= oW) {\n continue;\n }\n fX = floor(1000 * abs(i - center.x));\n if (!cacheLanc[fX]) {\n cacheLanc[fX] = { };\n }\n for (var j = icenter.y - range2Y; j <= icenter.y + range2Y; j++) {\n if (j < 0 || j >= oH) {\n continue;\n }\n fY = floor(1000 * abs(j - center.y));\n if (!cacheLanc[fX][fY]) {\n cacheLanc[fX][fY] = lanczos(sqrt(pow(fX * rcpRatioX, 2) + pow(fY * rcpRatioY, 2)) / 1000);\n }\n weight = cacheLanc[fX][fY];\n if (weight > 0) {\n idx = (j * oW + i) * 4;\n a += weight;\n red += weight * srcData[idx];\n green += weight * srcData[idx + 1];\n blue += weight * srcData[idx + 2];\n alpha += weight * srcData[idx + 3];\n }\n }\n }\n idx = (v * dW + u) * 4;\n destData[idx] = red / a;\n destData[idx + 1] = green / a;\n destData[idx + 2] = blue / a;\n destData[idx + 3] = alpha / a;\n }\n\n if (++u < dW) {\n return process(u);\n }\n else {\n return destImg;\n }\n }\n\n var srcData = options.imageData.data,\n destImg = options.ctx.createImageData(dW, dH),\n destData = destImg.data,\n lanczos = this.lanczosCreate(this.lanczosLobes),\n ratioX = this.rcpScaleX, ratioY = this.rcpScaleY,\n rcpRatioX = 2 / this.rcpScaleX, rcpRatioY = 2 / this.rcpScaleY,\n range2X = ceil(ratioX * this.lanczosLobes / 2),\n range2Y = ceil(ratioY * this.lanczosLobes / 2),\n cacheLanc = { }, center = { }, icenter = { };\n\n return process(0);\n },\n\n /**\n * bilinearFiltering\n * @param {Object} canvasEl Canvas element to apply filter to\n * @param {Number} oW Original Width\n * @param {Number} oH Original Height\n * @param {Number} dW Destination Width\n * @param {Number} dH Destination Height\n * @returns {ImageData}\n */\n bilinearFiltering: function(options, oW, oH, dW, dH) {\n var a, b, c, d, x, y, i, j, xDiff, yDiff, chnl,\n color, offset = 0, origPix, ratioX = this.rcpScaleX,\n ratioY = this.rcpScaleY,\n w4 = 4 * (oW - 1), img = options.imageData,\n pixels = img.data, destImage = options.ctx.createImageData(dW, dH),\n destPixels = destImage.data;\n for (i = 0; i < dH; i++) {\n for (j = 0; j < dW; j++) {\n x = floor(ratioX * j);\n y = floor(ratioY * i);\n xDiff = ratioX * j - x;\n yDiff = ratioY * i - y;\n origPix = 4 * (y * oW + x);\n\n for (chnl = 0; chnl < 4; chnl++) {\n a = pixels[origPix + chnl];\n b = pixels[origPix + 4 + chnl];\n c = pixels[origPix + w4 + chnl];\n d = pixels[origPix + w4 + 4 + chnl];\n color = a * (1 - xDiff) * (1 - yDiff) + b * xDiff * (1 - yDiff) +\n c * yDiff * (1 - xDiff) + d * xDiff * yDiff;\n destPixels[offset++] = color;\n }\n }\n }\n return destImage;\n },\n\n /**\n * hermiteFastResize\n * @param {Object} canvasEl Canvas element to apply filter to\n * @param {Number} oW Original Width\n * @param {Number} oH Original Height\n * @param {Number} dW Destination Width\n * @param {Number} dH Destination Height\n * @returns {ImageData}\n */\n hermiteFastResize: function(options, oW, oH, dW, dH) {\n var ratioW = this.rcpScaleX, ratioH = this.rcpScaleY,\n ratioWHalf = ceil(ratioW / 2),\n ratioHHalf = ceil(ratioH / 2),\n img = options.imageData, data = img.data,\n img2 = options.ctx.createImageData(dW, dH), data2 = img2.data;\n for (var j = 0; j < dH; j++) {\n for (var i = 0; i < dW; i++) {\n var x2 = (i + j * dW) * 4, weight = 0, weights = 0, weightsAlpha = 0,\n gxR = 0, gxG = 0, gxB = 0, gxA = 0, centerY = (j + 0.5) * ratioH;\n for (var yy = floor(j * ratioH); yy < (j + 1) * ratioH; yy++) {\n var dy = abs(centerY - (yy + 0.5)) / ratioHHalf,\n centerX = (i + 0.5) * ratioW, w0 = dy * dy;\n for (var xx = floor(i * ratioW); xx < (i + 1) * ratioW; xx++) {\n var dx = abs(centerX - (xx + 0.5)) / ratioWHalf,\n w = sqrt(w0 + dx * dx);\n /* eslint-disable max-depth */\n if (w > 1 && w < -1) {\n continue;\n }\n //hermite filter\n weight = 2 * w * w * w - 3 * w * w + 1;\n if (weight > 0) {\n dx = 4 * (xx + yy * oW);\n //alpha\n gxA += weight * data[dx + 3];\n weightsAlpha += weight;\n //colors\n if (data[dx + 3] < 255) {\n weight = weight * data[dx + 3] / 250;\n }\n gxR += weight * data[dx];\n gxG += weight * data[dx + 1];\n gxB += weight * data[dx + 2];\n weights += weight;\n }\n /* eslint-enable max-depth */\n }\n }\n data2[x2] = gxR / weights;\n data2[x2 + 1] = gxG / weights;\n data2[x2 + 2] = gxB / weights;\n data2[x2 + 3] = gxA / weightsAlpha;\n }\n }\n return img2;\n },\n\n /**\n * Returns object representation of an instance\n * @return {Object} Object representation of an instance\n */\n toObject: function() {\n return {\n type: this.type,\n scaleX: this.scaleX,\n scaleY: this.scaleY,\n resizeType: this.resizeType,\n lanczosLobes: this.lanczosLobes\n };\n }\n });\n\n /**\n * Returns filter instance from an object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {Function} [callback] to be invoked after filter creation\n * @return {fabric.Image.filters.Resize} Instance of fabric.Image.filters.Resize\n */\n fabric.Image.filters.Resize.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n\n /**\n * Contrast filter class\n * @class fabric.Image.filters.Contrast\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @see {@link fabric.Image.filters.Contrast#initialize} for constructor definition\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n * @example\n * var filter = new fabric.Image.filters.Contrast({\n * contrast: 0.25\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\n filters.Contrast = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Contrast.prototype */ {\n\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n type: 'Contrast',\n\n fragmentSource: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform float uContrast;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'void main() {\\n' +\n 'vec4 color = texture2D(uTexture, vTexCoord);\\n' +\n 'float contrastF = 1.015 * (uContrast + 1.0) / (1.0 * (1.015 - uContrast));\\n' +\n 'color.rgb = contrastF * (color.rgb - 0.5) + 0.5;\\n' +\n 'gl_FragColor = color;\\n' +\n '}',\n\n /**\n * contrast value, range from -1 to 1.\n * @param {Number} contrast\n * @default 0\n */\n contrast: 0,\n\n mainParameter: 'contrast',\n\n /**\n * Constructor\n * @memberOf fabric.Image.filters.Contrast.prototype\n * @param {Object} [options] Options object\n * @param {Number} [options.contrast=0] Value to contrast the image up (-1...1)\n */\n\n /**\n * Apply the Contrast operation to a Uint8Array representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8Array to be filtered.\n */\n applyTo2d: function(options) {\n if (this.contrast === 0) {\n return;\n }\n var imageData = options.imageData, i, len,\n data = imageData.data, len = data.length,\n contrast = Math.floor(this.contrast * 255),\n contrastF = 259 * (contrast + 255) / (255 * (259 - contrast));\n\n for (i = 0; i < len; i += 4) {\n data[i] = contrastF * (data[i] - 128) + 128;\n data[i + 1] = contrastF * (data[i + 1] - 128) + 128;\n data[i + 2] = contrastF * (data[i + 2] - 128) + 128;\n }\n },\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations: function(gl, program) {\n return {\n uContrast: gl.getUniformLocation(program, 'uContrast'),\n };\n },\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData: function(gl, uniformLocations) {\n gl.uniform1f(uniformLocations.uContrast, this.contrast);\n },\n });\n\n /**\n * Returns filter instance from an object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {function} [callback] to be invoked after filter creation\n * @return {fabric.Image.filters.Contrast} Instance of fabric.Image.filters.Contrast\n */\n fabric.Image.filters.Contrast.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n\n /**\n * Saturate filter class\n * @class fabric.Image.filters.Saturation\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @see {@link fabric.Image.filters.Saturation#initialize} for constructor definition\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n * @example\n * var filter = new fabric.Image.filters.Saturation({\n * saturation: 1\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\n filters.Saturation = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Saturation.prototype */ {\n\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n type: 'Saturation',\n\n fragmentSource: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform float uSaturation;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'void main() {\\n' +\n 'vec4 color = texture2D(uTexture, vTexCoord);\\n' +\n 'float rgMax = max(color.r, color.g);\\n' +\n 'float rgbMax = max(rgMax, color.b);\\n' +\n 'color.r += rgbMax != color.r ? (rgbMax - color.r) * uSaturation : 0.00;\\n' +\n 'color.g += rgbMax != color.g ? (rgbMax - color.g) * uSaturation : 0.00;\\n' +\n 'color.b += rgbMax != color.b ? (rgbMax - color.b) * uSaturation : 0.00;\\n' +\n 'gl_FragColor = color;\\n' +\n '}',\n\n /**\n * Saturation value, from -1 to 1.\n * Increases/decreases the color saturation.\n * A value of 0 has no effect.\n * \n * @param {Number} saturation\n * @default\n */\n saturation: 0,\n\n mainParameter: 'saturation',\n\n /**\n * Constructor\n * @memberOf fabric.Image.filters.Saturate.prototype\n * @param {Object} [options] Options object\n * @param {Number} [options.saturate=0] Value to saturate the image (-1...1)\n */\n\n /**\n * Apply the Saturation operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d: function(options) {\n if (this.saturation === 0) {\n return;\n }\n var imageData = options.imageData,\n data = imageData.data, len = data.length,\n adjust = -this.saturation, i, max;\n\n for (i = 0; i < len; i += 4) {\n max = Math.max(data[i], data[i + 1], data[i + 2]);\n data[i] += max !== data[i] ? (max - data[i]) * adjust : 0;\n data[i + 1] += max !== data[i + 1] ? (max - data[i + 1]) * adjust : 0;\n data[i + 2] += max !== data[i + 2] ? (max - data[i + 2]) * adjust : 0;\n }\n },\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations: function(gl, program) {\n return {\n uSaturation: gl.getUniformLocation(program, 'uSaturation'),\n };\n },\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData: function(gl, uniformLocations) {\n gl.uniform1f(uniformLocations.uSaturation, -this.saturation);\n },\n });\n\n /**\n * Returns filter instance from an object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {Function} [callback] to be invoked after filter creation\n * @return {fabric.Image.filters.Saturation} Instance of fabric.Image.filters.Saturate\n */\n fabric.Image.filters.Saturation.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n\n /**\n * Vibrance filter class\n * @class fabric.Image.filters.Vibrance\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @see {@link fabric.Image.filters.Vibrance#initialize} for constructor definition\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n * @example\n * var filter = new fabric.Image.filters.Vibrance({\n * vibrance: 1\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\n filters.Vibrance = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Vibrance.prototype */ {\n\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n type: 'Vibrance',\n\n fragmentSource: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform float uVibrance;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'void main() {\\n' +\n 'vec4 color = texture2D(uTexture, vTexCoord);\\n' +\n 'float max = max(color.r, max(color.g, color.b));\\n' +\n 'float avg = (color.r + color.g + color.b) / 3.0;\\n' +\n 'float amt = (abs(max - avg) * 2.0) * uVibrance;\\n' +\n 'color.r += max != color.r ? (max - color.r) * amt : 0.00;\\n' +\n 'color.g += max != color.g ? (max - color.g) * amt : 0.00;\\n' +\n 'color.b += max != color.b ? (max - color.b) * amt : 0.00;\\n' +\n 'gl_FragColor = color;\\n' +\n '}',\n\n /**\n * Vibrance value, from -1 to 1.\n * Increases/decreases the saturation of more muted colors with less effect on saturated colors.\n * A value of 0 has no effect.\n * \n * @param {Number} vibrance\n * @default\n */\n vibrance: 0,\n\n mainParameter: 'vibrance',\n\n /**\n * Constructor\n * @memberOf fabric.Image.filters.Vibrance.prototype\n * @param {Object} [options] Options object\n * @param {Number} [options.vibrance=0] Vibrance value for the image (between -1 and 1)\n */\n\n /**\n * Apply the Vibrance operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d: function(options) {\n if (this.vibrance === 0) {\n return;\n }\n var imageData = options.imageData,\n data = imageData.data, len = data.length,\n adjust = -this.vibrance, i, max, avg, amt;\n\n for (i = 0; i < len; i += 4) {\n max = Math.max(data[i], data[i + 1], data[i + 2]);\n avg = (data[i] + data[i + 1] + data[i + 2]) / 3;\n amt = ((Math.abs(max - avg) * 2 / 255) * adjust);\n data[i] += max !== data[i] ? (max - data[i]) * amt : 0;\n data[i + 1] += max !== data[i + 1] ? (max - data[i + 1]) * amt : 0;\n data[i + 2] += max !== data[i + 2] ? (max - data[i + 2]) * amt : 0;\n }\n },\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations: function(gl, program) {\n return {\n uVibrance: gl.getUniformLocation(program, 'uVibrance'),\n };\n },\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData: function(gl, uniformLocations) {\n gl.uniform1f(uniformLocations.uVibrance, -this.vibrance);\n },\n });\n\n /**\n * Returns filter instance from an object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {Function} [callback] to be invoked after filter creation\n * @return {fabric.Image.filters.Vibrance} Instance of fabric.Image.filters.Vibrance\n */\n fabric.Image.filters.Vibrance.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n\n /**\n * Blur filter class\n * @class fabric.Image.filters.Blur\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @see {@link fabric.Image.filters.Blur#initialize} for constructor definition\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n * @example\n * var filter = new fabric.Image.filters.Blur({\n * blur: 0.5\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n * canvas.renderAll();\n */\n filters.Blur = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Blur.prototype */ {\n\n type: 'Blur',\n\n /*\n'gl_FragColor = vec4(0.0);',\n'gl_FragColor += texture2D(texture, vTexCoord + -7 * uDelta)*0.0044299121055113265;',\n'gl_FragColor += texture2D(texture, vTexCoord + -6 * uDelta)*0.00895781211794;',\n'gl_FragColor += texture2D(texture, vTexCoord + -5 * uDelta)*0.0215963866053;',\n'gl_FragColor += texture2D(texture, vTexCoord + -4 * uDelta)*0.0443683338718;',\n'gl_FragColor += texture2D(texture, vTexCoord + -3 * uDelta)*0.0776744219933;',\n'gl_FragColor += texture2D(texture, vTexCoord + -2 * uDelta)*0.115876621105;',\n'gl_FragColor += texture2D(texture, vTexCoord + -1 * uDelta)*0.147308056121;',\n'gl_FragColor += texture2D(texture, vTexCoord )*0.159576912161;',\n'gl_FragColor += texture2D(texture, vTexCoord + 1 * uDelta)*0.147308056121;',\n'gl_FragColor += texture2D(texture, vTexCoord + 2 * uDelta)*0.115876621105;',\n'gl_FragColor += texture2D(texture, vTexCoord + 3 * uDelta)*0.0776744219933;',\n'gl_FragColor += texture2D(texture, vTexCoord + 4 * uDelta)*0.0443683338718;',\n'gl_FragColor += texture2D(texture, vTexCoord + 5 * uDelta)*0.0215963866053;',\n'gl_FragColor += texture2D(texture, vTexCoord + 6 * uDelta)*0.00895781211794;',\n'gl_FragColor += texture2D(texture, vTexCoord + 7 * uDelta)*0.0044299121055113265;',\n*/\n\n /* eslint-disable max-len */\n fragmentSource: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform vec2 uDelta;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'const float nSamples = 15.0;\\n' +\n 'vec3 v3offset = vec3(12.9898, 78.233, 151.7182);\\n' +\n 'float random(vec3 scale) {\\n' +\n /* use the fragment position for a different seed per-pixel */\n 'return fract(sin(dot(gl_FragCoord.xyz, scale)) * 43758.5453);\\n' +\n '}\\n' +\n 'void main() {\\n' +\n 'vec4 color = vec4(0.0);\\n' +\n 'float total = 0.0;\\n' +\n 'float offset = random(v3offset);\\n' +\n 'for (float t = -nSamples; t <= nSamples; t++) {\\n' +\n 'float percent = (t + offset - 0.5) / nSamples;\\n' +\n 'float weight = 1.0 - abs(percent);\\n' +\n 'color += texture2D(uTexture, vTexCoord + uDelta * percent) * weight;\\n' +\n 'total += weight;\\n' +\n '}\\n' +\n 'gl_FragColor = color / total;\\n' +\n '}',\n /* eslint-enable max-len */\n\n /**\n * blur value, in percentage of image dimensions.\n * specific to keep the image blur constant at different resolutions\n * range between 0 and 1.\n */\n blur: 0,\n\n mainParameter: 'blur',\n\n applyTo: function(options) {\n if (options.webgl) {\n // this aspectRatio is used to give the same blur to vertical and horizontal\n this.aspectRatio = options.sourceWidth / options.sourceHeight;\n options.passes++;\n this._setupFrameBuffer(options);\n this.horizontal = true;\n this.applyToWebGL(options);\n this._swapTextures(options);\n this._setupFrameBuffer(options);\n this.horizontal = false;\n this.applyToWebGL(options);\n this._swapTextures(options);\n }\n else {\n this.applyTo2d(options);\n }\n },\n\n applyTo2d: function(options) {\n // paint canvasEl with current image data.\n //options.ctx.putImageData(options.imageData, 0, 0);\n options.imageData = this.simpleBlur(options);\n },\n\n simpleBlur: function(options) {\n var resources = options.filterBackend.resources, canvas1, canvas2,\n width = options.imageData.width,\n height = options.imageData.height;\n\n if (!resources.blurLayer1) {\n resources.blurLayer1 = fabric.util.createCanvasElement();\n resources.blurLayer2 = fabric.util.createCanvasElement();\n }\n canvas1 = resources.blurLayer1;\n canvas2 = resources.blurLayer2;\n if (canvas1.width !== width || canvas1.height !== height) {\n canvas2.width = canvas1.width = width;\n canvas2.height = canvas1.height = height;\n }\n var ctx1 = canvas1.getContext('2d'),\n ctx2 = canvas2.getContext('2d'),\n nSamples = 15,\n random, percent, j, i,\n blur = this.blur * 0.06 * 0.5;\n\n // load first canvas\n ctx1.putImageData(options.imageData, 0, 0);\n ctx2.clearRect(0, 0, width, height);\n\n for (i = -nSamples; i <= nSamples; i++) {\n random = (Math.random() - 0.5) / 4;\n percent = i / nSamples;\n j = blur * percent * width + random;\n ctx2.globalAlpha = 1 - Math.abs(percent);\n ctx2.drawImage(canvas1, j, random);\n ctx1.drawImage(canvas2, 0, 0);\n ctx2.globalAlpha = 1;\n ctx2.clearRect(0, 0, canvas2.width, canvas2.height);\n }\n for (i = -nSamples; i <= nSamples; i++) {\n random = (Math.random() - 0.5) / 4;\n percent = i / nSamples;\n j = blur * percent * height + random;\n ctx2.globalAlpha = 1 - Math.abs(percent);\n ctx2.drawImage(canvas1, random, j);\n ctx1.drawImage(canvas2, 0, 0);\n ctx2.globalAlpha = 1;\n ctx2.clearRect(0, 0, canvas2.width, canvas2.height);\n }\n options.ctx.drawImage(canvas1, 0, 0);\n var newImageData = options.ctx.getImageData(0, 0, canvas1.width, canvas1.height);\n ctx1.globalAlpha = 1;\n ctx1.clearRect(0, 0, canvas1.width, canvas1.height);\n return newImageData;\n },\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations: function(gl, program) {\n return {\n delta: gl.getUniformLocation(program, 'uDelta'),\n };\n },\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData: function(gl, uniformLocations) {\n var delta = this.chooseRightDelta();\n gl.uniform2fv(uniformLocations.delta, delta);\n },\n\n /**\n * choose right value of image percentage to blur with\n * @returns {Array} a numeric array with delta values\n */\n chooseRightDelta: function() {\n var blurScale = 1, delta = [0, 0], blur;\n if (this.horizontal) {\n if (this.aspectRatio > 1) {\n // image is wide, i want to shrink radius horizontal\n blurScale = 1 / this.aspectRatio;\n }\n }\n else {\n if (this.aspectRatio < 1) {\n // image is tall, i want to shrink radius vertical\n blurScale = this.aspectRatio;\n }\n }\n blur = blurScale * this.blur * 0.12;\n if (this.horizontal) {\n delta[0] = blur;\n }\n else {\n delta[1] = blur;\n }\n return delta;\n },\n });\n\n /**\n * Deserialize a JSON definition of a BlurFilter into a concrete instance.\n */\n filters.Blur.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n\n /**\n * Gamma filter class\n * @class fabric.Image.filters.Gamma\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @see {@link fabric.Image.filters.Gamma#initialize} for constructor definition\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n * @example\n * var filter = new fabric.Image.filters.Gamma({\n * gamma: [1, 0.5, 2.1]\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\n filters.Gamma = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Gamma.prototype */ {\n\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n type: 'Gamma',\n\n fragmentSource: 'precision highp float;\\n' +\n 'uniform sampler2D uTexture;\\n' +\n 'uniform vec3 uGamma;\\n' +\n 'varying vec2 vTexCoord;\\n' +\n 'void main() {\\n' +\n 'vec4 color = texture2D(uTexture, vTexCoord);\\n' +\n 'vec3 correction = (1.0 / uGamma);\\n' +\n 'color.r = pow(color.r, correction.r);\\n' +\n 'color.g = pow(color.g, correction.g);\\n' +\n 'color.b = pow(color.b, correction.b);\\n' +\n 'gl_FragColor = color;\\n' +\n 'gl_FragColor.rgb *= color.a;\\n' +\n '}',\n\n /**\n * Gamma array value, from 0.01 to 2.2.\n * @param {Array} gamma\n * @default\n */\n gamma: [1, 1, 1],\n\n /**\n * Describe the property that is the filter parameter\n * @param {String} m\n * @default\n */\n mainParameter: 'gamma',\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n */\n initialize: function(options) {\n this.gamma = [1, 1, 1];\n filters.BaseFilter.prototype.initialize.call(this, options);\n },\n\n /**\n * Apply the Gamma operation to a Uint8Array representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8Array to be filtered.\n */\n applyTo2d: function(options) {\n var imageData = options.imageData, data = imageData.data,\n gamma = this.gamma, len = data.length,\n rInv = 1 / gamma[0], gInv = 1 / gamma[1],\n bInv = 1 / gamma[2], i;\n\n if (!this.rVals) {\n // eslint-disable-next-line\n this.rVals = new Uint8Array(256);\n // eslint-disable-next-line\n this.gVals = new Uint8Array(256);\n // eslint-disable-next-line\n this.bVals = new Uint8Array(256);\n }\n\n // This is an optimization - pre-compute a look-up table for each color channel\n // instead of performing these pow calls for each pixel in the image.\n for (i = 0, len = 256; i < len; i++) {\n this.rVals[i] = Math.pow(i / 255, rInv) * 255;\n this.gVals[i] = Math.pow(i / 255, gInv) * 255;\n this.bVals[i] = Math.pow(i / 255, bInv) * 255;\n }\n for (i = 0, len = data.length; i < len; i += 4) {\n data[i] = this.rVals[data[i]];\n data[i + 1] = this.gVals[data[i + 1]];\n data[i + 2] = this.bVals[data[i + 2]];\n }\n },\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations: function(gl, program) {\n return {\n uGamma: gl.getUniformLocation(program, 'uGamma'),\n };\n },\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData: function(gl, uniformLocations) {\n gl.uniform3fv(uniformLocations.uGamma, this.gamma);\n },\n });\n\n /**\n * Returns filter instance from an object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {function} [callback] to be invoked after filter creation\n * @return {fabric.Image.filters.Gamma} Instance of fabric.Image.filters.Gamma\n */\n fabric.Image.filters.Gamma.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n\n /**\n * A container class that knows how to apply a sequence of filters to an input image.\n */\n filters.Composed = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Composed.prototype */ {\n\n type: 'Composed',\n\n /**\n * A non sparse array of filters to apply\n */\n subFilters: [],\n\n /**\n * Constructor\n * @param {Object} [options] Options object\n */\n initialize: function(options) {\n this.callSuper('initialize', options);\n // create a new array instead mutating the prototype with push\n this.subFilters = this.subFilters.slice(0);\n },\n\n /**\n * Apply this container's filters to the input image provided.\n *\n * @param {Object} options\n * @param {Number} options.passes The number of filters remaining to be applied.\n */\n applyTo: function(options) {\n options.passes += this.subFilters.length - 1;\n this.subFilters.forEach(function(filter) {\n filter.applyTo(options);\n });\n },\n\n /**\n * Serialize this filter into JSON.\n *\n * @returns {Object} A JSON representation of this filter.\n */\n toObject: function() {\n return fabric.util.object.extend(this.callSuper('toObject'), {\n subFilters: this.subFilters.map(function(filter) { return filter.toObject(); }),\n });\n },\n\n isNeutralState: function() {\n return !this.subFilters.some(function(filter) { return !filter.isNeutralState(); });\n }\n });\n\n /**\n * Deserialize a JSON definition of a ComposedFilter into a concrete instance.\n */\n fabric.Image.filters.Composed.fromObject = function(object, callback) {\n var filters = object.subFilters || [],\n subFilters = filters.map(function(filter) {\n return new fabric.Image.filters[filter.type](filter);\n }),\n instance = new fabric.Image.filters.Composed({ subFilters: subFilters });\n callback && callback(instance);\n return instance;\n };\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n filters = fabric.Image.filters,\n createClass = fabric.util.createClass;\n\n /**\n * HueRotation filter class\n * @class fabric.Image.filters.HueRotation\n * @memberOf fabric.Image.filters\n * @extends fabric.Image.filters.BaseFilter\n * @see {@link fabric.Image.filters.HueRotation#initialize} for constructor definition\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n * @example\n * var filter = new fabric.Image.filters.HueRotation({\n * rotation: -0.5\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\n filters.HueRotation = createClass(filters.ColorMatrix, /** @lends fabric.Image.filters.HueRotation.prototype */ {\n\n /**\n * Filter type\n * @param {String} type\n * @default\n */\n type: 'HueRotation',\n\n /**\n * HueRotation value, from -1 to 1.\n * the unit is radians\n * @param {Number} myParameter\n * @default\n */\n rotation: 0,\n\n /**\n * Describe the property that is the filter parameter\n * @param {String} m\n * @default\n */\n mainParameter: 'rotation',\n\n calculateMatrix: function() {\n var rad = this.rotation * Math.PI, cos = fabric.util.cos(rad), sin = fabric.util.sin(rad),\n aThird = 1 / 3, aThirdSqtSin = Math.sqrt(aThird) * sin, OneMinusCos = 1 - cos;\n this.matrix = [\n 1, 0, 0, 0, 0,\n 0, 1, 0, 0, 0,\n 0, 0, 1, 0, 0,\n 0, 0, 0, 1, 0\n ];\n this.matrix[0] = cos + OneMinusCos / 3;\n this.matrix[1] = aThird * OneMinusCos - aThirdSqtSin;\n this.matrix[2] = aThird * OneMinusCos + aThirdSqtSin;\n this.matrix[5] = aThird * OneMinusCos + aThirdSqtSin;\n this.matrix[6] = cos + aThird * OneMinusCos;\n this.matrix[7] = aThird * OneMinusCos - aThirdSqtSin;\n this.matrix[10] = aThird * OneMinusCos - aThirdSqtSin;\n this.matrix[11] = aThird * OneMinusCos + aThirdSqtSin;\n this.matrix[12] = cos + aThird * OneMinusCos;\n },\n\n /**\n * HueRotation isNeutralState implementation\n * Used only in image applyFilters to discard filters that will not have an effect\n * on the image\n * @param {Object} options\n **/\n isNeutralState: function(options) {\n this.calculateMatrix();\n return filters.BaseFilter.prototype.isNeutralState.call(this, options);\n },\n\n /**\n * Apply this filter to the input image data provided.\n *\n * Determines whether to use WebGL or Canvas2D based on the options.webgl flag.\n *\n * @param {Object} options\n * @param {Number} options.passes The number of filters remaining to be executed\n * @param {Boolean} options.webgl Whether to use webgl to render the filter.\n * @param {WebGLTexture} options.sourceTexture The texture setup as the source to be filtered.\n * @param {WebGLTexture} options.targetTexture The texture where filtered output should be drawn.\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n */\n applyTo: function(options) {\n this.calculateMatrix();\n filters.BaseFilter.prototype.applyTo.call(this, options);\n },\n\n });\n\n /**\n * Returns filter instance from an object representation\n * @static\n * @param {Object} object Object to create an instance from\n * @param {function} [callback] to be invoked after filter creation\n * @return {fabric.Image.filters.HueRotation} Instance of fabric.Image.filters.HueRotation\n */\n fabric.Image.filters.HueRotation.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = { }),\n clone = fabric.util.object.clone;\n\n if (fabric.Text) {\n fabric.warn('fabric.Text is already defined');\n return;\n }\n\n var additionalProps =\n ('fontFamily fontWeight fontSize text underline overline linethrough' +\n ' textAlign fontStyle lineHeight textBackgroundColor charSpacing styles' +\n ' direction path pathStartOffset pathSide').split(' ');\n\n /**\n * Text class\n * @class fabric.Text\n * @extends fabric.Object\n * @return {fabric.Text} thisArg\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-2#text}\n * @see {@link fabric.Text#initialize} for constructor definition\n */\n fabric.Text = fabric.util.createClass(fabric.Object, /** @lends fabric.Text.prototype */ {\n\n /**\n * Properties which when set cause object to change dimensions\n * @type Array\n * @private\n */\n _dimensionAffectingProps: [\n 'fontSize',\n 'fontWeight',\n 'fontFamily',\n 'fontStyle',\n 'lineHeight',\n 'text',\n 'charSpacing',\n 'textAlign',\n 'styles',\n 'path',\n 'pathStartOffset',\n 'pathSide'\n ],\n\n /**\n * @private\n */\n _reNewline: /\\r?\\n/,\n\n /**\n * Use this regular expression to filter for whitespaces that is not a new line.\n * Mostly used when text is 'justify' aligned.\n * @private\n */\n _reSpacesAndTabs: /[ \\t\\r]/g,\n\n /**\n * Use this regular expression to filter for whitespace that is not a new line.\n * Mostly used when text is 'justify' aligned.\n * @private\n */\n _reSpaceAndTab: /[ \\t\\r]/,\n\n /**\n * Use this regular expression to filter consecutive groups of non spaces.\n * Mostly used when text is 'justify' aligned.\n * @private\n */\n _reWords: /\\S+/g,\n\n /**\n * Type of an object\n * @type String\n * @default\n */\n type: 'text',\n\n /**\n * Font size (in pixels)\n * @type Number\n * @default\n */\n fontSize: 40,\n\n /**\n * Font weight (e.g. bold, normal, 400, 600, 800)\n * @type {(Number|String)}\n * @default\n */\n fontWeight: 'normal',\n\n /**\n * Font family\n * @type String\n * @default\n */\n fontFamily: 'Times New Roman',\n\n /**\n * Text decoration underline.\n * @type Boolean\n * @default\n */\n underline: false,\n\n /**\n * Text decoration overline.\n * @type Boolean\n * @default\n */\n overline: false,\n\n /**\n * Text decoration linethrough.\n * @type Boolean\n * @default\n */\n linethrough: false,\n\n /**\n * Text alignment. Possible values: \"left\", \"center\", \"right\", \"justify\",\n * \"justify-left\", \"justify-center\" or \"justify-right\".\n * @type String\n * @default\n */\n textAlign: 'left',\n\n /**\n * Font style . Possible values: \"\", \"normal\", \"italic\" or \"oblique\".\n * @type String\n * @default\n */\n fontStyle: 'normal',\n\n /**\n * Line height\n * @type Number\n * @default\n */\n lineHeight: 1.16,\n\n /**\n * Superscript schema object (minimum overlap)\n * @type {Object}\n * @default\n */\n superscript: {\n size: 0.60, // fontSize factor\n baseline: -0.35 // baseline-shift factor (upwards)\n },\n\n /**\n * Subscript schema object (minimum overlap)\n * @type {Object}\n * @default\n */\n subscript: {\n size: 0.60, // fontSize factor\n baseline: 0.11 // baseline-shift factor (downwards)\n },\n\n /**\n * Background color of text lines\n * @type String\n * @default\n */\n textBackgroundColor: '',\n\n /**\n * List of properties to consider when checking if\n * state of an object is changed ({@link fabric.Object#hasStateChanged})\n * as well as for history (undo/redo) purposes\n * @type Array\n */\n stateProperties: fabric.Object.prototype.stateProperties.concat(additionalProps),\n\n /**\n * List of properties to consider when checking if cache needs refresh\n * @type Array\n */\n cacheProperties: fabric.Object.prototype.cacheProperties.concat(additionalProps),\n\n /**\n * When defined, an object is rendered via stroke and this property specifies its color.\n * Backwards incompatibility note: This property was named \"strokeStyle\" until v1.1.6\n * @type String\n * @default\n */\n stroke: null,\n\n /**\n * Shadow object representing shadow of this shape.\n * Backwards incompatibility note: This property was named \"textShadow\" (String) until v1.2.11\n * @type fabric.Shadow\n * @default\n */\n shadow: null,\n\n /**\n * fabric.Path that the text should follow.\n * since 4.6.0 the path will be drawn automatically.\n * if you want to make the path visible, give it a stroke and strokeWidth or fill value\n * if you want it to be hidden, assign visible = false to the path.\n * This feature is in BETA, and SVG import/export is not yet supported.\n * @type fabric.Path\n * @example\n * var textPath = new fabric.Text('Text on a path', {\n * top: 150,\n * left: 150,\n * textAlign: 'center',\n * charSpacing: -50,\n * path: new fabric.Path('M 0 0 C 50 -100 150 -100 200 0', {\n * strokeWidth: 1,\n * visible: false\n * }),\n * pathSide: 'left',\n * pathStartOffset: 0\n * });\n * @default\n */\n path: null,\n\n /**\n * Offset amount for text path starting position\n * Only used when text has a path\n * @type Number\n * @default\n */\n pathStartOffset: 0,\n\n /**\n * Which side of the path the text should be drawn on.\n * Only used when text has a path\n * @type {String} 'left|right'\n * @default\n */\n pathSide: 'left',\n\n /**\n * @private\n */\n _fontSizeFraction: 0.222,\n\n /**\n * @private\n */\n offsets: {\n underline: 0.10,\n linethrough: -0.315,\n overline: -0.88\n },\n\n /**\n * Text Line proportion to font Size (in pixels)\n * @type Number\n * @default\n */\n _fontSizeMult: 1.13,\n\n /**\n * additional space between characters\n * expressed in thousands of em unit\n * @type Number\n * @default\n */\n charSpacing: 0,\n\n /**\n * Object containing character styles - top-level properties -> line numbers,\n * 2nd-level properties - character numbers\n * @type Object\n * @default\n */\n styles: null,\n\n /**\n * Reference to a context to measure text char or couple of chars\n * the cacheContext of the canvas will be used or a freshly created one if the object is not on canvas\n * once created it will be referenced on fabric._measuringContext to avoid creating a canvas for every\n * text object created.\n * @type {CanvasRenderingContext2D}\n * @default\n */\n _measuringContext: null,\n\n /**\n * Baseline shift, styles only, keep at 0 for the main text object\n * @type {Number}\n * @default\n */\n deltaY: 0,\n\n /**\n * WARNING: EXPERIMENTAL. NOT SUPPORTED YET\n * determine the direction of the text.\n * This has to be set manually together with textAlign and originX for proper\n * experience.\n * some interesting link for the future\n * https://www.w3.org/International/questions/qa-bidi-unicode-controls\n * @since 4.5.0\n * @type {String} 'ltr|rtl'\n * @default\n */\n direction: 'ltr',\n\n /**\n * Array of properties that define a style unit (of 'styles').\n * @type {Array}\n * @default\n */\n _styleProperties: [\n 'stroke',\n 'strokeWidth',\n 'fill',\n 'fontFamily',\n 'fontSize',\n 'fontWeight',\n 'fontStyle',\n 'underline',\n 'overline',\n 'linethrough',\n 'deltaY',\n 'textBackgroundColor',\n ],\n\n /**\n * contains characters bounding boxes\n */\n __charBounds: [],\n\n /**\n * use this size when measuring text. To avoid IE11 rounding errors\n * @type {Number}\n * @default\n * @readonly\n * @private\n */\n CACHE_FONT_SIZE: 400,\n\n /**\n * contains the min text width to avoid getting 0\n * @type {Number}\n * @default\n */\n MIN_TEXT_WIDTH: 2,\n\n /**\n * Constructor\n * @param {String} text Text string\n * @param {Object} [options] Options object\n * @return {fabric.Text} thisArg\n */\n initialize: function(text, options) {\n this.styles = options ? (options.styles || { }) : { };\n this.text = text;\n this.__skipDimension = true;\n this.callSuper('initialize', options);\n if (this.path) {\n this.setPathInfo();\n }\n this.__skipDimension = false;\n this.initDimensions();\n this.setCoords();\n this.setupState({ propertySet: '_dimensionAffectingProps' });\n },\n\n /**\n * If text has a path, it will add the extra information needed\n * for path and text calculations\n * @return {fabric.Text} thisArg\n */\n setPathInfo: function() {\n var path = this.path;\n if (path) {\n path.segmentsInfo = fabric.util.getPathSegmentsInfo(path.path);\n }\n },\n\n /**\n * Return a context for measurement of text string.\n * if created it gets stored for reuse\n * @param {String} text Text string\n * @param {Object} [options] Options object\n * @return {fabric.Text} thisArg\n */\n getMeasuringContext: function() {\n // if we did not return we have to measure something.\n if (!fabric._measuringContext) {\n fabric._measuringContext = this.canvas && this.canvas.contextCache ||\n fabric.util.createCanvasElement().getContext('2d');\n }\n return fabric._measuringContext;\n },\n\n /**\n * @private\n * Divides text into lines of text and lines of graphemes.\n */\n _splitText: function() {\n var newLines = this._splitTextIntoLines(this.text);\n this.textLines = newLines.lines;\n this._textLines = newLines.graphemeLines;\n this._unwrappedTextLines = newLines._unwrappedLines;\n this._text = newLines.graphemeText;\n return newLines;\n },\n\n /**\n * Initialize or update text dimensions.\n * Updates this.width and this.height with the proper values.\n * Does not return dimensions.\n */\n initDimensions: function() {\n if (this.__skipDimension) {\n return;\n }\n this._splitText();\n this._clearCache();\n if (this.path) {\n this.width = this.path.width;\n this.height = this.path.height;\n }\n else {\n this.width = this.calcTextWidth() || this.cursorWidth || this.MIN_TEXT_WIDTH;\n this.height = this.calcTextHeight();\n }\n if (this.textAlign.indexOf('justify') !== -1) {\n // once text is measured we need to make space fatter to make justified text.\n this.enlargeSpaces();\n }\n this.saveState({ propertySet: '_dimensionAffectingProps' });\n },\n\n /**\n * Enlarge space boxes and shift the others\n */\n enlargeSpaces: function() {\n var diffSpace, currentLineWidth, numberOfSpaces, accumulatedSpace, line, charBound, spaces;\n for (var i = 0, len = this._textLines.length; i < len; i++) {\n if (this.textAlign !== 'justify' && (i === len - 1 || this.isEndOfWrapping(i))) {\n continue;\n }\n accumulatedSpace = 0;\n line = this._textLines[i];\n currentLineWidth = this.getLineWidth(i);\n if (currentLineWidth < this.width && (spaces = this.textLines[i].match(this._reSpacesAndTabs))) {\n numberOfSpaces = spaces.length;\n diffSpace = (this.width - currentLineWidth) / numberOfSpaces;\n for (var j = 0, jlen = line.length; j <= jlen; j++) {\n charBound = this.__charBounds[i][j];\n if (this._reSpaceAndTab.test(line[j])) {\n charBound.width += diffSpace;\n charBound.kernedWidth += diffSpace;\n charBound.left += accumulatedSpace;\n accumulatedSpace += diffSpace;\n }\n else {\n charBound.left += accumulatedSpace;\n }\n }\n }\n }\n },\n\n /**\n * Detect if the text line is ended with an hard break\n * text and itext do not have wrapping, return false\n * @return {Boolean}\n */\n isEndOfWrapping: function(lineIndex) {\n return lineIndex === this._textLines.length - 1;\n },\n\n /**\n * Detect if a line has a linebreak and so we need to account for it when moving\n * and counting style.\n * It return always for text and Itext.\n * @return Number\n */\n missingNewlineOffset: function() {\n return 1;\n },\n\n /**\n * Returns string representation of an instance\n * @return {String} String representation of text object\n */\n toString: function() {\n return '#';\n },\n\n /**\n * Return the dimension and the zoom level needed to create a cache canvas\n * big enough to host the object to be cached.\n * @private\n * @param {Object} dim.x width of object to be cached\n * @param {Object} dim.y height of object to be cached\n * @return {Object}.width width of canvas\n * @return {Object}.height height of canvas\n * @return {Object}.zoomX zoomX zoom value to unscale the canvas before drawing cache\n * @return {Object}.zoomY zoomY zoom value to unscale the canvas before drawing cache\n */\n _getCacheCanvasDimensions: function() {\n var dims = this.callSuper('_getCacheCanvasDimensions');\n var fontSize = this.fontSize;\n dims.width += fontSize * dims.zoomX;\n dims.height += fontSize * dims.zoomY;\n return dims;\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render: function(ctx) {\n var path = this.path;\n path && !path.isNotVisible() && path._render(ctx);\n this._setTextStyles(ctx);\n this._renderTextLinesBackground(ctx);\n this._renderTextDecoration(ctx, 'underline');\n this._renderText(ctx);\n this._renderTextDecoration(ctx, 'overline');\n this._renderTextDecoration(ctx, 'linethrough');\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderText: function(ctx) {\n if (this.paintFirst === 'stroke') {\n this._renderTextStroke(ctx);\n this._renderTextFill(ctx);\n }\n else {\n this._renderTextFill(ctx);\n this._renderTextStroke(ctx);\n }\n },\n\n /**\n * Set the font parameter of the context with the object properties or with charStyle\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {Object} [charStyle] object with font style properties\n * @param {String} [charStyle.fontFamily] Font Family\n * @param {Number} [charStyle.fontSize] Font size in pixels. ( without px suffix )\n * @param {String} [charStyle.fontWeight] Font weight\n * @param {String} [charStyle.fontStyle] Font style (italic|normal)\n */\n _setTextStyles: function(ctx, charStyle, forMeasuring) {\n ctx.textBaseline = 'alphabetic';\n ctx.font = this._getFontDeclaration(charStyle, forMeasuring);\n },\n\n /**\n * calculate and return the text Width measuring each line.\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @return {Number} Maximum width of fabric.Text object\n */\n calcTextWidth: function() {\n var maxWidth = this.getLineWidth(0);\n\n for (var i = 1, len = this._textLines.length; i < len; i++) {\n var currentLineWidth = this.getLineWidth(i);\n if (currentLineWidth > maxWidth) {\n maxWidth = currentLineWidth;\n }\n }\n return maxWidth;\n },\n\n /**\n * @private\n * @param {String} method Method name (\"fillText\" or \"strokeText\")\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {String} line Text to render\n * @param {Number} left Left position of text\n * @param {Number} top Top position of text\n * @param {Number} lineIndex Index of a line in a text\n */\n _renderTextLine: function(method, ctx, line, left, top, lineIndex) {\n this._renderChars(method, ctx, line, left, top, lineIndex);\n },\n\n /**\n * Renders the text background for lines, taking care of style\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderTextLinesBackground: function(ctx) {\n if (!this.textBackgroundColor && !this.styleHas('textBackgroundColor')) {\n return;\n }\n var heightOfLine,\n lineLeftOffset, originalFill = ctx.fillStyle,\n line, lastColor,\n leftOffset = this._getLeftOffset(),\n lineTopOffset = this._getTopOffset(),\n boxStart = 0, boxWidth = 0, charBox, currentColor, path = this.path,\n drawStart;\n\n for (var i = 0, len = this._textLines.length; i < len; i++) {\n heightOfLine = this.getHeightOfLine(i);\n if (!this.textBackgroundColor && !this.styleHas('textBackgroundColor', i)) {\n lineTopOffset += heightOfLine;\n continue;\n }\n line = this._textLines[i];\n lineLeftOffset = this._getLineLeftOffset(i);\n boxWidth = 0;\n boxStart = 0;\n lastColor = this.getValueOfPropertyAt(i, 0, 'textBackgroundColor');\n for (var j = 0, jlen = line.length; j < jlen; j++) {\n charBox = this.__charBounds[i][j];\n currentColor = this.getValueOfPropertyAt(i, j, 'textBackgroundColor');\n if (path) {\n ctx.save();\n ctx.translate(charBox.renderLeft, charBox.renderTop);\n ctx.rotate(charBox.angle);\n ctx.fillStyle = currentColor;\n currentColor && ctx.fillRect(\n -charBox.width / 2,\n -heightOfLine / this.lineHeight * (1 - this._fontSizeFraction),\n charBox.width,\n heightOfLine / this.lineHeight\n );\n ctx.restore();\n }\n else if (currentColor !== lastColor) {\n drawStart = leftOffset + lineLeftOffset + boxStart;\n if (this.direction === 'rtl') {\n drawStart = this.width - drawStart - boxWidth;\n }\n ctx.fillStyle = lastColor;\n lastColor && ctx.fillRect(\n drawStart,\n lineTopOffset,\n boxWidth,\n heightOfLine / this.lineHeight\n );\n boxStart = charBox.left;\n boxWidth = charBox.width;\n lastColor = currentColor;\n }\n else {\n boxWidth += charBox.kernedWidth;\n }\n }\n if (currentColor && !path) {\n drawStart = leftOffset + lineLeftOffset + boxStart;\n if (this.direction === 'rtl') {\n drawStart = this.width - drawStart - boxWidth;\n }\n ctx.fillStyle = currentColor;\n ctx.fillRect(\n drawStart,\n lineTopOffset,\n boxWidth,\n heightOfLine / this.lineHeight\n );\n }\n lineTopOffset += heightOfLine;\n }\n ctx.fillStyle = originalFill;\n // if there is text background color no\n // other shadows should be casted\n this._removeShadow(ctx);\n },\n\n /**\n * @private\n * @param {Object} decl style declaration for cache\n * @param {String} decl.fontFamily fontFamily\n * @param {String} decl.fontStyle fontStyle\n * @param {String} decl.fontWeight fontWeight\n * @return {Object} reference to cache\n */\n getFontCache: function(decl) {\n var fontFamily = decl.fontFamily.toLowerCase();\n if (!fabric.charWidthsCache[fontFamily]) {\n fabric.charWidthsCache[fontFamily] = { };\n }\n var cache = fabric.charWidthsCache[fontFamily],\n cacheProp = decl.fontStyle.toLowerCase() + '_' + (decl.fontWeight + '').toLowerCase();\n if (!cache[cacheProp]) {\n cache[cacheProp] = { };\n }\n return cache[cacheProp];\n },\n\n /**\n * measure and return the width of a single character.\n * possibly overridden to accommodate different measure logic or\n * to hook some external lib for character measurement\n * @private\n * @param {String} _char, char to be measured\n * @param {Object} charStyle style of char to be measured\n * @param {String} [previousChar] previous char\n * @param {Object} [prevCharStyle] style of previous char\n */\n _measureChar: function(_char, charStyle, previousChar, prevCharStyle) {\n // first i try to return from cache\n var fontCache = this.getFontCache(charStyle), fontDeclaration = this._getFontDeclaration(charStyle),\n previousFontDeclaration = this._getFontDeclaration(prevCharStyle), couple = previousChar + _char,\n stylesAreEqual = fontDeclaration === previousFontDeclaration, width, coupleWidth, previousWidth,\n fontMultiplier = charStyle.fontSize / this.CACHE_FONT_SIZE, kernedWidth;\n\n if (previousChar && fontCache[previousChar] !== undefined) {\n previousWidth = fontCache[previousChar];\n }\n if (fontCache[_char] !== undefined) {\n kernedWidth = width = fontCache[_char];\n }\n if (stylesAreEqual && fontCache[couple] !== undefined) {\n coupleWidth = fontCache[couple];\n kernedWidth = coupleWidth - previousWidth;\n }\n if (width === undefined || previousWidth === undefined || coupleWidth === undefined) {\n var ctx = this.getMeasuringContext();\n // send a TRUE to specify measuring font size CACHE_FONT_SIZE\n this._setTextStyles(ctx, charStyle, true);\n }\n if (width === undefined) {\n kernedWidth = width = ctx.measureText(_char).width;\n fontCache[_char] = width;\n }\n if (previousWidth === undefined && stylesAreEqual && previousChar) {\n previousWidth = ctx.measureText(previousChar).width;\n fontCache[previousChar] = previousWidth;\n }\n if (stylesAreEqual && coupleWidth === undefined) {\n // we can measure the kerning couple and subtract the width of the previous character\n coupleWidth = ctx.measureText(couple).width;\n fontCache[couple] = coupleWidth;\n kernedWidth = coupleWidth - previousWidth;\n }\n return { width: width * fontMultiplier, kernedWidth: kernedWidth * fontMultiplier };\n },\n\n /**\n * Computes height of character at given position\n * @param {Number} line the line index number\n * @param {Number} _char the character index number\n * @return {Number} fontSize of the character\n */\n getHeightOfChar: function(line, _char) {\n return this.getValueOfPropertyAt(line, _char, 'fontSize');\n },\n\n /**\n * measure a text line measuring all characters.\n * @param {Number} lineIndex line number\n * @return {Number} Line width\n */\n measureLine: function(lineIndex) {\n var lineInfo = this._measureLine(lineIndex);\n if (this.charSpacing !== 0) {\n lineInfo.width -= this._getWidthOfCharSpacing();\n }\n if (lineInfo.width < 0) {\n lineInfo.width = 0;\n }\n return lineInfo;\n },\n\n /**\n * measure every grapheme of a line, populating __charBounds\n * @param {Number} lineIndex\n * @return {Object} object.width total width of characters\n * @return {Object} object.widthOfSpaces length of chars that match this._reSpacesAndTabs\n */\n _measureLine: function(lineIndex) {\n var width = 0, i, grapheme, line = this._textLines[lineIndex], prevGrapheme,\n graphemeInfo, numOfSpaces = 0, lineBounds = new Array(line.length),\n positionInPath = 0, startingPoint, totalPathLength, path = this.path,\n reverse = this.pathSide === 'right';\n\n this.__charBounds[lineIndex] = lineBounds;\n for (i = 0; i < line.length; i++) {\n grapheme = line[i];\n graphemeInfo = this._getGraphemeBox(grapheme, lineIndex, i, prevGrapheme);\n lineBounds[i] = graphemeInfo;\n width += graphemeInfo.kernedWidth;\n prevGrapheme = grapheme;\n }\n // this latest bound box represent the last character of the line\n // to simplify cursor handling in interactive mode.\n lineBounds[i] = {\n left: graphemeInfo ? graphemeInfo.left + graphemeInfo.width : 0,\n width: 0,\n kernedWidth: 0,\n height: this.fontSize\n };\n if (path) {\n totalPathLength = path.segmentsInfo[path.segmentsInfo.length - 1].length;\n startingPoint = fabric.util.getPointOnPath(path.path, 0, path.segmentsInfo);\n startingPoint.x += path.pathOffset.x;\n startingPoint.y += path.pathOffset.y;\n switch (this.textAlign) {\n case 'left':\n positionInPath = reverse ? (totalPathLength - width) : 0;\n break;\n case 'center':\n positionInPath = (totalPathLength - width) / 2;\n break;\n case 'right':\n positionInPath = reverse ? 0 : (totalPathLength - width);\n break;\n //todo - add support for justify\n }\n positionInPath += this.pathStartOffset * (reverse ? -1 : 1);\n for (i = reverse ? line.length - 1 : 0;\n reverse ? i >= 0 : i < line.length;\n reverse ? i-- : i++) {\n graphemeInfo = lineBounds[i];\n if (positionInPath > totalPathLength) {\n positionInPath %= totalPathLength;\n }\n else if (positionInPath < 0) {\n positionInPath += totalPathLength;\n }\n // it would probably much faster to send all the grapheme position for a line\n // and calculate path position/angle at once.\n this._setGraphemeOnPath(positionInPath, graphemeInfo, startingPoint);\n positionInPath += graphemeInfo.kernedWidth;\n }\n }\n return { width: width, numOfSpaces: numOfSpaces };\n },\n\n /**\n * Calculate the angle and the left,top position of the char that follow a path.\n * It appends it to graphemeInfo to be reused later at rendering\n * @private\n * @param {Number} positionInPath to be measured\n * @param {Object} graphemeInfo current grapheme box information\n * @param {Object} startingPoint position of the point\n */\n _setGraphemeOnPath: function(positionInPath, graphemeInfo, startingPoint) {\n var centerPosition = positionInPath + graphemeInfo.kernedWidth / 2,\n path = this.path;\n\n // we are at currentPositionOnPath. we want to know what point on the path is.\n var info = fabric.util.getPointOnPath(path.path, centerPosition, path.segmentsInfo);\n graphemeInfo.renderLeft = info.x - startingPoint.x;\n graphemeInfo.renderTop = info.y - startingPoint.y;\n graphemeInfo.angle = info.angle + (this.pathSide === 'right' ? Math.PI : 0);\n },\n\n /**\n * Measure and return the info of a single grapheme.\n * needs the the info of previous graphemes already filled\n * @private\n * @param {String} grapheme to be measured\n * @param {Number} lineIndex index of the line where the char is\n * @param {Number} charIndex position in the line\n * @param {String} [prevGrapheme] character preceding the one to be measured\n */\n _getGraphemeBox: function(grapheme, lineIndex, charIndex, prevGrapheme, skipLeft) {\n var style = this.getCompleteStyleDeclaration(lineIndex, charIndex),\n prevStyle = prevGrapheme ? this.getCompleteStyleDeclaration(lineIndex, charIndex - 1) : { },\n info = this._measureChar(grapheme, style, prevGrapheme, prevStyle),\n kernedWidth = info.kernedWidth,\n width = info.width, charSpacing;\n\n if (this.charSpacing !== 0) {\n charSpacing = this._getWidthOfCharSpacing();\n width += charSpacing;\n kernedWidth += charSpacing;\n }\n\n var box = {\n width: width,\n left: 0,\n height: style.fontSize,\n kernedWidth: kernedWidth,\n deltaY: style.deltaY,\n };\n if (charIndex > 0 && !skipLeft) {\n var previousBox = this.__charBounds[lineIndex][charIndex - 1];\n box.left = previousBox.left + previousBox.width + info.kernedWidth - info.width;\n }\n return box;\n },\n\n /**\n * Calculate height of line at 'lineIndex'\n * @param {Number} lineIndex index of line to calculate\n * @return {Number}\n */\n getHeightOfLine: function(lineIndex) {\n if (this.__lineHeights[lineIndex]) {\n return this.__lineHeights[lineIndex];\n }\n\n var line = this._textLines[lineIndex],\n // char 0 is measured before the line cycle because it nneds to char\n // emptylines\n maxHeight = this.getHeightOfChar(lineIndex, 0);\n for (var i = 1, len = line.length; i < len; i++) {\n maxHeight = Math.max(this.getHeightOfChar(lineIndex, i), maxHeight);\n }\n\n return this.__lineHeights[lineIndex] = maxHeight * this.lineHeight * this._fontSizeMult;\n },\n\n /**\n * Calculate text box height\n */\n calcTextHeight: function() {\n var lineHeight, height = 0;\n for (var i = 0, len = this._textLines.length; i < len; i++) {\n lineHeight = this.getHeightOfLine(i);\n height += (i === len - 1 ? lineHeight / this.lineHeight : lineHeight);\n }\n return height;\n },\n\n /**\n * @private\n * @return {Number} Left offset\n */\n _getLeftOffset: function() {\n return this.direction === 'ltr' ? -this.width / 2 : this.width / 2;\n },\n\n /**\n * @private\n * @return {Number} Top offset\n */\n _getTopOffset: function() {\n return -this.height / 2;\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {String} method Method name (\"fillText\" or \"strokeText\")\n */\n _renderTextCommon: function(ctx, method) {\n ctx.save();\n var lineHeights = 0, left = this._getLeftOffset(), top = this._getTopOffset();\n for (var i = 0, len = this._textLines.length; i < len; i++) {\n var heightOfLine = this.getHeightOfLine(i),\n maxHeight = heightOfLine / this.lineHeight,\n leftOffset = this._getLineLeftOffset(i);\n this._renderTextLine(\n method,\n ctx,\n this._textLines[i],\n left + leftOffset,\n top + lineHeights + maxHeight,\n i\n );\n lineHeights += heightOfLine;\n }\n ctx.restore();\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderTextFill: function(ctx) {\n if (!this.fill && !this.styleHas('fill')) {\n return;\n }\n\n this._renderTextCommon(ctx, 'fillText');\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderTextStroke: function(ctx) {\n if ((!this.stroke || this.strokeWidth === 0) && this.isEmptyStyles()) {\n return;\n }\n\n if (this.shadow && !this.shadow.affectStroke) {\n this._removeShadow(ctx);\n }\n\n ctx.save();\n this._setLineDash(ctx, this.strokeDashArray);\n ctx.beginPath();\n this._renderTextCommon(ctx, 'strokeText');\n ctx.closePath();\n ctx.restore();\n },\n\n /**\n * @private\n * @param {String} method fillText or strokeText.\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {Array} line Content of the line, splitted in an array by grapheme\n * @param {Number} left\n * @param {Number} top\n * @param {Number} lineIndex\n */\n _renderChars: function(method, ctx, line, left, top, lineIndex) {\n // set proper line offset\n var lineHeight = this.getHeightOfLine(lineIndex),\n isJustify = this.textAlign.indexOf('justify') !== -1,\n actualStyle,\n nextStyle,\n charsToRender = '',\n charBox,\n boxWidth = 0,\n timeToRender,\n path = this.path,\n shortCut = !isJustify && this.charSpacing === 0 && this.isEmptyStyles(lineIndex) && !path,\n isLtr = this.direction === 'ltr', sign = this.direction === 'ltr' ? 1 : -1,\n drawingLeft;\n\n ctx.save();\n top -= lineHeight * this._fontSizeFraction / this.lineHeight;\n if (shortCut) {\n // render all the line in one pass without checking\n // drawingLeft = isLtr ? left : left - this.getLineWidth(lineIndex);\n ctx.canvas.setAttribute('dir', isLtr ? 'ltr' : 'rtl');\n ctx.direction = isLtr ? 'ltr' : 'rtl';\n ctx.textAlign = isLtr ? 'left' : 'right';\n this._renderChar(method, ctx, lineIndex, 0, line.join(''), left, top, lineHeight);\n ctx.restore();\n return;\n }\n for (var i = 0, len = line.length - 1; i <= len; i++) {\n timeToRender = i === len || this.charSpacing || path;\n charsToRender += line[i];\n charBox = this.__charBounds[lineIndex][i];\n if (boxWidth === 0) {\n left += sign * (charBox.kernedWidth - charBox.width);\n boxWidth += charBox.width;\n }\n else {\n boxWidth += charBox.kernedWidth;\n }\n if (isJustify && !timeToRender) {\n if (this._reSpaceAndTab.test(line[i])) {\n timeToRender = true;\n }\n }\n if (!timeToRender) {\n // if we have charSpacing, we render char by char\n actualStyle = actualStyle || this.getCompleteStyleDeclaration(lineIndex, i);\n nextStyle = this.getCompleteStyleDeclaration(lineIndex, i + 1);\n timeToRender = this._hasStyleChanged(actualStyle, nextStyle);\n }\n if (timeToRender) {\n if (path) {\n ctx.save();\n ctx.translate(charBox.renderLeft, charBox.renderTop);\n ctx.rotate(charBox.angle);\n this._renderChar(method, ctx, lineIndex, i, charsToRender, -boxWidth / 2, 0, lineHeight);\n ctx.restore();\n }\n else {\n drawingLeft = left;\n ctx.canvas.setAttribute('dir', isLtr ? 'ltr' : 'rtl');\n ctx.direction = isLtr ? 'ltr' : 'rtl';\n ctx.textAlign = isLtr ? 'left' : 'right';\n this._renderChar(method, ctx, lineIndex, i, charsToRender, drawingLeft, top, lineHeight);\n }\n charsToRender = '';\n actualStyle = nextStyle;\n left += sign * boxWidth;\n boxWidth = 0;\n }\n }\n ctx.restore();\n },\n\n /**\n * This function try to patch the missing gradientTransform on canvas gradients.\n * transforming a context to transform the gradient, is going to transform the stroke too.\n * we want to transform the gradient but not the stroke operation, so we create\n * a transformed gradient on a pattern and then we use the pattern instead of the gradient.\n * this method has drawbacks: is slow, is in low resolution, needs a patch for when the size\n * is limited.\n * @private\n * @param {fabric.Gradient} filler a fabric gradient instance\n * @return {CanvasPattern} a pattern to use as fill/stroke style\n */\n _applyPatternGradientTransformText: function(filler) {\n var pCanvas = fabric.util.createCanvasElement(), pCtx,\n // TODO: verify compatibility with strokeUniform\n width = this.width + this.strokeWidth, height = this.height + this.strokeWidth;\n pCanvas.width = width;\n pCanvas.height = height;\n pCtx = pCanvas.getContext('2d');\n pCtx.beginPath(); pCtx.moveTo(0, 0); pCtx.lineTo(width, 0); pCtx.lineTo(width, height);\n pCtx.lineTo(0, height); pCtx.closePath();\n pCtx.translate(width / 2, height / 2);\n pCtx.fillStyle = filler.toLive(pCtx);\n this._applyPatternGradientTransform(pCtx, filler);\n pCtx.fill();\n return pCtx.createPattern(pCanvas, 'no-repeat');\n },\n\n handleFiller: function(ctx, property, filler) {\n var offsetX, offsetY;\n if (filler.toLive) {\n if (filler.gradientUnits === 'percentage' || filler.gradientTransform || filler.patternTransform) {\n // need to transform gradient in a pattern.\n // this is a slow process. If you are hitting this codepath, and the object\n // is not using caching, you should consider switching it on.\n // we need a canvas as big as the current object caching canvas.\n offsetX = -this.width / 2;\n offsetY = -this.height / 2;\n ctx.translate(offsetX, offsetY);\n ctx[property] = this._applyPatternGradientTransformText(filler);\n return { offsetX: offsetX, offsetY: offsetY };\n }\n else {\n // is a simple gradient or pattern\n ctx[property] = filler.toLive(ctx, this);\n return this._applyPatternGradientTransform(ctx, filler);\n }\n }\n else {\n // is a color\n ctx[property] = filler;\n }\n return { offsetX: 0, offsetY: 0 };\n },\n\n _setStrokeStyles: function(ctx, decl) {\n ctx.lineWidth = decl.strokeWidth;\n ctx.lineCap = this.strokeLineCap;\n ctx.lineDashOffset = this.strokeDashOffset;\n ctx.lineJoin = this.strokeLineJoin;\n ctx.miterLimit = this.strokeMiterLimit;\n return this.handleFiller(ctx, 'strokeStyle', decl.stroke);\n },\n\n _setFillStyles: function(ctx, decl) {\n return this.handleFiller(ctx, 'fillStyle', decl.fill);\n },\n\n /**\n * @private\n * @param {String} method\n * @param {CanvasRenderingContext2D} ctx Context to render on\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @param {String} _char\n * @param {Number} left Left coordinate\n * @param {Number} top Top coordinate\n * @param {Number} lineHeight Height of the line\n */\n _renderChar: function(method, ctx, lineIndex, charIndex, _char, left, top) {\n var decl = this._getStyleDeclaration(lineIndex, charIndex),\n fullDecl = this.getCompleteStyleDeclaration(lineIndex, charIndex),\n shouldFill = method === 'fillText' && fullDecl.fill,\n shouldStroke = method === 'strokeText' && fullDecl.stroke && fullDecl.strokeWidth,\n fillOffsets, strokeOffsets;\n\n if (!shouldStroke && !shouldFill) {\n return;\n }\n ctx.save();\n\n shouldFill && (fillOffsets = this._setFillStyles(ctx, fullDecl));\n shouldStroke && (strokeOffsets = this._setStrokeStyles(ctx, fullDecl));\n\n ctx.font = this._getFontDeclaration(fullDecl);\n\n\n if (decl && decl.textBackgroundColor) {\n this._removeShadow(ctx);\n }\n if (decl && decl.deltaY) {\n top += decl.deltaY;\n }\n shouldFill && ctx.fillText(_char, left - fillOffsets.offsetX, top - fillOffsets.offsetY);\n shouldStroke && ctx.strokeText(_char, left - strokeOffsets.offsetX, top - strokeOffsets.offsetY);\n ctx.restore();\n },\n\n /**\n * Turns the character into a 'superior figure' (i.e. 'superscript')\n * @param {Number} start selection start\n * @param {Number} end selection end\n * @returns {fabric.Text} thisArg\n * @chainable\n */\n setSuperscript: function(start, end) {\n return this._setScript(start, end, this.superscript);\n },\n\n /**\n * Turns the character into an 'inferior figure' (i.e. 'subscript')\n * @param {Number} start selection start\n * @param {Number} end selection end\n * @returns {fabric.Text} thisArg\n * @chainable\n */\n setSubscript: function(start, end) {\n return this._setScript(start, end, this.subscript);\n },\n\n /**\n * Applies 'schema' at given position\n * @private\n * @param {Number} start selection start\n * @param {Number} end selection end\n * @param {Number} schema\n * @returns {fabric.Text} thisArg\n * @chainable\n */\n _setScript: function(start, end, schema) {\n var loc = this.get2DCursorLocation(start, true),\n fontSize = this.getValueOfPropertyAt(loc.lineIndex, loc.charIndex, 'fontSize'),\n dy = this.getValueOfPropertyAt(loc.lineIndex, loc.charIndex, 'deltaY'),\n style = { fontSize: fontSize * schema.size, deltaY: dy + fontSize * schema.baseline };\n this.setSelectionStyles(style, start, end);\n return this;\n },\n\n /**\n * @private\n * @param {Object} prevStyle\n * @param {Object} thisStyle\n */\n _hasStyleChanged: function(prevStyle, thisStyle) {\n return prevStyle.fill !== thisStyle.fill ||\n prevStyle.stroke !== thisStyle.stroke ||\n prevStyle.strokeWidth !== thisStyle.strokeWidth ||\n prevStyle.fontSize !== thisStyle.fontSize ||\n prevStyle.fontFamily !== thisStyle.fontFamily ||\n prevStyle.fontWeight !== thisStyle.fontWeight ||\n prevStyle.fontStyle !== thisStyle.fontStyle ||\n prevStyle.deltaY !== thisStyle.deltaY;\n },\n\n /**\n * @private\n * @param {Object} prevStyle\n * @param {Object} thisStyle\n */\n _hasStyleChangedForSvg: function(prevStyle, thisStyle) {\n return this._hasStyleChanged(prevStyle, thisStyle) ||\n prevStyle.overline !== thisStyle.overline ||\n prevStyle.underline !== thisStyle.underline ||\n prevStyle.linethrough !== thisStyle.linethrough;\n },\n\n /**\n * @private\n * @param {Number} lineIndex index text line\n * @return {Number} Line left offset\n */\n _getLineLeftOffset: function(lineIndex) {\n var lineWidth = this.getLineWidth(lineIndex),\n lineDiff = this.width - lineWidth, textAlign = this.textAlign, direction = this.direction,\n isEndOfWrapping, leftOffset = 0, isEndOfWrapping = this.isEndOfWrapping(lineIndex);\n if (textAlign === 'justify'\n || (textAlign === 'justify-center' && !isEndOfWrapping)\n || (textAlign === 'justify-right' && !isEndOfWrapping)\n || (textAlign === 'justify-left' && !isEndOfWrapping)\n ) {\n return 0;\n }\n if (textAlign === 'center') {\n leftOffset = lineDiff / 2;\n }\n if (textAlign === 'right') {\n leftOffset = lineDiff;\n }\n if (textAlign === 'justify-center') {\n leftOffset = lineDiff / 2;\n }\n if (textAlign === 'justify-right') {\n leftOffset = lineDiff;\n }\n if (direction === 'rtl') {\n leftOffset -= lineDiff;\n }\n return leftOffset;\n },\n\n /**\n * @private\n */\n _clearCache: function() {\n this.__lineWidths = [];\n this.__lineHeights = [];\n this.__charBounds = [];\n },\n\n /**\n * @private\n */\n _shouldClearDimensionCache: function() {\n var shouldClear = this._forceClearCache;\n shouldClear || (shouldClear = this.hasStateChanged('_dimensionAffectingProps'));\n if (shouldClear) {\n this.dirty = true;\n this._forceClearCache = false;\n }\n return shouldClear;\n },\n\n /**\n * Measure a single line given its index. Used to calculate the initial\n * text bounding box. The values are calculated and stored in __lineWidths cache.\n * @private\n * @param {Number} lineIndex line number\n * @return {Number} Line width\n */\n getLineWidth: function(lineIndex) {\n if (this.__lineWidths[lineIndex]) {\n return this.__lineWidths[lineIndex];\n }\n\n var width, line = this._textLines[lineIndex], lineInfo;\n\n if (line === '') {\n width = 0;\n }\n else {\n lineInfo = this.measureLine(lineIndex);\n width = lineInfo.width;\n }\n this.__lineWidths[lineIndex] = width;\n return width;\n },\n\n _getWidthOfCharSpacing: function() {\n if (this.charSpacing !== 0) {\n return this.fontSize * this.charSpacing / 1000;\n }\n return 0;\n },\n\n /**\n * Retrieves the value of property at given character position\n * @param {Number} lineIndex the line number\n * @param {Number} charIndex the character number\n * @param {String} property the property name\n * @returns the value of 'property'\n */\n getValueOfPropertyAt: function(lineIndex, charIndex, property) {\n var charStyle = this._getStyleDeclaration(lineIndex, charIndex);\n if (charStyle && typeof charStyle[property] !== 'undefined') {\n return charStyle[property];\n }\n return this[property];\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _renderTextDecoration: function(ctx, type) {\n if (!this[type] && !this.styleHas(type)) {\n return;\n }\n var heightOfLine, size, _size,\n lineLeftOffset, dy, _dy,\n line, lastDecoration,\n leftOffset = this._getLeftOffset(),\n topOffset = this._getTopOffset(), top,\n boxStart, boxWidth, charBox, currentDecoration,\n maxHeight, currentFill, lastFill, path = this.path,\n charSpacing = this._getWidthOfCharSpacing(),\n offsetY = this.offsets[type];\n\n for (var i = 0, len = this._textLines.length; i < len; i++) {\n heightOfLine = this.getHeightOfLine(i);\n if (!this[type] && !this.styleHas(type, i)) {\n topOffset += heightOfLine;\n continue;\n }\n line = this._textLines[i];\n maxHeight = heightOfLine / this.lineHeight;\n lineLeftOffset = this._getLineLeftOffset(i);\n boxStart = 0;\n boxWidth = 0;\n lastDecoration = this.getValueOfPropertyAt(i, 0, type);\n lastFill = this.getValueOfPropertyAt(i, 0, 'fill');\n top = topOffset + maxHeight * (1 - this._fontSizeFraction);\n size = this.getHeightOfChar(i, 0);\n dy = this.getValueOfPropertyAt(i, 0, 'deltaY');\n for (var j = 0, jlen = line.length; j < jlen; j++) {\n charBox = this.__charBounds[i][j];\n currentDecoration = this.getValueOfPropertyAt(i, j, type);\n currentFill = this.getValueOfPropertyAt(i, j, 'fill');\n _size = this.getHeightOfChar(i, j);\n _dy = this.getValueOfPropertyAt(i, j, 'deltaY');\n if (path && currentDecoration && currentFill) {\n ctx.save();\n ctx.fillStyle = lastFill;\n ctx.translate(charBox.renderLeft, charBox.renderTop);\n ctx.rotate(charBox.angle);\n ctx.fillRect(\n -charBox.kernedWidth / 2,\n offsetY * _size + _dy,\n charBox.kernedWidth,\n this.fontSize / 15\n );\n ctx.restore();\n }\n else if (\n (currentDecoration !== lastDecoration || currentFill !== lastFill || _size !== size || _dy !== dy)\n && boxWidth > 0\n ) {\n var drawStart = leftOffset + lineLeftOffset + boxStart;\n if (this.direction === 'rtl') {\n drawStart = this.width - drawStart - boxWidth;\n }\n if (lastDecoration && lastFill) {\n ctx.fillStyle = lastFill;\n ctx.fillRect(\n drawStart,\n top + offsetY * size + dy,\n boxWidth,\n this.fontSize / 15\n );\n }\n boxStart = charBox.left;\n boxWidth = charBox.width;\n lastDecoration = currentDecoration;\n lastFill = currentFill;\n size = _size;\n dy = _dy;\n }\n else {\n boxWidth += charBox.kernedWidth;\n }\n }\n var drawStart = leftOffset + lineLeftOffset + boxStart;\n if (this.direction === 'rtl') {\n drawStart = this.width - drawStart - boxWidth;\n }\n ctx.fillStyle = currentFill;\n currentDecoration && currentFill && ctx.fillRect(\n drawStart,\n top + offsetY * size + dy,\n boxWidth - charSpacing,\n this.fontSize / 15\n );\n topOffset += heightOfLine;\n }\n // if there is text background color no\n // other shadows should be casted\n this._removeShadow(ctx);\n },\n\n /**\n * return font declaration string for canvas context\n * @param {Object} [styleObject] object\n * @returns {String} font declaration formatted for canvas context.\n */\n _getFontDeclaration: function(styleObject, forMeasuring) {\n var style = styleObject || this, family = this.fontFamily,\n fontIsGeneric = fabric.Text.genericFonts.indexOf(family.toLowerCase()) > -1;\n var fontFamily = family === undefined ||\n family.indexOf('\\'') > -1 || family.indexOf(',') > -1 ||\n family.indexOf('\"') > -1 || fontIsGeneric\n ? style.fontFamily : '\"' + style.fontFamily + '\"';\n return [\n // node-canvas needs \"weight style\", while browsers need \"style weight\"\n // verify if this can be fixed in JSDOM\n (fabric.isLikelyNode ? style.fontWeight : style.fontStyle),\n (fabric.isLikelyNode ? style.fontStyle : style.fontWeight),\n forMeasuring ? this.CACHE_FONT_SIZE + 'px' : style.fontSize + 'px',\n fontFamily\n ].join(' ');\n },\n\n /**\n * Renders text instance on a specified context\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n render: function(ctx) {\n // do not render if object is not visible\n if (!this.visible) {\n return;\n }\n if (this.canvas && this.canvas.skipOffscreen && !this.group && !this.isOnScreen()) {\n return;\n }\n if (this._shouldClearDimensionCache()) {\n this.initDimensions();\n }\n this.callSuper('render', ctx);\n },\n\n /**\n * Returns the text as an array of lines.\n * @param {String} text text to split\n * @returns {Array} Lines in the text\n */\n _splitTextIntoLines: function(text) {\n var lines = text.split(this._reNewline),\n newLines = new Array(lines.length),\n newLine = ['\\n'],\n newText = [];\n for (var i = 0; i < lines.length; i++) {\n newLines[i] = fabric.util.string.graphemeSplit(lines[i]);\n newText = newText.concat(newLines[i], newLine);\n }\n newText.pop();\n return { _unwrappedLines: newLines, lines: lines, graphemeText: newText, graphemeLines: newLines };\n },\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} Object representation of an instance\n */\n toObject: function(propertiesToInclude) {\n var allProperties = additionalProps.concat(propertiesToInclude);\n var obj = this.callSuper('toObject', allProperties);\n // styles will be overridden with a properly cloned structure\n obj.styles = clone(this.styles, true);\n if (obj.path) {\n obj.path = this.path.toObject();\n }\n return obj;\n },\n\n /**\n * Sets property to a given value. When changing position/dimension -related properties (left, top, scale, angle, etc.) `set` does not update position of object's borders/controls. If you need to update those, call `setCoords()`.\n * @param {String|Object} key Property name or object (if object, iterate over the object properties)\n * @param {Object|Function} value Property value (if function, the value is passed into it and its return value is used as a new one)\n * @return {fabric.Object} thisArg\n * @chainable\n */\n set: function(key, value) {\n this.callSuper('set', key, value);\n var needsDims = false;\n var isAddingPath = false;\n if (typeof key === 'object') {\n for (var _key in key) {\n if (_key === 'path') {\n this.setPathInfo();\n }\n needsDims = needsDims || this._dimensionAffectingProps.indexOf(_key) !== -1;\n isAddingPath = isAddingPath || _key === 'path';\n }\n }\n else {\n needsDims = this._dimensionAffectingProps.indexOf(key) !== -1;\n isAddingPath = key === 'path';\n }\n if (isAddingPath) {\n this.setPathInfo();\n }\n if (needsDims) {\n this.initDimensions();\n this.setCoords();\n }\n return this;\n },\n\n /**\n * Returns complexity of an instance\n * @return {Number} complexity\n */\n complexity: function() {\n return 1;\n }\n });\n\n /* _FROM_SVG_START_ */\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link fabric.Text.fromElement})\n * @static\n * @memberOf fabric.Text\n * @see: http://www.w3.org/TR/SVG/text.html#TextElement\n */\n fabric.Text.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat(\n 'x y dx dy font-family font-style font-weight font-size letter-spacing text-decoration text-anchor'.split(' '));\n\n /**\n * Default SVG font size\n * @static\n * @memberOf fabric.Text\n */\n fabric.Text.DEFAULT_SVG_FONT_SIZE = 16;\n\n /**\n * Returns fabric.Text instance from an SVG element (not yet implemented)\n * @static\n * @memberOf fabric.Text\n * @param {SVGElement} element Element to parse\n * @param {Function} callback callback function invoked after parsing\n * @param {Object} [options] Options object\n */\n fabric.Text.fromElement = function(element, callback, options) {\n if (!element) {\n return callback(null);\n }\n\n var parsedAttributes = fabric.parseAttributes(element, fabric.Text.ATTRIBUTE_NAMES),\n parsedAnchor = parsedAttributes.textAnchor || 'left';\n options = fabric.util.object.extend((options ? clone(options) : { }), parsedAttributes);\n\n options.top = options.top || 0;\n options.left = options.left || 0;\n if (parsedAttributes.textDecoration) {\n var textDecoration = parsedAttributes.textDecoration;\n if (textDecoration.indexOf('underline') !== -1) {\n options.underline = true;\n }\n if (textDecoration.indexOf('overline') !== -1) {\n options.overline = true;\n }\n if (textDecoration.indexOf('line-through') !== -1) {\n options.linethrough = true;\n }\n delete options.textDecoration;\n }\n if ('dx' in parsedAttributes) {\n options.left += parsedAttributes.dx;\n }\n if ('dy' in parsedAttributes) {\n options.top += parsedAttributes.dy;\n }\n if (!('fontSize' in options)) {\n options.fontSize = fabric.Text.DEFAULT_SVG_FONT_SIZE;\n }\n\n var textContent = '';\n\n // The XML is not properly parsed in IE9 so a workaround to get\n // textContent is through firstChild.data. Another workaround would be\n // to convert XML loaded from a file to be converted using DOMParser (same way loadSVGFromString() does)\n if (!('textContent' in element)) {\n if ('firstChild' in element && element.firstChild !== null) {\n if ('data' in element.firstChild && element.firstChild.data !== null) {\n textContent = element.firstChild.data;\n }\n }\n }\n else {\n textContent = element.textContent;\n }\n\n textContent = textContent.replace(/^\\s+|\\s+$|\\n+/g, '').replace(/\\s+/g, ' ');\n var originalStrokeWidth = options.strokeWidth;\n options.strokeWidth = 0;\n\n var text = new fabric.Text(textContent, options),\n textHeightScaleFactor = text.getScaledHeight() / text.height,\n lineHeightDiff = (text.height + text.strokeWidth) * text.lineHeight - text.height,\n scaledDiff = lineHeightDiff * textHeightScaleFactor,\n textHeight = text.getScaledHeight() + scaledDiff,\n offX = 0;\n /*\n Adjust positioning:\n x/y attributes in SVG correspond to the bottom-left corner of text bounding box\n fabric output by default at top, left.\n */\n if (parsedAnchor === 'center') {\n offX = text.getScaledWidth() / 2;\n }\n if (parsedAnchor === 'right') {\n offX = text.getScaledWidth();\n }\n text.set({\n left: text.left - offX,\n top: text.top - (textHeight - text.fontSize * (0.07 + text._fontSizeFraction)) / text.lineHeight,\n strokeWidth: typeof originalStrokeWidth !== 'undefined' ? originalStrokeWidth : 1,\n });\n callback(text);\n };\n /* _FROM_SVG_END_ */\n\n /**\n * Returns fabric.Text instance from an object representation\n * @static\n * @memberOf fabric.Text\n * @param {Object} object plain js Object to create an instance from\n * @param {Function} [callback] Callback to invoke when an fabric.Text instance is created\n */\n fabric.Text.fromObject = function(object, callback) {\n var objectCopy = clone(object), path = object.path;\n delete objectCopy.path;\n return fabric.Object._fromObject('Text', objectCopy, function(textInstance) {\n if (path) {\n fabric.Object._fromObject('Path', path, function(pathInstance) {\n textInstance.set('path', pathInstance);\n callback(textInstance);\n }, 'path');\n }\n else {\n callback(textInstance);\n }\n }, 'text');\n };\n\n fabric.Text.genericFonts = ['sans-serif', 'serif', 'cursive', 'fantasy', 'monospace'];\n\n fabric.util.createAccessors && fabric.util.createAccessors(fabric.Text);\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function() {\n fabric.util.object.extend(fabric.Text.prototype, /** @lends fabric.Text.prototype */ {\n /**\n * Returns true if object has no styling or no styling in a line\n * @param {Number} lineIndex , lineIndex is on wrapped lines.\n * @return {Boolean}\n */\n isEmptyStyles: function(lineIndex) {\n if (!this.styles) {\n return true;\n }\n if (typeof lineIndex !== 'undefined' && !this.styles[lineIndex]) {\n return true;\n }\n var obj = typeof lineIndex === 'undefined' ? this.styles : { line: this.styles[lineIndex] };\n for (var p1 in obj) {\n for (var p2 in obj[p1]) {\n // eslint-disable-next-line no-unused-vars\n for (var p3 in obj[p1][p2]) {\n return false;\n }\n }\n }\n return true;\n },\n\n /**\n * Returns true if object has a style property or has it ina specified line\n * This function is used to detect if a text will use a particular property or not.\n * @param {String} property to check for\n * @param {Number} lineIndex to check the style on\n * @return {Boolean}\n */\n styleHas: function(property, lineIndex) {\n if (!this.styles || !property || property === '') {\n return false;\n }\n if (typeof lineIndex !== 'undefined' && !this.styles[lineIndex]) {\n return false;\n }\n var obj = typeof lineIndex === 'undefined' ? this.styles : { 0: this.styles[lineIndex] };\n // eslint-disable-next-line\n for (var p1 in obj) {\n // eslint-disable-next-line\n for (var p2 in obj[p1]) {\n if (typeof obj[p1][p2][property] !== 'undefined') {\n return true;\n }\n }\n }\n return false;\n },\n\n /**\n * Check if characters in a text have a value for a property\n * whose value matches the textbox's value for that property. If so,\n * the character-level property is deleted. If the character\n * has no other properties, then it is also deleted. Finally,\n * if the line containing that character has no other characters\n * then it also is deleted.\n *\n * @param {string} property The property to compare between characters and text.\n */\n cleanStyle: function(property) {\n if (!this.styles || !property || property === '') {\n return false;\n }\n var obj = this.styles, stylesCount = 0, letterCount, stylePropertyValue,\n allStyleObjectPropertiesMatch = true, graphemeCount = 0, styleObject;\n // eslint-disable-next-line\n for (var p1 in obj) {\n letterCount = 0;\n // eslint-disable-next-line\n for (var p2 in obj[p1]) {\n var styleObject = obj[p1][p2],\n stylePropertyHasBeenSet = styleObject.hasOwnProperty(property);\n\n stylesCount++;\n\n if (stylePropertyHasBeenSet) {\n if (!stylePropertyValue) {\n stylePropertyValue = styleObject[property];\n }\n else if (styleObject[property] !== stylePropertyValue) {\n allStyleObjectPropertiesMatch = false;\n }\n\n if (styleObject[property] === this[property]) {\n delete styleObject[property];\n }\n }\n else {\n allStyleObjectPropertiesMatch = false;\n }\n\n if (Object.keys(styleObject).length !== 0) {\n letterCount++;\n }\n else {\n delete obj[p1][p2];\n }\n }\n\n if (letterCount === 0) {\n delete obj[p1];\n }\n }\n // if every grapheme has the same style set then\n // delete those styles and set it on the parent\n for (var i = 0; i < this._textLines.length; i++) {\n graphemeCount += this._textLines[i].length;\n }\n if (allStyleObjectPropertiesMatch && stylesCount === graphemeCount) {\n this[property] = stylePropertyValue;\n this.removeStyle(property);\n }\n },\n\n /**\n * Remove a style property or properties from all individual character styles\n * in a text object. Deletes the character style object if it contains no other style\n * props. Deletes a line style object if it contains no other character styles.\n *\n * @param {String} props The property to remove from character styles.\n */\n removeStyle: function(property) {\n if (!this.styles || !property || property === '') {\n return;\n }\n var obj = this.styles, line, lineNum, charNum;\n for (lineNum in obj) {\n line = obj[lineNum];\n for (charNum in line) {\n delete line[charNum][property];\n if (Object.keys(line[charNum]).length === 0) {\n delete line[charNum];\n }\n }\n if (Object.keys(line).length === 0) {\n delete obj[lineNum];\n }\n }\n },\n\n /**\n * @private\n */\n _extendStyles: function(index, styles) {\n var loc = this.get2DCursorLocation(index);\n\n if (!this._getLineStyle(loc.lineIndex)) {\n this._setLineStyle(loc.lineIndex);\n }\n\n if (!this._getStyleDeclaration(loc.lineIndex, loc.charIndex)) {\n this._setStyleDeclaration(loc.lineIndex, loc.charIndex, {});\n }\n\n fabric.util.object.extend(this._getStyleDeclaration(loc.lineIndex, loc.charIndex), styles);\n },\n\n /**\n * Returns 2d representation (lineIndex and charIndex) of cursor (or selection start)\n * @param {Number} [selectionStart] Optional index. When not given, current selectionStart is used.\n * @param {Boolean} [skipWrapping] consider the location for unwrapped lines. useful to manage styles.\n */\n get2DCursorLocation: function(selectionStart, skipWrapping) {\n if (typeof selectionStart === 'undefined') {\n selectionStart = this.selectionStart;\n }\n var lines = skipWrapping ? this._unwrappedTextLines : this._textLines,\n len = lines.length;\n for (var i = 0; i < len; i++) {\n if (selectionStart <= lines[i].length) {\n return {\n lineIndex: i,\n charIndex: selectionStart\n };\n }\n selectionStart -= lines[i].length + this.missingNewlineOffset(i);\n }\n return {\n lineIndex: i - 1,\n charIndex: lines[i - 1].length < selectionStart ? lines[i - 1].length : selectionStart\n };\n },\n\n /**\n * Gets style of a current selection/cursor (at the start position)\n * if startIndex or endIndex are not provided, selectionStart or selectionEnd will be used.\n * @param {Number} [startIndex] Start index to get styles at\n * @param {Number} [endIndex] End index to get styles at, if not specified selectionEnd or startIndex + 1\n * @param {Boolean} [complete] get full style or not\n * @return {Array} styles an array with one, zero or more Style objects\n */\n getSelectionStyles: function(startIndex, endIndex, complete) {\n if (typeof startIndex === 'undefined') {\n startIndex = this.selectionStart || 0;\n }\n if (typeof endIndex === 'undefined') {\n endIndex = this.selectionEnd || startIndex;\n }\n var styles = [];\n for (var i = startIndex; i < endIndex; i++) {\n styles.push(this.getStyleAtPosition(i, complete));\n }\n return styles;\n },\n\n /**\n * Gets style of a current selection/cursor position\n * @param {Number} position to get styles at\n * @param {Boolean} [complete] full style if true\n * @return {Object} style Style object at a specified index\n * @private\n */\n getStyleAtPosition: function(position, complete) {\n var loc = this.get2DCursorLocation(position),\n style = complete ? this.getCompleteStyleDeclaration(loc.lineIndex, loc.charIndex) :\n this._getStyleDeclaration(loc.lineIndex, loc.charIndex);\n return style || {};\n },\n\n /**\n * Sets style of a current selection, if no selection exist, do not set anything.\n * @param {Object} [styles] Styles object\n * @param {Number} [startIndex] Start index to get styles at\n * @param {Number} [endIndex] End index to get styles at, if not specified selectionEnd or startIndex + 1\n * @return {fabric.IText} thisArg\n * @chainable\n */\n setSelectionStyles: function(styles, startIndex, endIndex) {\n if (typeof startIndex === 'undefined') {\n startIndex = this.selectionStart || 0;\n }\n if (typeof endIndex === 'undefined') {\n endIndex = this.selectionEnd || startIndex;\n }\n for (var i = startIndex; i < endIndex; i++) {\n this._extendStyles(i, styles);\n }\n /* not included in _extendStyles to avoid clearing cache more than once */\n this._forceClearCache = true;\n return this;\n },\n\n /**\n * get the reference, not a clone, of the style object for a given character\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @return {Object} style object\n */\n _getStyleDeclaration: function(lineIndex, charIndex) {\n var lineStyle = this.styles && this.styles[lineIndex];\n if (!lineStyle) {\n return null;\n }\n return lineStyle[charIndex];\n },\n\n /**\n * return a new object that contains all the style property for a character\n * the object returned is newly created\n * @param {Number} lineIndex of the line where the character is\n * @param {Number} charIndex position of the character on the line\n * @return {Object} style object\n */\n getCompleteStyleDeclaration: function(lineIndex, charIndex) {\n var style = this._getStyleDeclaration(lineIndex, charIndex) || { },\n styleObject = { }, prop;\n for (var i = 0; i < this._styleProperties.length; i++) {\n prop = this._styleProperties[i];\n styleObject[prop] = typeof style[prop] === 'undefined' ? this[prop] : style[prop];\n }\n return styleObject;\n },\n\n /**\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @param {Object} style\n * @private\n */\n _setStyleDeclaration: function(lineIndex, charIndex, style) {\n this.styles[lineIndex][charIndex] = style;\n },\n\n /**\n *\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @private\n */\n _deleteStyleDeclaration: function(lineIndex, charIndex) {\n delete this.styles[lineIndex][charIndex];\n },\n\n /**\n * @param {Number} lineIndex\n * @return {Boolean} if the line exists or not\n * @private\n */\n _getLineStyle: function(lineIndex) {\n return !!this.styles[lineIndex];\n },\n\n /**\n * Set the line style to an empty object so that is initialized\n * @param {Number} lineIndex\n * @private\n */\n _setLineStyle: function(lineIndex) {\n this.styles[lineIndex] = {};\n },\n\n /**\n * @param {Number} lineIndex\n * @private\n */\n _deleteLineStyle: function(lineIndex) {\n delete this.styles[lineIndex];\n }\n });\n})();\n\n\n(function() {\n\n function parseDecoration(object) {\n if (object.textDecoration) {\n object.textDecoration.indexOf('underline') > -1 && (object.underline = true);\n object.textDecoration.indexOf('line-through') > -1 && (object.linethrough = true);\n object.textDecoration.indexOf('overline') > -1 && (object.overline = true);\n delete object.textDecoration;\n }\n }\n\n /**\n * IText class (introduced in v1.4) Events are also fired with \"text:\"\n * prefix when observing canvas.\n * @class fabric.IText\n * @extends fabric.Text\n * @mixes fabric.Observable\n *\n * @fires changed\n * @fires selection:changed\n * @fires editing:entered\n * @fires editing:exited\n *\n * @return {fabric.IText} thisArg\n * @see {@link fabric.IText#initialize} for constructor definition\n *\n *

Supported key combinations:

\n *
\n   *   Move cursor:                    left, right, up, down\n   *   Select character:               shift + left, shift + right\n   *   Select text vertically:         shift + up, shift + down\n   *   Move cursor by word:            alt + left, alt + right\n   *   Select words:                   shift + alt + left, shift + alt + right\n   *   Move cursor to line start/end:  cmd + left, cmd + right or home, end\n   *   Select till start/end of line:  cmd + shift + left, cmd + shift + right or shift + home, shift + end\n   *   Jump to start/end of text:      cmd + up, cmd + down\n   *   Select till start/end of text:  cmd + shift + up, cmd + shift + down or shift + pgUp, shift + pgDown\n   *   Delete character:               backspace\n   *   Delete word:                    alt + backspace\n   *   Delete line:                    cmd + backspace\n   *   Forward delete:                 delete\n   *   Copy text:                      ctrl/cmd + c\n   *   Paste text:                     ctrl/cmd + v\n   *   Cut text:                       ctrl/cmd + x\n   *   Select entire text:             ctrl/cmd + a\n   *   Quit editing                    tab or esc\n   * 
\n *\n *

Supported mouse/touch combination

\n *
\n   *   Position cursor:                click/touch\n   *   Create selection:               click/touch & drag\n   *   Create selection:               click & shift + click\n   *   Select word:                    double click\n   *   Select line:                    triple click\n   * 
\n */\n fabric.IText = fabric.util.createClass(fabric.Text, fabric.Observable, /** @lends fabric.IText.prototype */ {\n\n /**\n * Type of an object\n * @type String\n * @default\n */\n type: 'i-text',\n\n /**\n * Index where text selection starts (or where cursor is when there is no selection)\n * @type Number\n * @default\n */\n selectionStart: 0,\n\n /**\n * Index where text selection ends\n * @type Number\n * @default\n */\n selectionEnd: 0,\n\n /**\n * Color of text selection\n * @type String\n * @default\n */\n selectionColor: 'rgba(17,119,255,0.3)',\n\n /**\n * Indicates whether text is in editing mode\n * @type Boolean\n * @default\n */\n isEditing: false,\n\n /**\n * Indicates whether a text can be edited\n * @type Boolean\n * @default\n */\n editable: true,\n\n /**\n * Border color of text object while it's in editing mode\n * @type String\n * @default\n */\n editingBorderColor: 'rgba(102,153,255,0.25)',\n\n /**\n * Width of cursor (in px)\n * @type Number\n * @default\n */\n cursorWidth: 2,\n\n /**\n * Color of text cursor color in editing mode.\n * if not set (default) will take color from the text.\n * if set to a color value that fabric can understand, it will\n * be used instead of the color of the text at the current position.\n * @type String\n * @default\n */\n cursorColor: '',\n\n /**\n * Delay between cursor blink (in ms)\n * @type Number\n * @default\n */\n cursorDelay: 1000,\n\n /**\n * Duration of cursor fadein (in ms)\n * @type Number\n * @default\n */\n cursorDuration: 600,\n\n /**\n * Indicates whether internal text char widths can be cached\n * @type Boolean\n * @default\n */\n caching: true,\n\n /**\n * DOM container to append the hiddenTextarea.\n * An alternative to attaching to the document.body.\n * Useful to reduce laggish redraw of the full document.body tree and\n * also with modals event capturing that won't let the textarea take focus.\n * @type HTMLElement\n * @default\n */\n hiddenTextareaContainer: null,\n\n /**\n * @private\n */\n _reSpace: /\\s|\\n/,\n\n /**\n * @private\n */\n _currentCursorOpacity: 0,\n\n /**\n * @private\n */\n _selectionDirection: null,\n\n /**\n * @private\n */\n _abortCursorAnimation: false,\n\n /**\n * @private\n */\n __widthOfSpace: [],\n\n /**\n * Helps determining when the text is in composition, so that the cursor\n * rendering is altered.\n */\n inCompositionMode: false,\n\n /**\n * Constructor\n * @param {String} text Text string\n * @param {Object} [options] Options object\n * @return {fabric.IText} thisArg\n */\n initialize: function(text, options) {\n this.callSuper('initialize', text, options);\n this.initBehavior();\n },\n\n /**\n * Sets selection start (left boundary of a selection)\n * @param {Number} index Index to set selection start to\n */\n setSelectionStart: function(index) {\n index = Math.max(index, 0);\n this._updateAndFire('selectionStart', index);\n },\n\n /**\n * Sets selection end (right boundary of a selection)\n * @param {Number} index Index to set selection end to\n */\n setSelectionEnd: function(index) {\n index = Math.min(index, this.text.length);\n this._updateAndFire('selectionEnd', index);\n },\n\n /**\n * @private\n * @param {String} property 'selectionStart' or 'selectionEnd'\n * @param {Number} index new position of property\n */\n _updateAndFire: function(property, index) {\n if (this[property] !== index) {\n this._fireSelectionChanged();\n this[property] = index;\n }\n this._updateTextarea();\n },\n\n /**\n * Fires the even of selection changed\n * @private\n */\n _fireSelectionChanged: function() {\n this.fire('selection:changed');\n this.canvas && this.canvas.fire('text:selection:changed', { target: this });\n },\n\n /**\n * Initialize text dimensions. Render all text on given context\n * or on a offscreen canvas to get the text width with measureText.\n * Updates this.width and this.height with the proper values.\n * Does not return dimensions.\n * @private\n */\n initDimensions: function() {\n this.isEditing && this.initDelayedCursor();\n this.clearContextTop();\n this.callSuper('initDimensions');\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n render: function(ctx) {\n this.clearContextTop();\n this.callSuper('render', ctx);\n // clear the cursorOffsetCache, so we ensure to calculate once per renderCursor\n // the correct position but not at every cursor animation.\n this.cursorOffsetCache = { };\n this.renderCursorOrSelection();\n },\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render: function(ctx) {\n this.callSuper('_render', ctx);\n },\n\n /**\n * Prepare and clean the contextTop\n */\n clearContextTop: function(skipRestore) {\n if (!this.isEditing || !this.canvas || !this.canvas.contextTop) {\n return;\n }\n var ctx = this.canvas.contextTop, v = this.canvas.viewportTransform;\n ctx.save();\n ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]);\n this.transform(ctx);\n this._clearTextArea(ctx);\n skipRestore || ctx.restore();\n },\n /**\n * Renders cursor or selection (depending on what exists)\n * it does on the contextTop. If contextTop is not available, do nothing.\n */\n renderCursorOrSelection: function() {\n if (!this.isEditing || !this.canvas || !this.canvas.contextTop) {\n return;\n }\n var boundaries = this._getCursorBoundaries(),\n ctx = this.canvas.contextTop;\n this.clearContextTop(true);\n if (this.selectionStart === this.selectionEnd) {\n this.renderCursor(boundaries, ctx);\n }\n else {\n this.renderSelection(boundaries, ctx);\n }\n ctx.restore();\n },\n\n _clearTextArea: function(ctx) {\n // we add 4 pixel, to be sure to do not leave any pixel out\n var width = this.width + 4, height = this.height + 4;\n ctx.clearRect(-width / 2, -height / 2, width, height);\n },\n\n /**\n * Returns cursor boundaries (left, top, leftOffset, topOffset)\n * @private\n * @param {Array} chars Array of characters\n * @param {String} typeOfBoundaries\n */\n _getCursorBoundaries: function(position) {\n\n // left/top are left/top of entire text box\n // leftOffset/topOffset are offset from that left/top point of a text box\n\n if (typeof position === 'undefined') {\n position = this.selectionStart;\n }\n\n var left = this._getLeftOffset(),\n top = this._getTopOffset(),\n offsets = this._getCursorBoundariesOffsets(position);\n return {\n left: left,\n top: top,\n leftOffset: offsets.left,\n topOffset: offsets.top\n };\n },\n\n /**\n * @private\n */\n _getCursorBoundariesOffsets: function(position) {\n if (this.cursorOffsetCache && 'top' in this.cursorOffsetCache) {\n return this.cursorOffsetCache;\n }\n var lineLeftOffset,\n lineIndex,\n charIndex,\n topOffset = 0,\n leftOffset = 0,\n boundaries,\n cursorPosition = this.get2DCursorLocation(position);\n charIndex = cursorPosition.charIndex;\n lineIndex = cursorPosition.lineIndex;\n for (var i = 0; i < lineIndex; i++) {\n topOffset += this.getHeightOfLine(i);\n }\n lineLeftOffset = this._getLineLeftOffset(lineIndex);\n var bound = this.__charBounds[lineIndex][charIndex];\n bound && (leftOffset = bound.left);\n if (this.charSpacing !== 0 && charIndex === this._textLines[lineIndex].length) {\n leftOffset -= this._getWidthOfCharSpacing();\n }\n boundaries = {\n top: topOffset,\n left: lineLeftOffset + (leftOffset > 0 ? leftOffset : 0),\n };\n if (this.direction === 'rtl') {\n boundaries.left *= -1;\n }\n this.cursorOffsetCache = boundaries;\n return this.cursorOffsetCache;\n },\n\n /**\n * Renders cursor\n * @param {Object} boundaries\n * @param {CanvasRenderingContext2D} ctx transformed context to draw on\n */\n renderCursor: function(boundaries, ctx) {\n var cursorLocation = this.get2DCursorLocation(),\n lineIndex = cursorLocation.lineIndex,\n charIndex = cursorLocation.charIndex > 0 ? cursorLocation.charIndex - 1 : 0,\n charHeight = this.getValueOfPropertyAt(lineIndex, charIndex, 'fontSize'),\n multiplier = this.scaleX * this.canvas.getZoom(),\n cursorWidth = this.cursorWidth / multiplier,\n topOffset = boundaries.topOffset,\n dy = this.getValueOfPropertyAt(lineIndex, charIndex, 'deltaY');\n topOffset += (1 - this._fontSizeFraction) * this.getHeightOfLine(lineIndex) / this.lineHeight\n - charHeight * (1 - this._fontSizeFraction);\n\n if (this.inCompositionMode) {\n this.renderSelection(boundaries, ctx);\n }\n ctx.fillStyle = this.cursorColor || this.getValueOfPropertyAt(lineIndex, charIndex, 'fill');\n ctx.globalAlpha = this.__isMousedown ? 1 : this._currentCursorOpacity;\n ctx.fillRect(\n boundaries.left + boundaries.leftOffset - cursorWidth / 2,\n topOffset + boundaries.top + dy,\n cursorWidth,\n charHeight);\n },\n\n /**\n * Renders text selection\n * @param {Object} boundaries Object with left/top/leftOffset/topOffset\n * @param {CanvasRenderingContext2D} ctx transformed context to draw on\n */\n renderSelection: function(boundaries, ctx) {\n\n var selectionStart = this.inCompositionMode ? this.hiddenTextarea.selectionStart : this.selectionStart,\n selectionEnd = this.inCompositionMode ? this.hiddenTextarea.selectionEnd : this.selectionEnd,\n isJustify = this.textAlign.indexOf('justify') !== -1,\n start = this.get2DCursorLocation(selectionStart),\n end = this.get2DCursorLocation(selectionEnd),\n startLine = start.lineIndex,\n endLine = end.lineIndex,\n startChar = start.charIndex < 0 ? 0 : start.charIndex,\n endChar = end.charIndex < 0 ? 0 : end.charIndex;\n\n for (var i = startLine; i <= endLine; i++) {\n var lineOffset = this._getLineLeftOffset(i) || 0,\n lineHeight = this.getHeightOfLine(i),\n realLineHeight = 0, boxStart = 0, boxEnd = 0;\n\n if (i === startLine) {\n boxStart = this.__charBounds[startLine][startChar].left;\n }\n if (i >= startLine && i < endLine) {\n boxEnd = isJustify && !this.isEndOfWrapping(i) ? this.width : this.getLineWidth(i) || 5; // WTF is this 5?\n }\n else if (i === endLine) {\n if (endChar === 0) {\n boxEnd = this.__charBounds[endLine][endChar].left;\n }\n else {\n var charSpacing = this._getWidthOfCharSpacing();\n boxEnd = this.__charBounds[endLine][endChar - 1].left\n + this.__charBounds[endLine][endChar - 1].width - charSpacing;\n }\n }\n realLineHeight = lineHeight;\n if (this.lineHeight < 1 || (i === endLine && this.lineHeight > 1)) {\n lineHeight /= this.lineHeight;\n }\n var drawStart = boundaries.left + lineOffset + boxStart,\n drawWidth = boxEnd - boxStart,\n drawHeight = lineHeight, extraTop = 0;\n if (this.inCompositionMode) {\n ctx.fillStyle = this.compositionColor || 'black';\n drawHeight = 1;\n extraTop = lineHeight;\n }\n else {\n ctx.fillStyle = this.selectionColor;\n }\n if (this.direction === 'rtl') {\n drawStart = this.width - drawStart - drawWidth;\n }\n ctx.fillRect(\n drawStart,\n boundaries.top + boundaries.topOffset + extraTop,\n drawWidth,\n drawHeight);\n boundaries.topOffset += realLineHeight;\n }\n },\n\n /**\n * High level function to know the height of the cursor.\n * the currentChar is the one that precedes the cursor\n * Returns fontSize of char at the current cursor\n * Unused from the library, is for the end user\n * @return {Number} Character font size\n */\n getCurrentCharFontSize: function() {\n var cp = this._getCurrentCharIndex();\n return this.getValueOfPropertyAt(cp.l, cp.c, 'fontSize');\n },\n\n /**\n * High level function to know the color of the cursor.\n * the currentChar is the one that precedes the cursor\n * Returns color (fill) of char at the current cursor\n * if the text object has a pattern or gradient for filler, it will return that.\n * Unused by the library, is for the end user\n * @return {String | fabric.Gradient | fabric.Pattern} Character color (fill)\n */\n getCurrentCharColor: function() {\n var cp = this._getCurrentCharIndex();\n return this.getValueOfPropertyAt(cp.l, cp.c, 'fill');\n },\n\n /**\n * Returns the cursor position for the getCurrent.. functions\n * @private\n */\n _getCurrentCharIndex: function() {\n var cursorPosition = this.get2DCursorLocation(this.selectionStart, true),\n charIndex = cursorPosition.charIndex > 0 ? cursorPosition.charIndex - 1 : 0;\n return { l: cursorPosition.lineIndex, c: charIndex };\n }\n });\n\n /**\n * Returns fabric.IText instance from an object representation\n * @static\n * @memberOf fabric.IText\n * @param {Object} object Object to create an instance from\n * @param {function} [callback] invoked with new instance as argument\n */\n fabric.IText.fromObject = function(object, callback) {\n parseDecoration(object);\n if (object.styles) {\n for (var i in object.styles) {\n for (var j in object.styles[i]) {\n parseDecoration(object.styles[i][j]);\n }\n }\n }\n fabric.Object._fromObject('IText', object, callback, 'text');\n };\n})();\n\n\n(function() {\n\n var clone = fabric.util.object.clone;\n\n fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.prototype */ {\n\n /**\n * Initializes all the interactive behavior of IText\n */\n initBehavior: function() {\n this.initAddedHandler();\n this.initRemovedHandler();\n this.initCursorSelectionHandlers();\n this.initDoubleClickSimulation();\n this.mouseMoveHandler = this.mouseMoveHandler.bind(this);\n },\n\n onDeselect: function() {\n this.isEditing && this.exitEditing();\n this.selected = false;\n },\n\n /**\n * Initializes \"added\" event handler\n */\n initAddedHandler: function() {\n var _this = this;\n this.on('added', function() {\n var canvas = _this.canvas;\n if (canvas) {\n if (!canvas._hasITextHandlers) {\n canvas._hasITextHandlers = true;\n _this._initCanvasHandlers(canvas);\n }\n canvas._iTextInstances = canvas._iTextInstances || [];\n canvas._iTextInstances.push(_this);\n }\n });\n },\n\n initRemovedHandler: function() {\n var _this = this;\n this.on('removed', function() {\n var canvas = _this.canvas;\n if (canvas) {\n canvas._iTextInstances = canvas._iTextInstances || [];\n fabric.util.removeFromArray(canvas._iTextInstances, _this);\n if (canvas._iTextInstances.length === 0) {\n canvas._hasITextHandlers = false;\n _this._removeCanvasHandlers(canvas);\n }\n }\n });\n },\n\n /**\n * register canvas event to manage exiting on other instances\n * @private\n */\n _initCanvasHandlers: function(canvas) {\n canvas._mouseUpITextHandler = function() {\n if (canvas._iTextInstances) {\n canvas._iTextInstances.forEach(function(obj) {\n obj.__isMousedown = false;\n });\n }\n };\n canvas.on('mouse:up', canvas._mouseUpITextHandler);\n },\n\n /**\n * remove canvas event to manage exiting on other instances\n * @private\n */\n _removeCanvasHandlers: function(canvas) {\n canvas.off('mouse:up', canvas._mouseUpITextHandler);\n },\n\n /**\n * @private\n */\n _tick: function() {\n this._currentTickState = this._animateCursor(this, 1, this.cursorDuration, '_onTickComplete');\n },\n\n /**\n * @private\n */\n _animateCursor: function(obj, targetOpacity, duration, completeMethod) {\n\n var tickState;\n\n tickState = {\n isAborted: false,\n abort: function() {\n this.isAborted = true;\n },\n };\n\n obj.animate('_currentCursorOpacity', targetOpacity, {\n duration: duration,\n onComplete: function() {\n if (!tickState.isAborted) {\n obj[completeMethod]();\n }\n },\n onChange: function() {\n // we do not want to animate a selection, only cursor\n if (obj.canvas && obj.selectionStart === obj.selectionEnd) {\n obj.renderCursorOrSelection();\n }\n },\n abort: function() {\n return tickState.isAborted;\n }\n });\n return tickState;\n },\n\n /**\n * @private\n */\n _onTickComplete: function() {\n\n var _this = this;\n\n if (this._cursorTimeout1) {\n clearTimeout(this._cursorTimeout1);\n }\n this._cursorTimeout1 = setTimeout(function() {\n _this._currentTickCompleteState = _this._animateCursor(_this, 0, this.cursorDuration / 2, '_tick');\n }, 100);\n },\n\n /**\n * Initializes delayed cursor\n */\n initDelayedCursor: function(restart) {\n var _this = this,\n delay = restart ? 0 : this.cursorDelay;\n\n this.abortCursorAnimation();\n this._currentCursorOpacity = 1;\n this._cursorTimeout2 = setTimeout(function() {\n _this._tick();\n }, delay);\n },\n\n /**\n * Aborts cursor animation and clears all timeouts\n */\n abortCursorAnimation: function() {\n var shouldClear = this._currentTickState || this._currentTickCompleteState,\n canvas = this.canvas;\n this._currentTickState && this._currentTickState.abort();\n this._currentTickCompleteState && this._currentTickCompleteState.abort();\n\n clearTimeout(this._cursorTimeout1);\n clearTimeout(this._cursorTimeout2);\n\n this._currentCursorOpacity = 0;\n // to clear just itext area we need to transform the context\n // it may not be worth it\n if (shouldClear && canvas) {\n canvas.clearContext(canvas.contextTop || canvas.contextContainer);\n }\n\n },\n\n /**\n * Selects entire text\n * @return {fabric.IText} thisArg\n * @chainable\n */\n selectAll: function() {\n this.selectionStart = 0;\n this.selectionEnd = this._text.length;\n this._fireSelectionChanged();\n this._updateTextarea();\n return this;\n },\n\n /**\n * Returns selected text\n * @return {String}\n */\n getSelectedText: function() {\n return this._text.slice(this.selectionStart, this.selectionEnd).join('');\n },\n\n /**\n * Find new selection index representing start of current word according to current selection index\n * @param {Number} startFrom Current selection index\n * @return {Number} New selection index\n */\n findWordBoundaryLeft: function(startFrom) {\n var offset = 0, index = startFrom - 1;\n\n // remove space before cursor first\n if (this._reSpace.test(this._text[index])) {\n while (this._reSpace.test(this._text[index])) {\n offset++;\n index--;\n }\n }\n while (/\\S/.test(this._text[index]) && index > -1) {\n offset++;\n index--;\n }\n\n return startFrom - offset;\n },\n\n /**\n * Find new selection index representing end of current word according to current selection index\n * @param {Number} startFrom Current selection index\n * @return {Number} New selection index\n */\n findWordBoundaryRight: function(startFrom) {\n var offset = 0, index = startFrom;\n\n // remove space after cursor first\n if (this._reSpace.test(this._text[index])) {\n while (this._reSpace.test(this._text[index])) {\n offset++;\n index++;\n }\n }\n while (/\\S/.test(this._text[index]) && index < this._text.length) {\n offset++;\n index++;\n }\n\n return startFrom + offset;\n },\n\n /**\n * Find new selection index representing start of current line according to current selection index\n * @param {Number} startFrom Current selection index\n * @return {Number} New selection index\n */\n findLineBoundaryLeft: function(startFrom) {\n var offset = 0, index = startFrom - 1;\n\n while (!/\\n/.test(this._text[index]) && index > -1) {\n offset++;\n index--;\n }\n\n return startFrom - offset;\n },\n\n /**\n * Find new selection index representing end of current line according to current selection index\n * @param {Number} startFrom Current selection index\n * @return {Number} New selection index\n */\n findLineBoundaryRight: function(startFrom) {\n var offset = 0, index = startFrom;\n\n while (!/\\n/.test(this._text[index]) && index < this._text.length) {\n offset++;\n index++;\n }\n\n return startFrom + offset;\n },\n\n /**\n * Finds index corresponding to beginning or end of a word\n * @param {Number} selectionStart Index of a character\n * @param {Number} direction 1 or -1\n * @return {Number} Index of the beginning or end of a word\n */\n searchWordBoundary: function(selectionStart, direction) {\n var text = this._text,\n index = this._reSpace.test(text[selectionStart]) ? selectionStart - 1 : selectionStart,\n _char = text[index],\n // wrong\n reNonWord = fabric.reNonWord;\n\n while (!reNonWord.test(_char) && index > 0 && index < text.length) {\n index += direction;\n _char = text[index];\n }\n if (reNonWord.test(_char)) {\n index += direction === 1 ? 0 : 1;\n }\n return index;\n },\n\n /**\n * Selects a word based on the index\n * @param {Number} selectionStart Index of a character\n */\n selectWord: function(selectionStart) {\n selectionStart = selectionStart || this.selectionStart;\n var newSelectionStart = this.searchWordBoundary(selectionStart, -1), /* search backwards */\n newSelectionEnd = this.searchWordBoundary(selectionStart, 1); /* search forward */\n\n this.selectionStart = newSelectionStart;\n this.selectionEnd = newSelectionEnd;\n this._fireSelectionChanged();\n this._updateTextarea();\n this.renderCursorOrSelection();\n },\n\n /**\n * Selects a line based on the index\n * @param {Number} selectionStart Index of a character\n * @return {fabric.IText} thisArg\n * @chainable\n */\n selectLine: function(selectionStart) {\n selectionStart = selectionStart || this.selectionStart;\n var newSelectionStart = this.findLineBoundaryLeft(selectionStart),\n newSelectionEnd = this.findLineBoundaryRight(selectionStart);\n\n this.selectionStart = newSelectionStart;\n this.selectionEnd = newSelectionEnd;\n this._fireSelectionChanged();\n this._updateTextarea();\n return this;\n },\n\n /**\n * Enters editing state\n * @return {fabric.IText} thisArg\n * @chainable\n */\n enterEditing: function(e) {\n if (this.isEditing || !this.editable) {\n return;\n }\n\n if (this.canvas) {\n this.canvas.calcOffset();\n this.exitEditingOnOthers(this.canvas);\n }\n\n this.isEditing = true;\n\n this.initHiddenTextarea(e);\n this.hiddenTextarea.focus();\n this.hiddenTextarea.value = this.text;\n this._updateTextarea();\n this._saveEditingProps();\n this._setEditingProps();\n this._textBeforeEdit = this.text;\n\n this._tick();\n this.fire('editing:entered');\n this._fireSelectionChanged();\n if (!this.canvas) {\n return this;\n }\n this.canvas.fire('text:editing:entered', { target: this });\n this.initMouseMoveHandler();\n this.canvas.requestRenderAll();\n return this;\n },\n\n exitEditingOnOthers: function(canvas) {\n if (canvas._iTextInstances) {\n canvas._iTextInstances.forEach(function(obj) {\n obj.selected = false;\n if (obj.isEditing) {\n obj.exitEditing();\n }\n });\n }\n },\n\n /**\n * Initializes \"mousemove\" event handler\n */\n initMouseMoveHandler: function() {\n this.canvas.on('mouse:move', this.mouseMoveHandler);\n },\n\n /**\n * @private\n */\n mouseMoveHandler: function(options) {\n if (!this.__isMousedown || !this.isEditing) {\n return;\n }\n\n var newSelectionStart = this.getSelectionStartFromPointer(options.e),\n currentStart = this.selectionStart,\n currentEnd = this.selectionEnd;\n if (\n (newSelectionStart !== this.__selectionStartOnMouseDown || currentStart === currentEnd)\n &&\n (currentStart === newSelectionStart || currentEnd === newSelectionStart)\n ) {\n return;\n }\n if (newSelectionStart > this.__selectionStartOnMouseDown) {\n this.selectionStart = this.__selectionStartOnMouseDown;\n this.selectionEnd = newSelectionStart;\n }\n else {\n this.selectionStart = newSelectionStart;\n this.selectionEnd = this.__selectionStartOnMouseDown;\n }\n if (this.selectionStart !== currentStart || this.selectionEnd !== currentEnd) {\n this.restartCursorIfNeeded();\n this._fireSelectionChanged();\n this._updateTextarea();\n this.renderCursorOrSelection();\n }\n },\n\n /**\n * @private\n */\n _setEditingProps: function() {\n this.hoverCursor = 'text';\n\n if (this.canvas) {\n this.canvas.defaultCursor = this.canvas.moveCursor = 'text';\n }\n\n this.borderColor = this.editingBorderColor;\n this.hasControls = this.selectable = false;\n this.lockMovementX = this.lockMovementY = true;\n },\n\n /**\n * convert from textarea to grapheme indexes\n */\n fromStringToGraphemeSelection: function(start, end, text) {\n var smallerTextStart = text.slice(0, start),\n graphemeStart = fabric.util.string.graphemeSplit(smallerTextStart).length;\n if (start === end) {\n return { selectionStart: graphemeStart, selectionEnd: graphemeStart };\n }\n var smallerTextEnd = text.slice(start, end),\n graphemeEnd = fabric.util.string.graphemeSplit(smallerTextEnd).length;\n return { selectionStart: graphemeStart, selectionEnd: graphemeStart + graphemeEnd };\n },\n\n /**\n * convert from fabric to textarea values\n */\n fromGraphemeToStringSelection: function(start, end, _text) {\n var smallerTextStart = _text.slice(0, start),\n graphemeStart = smallerTextStart.join('').length;\n if (start === end) {\n return { selectionStart: graphemeStart, selectionEnd: graphemeStart };\n }\n var smallerTextEnd = _text.slice(start, end),\n graphemeEnd = smallerTextEnd.join('').length;\n return { selectionStart: graphemeStart, selectionEnd: graphemeStart + graphemeEnd };\n },\n\n /**\n * @private\n */\n _updateTextarea: function() {\n this.cursorOffsetCache = { };\n if (!this.hiddenTextarea) {\n return;\n }\n if (!this.inCompositionMode) {\n var newSelection = this.fromGraphemeToStringSelection(this.selectionStart, this.selectionEnd, this._text);\n this.hiddenTextarea.selectionStart = newSelection.selectionStart;\n this.hiddenTextarea.selectionEnd = newSelection.selectionEnd;\n }\n this.updateTextareaPosition();\n },\n\n /**\n * @private\n */\n updateFromTextArea: function() {\n if (!this.hiddenTextarea) {\n return;\n }\n this.cursorOffsetCache = { };\n this.text = this.hiddenTextarea.value;\n if (this._shouldClearDimensionCache()) {\n this.initDimensions();\n this.setCoords();\n }\n var newSelection = this.fromStringToGraphemeSelection(\n this.hiddenTextarea.selectionStart, this.hiddenTextarea.selectionEnd, this.hiddenTextarea.value);\n this.selectionEnd = this.selectionStart = newSelection.selectionEnd;\n if (!this.inCompositionMode) {\n this.selectionStart = newSelection.selectionStart;\n }\n this.updateTextareaPosition();\n },\n\n /**\n * @private\n */\n updateTextareaPosition: function() {\n if (this.selectionStart === this.selectionEnd) {\n var style = this._calcTextareaPosition();\n this.hiddenTextarea.style.left = style.left;\n this.hiddenTextarea.style.top = style.top;\n }\n },\n\n /**\n * @private\n * @return {Object} style contains style for hiddenTextarea\n */\n _calcTextareaPosition: function() {\n if (!this.canvas) {\n return { x: 1, y: 1 };\n }\n var desiredPosition = this.inCompositionMode ? this.compositionStart : this.selectionStart,\n boundaries = this._getCursorBoundaries(desiredPosition),\n cursorLocation = this.get2DCursorLocation(desiredPosition),\n lineIndex = cursorLocation.lineIndex,\n charIndex = cursorLocation.charIndex,\n charHeight = this.getValueOfPropertyAt(lineIndex, charIndex, 'fontSize') * this.lineHeight,\n leftOffset = boundaries.leftOffset,\n m = this.calcTransformMatrix(),\n p = {\n x: boundaries.left + leftOffset,\n y: boundaries.top + boundaries.topOffset + charHeight\n },\n retinaScaling = this.canvas.getRetinaScaling(),\n upperCanvas = this.canvas.upperCanvasEl,\n upperCanvasWidth = upperCanvas.width / retinaScaling,\n upperCanvasHeight = upperCanvas.height / retinaScaling,\n maxWidth = upperCanvasWidth - charHeight,\n maxHeight = upperCanvasHeight - charHeight,\n scaleX = upperCanvas.clientWidth / upperCanvasWidth,\n scaleY = upperCanvas.clientHeight / upperCanvasHeight;\n\n p = fabric.util.transformPoint(p, m);\n p = fabric.util.transformPoint(p, this.canvas.viewportTransform);\n p.x *= scaleX;\n p.y *= scaleY;\n if (p.x < 0) {\n p.x = 0;\n }\n if (p.x > maxWidth) {\n p.x = maxWidth;\n }\n if (p.y < 0) {\n p.y = 0;\n }\n if (p.y > maxHeight) {\n p.y = maxHeight;\n }\n\n // add canvas offset on document\n p.x += this.canvas._offset.left;\n p.y += this.canvas._offset.top;\n\n return { left: p.x + 'px', top: p.y + 'px', fontSize: charHeight + 'px', charHeight: charHeight };\n },\n\n /**\n * @private\n */\n _saveEditingProps: function() {\n this._savedProps = {\n hasControls: this.hasControls,\n borderColor: this.borderColor,\n lockMovementX: this.lockMovementX,\n lockMovementY: this.lockMovementY,\n hoverCursor: this.hoverCursor,\n selectable: this.selectable,\n defaultCursor: this.canvas && this.canvas.defaultCursor,\n moveCursor: this.canvas && this.canvas.moveCursor\n };\n },\n\n /**\n * @private\n */\n _restoreEditingProps: function() {\n if (!this._savedProps) {\n return;\n }\n\n this.hoverCursor = this._savedProps.hoverCursor;\n this.hasControls = this._savedProps.hasControls;\n this.borderColor = this._savedProps.borderColor;\n this.selectable = this._savedProps.selectable;\n this.lockMovementX = this._savedProps.lockMovementX;\n this.lockMovementY = this._savedProps.lockMovementY;\n\n if (this.canvas) {\n this.canvas.defaultCursor = this._savedProps.defaultCursor;\n this.canvas.moveCursor = this._savedProps.moveCursor;\n }\n },\n\n /**\n * Exits from editing state\n * @return {fabric.IText} thisArg\n * @chainable\n */\n exitEditing: function() {\n var isTextChanged = (this._textBeforeEdit !== this.text);\n var hiddenTextarea = this.hiddenTextarea;\n this.selected = false;\n this.isEditing = false;\n\n this.selectionEnd = this.selectionStart;\n\n if (hiddenTextarea) {\n hiddenTextarea.blur && hiddenTextarea.blur();\n hiddenTextarea.parentNode && hiddenTextarea.parentNode.removeChild(hiddenTextarea);\n }\n this.hiddenTextarea = null;\n this.abortCursorAnimation();\n this._restoreEditingProps();\n this._currentCursorOpacity = 0;\n if (this._shouldClearDimensionCache()) {\n this.initDimensions();\n this.setCoords();\n }\n this.fire('editing:exited');\n isTextChanged && this.fire('modified');\n if (this.canvas) {\n this.canvas.off('mouse:move', this.mouseMoveHandler);\n this.canvas.fire('text:editing:exited', { target: this });\n isTextChanged && this.canvas.fire('object:modified', { target: this });\n }\n return this;\n },\n\n /**\n * @private\n */\n _removeExtraneousStyles: function() {\n for (var prop in this.styles) {\n if (!this._textLines[prop]) {\n delete this.styles[prop];\n }\n }\n },\n\n /**\n * remove and reflow a style block from start to end.\n * @param {Number} start linear start position for removal (included in removal)\n * @param {Number} end linear end position for removal ( excluded from removal )\n */\n removeStyleFromTo: function(start, end) {\n var cursorStart = this.get2DCursorLocation(start, true),\n cursorEnd = this.get2DCursorLocation(end, true),\n lineStart = cursorStart.lineIndex,\n charStart = cursorStart.charIndex,\n lineEnd = cursorEnd.lineIndex,\n charEnd = cursorEnd.charIndex,\n i, styleObj;\n if (lineStart !== lineEnd) {\n // step1 remove the trailing of lineStart\n if (this.styles[lineStart]) {\n for (i = charStart; i < this._unwrappedTextLines[lineStart].length; i++) {\n delete this.styles[lineStart][i];\n }\n }\n // step2 move the trailing of lineEnd to lineStart if needed\n if (this.styles[lineEnd]) {\n for (i = charEnd; i < this._unwrappedTextLines[lineEnd].length; i++) {\n styleObj = this.styles[lineEnd][i];\n if (styleObj) {\n this.styles[lineStart] || (this.styles[lineStart] = { });\n this.styles[lineStart][charStart + i - charEnd] = styleObj;\n }\n }\n }\n // step3 detects lines will be completely removed.\n for (i = lineStart + 1; i <= lineEnd; i++) {\n delete this.styles[i];\n }\n // step4 shift remaining lines.\n this.shiftLineStyles(lineEnd, lineStart - lineEnd);\n }\n else {\n // remove and shift left on the same line\n if (this.styles[lineStart]) {\n styleObj = this.styles[lineStart];\n var diff = charEnd - charStart, numericChar, _char;\n for (i = charStart; i < charEnd; i++) {\n delete styleObj[i];\n }\n for (_char in this.styles[lineStart]) {\n numericChar = parseInt(_char, 10);\n if (numericChar >= charEnd) {\n styleObj[numericChar - diff] = styleObj[_char];\n delete styleObj[_char];\n }\n }\n }\n }\n },\n\n /**\n * Shifts line styles up or down\n * @param {Number} lineIndex Index of a line\n * @param {Number} offset Can any number?\n */\n shiftLineStyles: function(lineIndex, offset) {\n // shift all line styles by offset upward or downward\n // do not clone deep. we need new array, not new style objects\n var clonedStyles = clone(this.styles);\n for (var line in this.styles) {\n var numericLine = parseInt(line, 10);\n if (numericLine > lineIndex) {\n this.styles[numericLine + offset] = clonedStyles[numericLine];\n if (!clonedStyles[numericLine - offset]) {\n delete this.styles[numericLine];\n }\n }\n }\n },\n\n restartCursorIfNeeded: function() {\n if (!this._currentTickState || this._currentTickState.isAborted\n || !this._currentTickCompleteState || this._currentTickCompleteState.isAborted\n ) {\n this.initDelayedCursor();\n }\n },\n\n /**\n * Handle insertion of more consecutive style lines for when one or more\n * newlines gets added to the text. Since current style needs to be shifted\n * first we shift the current style of the number lines needed, then we add\n * new lines from the last to the first.\n * @param {Number} lineIndex Index of a line\n * @param {Number} charIndex Index of a char\n * @param {Number} qty number of lines to add\n * @param {Array} copiedStyle Array of objects styles\n */\n insertNewlineStyleObject: function(lineIndex, charIndex, qty, copiedStyle) {\n var currentCharStyle,\n newLineStyles = {},\n somethingAdded = false,\n isEndOfLine = this._unwrappedTextLines[lineIndex].length === charIndex;\n\n qty || (qty = 1);\n this.shiftLineStyles(lineIndex, qty);\n if (this.styles[lineIndex]) {\n currentCharStyle = this.styles[lineIndex][charIndex === 0 ? charIndex : charIndex - 1];\n }\n // we clone styles of all chars\n // after cursor onto the current line\n for (var index in this.styles[lineIndex]) {\n var numIndex = parseInt(index, 10);\n if (numIndex >= charIndex) {\n somethingAdded = true;\n newLineStyles[numIndex - charIndex] = this.styles[lineIndex][index];\n // remove lines from the previous line since they're on a new line now\n if (!(isEndOfLine && charIndex === 0)) {\n delete this.styles[lineIndex][index];\n }\n }\n }\n var styleCarriedOver = false;\n if (somethingAdded && !isEndOfLine) {\n // if is end of line, the extra style we copied\n // is probably not something we want\n this.styles[lineIndex + qty] = newLineStyles;\n styleCarriedOver = true;\n }\n if (styleCarriedOver) {\n // skip the last line of since we already prepared it.\n qty--;\n }\n // for the all the lines or all the other lines\n // we clone current char style onto the next (otherwise empty) line\n while (qty > 0) {\n if (copiedStyle && copiedStyle[qty - 1]) {\n this.styles[lineIndex + qty] = { 0: clone(copiedStyle[qty - 1]) };\n }\n else if (currentCharStyle) {\n this.styles[lineIndex + qty] = { 0: clone(currentCharStyle) };\n }\n else {\n delete this.styles[lineIndex + qty];\n }\n qty--;\n }\n this._forceClearCache = true;\n },\n\n /**\n * Inserts style object for a given line/char index\n * @param {Number} lineIndex Index of a line\n * @param {Number} charIndex Index of a char\n * @param {Number} quantity number Style object to insert, if given\n * @param {Array} copiedStyle array of style objects\n */\n insertCharStyleObject: function(lineIndex, charIndex, quantity, copiedStyle) {\n if (!this.styles) {\n this.styles = {};\n }\n var currentLineStyles = this.styles[lineIndex],\n currentLineStylesCloned = currentLineStyles ? clone(currentLineStyles) : {};\n\n quantity || (quantity = 1);\n // shift all char styles by quantity forward\n // 0,1,2,3 -> (charIndex=2) -> 0,1,3,4 -> (insert 2) -> 0,1,2,3,4\n for (var index in currentLineStylesCloned) {\n var numericIndex = parseInt(index, 10);\n if (numericIndex >= charIndex) {\n currentLineStyles[numericIndex + quantity] = currentLineStylesCloned[numericIndex];\n // only delete the style if there was nothing moved there\n if (!currentLineStylesCloned[numericIndex - quantity]) {\n delete currentLineStyles[numericIndex];\n }\n }\n }\n this._forceClearCache = true;\n if (copiedStyle) {\n while (quantity--) {\n if (!Object.keys(copiedStyle[quantity]).length) {\n continue;\n }\n if (!this.styles[lineIndex]) {\n this.styles[lineIndex] = {};\n }\n this.styles[lineIndex][charIndex + quantity] = clone(copiedStyle[quantity]);\n }\n return;\n }\n if (!currentLineStyles) {\n return;\n }\n var newStyle = currentLineStyles[charIndex ? charIndex - 1 : 1];\n while (newStyle && quantity--) {\n this.styles[lineIndex][charIndex + quantity] = clone(newStyle);\n }\n },\n\n /**\n * Inserts style object(s)\n * @param {Array} insertedText Characters at the location where style is inserted\n * @param {Number} start cursor index for inserting style\n * @param {Array} [copiedStyle] array of style objects to insert.\n */\n insertNewStyleBlock: function(insertedText, start, copiedStyle) {\n var cursorLoc = this.get2DCursorLocation(start, true),\n addedLines = [0], linesLength = 0;\n // get an array of how many char per lines are being added.\n for (var i = 0; i < insertedText.length; i++) {\n if (insertedText[i] === '\\n') {\n linesLength++;\n addedLines[linesLength] = 0;\n }\n else {\n addedLines[linesLength]++;\n }\n }\n // for the first line copy the style from the current char position.\n if (addedLines[0] > 0) {\n this.insertCharStyleObject(cursorLoc.lineIndex, cursorLoc.charIndex, addedLines[0], copiedStyle);\n copiedStyle = copiedStyle && copiedStyle.slice(addedLines[0] + 1);\n }\n linesLength && this.insertNewlineStyleObject(\n cursorLoc.lineIndex, cursorLoc.charIndex + addedLines[0], linesLength);\n for (var i = 1; i < linesLength; i++) {\n if (addedLines[i] > 0) {\n this.insertCharStyleObject(cursorLoc.lineIndex + i, 0, addedLines[i], copiedStyle);\n }\n else if (copiedStyle) {\n this.styles[cursorLoc.lineIndex + i][0] = copiedStyle[0];\n }\n copiedStyle = copiedStyle && copiedStyle.slice(addedLines[i] + 1);\n }\n // we use i outside the loop to get it like linesLength\n if (addedLines[i] > 0) {\n this.insertCharStyleObject(cursorLoc.lineIndex + i, 0, addedLines[i], copiedStyle);\n }\n },\n\n /**\n * Set the selectionStart and selectionEnd according to the new position of cursor\n * mimic the key - mouse navigation when shift is pressed.\n */\n setSelectionStartEndWithShift: function(start, end, newSelection) {\n if (newSelection <= start) {\n if (end === start) {\n this._selectionDirection = 'left';\n }\n else if (this._selectionDirection === 'right') {\n this._selectionDirection = 'left';\n this.selectionEnd = start;\n }\n this.selectionStart = newSelection;\n }\n else if (newSelection > start && newSelection < end) {\n if (this._selectionDirection === 'right') {\n this.selectionEnd = newSelection;\n }\n else {\n this.selectionStart = newSelection;\n }\n }\n else {\n // newSelection is > selection start and end\n if (end === start) {\n this._selectionDirection = 'right';\n }\n else if (this._selectionDirection === 'left') {\n this._selectionDirection = 'right';\n this.selectionStart = end;\n }\n this.selectionEnd = newSelection;\n }\n },\n\n setSelectionInBoundaries: function() {\n var length = this.text.length;\n if (this.selectionStart > length) {\n this.selectionStart = length;\n }\n else if (this.selectionStart < 0) {\n this.selectionStart = 0;\n }\n if (this.selectionEnd > length) {\n this.selectionEnd = length;\n }\n else if (this.selectionEnd < 0) {\n this.selectionEnd = 0;\n }\n }\n });\n})();\n\n\nfabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.prototype */ {\n /**\n * Initializes \"dbclick\" event handler\n */\n initDoubleClickSimulation: function() {\n\n // for double click\n this.__lastClickTime = +new Date();\n\n // for triple click\n this.__lastLastClickTime = +new Date();\n\n this.__lastPointer = { };\n\n this.on('mousedown', this.onMouseDown);\n },\n\n /**\n * Default event handler to simulate triple click\n * @private\n */\n onMouseDown: function(options) {\n if (!this.canvas) {\n return;\n }\n this.__newClickTime = +new Date();\n var newPointer = options.pointer;\n if (this.isTripleClick(newPointer)) {\n this.fire('tripleclick', options);\n this._stopEvent(options.e);\n }\n this.__lastLastClickTime = this.__lastClickTime;\n this.__lastClickTime = this.__newClickTime;\n this.__lastPointer = newPointer;\n this.__lastIsEditing = this.isEditing;\n this.__lastSelected = this.selected;\n },\n\n isTripleClick: function(newPointer) {\n return this.__newClickTime - this.__lastClickTime < 500 &&\n this.__lastClickTime - this.__lastLastClickTime < 500 &&\n this.__lastPointer.x === newPointer.x &&\n this.__lastPointer.y === newPointer.y;\n },\n\n /**\n * @private\n */\n _stopEvent: function(e) {\n e.preventDefault && e.preventDefault();\n e.stopPropagation && e.stopPropagation();\n },\n\n /**\n * Initializes event handlers related to cursor or selection\n */\n initCursorSelectionHandlers: function() {\n this.initMousedownHandler();\n this.initMouseupHandler();\n this.initClicks();\n },\n\n /**\n * Default handler for double click, select a word\n */\n doubleClickHandler: function(options) {\n if (!this.isEditing) {\n return;\n }\n this.selectWord(this.getSelectionStartFromPointer(options.e));\n },\n\n /**\n * Default handler for triple click, select a line\n */\n tripleClickHandler: function(options) {\n if (!this.isEditing) {\n return;\n }\n this.selectLine(this.getSelectionStartFromPointer(options.e));\n },\n\n /**\n * Initializes double and triple click event handlers\n */\n initClicks: function() {\n this.on('mousedblclick', this.doubleClickHandler);\n this.on('tripleclick', this.tripleClickHandler);\n },\n\n /**\n * Default event handler for the basic functionalities needed on _mouseDown\n * can be overridden to do something different.\n * Scope of this implementation is: find the click position, set selectionStart\n * find selectionEnd, initialize the drawing of either cursor or selection area\n * initializing a mousedDown on a text area will cancel fabricjs knowledge of\n * current compositionMode. It will be set to false.\n */\n _mouseDownHandler: function(options) {\n if (!this.canvas || !this.editable || (options.e.button && options.e.button !== 1)) {\n return;\n }\n\n this.__isMousedown = true;\n\n if (this.selected) {\n this.inCompositionMode = false;\n this.setCursorByClick(options.e);\n }\n\n if (this.isEditing) {\n this.__selectionStartOnMouseDown = this.selectionStart;\n if (this.selectionStart === this.selectionEnd) {\n this.abortCursorAnimation();\n }\n this.renderCursorOrSelection();\n }\n },\n\n /**\n * Default event handler for the basic functionalities needed on mousedown:before\n * can be overridden to do something different.\n * Scope of this implementation is: verify the object is already selected when mousing down\n */\n _mouseDownHandlerBefore: function(options) {\n if (!this.canvas || !this.editable || (options.e.button && options.e.button !== 1)) {\n return;\n }\n // we want to avoid that an object that was selected and then becomes unselectable,\n // may trigger editing mode in some way.\n this.selected = this === this.canvas._activeObject;\n },\n\n /**\n * Initializes \"mousedown\" event handler\n */\n initMousedownHandler: function() {\n this.on('mousedown', this._mouseDownHandler);\n this.on('mousedown:before', this._mouseDownHandlerBefore);\n },\n\n /**\n * Initializes \"mouseup\" event handler\n */\n initMouseupHandler: function() {\n this.on('mouseup', this.mouseUpHandler);\n },\n\n /**\n * standard handler for mouse up, overridable\n * @private\n */\n mouseUpHandler: function(options) {\n this.__isMousedown = false;\n if (!this.editable || this.group ||\n (options.transform && options.transform.actionPerformed) ||\n (options.e.button && options.e.button !== 1)) {\n return;\n }\n\n if (this.canvas) {\n var currentActive = this.canvas._activeObject;\n if (currentActive && currentActive !== this) {\n // avoid running this logic when there is an active object\n // this because is possible with shift click and fast clicks,\n // to rapidly deselect and reselect this object and trigger an enterEdit\n return;\n }\n }\n\n if (this.__lastSelected && !this.__corner) {\n this.selected = false;\n this.__lastSelected = false;\n this.enterEditing(options.e);\n if (this.selectionStart === this.selectionEnd) {\n this.initDelayedCursor(true);\n }\n else {\n this.renderCursorOrSelection();\n }\n }\n else {\n this.selected = true;\n }\n },\n\n /**\n * Changes cursor location in a text depending on passed pointer (x/y) object\n * @param {Event} e Event object\n */\n setCursorByClick: function(e) {\n var newSelection = this.getSelectionStartFromPointer(e),\n start = this.selectionStart, end = this.selectionEnd;\n if (e.shiftKey) {\n this.setSelectionStartEndWithShift(start, end, newSelection);\n }\n else {\n this.selectionStart = newSelection;\n this.selectionEnd = newSelection;\n }\n if (this.isEditing) {\n this._fireSelectionChanged();\n this._updateTextarea();\n }\n },\n\n /**\n * Returns index of a character corresponding to where an object was clicked\n * @param {Event} e Event object\n * @return {Number} Index of a character\n */\n getSelectionStartFromPointer: function(e) {\n var mouseOffset = this.getLocalPointer(e),\n prevWidth = 0,\n width = 0,\n height = 0,\n charIndex = 0,\n lineIndex = 0,\n lineLeftOffset,\n line;\n for (var i = 0, len = this._textLines.length; i < len; i++) {\n if (height <= mouseOffset.y) {\n height += this.getHeightOfLine(i) * this.scaleY;\n lineIndex = i;\n if (i > 0) {\n charIndex += this._textLines[i - 1].length + this.missingNewlineOffset(i - 1);\n }\n }\n else {\n break;\n }\n }\n lineLeftOffset = this._getLineLeftOffset(lineIndex);\n width = lineLeftOffset * this.scaleX;\n line = this._textLines[lineIndex];\n // handling of RTL: in order to get things work correctly,\n // we assume RTL writing is mirrored compared to LTR writing.\n // so in position detection we mirror the X offset, and when is time\n // of rendering it, we mirror it again.\n if (this.direction === 'rtl') {\n mouseOffset.x = this.width * this.scaleX - mouseOffset.x + width;\n }\n for (var j = 0, jlen = line.length; j < jlen; j++) {\n prevWidth = width;\n // i removed something about flipX here, check.\n width += this.__charBounds[lineIndex][j].kernedWidth * this.scaleX;\n if (width <= mouseOffset.x) {\n charIndex++;\n }\n else {\n break;\n }\n }\n return this._getNewSelectionStartFromOffset(mouseOffset, prevWidth, width, charIndex, jlen);\n },\n\n /**\n * @private\n */\n _getNewSelectionStartFromOffset: function(mouseOffset, prevWidth, width, index, jlen) {\n // we need Math.abs because when width is after the last char, the offset is given as 1, while is 0\n var distanceBtwLastCharAndCursor = mouseOffset.x - prevWidth,\n distanceBtwNextCharAndCursor = width - mouseOffset.x,\n offset = distanceBtwNextCharAndCursor > distanceBtwLastCharAndCursor ||\n distanceBtwNextCharAndCursor < 0 ? 0 : 1,\n newSelectionStart = index + offset;\n // if object is horizontally flipped, mirror cursor location from the end\n if (this.flipX) {\n newSelectionStart = jlen - newSelectionStart;\n }\n\n if (newSelectionStart > this._text.length) {\n newSelectionStart = this._text.length;\n }\n\n return newSelectionStart;\n }\n});\n\n\nfabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.prototype */ {\n\n /**\n * Initializes hidden textarea (needed to bring up keyboard in iOS)\n */\n initHiddenTextarea: function() {\n this.hiddenTextarea = fabric.document.createElement('textarea');\n this.hiddenTextarea.setAttribute('autocapitalize', 'off');\n this.hiddenTextarea.setAttribute('autocorrect', 'off');\n this.hiddenTextarea.setAttribute('autocomplete', 'off');\n this.hiddenTextarea.setAttribute('spellcheck', 'false');\n this.hiddenTextarea.setAttribute('data-fabric-hiddentextarea', '');\n this.hiddenTextarea.setAttribute('wrap', 'off');\n var style = this._calcTextareaPosition();\n // line-height: 1px; was removed from the style to fix this:\n // https://bugs.chromium.org/p/chromium/issues/detail?id=870966\n this.hiddenTextarea.style.cssText = 'position: absolute; top: ' + style.top +\n '; left: ' + style.left + '; z-index: -999; opacity: 0; width: 1px; height: 1px; font-size: 1px;' +\n ' paddingーtop: ' + style.fontSize + ';';\n\n if (this.hiddenTextareaContainer) {\n this.hiddenTextareaContainer.appendChild(this.hiddenTextarea);\n }\n else {\n fabric.document.body.appendChild(this.hiddenTextarea);\n }\n\n fabric.util.addListener(this.hiddenTextarea, 'keydown', this.onKeyDown.bind(this));\n fabric.util.addListener(this.hiddenTextarea, 'keyup', this.onKeyUp.bind(this));\n fabric.util.addListener(this.hiddenTextarea, 'input', this.onInput.bind(this));\n fabric.util.addListener(this.hiddenTextarea, 'copy', this.copy.bind(this));\n fabric.util.addListener(this.hiddenTextarea, 'cut', this.copy.bind(this));\n fabric.util.addListener(this.hiddenTextarea, 'paste', this.paste.bind(this));\n fabric.util.addListener(this.hiddenTextarea, 'compositionstart', this.onCompositionStart.bind(this));\n fabric.util.addListener(this.hiddenTextarea, 'compositionupdate', this.onCompositionUpdate.bind(this));\n fabric.util.addListener(this.hiddenTextarea, 'compositionend', this.onCompositionEnd.bind(this));\n\n if (!this._clickHandlerInitialized && this.canvas) {\n fabric.util.addListener(this.canvas.upperCanvasEl, 'click', this.onClick.bind(this));\n this._clickHandlerInitialized = true;\n }\n },\n\n /**\n * For functionalities on keyDown\n * Map a special key to a function of the instance/prototype\n * If you need different behaviour for ESC or TAB or arrows, you have to change\n * this map setting the name of a function that you build on the fabric.Itext or\n * your prototype.\n * the map change will affect all Instances unless you need for only some text Instances\n * in that case you have to clone this object and assign your Instance.\n * this.keysMap = fabric.util.object.clone(this.keysMap);\n * The function must be in fabric.Itext.prototype.myFunction And will receive event as args[0]\n */\n keysMap: {\n 9: 'exitEditing',\n 27: 'exitEditing',\n 33: 'moveCursorUp',\n 34: 'moveCursorDown',\n 35: 'moveCursorRight',\n 36: 'moveCursorLeft',\n 37: 'moveCursorLeft',\n 38: 'moveCursorUp',\n 39: 'moveCursorRight',\n 40: 'moveCursorDown',\n },\n\n keysMapRtl: {\n 9: 'exitEditing',\n 27: 'exitEditing',\n 33: 'moveCursorUp',\n 34: 'moveCursorDown',\n 35: 'moveCursorLeft',\n 36: 'moveCursorRight',\n 37: 'moveCursorRight',\n 38: 'moveCursorUp',\n 39: 'moveCursorLeft',\n 40: 'moveCursorDown',\n },\n\n /**\n * For functionalities on keyUp + ctrl || cmd\n */\n ctrlKeysMapUp: {\n 67: 'copy',\n 88: 'cut'\n },\n\n /**\n * For functionalities on keyDown + ctrl || cmd\n */\n ctrlKeysMapDown: {\n 65: 'selectAll'\n },\n\n onClick: function() {\n // No need to trigger click event here, focus is enough to have the keyboard appear on Android\n this.hiddenTextarea && this.hiddenTextarea.focus();\n },\n\n /**\n * Handles keydown event\n * only used for arrows and combination of modifier keys.\n * @param {Event} e Event object\n */\n onKeyDown: function(e) {\n if (!this.isEditing) {\n return;\n }\n var keyMap = this.direction === 'rtl' ? this.keysMapRtl : this.keysMap;\n if (e.keyCode in keyMap) {\n this[keyMap[e.keyCode]](e);\n }\n else if ((e.keyCode in this.ctrlKeysMapDown) && (e.ctrlKey || e.metaKey)) {\n this[this.ctrlKeysMapDown[e.keyCode]](e);\n }\n else {\n return;\n }\n e.stopImmediatePropagation();\n e.preventDefault();\n if (e.keyCode >= 33 && e.keyCode <= 40) {\n // if i press an arrow key just update selection\n this.inCompositionMode = false;\n this.clearContextTop();\n this.renderCursorOrSelection();\n }\n else {\n this.canvas && this.canvas.requestRenderAll();\n }\n },\n\n /**\n * Handles keyup event\n * We handle KeyUp because ie11 and edge have difficulties copy/pasting\n * if a copy/cut event fired, keyup is dismissed\n * @param {Event} e Event object\n */\n onKeyUp: function(e) {\n if (!this.isEditing || this._copyDone || this.inCompositionMode) {\n this._copyDone = false;\n return;\n }\n if ((e.keyCode in this.ctrlKeysMapUp) && (e.ctrlKey || e.metaKey)) {\n this[this.ctrlKeysMapUp[e.keyCode]](e);\n }\n else {\n return;\n }\n e.stopImmediatePropagation();\n e.preventDefault();\n this.canvas && this.canvas.requestRenderAll();\n },\n\n /**\n * Handles onInput event\n * @param {Event} e Event object\n */\n onInput: function(e) {\n var fromPaste = this.fromPaste;\n this.fromPaste = false;\n e && e.stopPropagation();\n if (!this.isEditing) {\n return;\n }\n // decisions about style changes.\n var nextText = this._splitTextIntoLines(this.hiddenTextarea.value).graphemeText,\n charCount = this._text.length,\n nextCharCount = nextText.length,\n removedText, insertedText,\n charDiff = nextCharCount - charCount,\n selectionStart = this.selectionStart, selectionEnd = this.selectionEnd,\n selection = selectionStart !== selectionEnd,\n copiedStyle, removeFrom, removeTo;\n if (this.hiddenTextarea.value === '') {\n this.styles = { };\n this.updateFromTextArea();\n this.fire('changed');\n if (this.canvas) {\n this.canvas.fire('text:changed', { target: this });\n this.canvas.requestRenderAll();\n }\n return;\n }\n\n var textareaSelection = this.fromStringToGraphemeSelection(\n this.hiddenTextarea.selectionStart,\n this.hiddenTextarea.selectionEnd,\n this.hiddenTextarea.value\n );\n var backDelete = selectionStart > textareaSelection.selectionStart;\n\n if (selection) {\n removedText = this._text.slice(selectionStart, selectionEnd);\n charDiff += selectionEnd - selectionStart;\n }\n else if (nextCharCount < charCount) {\n if (backDelete) {\n removedText = this._text.slice(selectionEnd + charDiff, selectionEnd);\n }\n else {\n removedText = this._text.slice(selectionStart, selectionStart - charDiff);\n }\n }\n insertedText = nextText.slice(textareaSelection.selectionEnd - charDiff, textareaSelection.selectionEnd);\n if (removedText && removedText.length) {\n if (insertedText.length) {\n // let's copy some style before deleting.\n // we want to copy the style before the cursor OR the style at the cursor if selection\n // is bigger than 0.\n copiedStyle = this.getSelectionStyles(selectionStart, selectionStart + 1, false);\n // now duplicate the style one for each inserted text.\n copiedStyle = insertedText.map(function() {\n // this return an array of references, but that is fine since we are\n // copying the style later.\n return copiedStyle[0];\n });\n }\n if (selection) {\n removeFrom = selectionStart;\n removeTo = selectionEnd;\n }\n else if (backDelete) {\n // detect differences between forwardDelete and backDelete\n removeFrom = selectionEnd - removedText.length;\n removeTo = selectionEnd;\n }\n else {\n removeFrom = selectionEnd;\n removeTo = selectionEnd + removedText.length;\n }\n this.removeStyleFromTo(removeFrom, removeTo);\n }\n if (insertedText.length) {\n if (fromPaste && insertedText.join('') === fabric.copiedText && !fabric.disableStyleCopyPaste) {\n copiedStyle = fabric.copiedTextStyle;\n }\n this.insertNewStyleBlock(insertedText, selectionStart, copiedStyle);\n }\n this.updateFromTextArea();\n this.fire('changed');\n if (this.canvas) {\n this.canvas.fire('text:changed', { target: this });\n this.canvas.requestRenderAll();\n }\n },\n /**\n * Composition start\n */\n onCompositionStart: function() {\n this.inCompositionMode = true;\n },\n\n /**\n * Composition end\n */\n onCompositionEnd: function() {\n this.inCompositionMode = false;\n },\n\n // /**\n // * Composition update\n // */\n onCompositionUpdate: function(e) {\n this.compositionStart = e.target.selectionStart;\n this.compositionEnd = e.target.selectionEnd;\n this.updateTextareaPosition();\n },\n\n /**\n * Copies selected text\n * @param {Event} e Event object\n */\n copy: function() {\n if (this.selectionStart === this.selectionEnd) {\n //do not cut-copy if no selection\n return;\n }\n\n fabric.copiedText = this.getSelectedText();\n if (!fabric.disableStyleCopyPaste) {\n fabric.copiedTextStyle = this.getSelectionStyles(this.selectionStart, this.selectionEnd, true);\n }\n else {\n fabric.copiedTextStyle = null;\n }\n this._copyDone = true;\n },\n\n /**\n * Pastes text\n * @param {Event} e Event object\n */\n paste: function() {\n this.fromPaste = true;\n },\n\n /**\n * @private\n * @param {Event} e Event object\n * @return {Object} Clipboard data object\n */\n _getClipboardData: function(e) {\n return (e && e.clipboardData) || fabric.window.clipboardData;\n },\n\n /**\n * Finds the width in pixels before the cursor on the same line\n * @private\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @return {Number} widthBeforeCursor width before cursor\n */\n _getWidthBeforeCursor: function(lineIndex, charIndex) {\n var widthBeforeCursor = this._getLineLeftOffset(lineIndex), bound;\n\n if (charIndex > 0) {\n bound = this.__charBounds[lineIndex][charIndex - 1];\n widthBeforeCursor += bound.left + bound.width;\n }\n return widthBeforeCursor;\n },\n\n /**\n * Gets start offset of a selection\n * @param {Event} e Event object\n * @param {Boolean} isRight\n * @return {Number}\n */\n getDownCursorOffset: function(e, isRight) {\n var selectionProp = this._getSelectionForOffset(e, isRight),\n cursorLocation = this.get2DCursorLocation(selectionProp),\n lineIndex = cursorLocation.lineIndex;\n // if on last line, down cursor goes to end of line\n if (lineIndex === this._textLines.length - 1 || e.metaKey || e.keyCode === 34) {\n // move to the end of a text\n return this._text.length - selectionProp;\n }\n var charIndex = cursorLocation.charIndex,\n widthBeforeCursor = this._getWidthBeforeCursor(lineIndex, charIndex),\n indexOnOtherLine = this._getIndexOnLine(lineIndex + 1, widthBeforeCursor),\n textAfterCursor = this._textLines[lineIndex].slice(charIndex);\n return textAfterCursor.length + indexOnOtherLine + 1 + this.missingNewlineOffset(lineIndex);\n },\n\n /**\n * private\n * Helps finding if the offset should be counted from Start or End\n * @param {Event} e Event object\n * @param {Boolean} isRight\n * @return {Number}\n */\n _getSelectionForOffset: function(e, isRight) {\n if (e.shiftKey && this.selectionStart !== this.selectionEnd && isRight) {\n return this.selectionEnd;\n }\n else {\n return this.selectionStart;\n }\n },\n\n /**\n * @param {Event} e Event object\n * @param {Boolean} isRight\n * @return {Number}\n */\n getUpCursorOffset: function(e, isRight) {\n var selectionProp = this._getSelectionForOffset(e, isRight),\n cursorLocation = this.get2DCursorLocation(selectionProp),\n lineIndex = cursorLocation.lineIndex;\n if (lineIndex === 0 || e.metaKey || e.keyCode === 33) {\n // if on first line, up cursor goes to start of line\n return -selectionProp;\n }\n var charIndex = cursorLocation.charIndex,\n widthBeforeCursor = this._getWidthBeforeCursor(lineIndex, charIndex),\n indexOnOtherLine = this._getIndexOnLine(lineIndex - 1, widthBeforeCursor),\n textBeforeCursor = this._textLines[lineIndex].slice(0, charIndex),\n missingNewlineOffset = this.missingNewlineOffset(lineIndex - 1);\n // return a negative offset\n return -this._textLines[lineIndex - 1].length\n + indexOnOtherLine - textBeforeCursor.length + (1 - missingNewlineOffset);\n },\n\n /**\n * for a given width it founds the matching character.\n * @private\n */\n _getIndexOnLine: function(lineIndex, width) {\n\n var line = this._textLines[lineIndex],\n lineLeftOffset = this._getLineLeftOffset(lineIndex),\n widthOfCharsOnLine = lineLeftOffset,\n indexOnLine = 0, charWidth, foundMatch;\n\n for (var j = 0, jlen = line.length; j < jlen; j++) {\n charWidth = this.__charBounds[lineIndex][j].width;\n widthOfCharsOnLine += charWidth;\n if (widthOfCharsOnLine > width) {\n foundMatch = true;\n var leftEdge = widthOfCharsOnLine - charWidth,\n rightEdge = widthOfCharsOnLine,\n offsetFromLeftEdge = Math.abs(leftEdge - width),\n offsetFromRightEdge = Math.abs(rightEdge - width);\n\n indexOnLine = offsetFromRightEdge < offsetFromLeftEdge ? j : (j - 1);\n break;\n }\n }\n\n // reached end\n if (!foundMatch) {\n indexOnLine = line.length - 1;\n }\n\n return indexOnLine;\n },\n\n\n /**\n * Moves cursor down\n * @param {Event} e Event object\n */\n moveCursorDown: function(e) {\n if (this.selectionStart >= this._text.length && this.selectionEnd >= this._text.length) {\n return;\n }\n this._moveCursorUpOrDown('Down', e);\n },\n\n /**\n * Moves cursor up\n * @param {Event} e Event object\n */\n moveCursorUp: function(e) {\n if (this.selectionStart === 0 && this.selectionEnd === 0) {\n return;\n }\n this._moveCursorUpOrDown('Up', e);\n },\n\n /**\n * Moves cursor up or down, fires the events\n * @param {String} direction 'Up' or 'Down'\n * @param {Event} e Event object\n */\n _moveCursorUpOrDown: function(direction, e) {\n // getUpCursorOffset\n // getDownCursorOffset\n var action = 'get' + direction + 'CursorOffset',\n offset = this[action](e, this._selectionDirection === 'right');\n if (e.shiftKey) {\n this.moveCursorWithShift(offset);\n }\n else {\n this.moveCursorWithoutShift(offset);\n }\n if (offset !== 0) {\n this.setSelectionInBoundaries();\n this.abortCursorAnimation();\n this._currentCursorOpacity = 1;\n this.initDelayedCursor();\n this._fireSelectionChanged();\n this._updateTextarea();\n }\n },\n\n /**\n * Moves cursor with shift\n * @param {Number} offset\n */\n moveCursorWithShift: function(offset) {\n var newSelection = this._selectionDirection === 'left'\n ? this.selectionStart + offset\n : this.selectionEnd + offset;\n this.setSelectionStartEndWithShift(this.selectionStart, this.selectionEnd, newSelection);\n return offset !== 0;\n },\n\n /**\n * Moves cursor up without shift\n * @param {Number} offset\n */\n moveCursorWithoutShift: function(offset) {\n if (offset < 0) {\n this.selectionStart += offset;\n this.selectionEnd = this.selectionStart;\n }\n else {\n this.selectionEnd += offset;\n this.selectionStart = this.selectionEnd;\n }\n return offset !== 0;\n },\n\n /**\n * Moves cursor left\n * @param {Event} e Event object\n */\n moveCursorLeft: function(e) {\n if (this.selectionStart === 0 && this.selectionEnd === 0) {\n return;\n }\n this._moveCursorLeftOrRight('Left', e);\n },\n\n /**\n * @private\n * @return {Boolean} true if a change happened\n */\n _move: function(e, prop, direction) {\n var newValue;\n if (e.altKey) {\n newValue = this['findWordBoundary' + direction](this[prop]);\n }\n else if (e.metaKey || e.keyCode === 35 || e.keyCode === 36 ) {\n newValue = this['findLineBoundary' + direction](this[prop]);\n }\n else {\n this[prop] += direction === 'Left' ? -1 : 1;\n return true;\n }\n if (typeof newValue !== undefined && this[prop] !== newValue) {\n this[prop] = newValue;\n return true;\n }\n },\n\n /**\n * @private\n */\n _moveLeft: function(e, prop) {\n return this._move(e, prop, 'Left');\n },\n\n /**\n * @private\n */\n _moveRight: function(e, prop) {\n return this._move(e, prop, 'Right');\n },\n\n /**\n * Moves cursor left without keeping selection\n * @param {Event} e\n */\n moveCursorLeftWithoutShift: function(e) {\n var change = true;\n this._selectionDirection = 'left';\n\n // only move cursor when there is no selection,\n // otherwise we discard it, and leave cursor on same place\n if (this.selectionEnd === this.selectionStart && this.selectionStart !== 0) {\n change = this._moveLeft(e, 'selectionStart');\n\n }\n this.selectionEnd = this.selectionStart;\n return change;\n },\n\n /**\n * Moves cursor left while keeping selection\n * @param {Event} e\n */\n moveCursorLeftWithShift: function(e) {\n if (this._selectionDirection === 'right' && this.selectionStart !== this.selectionEnd) {\n return this._moveLeft(e, 'selectionEnd');\n }\n else if (this.selectionStart !== 0){\n this._selectionDirection = 'left';\n return this._moveLeft(e, 'selectionStart');\n }\n },\n\n /**\n * Moves cursor right\n * @param {Event} e Event object\n */\n moveCursorRight: function(e) {\n if (this.selectionStart >= this._text.length && this.selectionEnd >= this._text.length) {\n return;\n }\n this._moveCursorLeftOrRight('Right', e);\n },\n\n /**\n * Moves cursor right or Left, fires event\n * @param {String} direction 'Left', 'Right'\n * @param {Event} e Event object\n */\n _moveCursorLeftOrRight: function(direction, e) {\n var actionName = 'moveCursor' + direction + 'With';\n this._currentCursorOpacity = 1;\n\n if (e.shiftKey) {\n actionName += 'Shift';\n }\n else {\n actionName += 'outShift';\n }\n if (this[actionName](e)) {\n this.abortCursorAnimation();\n this.initDelayedCursor();\n this._fireSelectionChanged();\n this._updateTextarea();\n }\n },\n\n /**\n * Moves cursor right while keeping selection\n * @param {Event} e\n */\n moveCursorRightWithShift: function(e) {\n if (this._selectionDirection === 'left' && this.selectionStart !== this.selectionEnd) {\n return this._moveRight(e, 'selectionStart');\n }\n else if (this.selectionEnd !== this._text.length) {\n this._selectionDirection = 'right';\n return this._moveRight(e, 'selectionEnd');\n }\n },\n\n /**\n * Moves cursor right without keeping selection\n * @param {Event} e Event object\n */\n moveCursorRightWithoutShift: function(e) {\n var changed = true;\n this._selectionDirection = 'right';\n\n if (this.selectionStart === this.selectionEnd) {\n changed = this._moveRight(e, 'selectionStart');\n this.selectionEnd = this.selectionStart;\n }\n else {\n this.selectionStart = this.selectionEnd;\n }\n return changed;\n },\n\n /**\n * Removes characters from start/end\n * start/end ar per grapheme position in _text array.\n *\n * @param {Number} start\n * @param {Number} end default to start + 1\n */\n removeChars: function(start, end) {\n if (typeof end === 'undefined') {\n end = start + 1;\n }\n this.removeStyleFromTo(start, end);\n this._text.splice(start, end - start);\n this.text = this._text.join('');\n this.set('dirty', true);\n if (this._shouldClearDimensionCache()) {\n this.initDimensions();\n this.setCoords();\n }\n this._removeExtraneousStyles();\n },\n\n /**\n * insert characters at start position, before start position.\n * start equal 1 it means the text get inserted between actual grapheme 0 and 1\n * if style array is provided, it must be as the same length of text in graphemes\n * if end is provided and is bigger than start, old text is replaced.\n * start/end ar per grapheme position in _text array.\n *\n * @param {String} text text to insert\n * @param {Array} style array of style objects\n * @param {Number} start\n * @param {Number} end default to start + 1\n */\n insertChars: function(text, style, start, end) {\n if (typeof end === 'undefined') {\n end = start;\n }\n if (end > start) {\n this.removeStyleFromTo(start, end);\n }\n var graphemes = fabric.util.string.graphemeSplit(text);\n this.insertNewStyleBlock(graphemes, start, style);\n this._text = [].concat(this._text.slice(0, start), graphemes, this._text.slice(end));\n this.text = this._text.join('');\n this.set('dirty', true);\n if (this._shouldClearDimensionCache()) {\n this.initDimensions();\n this.setCoords();\n }\n this._removeExtraneousStyles();\n },\n\n});\n\n\n/* _TO_SVG_START_ */\n(function() {\n var toFixed = fabric.util.toFixed,\n multipleSpacesRegex = / +/g;\n\n fabric.util.object.extend(fabric.Text.prototype, /** @lends fabric.Text.prototype */ {\n\n /**\n * Returns SVG representation of an instance\n * @param {Function} [reviver] Method for further parsing of svg representation.\n * @return {String} svg representation of an instance\n */\n _toSVG: function() {\n var offsets = this._getSVGLeftTopOffsets(),\n textAndBg = this._getSVGTextAndBg(offsets.textTop, offsets.textLeft);\n return this._wrapSVGTextAndBg(textAndBg);\n },\n\n /**\n * Returns svg representation of an instance\n * @param {Function} [reviver] Method for further parsing of svg representation.\n * @return {String} svg representation of an instance\n */\n toSVG: function(reviver) {\n return this._createBaseSVGMarkup(\n this._toSVG(),\n { reviver: reviver, noStyle: true, withShadow: true }\n );\n },\n\n /**\n * @private\n */\n _getSVGLeftTopOffsets: function() {\n return {\n textLeft: -this.width / 2,\n textTop: -this.height / 2,\n lineTop: this.getHeightOfLine(0)\n };\n },\n\n /**\n * @private\n */\n _wrapSVGTextAndBg: function(textAndBg) {\n var noShadow = true,\n textDecoration = this.getSvgTextDecoration(this);\n return [\n textAndBg.textBgRects.join(''),\n '\\t\\t',\n textAndBg.textSpans.join(''),\n '\\n'\n ];\n },\n\n /**\n * @private\n * @param {Number} textTopOffset Text top offset\n * @param {Number} textLeftOffset Text left offset\n * @return {Object}\n */\n _getSVGTextAndBg: function(textTopOffset, textLeftOffset) {\n var textSpans = [],\n textBgRects = [],\n height = textTopOffset, lineOffset;\n // bounding-box background\n this._setSVGBg(textBgRects);\n\n // text and text-background\n for (var i = 0, len = this._textLines.length; i < len; i++) {\n lineOffset = this._getLineLeftOffset(i);\n if (this.textBackgroundColor || this.styleHas('textBackgroundColor', i)) {\n this._setSVGTextLineBg(textBgRects, i, textLeftOffset + lineOffset, height);\n }\n this._setSVGTextLineText(textSpans, i, textLeftOffset + lineOffset, height);\n height += this.getHeightOfLine(i);\n }\n\n return {\n textSpans: textSpans,\n textBgRects: textBgRects\n };\n },\n\n /**\n * @private\n */\n _createTextCharSpan: function(_char, styleDecl, left, top) {\n var shouldUseWhitespace = _char !== _char.trim() || _char.match(multipleSpacesRegex),\n styleProps = this.getSvgSpanStyles(styleDecl, shouldUseWhitespace),\n fillStyles = styleProps ? 'style=\"' + styleProps + '\"' : '',\n dy = styleDecl.deltaY, dySpan = '',\n NUM_FRACTION_DIGITS = fabric.Object.NUM_FRACTION_DIGITS;\n if (dy) {\n dySpan = ' dy=\"' + toFixed(dy, NUM_FRACTION_DIGITS) + '\" ';\n }\n return [\n '',\n fabric.util.string.escapeXml(_char),\n ''\n ].join('');\n },\n\n _setSVGTextLineText: function(textSpans, lineIndex, textLeftOffset, textTopOffset) {\n // set proper line offset\n var lineHeight = this.getHeightOfLine(lineIndex),\n isJustify = this.textAlign.indexOf('justify') !== -1,\n actualStyle,\n nextStyle,\n charsToRender = '',\n charBox, style,\n boxWidth = 0,\n line = this._textLines[lineIndex],\n timeToRender;\n\n textTopOffset += lineHeight * (1 - this._fontSizeFraction) / this.lineHeight;\n for (var i = 0, len = line.length - 1; i <= len; i++) {\n timeToRender = i === len || this.charSpacing;\n charsToRender += line[i];\n charBox = this.__charBounds[lineIndex][i];\n if (boxWidth === 0) {\n textLeftOffset += charBox.kernedWidth - charBox.width;\n boxWidth += charBox.width;\n }\n else {\n boxWidth += charBox.kernedWidth;\n }\n if (isJustify && !timeToRender) {\n if (this._reSpaceAndTab.test(line[i])) {\n timeToRender = true;\n }\n }\n if (!timeToRender) {\n // if we have charSpacing, we render char by char\n actualStyle = actualStyle || this.getCompleteStyleDeclaration(lineIndex, i);\n nextStyle = this.getCompleteStyleDeclaration(lineIndex, i + 1);\n timeToRender = this._hasStyleChangedForSvg(actualStyle, nextStyle);\n }\n if (timeToRender) {\n style = this._getStyleDeclaration(lineIndex, i) || { };\n textSpans.push(this._createTextCharSpan(charsToRender, style, textLeftOffset, textTopOffset));\n charsToRender = '';\n actualStyle = nextStyle;\n textLeftOffset += boxWidth;\n boxWidth = 0;\n }\n }\n },\n\n _pushTextBgRect: function(textBgRects, color, left, top, width, height) {\n var NUM_FRACTION_DIGITS = fabric.Object.NUM_FRACTION_DIGITS;\n textBgRects.push(\n '\\t\\t\\n');\n },\n\n _setSVGTextLineBg: function(textBgRects, i, leftOffset, textTopOffset) {\n var line = this._textLines[i],\n heightOfLine = this.getHeightOfLine(i) / this.lineHeight,\n boxWidth = 0,\n boxStart = 0,\n charBox, currentColor,\n lastColor = this.getValueOfPropertyAt(i, 0, 'textBackgroundColor');\n for (var j = 0, jlen = line.length; j < jlen; j++) {\n charBox = this.__charBounds[i][j];\n currentColor = this.getValueOfPropertyAt(i, j, 'textBackgroundColor');\n if (currentColor !== lastColor) {\n lastColor && this._pushTextBgRect(textBgRects, lastColor, leftOffset + boxStart,\n textTopOffset, boxWidth, heightOfLine);\n boxStart = charBox.left;\n boxWidth = charBox.width;\n lastColor = currentColor;\n }\n else {\n boxWidth += charBox.kernedWidth;\n }\n }\n currentColor && this._pushTextBgRect(textBgRects, currentColor, leftOffset + boxStart,\n textTopOffset, boxWidth, heightOfLine);\n },\n\n /**\n * Adobe Illustrator (at least CS5) is unable to render rgba()-based fill values\n * we work around it by \"moving\" alpha channel into opacity attribute and setting fill's alpha to 1\n *\n * @private\n * @param {*} value\n * @return {String}\n */\n _getFillAttributes: function(value) {\n var fillColor = (value && typeof value === 'string') ? new fabric.Color(value) : '';\n if (!fillColor || !fillColor.getSource() || fillColor.getAlpha() === 1) {\n return 'fill=\"' + value + '\"';\n }\n return 'opacity=\"' + fillColor.getAlpha() + '\" fill=\"' + fillColor.setAlpha(1).toRgb() + '\"';\n },\n\n /**\n * @private\n */\n _getSVGLineTopOffset: function(lineIndex) {\n var lineTopOffset = 0, lastHeight = 0;\n for (var j = 0; j < lineIndex; j++) {\n lineTopOffset += this.getHeightOfLine(j);\n }\n lastHeight = this.getHeightOfLine(j);\n return {\n lineTop: lineTopOffset,\n offset: (this._fontSizeMult - this._fontSizeFraction) * lastHeight / (this.lineHeight * this._fontSizeMult)\n };\n },\n\n /**\n * Returns styles-string for svg-export\n * @param {Boolean} skipShadow a boolean to skip shadow filter output\n * @return {String}\n */\n getSvgStyles: function(skipShadow) {\n var svgStyle = fabric.Object.prototype.getSvgStyles.call(this, skipShadow);\n return svgStyle + ' white-space: pre;';\n },\n });\n})();\n/* _TO_SVG_END_ */\n\n\n(function(global) {\n\n 'use strict';\n\n var fabric = global.fabric || (global.fabric = {});\n\n /**\n * Textbox class, based on IText, allows the user to resize the text rectangle\n * and wraps lines automatically. Textboxes have their Y scaling locked, the\n * user can only change width. Height is adjusted automatically based on the\n * wrapping of lines.\n * @class fabric.Textbox\n * @extends fabric.IText\n * @mixes fabric.Observable\n * @return {fabric.Textbox} thisArg\n * @see {@link fabric.Textbox#initialize} for constructor definition\n */\n fabric.Textbox = fabric.util.createClass(fabric.IText, fabric.Observable, {\n\n /**\n * Type of an object\n * @type String\n * @default\n */\n type: 'textbox',\n\n /**\n * Minimum width of textbox, in pixels.\n * @type Number\n * @default\n */\n minWidth: 20,\n\n /**\n * Minimum calculated width of a textbox, in pixels.\n * fixed to 2 so that an empty textbox cannot go to 0\n * and is still selectable without text.\n * @type Number\n * @default\n */\n dynamicMinWidth: 2,\n\n /**\n * Cached array of text wrapping.\n * @type Array\n */\n __cachedLines: null,\n\n /**\n * Override standard Object class values\n */\n lockScalingFlip: true,\n\n /**\n * Override standard Object class values\n * Textbox needs this on false\n */\n noScaleCache: false,\n\n /**\n * Properties which when set cause object to change dimensions\n * @type Object\n * @private\n */\n _dimensionAffectingProps: fabric.Text.prototype._dimensionAffectingProps.concat('width'),\n\n /**\n * Use this regular expression to split strings in breakable lines\n * @private\n */\n _wordJoiners: /[ \\t\\r]/,\n\n /**\n * Use this boolean property in order to split strings that have no white space concept.\n * this is a cheap way to help with chinese/japanese\n * @type Boolean\n * @since 2.6.0\n */\n splitByGrapheme: false,\n\n /**\n * Unlike superclass's version of this function, Textbox does not update\n * its width.\n * @private\n * @override\n */\n initDimensions: function() {\n if (this.__skipDimension) {\n return;\n }\n this.isEditing && this.initDelayedCursor();\n this.clearContextTop();\n this._clearCache();\n // clear dynamicMinWidth as it will be different after we re-wrap line\n this.dynamicMinWidth = 0;\n // wrap lines\n this._styleMap = this._generateStyleMap(this._splitText());\n // if after wrapping, the width is smaller than dynamicMinWidth, change the width and re-wrap\n if (this.dynamicMinWidth > this.width) {\n this._set('width', this.dynamicMinWidth);\n }\n if (this.textAlign.indexOf('justify') !== -1) {\n // once text is measured we need to make space fatter to make justified text.\n this.enlargeSpaces();\n }\n // clear cache and re-calculate height\n this.height = this.calcTextHeight();\n this.saveState({ propertySet: '_dimensionAffectingProps' });\n },\n\n /**\n * Generate an object that translates the style object so that it is\n * broken up by visual lines (new lines and automatic wrapping).\n * The original text styles object is broken up by actual lines (new lines only),\n * which is only sufficient for Text / IText\n * @private\n */\n _generateStyleMap: function(textInfo) {\n var realLineCount = 0,\n realLineCharCount = 0,\n charCount = 0,\n map = {};\n\n for (var i = 0; i < textInfo.graphemeLines.length; i++) {\n if (textInfo.graphemeText[charCount] === '\\n' && i > 0) {\n realLineCharCount = 0;\n charCount++;\n realLineCount++;\n }\n else if (!this.splitByGrapheme && this._reSpaceAndTab.test(textInfo.graphemeText[charCount]) && i > 0) {\n // this case deals with space's that are removed from end of lines when wrapping\n realLineCharCount++;\n charCount++;\n }\n\n map[i] = { line: realLineCount, offset: realLineCharCount };\n\n charCount += textInfo.graphemeLines[i].length;\n realLineCharCount += textInfo.graphemeLines[i].length;\n }\n\n return map;\n },\n\n /**\n * Returns true if object has a style property or has it on a specified line\n * @param {Number} lineIndex\n * @return {Boolean}\n */\n styleHas: function(property, lineIndex) {\n if (this._styleMap && !this.isWrapping) {\n var map = this._styleMap[lineIndex];\n if (map) {\n lineIndex = map.line;\n }\n }\n return fabric.Text.prototype.styleHas.call(this, property, lineIndex);\n },\n\n /**\n * Returns true if object has no styling or no styling in a line\n * @param {Number} lineIndex , lineIndex is on wrapped lines.\n * @return {Boolean}\n */\n isEmptyStyles: function(lineIndex) {\n if (!this.styles) {\n return true;\n }\n var offset = 0, nextLineIndex = lineIndex + 1, nextOffset, obj, shouldLimit = false,\n map = this._styleMap[lineIndex], mapNextLine = this._styleMap[lineIndex + 1];\n if (map) {\n lineIndex = map.line;\n offset = map.offset;\n }\n if (mapNextLine) {\n nextLineIndex = mapNextLine.line;\n shouldLimit = nextLineIndex === lineIndex;\n nextOffset = mapNextLine.offset;\n }\n obj = typeof lineIndex === 'undefined' ? this.styles : { line: this.styles[lineIndex] };\n for (var p1 in obj) {\n for (var p2 in obj[p1]) {\n if (p2 >= offset && (!shouldLimit || p2 < nextOffset)) {\n // eslint-disable-next-line no-unused-vars\n for (var p3 in obj[p1][p2]) {\n return false;\n }\n }\n }\n }\n return true;\n },\n\n /**\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @private\n */\n _getStyleDeclaration: function(lineIndex, charIndex) {\n if (this._styleMap && !this.isWrapping) {\n var map = this._styleMap[lineIndex];\n if (!map) {\n return null;\n }\n lineIndex = map.line;\n charIndex = map.offset + charIndex;\n }\n return this.callSuper('_getStyleDeclaration', lineIndex, charIndex);\n },\n\n /**\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @param {Object} style\n * @private\n */\n _setStyleDeclaration: function(lineIndex, charIndex, style) {\n var map = this._styleMap[lineIndex];\n lineIndex = map.line;\n charIndex = map.offset + charIndex;\n\n this.styles[lineIndex][charIndex] = style;\n },\n\n /**\n * @param {Number} lineIndex\n * @param {Number} charIndex\n * @private\n */\n _deleteStyleDeclaration: function(lineIndex, charIndex) {\n var map = this._styleMap[lineIndex];\n lineIndex = map.line;\n charIndex = map.offset + charIndex;\n delete this.styles[lineIndex][charIndex];\n },\n\n /**\n * probably broken need a fix\n * Returns the real style line that correspond to the wrapped lineIndex line\n * Used just to verify if the line does exist or not.\n * @param {Number} lineIndex\n * @returns {Boolean} if the line exists or not\n * @private\n */\n _getLineStyle: function(lineIndex) {\n var map = this._styleMap[lineIndex];\n return !!this.styles[map.line];\n },\n\n /**\n * Set the line style to an empty object so that is initialized\n * @param {Number} lineIndex\n * @param {Object} style\n * @private\n */\n _setLineStyle: function(lineIndex) {\n var map = this._styleMap[lineIndex];\n this.styles[map.line] = {};\n },\n\n /**\n * Wraps text using the 'width' property of Textbox. First this function\n * splits text on newlines, so we preserve newlines entered by the user.\n * Then it wraps each line using the width of the Textbox by calling\n * _wrapLine().\n * @param {Array} lines The string array of text that is split into lines\n * @param {Number} desiredWidth width you want to wrap to\n * @returns {Array} Array of lines\n */\n _wrapText: function(lines, desiredWidth) {\n var wrapped = [], i;\n this.isWrapping = true;\n for (i = 0; i < lines.length; i++) {\n wrapped = wrapped.concat(this._wrapLine(lines[i], i, desiredWidth));\n }\n this.isWrapping = false;\n return wrapped;\n },\n\n /**\n * Helper function to measure a string of text, given its lineIndex and charIndex offset\n * it gets called when charBounds are not available yet.\n * @param {CanvasRenderingContext2D} ctx\n * @param {String} text\n * @param {number} lineIndex\n * @param {number} charOffset\n * @returns {number}\n * @private\n */\n _measureWord: function(word, lineIndex, charOffset) {\n var width = 0, prevGrapheme, skipLeft = true;\n charOffset = charOffset || 0;\n for (var i = 0, len = word.length; i < len; i++) {\n var box = this._getGraphemeBox(word[i], lineIndex, i + charOffset, prevGrapheme, skipLeft);\n width += box.kernedWidth;\n prevGrapheme = word[i];\n }\n return width;\n },\n\n /**\n * Wraps a line of text using the width of the Textbox and a context.\n * @param {Array} line The grapheme array that represent the line\n * @param {Number} lineIndex\n * @param {Number} desiredWidth width you want to wrap the line to\n * @param {Number} reservedSpace space to remove from wrapping for custom functionalities\n * @returns {Array} Array of line(s) into which the given text is wrapped\n * to.\n */\n _wrapLine: function(_line, lineIndex, desiredWidth, reservedSpace) {\n var lineWidth = 0,\n splitByGrapheme = this.splitByGrapheme,\n graphemeLines = [],\n line = [],\n // spaces in different languages?\n words = splitByGrapheme ? fabric.util.string.graphemeSplit(_line) : _line.split(this._wordJoiners),\n word = '',\n offset = 0,\n infix = splitByGrapheme ? '' : ' ',\n wordWidth = 0,\n infixWidth = 0,\n largestWordWidth = 0,\n lineJustStarted = true,\n additionalSpace = this._getWidthOfCharSpacing(),\n reservedSpace = reservedSpace || 0;\n // fix a difference between split and graphemeSplit\n if (words.length === 0) {\n words.push([]);\n }\n desiredWidth -= reservedSpace;\n for (var i = 0; i < words.length; i++) {\n // if using splitByGrapheme words are already in graphemes.\n word = splitByGrapheme ? words[i] : fabric.util.string.graphemeSplit(words[i]);\n wordWidth = this._measureWord(word, lineIndex, offset);\n offset += word.length;\n\n lineWidth += infixWidth + wordWidth - additionalSpace;\n if (lineWidth > desiredWidth && !lineJustStarted) {\n graphemeLines.push(line);\n line = [];\n lineWidth = wordWidth;\n lineJustStarted = true;\n }\n else {\n lineWidth += additionalSpace;\n }\n\n if (!lineJustStarted && !splitByGrapheme) {\n line.push(infix);\n }\n line = line.concat(word);\n\n infixWidth = splitByGrapheme ? 0 : this._measureWord([infix], lineIndex, offset);\n offset++;\n lineJustStarted = false;\n // keep track of largest word\n if (wordWidth > largestWordWidth) {\n largestWordWidth = wordWidth;\n }\n }\n\n i && graphemeLines.push(line);\n\n if (largestWordWidth + reservedSpace > this.dynamicMinWidth) {\n this.dynamicMinWidth = largestWordWidth - additionalSpace + reservedSpace;\n }\n return graphemeLines;\n },\n\n /**\n * Detect if the text line is ended with an hard break\n * text and itext do not have wrapping, return false\n * @param {Number} lineIndex text to split\n * @return {Boolean}\n */\n isEndOfWrapping: function(lineIndex) {\n if (!this._styleMap[lineIndex + 1]) {\n // is last line, return true;\n return true;\n }\n if (this._styleMap[lineIndex + 1].line !== this._styleMap[lineIndex].line) {\n // this is last line before a line break, return true;\n return true;\n }\n return false;\n },\n\n /**\n * Detect if a line has a linebreak and so we need to account for it when moving\n * and counting style.\n * @return Number\n */\n missingNewlineOffset: function(lineIndex) {\n if (this.splitByGrapheme) {\n return this.isEndOfWrapping(lineIndex) ? 1 : 0;\n }\n return 1;\n },\n\n /**\n * Gets lines of text to render in the Textbox. This function calculates\n * text wrapping on the fly every time it is called.\n * @param {String} text text to split\n * @returns {Array} Array of lines in the Textbox.\n * @override\n */\n _splitTextIntoLines: function(text) {\n var newText = fabric.Text.prototype._splitTextIntoLines.call(this, text),\n graphemeLines = this._wrapText(newText.lines, this.width),\n lines = new Array(graphemeLines.length);\n for (var i = 0; i < graphemeLines.length; i++) {\n lines[i] = graphemeLines[i].join('');\n }\n newText.lines = lines;\n newText.graphemeLines = graphemeLines;\n return newText;\n },\n\n getMinWidth: function() {\n return Math.max(this.minWidth, this.dynamicMinWidth);\n },\n\n _removeExtraneousStyles: function() {\n var linesToKeep = {};\n for (var prop in this._styleMap) {\n if (this._textLines[prop]) {\n linesToKeep[this._styleMap[prop].line] = 1;\n }\n }\n for (var prop in this.styles) {\n if (!linesToKeep[prop]) {\n delete this.styles[prop];\n }\n }\n },\n\n /**\n * Returns object representation of an instance\n * @method toObject\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} object representation of an instance\n */\n toObject: function(propertiesToInclude) {\n return this.callSuper('toObject', ['minWidth', 'splitByGrapheme'].concat(propertiesToInclude));\n }\n });\n\n /**\n * Returns fabric.Textbox instance from an object representation\n * @static\n * @memberOf fabric.Textbox\n * @param {Object} object Object to create an instance from\n * @param {Function} [callback] Callback to invoke when an fabric.Textbox instance is created\n */\n fabric.Textbox.fromObject = function(object, callback) {\n return fabric.Object._fromObject('Textbox', object, callback, 'text');\n };\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function() {\n\n var controlsUtils = fabric.controlsUtils,\n scaleSkewStyleHandler = controlsUtils.scaleSkewCursorStyleHandler,\n scaleStyleHandler = controlsUtils.scaleCursorStyleHandler,\n scalingEqually = controlsUtils.scalingEqually,\n scalingYOrSkewingX = controlsUtils.scalingYOrSkewingX,\n scalingXOrSkewingY = controlsUtils.scalingXOrSkewingY,\n scaleOrSkewActionName = controlsUtils.scaleOrSkewActionName,\n objectControls = fabric.Object.prototype.controls;\n\n objectControls.ml = new fabric.Control({\n x: -0.5,\n y: 0,\n cursorStyleHandler: scaleSkewStyleHandler,\n actionHandler: scalingXOrSkewingY,\n getActionName: scaleOrSkewActionName,\n });\n\n objectControls.mr = new fabric.Control({\n x: 0.5,\n y: 0,\n cursorStyleHandler: scaleSkewStyleHandler,\n actionHandler: scalingXOrSkewingY,\n getActionName: scaleOrSkewActionName,\n });\n\n objectControls.mb = new fabric.Control({\n x: 0,\n y: 0.5,\n cursorStyleHandler: scaleSkewStyleHandler,\n actionHandler: scalingYOrSkewingX,\n getActionName: scaleOrSkewActionName,\n });\n\n objectControls.mt = new fabric.Control({\n x: 0,\n y: -0.5,\n cursorStyleHandler: scaleSkewStyleHandler,\n actionHandler: scalingYOrSkewingX,\n getActionName: scaleOrSkewActionName,\n });\n\n objectControls.tl = new fabric.Control({\n x: -0.5,\n y: -0.5,\n cursorStyleHandler: scaleStyleHandler,\n actionHandler: scalingEqually\n });\n\n objectControls.tr = new fabric.Control({\n x: 0.5,\n y: -0.5,\n cursorStyleHandler: scaleStyleHandler,\n actionHandler: scalingEqually\n });\n\n objectControls.bl = new fabric.Control({\n x: -0.5,\n y: 0.5,\n cursorStyleHandler: scaleStyleHandler,\n actionHandler: scalingEqually\n });\n\n objectControls.br = new fabric.Control({\n x: 0.5,\n y: 0.5,\n cursorStyleHandler: scaleStyleHandler,\n actionHandler: scalingEqually\n });\n\n objectControls.mtr = new fabric.Control({\n x: 0,\n y: -0.5,\n actionHandler: controlsUtils.rotationWithSnapping,\n cursorStyleHandler: controlsUtils.rotationStyleHandler,\n offsetY: -40,\n withConnection: true,\n actionName: 'rotate',\n });\n\n if (fabric.Textbox) {\n // this is breaking the prototype inheritance, no time / ideas to fix it.\n // is important to document that if you want to have all objects to have a\n // specific custom control, you have to add it to Object prototype and to Textbox\n // prototype. The controls are shared as references. So changes to control `tr`\n // can still apply to all objects if needed.\n var textBoxControls = fabric.Textbox.prototype.controls = { };\n\n textBoxControls.mtr = objectControls.mtr;\n textBoxControls.tr = objectControls.tr;\n textBoxControls.br = objectControls.br;\n textBoxControls.tl = objectControls.tl;\n textBoxControls.bl = objectControls.bl;\n textBoxControls.mt = objectControls.mt;\n textBoxControls.mb = objectControls.mb;\n\n textBoxControls.mr = new fabric.Control({\n x: 0.5,\n y: 0,\n actionHandler: controlsUtils.changeWidth,\n cursorStyleHandler: scaleSkewStyleHandler,\n actionName: 'resizing',\n });\n\n textBoxControls.ml = new fabric.Control({\n x: -0.5,\n y: 0,\n actionHandler: controlsUtils.changeWidth,\n cursorStyleHandler: scaleSkewStyleHandler,\n actionName: 'resizing',\n });\n }\n})();\n\n","/**\n * @license\n * Lodash \n * Copyright OpenJS Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n;(function() {\n\n /** Used as a safe reference for `undefined` in pre-ES5 environments. */\n var undefined;\n\n /** Used as the semantic version number. */\n var VERSION = '4.17.21';\n\n /** Used as the size to enable large array optimizations. */\n var LARGE_ARRAY_SIZE = 200;\n\n /** Error message constants. */\n var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',\n FUNC_ERROR_TEXT = 'Expected a function',\n INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`';\n\n /** Used to stand-in for `undefined` hash values. */\n var HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n /** Used as the maximum memoize cache size. */\n var MAX_MEMOIZE_SIZE = 500;\n\n /** Used as the internal argument placeholder. */\n var PLACEHOLDER = '__lodash_placeholder__';\n\n /** Used to compose bitmasks for cloning. */\n var CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n /** Used to compose bitmasks for value comparisons. */\n var COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n /** Used to compose bitmasks for function metadata. */\n var WRAP_BIND_FLAG = 1,\n WRAP_BIND_KEY_FLAG = 2,\n WRAP_CURRY_BOUND_FLAG = 4,\n WRAP_CURRY_FLAG = 8,\n WRAP_CURRY_RIGHT_FLAG = 16,\n WRAP_PARTIAL_FLAG = 32,\n WRAP_PARTIAL_RIGHT_FLAG = 64,\n WRAP_ARY_FLAG = 128,\n WRAP_REARG_FLAG = 256,\n WRAP_FLIP_FLAG = 512;\n\n /** Used as default options for `_.truncate`. */\n var DEFAULT_TRUNC_LENGTH = 30,\n DEFAULT_TRUNC_OMISSION = '...';\n\n /** Used to detect hot functions by number of calls within a span of milliseconds. */\n var HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n /** Used to indicate the type of lazy iteratees. */\n var LAZY_FILTER_FLAG = 1,\n LAZY_MAP_FLAG = 2,\n LAZY_WHILE_FLAG = 3;\n\n /** Used as references for various `Number` constants. */\n var INFINITY = 1 / 0,\n MAX_SAFE_INTEGER = 9007199254740991,\n MAX_INTEGER = 1.7976931348623157e+308,\n NAN = 0 / 0;\n\n /** Used as references for the maximum length and index of an array. */\n var MAX_ARRAY_LENGTH = 4294967295,\n MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n /** Used to associate wrap methods with their bit flags. */\n var wrapFlags = [\n ['ary', WRAP_ARY_FLAG],\n ['bind', WRAP_BIND_FLAG],\n ['bindKey', WRAP_BIND_KEY_FLAG],\n ['curry', WRAP_CURRY_FLAG],\n ['curryRight', WRAP_CURRY_RIGHT_FLAG],\n ['flip', WRAP_FLIP_FLAG],\n ['partial', WRAP_PARTIAL_FLAG],\n ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],\n ['rearg', WRAP_REARG_FLAG]\n ];\n\n /** `Object#toString` result references. */\n var argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n domExcTag = '[object DOMException]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n nullTag = '[object Null]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n proxyTag = '[object Proxy]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n undefinedTag = '[object Undefined]',\n weakMapTag = '[object WeakMap]',\n weakSetTag = '[object WeakSet]';\n\n var arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n /** Used to match empty string literals in compiled template source. */\n var reEmptyStringLeading = /\\b__p \\+= '';/g,\n reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n /** Used to match HTML entities and HTML characters. */\n var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\n reUnescapedHtml = /[&<>\"']/g,\n reHasEscapedHtml = RegExp(reEscapedHtml.source),\n reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n /** Used to match template delimiters. */\n var reEscape = /<%-([\\s\\S]+?)%>/g,\n reEvaluate = /<%([\\s\\S]+?)%>/g,\n reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\n /** Used to match property names within property paths. */\n var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/,\n rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n /**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n reHasRegExpChar = RegExp(reRegExpChar.source);\n\n /** Used to match leading whitespace. */\n var reTrimStart = /^\\s+/;\n\n /** Used to match a single whitespace character. */\n var reWhitespace = /\\s/;\n\n /** Used to match wrap detail comments. */\n var reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,\n reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n reSplitDetails = /,? & /;\n\n /** Used to match words composed of alphanumeric characters. */\n var reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n /**\n * Used to validate the `validate` option in `_.template` variable.\n *\n * Forbids characters which could potentially change the meaning of the function argument definition:\n * - \"(),\" (modification of function parameters)\n * - \"=\" (default value)\n * - \"[]{}\" (destructuring of function parameters)\n * - \"/\" (beginning of a comment)\n * - whitespace\n */\n var reForbiddenIdentifierChars = /[()=,{}\\[\\]\\/\\s]/;\n\n /** Used to match backslashes in property paths. */\n var reEscapeChar = /\\\\(\\\\)?/g;\n\n /**\n * Used to match\n * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n */\n var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n /** Used to match `RegExp` flags from their coerced string values. */\n var reFlags = /\\w*$/;\n\n /** Used to detect bad signed hexadecimal string values. */\n var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n /** Used to detect binary string values. */\n var reIsBinary = /^0b[01]+$/i;\n\n /** Used to detect host constructors (Safari). */\n var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n /** Used to detect octal string values. */\n var reIsOctal = /^0o[0-7]+$/i;\n\n /** Used to detect unsigned integer values. */\n var reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n /** Used to match Latin Unicode letters (excluding mathematical operators). */\n var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n /** Used to ensure capturing order of template delimiters. */\n var reNoMatch = /($^)/;\n\n /** Used to match unescaped characters in compiled string literals. */\n var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n\n /** Used to compose unicode character classes. */\n var rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsDingbatRange = '\\\\u2700-\\\\u27bf',\n rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n rsPunctuationRange = '\\\\u2000-\\\\u206f',\n rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n rsVarRange = '\\\\ufe0e\\\\ufe0f',\n rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n /** Used to compose unicode capture groups. */\n var rsApos = \"['\\u2019]\",\n rsAstral = '[' + rsAstralRange + ']',\n rsBreak = '[' + rsBreakRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsDigits = '\\\\d+',\n rsDingbat = '[' + rsDingbatRange + ']',\n rsLower = '[' + rsLowerRange + ']',\n rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsUpper = '[' + rsUpperRange + ']',\n rsZWJ = '\\\\u200d';\n\n /** Used to compose unicode regexes. */\n var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n /** Used to match apostrophes. */\n var reApos = RegExp(rsApos, 'g');\n\n /**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\n var reComboMark = RegExp(rsCombo, 'g');\n\n /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\n var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n /** Used to match complex or compound words. */\n var reUnicodeWord = RegExp([\n rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n rsUpper + '+' + rsOptContrUpper,\n rsOrdUpper,\n rsOrdLower,\n rsDigits,\n rsEmoji\n ].join('|'), 'g');\n\n /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\n var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');\n\n /** Used to detect strings that need a more robust regexp to match words. */\n var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n /** Used to assign default `context` object properties. */\n var contextProps = [\n 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',\n 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',\n 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',\n 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',\n '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'\n ];\n\n /** Used to make template sourceURLs easier to identify. */\n var templateCounter = -1;\n\n /** Used to identify `toStringTag` values of typed arrays. */\n var typedArrayTags = {};\n typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n typedArrayTags[uint32Tag] = true;\n typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\n typedArrayTags[errorTag] = typedArrayTags[funcTag] =\n typedArrayTags[mapTag] = typedArrayTags[numberTag] =\n typedArrayTags[objectTag] = typedArrayTags[regexpTag] =\n typedArrayTags[setTag] = typedArrayTags[stringTag] =\n typedArrayTags[weakMapTag] = false;\n\n /** Used to identify `toStringTag` values supported by `_.clone`. */\n var cloneableTags = {};\n cloneableTags[argsTag] = cloneableTags[arrayTag] =\n cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\n cloneableTags[boolTag] = cloneableTags[dateTag] =\n cloneableTags[float32Tag] = cloneableTags[float64Tag] =\n cloneableTags[int8Tag] = cloneableTags[int16Tag] =\n cloneableTags[int32Tag] = cloneableTags[mapTag] =\n cloneableTags[numberTag] = cloneableTags[objectTag] =\n cloneableTags[regexpTag] = cloneableTags[setTag] =\n cloneableTags[stringTag] = cloneableTags[symbolTag] =\n cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n cloneableTags[errorTag] = cloneableTags[funcTag] =\n cloneableTags[weakMapTag] = false;\n\n /** Used to map Latin Unicode letters to basic Latin letters. */\n var deburredLetters = {\n // Latin-1 Supplement block.\n '\\xc0': 'A', '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n '\\xe0': 'a', '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n '\\xc7': 'C', '\\xe7': 'c',\n '\\xd0': 'D', '\\xf0': 'd',\n '\\xc8': 'E', '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n '\\xe8': 'e', '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n '\\xcc': 'I', '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n '\\xec': 'i', '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n '\\xd1': 'N', '\\xf1': 'n',\n '\\xd2': 'O', '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n '\\xf2': 'o', '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n '\\xd9': 'U', '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n '\\xf9': 'u', '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n '\\xdd': 'Y', '\\xfd': 'y', '\\xff': 'y',\n '\\xc6': 'Ae', '\\xe6': 'ae',\n '\\xde': 'Th', '\\xfe': 'th',\n '\\xdf': 'ss',\n // Latin Extended-A block.\n '\\u0100': 'A', '\\u0102': 'A', '\\u0104': 'A',\n '\\u0101': 'a', '\\u0103': 'a', '\\u0105': 'a',\n '\\u0106': 'C', '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n '\\u0107': 'c', '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n '\\u010e': 'D', '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n '\\u0112': 'E', '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n '\\u0113': 'e', '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n '\\u011c': 'G', '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n '\\u011d': 'g', '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n '\\u0124': 'H', '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n '\\u0128': 'I', '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n '\\u0129': 'i', '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n '\\u0134': 'J', '\\u0135': 'j',\n '\\u0136': 'K', '\\u0137': 'k', '\\u0138': 'k',\n '\\u0139': 'L', '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n '\\u013a': 'l', '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n '\\u0143': 'N', '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n '\\u0144': 'n', '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n '\\u014c': 'O', '\\u014e': 'O', '\\u0150': 'O',\n '\\u014d': 'o', '\\u014f': 'o', '\\u0151': 'o',\n '\\u0154': 'R', '\\u0156': 'R', '\\u0158': 'R',\n '\\u0155': 'r', '\\u0157': 'r', '\\u0159': 'r',\n '\\u015a': 'S', '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n '\\u015b': 's', '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n '\\u0162': 'T', '\\u0164': 'T', '\\u0166': 'T',\n '\\u0163': 't', '\\u0165': 't', '\\u0167': 't',\n '\\u0168': 'U', '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n '\\u0169': 'u', '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n '\\u0174': 'W', '\\u0175': 'w',\n '\\u0176': 'Y', '\\u0177': 'y', '\\u0178': 'Y',\n '\\u0179': 'Z', '\\u017b': 'Z', '\\u017d': 'Z',\n '\\u017a': 'z', '\\u017c': 'z', '\\u017e': 'z',\n '\\u0132': 'IJ', '\\u0133': 'ij',\n '\\u0152': 'Oe', '\\u0153': 'oe',\n '\\u0149': \"'n\", '\\u017f': 's'\n };\n\n /** Used to map characters to HTML entities. */\n var htmlEscapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n };\n\n /** Used to map HTML entities to characters. */\n var htmlUnescapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\"\n };\n\n /** Used to escape characters for inclusion in compiled string literals. */\n var stringEscapes = {\n '\\\\': '\\\\',\n \"'\": \"'\",\n '\\n': 'n',\n '\\r': 'r',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n };\n\n /** Built-in method references without a dependency on `root`. */\n var freeParseFloat = parseFloat,\n freeParseInt = parseInt;\n\n /** Detect free variable `global` from Node.js. */\n var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n /** Detect free variable `self`. */\n var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n /** Used as a reference to the global object. */\n var root = freeGlobal || freeSelf || Function('return this')();\n\n /** Detect free variable `exports`. */\n var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n /** Detect free variable `module`. */\n var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n /** Detect the popular CommonJS extension `module.exports`. */\n var moduleExports = freeModule && freeModule.exports === freeExports;\n\n /** Detect free variable `process` from Node.js. */\n var freeProcess = moduleExports && freeGlobal.process;\n\n /** Used to access faster Node.js helpers. */\n var nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n }());\n\n /* Node.js helper references. */\n var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,\n nodeIsDate = nodeUtil && nodeUtil.isDate,\n nodeIsMap = nodeUtil && nodeUtil.isMap,\n nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,\n nodeIsSet = nodeUtil && nodeUtil.isSet,\n nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\n function apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n }\n\n /**\n * A specialized version of `baseAggregator` for arrays.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function arrayAggregator(array, setter, iteratee, accumulator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n var value = array[index];\n setter(accumulator, value, iteratee(value), array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.forEachRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEachRight(array, iteratee) {\n var length = array == null ? 0 : array.length;\n\n while (length--) {\n if (iteratee(array[length], length, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.every` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n */\n function arrayEvery(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (!predicate(array[index], index, array)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n }\n\n /**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n }\n\n /**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\n function arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n }\n\n /**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.reduceRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the last element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduceRight(array, iteratee, accumulator, initAccum) {\n var length = array == null ? 0 : array.length;\n if (initAccum && length) {\n accumulator = array[--length];\n }\n while (length--) {\n accumulator = iteratee(accumulator, array[length], length, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Gets the size of an ASCII `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n var asciiSize = baseProperty('length');\n\n /**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function asciiToArray(string) {\n return string.split('');\n }\n\n /**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function asciiWords(string) {\n return string.match(reAsciiWord) || [];\n }\n\n /**\n * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n * without support for iteratee shorthands, which iterates over `collection`\n * using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the found element or its key, else `undefined`.\n */\n function baseFindKey(collection, predicate, eachFunc) {\n var result;\n eachFunc(collection, function(value, key, collection) {\n if (predicate(value, key, collection)) {\n result = key;\n return false;\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n }\n\n /**\n * This function is like `baseIndexOf` except that it accepts a comparator.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOfWith(array, value, fromIndex, comparator) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (comparator(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\n function baseIsNaN(value) {\n return value !== value;\n }\n\n /**\n * The base implementation of `_.mean` and `_.meanBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the mean.\n */\n function baseMean(array, iteratee) {\n var length = array == null ? 0 : array.length;\n return length ? (baseSum(array, iteratee) / length) : NAN;\n }\n\n /**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyOf(object) {\n return function(key) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.reduce` and `_.reduceRight`, without support\n * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} accumulator The initial value.\n * @param {boolean} initAccum Specify using the first or last element of\n * `collection` as the initial value.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the accumulated value.\n */\n function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n eachFunc(collection, function(value, index, collection) {\n accumulator = initAccum\n ? (initAccum = false, value)\n : iteratee(accumulator, value, index, collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\n function baseSortBy(array, comparer) {\n var length = array.length;\n\n array.sort(comparer);\n while (length--) {\n array[length] = array[length].value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.sum` and `_.sumBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the sum.\n */\n function baseSum(array, iteratee) {\n var result,\n index = -1,\n length = array.length;\n\n while (++index < length) {\n var current = iteratee(array[index]);\n if (current !== undefined) {\n result = result === undefined ? current : (result + current);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\n function baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n * of key-value pairs for `object` corresponding to the property names of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the key-value pairs.\n */\n function baseToPairs(object, props) {\n return arrayMap(props, function(key) {\n return [key, object[key]];\n });\n }\n\n /**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\n function baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n }\n\n /**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\n function baseUnary(func) {\n return function(value) {\n return func(value);\n };\n }\n\n /**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\n function baseValues(object, props) {\n return arrayMap(props, function(key) {\n return object[key];\n });\n }\n\n /**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function cacheHas(cache, key) {\n return cache.has(key);\n }\n\n /**\n * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the first unmatched string symbol.\n */\n function charsStartIndex(strSymbols, chrSymbols) {\n var index = -1,\n length = strSymbols.length;\n\n while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the last unmatched string symbol.\n */\n function charsEndIndex(strSymbols, chrSymbols) {\n var index = strSymbols.length;\n\n while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Gets the number of `placeholder` occurrences in `array`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} placeholder The placeholder to search for.\n * @returns {number} Returns the placeholder count.\n */\n function countHolders(array, placeholder) {\n var length = array.length,\n result = 0;\n\n while (length--) {\n if (array[length] === placeholder) {\n ++result;\n }\n }\n return result;\n }\n\n /**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\n var deburrLetter = basePropertyOf(deburredLetters);\n\n /**\n * Used by `_.escape` to convert characters to HTML entities.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n var escapeHtmlChar = basePropertyOf(htmlEscapes);\n\n /**\n * Used by `_.template` to escape characters for inclusion in compiled string literals.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n function escapeStringChar(chr) {\n return '\\\\' + stringEscapes[chr];\n }\n\n /**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function getValue(object, key) {\n return object == null ? undefined : object[key];\n }\n\n /**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\n function hasUnicode(string) {\n return reHasUnicode.test(string);\n }\n\n /**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\n function hasUnicodeWord(string) {\n return reHasUnicodeWord.test(string);\n }\n\n /**\n * Converts `iterator` to an array.\n *\n * @private\n * @param {Object} iterator The iterator to convert.\n * @returns {Array} Returns the converted array.\n */\n function iteratorToArray(iterator) {\n var data,\n result = [];\n\n while (!(data = iterator.next()).done) {\n result.push(data.value);\n }\n return result;\n }\n\n /**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\n function mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n }\n\n /**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\n function overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n }\n\n /**\n * Replaces all `placeholder` elements in `array` with an internal placeholder\n * and returns an array of their indexes.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {*} placeholder The placeholder to replace.\n * @returns {Array} Returns the new array of placeholder indexes.\n */\n function replaceHolders(array, placeholder) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value === placeholder || value === PLACEHOLDER) {\n array[index] = PLACEHOLDER;\n result[resIndex++] = index;\n }\n }\n return result;\n }\n\n /**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\n function setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n }\n\n /**\n * Converts `set` to its value-value pairs.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the value-value pairs.\n */\n function setToPairs(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = [value, value];\n });\n return result;\n }\n\n /**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * A specialized version of `_.lastIndexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictLastIndexOf(array, value, fromIndex) {\n var index = fromIndex + 1;\n while (index--) {\n if (array[index] === value) {\n return index;\n }\n }\n return index;\n }\n\n /**\n * Gets the number of symbols in `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the string size.\n */\n function stringSize(string) {\n return hasUnicode(string)\n ? unicodeSize(string)\n : asciiSize(string);\n }\n\n /**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function stringToArray(string) {\n return hasUnicode(string)\n ? unicodeToArray(string)\n : asciiToArray(string);\n }\n\n /**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\n function trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n }\n\n /**\n * Used by `_.unescape` to convert HTML entities to characters.\n *\n * @private\n * @param {string} chr The matched character to unescape.\n * @returns {string} Returns the unescaped character.\n */\n var unescapeHtmlChar = basePropertyOf(htmlUnescapes);\n\n /**\n * Gets the size of a Unicode `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n function unicodeSize(string) {\n var result = reUnicode.lastIndex = 0;\n while (reUnicode.test(string)) {\n ++result;\n }\n return result;\n }\n\n /**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function unicodeToArray(string) {\n return string.match(reUnicode) || [];\n }\n\n /**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function unicodeWords(string) {\n return string.match(reUnicodeWord) || [];\n }\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * Create a new pristine `lodash` function using the `context` object.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Util\n * @param {Object} [context=root] The context object.\n * @returns {Function} Returns a new `lodash` function.\n * @example\n *\n * _.mixin({ 'foo': _.constant('foo') });\n *\n * var lodash = _.runInContext();\n * lodash.mixin({ 'bar': lodash.constant('bar') });\n *\n * _.isFunction(_.foo);\n * // => true\n * _.isFunction(_.bar);\n * // => false\n *\n * lodash.isFunction(lodash.foo);\n * // => false\n * lodash.isFunction(lodash.bar);\n * // => true\n *\n * // Create a suped-up `defer` in Node.js.\n * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\n */\n var runInContext = (function runInContext(context) {\n context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));\n\n /** Built-in constructor references. */\n var Array = context.Array,\n Date = context.Date,\n Error = context.Error,\n Function = context.Function,\n Math = context.Math,\n Object = context.Object,\n RegExp = context.RegExp,\n String = context.String,\n TypeError = context.TypeError;\n\n /** Used for built-in method references. */\n var arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n /** Used to detect overreaching core-js shims. */\n var coreJsData = context['__core-js_shared__'];\n\n /** Used to resolve the decompiled source of functions. */\n var funcToString = funcProto.toString;\n\n /** Used to check objects for own properties. */\n var hasOwnProperty = objectProto.hasOwnProperty;\n\n /** Used to generate unique IDs. */\n var idCounter = 0;\n\n /** Used to detect methods masquerading as native. */\n var maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n }());\n\n /**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n var nativeObjectToString = objectProto.toString;\n\n /** Used to infer the `Object` constructor. */\n var objectCtorString = funcToString.call(Object);\n\n /** Used to restore the original `_` reference in `_.noConflict`. */\n var oldDash = root._;\n\n /** Used to detect if a method is native. */\n var reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n );\n\n /** Built-in value references. */\n var Buffer = moduleExports ? context.Buffer : undefined,\n Symbol = context.Symbol,\n Uint8Array = context.Uint8Array,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n getPrototype = overArg(Object.getPrototypeOf, Object),\n objectCreate = Object.create,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,\n symIterator = Symbol ? Symbol.iterator : undefined,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n var defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n }());\n\n /** Mocked built-ins. */\n var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,\n ctxNow = Date && Date.now !== root.Date.now && Date.now,\n ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;\n\n /* Built-in method references for those with the same name as other `lodash` methods. */\n var nativeCeil = Math.ceil,\n nativeFloor = Math.floor,\n nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeIsFinite = context.isFinite,\n nativeJoin = arrayProto.join,\n nativeKeys = overArg(Object.keys, Object),\n nativeMax = Math.max,\n nativeMin = Math.min,\n nativeNow = Date.now,\n nativeParseInt = context.parseInt,\n nativeRandom = Math.random,\n nativeReverse = arrayProto.reverse;\n\n /* Built-in method references that are verified to be native. */\n var DataView = getNative(context, 'DataView'),\n Map = getNative(context, 'Map'),\n Promise = getNative(context, 'Promise'),\n Set = getNative(context, 'Set'),\n WeakMap = getNative(context, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n /** Used to store function metadata. */\n var metaMap = WeakMap && new WeakMap;\n\n /** Used to lookup unminified function names. */\n var realNames = {};\n\n /** Used to detect maps, sets, and weakmaps. */\n var dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n /** Used to convert symbols to primitives and strings. */\n var symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` object which wraps `value` to enable implicit method\n * chain sequences. Methods that operate on and return arrays, collections,\n * and functions can be chained together. Methods that retrieve a single value\n * or may return a primitive value will automatically end the chain sequence\n * and return the unwrapped value. Otherwise, the value must be unwrapped\n * with `_#value`.\n *\n * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n * enabled using `_.chain`.\n *\n * The execution of chained methods is lazy, that is, it's deferred until\n * `_#value` is implicitly or explicitly called.\n *\n * Lazy evaluation allows several methods to support shortcut fusion.\n * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n * the creation of intermediate arrays and can greatly reduce the number of\n * iteratee executions. Sections of a chain sequence qualify for shortcut\n * fusion if the section is applied to an array and iteratees accept only\n * one argument. The heuristic for whether a section qualifies for shortcut\n * fusion is subject to change.\n *\n * Chaining is supported in custom builds as long as the `_#value` method is\n * directly or indirectly included in the build.\n *\n * In addition to lodash methods, wrappers have `Array` and `String` methods.\n *\n * The wrapper `Array` methods are:\n * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n *\n * The wrapper `String` methods are:\n * `replace` and `split`\n *\n * The wrapper methods that support shortcut fusion are:\n * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n *\n * The chainable wrapper methods are:\n * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n * `zipObject`, `zipObjectDeep`, and `zipWith`\n *\n * The wrapper methods that are **not** chainable by default are:\n * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n * `upperFirst`, `value`, and `words`\n *\n * @name _\n * @constructor\n * @category Seq\n * @param {*} value The value to wrap in a `lodash` instance.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2, 3]);\n *\n * // Returns an unwrapped value.\n * wrapped.reduce(_.add);\n * // => 6\n *\n * // Returns a wrapped value.\n * var squares = wrapped.map(square);\n *\n * _.isArray(squares);\n * // => false\n *\n * _.isArray(squares.value());\n * // => true\n */\n function lodash(value) {\n if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n if (value instanceof LodashWrapper) {\n return value;\n }\n if (hasOwnProperty.call(value, '__wrapped__')) {\n return wrapperClone(value);\n }\n }\n return new LodashWrapper(value);\n }\n\n /**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\n var baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n }());\n\n /**\n * The function whose prototype chain sequence wrappers inherit from.\n *\n * @private\n */\n function baseLodash() {\n // No operation performed.\n }\n\n /**\n * The base constructor for creating `lodash` wrapper objects.\n *\n * @private\n * @param {*} value The value to wrap.\n * @param {boolean} [chainAll] Enable explicit method chain sequences.\n */\n function LodashWrapper(value, chainAll) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__chain__ = !!chainAll;\n this.__index__ = 0;\n this.__values__ = undefined;\n }\n\n /**\n * By default, the template delimiters used by lodash are like those in\n * embedded Ruby (ERB) as well as ES2015 template strings. Change the\n * following template settings to use alternative delimiters.\n *\n * @static\n * @memberOf _\n * @type {Object}\n */\n lodash.templateSettings = {\n\n /**\n * Used to detect `data` property values to be HTML-escaped.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'escape': reEscape,\n\n /**\n * Used to detect code to be evaluated.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'evaluate': reEvaluate,\n\n /**\n * Used to detect `data` property values to inject.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'interpolate': reInterpolate,\n\n /**\n * Used to reference the data object in the template text.\n *\n * @memberOf _.templateSettings\n * @type {string}\n */\n 'variable': '',\n\n /**\n * Used to import variables into the compiled template.\n *\n * @memberOf _.templateSettings\n * @type {Object}\n */\n 'imports': {\n\n /**\n * A reference to the `lodash` function.\n *\n * @memberOf _.templateSettings.imports\n * @type {Function}\n */\n '_': lodash\n }\n };\n\n // Ensure wrappers are instances of `baseLodash`.\n lodash.prototype = baseLodash.prototype;\n lodash.prototype.constructor = lodash;\n\n LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n LodashWrapper.prototype.constructor = LodashWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n *\n * @private\n * @constructor\n * @param {*} value The value to wrap.\n */\n function LazyWrapper(value) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__dir__ = 1;\n this.__filtered__ = false;\n this.__iteratees__ = [];\n this.__takeCount__ = MAX_ARRAY_LENGTH;\n this.__views__ = [];\n }\n\n /**\n * Creates a clone of the lazy wrapper object.\n *\n * @private\n * @name clone\n * @memberOf LazyWrapper\n * @returns {Object} Returns the cloned `LazyWrapper` object.\n */\n function lazyClone() {\n var result = new LazyWrapper(this.__wrapped__);\n result.__actions__ = copyArray(this.__actions__);\n result.__dir__ = this.__dir__;\n result.__filtered__ = this.__filtered__;\n result.__iteratees__ = copyArray(this.__iteratees__);\n result.__takeCount__ = this.__takeCount__;\n result.__views__ = copyArray(this.__views__);\n return result;\n }\n\n /**\n * Reverses the direction of lazy iteration.\n *\n * @private\n * @name reverse\n * @memberOf LazyWrapper\n * @returns {Object} Returns the new reversed `LazyWrapper` object.\n */\n function lazyReverse() {\n if (this.__filtered__) {\n var result = new LazyWrapper(this);\n result.__dir__ = -1;\n result.__filtered__ = true;\n } else {\n result = this.clone();\n result.__dir__ *= -1;\n }\n return result;\n }\n\n /**\n * Extracts the unwrapped value from its lazy wrapper.\n *\n * @private\n * @name value\n * @memberOf LazyWrapper\n * @returns {*} Returns the unwrapped value.\n */\n function lazyValue() {\n var array = this.__wrapped__.value(),\n dir = this.__dir__,\n isArr = isArray(array),\n isRight = dir < 0,\n arrLength = isArr ? array.length : 0,\n view = getView(0, arrLength, this.__views__),\n start = view.start,\n end = view.end,\n length = end - start,\n index = isRight ? end : (start - 1),\n iteratees = this.__iteratees__,\n iterLength = iteratees.length,\n resIndex = 0,\n takeCount = nativeMin(length, this.__takeCount__);\n\n if (!isArr || (!isRight && arrLength == length && takeCount == length)) {\n return baseWrapperValue(array, this.__actions__);\n }\n var result = [];\n\n outer:\n while (length-- && resIndex < takeCount) {\n index += dir;\n\n var iterIndex = -1,\n value = array[index];\n\n while (++iterIndex < iterLength) {\n var data = iteratees[iterIndex],\n iteratee = data.iteratee,\n type = data.type,\n computed = iteratee(value);\n\n if (type == LAZY_MAP_FLAG) {\n value = computed;\n } else if (!computed) {\n if (type == LAZY_FILTER_FLAG) {\n continue outer;\n } else {\n break outer;\n }\n }\n }\n result[resIndex++] = value;\n }\n return result;\n }\n\n // Ensure `LazyWrapper` is an instance of `baseLodash`.\n LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n LazyWrapper.prototype.constructor = LazyWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\n function hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n }\n\n /**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n }\n\n /**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\n function hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n }\n\n // Add methods to `Hash`.\n Hash.prototype.clear = hashClear;\n Hash.prototype['delete'] = hashDelete;\n Hash.prototype.get = hashGet;\n Hash.prototype.has = hashHas;\n Hash.prototype.set = hashSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\n function listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n }\n\n /**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n }\n\n /**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n }\n\n /**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\n function listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n }\n\n // Add methods to `ListCache`.\n ListCache.prototype.clear = listCacheClear;\n ListCache.prototype['delete'] = listCacheDelete;\n ListCache.prototype.get = listCacheGet;\n ListCache.prototype.has = listCacheHas;\n ListCache.prototype.set = listCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\n function mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n }\n\n /**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function mapCacheGet(key) {\n return getMapData(this, key).get(key);\n }\n\n /**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function mapCacheHas(key) {\n return getMapData(this, key).has(key);\n }\n\n /**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\n function mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n }\n\n // Add methods to `MapCache`.\n MapCache.prototype.clear = mapCacheClear;\n MapCache.prototype['delete'] = mapCacheDelete;\n MapCache.prototype.get = mapCacheGet;\n MapCache.prototype.has = mapCacheHas;\n MapCache.prototype.set = mapCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\n function SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n }\n\n /**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\n function setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n }\n\n /**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\n function setCacheHas(value) {\n return this.__data__.has(value);\n }\n\n // Add methods to `SetCache`.\n SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n SetCache.prototype.has = setCacheHas;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n }\n\n /**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\n function stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n }\n\n /**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function stackGet(key) {\n return this.__data__.get(key);\n }\n\n /**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function stackHas(key) {\n return this.__data__.has(key);\n }\n\n /**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\n function stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n }\n\n // Add methods to `Stack`.\n Stack.prototype.clear = stackClear;\n Stack.prototype['delete'] = stackDelete;\n Stack.prototype.get = stackGet;\n Stack.prototype.has = stackHas;\n Stack.prototype.set = stackSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\n function arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.sample` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @returns {*} Returns the random element.\n */\n function arraySample(array) {\n var length = array.length;\n return length ? array[baseRandom(0, length - 1)] : undefined;\n }\n\n /**\n * A specialized version of `_.sampleSize` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function arraySampleSize(array, n) {\n return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));\n }\n\n /**\n * A specialized version of `_.shuffle` for arrays.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function arrayShuffle(array) {\n return shuffleSelf(copyArray(array));\n }\n\n /**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n }\n\n /**\n * Aggregates elements of `collection` on `accumulator` with keys transformed\n * by `iteratee` and values set by `setter`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseAggregator(collection, setter, iteratee, accumulator) {\n baseEach(collection, function(value, key, collection) {\n setter(accumulator, value, iteratee(value), collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n }\n\n /**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n }\n\n /**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n }\n\n /**\n * The base implementation of `_.at` without support for individual paths.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {string[]} paths The property paths to pick.\n * @returns {Array} Returns the picked elements.\n */\n function baseAt(object, paths) {\n var index = -1,\n length = paths.length,\n result = Array(length),\n skip = object == null;\n\n while (++index < length) {\n result[index] = skip ? undefined : get(object, paths[index]);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.clamp` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n */\n function baseClamp(number, lower, upper) {\n if (number === number) {\n if (upper !== undefined) {\n number = number <= upper ? number : upper;\n }\n if (lower !== undefined) {\n number = number >= lower ? number : lower;\n }\n }\n return number;\n }\n\n /**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\n function baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n } else if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n }\n\n /**\n * The base implementation of `_.conforms` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property predicates to conform to.\n * @returns {Function} Returns the new spec function.\n */\n function baseConforms(source) {\n var props = keys(source);\n return function(object) {\n return baseConformsTo(object, source, props);\n };\n }\n\n /**\n * The base implementation of `_.conformsTo` which accepts `props` to check.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n */\n function baseConformsTo(object, source, props) {\n var length = props.length;\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (length--) {\n var key = props[length],\n predicate = source[key],\n value = object[key];\n\n if ((value === undefined && !(key in object)) || !predicate(value)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.delay` and `_.defer` which accepts `args`\n * to provide to `func`.\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {Array} args The arguments to provide to `func`.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n function baseDelay(func, wait, args) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return setTimeout(function() { func.apply(undefined, args); }, wait);\n }\n\n /**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\n function baseDifference(array, values, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n isCommon = true,\n length = array.length,\n result = [],\n valuesLength = values.length;\n\n if (!length) {\n return result;\n }\n if (iteratee) {\n values = arrayMap(values, baseUnary(iteratee));\n }\n if (comparator) {\n includes = arrayIncludesWith;\n isCommon = false;\n }\n else if (values.length >= LARGE_ARRAY_SIZE) {\n includes = cacheHas;\n isCommon = false;\n values = new SetCache(values);\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee == null ? value : iteratee(value);\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var valuesIndex = valuesLength;\n while (valuesIndex--) {\n if (values[valuesIndex] === computed) {\n continue outer;\n }\n }\n result.push(value);\n }\n else if (!includes(values, computed, comparator)) {\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEach = createBaseEach(baseForOwn);\n\n /**\n * The base implementation of `_.forEachRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEachRight = createBaseEach(baseForOwnRight, true);\n\n /**\n * The base implementation of `_.every` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`\n */\n function baseEvery(collection, predicate) {\n var result = true;\n baseEach(collection, function(value, index, collection) {\n result = !!predicate(value, index, collection);\n return result;\n });\n return result;\n }\n\n /**\n * The base implementation of methods like `_.max` and `_.min` which accepts a\n * `comparator` to determine the extremum value.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The iteratee invoked per iteration.\n * @param {Function} comparator The comparator used to compare values.\n * @returns {*} Returns the extremum value.\n */\n function baseExtremum(array, iteratee, comparator) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n var value = array[index],\n current = iteratee(value);\n\n if (current != null && (computed === undefined\n ? (current === current && !isSymbol(current))\n : comparator(current, computed)\n )) {\n var computed = current,\n result = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.fill` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n */\n function baseFill(array, value, start, end) {\n var length = array.length;\n\n start = toInteger(start);\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = (end === undefined || end > length) ? length : toInteger(end);\n if (end < 0) {\n end += length;\n }\n end = start > end ? 0 : toLength(end);\n while (start < end) {\n array[start++] = value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.filter` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function baseFilter(collection, predicate) {\n var result = [];\n baseEach(collection, function(value, index, collection) {\n if (predicate(value, index, collection)) {\n result.push(value);\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\n function baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseFor = createBaseFor();\n\n /**\n * This function is like `baseFor` except that it iterates over properties\n * in the opposite order.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseForRight = createBaseFor(true);\n\n /**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.forOwnRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwnRight(object, iteratee) {\n return object && baseForRight(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.functions` which creates an array of\n * `object` function property names filtered from `props`.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Array} props The property names to filter.\n * @returns {Array} Returns the function names.\n */\n function baseFunctions(object, props) {\n return arrayFilter(props, function(key) {\n return isFunction(object[key]);\n });\n }\n\n /**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\n function baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n }\n\n /**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n }\n\n /**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n function baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n }\n\n /**\n * The base implementation of `_.gt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n */\n function baseGt(value, other) {\n return value > other;\n }\n\n /**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHas(object, key) {\n return object != null && hasOwnProperty.call(object, key);\n }\n\n /**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHasIn(object, key) {\n return object != null && key in Object(object);\n }\n\n /**\n * The base implementation of `_.inRange` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to check.\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n */\n function baseInRange(number, start, end) {\n return number >= nativeMin(start, end) && number < nativeMax(start, end);\n }\n\n /**\n * The base implementation of methods like `_.intersection`, without support\n * for iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of shared values.\n */\n function baseIntersection(arrays, iteratee, comparator) {\n var includes = comparator ? arrayIncludesWith : arrayIncludes,\n length = arrays[0].length,\n othLength = arrays.length,\n othIndex = othLength,\n caches = Array(othLength),\n maxLength = Infinity,\n result = [];\n\n while (othIndex--) {\n var array = arrays[othIndex];\n if (othIndex && iteratee) {\n array = arrayMap(array, baseUnary(iteratee));\n }\n maxLength = nativeMin(array.length, maxLength);\n caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n ? new SetCache(othIndex && array)\n : undefined;\n }\n array = arrays[0];\n\n var index = -1,\n seen = caches[0];\n\n outer:\n while (++index < length && result.length < maxLength) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (!(seen\n ? cacheHas(seen, computed)\n : includes(result, computed, comparator)\n )) {\n othIndex = othLength;\n while (--othIndex) {\n var cache = caches[othIndex];\n if (!(cache\n ? cacheHas(cache, computed)\n : includes(arrays[othIndex], computed, comparator))\n ) {\n continue outer;\n }\n }\n if (seen) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.invert` and `_.invertBy` which inverts\n * `object` with values transformed by `iteratee` and set by `setter`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform values.\n * @param {Object} accumulator The initial inverted object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseInverter(object, setter, iteratee, accumulator) {\n baseForOwn(object, function(value, key, object) {\n setter(accumulator, iteratee(value), key, object);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.invoke` without support for individual\n * method arguments.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {Array} args The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n */\n function baseInvoke(object, path, args) {\n path = castPath(path, object);\n object = parent(object, path);\n var func = object == null ? object : object[toKey(last(path))];\n return func == null ? undefined : apply(func, object, args);\n }\n\n /**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\n function baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n }\n\n /**\n * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n */\n function baseIsArrayBuffer(value) {\n return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;\n }\n\n /**\n * The base implementation of `_.isDate` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n */\n function baseIsDate(value) {\n return isObjectLike(value) && baseGetTag(value) == dateTag;\n }\n\n /**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\n function baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n }\n\n /**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n }\n\n /**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\n function baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n }\n\n /**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\n function baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\n function baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n }\n\n /**\n * The base implementation of `_.isRegExp` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n */\n function baseIsRegExp(value) {\n return isObjectLike(value) && baseGetTag(value) == regexpTag;\n }\n\n /**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\n function baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n }\n\n /**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\n function baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n }\n\n /**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\n function baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n }\n\n /**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.lt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n */\n function baseLt(value, other) {\n return value < other;\n }\n\n /**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n }\n\n /**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n }\n\n /**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n }\n\n /**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n stack || (stack = new Stack);\n if (isObject(srcValue)) {\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n }\n\n /**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || isFunction(objValue)) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n }\n\n /**\n * The base implementation of `_.nth` which doesn't coerce arguments.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {number} n The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n */\n function baseNth(array, n) {\n var length = array.length;\n if (!length) {\n return;\n }\n n += n < 0 ? length : 0;\n return isIndex(n, length) ? array[n] : undefined;\n }\n\n /**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\n function baseOrderBy(collection, iteratees, orders) {\n if (iteratees.length) {\n iteratees = arrayMap(iteratees, function(iteratee) {\n if (isArray(iteratee)) {\n return function(value) {\n return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n }\n }\n return iteratee;\n });\n } else {\n iteratees = [identity];\n }\n\n var index = -1;\n iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n\n var result = baseMap(collection, function(value, key, collection) {\n var criteria = arrayMap(iteratees, function(iteratee) {\n return iteratee(value);\n });\n return { 'criteria': criteria, 'index': ++index, 'value': value };\n });\n\n return baseSortBy(result, function(object, other) {\n return compareMultiple(object, other, orders);\n });\n }\n\n /**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @returns {Object} Returns the new object.\n */\n function basePick(object, paths) {\n return basePickBy(object, paths, function(value, path) {\n return hasIn(object, path);\n });\n }\n\n /**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\n function basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {};\n\n while (++index < length) {\n var path = paths[index],\n value = baseGet(object, path);\n\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n }\n\n /**\n * The base implementation of `_.pullAllBy` without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n */\n function basePullAll(array, values, iteratee, comparator) {\n var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\n index = -1,\n length = values.length,\n seen = array;\n\n if (array === values) {\n values = copyArray(values);\n }\n if (iteratee) {\n seen = arrayMap(array, baseUnary(iteratee));\n }\n while (++index < length) {\n var fromIndex = 0,\n value = values[index],\n computed = iteratee ? iteratee(value) : value;\n\n while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\n if (seen !== array) {\n splice.call(seen, fromIndex, 1);\n }\n splice.call(array, fromIndex, 1);\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.pullAt` without support for individual\n * indexes or capturing the removed elements.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {number[]} indexes The indexes of elements to remove.\n * @returns {Array} Returns `array`.\n */\n function basePullAt(array, indexes) {\n var length = array ? indexes.length : 0,\n lastIndex = length - 1;\n\n while (length--) {\n var index = indexes[length];\n if (length == lastIndex || index !== previous) {\n var previous = index;\n if (isIndex(index)) {\n splice.call(array, index, 1);\n } else {\n baseUnset(array, index);\n }\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.random` without support for returning\n * floating-point numbers.\n *\n * @private\n * @param {number} lower The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the random number.\n */\n function baseRandom(lower, upper) {\n return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n }\n\n /**\n * The base implementation of `_.range` and `_.rangeRight` which doesn't\n * coerce arguments.\n *\n * @private\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @param {number} step The value to increment or decrement by.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the range of numbers.\n */\n function baseRange(start, end, step, fromRight) {\n var index = -1,\n length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n result = Array(length);\n\n while (length--) {\n result[fromRight ? length : ++index] = start;\n start += step;\n }\n return result;\n }\n\n /**\n * The base implementation of `_.repeat` which doesn't coerce arguments.\n *\n * @private\n * @param {string} string The string to repeat.\n * @param {number} n The number of times to repeat the string.\n * @returns {string} Returns the repeated string.\n */\n function baseRepeat(string, n) {\n var result = '';\n if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\n return result;\n }\n // Leverage the exponentiation by squaring algorithm for a faster repeat.\n // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n do {\n if (n % 2) {\n result += string;\n }\n n = nativeFloor(n / 2);\n if (n) {\n string += string;\n }\n } while (n);\n\n return result;\n }\n\n /**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\n function baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n }\n\n /**\n * The base implementation of `_.sample`.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n */\n function baseSample(collection) {\n return arraySample(values(collection));\n }\n\n /**\n * The base implementation of `_.sampleSize` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function baseSampleSize(collection, n) {\n var array = values(collection);\n return shuffleSelf(array, baseClamp(n, 0, array.length));\n }\n\n /**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return object;\n }\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n }\n\n /**\n * The base implementation of `setData` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var baseSetData = !metaMap ? identity : function(func, data) {\n metaMap.set(func, data);\n return func;\n };\n\n /**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n };\n\n /**\n * The base implementation of `_.shuffle`.\n *\n * @private\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function baseShuffle(collection) {\n return shuffleSelf(values(collection));\n }\n\n /**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n }\n\n /**\n * The base implementation of `_.some` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function baseSome(collection, predicate) {\n var result;\n\n baseEach(collection, function(value, index, collection) {\n result = predicate(value, index, collection);\n return !result;\n });\n return !!result;\n }\n\n /**\n * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\n * performs a binary search of `array` to determine the index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndex(array, value, retHighest) {\n var low = 0,\n high = array == null ? low : array.length;\n\n if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n while (low < high) {\n var mid = (low + high) >>> 1,\n computed = array[mid];\n\n if (computed !== null && !isSymbol(computed) &&\n (retHighest ? (computed <= value) : (computed < value))) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return high;\n }\n return baseSortedIndexBy(array, value, identity, retHighest);\n }\n\n /**\n * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\n * which invokes `iteratee` for `value` and each element of `array` to compute\n * their sort ranking. The iteratee is invoked with one argument; (value).\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} iteratee The iteratee invoked per element.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndexBy(array, value, iteratee, retHighest) {\n var low = 0,\n high = array == null ? 0 : array.length;\n if (high === 0) {\n return 0;\n }\n\n value = iteratee(value);\n var valIsNaN = value !== value,\n valIsNull = value === null,\n valIsSymbol = isSymbol(value),\n valIsUndefined = value === undefined;\n\n while (low < high) {\n var mid = nativeFloor((low + high) / 2),\n computed = iteratee(array[mid]),\n othIsDefined = computed !== undefined,\n othIsNull = computed === null,\n othIsReflexive = computed === computed,\n othIsSymbol = isSymbol(computed);\n\n if (valIsNaN) {\n var setLow = retHighest || othIsReflexive;\n } else if (valIsUndefined) {\n setLow = othIsReflexive && (retHighest || othIsDefined);\n } else if (valIsNull) {\n setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);\n } else if (valIsSymbol) {\n setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);\n } else if (othIsNull || othIsSymbol) {\n setLow = false;\n } else {\n setLow = retHighest ? (computed <= value) : (computed < value);\n }\n if (setLow) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return nativeMin(high, MAX_ARRAY_INDEX);\n }\n\n /**\n * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseSortedUniq(array, iteratee) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n if (!index || !eq(computed, seen)) {\n var seen = computed;\n result[resIndex++] = value === 0 ? 0 : value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toNumber` which doesn't ensure correct\n * conversions of binary, hexadecimal, or octal string values.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n */\n function baseToNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n return +value;\n }\n\n /**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\n function baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\n function baseUnset(object, path) {\n path = castPath(path, object);\n object = parent(object, path);\n return object == null || delete object[toKey(last(path))];\n }\n\n /**\n * The base implementation of `_.update`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to update.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseUpdate(object, path, updater, customizer) {\n return baseSet(object, path, updater(baseGet(object, path)), customizer);\n }\n\n /**\n * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\n * without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {Function} predicate The function invoked per iteration.\n * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseWhile(array, predicate, isDrop, fromRight) {\n var length = array.length,\n index = fromRight ? length : -1;\n\n while ((fromRight ? index-- : ++index < length) &&\n predicate(array[index], index, array)) {}\n\n return isDrop\n ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\n : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\n }\n\n /**\n * The base implementation of `wrapperValue` which returns the result of\n * performing a sequence of actions on the unwrapped `value`, where each\n * successive action is supplied the return value of the previous.\n *\n * @private\n * @param {*} value The unwrapped value.\n * @param {Array} actions Actions to perform to resolve the unwrapped value.\n * @returns {*} Returns the resolved value.\n */\n function baseWrapperValue(value, actions) {\n var result = value;\n if (result instanceof LazyWrapper) {\n result = result.value();\n }\n return arrayReduce(actions, function(result, action) {\n return action.func.apply(action.thisArg, arrayPush([result], action.args));\n }, result);\n }\n\n /**\n * The base implementation of methods like `_.xor`, without support for\n * iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of values.\n */\n function baseXor(arrays, iteratee, comparator) {\n var length = arrays.length;\n if (length < 2) {\n return length ? baseUniq(arrays[0]) : [];\n }\n var index = -1,\n result = Array(length);\n\n while (++index < length) {\n var array = arrays[index],\n othIndex = -1;\n\n while (++othIndex < length) {\n if (othIndex != index) {\n result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);\n }\n }\n }\n return baseUniq(baseFlatten(result, 1), iteratee, comparator);\n }\n\n /**\n * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n *\n * @private\n * @param {Array} props The property identifiers.\n * @param {Array} values The property values.\n * @param {Function} assignFunc The function to assign values.\n * @returns {Object} Returns the new object.\n */\n function baseZipObject(props, values, assignFunc) {\n var index = -1,\n length = props.length,\n valsLength = values.length,\n result = {};\n\n while (++index < length) {\n var value = index < valsLength ? values[index] : undefined;\n assignFunc(result, props[index], value);\n }\n return result;\n }\n\n /**\n * Casts `value` to an empty array if it's not an array like object.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array|Object} Returns the cast array-like object.\n */\n function castArrayLikeObject(value) {\n return isArrayLikeObject(value) ? value : [];\n }\n\n /**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\n function castFunction(value) {\n return typeof value == 'function' ? value : identity;\n }\n\n /**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\n function castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n }\n\n /**\n * A `baseRest` alias which can be replaced with `identity` by module\n * replacement plugins.\n *\n * @private\n * @type {Function}\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n var castRest = baseRest;\n\n /**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\n function castSlice(array, start, end) {\n var length = array.length;\n end = end === undefined ? length : end;\n return (!start && end >= length) ? array : baseSlice(array, start, end);\n }\n\n /**\n * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).\n *\n * @private\n * @param {number|Object} id The timer id or timeout object of the timer to clear.\n */\n var clearTimeout = ctxClearTimeout || function(id) {\n return root.clearTimeout(id);\n };\n\n /**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\n function cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n }\n\n /**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\n function cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n }\n\n /**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\n function cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n }\n\n /**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\n function cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n }\n\n /**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\n function cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n }\n\n /**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\n function cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n }\n\n /**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\n function compareAscending(value, other) {\n if (value !== other) {\n var valIsDefined = value !== undefined,\n valIsNull = value === null,\n valIsReflexive = value === value,\n valIsSymbol = isSymbol(value);\n\n var othIsDefined = other !== undefined,\n othIsNull = other === null,\n othIsReflexive = other === other,\n othIsSymbol = isSymbol(other);\n\n if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n (valIsNull && othIsDefined && othIsReflexive) ||\n (!valIsDefined && othIsReflexive) ||\n !valIsReflexive) {\n return 1;\n }\n if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n (othIsNull && valIsDefined && valIsReflexive) ||\n (!othIsDefined && valIsReflexive) ||\n !othIsReflexive) {\n return -1;\n }\n }\n return 0;\n }\n\n /**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\n function compareMultiple(object, other, orders) {\n var index = -1,\n objCriteria = object.criteria,\n othCriteria = other.criteria,\n length = objCriteria.length,\n ordersLength = orders.length;\n\n while (++index < length) {\n var result = compareAscending(objCriteria[index], othCriteria[index]);\n if (result) {\n if (index >= ordersLength) {\n return result;\n }\n var order = orders[index];\n return result * (order == 'desc' ? -1 : 1);\n }\n }\n // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n // that causes it, under certain circumstances, to provide the same value for\n // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n // for more details.\n //\n // This also ensures a stable sort in V8 and other engines.\n // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n return object.index - other.index;\n }\n\n /**\n * Creates an array that is the composition of partially applied arguments,\n * placeholders, and provided arguments into a single array of arguments.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to prepend to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgs(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersLength = holders.length,\n leftIndex = -1,\n leftLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(leftLength + rangeLength),\n isUncurried = !isCurried;\n\n while (++leftIndex < leftLength) {\n result[leftIndex] = partials[leftIndex];\n }\n while (++argsIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[holders[argsIndex]] = args[argsIndex];\n }\n }\n while (rangeLength--) {\n result[leftIndex++] = args[argsIndex++];\n }\n return result;\n }\n\n /**\n * This function is like `composeArgs` except that the arguments composition\n * is tailored for `_.partialRight`.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to append to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgsRight(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersIndex = -1,\n holdersLength = holders.length,\n rightIndex = -1,\n rightLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(rangeLength + rightLength),\n isUncurried = !isCurried;\n\n while (++argsIndex < rangeLength) {\n result[argsIndex] = args[argsIndex];\n }\n var offset = argsIndex;\n while (++rightIndex < rightLength) {\n result[offset + rightIndex] = partials[rightIndex];\n }\n while (++holdersIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[offset + holders[holdersIndex]] = args[argsIndex++];\n }\n }\n return result;\n }\n\n /**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\n function copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n }\n\n /**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\n function copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n }\n\n /**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n }\n\n /**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n }\n\n /**\n * Creates a function like `_.groupBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} [initializer] The accumulator object initializer.\n * @returns {Function} Returns the new aggregator function.\n */\n function createAggregator(setter, initializer) {\n return function(collection, iteratee) {\n var func = isArray(collection) ? arrayAggregator : baseAggregator,\n accumulator = initializer ? initializer() : {};\n\n return func(collection, setter, getIteratee(iteratee, 2), accumulator);\n };\n }\n\n /**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\n function createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n }\n\n /**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n }\n\n /**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the optional `this`\n * binding of `thisArg`.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createBind(func, bitmask, thisArg) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return fn.apply(isBind ? thisArg : this, arguments);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\n function createCaseFirst(methodName) {\n return function(string) {\n string = toString(string);\n\n var strSymbols = hasUnicode(string)\n ? stringToArray(string)\n : undefined;\n\n var chr = strSymbols\n ? strSymbols[0]\n : string.charAt(0);\n\n var trailing = strSymbols\n ? castSlice(strSymbols, 1).join('')\n : string.slice(1);\n\n return chr[methodName]() + trailing;\n };\n }\n\n /**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\n function createCompounder(callback) {\n return function(string) {\n return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n };\n }\n\n /**\n * Creates a function that produces an instance of `Ctor` regardless of\n * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n *\n * @private\n * @param {Function} Ctor The constructor to wrap.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCtor(Ctor) {\n return function() {\n // Use a `switch` statement to work with class constructors. See\n // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n // for more details.\n var args = arguments;\n switch (args.length) {\n case 0: return new Ctor;\n case 1: return new Ctor(args[0]);\n case 2: return new Ctor(args[0], args[1]);\n case 3: return new Ctor(args[0], args[1], args[2]);\n case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n }\n var thisBinding = baseCreate(Ctor.prototype),\n result = Ctor.apply(thisBinding, args);\n\n // Mimic the constructor's `return` behavior.\n // See https://es5.github.io/#x13.2.2 for more details.\n return isObject(result) ? result : thisBinding;\n };\n }\n\n /**\n * Creates a function that wraps `func` to enable currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {number} arity The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCurry(func, bitmask, arity) {\n var Ctor = createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length,\n placeholder = getHolder(wrapper);\n\n while (index--) {\n args[index] = arguments[index];\n }\n var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)\n ? []\n : replaceHolders(args, placeholder);\n\n length -= holders.length;\n if (length < arity) {\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, undefined,\n args, holders, undefined, undefined, arity - length);\n }\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return apply(fn, this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\n function createFind(findIndexFunc) {\n return function(collection, predicate, fromIndex) {\n var iterable = Object(collection);\n if (!isArrayLike(collection)) {\n var iteratee = getIteratee(predicate, 3);\n collection = keys(collection);\n predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n }\n var index = findIndexFunc(collection, predicate, fromIndex);\n return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n };\n }\n\n /**\n * Creates a `_.flow` or `_.flowRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new flow function.\n */\n function createFlow(fromRight) {\n return flatRest(function(funcs) {\n var length = funcs.length,\n index = length,\n prereq = LodashWrapper.prototype.thru;\n\n if (fromRight) {\n funcs.reverse();\n }\n while (index--) {\n var func = funcs[index];\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (prereq && !wrapper && getFuncName(func) == 'wrapper') {\n var wrapper = new LodashWrapper([], true);\n }\n }\n index = wrapper ? index : length;\n while (++index < length) {\n func = funcs[index];\n\n var funcName = getFuncName(func),\n data = funcName == 'wrapper' ? getData(func) : undefined;\n\n if (data && isLaziable(data[0]) &&\n data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&\n !data[4].length && data[9] == 1\n ) {\n wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n } else {\n wrapper = (func.length == 1 && isLaziable(func))\n ? wrapper[funcName]()\n : wrapper.thru(func);\n }\n }\n return function() {\n var args = arguments,\n value = args[0];\n\n if (wrapper && args.length == 1 && isArray(value)) {\n return wrapper.plant(value).value();\n }\n var index = 0,\n result = length ? funcs[index].apply(this, args) : value;\n\n while (++index < length) {\n result = funcs[index].call(this, result);\n }\n return result;\n };\n });\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with optional `this`\n * binding of `thisArg`, partial application, and currying.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [partialsRight] The arguments to append to those provided\n * to the new function.\n * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n var isAry = bitmask & WRAP_ARY_FLAG,\n isBind = bitmask & WRAP_BIND_FLAG,\n isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\n isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\n isFlip = bitmask & WRAP_FLIP_FLAG,\n Ctor = isBindKey ? undefined : createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length;\n\n while (index--) {\n args[index] = arguments[index];\n }\n if (isCurried) {\n var placeholder = getHolder(wrapper),\n holdersCount = countHolders(args, placeholder);\n }\n if (partials) {\n args = composeArgs(args, partials, holders, isCurried);\n }\n if (partialsRight) {\n args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n }\n length -= holdersCount;\n if (isCurried && length < arity) {\n var newHolders = replaceHolders(args, placeholder);\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, thisArg,\n args, newHolders, argPos, ary, arity - length\n );\n }\n var thisBinding = isBind ? thisArg : this,\n fn = isBindKey ? thisBinding[func] : func;\n\n length = args.length;\n if (argPos) {\n args = reorder(args, argPos);\n } else if (isFlip && length > 1) {\n args.reverse();\n }\n if (isAry && ary < length) {\n args.length = ary;\n }\n if (this && this !== root && this instanceof wrapper) {\n fn = Ctor || createCtor(fn);\n }\n return fn.apply(thisBinding, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.invertBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} toIteratee The function to resolve iteratees.\n * @returns {Function} Returns the new inverter function.\n */\n function createInverter(setter, toIteratee) {\n return function(object, iteratee) {\n return baseInverter(object, setter, toIteratee(iteratee), {});\n };\n }\n\n /**\n * Creates a function that performs a mathematical operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @param {number} [defaultValue] The value used for `undefined` arguments.\n * @returns {Function} Returns the new mathematical operation function.\n */\n function createMathOperation(operator, defaultValue) {\n return function(value, other) {\n var result;\n if (value === undefined && other === undefined) {\n return defaultValue;\n }\n if (value !== undefined) {\n result = value;\n }\n if (other !== undefined) {\n if (result === undefined) {\n return other;\n }\n if (typeof value == 'string' || typeof other == 'string') {\n value = baseToString(value);\n other = baseToString(other);\n } else {\n value = baseToNumber(value);\n other = baseToNumber(other);\n }\n result = operator(value, other);\n }\n return result;\n };\n }\n\n /**\n * Creates a function like `_.over`.\n *\n * @private\n * @param {Function} arrayFunc The function to iterate over iteratees.\n * @returns {Function} Returns the new over function.\n */\n function createOver(arrayFunc) {\n return flatRest(function(iteratees) {\n iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n return baseRest(function(args) {\n var thisArg = this;\n return arrayFunc(iteratees, function(iteratee) {\n return apply(iteratee, thisArg, args);\n });\n });\n });\n }\n\n /**\n * Creates the padding for `string` based on `length`. The `chars` string\n * is truncated if the number of characters exceeds `length`.\n *\n * @private\n * @param {number} length The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padding for `string`.\n */\n function createPadding(length, chars) {\n chars = chars === undefined ? ' ' : baseToString(chars);\n\n var charsLength = chars.length;\n if (charsLength < 2) {\n return charsLength ? baseRepeat(chars, length) : chars;\n }\n var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));\n return hasUnicode(chars)\n ? castSlice(stringToArray(result), 0, length).join('')\n : result.slice(0, length);\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the `this` binding\n * of `thisArg` and `partials` prepended to the arguments it receives.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} partials The arguments to prepend to those provided to\n * the new function.\n * @returns {Function} Returns the new wrapped function.\n */\n function createPartial(func, bitmask, thisArg, partials) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var argsIndex = -1,\n argsLength = arguments.length,\n leftIndex = -1,\n leftLength = partials.length,\n args = Array(leftLength + argsLength),\n fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n\n while (++leftIndex < leftLength) {\n args[leftIndex] = partials[leftIndex];\n }\n while (argsLength--) {\n args[leftIndex++] = arguments[++argsIndex];\n }\n return apply(fn, isBind ? thisArg : this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.range` or `_.rangeRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new range function.\n */\n function createRange(fromRight) {\n return function(start, end, step) {\n if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n end = step = undefined;\n }\n // Ensure the sign of `-0` is preserved.\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n return baseRange(start, end, step, fromRight);\n };\n }\n\n /**\n * Creates a function that performs a relational operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @returns {Function} Returns the new relational operation function.\n */\n function createRelationalOperation(operator) {\n return function(value, other) {\n if (!(typeof value == 'string' && typeof other == 'string')) {\n value = toNumber(value);\n other = toNumber(other);\n }\n return operator(value, other);\n };\n }\n\n /**\n * Creates a function that wraps `func` to continue currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {Function} wrapFunc The function to create the `func` wrapper.\n * @param {*} placeholder The placeholder value.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n var isCurry = bitmask & WRAP_CURRY_FLAG,\n newHolders = isCurry ? holders : undefined,\n newHoldersRight = isCurry ? undefined : holders,\n newPartials = isCurry ? partials : undefined,\n newPartialsRight = isCurry ? undefined : partials;\n\n bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);\n bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\n\n if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\n bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\n }\n var newData = [\n func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,\n newHoldersRight, argPos, ary, arity\n ];\n\n var result = wrapFunc.apply(undefined, newData);\n if (isLaziable(func)) {\n setData(result, newData);\n }\n result.placeholder = placeholder;\n return setWrapToString(result, func, bitmask);\n }\n\n /**\n * Creates a function like `_.round`.\n *\n * @private\n * @param {string} methodName The name of the `Math` method to use when rounding.\n * @returns {Function} Returns the new round function.\n */\n function createRound(methodName) {\n var func = Math[methodName];\n return function(number, precision) {\n number = toNumber(number);\n precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n if (precision && nativeIsFinite(number)) {\n // Shift with exponential notation to avoid floating-point issues.\n // See [MDN](https://mdn.io/round#Examples) for more details.\n var pair = (toString(number) + 'e').split('e'),\n value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n pair = (toString(value) + 'e').split('e');\n return +(pair[0] + 'e' + (+pair[1] - precision));\n }\n return func(number);\n };\n }\n\n /**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\n var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n };\n\n /**\n * Creates a `_.toPairs` or `_.toPairsIn` function.\n *\n * @private\n * @param {Function} keysFunc The function to get the keys of a given object.\n * @returns {Function} Returns the new pairs function.\n */\n function createToPairs(keysFunc) {\n return function(object) {\n var tag = getTag(object);\n if (tag == mapTag) {\n return mapToArray(object);\n }\n if (tag == setTag) {\n return setToPairs(object);\n }\n return baseToPairs(object, keysFunc(object));\n };\n }\n\n /**\n * Creates a function that either curries or invokes `func` with optional\n * `this` binding and partially applied arguments.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags.\n * 1 - `_.bind`\n * 2 - `_.bindKey`\n * 4 - `_.curry` or `_.curryRight` of a bound function\n * 8 - `_.curry`\n * 16 - `_.curryRight`\n * 32 - `_.partial`\n * 64 - `_.partialRight`\n * 128 - `_.rearg`\n * 256 - `_.ary`\n * 512 - `_.flip`\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to be partially applied.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;\n if (!isBindKey && typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var length = partials ? partials.length : 0;\n if (!length) {\n bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);\n partials = holders = undefined;\n }\n ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n arity = arity === undefined ? arity : toInteger(arity);\n length -= holders ? holders.length : 0;\n\n if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {\n var partialsRight = partials,\n holdersRight = holders;\n\n partials = holders = undefined;\n }\n var data = isBindKey ? undefined : getData(func);\n\n var newData = [\n func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\n argPos, ary, arity\n ];\n\n if (data) {\n mergeData(newData, data);\n }\n func = newData[0];\n bitmask = newData[1];\n thisArg = newData[2];\n partials = newData[3];\n holders = newData[4];\n arity = newData[9] = newData[9] === undefined\n ? (isBindKey ? 0 : func.length)\n : nativeMax(newData[9] - length, 0);\n\n if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\n bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\n }\n if (!bitmask || bitmask == WRAP_BIND_FLAG) {\n var result = createBind(func, bitmask, thisArg);\n } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\n result = createCurry(func, bitmask, arity);\n } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\n result = createPartial(func, bitmask, thisArg, partials);\n } else {\n result = createHybrid.apply(undefined, newData);\n }\n var setter = data ? baseSetData : setData;\n return setWrapToString(setter(result, newData), func, bitmask);\n }\n\n /**\n * Used by `_.defaults` to customize its `_.assignIn` use to assign properties\n * of source objects to the destination object for all destination properties\n * that resolve to `undefined`.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to assign.\n * @param {Object} object The parent object of `objValue`.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsAssignIn(objValue, srcValue, key, object) {\n if (objValue === undefined ||\n (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n return srcValue;\n }\n return objValue;\n }\n\n /**\n * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n * objects into destination objects that are passed thru.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to merge.\n * @param {Object} object The parent object of `objValue`.\n * @param {Object} source The parent object of `srcValue`.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {\n if (isObject(objValue) && isObject(srcValue)) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, objValue);\n baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);\n stack['delete'](srcValue);\n }\n return objValue;\n }\n\n /**\n * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n * objects.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {string} key The key of the property to inspect.\n * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n */\n function customOmitClone(value) {\n return isPlainObject(value) ? undefined : value;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\n function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Check that cyclic values are equal.\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n function flatRest(func) {\n return setToString(overRest(func, undefined, flatten), func + '');\n }\n\n /**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n }\n\n /**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n }\n\n /**\n * Gets metadata for `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {*} Returns the metadata for `func`.\n */\n var getData = !metaMap ? noop : function(func) {\n return metaMap.get(func);\n };\n\n /**\n * Gets the name of `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {string} Returns the function name.\n */\n function getFuncName(func) {\n var result = (func.name + ''),\n array = realNames[result],\n length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n while (length--) {\n var data = array[length],\n otherFunc = data.func;\n if (otherFunc == null || otherFunc == func) {\n return data.name;\n }\n }\n return result;\n }\n\n /**\n * Gets the argument placeholder value for `func`.\n *\n * @private\n * @param {Function} func The function to inspect.\n * @returns {*} Returns the placeholder value.\n */\n function getHolder(func) {\n var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;\n return object.placeholder;\n }\n\n /**\n * Gets the appropriate \"iteratee\" function. If `_.iteratee` is customized,\n * this function returns the custom method, otherwise it returns `baseIteratee`.\n * If arguments are provided, the chosen function is invoked with them and\n * its result is returned.\n *\n * @private\n * @param {*} [value] The value to convert to an iteratee.\n * @param {number} [arity] The arity of the created iteratee.\n * @returns {Function} Returns the chosen function or its result.\n */\n function getIteratee() {\n var result = lodash.iteratee || iteratee;\n result = result === iteratee ? baseIteratee : result;\n return arguments.length ? result(arguments[0], arguments[1]) : result;\n }\n\n /**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\n function getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n }\n\n /**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\n function getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n }\n\n /**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\n function getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n }\n\n /**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\n function getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n }\n\n /**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n };\n\n /**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n };\n\n /**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n var getTag = baseGetTag;\n\n // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n }\n\n /**\n * Gets the view, applying any `transforms` to the `start` and `end` positions.\n *\n * @private\n * @param {number} start The start of the view.\n * @param {number} end The end of the view.\n * @param {Array} transforms The transformations to apply to the view.\n * @returns {Object} Returns an object containing the `start` and `end`\n * positions of the view.\n */\n function getView(start, end, transforms) {\n var index = -1,\n length = transforms.length;\n\n while (++index < length) {\n var data = transforms[index],\n size = data.size;\n\n switch (data.type) {\n case 'drop': start += size; break;\n case 'dropRight': end -= size; break;\n case 'take': end = nativeMin(end, start + size); break;\n case 'takeRight': start = nativeMax(start, end - size); break;\n }\n }\n return { 'start': start, 'end': end };\n }\n\n /**\n * Extracts wrapper details from the `source` body comment.\n *\n * @private\n * @param {string} source The source to inspect.\n * @returns {Array} Returns the wrapper details.\n */\n function getWrapDetails(source) {\n var match = source.match(reWrapDetails);\n return match ? match[1].split(reSplitDetails) : [];\n }\n\n /**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\n function hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n }\n\n /**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\n function initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n }\n\n /**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n }\n\n /**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n }\n\n /**\n * Inserts wrapper `details` in a comment at the top of the `source` body.\n *\n * @private\n * @param {string} source The source to modify.\n * @returns {Array} details The details to insert.\n * @returns {string} Returns the modified source.\n */\n function insertWrapDetails(source, details) {\n var length = details.length;\n if (!length) {\n return source;\n }\n var lastIndex = length - 1;\n details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n details = details.join(length > 2 ? ', ' : ' ');\n return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\n');\n }\n\n /**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\n function isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n }\n\n /**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\n function isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n }\n\n /**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\n function isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n }\n\n /**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\n function isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n }\n\n /**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\n function isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n }\n\n /**\n * Checks if `func` has a lazy counterpart.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n * else `false`.\n */\n function isLaziable(func) {\n var funcName = getFuncName(func),\n other = lodash[funcName];\n\n if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n return false;\n }\n if (func === other) {\n return true;\n }\n var data = getData(other);\n return !!data && func === data[0];\n }\n\n /**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\n function isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n }\n\n /**\n * Checks if `func` is capable of being masked.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\n */\n var isMaskable = coreJsData ? isFunction : stubFalse;\n\n /**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\n function isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n }\n\n /**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\n function isStrictComparable(value) {\n return value === value && !isObject(value);\n }\n\n /**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n }\n\n /**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\n function memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n }\n\n /**\n * Merges the function metadata of `source` into `data`.\n *\n * Merging metadata reduces the number of wrappers used to invoke a function.\n * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n * may be applied regardless of execution order. Methods like `_.ary` and\n * `_.rearg` modify function arguments, making the order in which they are\n * executed important, preventing the merging of metadata. However, we make\n * an exception for a safe combined case where curried functions have `_.ary`\n * and or `_.rearg` applied.\n *\n * @private\n * @param {Array} data The destination metadata.\n * @param {Array} source The source metadata.\n * @returns {Array} Returns `data`.\n */\n function mergeData(data, source) {\n var bitmask = data[1],\n srcBitmask = source[1],\n newBitmask = bitmask | srcBitmask,\n isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n\n var isCombo =\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||\n ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));\n\n // Exit early if metadata can't be merged.\n if (!(isCommon || isCombo)) {\n return data;\n }\n // Use source `thisArg` if available.\n if (srcBitmask & WRAP_BIND_FLAG) {\n data[2] = source[2];\n // Set when currying a bound function.\n newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n }\n // Compose partial arguments.\n var value = source[3];\n if (value) {\n var partials = data[3];\n data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n }\n // Compose partial right arguments.\n value = source[5];\n if (value) {\n partials = data[5];\n data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n }\n // Use source `argPos` if available.\n value = source[7];\n if (value) {\n data[7] = value;\n }\n // Use source `ary` if it's smaller.\n if (srcBitmask & WRAP_ARY_FLAG) {\n data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n }\n // Use source `arity` if one is not provided.\n if (data[9] == null) {\n data[9] = source[9];\n }\n // Use source `func` and merge bitmasks.\n data[0] = source[0];\n data[1] = newBitmask;\n\n return data;\n }\n\n /**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\n function objectToString(value) {\n return nativeObjectToString.call(value);\n }\n\n /**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\n function overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n }\n\n /**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\n function parent(object, path) {\n return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n }\n\n /**\n * Reorder `array` according to the specified indexes where the element at\n * the first index is assigned as the first element, the element at\n * the second index is assigned as the second element, and so on.\n *\n * @private\n * @param {Array} array The array to reorder.\n * @param {Array} indexes The arranged array indexes.\n * @returns {Array} Returns `array`.\n */\n function reorder(array, indexes) {\n var arrLength = array.length,\n length = nativeMin(indexes.length, arrLength),\n oldArray = copyArray(array);\n\n while (length--) {\n var index = indexes[length];\n array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n }\n return array;\n }\n\n /**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function safeGet(object, key) {\n if (key === 'constructor' && typeof object[key] === 'function') {\n return;\n }\n\n if (key == '__proto__') {\n return;\n }\n\n return object[key];\n }\n\n /**\n * Sets metadata for `func`.\n *\n * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n * period of time, it will trip its breaker and transition to an identity\n * function to avoid garbage collection pauses in V8. See\n * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n * for more details.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var setData = shortOut(baseSetData);\n\n /**\n * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n var setTimeout = ctxSetTimeout || function(func, wait) {\n return root.setTimeout(func, wait);\n };\n\n /**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var setToString = shortOut(baseSetToString);\n\n /**\n * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n * with wrapper details in a comment at the top of the source body.\n *\n * @private\n * @param {Function} wrapper The function to modify.\n * @param {Function} reference The reference function.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Function} Returns `wrapper`.\n */\n function setWrapToString(wrapper, reference, bitmask) {\n var source = (reference + '');\n return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\n }\n\n /**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\n function shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n }\n\n /**\n * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @param {number} [size=array.length] The size of `array`.\n * @returns {Array} Returns `array`.\n */\n function shuffleSelf(array, size) {\n var index = -1,\n length = array.length,\n lastIndex = length - 1;\n\n size = size === undefined ? length : size;\n while (++index < size) {\n var rand = baseRandom(index, lastIndex),\n value = array[rand];\n\n array[rand] = array[index];\n array[index] = value;\n }\n array.length = size;\n return array;\n }\n\n /**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\n var stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n });\n\n /**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\n function toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\n function toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n }\n\n /**\n * Updates wrapper `details` based on `bitmask` flags.\n *\n * @private\n * @returns {Array} details The details to modify.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Array} Returns `details`.\n */\n function updateWrapDetails(details, bitmask) {\n arrayEach(wrapFlags, function(pair) {\n var value = '_.' + pair[0];\n if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {\n details.push(value);\n }\n });\n return details.sort();\n }\n\n /**\n * Creates a clone of `wrapper`.\n *\n * @private\n * @param {Object} wrapper The wrapper to clone.\n * @returns {Object} Returns the cloned wrapper.\n */\n function wrapperClone(wrapper) {\n if (wrapper instanceof LazyWrapper) {\n return wrapper.clone();\n }\n var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n result.__actions__ = copyArray(wrapper.__actions__);\n result.__index__ = wrapper.__index__;\n result.__values__ = wrapper.__values__;\n return result;\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of elements split into groups the length of `size`.\n * If `array` can't be split evenly, the final chunk will be the remaining\n * elements.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to process.\n * @param {number} [size=1] The length of each chunk\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the new array of chunks.\n * @example\n *\n * _.chunk(['a', 'b', 'c', 'd'], 2);\n * // => [['a', 'b'], ['c', 'd']]\n *\n * _.chunk(['a', 'b', 'c', 'd'], 3);\n * // => [['a', 'b', 'c'], ['d']]\n */\n function chunk(array, size, guard) {\n if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {\n size = 1;\n } else {\n size = nativeMax(toInteger(size), 0);\n }\n var length = array == null ? 0 : array.length;\n if (!length || size < 1) {\n return [];\n }\n var index = 0,\n resIndex = 0,\n result = Array(nativeCeil(length / size));\n\n while (index < length) {\n result[resIndex++] = baseSlice(array, index, (index += size));\n }\n return result;\n }\n\n /**\n * Creates an array with all falsey values removed. The values `false`, `null`,\n * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to compact.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.compact([0, 1, false, 2, '', 3]);\n * // => [1, 2, 3]\n */\n function compact(array) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * Creates a new array concatenating `array` with any additional arrays\n * and/or values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to concatenate.\n * @param {...*} [values] The values to concatenate.\n * @returns {Array} Returns the new concatenated array.\n * @example\n *\n * var array = [1];\n * var other = _.concat(array, 2, [3], [[4]]);\n *\n * console.log(other);\n * // => [1, 2, 3, [4]]\n *\n * console.log(array);\n * // => [1]\n */\n function concat() {\n var length = arguments.length;\n if (!length) {\n return [];\n }\n var args = Array(length - 1),\n array = arguments[0],\n index = length;\n\n while (index--) {\n args[index - 1] = arguments[index];\n }\n return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\n }\n\n /**\n * Creates an array of `array` values not included in the other given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * **Note:** Unlike `_.pullAll`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.without, _.xor\n * @example\n *\n * _.difference([2, 1], [2, 3]);\n * // => [1]\n */\n var difference = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `iteratee` which\n * is invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var differenceBy = baseRest(function(array, values) {\n var iteratee = last(values);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `comparator`\n * which is invoked to compare elements of `array` to `values`. The order and\n * references of result values are determined by the first array. The comparator\n * is invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n *\n * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }]\n */\n var differenceWith = baseRest(function(array, values) {\n var comparator = last(values);\n if (isArrayLikeObject(comparator)) {\n comparator = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)\n : [];\n });\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.drop([1, 2, 3]);\n * // => [2, 3]\n *\n * _.drop([1, 2, 3], 2);\n * // => [3]\n *\n * _.drop([1, 2, 3], 5);\n * // => []\n *\n * _.drop([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function drop(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.dropRight([1, 2, 3]);\n * // => [1, 2]\n *\n * _.dropRight([1, 2, 3], 2);\n * // => [1]\n *\n * _.dropRight([1, 2, 3], 5);\n * // => []\n *\n * _.dropRight([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function dropRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the end.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.dropRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropRightWhile(users, ['active', false]);\n * // => objects for ['barney']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropRightWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the beginning.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.dropWhile(users, function(o) { return !o.active; });\n * // => objects for ['pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropWhile(users, ['active', false]);\n * // => objects for ['pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true)\n : [];\n }\n\n /**\n * Fills elements of `array` with `value` from `start` up to, but not\n * including, `end`.\n *\n * **Note:** This method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Array\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.fill(array, 'a');\n * console.log(array);\n * // => ['a', 'a', 'a']\n *\n * _.fill(Array(3), 2);\n * // => [2, 2, 2]\n *\n * _.fill([4, 6, 8, 10], '*', 1, 3);\n * // => [4, '*', '*', 10]\n */\n function fill(array, value, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n start = 0;\n end = length;\n }\n return baseFill(array, value, start, end);\n }\n\n /**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\n function findIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index);\n }\n\n /**\n * This method is like `_.findIndex` except that it iterates over elements\n * of `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n * // => 2\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n * // => 0\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastIndex(users, ['active', false]);\n * // => 2\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastIndex(users, 'active');\n * // => 0\n */\n function findLastIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length - 1;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = fromIndex < 0\n ? nativeMax(length + index, 0)\n : nativeMin(index, length - 1);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index, true);\n }\n\n /**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\n function flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n }\n\n /**\n * Recursively flattens `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flattenDeep([1, [2, [3, [4]], 5]]);\n * // => [1, 2, 3, 4, 5]\n */\n function flattenDeep(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, INFINITY) : [];\n }\n\n /**\n * Recursively flatten `array` up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * var array = [1, [2, [3, [4]], 5]];\n *\n * _.flattenDepth(array, 1);\n * // => [1, 2, [3, [4]], 5]\n *\n * _.flattenDepth(array, 2);\n * // => [1, 2, 3, [4], 5]\n */\n function flattenDepth(array, depth) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(array, depth);\n }\n\n /**\n * The inverse of `_.toPairs`; this method returns an object composed\n * from key-value `pairs`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} pairs The key-value pairs.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.fromPairs([['a', 1], ['b', 2]]);\n * // => { 'a': 1, 'b': 2 }\n */\n function fromPairs(pairs) {\n var index = -1,\n length = pairs == null ? 0 : pairs.length,\n result = {};\n\n while (++index < length) {\n var pair = pairs[index];\n result[pair[0]] = pair[1];\n }\n return result;\n }\n\n /**\n * Gets the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias first\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the first element of `array`.\n * @example\n *\n * _.head([1, 2, 3]);\n * // => 1\n *\n * _.head([]);\n * // => undefined\n */\n function head(array) {\n return (array && array.length) ? array[0] : undefined;\n }\n\n /**\n * Gets the index at which the first occurrence of `value` is found in `array`\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. If `fromIndex` is negative, it's used as the\n * offset from the end of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.indexOf([1, 2, 1, 2], 2);\n * // => 1\n *\n * // Search from the `fromIndex`.\n * _.indexOf([1, 2, 1, 2], 2, 2);\n * // => 3\n */\n function indexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseIndexOf(array, value, index);\n }\n\n /**\n * Gets all but the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.initial([1, 2, 3]);\n * // => [1, 2]\n */\n function initial(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 0, -1) : [];\n }\n\n /**\n * Creates an array of unique values that are included in all given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersection([2, 1], [2, 3]);\n * // => [2]\n */\n var intersection = baseRest(function(arrays) {\n var mapped = arrayMap(arrays, castArrayLikeObject);\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped)\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `iteratee`\n * which is invoked for each element of each `arrays` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [2.1]\n *\n * // The `_.property` iteratee shorthand.\n * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }]\n */\n var intersectionBy = baseRest(function(arrays) {\n var iteratee = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n if (iteratee === last(mapped)) {\n iteratee = undefined;\n } else {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `comparator`\n * which is invoked to compare elements of `arrays`. The order and references\n * of result values are determined by the first array. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.intersectionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }]\n */\n var intersectionWith = baseRest(function(arrays) {\n var comparator = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n comparator = typeof comparator == 'function' ? comparator : undefined;\n if (comparator) {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, undefined, comparator)\n : [];\n });\n\n /**\n * Converts all elements in `array` into a string separated by `separator`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to convert.\n * @param {string} [separator=','] The element separator.\n * @returns {string} Returns the joined string.\n * @example\n *\n * _.join(['a', 'b', 'c'], '~');\n * // => 'a~b~c'\n */\n function join(array, separator) {\n return array == null ? '' : nativeJoin.call(array, separator);\n }\n\n /**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\n function last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n }\n\n /**\n * This method is like `_.indexOf` except that it iterates over elements of\n * `array` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.lastIndexOf([1, 2, 1, 2], 2);\n * // => 3\n *\n * // Search from the `fromIndex`.\n * _.lastIndexOf([1, 2, 1, 2], 2, 2);\n * // => 1\n */\n function lastIndexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\n }\n return value === value\n ? strictLastIndexOf(array, value, index)\n : baseFindIndex(array, baseIsNaN, index, true);\n }\n\n /**\n * Gets the element at index `n` of `array`. If `n` is negative, the nth\n * element from the end is returned.\n *\n * @static\n * @memberOf _\n * @since 4.11.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=0] The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n *\n * _.nth(array, 1);\n * // => 'b'\n *\n * _.nth(array, -2);\n * // => 'c';\n */\n function nth(array, n) {\n return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;\n }\n\n /**\n * Removes all given values from `array` using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n * to remove elements from an array by predicate.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...*} [values] The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pull(array, 'a', 'c');\n * console.log(array);\n * // => ['b', 'b']\n */\n var pull = baseRest(pullAll);\n\n /**\n * This method is like `_.pull` except that it accepts an array of values to remove.\n *\n * **Note:** Unlike `_.difference`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pullAll(array, ['a', 'c']);\n * console.log(array);\n * // => ['b', 'b']\n */\n function pullAll(array, values) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values)\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `iteratee` which is\n * invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The iteratee is invoked with one argument: (value).\n *\n * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\n *\n * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\n * console.log(array);\n * // => [{ 'x': 2 }]\n */\n function pullAllBy(array, values, iteratee) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, getIteratee(iteratee, 2))\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `comparator` which\n * is invoked to compare elements of `array` to `values`. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\n *\n * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\n * console.log(array);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\n */\n function pullAllWith(array, values, comparator) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, undefined, comparator)\n : array;\n }\n\n /**\n * Removes elements from `array` corresponding to `indexes` and returns an\n * array of removed elements.\n *\n * **Note:** Unlike `_.at`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...(number|number[])} [indexes] The indexes of elements to remove.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n * var pulled = _.pullAt(array, [1, 3]);\n *\n * console.log(array);\n * // => ['a', 'c']\n *\n * console.log(pulled);\n * // => ['b', 'd']\n */\n var pullAt = flatRest(function(array, indexes) {\n var length = array == null ? 0 : array.length,\n result = baseAt(array, indexes);\n\n basePullAt(array, arrayMap(indexes, function(index) {\n return isIndex(index, length) ? +index : index;\n }).sort(compareAscending));\n\n return result;\n });\n\n /**\n * Removes all elements from `array` that `predicate` returns truthy for\n * and returns an array of the removed elements. The predicate is invoked\n * with three arguments: (value, index, array).\n *\n * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n * to pull elements from an array by value.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = [1, 2, 3, 4];\n * var evens = _.remove(array, function(n) {\n * return n % 2 == 0;\n * });\n *\n * console.log(array);\n * // => [1, 3]\n *\n * console.log(evens);\n * // => [2, 4]\n */\n function remove(array, predicate) {\n var result = [];\n if (!(array && array.length)) {\n return result;\n }\n var index = -1,\n indexes = [],\n length = array.length;\n\n predicate = getIteratee(predicate, 3);\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result.push(value);\n indexes.push(index);\n }\n }\n basePullAt(array, indexes);\n return result;\n }\n\n /**\n * Reverses `array` so that the first element becomes the last, the second\n * element becomes the second to last, and so on.\n *\n * **Note:** This method mutates `array` and is based on\n * [`Array#reverse`](https://mdn.io/Array/reverse).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.reverse(array);\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function reverse(array) {\n return array == null ? array : nativeReverse.call(array);\n }\n\n /**\n * Creates a slice of `array` from `start` up to, but not including, `end`.\n *\n * **Note:** This method is used instead of\n * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n * returned.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function slice(array, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n start = 0;\n end = length;\n }\n else {\n start = start == null ? 0 : toInteger(start);\n end = end === undefined ? length : toInteger(end);\n }\n return baseSlice(array, start, end);\n }\n\n /**\n * Uses a binary search to determine the lowest index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedIndex([30, 50], 40);\n * // => 1\n */\n function sortedIndex(array, value) {\n return baseSortedIndex(array, value);\n }\n\n /**\n * This method is like `_.sortedIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\n * // => 0\n */\n function sortedIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));\n }\n\n /**\n * This method is like `_.indexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\n * // => 1\n */\n function sortedIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value);\n if (index < length && eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.sortedIndex` except that it returns the highest\n * index at which `value` should be inserted into `array` in order to\n * maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\n * // => 4\n */\n function sortedLastIndex(array, value) {\n return baseSortedIndex(array, value, true);\n }\n\n /**\n * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 1\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\n * // => 1\n */\n function sortedLastIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);\n }\n\n /**\n * This method is like `_.lastIndexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\n * // => 3\n */\n function sortedLastIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value, true) - 1;\n if (eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.uniq` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniq([1, 1, 2]);\n * // => [1, 2]\n */\n function sortedUniq(array) {\n return (array && array.length)\n ? baseSortedUniq(array)\n : [];\n }\n\n /**\n * This method is like `_.uniqBy` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\n * // => [1.1, 2.3]\n */\n function sortedUniqBy(array, iteratee) {\n return (array && array.length)\n ? baseSortedUniq(array, getIteratee(iteratee, 2))\n : [];\n }\n\n /**\n * Gets all but the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.tail([1, 2, 3]);\n * // => [2, 3]\n */\n function tail(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 1, length) : [];\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.take([1, 2, 3]);\n * // => [1]\n *\n * _.take([1, 2, 3], 2);\n * // => [1, 2]\n *\n * _.take([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.take([1, 2, 3], 0);\n * // => []\n */\n function take(array, n, guard) {\n if (!(array && array.length)) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.takeRight([1, 2, 3]);\n * // => [3]\n *\n * _.takeRight([1, 2, 3], 2);\n * // => [2, 3]\n *\n * _.takeRight([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.takeRight([1, 2, 3], 0);\n * // => []\n */\n function takeRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with elements taken from the end. Elements are\n * taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.takeRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeRightWhile(users, ['active', false]);\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeRightWhile(users, 'active');\n * // => []\n */\n function takeRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), false, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` with elements taken from the beginning. Elements\n * are taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.takeWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeWhile(users, ['active', false]);\n * // => objects for ['barney', 'fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeWhile(users, 'active');\n * // => []\n */\n function takeWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3))\n : [];\n }\n\n /**\n * Creates an array of unique values, in order, from all given arrays using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.union([2], [1, 2]);\n * // => [2, 1]\n */\n var union = baseRest(function(arrays) {\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n });\n\n /**\n * This method is like `_.union` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which uniqueness is computed. Result values are chosen from the first\n * array in which the value occurs. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.unionBy([2.1], [1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n var unionBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.union` except that it accepts `comparator` which\n * is invoked to compare elements of `arrays`. Result values are chosen from\n * the first array in which the value occurs. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.unionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var unionWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);\n });\n\n /**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\n function uniq(array) {\n return (array && array.length) ? baseUniq(array) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * uniqueness is computed. The order of result values is determined by the\n * order they occur in the array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n function uniqBy(array, iteratee) {\n return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `comparator` which\n * is invoked to compare elements of `array`. The order of result values is\n * determined by the order they occur in the array.The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.uniqWith(objects, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n */\n function uniqWith(array, comparator) {\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return (array && array.length) ? baseUniq(array, undefined, comparator) : [];\n }\n\n /**\n * This method is like `_.zip` except that it accepts an array of grouped\n * elements and creates an array regrouping the elements to their pre-zip\n * configuration.\n *\n * @static\n * @memberOf _\n * @since 1.2.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n *\n * _.unzip(zipped);\n * // => [['a', 'b'], [1, 2], [true, false]]\n */\n function unzip(array) {\n if (!(array && array.length)) {\n return [];\n }\n var length = 0;\n array = arrayFilter(array, function(group) {\n if (isArrayLikeObject(group)) {\n length = nativeMax(group.length, length);\n return true;\n }\n });\n return baseTimes(length, function(index) {\n return arrayMap(array, baseProperty(index));\n });\n }\n\n /**\n * This method is like `_.unzip` except that it accepts `iteratee` to specify\n * how regrouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * regrouped values.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\n * // => [[1, 10, 100], [2, 20, 200]]\n *\n * _.unzipWith(zipped, _.add);\n * // => [3, 30, 300]\n */\n function unzipWith(array, iteratee) {\n if (!(array && array.length)) {\n return [];\n }\n var result = unzip(array);\n if (iteratee == null) {\n return result;\n }\n return arrayMap(result, function(group) {\n return apply(iteratee, undefined, group);\n });\n }\n\n /**\n * Creates an array excluding all given values using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.pull`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...*} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.xor\n * @example\n *\n * _.without([2, 1, 2, 3], 1, 2);\n * // => [3]\n */\n var without = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, values)\n : [];\n });\n\n /**\n * Creates an array of unique values that is the\n * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\n * of the given arrays. The order of result values is determined by the order\n * they occur in the arrays.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.without\n * @example\n *\n * _.xor([2, 1], [2, 3]);\n * // => [1, 3]\n */\n var xor = baseRest(function(arrays) {\n return baseXor(arrayFilter(arrays, isArrayLikeObject));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which by which they're compared. The order of result values is determined\n * by the order they occur in the arrays. The iteratee is invoked with one\n * argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2, 3.4]\n *\n * // The `_.property` iteratee shorthand.\n * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var xorBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `comparator` which is\n * invoked to compare elements of `arrays`. The order of result values is\n * determined by the order they occur in the arrays. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.xorWith(objects, others, _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var xorWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);\n });\n\n /**\n * Creates an array of grouped elements, the first of which contains the\n * first elements of the given arrays, the second of which contains the\n * second elements of the given arrays, and so on.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n */\n var zip = baseRest(unzip);\n\n /**\n * This method is like `_.fromPairs` except that it accepts two arrays,\n * one of property identifiers and one of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 0.4.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObject(['a', 'b'], [1, 2]);\n * // => { 'a': 1, 'b': 2 }\n */\n function zipObject(props, values) {\n return baseZipObject(props || [], values || [], assignValue);\n }\n\n /**\n * This method is like `_.zipObject` except that it supports property paths.\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\n * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\n */\n function zipObjectDeep(props, values) {\n return baseZipObject(props || [], values || [], baseSet);\n }\n\n /**\n * This method is like `_.zip` except that it accepts `iteratee` to specify\n * how grouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * grouped values.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\n * return a + b + c;\n * });\n * // => [111, 222]\n */\n var zipWith = baseRest(function(arrays) {\n var length = arrays.length,\n iteratee = length > 1 ? arrays[length - 1] : undefined;\n\n iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;\n return unzipWith(arrays, iteratee);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` wrapper instance that wraps `value` with explicit method\n * chain sequences enabled. The result of such sequences must be unwrapped\n * with `_#value`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Seq\n * @param {*} value The value to wrap.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'pebbles', 'age': 1 }\n * ];\n *\n * var youngest = _\n * .chain(users)\n * .sortBy('age')\n * .map(function(o) {\n * return o.user + ' is ' + o.age;\n * })\n * .head()\n * .value();\n * // => 'pebbles is 1'\n */\n function chain(value) {\n var result = lodash(value);\n result.__chain__ = true;\n return result;\n }\n\n /**\n * This method invokes `interceptor` and returns `value`. The interceptor\n * is invoked with one argument; (value). The purpose of this method is to\n * \"tap into\" a method chain sequence in order to modify intermediate results.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns `value`.\n * @example\n *\n * _([1, 2, 3])\n * .tap(function(array) {\n * // Mutate input array.\n * array.pop();\n * })\n * .reverse()\n * .value();\n * // => [2, 1]\n */\n function tap(value, interceptor) {\n interceptor(value);\n return value;\n }\n\n /**\n * This method is like `_.tap` except that it returns the result of `interceptor`.\n * The purpose of this method is to \"pass thru\" values replacing intermediate\n * results in a method chain sequence.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns the result of `interceptor`.\n * @example\n *\n * _(' abc ')\n * .chain()\n * .trim()\n * .thru(function(value) {\n * return [value];\n * })\n * .value();\n * // => ['abc']\n */\n function thru(value, interceptor) {\n return interceptor(value);\n }\n\n /**\n * This method is the wrapper version of `_.at`.\n *\n * @name at\n * @memberOf _\n * @since 1.0.0\n * @category Seq\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _(object).at(['a[0].b.c', 'a[1]']).value();\n * // => [3, 4]\n */\n var wrapperAt = flatRest(function(paths) {\n var length = paths.length,\n start = length ? paths[0] : 0,\n value = this.__wrapped__,\n interceptor = function(object) { return baseAt(object, paths); };\n\n if (length > 1 || this.__actions__.length ||\n !(value instanceof LazyWrapper) || !isIndex(start)) {\n return this.thru(interceptor);\n }\n value = value.slice(start, +start + (length ? 1 : 0));\n value.__actions__.push({\n 'func': thru,\n 'args': [interceptor],\n 'thisArg': undefined\n });\n return new LodashWrapper(value, this.__chain__).thru(function(array) {\n if (length && !array.length) {\n array.push(undefined);\n }\n return array;\n });\n });\n\n /**\n * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\n *\n * @name chain\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 }\n * ];\n *\n * // A sequence without explicit chaining.\n * _(users).head();\n * // => { 'user': 'barney', 'age': 36 }\n *\n * // A sequence with explicit chaining.\n * _(users)\n * .chain()\n * .head()\n * .pick('user')\n * .value();\n * // => { 'user': 'barney' }\n */\n function wrapperChain() {\n return chain(this);\n }\n\n /**\n * Executes the chain sequence and returns the wrapped result.\n *\n * @name commit\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2];\n * var wrapped = _(array).push(3);\n *\n * console.log(array);\n * // => [1, 2]\n *\n * wrapped = wrapped.commit();\n * console.log(array);\n * // => [1, 2, 3]\n *\n * wrapped.last();\n * // => 3\n *\n * console.log(array);\n * // => [1, 2, 3]\n */\n function wrapperCommit() {\n return new LodashWrapper(this.value(), this.__chain__);\n }\n\n /**\n * Gets the next value on a wrapped object following the\n * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\n *\n * @name next\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the next iterator value.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 1 }\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 2 }\n *\n * wrapped.next();\n * // => { 'done': true, 'value': undefined }\n */\n function wrapperNext() {\n if (this.__values__ === undefined) {\n this.__values__ = toArray(this.value());\n }\n var done = this.__index__ >= this.__values__.length,\n value = done ? undefined : this.__values__[this.__index__++];\n\n return { 'done': done, 'value': value };\n }\n\n /**\n * Enables the wrapper to be iterable.\n *\n * @name Symbol.iterator\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the wrapper object.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped[Symbol.iterator]() === wrapped;\n * // => true\n *\n * Array.from(wrapped);\n * // => [1, 2]\n */\n function wrapperToIterator() {\n return this;\n }\n\n /**\n * Creates a clone of the chain sequence planting `value` as the wrapped value.\n *\n * @name plant\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @param {*} value The value to plant.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2]).map(square);\n * var other = wrapped.plant([3, 4]);\n *\n * other.value();\n * // => [9, 16]\n *\n * wrapped.value();\n * // => [1, 4]\n */\n function wrapperPlant(value) {\n var result,\n parent = this;\n\n while (parent instanceof baseLodash) {\n var clone = wrapperClone(parent);\n clone.__index__ = 0;\n clone.__values__ = undefined;\n if (result) {\n previous.__wrapped__ = clone;\n } else {\n result = clone;\n }\n var previous = clone;\n parent = parent.__wrapped__;\n }\n previous.__wrapped__ = value;\n return result;\n }\n\n /**\n * This method is the wrapper version of `_.reverse`.\n *\n * **Note:** This method mutates the wrapped array.\n *\n * @name reverse\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _(array).reverse().value()\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function wrapperReverse() {\n var value = this.__wrapped__;\n if (value instanceof LazyWrapper) {\n var wrapped = value;\n if (this.__actions__.length) {\n wrapped = new LazyWrapper(this);\n }\n wrapped = wrapped.reverse();\n wrapped.__actions__.push({\n 'func': thru,\n 'args': [reverse],\n 'thisArg': undefined\n });\n return new LodashWrapper(wrapped, this.__chain__);\n }\n return this.thru(reverse);\n }\n\n /**\n * Executes the chain sequence to resolve the unwrapped value.\n *\n * @name value\n * @memberOf _\n * @since 0.1.0\n * @alias toJSON, valueOf\n * @category Seq\n * @returns {*} Returns the resolved unwrapped value.\n * @example\n *\n * _([1, 2, 3]).value();\n * // => [1, 2, 3]\n */\n function wrapperValue() {\n return baseWrapperValue(this.__wrapped__, this.__actions__);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the number of times the key was returned by `iteratee`. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.countBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': 1, '6': 2 }\n *\n * // The `_.property` iteratee shorthand.\n * _.countBy(['one', 'two', 'three'], 'length');\n * // => { '3': 2, '5': 1 }\n */\n var countBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n ++result[key];\n } else {\n baseAssignValue(result, key, 1);\n }\n });\n\n /**\n * Checks if `predicate` returns truthy for **all** elements of `collection`.\n * Iteration is stopped once `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * **Note:** This method returns `true` for\n * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n * elements of empty collections.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n * @example\n *\n * _.every([true, 1, null, 'yes'], Boolean);\n * // => false\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.every(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.every(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.every(users, 'active');\n * // => false\n */\n function every(collection, predicate, guard) {\n var func = isArray(collection) ? arrayEvery : baseEvery;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning an array of all elements\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * **Note:** Unlike `_.remove`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.reject\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * _.filter(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, { 'age': 36, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.filter(users, 'active');\n * // => objects for ['barney']\n *\n * // Combining several predicates using `_.overEvery` or `_.overSome`.\n * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));\n * // => objects for ['fred', 'barney']\n */\n function filter(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false },\n * { 'user': 'pebbles', 'age': 1, 'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\n var find = createFind(findIndex);\n\n /**\n * This method is like `_.find` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=collection.length-1] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * _.findLast([1, 2, 3, 4], function(n) {\n * return n % 2 == 1;\n * });\n * // => 3\n */\n var findLast = createFind(findLastIndex);\n\n /**\n * Creates a flattened array of values by running each element in `collection`\n * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n * with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [n, n];\n * }\n *\n * _.flatMap([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMap(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), 1);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDeep([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMapDeep(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), INFINITY);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDepth([1, 2], duplicate, 2);\n * // => [[1, 1], [2, 2]]\n */\n function flatMapDepth(collection, iteratee, depth) {\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(map(collection, iteratee), depth);\n }\n\n /**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forEach(collection, iteratee) {\n var func = isArray(collection) ? arrayEach : baseEach;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forEach` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @alias eachRight\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEach\n * @example\n *\n * _.forEachRight([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `2` then `1`.\n */\n function forEachRight(collection, iteratee) {\n var func = isArray(collection) ? arrayEachRight : baseEachRight;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The order of grouped values\n * is determined by the order they occur in `collection`. The corresponding\n * value of each key is an array of elements responsible for generating the\n * key. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': [4.2], '6': [6.1, 6.3] }\n *\n * // The `_.property` iteratee shorthand.\n * _.groupBy(['one', 'two', 'three'], 'length');\n * // => { '3': ['one', 'two'], '5': ['three'] }\n */\n var groupBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n result[key].push(value);\n } else {\n baseAssignValue(result, key, [value]);\n }\n });\n\n /**\n * Checks if `value` is in `collection`. If `collection` is a string, it's\n * checked for a substring of `value`, otherwise\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * is used for equality comparisons. If `fromIndex` is negative, it's used as\n * the offset from the end of `collection`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {boolean} Returns `true` if `value` is found, else `false`.\n * @example\n *\n * _.includes([1, 2, 3], 1);\n * // => true\n *\n * _.includes([1, 2, 3], 1, 2);\n * // => false\n *\n * _.includes({ 'a': 1, 'b': 2 }, 1);\n * // => true\n *\n * _.includes('abcd', 'bc');\n * // => true\n */\n function includes(collection, value, fromIndex, guard) {\n collection = isArrayLike(collection) ? collection : values(collection);\n fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n var length = collection.length;\n if (fromIndex < 0) {\n fromIndex = nativeMax(length + fromIndex, 0);\n }\n return isString(collection)\n ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n }\n\n /**\n * Invokes the method at `path` of each element in `collection`, returning\n * an array of the results of each invoked method. Any additional arguments\n * are provided to each invoked method. If `path` is a function, it's invoked\n * for, and `this` bound to, each element in `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array|Function|string} path The path of the method to invoke or\n * the function invoked per iteration.\n * @param {...*} [args] The arguments to invoke each method with.\n * @returns {Array} Returns the array of results.\n * @example\n *\n * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\n * // => [[1, 5, 7], [1, 2, 3]]\n *\n * _.invokeMap([123, 456], String.prototype.split, '');\n * // => [['1', '2', '3'], ['4', '5', '6']]\n */\n var invokeMap = baseRest(function(collection, path, args) {\n var index = -1,\n isFunc = typeof path == 'function',\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value) {\n result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);\n });\n return result;\n });\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the last element responsible for generating the key. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * var array = [\n * { 'dir': 'left', 'code': 97 },\n * { 'dir': 'right', 'code': 100 }\n * ];\n *\n * _.keyBy(array, function(o) {\n * return String.fromCharCode(o.code);\n * });\n * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n *\n * _.keyBy(array, 'dir');\n * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n */\n var keyBy = createAggregator(function(result, value, key) {\n baseAssignValue(result, key, value);\n });\n\n /**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n * { 'user': 'barney' },\n * { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\n function map(collection, iteratee) {\n var func = isArray(collection) ? arrayMap : baseMap;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.sortBy` except that it allows specifying the sort\n * orders of the iteratees to sort by. If `orders` is unspecified, all values\n * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n * descending or \"asc\" for ascending sort order of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @param {string[]} [orders] The sort orders of `iteratees`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 34 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'barney', 'age': 36 }\n * ];\n *\n * // Sort by `user` in ascending order and by `age` in descending order.\n * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n */\n function orderBy(collection, iteratees, orders, guard) {\n if (collection == null) {\n return [];\n }\n if (!isArray(iteratees)) {\n iteratees = iteratees == null ? [] : [iteratees];\n }\n orders = guard ? undefined : orders;\n if (!isArray(orders)) {\n orders = orders == null ? [] : [orders];\n }\n return baseOrderBy(collection, iteratees, orders);\n }\n\n /**\n * Creates an array of elements split into two groups, the first of which\n * contains elements `predicate` returns truthy for, the second of which\n * contains elements `predicate` returns falsey for. The predicate is\n * invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the array of grouped elements.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true },\n * { 'user': 'pebbles', 'age': 1, 'active': false }\n * ];\n *\n * _.partition(users, function(o) { return o.active; });\n * // => objects for [['fred'], ['barney', 'pebbles']]\n *\n * // The `_.matches` iteratee shorthand.\n * _.partition(users, { 'age': 1, 'active': false });\n * // => objects for [['pebbles'], ['barney', 'fred']]\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.partition(users, ['active', false]);\n * // => objects for [['barney', 'pebbles'], ['fred']]\n *\n * // The `_.property` iteratee shorthand.\n * _.partition(users, 'active');\n * // => objects for [['fred'], ['barney', 'pebbles']]\n */\n var partition = createAggregator(function(result, value, key) {\n result[key ? 0 : 1].push(value);\n }, function() { return [[], []]; });\n\n /**\n * Reduces `collection` to a value which is the accumulated result of running\n * each element in `collection` thru `iteratee`, where each successive\n * invocation is supplied the return value of the previous. If `accumulator`\n * is not given, the first element of `collection` is used as the initial\n * value. The iteratee is invoked with four arguments:\n * (accumulator, value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.reduce`, `_.reduceRight`, and `_.transform`.\n *\n * The guarded methods are:\n * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n * and `sortBy`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduceRight\n * @example\n *\n * _.reduce([1, 2], function(sum, n) {\n * return sum + n;\n * }, 0);\n * // => 3\n *\n * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * return result;\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n */\n function reduce(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduce : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n }\n\n /**\n * This method is like `_.reduce` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduce\n * @example\n *\n * var array = [[0, 1], [2, 3], [4, 5]];\n *\n * _.reduceRight(array, function(flattened, other) {\n * return flattened.concat(other);\n * }, []);\n * // => [4, 5, 2, 3, 0, 1]\n */\n function reduceRight(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduceRight : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);\n }\n\n /**\n * The opposite of `_.filter`; this method returns the elements of `collection`\n * that `predicate` does **not** return truthy for.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.filter\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true }\n * ];\n *\n * _.reject(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.reject(users, { 'age': 40, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.reject(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.reject(users, 'active');\n * // => objects for ['barney']\n */\n function reject(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, negate(getIteratee(predicate, 3)));\n }\n\n /**\n * Gets a random element from `collection`.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n * @example\n *\n * _.sample([1, 2, 3, 4]);\n * // => 2\n */\n function sample(collection) {\n var func = isArray(collection) ? arraySample : baseSample;\n return func(collection);\n }\n\n /**\n * Gets `n` random elements at unique keys from `collection` up to the\n * size of `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @param {number} [n=1] The number of elements to sample.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the random elements.\n * @example\n *\n * _.sampleSize([1, 2, 3], 2);\n * // => [3, 1]\n *\n * _.sampleSize([1, 2, 3], 4);\n * // => [2, 3, 1]\n */\n function sampleSize(collection, n, guard) {\n if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n var func = isArray(collection) ? arraySampleSize : baseSampleSize;\n return func(collection, n);\n }\n\n /**\n * Creates an array of shuffled values, using a version of the\n * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n * @example\n *\n * _.shuffle([1, 2, 3, 4]);\n * // => [4, 1, 3, 2]\n */\n function shuffle(collection) {\n var func = isArray(collection) ? arrayShuffle : baseShuffle;\n return func(collection);\n }\n\n /**\n * Gets the size of `collection` by returning its length for array-like\n * values or the number of own enumerable string keyed properties for objects.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @returns {number} Returns the collection size.\n * @example\n *\n * _.size([1, 2, 3]);\n * // => 3\n *\n * _.size({ 'a': 1, 'b': 2 });\n * // => 2\n *\n * _.size('pebbles');\n * // => 7\n */\n function size(collection) {\n if (collection == null) {\n return 0;\n }\n if (isArrayLike(collection)) {\n return isString(collection) ? stringSize(collection) : collection.length;\n }\n var tag = getTag(collection);\n if (tag == mapTag || tag == setTag) {\n return collection.size;\n }\n return baseKeys(collection).length;\n }\n\n /**\n * Checks if `predicate` returns truthy for **any** element of `collection`.\n * Iteration is stopped once `predicate` returns truthy. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n * @example\n *\n * _.some([null, 0, 'yes', false], Boolean);\n * // => true\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.some(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.some(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.some(users, 'active');\n * // => true\n */\n function some(collection, predicate, guard) {\n var func = isArray(collection) ? arraySome : baseSome;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 30 },\n * { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, [function(o) { return o.user; }]);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]\n */\n var sortBy = baseRest(function(collection, iteratees) {\n if (collection == null) {\n return [];\n }\n var length = iteratees.length;\n if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n iteratees = [];\n } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n iteratees = [iteratees[0]];\n }\n return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\n var now = ctxNow || function() {\n return root.Date.now();\n };\n\n /*------------------------------------------------------------------------*/\n\n /**\n * The opposite of `_.before`; this method creates a function that invokes\n * `func` once it's called `n` or more times.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {number} n The number of calls before `func` is invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var saves = ['profile', 'settings'];\n *\n * var done = _.after(saves.length, function() {\n * console.log('done saving!');\n * });\n *\n * _.forEach(saves, function(type) {\n * asyncSave({ 'type': type, 'complete': done });\n * });\n * // => Logs 'done saving!' after the two async saves have completed.\n */\n function after(n, func) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n < 1) {\n return func.apply(this, arguments);\n }\n };\n }\n\n /**\n * Creates a function that invokes `func`, with up to `n` arguments,\n * ignoring any additional arguments.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @param {number} [n=func.length] The arity cap.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n * // => [6, 8, 10]\n */\n function ary(func, n, guard) {\n n = guard ? undefined : n;\n n = (func && n == null) ? func.length : n;\n return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);\n }\n\n /**\n * Creates a function that invokes `func`, with the `this` binding and arguments\n * of the created function, while it's called less than `n` times. Subsequent\n * calls to the created function return the result of the last `func` invocation.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {number} n The number of calls at which `func` is no longer invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * jQuery(element).on('click', _.before(5, addContactToList));\n * // => Allows adding up to 4 contacts to the list.\n */\n function before(n, func) {\n var result;\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n > 0) {\n result = func.apply(this, arguments);\n }\n if (n <= 1) {\n func = undefined;\n }\n return result;\n };\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of `thisArg`\n * and `partials` prepended to the arguments it receives.\n *\n * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for partially applied arguments.\n *\n * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n * property of bound functions.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to bind.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * function greet(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n *\n * var object = { 'user': 'fred' };\n *\n * var bound = _.bind(greet, object, 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bind(greet, object, _, '!');\n * bound('hi');\n * // => 'hi fred!'\n */\n var bind = baseRest(function(func, thisArg, partials) {\n var bitmask = WRAP_BIND_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bind));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(func, bitmask, thisArg, partials, holders);\n });\n\n /**\n * Creates a function that invokes the method at `object[key]` with `partials`\n * prepended to the arguments it receives.\n *\n * This method differs from `_.bind` by allowing bound functions to reference\n * methods that may be redefined or don't yet exist. See\n * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\n * for more details.\n *\n * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Function\n * @param {Object} object The object to invoke the method on.\n * @param {string} key The key of the method.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * var object = {\n * 'user': 'fred',\n * 'greet': function(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n * };\n *\n * var bound = _.bindKey(object, 'greet', 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * object.greet = function(greeting, punctuation) {\n * return greeting + 'ya ' + this.user + punctuation;\n * };\n *\n * bound('!');\n * // => 'hiya fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bindKey(object, 'greet', _, '!');\n * bound('hi');\n * // => 'hiya fred!'\n */\n var bindKey = baseRest(function(object, key, partials) {\n var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bindKey));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(key, bitmask, object, partials, holders);\n });\n\n /**\n * Creates a function that accepts arguments of `func` and either invokes\n * `func` returning its result, if at least `arity` number of arguments have\n * been provided, or returns a function that accepts the remaining `func`\n * arguments, and so on. The arity of `func` may be specified if `func.length`\n * is not sufficient.\n *\n * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curry(abc);\n *\n * curried(1)(2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(1)(_, 3)(2);\n * // => [1, 2, 3]\n */\n function curry(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curry.placeholder;\n return result;\n }\n\n /**\n * This method is like `_.curry` except that arguments are applied to `func`\n * in the manner of `_.partialRight` instead of `_.partial`.\n *\n * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curryRight(abc);\n *\n * curried(3)(2)(1);\n * // => [1, 2, 3]\n *\n * curried(2, 3)(1);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(3)(1, _)(2);\n * // => [1, 2, 3]\n */\n function curryRight(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curryRight.placeholder;\n return result;\n }\n\n /**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\n function debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n }\n\n /**\n * Defers invoking the `func` until the current call stack has cleared. Any\n * additional arguments are provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to defer.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.defer(function(text) {\n * console.log(text);\n * }, 'deferred');\n * // => Logs 'deferred' after one millisecond.\n */\n var defer = baseRest(function(func, args) {\n return baseDelay(func, 1, args);\n });\n\n /**\n * Invokes `func` after `wait` milliseconds. Any additional arguments are\n * provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.delay(function(text) {\n * console.log(text);\n * }, 1000, 'later');\n * // => Logs 'later' after one second.\n */\n var delay = baseRest(function(func, wait, args) {\n return baseDelay(func, toNumber(wait) || 0, args);\n });\n\n /**\n * Creates a function that invokes `func` with arguments reversed.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to flip arguments for.\n * @returns {Function} Returns the new flipped function.\n * @example\n *\n * var flipped = _.flip(function() {\n * return _.toArray(arguments);\n * });\n *\n * flipped('a', 'b', 'c', 'd');\n * // => ['d', 'c', 'b', 'a']\n */\n function flip(func) {\n return createWrap(func, WRAP_FLIP_FLAG);\n }\n\n /**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\n function memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n }\n\n // Expose `MapCache`.\n memoize.Cache = MapCache;\n\n /**\n * Creates a function that negates the result of the predicate `func`. The\n * `func` predicate is invoked with the `this` binding and arguments of the\n * created function.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} predicate The predicate to negate.\n * @returns {Function} Returns the new negated function.\n * @example\n *\n * function isEven(n) {\n * return n % 2 == 0;\n * }\n *\n * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n * // => [1, 3, 5]\n */\n function negate(predicate) {\n if (typeof predicate != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return function() {\n var args = arguments;\n switch (args.length) {\n case 0: return !predicate.call(this);\n case 1: return !predicate.call(this, args[0]);\n case 2: return !predicate.call(this, args[0], args[1]);\n case 3: return !predicate.call(this, args[0], args[1], args[2]);\n }\n return !predicate.apply(this, args);\n };\n }\n\n /**\n * Creates a function that is restricted to invoking `func` once. Repeat calls\n * to the function return the value of the first invocation. The `func` is\n * invoked with the `this` binding and arguments of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var initialize = _.once(createApplication);\n * initialize();\n * initialize();\n * // => `createApplication` is invoked once\n */\n function once(func) {\n return before(2, func);\n }\n\n /**\n * Creates a function that invokes `func` with its arguments transformed.\n *\n * @static\n * @since 4.0.0\n * @memberOf _\n * @category Function\n * @param {Function} func The function to wrap.\n * @param {...(Function|Function[])} [transforms=[_.identity]]\n * The argument transforms.\n * @returns {Function} Returns the new function.\n * @example\n *\n * function doubled(n) {\n * return n * 2;\n * }\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var func = _.overArgs(function(x, y) {\n * return [x, y];\n * }, [square, doubled]);\n *\n * func(9, 3);\n * // => [81, 6]\n *\n * func(10, 5);\n * // => [100, 10]\n */\n var overArgs = castRest(function(func, transforms) {\n transforms = (transforms.length == 1 && isArray(transforms[0]))\n ? arrayMap(transforms[0], baseUnary(getIteratee()))\n : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));\n\n var funcsLength = transforms.length;\n return baseRest(function(args) {\n var index = -1,\n length = nativeMin(args.length, funcsLength);\n\n while (++index < length) {\n args[index] = transforms[index].call(this, args[index]);\n }\n return apply(func, this, args);\n });\n });\n\n /**\n * Creates a function that invokes `func` with `partials` prepended to the\n * arguments it receives. This method is like `_.bind` except it does **not**\n * alter the `this` binding.\n *\n * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 0.2.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var sayHelloTo = _.partial(greet, 'hello');\n * sayHelloTo('fred');\n * // => 'hello fred'\n *\n * // Partially applied with placeholders.\n * var greetFred = _.partial(greet, _, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n */\n var partial = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partial));\n return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);\n });\n\n /**\n * This method is like `_.partial` except that partially applied arguments\n * are appended to the arguments it receives.\n *\n * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var greetFred = _.partialRight(greet, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n *\n * // Partially applied with placeholders.\n * var sayHelloTo = _.partialRight(greet, 'hello', _);\n * sayHelloTo('fred');\n * // => 'hello fred'\n */\n var partialRight = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partialRight));\n return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);\n });\n\n /**\n * Creates a function that invokes `func` with arguments arranged according\n * to the specified `indexes` where the argument value at the first index is\n * provided as the first argument, the argument value at the second index is\n * provided as the second argument, and so on.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to rearrange arguments for.\n * @param {...(number|number[])} indexes The arranged argument indexes.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var rearged = _.rearg(function(a, b, c) {\n * return [a, b, c];\n * }, [2, 0, 1]);\n *\n * rearged('b', 'c', 'a')\n * // => ['a', 'b', 'c']\n */\n var rearg = flatRest(function(func, indexes) {\n return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);\n });\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * created function and arguments from `start` and beyond provided as\n * an array.\n *\n * **Note:** This method is based on the\n * [rest parameter](https://mdn.io/rest_parameters).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.rest(function(what, names) {\n * return what + ' ' + _.initial(names).join(', ') +\n * (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n * });\n *\n * say('hello', 'fred', 'barney', 'pebbles');\n * // => 'hello fred, barney, & pebbles'\n */\n function rest(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start === undefined ? start : toInteger(start);\n return baseRest(func, start);\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * create function and an array of arguments much like\n * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\n *\n * **Note:** This method is based on the\n * [spread operator](https://mdn.io/spread_operator).\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Function\n * @param {Function} func The function to spread arguments over.\n * @param {number} [start=0] The start position of the spread.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.spread(function(who, what) {\n * return who + ' says ' + what;\n * });\n *\n * say(['fred', 'hello']);\n * // => 'fred says hello'\n *\n * var numbers = Promise.all([\n * Promise.resolve(40),\n * Promise.resolve(36)\n * ]);\n *\n * numbers.then(_.spread(function(x, y) {\n * return x + y;\n * }));\n * // => a Promise of 76\n */\n function spread(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start == null ? 0 : nativeMax(toInteger(start), 0);\n return baseRest(function(args) {\n var array = args[start],\n otherArgs = castSlice(args, 0, start);\n\n if (array) {\n arrayPush(otherArgs, array);\n }\n return apply(func, this, otherArgs);\n });\n }\n\n /**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\n function throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n }\n\n /**\n * Creates a function that accepts up to one argument, ignoring any\n * additional arguments.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.unary(parseInt));\n * // => [6, 8, 10]\n */\n function unary(func) {\n return ary(func, 1);\n }\n\n /**\n * Creates a function that provides `value` to `wrapper` as its first\n * argument. Any additional arguments provided to the function are appended\n * to those provided to the `wrapper`. The wrapper is invoked with the `this`\n * binding of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {*} value The value to wrap.\n * @param {Function} [wrapper=identity] The wrapper function.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var p = _.wrap(_.escape, function(func, text) {\n * return '

' + func(text) + '

';\n * });\n *\n * p('fred, barney, & pebbles');\n * // => '

fred, barney, & pebbles

'\n */\n function wrap(value, wrapper) {\n return partial(castFunction(wrapper), value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Casts `value` as an array if it's not one.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Lang\n * @param {*} value The value to inspect.\n * @returns {Array} Returns the cast array.\n * @example\n *\n * _.castArray(1);\n * // => [1]\n *\n * _.castArray({ 'a': 1 });\n * // => [{ 'a': 1 }]\n *\n * _.castArray('abc');\n * // => ['abc']\n *\n * _.castArray(null);\n * // => [null]\n *\n * _.castArray(undefined);\n * // => [undefined]\n *\n * _.castArray();\n * // => []\n *\n * var array = [1, 2, 3];\n * console.log(_.castArray(array) === array);\n * // => true\n */\n function castArray() {\n if (!arguments.length) {\n return [];\n }\n var value = arguments[0];\n return isArray(value) ? value : [value];\n }\n\n /**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\n function clone(value) {\n return baseClone(value, CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.clone` except that it accepts `customizer` which\n * is invoked to produce the cloned value. If `customizer` returns `undefined`,\n * cloning is handled by the method instead. The `customizer` is invoked with\n * up to four arguments; (value [, index|key, object, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeepWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(false);\n * }\n * }\n *\n * var el = _.cloneWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 0\n */\n function cloneWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\n function cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.cloneWith` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the deep cloned value.\n * @see _.cloneWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(true);\n * }\n * }\n *\n * var el = _.cloneDeepWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 20\n */\n function cloneDeepWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * Checks if `object` conforms to `source` by invoking the predicate\n * properties of `source` with the corresponding property values of `object`.\n *\n * **Note:** This method is equivalent to `_.conforms` when `source` is\n * partially applied.\n *\n * @static\n * @memberOf _\n * @since 4.14.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n * // => true\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n * // => false\n */\n function conformsTo(object, source) {\n return source == null || baseConformsTo(object, source, keys(source));\n }\n\n /**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\n function eq(value, other) {\n return value === other || (value !== value && other !== other);\n }\n\n /**\n * Checks if `value` is greater than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n * @see _.lt\n * @example\n *\n * _.gt(3, 1);\n * // => true\n *\n * _.gt(3, 3);\n * // => false\n *\n * _.gt(1, 3);\n * // => false\n */\n var gt = createRelationalOperation(baseGt);\n\n /**\n * Checks if `value` is greater than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than or equal to\n * `other`, else `false`.\n * @see _.lte\n * @example\n *\n * _.gte(3, 1);\n * // => true\n *\n * _.gte(3, 3);\n * // => true\n *\n * _.gte(1, 3);\n * // => false\n */\n var gte = createRelationalOperation(function(value, other) {\n return value >= other;\n });\n\n /**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\n var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n };\n\n /**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\n var isArray = Array.isArray;\n\n /**\n * Checks if `value` is classified as an `ArrayBuffer` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n * @example\n *\n * _.isArrayBuffer(new ArrayBuffer(2));\n * // => true\n *\n * _.isArrayBuffer(new Array(2));\n * // => false\n */\n var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;\n\n /**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\n function isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n }\n\n /**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\n function isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n }\n\n /**\n * Checks if `value` is classified as a boolean primitive or object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n * @example\n *\n * _.isBoolean(false);\n * // => true\n *\n * _.isBoolean(null);\n * // => false\n */\n function isBoolean(value) {\n return value === true || value === false ||\n (isObjectLike(value) && baseGetTag(value) == boolTag);\n }\n\n /**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\n var isBuffer = nativeIsBuffer || stubFalse;\n\n /**\n * Checks if `value` is classified as a `Date` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n * @example\n *\n * _.isDate(new Date);\n * // => true\n *\n * _.isDate('Mon April 23 2012');\n * // => false\n */\n var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\n /**\n * Checks if `value` is likely a DOM element.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\n * @example\n *\n * _.isElement(document.body);\n * // => true\n *\n * _.isElement('');\n * // => false\n */\n function isElement(value) {\n return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\n }\n\n /**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\n function isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArrayLike(value) &&\n (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !baseKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\n function isEqual(value, other) {\n return baseIsEqual(value, other);\n }\n\n /**\n * This method is like `_.isEqual` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with up to\n * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, othValue) {\n * if (isGreeting(objValue) && isGreeting(othValue)) {\n * return true;\n * }\n * }\n *\n * var array = ['hello', 'goodbye'];\n * var other = ['hi', 'goodbye'];\n *\n * _.isEqualWith(array, other, customizer);\n * // => true\n */\n function isEqualWith(value, other, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n var result = customizer ? customizer(value, other) : undefined;\n return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n }\n\n /**\n * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n * `SyntaxError`, `TypeError`, or `URIError` object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n * @example\n *\n * _.isError(new Error);\n * // => true\n *\n * _.isError(Error);\n * // => false\n */\n function isError(value) {\n if (!isObjectLike(value)) {\n return false;\n }\n var tag = baseGetTag(value);\n return tag == errorTag || tag == domExcTag ||\n (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));\n }\n\n /**\n * Checks if `value` is a finite primitive number.\n *\n * **Note:** This method is based on\n * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n * @example\n *\n * _.isFinite(3);\n * // => true\n *\n * _.isFinite(Number.MIN_VALUE);\n * // => true\n *\n * _.isFinite(Infinity);\n * // => false\n *\n * _.isFinite('3');\n * // => false\n */\n function isFinite(value) {\n return typeof value == 'number' && nativeIsFinite(value);\n }\n\n /**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\n function isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n }\n\n /**\n * Checks if `value` is an integer.\n *\n * **Note:** This method is based on\n * [`Number.isInteger`](https://mdn.io/Number/isInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\n * @example\n *\n * _.isInteger(3);\n * // => true\n *\n * _.isInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isInteger(Infinity);\n * // => false\n *\n * _.isInteger('3');\n * // => false\n */\n function isInteger(value) {\n return typeof value == 'number' && value == toInteger(value);\n }\n\n /**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\n function isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\n function isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n }\n\n /**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\n function isObjectLike(value) {\n return value != null && typeof value == 'object';\n }\n\n /**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\n var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\n /**\n * Performs a partial deep comparison between `object` and `source` to\n * determine if `object` contains equivalent property values.\n *\n * **Note:** This method is equivalent to `_.matches` when `source` is\n * partially applied.\n *\n * Partial comparisons will match empty array and empty object `source`\n * values against any array or object value, respectively. See `_.isEqual`\n * for a list of supported value comparisons.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.isMatch(object, { 'b': 2 });\n * // => true\n *\n * _.isMatch(object, { 'b': 1 });\n * // => false\n */\n function isMatch(object, source) {\n return object === source || baseIsMatch(object, source, getMatchData(source));\n }\n\n /**\n * This method is like `_.isMatch` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with five\n * arguments: (objValue, srcValue, index|key, object, source).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, srcValue) {\n * if (isGreeting(objValue) && isGreeting(srcValue)) {\n * return true;\n * }\n * }\n *\n * var object = { 'greeting': 'hello' };\n * var source = { 'greeting': 'hi' };\n *\n * _.isMatchWith(object, source, customizer);\n * // => true\n */\n function isMatchWith(object, source, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseIsMatch(object, source, getMatchData(source), customizer);\n }\n\n /**\n * Checks if `value` is `NaN`.\n *\n * **Note:** This method is based on\n * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n * `undefined` and other non-number values.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n * @example\n *\n * _.isNaN(NaN);\n * // => true\n *\n * _.isNaN(new Number(NaN));\n * // => true\n *\n * isNaN(undefined);\n * // => true\n *\n * _.isNaN(undefined);\n * // => false\n */\n function isNaN(value) {\n // An `NaN` primitive is the only value that is not equal to itself.\n // Perform the `toStringTag` check first to avoid errors with some\n // ActiveX objects in IE.\n return isNumber(value) && value != +value;\n }\n\n /**\n * Checks if `value` is a pristine native function.\n *\n * **Note:** This method can't reliably detect native functions in the presence\n * of the core-js package because core-js circumvents this kind of detection.\n * Despite multiple requests, the core-js maintainer has made it clear: any\n * attempt to fix the detection will be obstructed. As a result, we're left\n * with little choice but to throw an error. Unfortunately, this also affects\n * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\n * which rely on core-js.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\n function isNative(value) {\n if (isMaskable(value)) {\n throw new Error(CORE_ERROR_TEXT);\n }\n return baseIsNative(value);\n }\n\n /**\n * Checks if `value` is `null`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n * @example\n *\n * _.isNull(null);\n * // => true\n *\n * _.isNull(void 0);\n * // => false\n */\n function isNull(value) {\n return value === null;\n }\n\n /**\n * Checks if `value` is `null` or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n * @example\n *\n * _.isNil(null);\n * // => true\n *\n * _.isNil(void 0);\n * // => true\n *\n * _.isNil(NaN);\n * // => false\n */\n function isNil(value) {\n return value == null;\n }\n\n /**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n * classified as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\n function isNumber(value) {\n return typeof value == 'number' ||\n (isObjectLike(value) && baseGetTag(value) == numberTag);\n }\n\n /**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\n function isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n }\n\n /**\n * Checks if `value` is classified as a `RegExp` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n * @example\n *\n * _.isRegExp(/abc/);\n * // => true\n *\n * _.isRegExp('/abc/');\n * // => false\n */\n var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\n /**\n * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\n * double precision number which isn't the result of a rounded unsafe integer.\n *\n * **Note:** This method is based on\n * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.\n * @example\n *\n * _.isSafeInteger(3);\n * // => true\n *\n * _.isSafeInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isSafeInteger(Infinity);\n * // => false\n *\n * _.isSafeInteger('3');\n * // => false\n */\n function isSafeInteger(value) {\n return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\n var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\n /**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\n function isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n }\n\n /**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\n function isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n }\n\n /**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\n var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n /**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\n function isUndefined(value) {\n return value === undefined;\n }\n\n /**\n * Checks if `value` is classified as a `WeakMap` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.\n * @example\n *\n * _.isWeakMap(new WeakMap);\n * // => true\n *\n * _.isWeakMap(new Map);\n * // => false\n */\n function isWeakMap(value) {\n return isObjectLike(value) && getTag(value) == weakMapTag;\n }\n\n /**\n * Checks if `value` is classified as a `WeakSet` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.\n * @example\n *\n * _.isWeakSet(new WeakSet);\n * // => true\n *\n * _.isWeakSet(new Set);\n * // => false\n */\n function isWeakSet(value) {\n return isObjectLike(value) && baseGetTag(value) == weakSetTag;\n }\n\n /**\n * Checks if `value` is less than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n * @see _.gt\n * @example\n *\n * _.lt(1, 3);\n * // => true\n *\n * _.lt(3, 3);\n * // => false\n *\n * _.lt(3, 1);\n * // => false\n */\n var lt = createRelationalOperation(baseLt);\n\n /**\n * Checks if `value` is less than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than or equal to\n * `other`, else `false`.\n * @see _.gte\n * @example\n *\n * _.lte(1, 3);\n * // => true\n *\n * _.lte(3, 3);\n * // => true\n *\n * _.lte(3, 1);\n * // => false\n */\n var lte = createRelationalOperation(function(value, other) {\n return value <= other;\n });\n\n /**\n * Converts `value` to an array.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Array} Returns the converted array.\n * @example\n *\n * _.toArray({ 'a': 1, 'b': 2 });\n * // => [1, 2]\n *\n * _.toArray('abc');\n * // => ['a', 'b', 'c']\n *\n * _.toArray(1);\n * // => []\n *\n * _.toArray(null);\n * // => []\n */\n function toArray(value) {\n if (!value) {\n return [];\n }\n if (isArrayLike(value)) {\n return isString(value) ? stringToArray(value) : copyArray(value);\n }\n if (symIterator && value[symIterator]) {\n return iteratorToArray(value[symIterator]());\n }\n var tag = getTag(value),\n func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);\n\n return func(value);\n }\n\n /**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\n function toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n }\n\n /**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\n function toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n }\n\n /**\n * Converts `value` to an integer suitable for use as the length of an\n * array-like object.\n *\n * **Note:** This method is based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toLength(3.2);\n * // => 3\n *\n * _.toLength(Number.MIN_VALUE);\n * // => 0\n *\n * _.toLength(Infinity);\n * // => 4294967295\n *\n * _.toLength('3.2');\n * // => 3\n */\n function toLength(value) {\n return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\n }\n\n /**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\n function toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n }\n\n /**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\n function toPlainObject(value) {\n return copyObject(value, keysIn(value));\n }\n\n /**\n * Converts `value` to a safe integer. A safe integer can be compared and\n * represented correctly.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toSafeInteger(3.2);\n * // => 3\n *\n * _.toSafeInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toSafeInteger(Infinity);\n * // => 9007199254740991\n *\n * _.toSafeInteger('3.2');\n * // => 3\n */\n function toSafeInteger(value) {\n return value\n ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)\n : (value === 0 ? value : 0);\n }\n\n /**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\n function toString(value) {\n return value == null ? '' : baseToString(value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Assigns own enumerable string keyed properties of source objects to the\n * destination object. Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object` and is loosely based on\n * [`Object.assign`](https://mdn.io/Object/assign).\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assignIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assign({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'c': 3 }\n */\n var assign = createAssigner(function(object, source) {\n if (isPrototype(source) || isArrayLike(source)) {\n copyObject(source, keys(source), object);\n return;\n }\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n assignValue(object, key, source[key]);\n }\n }\n });\n\n /**\n * This method is like `_.assign` except that it iterates over own and\n * inherited source properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extend\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assign\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n */\n var assignIn = createAssigner(function(object, source) {\n copyObject(source, keysIn(source), object);\n });\n\n /**\n * This method is like `_.assignIn` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extendWith\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignInWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keysIn(source), object, customizer);\n });\n\n /**\n * This method is like `_.assign` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignInWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keys(source), object, customizer);\n });\n\n /**\n * Creates an array of values corresponding to `paths` of `object`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Array} Returns the picked values.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _.at(object, ['a[0].b.c', 'a[1]']);\n * // => [3, 4]\n */\n var at = flatRest(baseAt);\n\n /**\n * Creates an object that inherits from the `prototype` object. If a\n * `properties` object is given, its own enumerable string keyed properties\n * are assigned to the created object.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Object\n * @param {Object} prototype The object to inherit from.\n * @param {Object} [properties] The properties to assign to the object.\n * @returns {Object} Returns the new object.\n * @example\n *\n * function Shape() {\n * this.x = 0;\n * this.y = 0;\n * }\n *\n * function Circle() {\n * Shape.call(this);\n * }\n *\n * Circle.prototype = _.create(Shape.prototype, {\n * 'constructor': Circle\n * });\n *\n * var circle = new Circle;\n * circle instanceof Circle;\n * // => true\n *\n * circle instanceof Shape;\n * // => true\n */\n function create(prototype, properties) {\n var result = baseCreate(prototype);\n return properties == null ? result : baseAssign(result, properties);\n }\n\n /**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var defaults = baseRest(function(object, sources) {\n object = Object(object);\n\n var index = -1;\n var length = sources.length;\n var guard = length > 2 ? sources[2] : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n length = 1;\n }\n\n while (++index < length) {\n var source = sources[index];\n var props = keysIn(source);\n var propsIndex = -1;\n var propsLength = props.length;\n\n while (++propsIndex < propsLength) {\n var key = props[propsIndex];\n var value = object[key];\n\n if (value === undefined ||\n (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n object[key] = source[key];\n }\n }\n }\n\n return object;\n });\n\n /**\n * This method is like `_.defaults` except that it recursively assigns\n * default properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaults\n * @example\n *\n * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n * // => { 'a': { 'b': 2, 'c': 3 } }\n */\n var defaultsDeep = baseRest(function(args) {\n args.push(undefined, customDefaultsMerge);\n return apply(mergeWith, undefined, args);\n });\n\n /**\n * This method is like `_.find` except that it returns the key of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findKey(users, function(o) { return o.age < 40; });\n * // => 'barney' (iteration order is not guaranteed)\n *\n * // The `_.matches` iteratee shorthand.\n * _.findKey(users, { 'age': 1, 'active': true });\n * // => 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findKey(users, 'active');\n * // => 'barney'\n */\n function findKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);\n }\n\n /**\n * This method is like `_.findKey` except that it iterates over elements of\n * a collection in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findLastKey(users, function(o) { return o.age < 40; });\n * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastKey(users, { 'age': 36, 'active': true });\n * // => 'barney'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastKey(users, 'active');\n * // => 'pebbles'\n */\n function findLastKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);\n }\n\n /**\n * Iterates over own and inherited enumerable string keyed properties of an\n * object and invokes `iteratee` for each property. The iteratee is invoked\n * with three arguments: (value, key, object). Iteratee functions may exit\n * iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forInRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forIn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n */\n function forIn(object, iteratee) {\n return object == null\n ? object\n : baseFor(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * This method is like `_.forIn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forInRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n */\n function forInRight(object, iteratee) {\n return object == null\n ? object\n : baseForRight(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * Iterates over own enumerable string keyed properties of an object and\n * invokes `iteratee` for each property. The iteratee is invoked with three\n * arguments: (value, key, object). Iteratee functions may exit iteration\n * early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwnRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forOwn(object, iteratee) {\n return object && baseForOwn(object, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forOwn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwnRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n */\n function forOwnRight(object, iteratee) {\n return object && baseForOwnRight(object, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an array of function property names from own enumerable properties\n * of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functionsIn\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functions(new Foo);\n * // => ['a', 'b']\n */\n function functions(object) {\n return object == null ? [] : baseFunctions(object, keys(object));\n }\n\n /**\n * Creates an array of function property names from own and inherited\n * enumerable properties of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functions\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functionsIn(new Foo);\n * // => ['a', 'b', 'c']\n */\n function functionsIn(object) {\n return object == null ? [] : baseFunctions(object, keysIn(object));\n }\n\n /**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\n function get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n }\n\n /**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\n function has(object, path) {\n return object != null && hasPath(object, path, baseHas);\n }\n\n /**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\n function hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n }\n\n /**\n * Creates an object composed of the inverted keys and values of `object`.\n * If `object` contains duplicate values, subsequent values overwrite\n * property assignments of previous values.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Object\n * @param {Object} object The object to invert.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invert(object);\n * // => { '1': 'c', '2': 'b' }\n */\n var invert = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n result[value] = key;\n }, constant(identity));\n\n /**\n * This method is like `_.invert` except that the inverted object is generated\n * from the results of running each element of `object` thru `iteratee`. The\n * corresponding inverted value of each inverted key is an array of keys\n * responsible for generating the inverted value. The iteratee is invoked\n * with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Object\n * @param {Object} object The object to invert.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invertBy(object);\n * // => { '1': ['a', 'c'], '2': ['b'] }\n *\n * _.invertBy(object, function(value) {\n * return 'group' + value;\n * });\n * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n */\n var invertBy = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n if (hasOwnProperty.call(result, value)) {\n result[value].push(key);\n } else {\n result[value] = [key];\n }\n }, getIteratee);\n\n /**\n * Invokes the method at `path` of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n *\n * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n * // => [2, 3]\n */\n var invoke = baseRest(baseInvoke);\n\n /**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\n function keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n }\n\n /**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\n function keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n }\n\n /**\n * The opposite of `_.mapValues`; this method creates an object with the\n * same values as `object` and keys generated by running each own enumerable\n * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n * with three arguments: (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapValues\n * @example\n *\n * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n * return key + value;\n * });\n * // => { 'a1': 1, 'b2': 2 }\n */\n function mapKeys(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, iteratee(value, key, object), value);\n });\n return result;\n }\n\n /**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n * 'fred': { 'user': 'fred', 'age': 40 },\n * 'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\n function mapValues(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, key, iteratee(value, key, object));\n });\n return result;\n }\n\n /**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\n var merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n });\n\n /**\n * This method is like `_.merge` except that it accepts `customizer` which\n * is invoked to produce the merged values of the destination and source\n * properties. If `customizer` returns `undefined`, merging is handled by the\n * method instead. The `customizer` is invoked with six arguments:\n * (objValue, srcValue, key, object, source, stack).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} customizer The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * function customizer(objValue, srcValue) {\n * if (_.isArray(objValue)) {\n * return objValue.concat(srcValue);\n * }\n * }\n *\n * var object = { 'a': [1], 'b': [2] };\n * var other = { 'a': [3], 'b': [4] };\n *\n * _.mergeWith(object, other, customizer);\n * // => { 'a': [1, 3], 'b': [2, 4] }\n */\n var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n baseMerge(object, source, srcIndex, customizer);\n });\n\n /**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable property paths of `object` that are not omitted.\n *\n * **Note:** This method is considerably slower than `_.pick`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to omit.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omit(object, ['a', 'c']);\n * // => { 'b': '2' }\n */\n var omit = flatRest(function(object, paths) {\n var result = {};\n if (object == null) {\n return result;\n }\n var isDeep = false;\n paths = arrayMap(paths, function(path) {\n path = castPath(path, object);\n isDeep || (isDeep = path.length > 1);\n return path;\n });\n copyObject(object, getAllKeysIn(object), result);\n if (isDeep) {\n result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n }\n var length = paths.length;\n while (length--) {\n baseUnset(result, paths[length]);\n }\n return result;\n });\n\n /**\n * The opposite of `_.pickBy`; this method creates an object composed of\n * the own and inherited enumerable string keyed properties of `object` that\n * `predicate` doesn't return truthy for. The predicate is invoked with two\n * arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omitBy(object, _.isNumber);\n * // => { 'b': '2' }\n */\n function omitBy(object, predicate) {\n return pickBy(object, negate(getIteratee(predicate)));\n }\n\n /**\n * Creates an object composed of the picked `object` properties.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pick(object, ['a', 'c']);\n * // => { 'a': 1, 'c': 3 }\n */\n var pick = flatRest(function(object, paths) {\n return object == null ? {} : basePick(object, paths);\n });\n\n /**\n * Creates an object composed of the `object` properties `predicate` returns\n * truthy for. The predicate is invoked with two arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pickBy(object, _.isNumber);\n * // => { 'a': 1, 'c': 3 }\n */\n function pickBy(object, predicate) {\n if (object == null) {\n return {};\n }\n var props = arrayMap(getAllKeysIn(object), function(prop) {\n return [prop];\n });\n predicate = getIteratee(predicate);\n return basePickBy(object, props, function(value, path) {\n return predicate(value, path[0]);\n });\n }\n\n /**\n * This method is like `_.get` except that if the resolved value is a\n * function it's invoked with the `this` binding of its parent object and\n * its result is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to resolve.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n *\n * _.result(object, 'a[0].b.c1');\n * // => 3\n *\n * _.result(object, 'a[0].b.c2');\n * // => 4\n *\n * _.result(object, 'a[0].b.c3', 'default');\n * // => 'default'\n *\n * _.result(object, 'a[0].b.c3', _.constant('default'));\n * // => 'default'\n */\n function result(object, path, defaultValue) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length;\n\n // Ensure the loop is entered when path is empty.\n if (!length) {\n length = 1;\n object = undefined;\n }\n while (++index < length) {\n var value = object == null ? undefined : object[toKey(path[index])];\n if (value === undefined) {\n index = length;\n value = defaultValue;\n }\n object = isFunction(value) ? value.call(object) : value;\n }\n return object;\n }\n\n /**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\n function set(object, path, value) {\n return object == null ? object : baseSet(object, path, value);\n }\n\n /**\n * This method is like `_.set` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.setWith(object, '[0][1]', 'a', Object);\n * // => { '0': { '1': 'a' } }\n */\n function setWith(object, path, value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseSet(object, path, value, customizer);\n }\n\n /**\n * Creates an array of own enumerable string keyed-value pairs for `object`\n * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n * entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entries\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairs(new Foo);\n * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n */\n var toPairs = createToPairs(keys);\n\n /**\n * Creates an array of own and inherited enumerable string keyed-value pairs\n * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n * or set, its entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entriesIn\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairsIn(new Foo);\n * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n */\n var toPairsIn = createToPairs(keysIn);\n\n /**\n * An alternative to `_.reduce`; this method transforms `object` to a new\n * `accumulator` object which is the result of running each of its own\n * enumerable string keyed properties thru `iteratee`, with each invocation\n * potentially mutating the `accumulator` object. If `accumulator` is not\n * provided, a new object with the same `[[Prototype]]` will be used. The\n * iteratee is invoked with four arguments: (accumulator, value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The custom accumulator value.\n * @returns {*} Returns the accumulated value.\n * @example\n *\n * _.transform([2, 3, 4], function(result, n) {\n * result.push(n *= n);\n * return n % 2 == 0;\n * }, []);\n * // => [4, 9]\n *\n * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] }\n */\n function transform(object, iteratee, accumulator) {\n var isArr = isArray(object),\n isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\n iteratee = getIteratee(iteratee, 4);\n if (accumulator == null) {\n var Ctor = object && object.constructor;\n if (isArrLike) {\n accumulator = isArr ? new Ctor : [];\n }\n else if (isObject(object)) {\n accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n }\n else {\n accumulator = {};\n }\n }\n (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n return iteratee(accumulator, value, index, object);\n });\n return accumulator;\n }\n\n /**\n * Removes the property at `path` of `object`.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n * _.unset(object, 'a[0].b.c');\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n *\n * _.unset(object, ['a', '0', 'b', 'c']);\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n */\n function unset(object, path) {\n return object == null ? true : baseUnset(object, path);\n }\n\n /**\n * This method is like `_.set` except that accepts `updater` to produce the\n * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n * is invoked with one argument: (value).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n * console.log(object.a[0].b.c);\n * // => 9\n *\n * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n * console.log(object.x[0].y.z);\n * // => 0\n */\n function update(object, path, updater) {\n return object == null ? object : baseUpdate(object, path, castFunction(updater));\n }\n\n /**\n * This method is like `_.update` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n * // => { '0': { '1': 'a' } }\n */\n function updateWith(object, path, updater, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\n }\n\n /**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\n function values(object) {\n return object == null ? [] : baseValues(object, keys(object));\n }\n\n /**\n * Creates an array of the own and inherited enumerable string keyed property\n * values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.valuesIn(new Foo);\n * // => [1, 2, 3] (iteration order is not guaranteed)\n */\n function valuesIn(object) {\n return object == null ? [] : baseValues(object, keysIn(object));\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Clamps `number` within the inclusive `lower` and `upper` bounds.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Number\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n * @example\n *\n * _.clamp(-10, -5, 5);\n * // => -5\n *\n * _.clamp(10, -5, 5);\n * // => 5\n */\n function clamp(number, lower, upper) {\n if (upper === undefined) {\n upper = lower;\n lower = undefined;\n }\n if (upper !== undefined) {\n upper = toNumber(upper);\n upper = upper === upper ? upper : 0;\n }\n if (lower !== undefined) {\n lower = toNumber(lower);\n lower = lower === lower ? lower : 0;\n }\n return baseClamp(toNumber(number), lower, upper);\n }\n\n /**\n * Checks if `n` is between `start` and up to, but not including, `end`. If\n * `end` is not specified, it's set to `start` with `start` then set to `0`.\n * If `start` is greater than `end` the params are swapped to support\n * negative ranges.\n *\n * @static\n * @memberOf _\n * @since 3.3.0\n * @category Number\n * @param {number} number The number to check.\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n * @see _.range, _.rangeRight\n * @example\n *\n * _.inRange(3, 2, 4);\n * // => true\n *\n * _.inRange(4, 8);\n * // => true\n *\n * _.inRange(4, 2);\n * // => false\n *\n * _.inRange(2, 2);\n * // => false\n *\n * _.inRange(1.2, 2);\n * // => true\n *\n * _.inRange(5.2, 4);\n * // => false\n *\n * _.inRange(-3, -2, -6);\n * // => true\n */\n function inRange(number, start, end) {\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n number = toNumber(number);\n return baseInRange(number, start, end);\n }\n\n /**\n * Produces a random number between the inclusive `lower` and `upper` bounds.\n * If only one argument is provided a number between `0` and the given number\n * is returned. If `floating` is `true`, or either `lower` or `upper` are\n * floats, a floating-point number is returned instead of an integer.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Number\n * @param {number} [lower=0] The lower bound.\n * @param {number} [upper=1] The upper bound.\n * @param {boolean} [floating] Specify returning a floating-point number.\n * @returns {number} Returns the random number.\n * @example\n *\n * _.random(0, 5);\n * // => an integer between 0 and 5\n *\n * _.random(5);\n * // => also an integer between 0 and 5\n *\n * _.random(5, true);\n * // => a floating-point number between 0 and 5\n *\n * _.random(1.2, 5.2);\n * // => a floating-point number between 1.2 and 5.2\n */\n function random(lower, upper, floating) {\n if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\n upper = floating = undefined;\n }\n if (floating === undefined) {\n if (typeof upper == 'boolean') {\n floating = upper;\n upper = undefined;\n }\n else if (typeof lower == 'boolean') {\n floating = lower;\n lower = undefined;\n }\n }\n if (lower === undefined && upper === undefined) {\n lower = 0;\n upper = 1;\n }\n else {\n lower = toFinite(lower);\n if (upper === undefined) {\n upper = lower;\n lower = 0;\n } else {\n upper = toFinite(upper);\n }\n }\n if (lower > upper) {\n var temp = lower;\n lower = upper;\n upper = temp;\n }\n if (floating || lower % 1 || upper % 1) {\n var rand = nativeRandom();\n return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);\n }\n return baseRandom(lower, upper);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the camel cased string.\n * @example\n *\n * _.camelCase('Foo Bar');\n * // => 'fooBar'\n *\n * _.camelCase('--foo-bar--');\n * // => 'fooBar'\n *\n * _.camelCase('__FOO_BAR__');\n * // => 'fooBar'\n */\n var camelCase = createCompounder(function(result, word, index) {\n word = word.toLowerCase();\n return result + (index ? capitalize(word) : word);\n });\n\n /**\n * Converts the first character of `string` to upper case and the remaining\n * to lower case.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to capitalize.\n * @returns {string} Returns the capitalized string.\n * @example\n *\n * _.capitalize('FRED');\n * // => 'Fred'\n */\n function capitalize(string) {\n return upperFirst(toString(string).toLowerCase());\n }\n\n /**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\n function deburr(string) {\n string = toString(string);\n return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n }\n\n /**\n * Checks if `string` ends with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=string.length] The position to search up to.\n * @returns {boolean} Returns `true` if `string` ends with `target`,\n * else `false`.\n * @example\n *\n * _.endsWith('abc', 'c');\n * // => true\n *\n * _.endsWith('abc', 'b');\n * // => false\n *\n * _.endsWith('abc', 'b', 2);\n * // => true\n */\n function endsWith(string, target, position) {\n string = toString(string);\n target = baseToString(target);\n\n var length = string.length;\n position = position === undefined\n ? length\n : baseClamp(toInteger(position), 0, length);\n\n var end = position;\n position -= target.length;\n return position >= 0 && string.slice(position, end) == target;\n }\n\n /**\n * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n * corresponding HTML entities.\n *\n * **Note:** No other characters are escaped. To escape additional\n * characters use a third-party library like [_he_](https://mths.be/he).\n *\n * Though the \">\" character is escaped for symmetry, characters like\n * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n * unless they're part of a tag or unquoted attribute value. See\n * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n * (under \"semi-related fun fact\") for more details.\n *\n * When working with HTML you should always\n * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n * XSS vectors.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escape('fred, barney, & pebbles');\n * // => 'fred, barney, & pebbles'\n */\n function escape(string) {\n string = toString(string);\n return (string && reHasUnescapedHtml.test(string))\n ? string.replace(reUnescapedHtml, escapeHtmlChar)\n : string;\n }\n\n /**\n * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escapeRegExp('[lodash](https://lodash.com/)');\n * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n */\n function escapeRegExp(string) {\n string = toString(string);\n return (string && reHasRegExpChar.test(string))\n ? string.replace(reRegExpChar, '\\\\$&')\n : string;\n }\n\n /**\n * Converts `string` to\n * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the kebab cased string.\n * @example\n *\n * _.kebabCase('Foo Bar');\n * // => 'foo-bar'\n *\n * _.kebabCase('fooBar');\n * // => 'foo-bar'\n *\n * _.kebabCase('__FOO_BAR__');\n * // => 'foo-bar'\n */\n var kebabCase = createCompounder(function(result, word, index) {\n return result + (index ? '-' : '') + word.toLowerCase();\n });\n\n /**\n * Converts `string`, as space separated words, to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the lower cased string.\n * @example\n *\n * _.lowerCase('--Foo-Bar--');\n * // => 'foo bar'\n *\n * _.lowerCase('fooBar');\n * // => 'foo bar'\n *\n * _.lowerCase('__FOO_BAR__');\n * // => 'foo bar'\n */\n var lowerCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + word.toLowerCase();\n });\n\n /**\n * Converts the first character of `string` to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.lowerFirst('Fred');\n * // => 'fred'\n *\n * _.lowerFirst('FRED');\n * // => 'fRED'\n */\n var lowerFirst = createCaseFirst('toLowerCase');\n\n /**\n * Pads `string` on the left and right sides if it's shorter than `length`.\n * Padding characters are truncated if they can't be evenly divided by `length`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.pad('abc', 8);\n * // => ' abc '\n *\n * _.pad('abc', 8, '_-');\n * // => '_-abc_-_'\n *\n * _.pad('abc', 3);\n * // => 'abc'\n */\n function pad(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n if (!length || strLength >= length) {\n return string;\n }\n var mid = (length - strLength) / 2;\n return (\n createPadding(nativeFloor(mid), chars) +\n string +\n createPadding(nativeCeil(mid), chars)\n );\n }\n\n /**\n * Pads `string` on the right side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padEnd('abc', 6);\n * // => 'abc '\n *\n * _.padEnd('abc', 6, '_-');\n * // => 'abc_-_'\n *\n * _.padEnd('abc', 3);\n * // => 'abc'\n */\n function padEnd(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (string + createPadding(length - strLength, chars))\n : string;\n }\n\n /**\n * Pads `string` on the left side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padStart('abc', 6);\n * // => ' abc'\n *\n * _.padStart('abc', 6, '_-');\n * // => '_-_abc'\n *\n * _.padStart('abc', 3);\n * // => 'abc'\n */\n function padStart(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (createPadding(length - strLength, chars) + string)\n : string;\n }\n\n /**\n * Converts `string` to an integer of the specified radix. If `radix` is\n * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n * hexadecimal, in which case a `radix` of `16` is used.\n *\n * **Note:** This method aligns with the\n * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category String\n * @param {string} string The string to convert.\n * @param {number} [radix=10] The radix to interpret `value` by.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.parseInt('08');\n * // => 8\n *\n * _.map(['6', '08', '10'], _.parseInt);\n * // => [6, 8, 10]\n */\n function parseInt(string, radix, guard) {\n if (guard || radix == null) {\n radix = 0;\n } else if (radix) {\n radix = +radix;\n }\n return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\n }\n\n /**\n * Repeats the given string `n` times.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to repeat.\n * @param {number} [n=1] The number of times to repeat the string.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the repeated string.\n * @example\n *\n * _.repeat('*', 3);\n * // => '***'\n *\n * _.repeat('abc', 2);\n * // => 'abcabc'\n *\n * _.repeat('abc', 0);\n * // => ''\n */\n function repeat(string, n, guard) {\n if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n return baseRepeat(toString(string), n);\n }\n\n /**\n * Replaces matches for `pattern` in `string` with `replacement`.\n *\n * **Note:** This method is based on\n * [`String#replace`](https://mdn.io/String/replace).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to modify.\n * @param {RegExp|string} pattern The pattern to replace.\n * @param {Function|string} replacement The match replacement.\n * @returns {string} Returns the modified string.\n * @example\n *\n * _.replace('Hi Fred', 'Fred', 'Barney');\n * // => 'Hi Barney'\n */\n function replace() {\n var args = arguments,\n string = toString(args[0]);\n\n return args.length < 3 ? string : string.replace(args[1], args[2]);\n }\n\n /**\n * Converts `string` to\n * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the snake cased string.\n * @example\n *\n * _.snakeCase('Foo Bar');\n * // => 'foo_bar'\n *\n * _.snakeCase('fooBar');\n * // => 'foo_bar'\n *\n * _.snakeCase('--FOO-BAR--');\n * // => 'foo_bar'\n */\n var snakeCase = createCompounder(function(result, word, index) {\n return result + (index ? '_' : '') + word.toLowerCase();\n });\n\n /**\n * Splits `string` by `separator`.\n *\n * **Note:** This method is based on\n * [`String#split`](https://mdn.io/String/split).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to split.\n * @param {RegExp|string} separator The separator pattern to split by.\n * @param {number} [limit] The length to truncate results to.\n * @returns {Array} Returns the string segments.\n * @example\n *\n * _.split('a-b-c', '-', 2);\n * // => ['a', 'b']\n */\n function split(string, separator, limit) {\n if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\n separator = limit = undefined;\n }\n limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\n if (!limit) {\n return [];\n }\n string = toString(string);\n if (string && (\n typeof separator == 'string' ||\n (separator != null && !isRegExp(separator))\n )) {\n separator = baseToString(separator);\n if (!separator && hasUnicode(string)) {\n return castSlice(stringToArray(string), 0, limit);\n }\n }\n return string.split(separator, limit);\n }\n\n /**\n * Converts `string` to\n * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n *\n * @static\n * @memberOf _\n * @since 3.1.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the start cased string.\n * @example\n *\n * _.startCase('--foo-bar--');\n * // => 'Foo Bar'\n *\n * _.startCase('fooBar');\n * // => 'Foo Bar'\n *\n * _.startCase('__FOO_BAR__');\n * // => 'FOO BAR'\n */\n var startCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + upperFirst(word);\n });\n\n /**\n * Checks if `string` starts with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=0] The position to search from.\n * @returns {boolean} Returns `true` if `string` starts with `target`,\n * else `false`.\n * @example\n *\n * _.startsWith('abc', 'a');\n * // => true\n *\n * _.startsWith('abc', 'b');\n * // => false\n *\n * _.startsWith('abc', 'b', 1);\n * // => true\n */\n function startsWith(string, target, position) {\n string = toString(string);\n position = position == null\n ? 0\n : baseClamp(toInteger(position), 0, string.length);\n\n target = baseToString(target);\n return string.slice(position, position + target.length) == target;\n }\n\n /**\n * Creates a compiled template function that can interpolate data properties\n * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n * properties may be accessed as free variables in the template. If a setting\n * object is given, it takes precedence over `_.templateSettings` values.\n *\n * **Note:** In the development build `_.template` utilizes\n * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n * for easier debugging.\n *\n * For more information on precompiling templates see\n * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n *\n * For more information on Chrome extension sandboxes see\n * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The template string.\n * @param {Object} [options={}] The options object.\n * @param {RegExp} [options.escape=_.templateSettings.escape]\n * The HTML \"escape\" delimiter.\n * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n * The \"evaluate\" delimiter.\n * @param {Object} [options.imports=_.templateSettings.imports]\n * An object to import into the template as free variables.\n * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n * The \"interpolate\" delimiter.\n * @param {string} [options.sourceURL='lodash.templateSources[n]']\n * The sourceURL of the compiled template.\n * @param {string} [options.variable='obj']\n * The data object variable name.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the compiled template function.\n * @example\n *\n * // Use the \"interpolate\" delimiter to create a compiled template.\n * var compiled = _.template('hello <%= user %>!');\n * compiled({ 'user': 'fred' });\n * // => 'hello fred!'\n *\n * // Use the HTML \"escape\" delimiter to escape data property values.\n * var compiled = _.template('<%- value %>');\n * compiled({ 'value': '