{"version":3,"mappings":"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Ae,MACf,QAAW,CACP,CACI,WAAc,MAClB,CAER,EACA,CACI,YAAe,qBACf,YAAe,gBACf,QAAW,CACP,CACI,MAAS,UACb,CAER,EACA,CACI,YAAe,OACf,YAAe,SACf,QAAW,CACP,CACI,WAAc,MAClB,CAER,EACA,CACI,YAAe,eACf,YAAe,gBACf,QAAW,CACP,CACI,MAAS,UACb,CAER,EACA,CACI,YAAe,eACf,YAAe,kBACf,QAAW,CACP,CACI,WAAc,MAClB,CAER,EACA,CACI,YAAe,iCACf,YAAe,gBACf,QAAW,CACP,CACI,WAAc,IAClB,EACA,CACI,MAAS,UACb,CAER,EACA,CACI,YAAe,gBACf,YAAe,gBACf,QAAW,CACP,CACI,WAAc,MAClB,CAER,EACA,CACI,YAAe,aACf,YAAe,gBACf,QAAW,CACP,CACI,WAAc,MAClB,CAER,EACA,CACI,YAAe,UACf,YAAe,SACf,QAAW,CACP,CACI,WAAc,MAClB,CAER,EACA,CACI,YAAe,eACf,YAAe,MACf,QAAW,CACP,CACI,WAAc,MAClB,CAER,EACA,CACI,YAAe,0BACf,YAAe,gBACf,QAAW,CACP,CACI,MAAS,UACb,CAER,EACA,CACI,YAAe,QACf,YAAe,gBACf,QAAW,CACP,CACI,WAAc,IAClB,EACA,CACI,MAAS,UACb,CAER,EACA,CACI,YAAe,QACf,YAAe,SACf,QAAW,CACP,CACI,WAAc,MAClB,CACJ,CAER,EClLeC,GAAA,CACX,CACI,YAAe,YACf,YAAe,gBACf,QAAW,CACP,CACI,MAAS,UACb,CAER,EACA,CACI,YAAe,MACf,YAAe,SACf,QAAW,CACP,CACI,WAAc,MAClB,CAER,EACA,CACI,YAAe,eACf,YAAe,gBACf,QAAW,CACP,CACI,MAAS,UACb,CAER,EACA,CACI,YAAe,iBACf,YAAe,MACf,QAAW,CACP,CACI,WAAc,MAClB,CAER,EACA,CACI,YAAe,cACf,YAAe,MACf,QAAW,CACP,CACI,WAAc,MAClB,CAER,EACA,CACI,YAAe,WACf,YAAe,gBACf,QAAW,CACP,CACI,MAAS,UACb,CAER,EACA,CACI,YAAe,aACf,YAAe,MACf,QAAW,CACP,CACI,WAAc,MAClB,CAER,EACA,CACI,YAAe,qBACf,YAAe,gBACf,QAAW,CACP,CACI,MAAS,UACb,CAER,EACA,CACI,YAAe,OACf,YAAe,SACf,QAAW,CACP,CACI,WAAc,MAClB,CAER,EACA,CACI,YAAe,eACf,YAAe,gBACf,QAAW,CACP,CACI,MAAS,UACb,CAER,EACA,CACI,YAAe,eACf,YAAe,kBACf,QAAW,CACP,CACI,WAAc,MAClB,CAER,EACA,CACI,YAAe,iCACf,YAAe,gBACf,QAAW,CACP,CACI,WAAc,IAClB,EACA,CACI,MAAS,UACb,CAER,EACA,CACI,YAAe,gBACf,YAAe,gBACf,QAAW,CACP,CACI,WAAc,MAClB,CAER,EACA,CACI,YAAe,aACf,YAAe,gBACf,QAAW,CACP,CACI,WAAc,MAClB,CAER,EACA,CACI,YAAe,UACf,YAAe,SACf,QAAW,CACP,CACI,WAAc,MAClB,CAER,EACA,CACI,YAAe,eACf,YAAe,MACf,QAAW,CACP,CACI,WAAc,MAClB,CAER,EACA,CACI,YAAe,0BACf,YAAe,gBACf,QAAW,CACP,CACI,MAAS,UACb,CAER,EACA,CACI,YAAe,QACf,YAAe,gBACf,QAAW,CACP,CACI,WAAc,IAClB,EACA,CACI,MAAS,UACb,CAER,EACA,CACI,YAAe,QACf,YAAe,SACf,QAAW,CACP,CACI,WAAc,MAClB,CACJ,CAER,EC7HA,SAASC,GACRhpB,EACA1C,EACA2rB,EACA7hB,EACA8W,EACC,CACDje,GAAU,SAAY,OAEf,MAAAipB,EAAa,SAAS,cAAc,MAAM,EAC1CzB,EAAeyB,GAAcA,EAAW,QAAQ,QAAU,UAE1DC,EAAa,CAClB,OAAQnpB,EAAM,OACd,OAAQynB,EAAe2B,GAAoBC,GAC3C,eAAgB,GAChB,iBAAkBrpB,EAAM,gBACzB,EACIA,EAAM,OACTmpB,EAAW,KAAOnpB,EAAM,MAErBA,EAAM,mBACTmpB,EAAW,iBAAmBnpB,EAAM,kBAErCoH,EAAI,MAAQ,MAAMmgB,GAAmB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","names":["focusDirective","$element","value","focus","app","progressiveDirective","loadImage","imageElement","handleIntersect","entries","observer","entry","createObserver","options","progressive","scrollToDirective","binding","$target","top","scrollTo","directives","hasLoaded","domLoaded","resolve","initialiseAccordion","listeners","mountAccordions","error","unMountAccordions","root","rootNode","accordions","accordion","accordionItems","accordionItem","accordionHeader","accordionBody","iconContainer","accordionHeaderClickFunction","arrow","tertiaryArrow","plusMinus","icon","accordionText","divHeight","adjustAccordionMaxHeight","element","event","listener","initialiseAmenityList","defineAsyncComponent","__vitePreload","initialiseAmenityListContainer","CLASS_NAME","OPTIONS","markElementReady","waitForElement","selector","parentNode","mutations","parseToObject","input","bindCarouselIcons","item","iconName","dataType","iconData","idx","carousels","carousel","elements","htmlElement","carouselOptions","carouselId","thumbnails","videoSlides","slideArrows","additionalInformation","mediaSelectorIcons","indexClass","UpdateMediaSelectorIcons","_a","glide","updateThumbnails","startAtClick","thumbnailLength","thumbnailStart","thumbnailEnd","thumbnail","dataIdx","updateMobileIndex","mobileIndex","handleVideoMedia","videoSlide","videoThumbnail","videoPlayButton","video","videoLink","info","playVideo","slideArrow","Glide","renderMediaItemCount","mediaGalleryComponent","mediaItemCount","imageOverflowCount","initialiseMediaGalleryFeature","mediaGalleryComponents","modalId","mediaGalleryModal","updateGlideInstance","focusEvent","startIndex","initialiseVerticalCarousel","mountVerticalCarousel","unMountVerticalCarousel","componentSelector","activeIndicatorClass","verticalSliderContainers","verticalSliderContainer","slideContainer","slides","indicatorContainer","indicators","variant","heading","headingHeight","removeAllActiveIndicator","indicator","removeAllActiveSlides","slide","setActiveIndicator","targetIndex","activeIndicator","setActiveSlides","activeSlides","addIndicatorClick","target","navigation","navigationHeight","targetTop","containerY","distance","targetY","initialiseVerticalSliderContainer","containerHeight","headingPadding","space","slidesArray","index","currentIndicator","currentAnchorBlock","initialiseStickySlider","unMountVerticalScrollCarousel","JsController","title","__publicField","mountFunction","function_","initialiseAssetHeroBanner","controller","mountAssetHeroBanner","textNewLine","handleScrollArrowClick","mountCarousel","header","headerArray","newHeaderArray","headerPart","scrollToPos","carouselIndex","initialiseMpcTakeoverHero","isMobile","breakpoint","initialiseHalcyonHomeHeader","mountHalcyonHomeHeader","bannerDescriptions","description","OFFSETDEFAULT","offset","scrollToCoord","coord","defaultScrollIntoViewOptions","scrollIntoView","initialiseRichMediaBanner","mountRichMediaBanner","richMediaBanner","updateMediaPanel","imageClass","media","mediaItem","updateTextPanel","textPanelClass","textPanels","textPanel","updateTabs","id","navLinks","navLink","tab","tabId","prevTabButton","nextTabButton","activeTab","prevTab","nextTab","initialiseCards","initialiseCardContainer","associateResponseWithForm","instanceId","token","hiddenInputs","initialiseButtonGroupingFormField","mountButtonGroupingFormField","unMountButtonGroupingFormField","forms","form","buttonGroupings","buttonGrouping","hiddenSelect","buttons","button","handleButtonClick","targetElement","buttonValue","selectedValues","spanElement","hiddenOption","valueArray","x","selectDefaultInButtonGroup","currentButtonGroup","selectElementText","buttonGroupingContainer","interestedButtonElement","initialiseSelectFormField","mountSelectFormField","unMountSelectFormField","selectFormFields","selectFormField","hiddenPlaceholderText","userVisibleDropdownContainer","userVisibleFormField","userVisibleButton","formFieldOptions","option","toggleOption","selectedValue","allOptionIcons","_b","_c","textArray","textOption","_d","optionClone","isSelected","refreshSelectData","currentSelect","overrideUrl","selectContainer","dropdown","defaultSelect","defaultOptionType","res","selectData","mapAsSelectObject","newOption","currentOption","newLi","placeHolderText","flatData","allOptions","key","a","b","resetSelectField","selectDefaultInSelectElement","selectElement","selectText","dependentEventTriggerElementParent","liElement","initialiseForm","mountOptimizelyFormExtensions","unMountOptimizelyFormExtensions","initialiseEpiServerForms","remindMeFormCount","initialiseFormRecaptcha","startDivs","startDiv","columns","gridContainer","containerChildren","endDiv","containerChild","dependentElement","currentElement","currentControllingElementIdsRaw","currentControllingElementIds","currentApiToOverrideData","bindTheClickListenerToControllingElement","refreshTheDependentData","getDefaultUrl","identityElements","userIdentityId","getCookie","enquiryId","intervalId","url","response","hvSave","successMessage","formResponse","linkBlock","ackSection","e","handleAcknowledgementClick","recaptchaElement","siteKey","script","destroyFormRecaptcha","modal","recaptchaScriptElement","grecaptchaBadge","cookieName","name","ca","c","getRootControllinglement","currentForm","currentElementId","currentElementIds","currentOverrideUrl","urlParameters","updateOverrideUrlForElement","defaultUrlParameters","elementType","elementValue","overloadUrlParameters","controllingElement","currentControllingElement","eventTarget","currentBu","dataOverloadUrl","source","isScriptAlreadyIncluded","resetForm","statusMessage","mainBody","allSteps","nextBtn","stepIndexInput","resetFormInputElements","inputs","checkboxes","checkbox","resetValidations","validationFailedElements","validationFailedErrors","validationFailedError","validationFailedElement","scripts","initialiseModalForm","mountModalForm","unMountModalForm","modalButtons","icsUrl","generateIcsUrl","anchor","config","modalButton","modalButtonId","initialiseFormInModal","destroyFormInModal","takeoverCallout","takeoverCalloutForm","modalEventId","formContainer","defaultSelectionElements","getMainEnquiryForm","json","eventData","eventStartTime","eventEndTime","eventLocation","eventHeading","eventDescription","icsMessage","initialiseCampaignBlock","mountComponent","fireEnquireModal","initialiseSlimCampaignBlock","initialisePassiveCarousel","destroyCarousel","_destroyCarousel","initialiseModalCarousel","destroyModalCarousel","_destroyModalCarousel","initialiseCarousel","initialiseFeatureStatQuoteCarousel","featureStatequoteElements","destroyFeatureStatQuoteCarousel","_destroyFeatureStatQuoteCarousel","initialiseFeaturedPropertysCarousel","initialiseHeroCarousel","heroElements","destroyHeroCarousel","_destroyHeroCarousel","initialiseHorizontalCarousel","initialiseMultiImageCarousel$1","mountMultiImageCarousel","unMountMultiImageCarousel","updateDisableButtons","navButtons","navButton","existingGlides","slideNode","ind","slideNumber","tabs","initialiseMultiImageInnerCarousel","mountMultiImageInnerCarousel","unMountMultiImageInnerCarousel","debounce","func","wait","timeout","context","args","later","multiImageInnerCarouselGlide","setCounterPosition","handleRefresh","tabButton","currentIndex","counter","firstSlide","currentSlide","slideWidth","leftPosition","initialiseNumberPanelCarousel","initialiseMultiImageCarousel","setButtonStyling","workplaceButtons","workplaceButton","Clickstream","identityPoolId","bindArg","deliveryStreamName","eventType","additionaldata","credentials","data","salesforceId","href","OSName","fromCognitoIdentityPool","Firehose","elem","enc","results","nAgt","browserName","fullVersion","nameOffset","verOffset","ix","majorVersion","useClickstream","props","onMounted","_sfc_main$d","defineComponent","methods","initialiseClickStream","ClickStream","initialiseCollapsedFormCta","mountCollapsedFormCta","unMountCollapsedFormCta","collapsedFormCta","ctaHeadings","ctaButton","overlayGradient","imageContainer","showForm","initialiseCommunityTileListing","updateLinkClasses","component","tinyMceLinks","linkClassesArray","linkTextClassesArray","linkIconClassesArray","link","linkClass","span","findParentWithFloatingIsland","initialiseVerticalTabBar","verticalTabs","tabWrappers","isStuck","tabWrapper","tabWrapperTopOffset","screenSize","verticalTab","scrollToContentTop","elementPosition","offsetPosition","initialiseContentContainer","mountContentContainer","unMountContentContainer","contentContainers","contentContainer","stickyCol2","initialiseHorizontalTabBar","mountHorizontalTabBarContainer","unmountVerticalScrollCarousel","horizontalTabs","horizontalTab","scrollTabIntoView","initialiseVerticalTabScroll","mountVerticalScrollTab","verticalTabScrolls","verticalTabScroll","innerTabs","innerTab","scroll","coords","initialiseVerticalTabVideo","mountVerticalVideoTab","initialiseEventDetails","mountEventDetailsComponent","eventDetails","eventDetail","readMoreButton","readLessButton","eventIntroduction","expandText","collapseText","initialiseRecipePage","recipeDetail","teaserTexts","currentTeaserText","bodyText","showFullText","hideFullText","initialiseSearchExperiment","initialiseVueExample","initialiseFacilitiesFilters","initialiseFeatureLinkContainerV2","mountFeatureLinksAndImages","unMountFeatureLinksAndImages","featuredLinks","featuredLinkBlock","buTitles","scrollAnchor","buTitleClick","buTitlesParameter","currentTitle","buTitle","textDivs","buButtonDivs","buVideos","buImages","buButtonDiv","textDiv","buImage","buVideo","currentId","buButtonDivs2","accordionBodys","buButtonDiv2","currentAccordionBody","initialiseFeatureLinksAndImage","initialiseFeaturedEventStatement","eventFeatures","feature","initialiseFeaturedCarousel","mountFeaturedCarousel","carouselElements","featuredCarouselGlide","currentSlideIndices","switchView","linkText","currentIconHref","parentCarouselOrGrid","map","iconHref","initialisePasswordFormField","mountPasswordFormField","unMountPasswordFormField","passwordField","passwordInput","togglePasswordButtons","toggleShowPassword","togglePasswordButton","initialiseMultiButtonGroupingFormField","mountMultiButtonGroupingFormField","unMountMultiButtonGroupingFormField","initialiseLocationBox","mountLocationBox","unMountLocationBox","currentToolTips","currentToolTip","toolTipLabel","currentTrigger","initialiseFreeTextQuickLinks","mountFreeTextQuickLinks","unMountFreeTextQuickLinks","freeText","allQuickLinks","headings","quickLinks","defaultLink","quickLinksDiv","h2","idValue","headingText","scrollToHeading","stickyHeading","initialiseModal","mountModal","unMountModal","updateBackgroundColour","backgroundColour","modalBackground","closeAllCollapses","collapses","collapse","Collapse","initialiseShareOnSocials","VueSocialSharing","pageLayoutContainer","shareOnSocialButton","initialiseImageWithCaption","initialiseVideo","playerlist","mountVideo","unMountVideo","videoContainers","videoContainer","autoPlay","clickToPlay","closeIcon","closeButton","embedContainerClass","videoSource","embedContainer","htmlContainer","videoPlayerElement","videoEmbed","nativeVideoPoster","isVimeo","overlayPlayButton","customPlayButton","customPlayButtonPlay","customPlayButtonPause","isYoutubeVideo","applyPlyr","ytFrame","poster","beginAutoPlaySequence","uuid","getVimeoId","videoWidth","videoHeight","controls","videoPlayer","Plyr","videoPoster","handleVolumeChange","plyrDetails","hideButtons","preview","playerList","urlList","initialiseFormAndContent","destroyButtonGroupingFormField","destroyMultiButtonGroupingFormField","destroyForm","destroyFreeTextQuickLinks","destroyImageWithCaption","destroyModal","destroyPasswordFormField","destroySelectFormField","destoryShareOnSocials","destroyVideo","destroyModalForm","destroyLocationBox","initialiseFormattedTime","initialiseEnquiryContact","mountEnquireContact","unMountEnquireContact","phoneDetails","emailDetails","removeFormFieldFocus","phoneDetail","number","numberView","emailDetail","email","emailView","enquiryContactFormContainer","formFields","formField","initialiseUnsubscribe","initialiseWhistleblower","initialiseEnquiryButton","mountEnquiryButton","unMountEnquiryButton","enquiryButton","boundingBox","topNavigationBar","footer","placeEnquiryButton","buttonMargin","buttonTop","modalOverlay","initialiseGetInTouchButton","mountGetInTouchButton","unMountGetInTouchButton","getInTouchButton","getInTouchButtonMobile","previousScrollPos","currentScrollPos","contactSection","ribbonBar","ribbonBarHeight","initialiseGlobalNavigation","mountGlobalNavigation","unMountGlobalNavigation","previousScrollpos","ribbonBarParent","hubNav","enquiryButtonParent","ribbonBarParentHeight","handleHubScroll","nav","navHeight","initialiseMenuOverlay","mountMenuOverlay","unMountMenuOverlay","menuOverlays","menuOverlay","businessUnits","menuItems","mobileMenu","businessUnit","updateActiveBusinessUnit","businessUnitIndex","businessUnitMenuitems","menuItem","dataLinkValue","bottomBar","dropdownButton","menuItemCollapse","menuSubItemCollapse","menuLabel","rotateDropdownButton","menuLabelLink","bottomBarLinks","handleTouchLink","stopCollapsePropagation","initialiseNavigationBar","mountNavigationBar","unMountNavigationBar","menuToggleButtons","searchToggleButtons","searchCollapse","menuCollapse","businessUnitSelect","dropdownChevron","tabletPhoneIcon","tabletPhoneBubble","toggleBackdropOpacity","toggleSearchButtons","toggleMenuButtons","toggleCollapse","initialiseRibbonBar","mountRibbonBar","unMountRibbonBar","ribbonBars","dropdowns","handleHalcyonCommunitiesDropdown","checkCurrentDay","disableDropdownMenuCloseOnclick","closeChangeCentreModal","dropdownHoverTriggers","dropdownHoverTrigger","forceShowDropdown","forceCloseDropdown","toggleDropdownActiveStyles","businessUnitDropdown","businessUnitDropdownHoverTrigger","dropdownMenu","showBUDropdown","hideBUDropdown","businessUnitSubItems","businessUnitSubItemsDescriptions","updateBusinessUnitText","businessUnitSubitem","businessUnitSubItemId","dropdownToggle","overlayElement","oElement","divelem","openingHoursArray","currentDay","openingHours","dropdownMenus","menu","closeCentreModalButton","centreModal","centreModalButton","iconElement","initialiseHamburgerMenu","initialiseImageAreaFocus","mountImageAreaFocus","unMountImageAreaFocus","area","hoverItem","hoverTarget","buildingImages","preventFirstMobileLinkClick","firstClick","activeAutoPlay","intervalCount","autoPlayInterval","building","initialiseImageRangeSlider","initialiseInvestorCentre","initialiseLiveChatMonitoring","hideLcmButton","se","done","s","initialiseSalesforceChat","salesforceElement","salesforceOrgId","securedDomain","publicDomain","scriptLocation","apiEndpoint","apiContentEndpoint","chatButtonId","deploymentId","eswDevelopmentName","developerName","chatAvatar","defaultMinimizedText","disabledDefaultMinimizedText","eswUrl","initESW","gslbBaseURL","closeInviteElement","rejectInviteElement","acceptInviteElement","targetNode","callback","snapinsInvite","serviceIcon","initialiseSalesforceChatMIAW","chatInitiator","chatDialog","loadingIcon","closeChatIcon","initEmbeddedMessaging","formattedUrl","projectId","addToCookie","chatId","deploymentName","deploymentURL","scrtURL","err","days","expires","date","nameEQ","i","scriptSource","initialiseLlcHomeViz","parametise","parameters","queryString","getQuery","updateUrl","parseQuery","uri","extractQuery","getQueryStringUrl","skipQuery","queryIndex","removeQueryString","generateQueryString","object","generateUrlWithQuery","baseUrl","queryParameters","useApiGet","state","reactive","getData","toRefs","useApiPost","postData","body","useLocationMap","isLoading","computed","queryObject","filtersUpdated","primary","secondary","showListView","showMapView","_sfc_main$c","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_resolveComponent","_normalizeClass","_ctx","_createElementVNode","_hoisted_1","_openBlock","_createElementBlock","_hoisted_2","_createCommentVNode","_createBlock","_component_facilities_filters","_createVNode","_TransitionGroup","_withCtx","_component_llc_mpc_map","_component_amenity_list","_hoisted_7","_component_stockland_button","initialiseLlcMpcMapContainer","LlcMpcMapContainer","m","onMapMount","mC","isInFullScreen","handleFullscreenChange","marker","markerData","mc","dialog","cluster","defaultOnClusterClickHandler","onMapError","closeProductCard","_sfc_main$b","_hoisted_8","_hoisted_11","_component_gmaps_map","_Fragment","_renderList","_component_product_card","_component_resized_image","_toDisplayString","_hoisted_9","_hoisted_10","_hoisted_12","_hoisted_13","_sfc_main$a","loadScript","loadModules","Map","QueryTask","Graphic","SimpleFillSymbol","PictureMarkerSymbol","arrayUtils","Color","Query","on","all","Search","arcgisPortal","busyIndicator","arcgisUtils","Extent","FeatureLayer","portalURL","levelFieldName","storeKeyField","searchFieldName","mapName","centreIdFieldName","extentBuffer","store","maxExtent","mapLayersDic","flooredLayers","lods","biHandle","portal","storeLayerNameString","storeSapIdString","mapNameString","p","result","storeLayer","portalItem","layer","query","queryTask","featureset","storeExtent","bookmark","getStoreMapLayers","flooredLayer","addMapMarker","restrictExtent","addStoreHomeSlider","levelLabelField","currentVisibleLevel","retailStoreDetailsUrlString","centreSapId","bookmarks","initialExtent","getMapLayers","ZoomToBookmark","getFloorNumbers","addHighlightingEffect","extent","addHomeSlider","sid","level","getStoreDetails","search","storesLayer","sources","showSearchLocation","layerId","field","mapReference","markerSymbolURL","storeMarkerSymbol","storeCentroid","storeMarkerGraphic","bookmarkName","floors","defs","floor","zoomSlider","lbl","changeLevelsState","event_","levelButton","sapid","loc","tradingName","inp","highlightSymbol","highlightedStore","highlightGraphic","createPopupContent","storeInfoArray","content","storename","phoneNumber","storePageUrl","sapId","storeLayerName","DisplayPopContent","_sfc_render","_cache","$props","$setup","$data","$options","GoogleMapsLibrary","Loader","libraryName","instance","clusterPin","accommodation","blackPin","bluePin","bluePinDark","food","health","leisure","localBusiness","location$1","locationFilled","shopping","transport","utilities","whitePin","dynamicIcon","color","colours","initializeIcons","icons","location","CarIcon","GmapsMapController","appEl","momentaTheme","MarkerClusterer","SuperClusterAlgorithm","count","position","mapDiv","f","center","zoom","max","cnt","fitBounds","origin","destination","markerImage","directions","firstRoute","halfwayPoint","points","bounds","clusteringEnabled","stockland","momenta","useGmapsMap","mapElement","appElement","mapOptions","MapStyles.Momenta","MapStyles.Stockland","control","watch","markers","route","toggleFullscreen","clickedElement","_sfc_main$9","ref","cardComponents","toPascalCase","text","clearAndUpper","markerColour","_sfc_main$8","_resolveDynamicComponent","_sfc_main$7","_sfc_main$6","_component_llc_event_card","_sfc_main$5","_component_llc_amenity_card","_component_llc_amenity_card_mobile","_sfc_main$4","_component_llc_community_card","_component_llc_community_card_mobile","_sfc_main$3","_component_property_card","_component_property_card_mobile","intialRoute","sA","decoratedRoute","selectedAmenity","amenity","selectedAmenities","mapRoute","_sfc_main$2","_component_stockland_multi_select","$event","_component_location_map_search","GmapsMapPlaces","placesLibrary","autocompleteService","placesService","placeId","reject","fields","status","locationRestriction","request","prediction","structuredFormatting","mainText","secondaryText","mainTextMatchedSubstrings","htmlText","ss","useLocationMapSearch","inputChanged","resetData","setResult","places","_sfc_main$1","_vModelText","_component_stockland_icon","initialiseMaps","GmapsMapVue","LocationMapSearch","LocationMap","AssetMap","LlcMpcMap","LlcMpcEventMap","LlcMpcMapPropertyCards","LlcMpcMapLlcCommunityCards","LlcMpcMapLlcAmenityCards","LlcMpcEventMapCards","EsriMap","useArticleListing","handleClick","sortByName","sortByRecent","sortByOldest","newValue","date1","date2","q","_sfc_main","_createStaticVNode","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_20","_hoisted_23","article","_hoisted_14","_hoisted_15","_hoisted_19","_createTextVNode","_hoisted_21","_hoisted_22","_hoisted_24","_hoisted_25","_component_inline_error","initialiseArticleListing","ArticleListing","initialiseMarketplacerProductBlock","mountMarketplacerProductBlock","marketplacerProductBlocks","block","carouselGlide","initialiseMediaGallery","mountMediaGallery","mediaGallery","gallery","refreshCarouselOnClick","slideStart","updateNumberIndicatorIndex","slideIndex","viewMoreButton","galleryImage","image","scrollImageIntoView","galleryPictures","galleryImageDescription","picture","glideUpdate","allVideoControls","initialiseAnchorLinks","mountAnchorLinks","triggerLink","initialiseWayfindingBar","mountWayfindingBar","handleWayfindingBarBulletClick","displayWayfindingBullets","handleWayfindingScroll","wayfindingBullets","wayfindingBullet","wayfindingId","activeLink","bullet","wayfindingBulletContainer","wayfindingLinkContainer","checkOverflowAndDisplayBullets","scrollPercentage","checkWayfindingScrollPercent","handleTouchMove","wayfindingLinkBullets","bulletPercentageLower","bulletPercentageHigher","scrollableWidth","currentScroll","initialiseFloatierIsland","mountFloatierIsland","unMountFloatierIsland","indicatorSelector","currentIndicatorPrefix","floatingIslands","currentFloatingIsland","islandIndicators","isIslandFixed","initialIslandOffset","defaultIslandOffset","floatIslandElement","isMobileView","setActiveIsland","addIndicatorClickEvents","targetId","inactiveIndicator","floatingIsland","topNavigation","topNavigationHeight","floatingIslandTopPadding","targetPos","openMenu","desiredScrollPos","initialiseOffersBlock","initialiseOffersCard","initialiseOffersModal","initialiseOffersModalButton","initialiseOfferTeaser","initialiseRetailOffersTile","initialiseParallaxScrollBlock","mountParallaxScrollBlock","unMountParallaxScrollBlock","parallaxContainers","parallaxContainer","parallaxBlock","logo","modals","navigationBar","navigationBarHeight","cards","scrollTop","initialiseParallaxBackgroundLock","initialiseParallaxScroll","backgroundLayers","handleScroll","topOffSet","backgroundLayer","scrollIndicator","translationValue","interSectingEntry","allNonInterSectingEntry","cardPositionObserver","card","observerInitialiseParallax","handleModalShow","initialiseProductSearch","mapTabSelectionData","filterData","defaultSelection","currentQuery","currentFilterQuery","ceil","mapMultiRangeSliderData","filterIconMap","initialiseProductDetails","mountProductDetails","isMobileScreen","textContainers","textContainer","style","lineHeight","readMore","gradient","inner","readMoreText","builderSections","builderSection","builderList","lines","builderReadMore","builderListContainer","featureSections","featureSection","LLCIconList","LLCIconCount","LLCReadMore","MPCIconList","MPCIconCount","MPCReadMore","bonusBars","bonusBar","chevron","featureTags","toolTips","featureTag","tooltip","checkInfoBubbleInViewPort","bubble","bubbleRect","initialiseProductGallery","mountProductGallery","hotspotContainers","container","hotspot","infoBox","box","infoBoxes","productGallery","initialiseClicks","desktopImageCount","goToFloorPlanCarouselOnClick","galleryCarouselSlides","modalDialog","modalContent","expandButton","thumbnailList","carouselImageContainer","closeModalButton","toggleCssclasses","classes","className","obs","floorPlanButton","extendedGalleryImage","extended","expandButtonDetailPage","detailButton","initialiseProductTilesandFilters","mountPropertyTilesAndFilters","unMountPropertyTilesAndFilters","propertyTilesAndFilters","findOutMoreButton","takeoverCalloutButton","initialiseProgressHomeHeader","initialisePromoTileWithIcon","promoTilesWithIcon","promoTileWithIcon","isTextClamped","elm","readLess","readMoreLessToggle","toggleReadMoreButton","initialiseRecentlyViewedHomes","initialiseResourcesList","initialiseSearch","initialiseSearchAssetsBar","initialiseShrinkingHeader","raf","time","lenis","Lenis","fitHeaders","unMountShrinkingHeader","calculateFontSize","maxWidth","fontFamily","fontSize","child","containerWidth","setScale","containerTop","elementHeight","smallestSize","ratio","handleResize","initialiseStageImageWithSteps","initialiseStepByStepFeatureCarousel","mountStepByStepFeatureCarousel","stepByStepFeatureCarousels","CAROUSELS","initialiseOffersTileAndCarousel","mountOffersTileCarousel","offerTilesCarouselComponents","initialiseTabbedImagePanel","initialiseTabbedImageWithText","mountTabbedImageWithText","unmountTabbedImageWithText","tabbedImageWithTexts","tabbedImageWithText","handleTabClick","contentTabs","activeContentTab","contentTab","initialiseTakeoverCallout","removeModalForm","removeTakeoverForm","contactFormButtons","takeOverCalloutContainer","parent","contactForm","epiForm","enquiryModal","enquiryModalForm","takeoverCalloutFormHidden","initialiseTakeoverImageWithInlineTabs","mountTakeoverImageWithInlineTabs","unMountTakeoverImageWithInlineTabs","takeoverImageTabs","takeoverImageTab","amenityTabs","amenityTab","initialiseTakeoverCard","mountTakeoverCard","initialiseTakeoverHighlights","initialiseCollapseTile","mountCollapseTile","unMountCollapseTile","tile","readButton","showToggleMenuButtons","hideToggleMenuButtons","initialisePromoTile","mountPromoTile","initialiseCommunityTiles","groupBy","array","property","memo","mapAmenitiesRawValue","rawAmenity","amenities","groupedType","initialiseDownloadList","initialiseHeroBanner","mountHeroBanner","unMountHeroTakerOver","heroTakeoverBanners","heroTakeoverBanner","imageVideos","overlay","overlaybackGround","slidePlayButton","shortVideo","handlePlayVideoClick","imageVideo","stopVideo","handleStopVideoClick","initialiseMultipleTabTargetSelector","mountMultipleTargetTabs","unMountMultipleTargetTabs","toggleTargets","targets","target_array","currentTarget","currentTargetElement","currentActiveElement","navTabs","inlineTabs","initialiseMultipleTabTargetSelectorv2","mountMultipleTargetTabsV2","unMountMultipleTargetTabsV2","targetArray","loadRemainingButtons","buttonLoader","currentTab","initialisePropertyCard","initialiseLocationCard","initialiseLocationTileListing","initialiseProgressTimeLine","mountProgressTimeLine","unMountProgressTimeLine","childWidth","initialiseProgressBar","initialiseConstructionTracker","initialiseArticleMaster","initializeLargeImageCard","initializeLargeVideoCard","initializeInspirationListing","initialiseMapWithSupportingContent","mapWithSupportingContents","mapWithSupportingContent","getCurrentDay","timeRangeElements","timeRange","previousDayRange","toggleOpenStatus","sideContent","centreDirectory","esriMap","blockHeight","previousElement","previousTimeRange","openTime","closeTime","previousCloseTime","openTimeHour","closeTimeHour","previousCloseMins","openTimeMin","closeTimeMin","openingTime","closingTime","openingHoursContainer","storeTimezone","storeLocalDate","currentTime","openText","closedText","isOutsideOpeningHours","isAfterPreviousClose","initialiseStoreCategoryWayfinding","storeCategoryWayfindings","storeCategoryWayfinding","categoryTabs","activeNavLink","activeGridTab","moreCategoriesButton","handleMoreCategoriesClick","moreCategories","moreCategory","initialiseHalfImageBanner","halfImageBanners","getCurrentDate","month","day","halfImageBanner","openingTimes","openingTimeDay","currentDayNumber","initialiseInspireHeader","mountRetailHomeHeader","Swiper","Navigation","Pagination","Autoplay","initializeInspirationTilesAndFilter","initializeGifttile","bindingElement","authUrl","responseData","authToken","initializeScrollToCard","pinia","createPinia","initialiseStoreDirectory","initialiseOfferListing","initialiseRecipeCampaignOneSideScrollTakeover","initialiseCampaignHeroBanner","originalWindowWidth","initialiseCampaignHeroBannerCarousel","reinitialiseCarousel","initialiseEventListingCard","initialiseRTCEventListing","initialiseFeatureCardsComponent","mountFeatureCardComponent","intialiseProgressCard","register","initialiseSwiper","intialiseLocalStorageWrapper","initialiseWelcomeModal","modalElement","loadModalIfApplicable","openModalButton","intialiseStepAccordion","initialiseStepCompletion","initialiseComponents","destroyAnnouncementTileCarousel","initialiseAnnouncementTileCarousel","destoryAccordion","destoryAssetHeroBanner","destroyCampaignBlock","destroySlimCampaignBlock","destroyCollapsedFormCta","destroyCollapseTile","destroyContentContainer","destroyEventDetails","destroyRecipePage","destroyFeaturedCarousel","destroyFeatureLinksAndImage","destroyFeatureLinkContainerV2","destroyFloatingIsland","destroyFormAndContent","destoryHeroBanner","destroyHorizontalCarousel","destroyMediaGallery","destroyPassiveCarousel","destroyPromoTileWithIcon","destroyFeaturedPropertyCarousel","destroyHorizontalTabBar","destroyImageAreaFocus","destoryNavigationBar","destroyNumberPanelCarousel","destroyMarketplacerProductBlock","destoryMediaGalleryFeature","destroyMenuOverlay","destroyMultiImageInnerCarousel","destroyMultiImageCarousel","destroyWayfindingBar","destroyMultipleTabTargetSelection","destroyMultipleTabTargetSelectionV2","destroyParallaxScrollBlock","destroyProductDetails","destroyProductGallery","destroyPromoTile","destroyRibbonBar","destroyGlobalNavigation","destroyEnquiryButton","destroyShrinkingHeader","destroyStepByStepFeatureCarousel","destroyOffersTileAndCarousel","destroyStickySlider","destroyVerticalCarousel","destroyVerticalTabScroll","destroyVerticalTabVideo","destroyTabbedImageWithText","destroyTakeoverCard","destroyTakeoverImageWithInlineTabs","destroyTakeoverHighlights","destroyVerticalTabBar","destroyEnquireContact","destroyProgressTimeLine","destroyMpcTakeoverHero","destroyCampaignHeroBanner","destroyWelcomeModal","destroyFeatureCardsComponents","IS_READY","App","logger","createApp","hooks","hook","destroyComponents","destroyer","initialState"],"ignoreList":[],"sources":["../../../../Stockland.Opti.Ui/src/framework/scripts/directives/focus.ts","../../../../Stockland.Opti.Ui/src/framework/scripts/directives/progressive.ts","../../../../Stockland.Opti.Ui/src/framework/scripts/directives/scroll-to.ts","../../../../Stockland.Opti.Ui/src/framework/scripts/directives/index.ts","../../../../Stockland.Opti.Ui/src/framework/scripts/helpers/dom-ready.ts","../../../../Stockland.Opti.Ui/src/patterns/components/accordion/accordion.ts","../../../../Stockland.Opti.Ui/src/patterns/components/amenity-list/amenity-list.ts","../../../../Stockland.Opti.Ui/src/patterns/components/amenity-list-container/amenity-list-container.ts","../../../../Stockland.Opti.Ui/src/patterns/components/carousels/archive/modal-carousel/constants.ts","../../../../Stockland.Opti.Ui/src/framework/scripts/helpers/element-ready.ts","../../../../Stockland.Opti.Ui/src/framework/scripts/utils/parse.ts","../../../../Stockland.Opti.Ui/src/patterns/components/carousels/archive/modal-carousel/modal-carousel.ts","../../../../Stockland.Opti.Ui/src/patterns/components/archive/media-gallery/media-gallery.ts","../../../../Stockland.Opti.Ui/src/patterns/components/carousels/vertical-carousel/vertical-carousel.ts","../../../../Stockland.Opti.Ui/src/patterns/components/archive/sticky-slider/sticky-slider.ts","../../../../Stockland.Opti.Ui/src/patterns/components/js-controller.ts","../../../../Stockland.Opti.Ui/src/patterns/components/banners/asset-hero-banner/constants.ts","../../../../Stockland.Opti.Ui/src/patterns/components/banners/asset-hero-banner/asset-hero-banner.ts","../../../../Stockland.Opti.Ui/src/patterns/components/banners/mpc-takeover-hero/mpc-takeover-hero.ts","../../../../Stockland.Opti.Ui/src/framework/scripts/helpers/browser/media-query.ts","../../../../Stockland.Opti.Ui/src/patterns/components/banners/halcyon-home-header/constants.ts","../../../../Stockland.Opti.Ui/src/patterns/components/banners/halcyon-home-header/halcyon-home-header.ts","../../../../Stockland.Opti.Ui/src/framework/scripts/utils/scroll.ts","../../../../Stockland.Opti.Ui/src/patterns/components/banners/rich-media-banner/rich-media-banner.ts","../../../../Stockland.Opti.Ui/src/patterns/components/card/card.ts","../../../../Stockland.Opti.Ui/src/patterns/components/card-container/card-container.ts","../../../../Stockland.Opti.Ui/src/framework/scripts/utils/forms.ts","../../../../Stockland.Opti.Ui/src/patterns/components/form-and-content/fields/button-grouping/button-grouping.ts","../../../../Stockland.Opti.Ui/src/patterns/components/form-and-content/fields/select/select.ts","../../../../Stockland.Opti.Ui/src/patterns/components/form-and-content/forms/form.ts","../../../../Stockland.Opti.Ui/src/patterns/components/form-and-content/modal-form/modal-form.ts","../../../../Stockland.Opti.Ui/src/patterns/components/campaign-block/campaign-block.ts","../../../../Stockland.Opti.Ui/src/patterns/components/slim-campaign-block/slim-campaign-block.ts","../../../../Stockland.Opti.Ui/src/patterns/components/carousels/announcement-tile-carousel/lazy-carousel.ts","../../../../Stockland.Opti.Ui/src/patterns/components/carousels/archive/modal-carousel/lazy-carousel.ts","../../../../Stockland.Opti.Ui/src/patterns/components/carousels/carousel/constants.ts","../../../../Stockland.Opti.Ui/src/patterns/components/carousels/carousel/lazy-carousel.ts","../../../../Stockland.Opti.Ui/src/patterns/components/carousels/feature-stat-quote-carousel/constants.ts","../../../../Stockland.Opti.Ui/src/patterns/components/carousels/feature-stat-quote-carousel/lazy-carousel.ts","../../../../Stockland.Opti.Ui/src/patterns/components/carousels/featured-property-carousel/lazy-carousel.ts","../../../../Stockland.Opti.Ui/src/patterns/components/carousels/hero-carousel/constants.ts","../../../../Stockland.Opti.Ui/src/patterns/components/carousels/hero-carousel/lazy-carousel.ts","../../../../Stockland.Opti.Ui/src/patterns/components/carousels/horizontal-carousel/constants.ts","../../../../Stockland.Opti.Ui/src/patterns/components/carousels/horizontal-carousel/lazy-carousel.ts","../../../../Stockland.Opti.Ui/src/patterns/components/carousels/multi-image-carousel/constants.ts","../../../../Stockland.Opti.Ui/src/patterns/components/carousels/multi-image-carousel/multi-image-carousel.ts","../../../../Stockland.Opti.Ui/src/patterns/components/carousels/multi-image-inner-carousel/multi-image-inner-carousel.ts","../../../../Stockland.Opti.Ui/src/patterns/components/carousels/number-panels-carousel/constants.ts","../../../../Stockland.Opti.Ui/src/patterns/components/carousels/number-panels-carousel/number-panels-carousel.ts","../../../../Stockland.Opti.Ui/src/patterns/components/carousels/passive-carousel/lazy-carousel.ts","../../../../Stockland.Opti.Ui/src/patterns/components/clickstream/clickstream-script.ts","../../../../Stockland.Opti.Ui/src/patterns/components/clickstream/ClickStream.vue","../../../../Stockland.Opti.Ui/src/patterns/components/clickstream/click-stream.ts","../../../../Stockland.Opti.Ui/src/patterns/components/collapsed-form-cta/collapsed-form-cta.ts","../../../../Stockland.Opti.Ui/src/patterns/components/community-tiles-listing/community-tiles-listing.ts","../../../../Stockland.Opti.Ui/src/framework/scripts/utils/tiny-mce-links.ts","../../../../Stockland.Opti.Ui/src/patterns/components/containers/archive/vertical-tab-bar-container/vertical-tab-bar-container.ts","../../../../Stockland.Opti.Ui/src/patterns/components/containers/content-container/content-container.ts","../../../../Stockland.Opti.Ui/src/patterns/components/containers/horizontal-tab-bar-container/horizontal-tab-bar-container.ts","../../../../Stockland.Opti.Ui/src/patterns/components/containers/vertical-tab-bar-container/vertical-tab-bar-container.ts","../../../../Stockland.Opti.Ui/src/patterns/components/containers/vertical-tab-video/vertical-tab-video.ts","../../../../Stockland.Opti.Ui/src/patterns/components/event-details/event-details.ts","../../../../Stockland.Opti.Ui/src/patterns/components/recipe/recipe-body/recipe-body.ts","../../../../Stockland.Opti.Ui/src/patterns/components/examples-and-experiments/search-experiment/search-experiment.ts","../../../../Stockland.Opti.Ui/src/patterns/components/examples-and-experiments/vue-example/vue-example.ts","../../../../Stockland.Opti.Ui/src/patterns/components/facilities-filters/facilities-filters.ts","../../../../Stockland.Opti.Ui/src/patterns/components/feature-link-container-v2/feature-link-container-v2.ts","../../../../Stockland.Opti.Ui/src/patterns/components/feature-links-and-image/feature-links-and-image.ts","../../../../Stockland.Opti.Ui/src/patterns/components/feature-statement/archive/event/event.ts","../../../../Stockland.Opti.Ui/src/patterns/components/featured-carousel/featured-carousel.ts","../../../../Stockland.Opti.Ui/src/patterns/components/form-and-content/fields/password/password.ts","../../../../Stockland.Opti.Ui/src/patterns/components/form-and-content/fields/multi-button-grouping/multi-button-grouping.ts","../../../../Stockland.Opti.Ui/src/patterns/components/form-and-content/fields/location-box/location-box.ts","../../../../Stockland.Opti.Ui/src/patterns/components/form-and-content/quick-links/quick-links.ts","../../../../Stockland.Opti.Ui/src/patterns/components/form-and-content/modal/modal.ts","../../../../Stockland.Opti.Ui/src/framework/scripts/utils/bootstrap.ts","../../../../Stockland.Opti.Ui/src/patterns/components/form-and-content/share-on-socials/share-on-socials.ts","../../../../Stockland.Opti.Ui/src/patterns/components/form-and-content/rich-text/image-with-caption/constants.ts","../../../../Stockland.Opti.Ui/src/patterns/components/form-and-content/rich-text/image-with-caption/lazy-image-with-caption.ts","../../../../Stockland.Opti.Ui/src/patterns/components/form-and-content/video/video.ts","../../../../Stockland.Opti.Ui/src/patterns/components/form-and-content/form-and-content.ts","../../../../Stockland.Opti.Ui/src/patterns/components/form-and-content/formatted-time/formatted-time.ts","../../../../Stockland.Opti.Ui/src/patterns/components/form-and-content/forms/enquiry-contact/enquiry-contact.ts","../../../../Stockland.Opti.Ui/src/patterns/components/form-and-content/forms/unsubscribe/unsubscribe.ts","../../../../Stockland.Opti.Ui/src/patterns/components/form-and-content/forms/whistleblower/whistleblower.ts","../../../../Stockland.Opti.Ui/src/patterns/components/global/header/enquiry-button/enquiry-button.ts","../../../../Stockland.Opti.Ui/src/patterns/components/global/header/get-in-touch-button/get-in-touch-button.ts","../../../../Stockland.Opti.Ui/src/patterns/components/global/header/global-navigation/global-navigation.ts","../../../../Stockland.Opti.Ui/src/patterns/components/global/header/menu-overlay/menu-overlay.ts","../../../../Stockland.Opti.Ui/src/patterns/components/global/header/navigation-bar/navigation-bar.ts","../../../../Stockland.Opti.Ui/src/patterns/components/global/header/ribbon-bar/ribbon-bar.ts","../../../../Stockland.Opti.Ui/src/patterns/components/global/header/hamburger-menu/hamburger-menu.ts","../../../../Stockland.Opti.Ui/src/patterns/components/image-area-focus/image-area-focus.ts","../../../../Stockland.Opti.Ui/src/patterns/components/image-range-slider/image-range-slider.ts","../../../../Stockland.Opti.Ui/src/patterns/components/investor-resources/investor-centre/investor-centre.ts","../../../../Stockland.Opti.Ui/src/patterns/components/chats/live-chat-monitoring/live-chat-monitoring.ts","../../../../Stockland.Opti.Ui/src/patterns/components/chats/salesforce-chat/salesforce-chat.ts","../../../../Stockland.Opti.Ui/src/patterns/components/chats/salesforce-chat-miaw/salesforce-chat-miaw.ts","../../../../Stockland.Opti.Ui/src/patterns/components/llc-home-viz/llc-home-viz.ts","../../../../Stockland.Opti.Ui/src/framework/scripts/utils/url.ts","../../../../Stockland.Opti.Ui/src/framework/scripts/use/api.ts","../../../../Stockland.Opti.Ui/src/patterns/components/llc-mpc-map-container/LlcMpcMapContainer.vue","../../../../Stockland.Opti.Ui/src/patterns/components/llc-mpc-map-container/llc-mpc-map-container.ts","../../../../Stockland.Opti.Ui/src/patterns/components/maps/asset-map/AssetMap.vue","../../../../Stockland.Opti.Ui/src/patterns/components/maps/esrimaps-map/EsrimapsMap.vue","../../../../Stockland.Opti.Ui/src/framework/scripts/helpers/google/google-maps-library.ts","../../../../Stockland.Opti.Ui/src/patterns/components/maps/gmaps-map/cluster-blue.svg","../../../../Stockland.Opti.Ui/src/patterns/components/maps/gmaps-map/marker-accommodation.svg","../../../../Stockland.Opti.Ui/src/patterns/components/maps/gmaps-map/marker-black.svg","../../../../Stockland.Opti.Ui/src/patterns/components/maps/gmaps-map/marker-blue.svg","../../../../Stockland.Opti.Ui/src/patterns/components/maps/gmaps-map/marker-blue-dark.svg","../../../../Stockland.Opti.Ui/src/patterns/components/maps/gmaps-map/marker-building.svg","../../../../Stockland.Opti.Ui/src/patterns/components/maps/gmaps-map/marker-food.svg","../../../../Stockland.Opti.Ui/src/patterns/components/maps/gmaps-map/marker-health.svg","../../../../Stockland.Opti.Ui/src/patterns/components/maps/gmaps-map/marker-leisure.svg","../../../../Stockland.Opti.Ui/src/patterns/components/maps/gmaps-map/marker-local-business.svg","../../../../Stockland.Opti.Ui/src/patterns/components/maps/gmaps-map/marker-location.svg","../../../../Stockland.Opti.Ui/src/patterns/components/maps/gmaps-map/marker-location-filled.svg","../../../../Stockland.Opti.Ui/src/patterns/components/maps/gmaps-map/marker-shopping.svg","../../../../Stockland.Opti.Ui/src/patterns/components/maps/gmaps-map/marker-transport.svg","../../../../Stockland.Opti.Ui/src/patterns/components/maps/gmaps-map/marker-utilities.svg","../../../../Stockland.Opti.Ui/src/patterns/components/maps/gmaps-map/marker-white.svg","../../../../Stockland.Opti.Ui/src/patterns/components/maps/gmaps-map/gmaps-markers.ts","../../../../Stockland.Opti.Ui/src/patterns/components/maps/gmaps-map/icon-car.svg","../../../../Stockland.Opti.Ui/src/patterns/components/maps/gmaps-map/gmaps-map-controller.ts","../../../../Stockland.Opti.Ui/src/patterns/components/maps/gmaps-map/maps-styles/stockland.ts","../../../../Stockland.Opti.Ui/src/patterns/components/maps/gmaps-map/maps-styles/momenta.ts","../../../../Stockland.Opti.Ui/src/patterns/components/maps/gmaps-map/GmapsMap.vue","../../../../Stockland.Opti.Ui/src/patterns/components/maps/llc-mpc-map/LlcMpcMap.vue","../../../../Stockland.Opti.Ui/src/patterns/components/maps/llc-mpc-event-map/LlcMpcEventMap.vue","../../../../Stockland.Opti.Ui/src/patterns/components/maps/llc-mpc-event-map/LlcMpcEventCards.vue","../../../../Stockland.Opti.Ui/src/patterns/components/maps/llc-mpc-map/LlcMpcMapLlcAmenityCards.vue","../../../../Stockland.Opti.Ui/src/patterns/components/maps/llc-mpc-map/LlcMpcMapLlcCommunityCards.vue","../../../../Stockland.Opti.Ui/src/patterns/components/maps/llc-mpc-map/LlcMpcMapPropertyCards.vue","../../../../Stockland.Opti.Ui/src/patterns/components/maps/location-map/LocationMap.vue","../../../../Stockland.Opti.Ui/src/patterns/components/maps/gmaps-map/gmaps-map-places.ts","../../../../Stockland.Opti.Ui/src/patterns/components/maps/location-map/LocationMapSearch.vue","../../../../Stockland.Opti.Ui/src/patterns/components/maps/maps.ts","../../../../Stockland.Opti.Ui/src/patterns/components/media/archive/article-listing/ArticleListing.vue","../../../../Stockland.Opti.Ui/src/patterns/components/media/archive/article-listing/article-listing.ts","../../../../Stockland.Opti.Ui/src/patterns/components/marketplacer/marketplacer-product-block/marketplacer-product-block.ts","../../../../Stockland.Opti.Ui/src/patterns/components/media-gallery/constants.ts","../../../../Stockland.Opti.Ui/src/patterns/components/media-gallery/media-gallery.ts","../../../../Stockland.Opti.Ui/src/patterns/components/navigation/anchor-links/anchor-links.ts","../../../../Stockland.Opti.Ui/src/patterns/components/navigation/wayfinding-bar/wayfinding-bar.ts","../../../../Stockland.Opti.Ui/src/patterns/components/navigation/floating-island-scroll/floating-island-scroll.ts","../../../../Stockland.Opti.Ui/src/patterns/components/offers/offers-block/offers-block.ts","../../../../Stockland.Opti.Ui/src/patterns/components/offers/offers-card/offers-card.ts","../../../../Stockland.Opti.Ui/src/patterns/components/offers/offers-modal/offers-modal.ts","../../../../Stockland.Opti.Ui/src/patterns/components/offers/offers-modal-button/offers-modal-button.ts","../../../../Stockland.Opti.Ui/src/patterns/components/card/offer-teaser/offer-teaser.ts","../../../../Stockland.Opti.Ui/src/patterns/components/offers/retail-offers-tile/retail-offers-tile.ts","../../../../Stockland.Opti.Ui/src/patterns/components/parallax-scroll-block/parallax-scroll-block.ts","../../../../Stockland.Opti.Ui/src/patterns/components/product/product-search/product-search.ts","../../../../Stockland.Opti.Ui/src/patterns/components/product-details/product-details.ts","../../../../Stockland.Opti.Ui/src/patterns/components/product-gallery/constants.ts","../../../../Stockland.Opti.Ui/src/patterns/components/product-gallery/product-gallery.ts","../../../../Stockland.Opti.Ui/src/patterns/components/property-tiles-and-filters/property-tiles-and-filters.ts","../../../../Stockland.Opti.Ui/src/patterns/components/_hub/progress-home-header/progress-home-header.ts","../../../../Stockland.Opti.Ui/src/patterns/components/tile/promo-tile-with-icon/promo-tile-with-icon.ts","../../../../Stockland.Opti.Ui/src/patterns/components/recently-viewed-homes/recently-viewed-homes.ts","../../../../Stockland.Opti.Ui/src/patterns/components/resources-list/resources-list.ts","../../../../Stockland.Opti.Ui/src/patterns/components/search/search.ts","../../../../Stockland.Opti.Ui/src/patterns/components/search-assets-bar/search-assets-bar.ts","../../../../Stockland.Opti.Ui/src/patterns/components/shrinking-header/shrinking-header.ts","../../../../Stockland.Opti.Ui/src/patterns/components/_hub/stage-image-with-steps/stage-image-with-steps.ts","../../../../Stockland.Opti.Ui/src/patterns/components/carousels/step-by-step-feature-carousel/step-by-step-feature-carousel.ts","../../../../Stockland.Opti.Ui/src/patterns/components/carousels/offers-tile-and-carousel/offers-tile-and-carousel.ts","../../../../Stockland.Opti.Ui/src/patterns/components/tabbed-containers/tabbed-image-panel/tabbed-image-panel.ts","../../../../Stockland.Opti.Ui/src/patterns/components/tabbed-containers/tabbed-image-with-text/tabbed-image-with-text.ts","../../../../Stockland.Opti.Ui/src/patterns/components/takeover-callout/takeover-callout.ts","../../../../Stockland.Opti.Ui/src/patterns/components/takeover-image-with-inline-tabs/takeover-image-with-inline-tabs.ts","../../../../Stockland.Opti.Ui/src/patterns/components/card/takeover-card/takeover-card.ts","../../../../Stockland.Opti.Ui/src/patterns/components/takeover-highlights/takeover-highlights.ts","../../../../Stockland.Opti.Ui/src/patterns/components/tile/collapse-tile/collapse-tile.ts","../../../../Stockland.Opti.Ui/src/patterns/components/tile/promo-tile/promo-tile.ts","../../../../Stockland.Opti.Ui/src/patterns/components/tile/community-tiles/community-tiles.ts","../../../../Stockland.Opti.Ui/src/patterns/components/tile/download-list/download-list.ts","../../../../Stockland.Opti.Ui/src/patterns/components/tile/hero-slide/hero-slide.ts","../../../../Stockland.Opti.Ui/src/patterns/components/tile/image-tile-with-inline-tabs/image-tile-with-inline-tabs.ts","../../../../Stockland.Opti.Ui/src/patterns/components/tile/image-tile-with-inline-tabs-v2/image-tile-with-inline-tabs-v2.ts","../../../../Stockland.Opti.Ui/src/patterns/components/tile/property-tile-card/property-card.ts","../../../../Stockland.Opti.Ui/src/patterns/components/card/location-tile-card/location-tile-card.ts","../../../../Stockland.Opti.Ui/src/patterns/components/location-tile-listing/location-tile-listing.ts","../../../../Stockland.Opti.Ui/src/patterns/components/tile/mpc-progress-timeline/mpc-progress-timeline.ts","../../../../Stockland.Opti.Ui/src/patterns/components/progress-bar/progress-bar.ts","../../../../Stockland.Opti.Ui/src/patterns/components/construction-tracker/construction-tracker.ts","../../../../Stockland.Opti.Ui/src/patterns/components/article-master/article-master.ts","../../../../Stockland.Opti.Ui/src/patterns/components/card/large-image-card/large-image-card.ts","../../../../Stockland.Opti.Ui/src/patterns/components/card/large-video-card/large-video-card.ts","../../../../Stockland.Opti.Ui/src/patterns/components/inspiration-card-listing/inspiration-card-listing.ts","../../../../Stockland.Opti.Ui/src/patterns/components/map-with-supporting-content/map-with-supporting-content.ts","../../../../Stockland.Opti.Ui/src/patterns/components/store-category-wayfinding/store-category-wayfinding.ts","../../../../Stockland.Opti.Ui/src/patterns/components/banners/half-image-banner/half-image-banner.ts","../../../../Stockland.Opti.Ui/src/patterns/components/inspire-header/inspire-header.ts","../../../../Stockland.Opti.Ui/src/patterns/components/retail-home-header/retail-home-header.ts","../../../../Stockland.Opti.Ui/src/patterns/components/inspiration-tiles-and-filters/inspiration-tiles-and-filters.ts","../../../../Stockland.Opti.Ui/src/patterns/components/tile/gift-tile/gift-tile.ts","../../../../Stockland.Opti.Ui/src/patterns/components/card/scroll-to-card/scroll-to-card.ts","../../../../Stockland.Opti.Ui/src/patterns/components/store-directory/store-directory.ts","../../../../Stockland.Opti.Ui/src/patterns/components/offers/offers-listing/offers-listing.ts","../../../../Stockland.Opti.Ui/src/patterns/components/recipe-campaign-one-side-scroll-takeover/recipe-campaign-one-side-scroll-takeover.ts","../../../../Stockland.Opti.Ui/src/patterns/components/banners/campaign-hero-banner/campaign-hero-banner.ts","../../../../Stockland.Opti.Ui/src/patterns/components/card/event-listing-card/event-listing-card.ts","../../../../Stockland.Opti.Ui/src/patterns/components/rtc-event-listing/rtc-event-listing.ts","../../../../Stockland.Opti.Ui/src/patterns/components/feature-cards-component/feature-cards-component.ts","../../../../Stockland.Opti.Ui/src/patterns/components/progress-card/progress-card.ts","../../../../Stockland.Opti.Ui/src/patterns/components/swiper/swiper.ts","../../../../Stockland.Opti.Ui/src/patterns/components/global/hub-data-wrapper/hub-data-wrapper.ts","../../../../Stockland.Opti.Ui/src/patterns/components/hub-welcome-modal/hub-welcome-modal.ts","../../../../Stockland.Opti.Ui/src/patterns/components/_hub/step-accordion/step-accordion.ts","../../../../Stockland.Opti.Ui/src/patterns/components/step-completion/step-completion.ts","../../../../Stockland.Opti.Ui/src/patterns/components/components.ts","../../../../Stockland.Opti.Ui/src/app.ts"],"sourcesContent":["/**\r\n * @module framework/directives/focus\r\n */\r\n\r\nimport { Directive } from 'vue';\r\n\r\nimport { App } from '~/framework/vue';\r\n\r\nconst focusDirective: Directive = {\r\n // When the bound element is inserted into the DOM...\r\n mounted($element, { value }) {\r\n // Focus the element\r\n if (value) $element.focus();\r\n },\r\n};\r\n\r\n// https://vuejs.org/v2/guide/custom-directive.html\r\n// Register a global custom directive called `v-focus`\r\nexport const focus = (app: App) => {\r\n app.directive('focus', focusDirective);\r\n};\r\n","/**\r\n * @module framework/directives/progressive\r\n */\r\n\r\nimport { Directive } from 'vue';\r\n\r\nimport { App } from '~/framework/vue';\r\n\r\nconst progressiveDirective: Directive = {\r\n mounted($element) {\r\n function loadImage(): void {\r\n const imageElement = $element as HTMLImageElement;\r\n imageElement.addEventListener('load', () =>\r\n setTimeout(() => {\r\n $element.classList.add('loaded');\r\n }, 100)\r\n );\r\n imageElement.src = imageElement.dataset.src ?? imageElement.src;\r\n imageElement.srcset = imageElement.dataset.srcset ?? imageElement.srcset;\r\n }\r\n\r\n function handleIntersect(entries: IntersectionObserverEntry[], observer: IntersectionObserver): void {\r\n for (const entry of entries) {\r\n if (entry.isIntersecting) {\r\n loadImage();\r\n observer.unobserve($element);\r\n }\r\n }\r\n }\r\n\r\n function createObserver(): void {\r\n const options: IntersectionObserverInit = {\r\n root: null, // defaults to the browser viewport\r\n threshold: 0,\r\n };\r\n const observer = new IntersectionObserver(handleIntersect, options);\r\n observer.observe($element);\r\n }\r\n\r\n if (window.IntersectionObserver) {\r\n createObserver();\r\n } else {\r\n loadImage();\r\n }\r\n },\r\n};\r\n\r\n// Register a global custom directive called `v-progressive`\r\nexport const progressive = (app: App) => {\r\n app.directive('progressive', progressiveDirective);\r\n};\r\n","/**\r\n * @module framework/directives/scroll-to\r\n */\r\n\r\nimport { Directive } from 'vue';\r\n\r\nimport { App } from '~/framework/vue';\r\n\r\nconst scrollToDirective: Directive = {\r\n // When the bound element is inserted into the DOM...\r\n mounted($element, binding) {\r\n // Focus the element\r\n if (binding.value) {\r\n try {\r\n const $target = document.querySelector(binding.value);\r\n if (!$target || !('offsetTop' in $target)) return;\r\n\r\n const top = Math.max(0, $target.offsetTop);\r\n $element.addEventListener('click', () => {\r\n window.scrollTo({\r\n top,\r\n behavior: 'smooth',\r\n });\r\n });\r\n } catch {\r\n console.info(`Could not scroll to \"${binding.value}\"`);\r\n }\r\n }\r\n },\r\n};\r\n\r\n// Register a global custom directive called `v-scroll-to`\r\nexport const scrollTo = (app: App) => {\r\n app.directive('scroll-to', scrollToDirective);\r\n};\r\n","/**\r\n * @module framework/directives\r\n */\r\n\r\nimport { App } from '~/framework/vue';\r\n\r\nimport { focus } from './focus';\r\nimport { progressive } from './progressive';\r\nimport { scrollTo } from './scroll-to';\r\n\r\nexport const directives = (app: App) => {\r\n focus(app);\r\n scrollTo(app);\r\n progressive(app);\r\n};\r\n","/**\r\n * DOM Ready\r\n * ~~Stolen~~ Borrowed from https://github.com/sindresorhus/dom-loaded\r\n * However the imported module causes issues with Vitest :(\r\n */\r\n\r\nexport const hasLoaded = () => document.readyState === 'interactive' || document.readyState === 'complete';\r\n\r\nexport const domLoaded = new Promise((resolve) => {\r\n if (hasLoaded()) {\r\n resolve();\r\n } else {\r\n document.addEventListener(\r\n 'DOMContentLoaded',\r\n () => {\r\n resolve();\r\n },\r\n {\r\n capture: true,\r\n once: true,\r\n passive: true,\r\n }\r\n );\r\n }\r\n});\r\n","/**\r\n * Carousel Component\r\n * @module patterns/components/accordion\r\n */\r\n\r\nimport { App } from '~/app';\r\n\r\nexport default (app: App) => {\r\n\r\n app.logger.debug('[Stockland FE] Initialise Stockland Accordion Component');\r\n\r\n const listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]> = [];\r\n\r\n app.afterMount\r\n .then(() => {\r\n mountAccordions(listeners);\r\n })\r\n .catch((error) => {\r\n throw new Error('[Stockland FE] Unable to register Stockland Accordion component', error);\r\n });\r\n\r\n return function destroyAccordion() {\r\n unMountAccordions(listeners);\r\n\r\n app.logger.debug('[DXA] Accordion component destroyed');\r\n };\r\n}\r\n\r\n// Extracted method for logic reuse within other component\r\nexport function mountAccordions(\r\n listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>,\r\n root: HTMLElement | null = null) {\r\n\r\n let rootNode: Document | HTMLElement = document;\r\n if (root)\r\n rootNode = root;\r\n\r\n\r\n const accordions = rootNode.querySelectorAll('.accordion');\r\n for (const accordion of accordions)\r\n {\r\n const accordionItems = accordion.querySelectorAll(\".accordion-item\");\r\n for (const accordionItem of accordionItems)\r\n {\r\n if (accordionItem)\r\n {\r\n const accordionHeader = accordionItem.querySelector(\".accordion-header\");\r\n const accordionBody = accordionItem.querySelector(\".accordion-body\");\r\n\r\n if (accordionHeader)\r\n {\r\n const iconContainer = accordionHeader.querySelector(\".icons\");\r\n\r\n const accordionHeaderClickFunction = function() {\r\n if (iconContainer && accordionBody)\r\n {\r\n accordionHeader.classList.toggle(\"accordion-header-active\");\r\n accordionItem.classList.toggle(\"accordion-item-before\");\r\n\r\n // handles the accordion icon changes for different variants\r\n const arrow = iconContainer.querySelector('.arrow')\r\n const tertiaryArrow = iconContainer.querySelector('.tertiary-arrow')\r\n const plusMinus = iconContainer.querySelectorAll('.plus-minus')\r\n\r\n if (arrow){\r\n arrow.classList.toggle(\"rotate-180\");\r\n }\r\n\r\n if (tertiaryArrow){\r\n tertiaryArrow.classList.toggle(\"rotate-180\")\r\n }\r\n\r\n if (plusMinus){\r\n for (const icon of plusMinus) {\r\n icon.classList.toggle(\"hidden\");\r\n }\r\n }\r\n\r\n /* This allows the accordion body to gain the transition effect when\r\n\t\t\t\t\t\t\texpanding/collapsing.\r\n\t\t\t\t\t\t\t\tUsing Tailwind for styles was unsuccessful due to needing to calculate the max-height\r\n\t\t\t\t\t\t\t\ton the fly and using arbitrary values did not work so inline styles were required. */\r\n if (accordionBody.style.maxHeight == \"0px\")\r\n {\r\n const accordionText = accordionBody.querySelector(\".accordion-text\");\r\n\r\n if (accordionText)\r\n {\r\n const divHeight = accordionText.scrollHeight;\r\n accordionBody.style.maxHeight = `${divHeight}px`;\r\n }\r\n }\r\n else\r\n {\r\n accordionBody.style.maxHeight = \"0px\";\r\n }\r\n }\r\n }\r\n\r\n accordionHeader.addEventListener(\"click\", accordionHeaderClickFunction);\r\n listeners.push([accordionHeader, \"click\", accordionHeaderClickFunction]);\r\n\r\n const adjustAccordionMaxHeight = () => {\r\n if (accordionBody) {\r\n // eslint-disable-next-line unicorn/no-lonely-if\r\n if (accordionBody.style.maxHeight !== \"0px\") {\r\n const accordionText = accordionBody.querySelector(\".accordion-text\");\r\n\r\n if (accordionText) {\r\n const divHeight = accordionText.scrollHeight;\r\n accordionBody.style.maxHeight = `${divHeight}px`;\r\n }\r\n }\r\n }\r\n }\r\n\r\n window.addEventListener(\"resize\", adjustAccordionMaxHeight);\r\n listeners.push([window, \"resize\", adjustAccordionMaxHeight]);\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport function unMountAccordions(listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>) {\r\n for (const [element, event, listener] of listeners) {\r\n element.removeEventListener(event, listener);\r\n }\r\n}\r\n","/**\r\n * AmenityList Component\r\n */\r\n\r\nimport { defineAsyncComponent } from 'vue';\r\n\r\nimport { type App } from '~/app';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Amenity List Component');\r\n app.vueApp.component('amenity-list', defineAsyncComponent(async () => import(\"./AmenityList.vue\")));\r\n app.vueApp.component('amenity-list-item-amenity', defineAsyncComponent(async () => import(\"./AmenityListItemAmenity.vue\")));\r\n app.vueApp.component('amenity-list-item-facility', defineAsyncComponent(async () => import(\"./AmenityListItemFacility.vue\")));\r\n app.vueApp.component('amenity-list-item-resource', defineAsyncComponent(async () => import(\"./AmenityListItemResource.vue\")));\r\n};\r\n","/**\r\n * AmenityList Component\r\n */\r\n\r\nimport { defineAsyncComponent } from 'vue';\r\n\r\nimport { type App } from '~/app';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Amenity List Container Component');\r\n app.vueApp.component('amenity-list-container', defineAsyncComponent(async () => import(\"./AmenityListContainer.vue\")));\r\n app.vueApp.component('news-and-article-filters', defineAsyncComponent(async () => import(\"./NewsAndArticleFilters.vue\")));\r\n};\r\n","// tslint:disable:no-redundant-jsdoc\r\n/**\r\n * Modal Carousel Constant\r\n * @module patterns/components/carousels/modal-carousel\r\n */\r\n\r\n// Determine\r\n\r\n/**\r\n * Class to style and load the carousel\r\n */\r\nexport const CLASS_NAME = 'modal-carousel';\r\n\r\n/**\r\n * Options for the modal carousel.\r\n */\r\nexport const OPTIONS = {\r\n gap: 0,\r\n classes: {\r\n direction: {\r\n ltr: 'carousel--ltr',\r\n rtl: 'carousel--rtl',\r\n },\r\n slider: 'carousel--slider',\r\n carousel: 'carousel--carousel',\r\n swipeable: 'carousel--swipeable',\r\n dragging: 'carousel--dragging',\r\n cloneSlide: 'carousel--clone',\r\n activeNav: 'carousel__bullet--active',\r\n activeSlide: 'carousel__slide--active',\r\n disabledArrow: 'carousel--disabled',\r\n },\r\n};\r\n","/**\r\n * Mark Elements as \"ready\"\r\n * @module framework/helpers\r\n */\r\n\r\n/**\r\n * Ready attribute name\r\n */\r\nexport const DATA_READY = 'data-ready';\r\n\r\n/**\r\n * Sets `data-ready` attribute on the provided element\r\n */\r\nexport function markElementReady(element: HTMLElement): void {\r\n element.dataset.ready = 'ready';\r\n}\r\n\r\n/**\r\n * Sets 'data-ready' attribute on the provided elements\r\n */\r\nexport function markElementsReady(elements: NodeListOf): void {\r\n for (const element of elements) {\r\n markElementReady(element);\r\n }\r\n}\r\n\r\n/**\r\n * Check if an element has been marked as ready\r\n */\r\nexport function isElementReady(element: HTMLElement): boolean {\r\n return element.hasAttribute(DATA_READY);\r\n}\r\n\r\n/**\r\n * Resolves when an element is marked as 'ready'.\r\n * If the element is already 'ready', resolves immediately.\r\n */\r\nexport async function elementReady(element: HTMLElement): Promise {\r\n if (isElementReady(element)) return;\r\n\r\n return new Promise((resolve) => {\r\n const observer = new MutationObserver(() => {\r\n observer.disconnect();\r\n resolve();\r\n });\r\n\r\n observer.observe(element, {\r\n attributes: true,\r\n attributeFilter: [DATA_READY],\r\n });\r\n });\r\n}\r\n\r\n/* A more generic function to elementReady above */\r\nexport async function waitForElement(selector: string, parentNode: HTMLElement | Document = document) {\r\n return new Promise(resolve => {\r\n if (parentNode.querySelector(selector)) {\r\n return resolve(parentNode.querySelector(selector));\r\n }\r\n\r\n const observer = new MutationObserver(mutations => {\r\n if (parentNode.querySelector(selector)) {\r\n resolve(parentNode.querySelector(selector));\r\n observer.disconnect();\r\n }\r\n });\r\n\r\n observer.observe(document.body, {\r\n childList: true,\r\n subtree: true\r\n });\r\n });\r\n}\r\n\r\n","// tslint:disable:no-redundant-jsdoc\r\n/**\r\n * Parsing Utils\r\n * @module framework/utils/parse\r\n */\r\n\r\n/**\r\n * Parse a string to specified object\r\n * @param input - Assumes string input of type \r\n */\r\nexport function parseToObject(input: string | undefined): T | {} {\r\n if (input === undefined) return {};\r\n\r\n return new Function(`\"use strict\";return (${input})`)() as T;\r\n}\r\n\r\n","/**\r\n * Modal Carousel Component\r\n * @module patterns/components/carousels/modal-carousel\r\n */\r\n/* tslint:disable:no-any */\r\n\r\n// Dependencies\r\nimport Glide from '@glidejs/glide';\r\nimport './modal-carousel.scss';\r\n\r\n// Local Dependencies\r\nimport { markElementReady } from '@root/src/framework/scripts/helpers/element-ready';\r\nimport { parseToObject } from '@root/src/framework/scripts/utils/parse';\r\nimport { CLASS_NAME, OPTIONS } from './constants';\r\n\r\n/**\r\n * Initialises the Carousel component\r\n */\r\n\r\nconst bindCarouselIcons = ( item: Element, iconName: String, dataType: String) => {\r\n const icon = item.querySelector(`.${iconName}`) as HTMLElement;\r\n // Getting first instance of the relevant type \r\n const iconData = item.querySelector(`.carousel__slide:not(.glide__slide--clone) [data-type=\"${dataType}\"]`) as HTMLElement;\r\n\r\n if (icon && iconData){\r\n const idx = Number(iconData.dataset.index);\r\n // Assigning first instance index to the icon\r\n icon.dataset.glideDir = `=${idx}`;\r\n icon.classList.remove('hidden');\r\n } else {\r\n // Hiding any icons which aren't in the list\r\n icon.classList.add('hidden');\r\n }\r\n}\r\n\r\nexport const carousels: Map = new Map();\r\n\r\nexport function carousel() {\r\n const listeners: [Element, string, EventListenerOrEventListenerObject][] = [];\r\n const elements = document.querySelectorAll(`.${CLASS_NAME}`);\r\n\t\r\n // Loop through and individually instantiate each Glide instance\r\n elements.forEach((element) => {\r\n const htmlElement = element as HTMLElement;\r\n const carouselOptions = parseToObject(htmlElement.dataset.carouselOptions);\r\n const carouselId = htmlElement.dataset.carouselId;\r\n const thumbnails = element.querySelectorAll(`.thumbnails`) as NodeListOf;\r\n const videoSlides: NodeListOf = element.querySelectorAll('.video-slide');\r\n const slideArrows = element.querySelectorAll('.icon-button')\r\n const additionalInformation = element.querySelectorAll('.additional-information');\r\n\r\n\r\n // media selctor icons (floorplan, video, image)\r\n const mediaSelectorIcons = element.querySelectorAll(\".icon-list svg\");\r\n\r\n const indexClass = `${CLASS_NAME}-${carouselId}`;\r\n htmlElement.classList.add(indexClass);\r\n\r\n // Resets and Updates Media Selectors Icons to remove/add selectored colour\r\n const UpdateMediaSelectorIcons = () => {\r\n if (mediaSelectorIcons){\r\n mediaSelectorIcons.forEach(icon => {\r\n if (icon && icon.parentElement && Number(icon.parentElement.dataset.glideDir?.replace(\"=\",\"\")) != glide.index){\r\n icon.classList.remove('!fill-white', '!stroke-white');\r\n } else {\r\n if (icon.classList.contains('icon-fill')){\r\n icon.classList.add('!fill-white')\r\n } else if (icon.classList.contains('icon-stroke')) {\r\n icon.classList.add('!stroke-white')\r\n }\r\n }\r\n })\r\n }\r\n }\r\n\r\n // Update thumbnail view to show selected thumbnail + 4\r\n const updateThumbnails = () => {\r\n const additionalThumbnailToShow = 4;\r\n const startAtClick = Number(glide.index);\r\n const thumbnailLength = thumbnails.length - 1;\r\n const thumbnailStart = startAtClick > thumbnailLength - additionalThumbnailToShow ? thumbnailLength - additionalThumbnailToShow : startAtClick;\r\n const thumbnailEnd = startAtClick + additionalThumbnailToShow;\r\n\r\n thumbnails.forEach(thumbnail =>{\r\n thumbnail.classList.remove('md:flex');\r\n\t\t\t\t\r\n const dataIdx = Number(thumbnail.dataset.glideDir?.replace(\"=\",\"\"));\r\n if (dataIdx >= thumbnailStart && dataIdx <= thumbnailEnd){\r\n thumbnail.classList.add('md:flex')\r\n }\r\n });\r\n }\r\n\r\n // Updates the number of values on mobile\r\n const updateMobileIndex = () => {\r\n const mobileIndex = element.querySelector(`.image-index`) as HTMLElement;\r\n\t\t\t\r\n if (mobileIndex){\r\n mobileIndex.innerHTML = `${Number(glide.index)+1} of ${thumbnails.length}`\r\n }\r\n }\r\n\r\n // Reset the video media items to view thumbnails and play buttons and assign click event to toggle video \r\n const handleVideoMedia = () => {\r\n if (videoSlides){\r\n videoSlides.forEach( videoSlide => {\r\n const videoThumbnail = videoSlide.querySelector('img');\r\n const videoPlayButton = videoSlide.querySelector('.play-button');\r\n const video = videoSlide.querySelector('iframe');\r\n\r\n if (videoThumbnail && videoPlayButton && video){\r\n const videoLink = video.dataset.videoLink;\r\n if (videoLink){\r\n\r\n // Reset video links\r\n videoPlayButton.classList.remove('hidden');\r\n videoThumbnail.classList.remove('hidden');\r\n additionalInformation.forEach(info =>{\r\n info.classList.remove('hidden')\r\n })\r\n video.classList.add('hidden');\r\n video.removeAttribute(\"src\");\r\n\r\n // Play video and hide play icon and thumbnail image\r\n const playVideo = () => {\r\n videoPlayButton.classList.add('hidden');\r\n videoThumbnail.classList.add('hidden');\r\n additionalInformation.forEach(info =>{\r\n info.classList.add('hidden')\r\n })\r\n video.classList.remove('hidden');\r\n video.setAttribute(\"src\", videoLink + \"?autoplay=1&muted=1\");\r\n }\r\n\r\n // Assign event listerns to all the play buttons\r\n videoPlayButton.addEventListener(\"click\", playVideo);\r\n listeners.push([videoPlayButton, \"click\", playVideo]);\r\n }\r\n }\r\n })\r\n }\r\n }\r\n\t\t\r\n\r\n bindCarouselIcons(element, 'icon-floorplan', 'floorplan');\r\n bindCarouselIcons(element, 'icon-camera', 'image');\r\n bindCarouselIcons(element, 'icon-play', 'video');\r\n\t\t\r\n // Add click event to the slide arrows to reset the video media items\r\n if (slideArrows){\r\n slideArrows.forEach(slideArrow => {\r\n slideArrow.addEventListener(\"click\", handleVideoMedia);\r\n listeners.push([slideArrow, \"click\", handleVideoMedia]);\r\n })\r\n }\r\n\t\r\n const glide = new Glide(`.${indexClass}`, {\r\n ...OPTIONS,\r\n ...carouselOptions,\r\n });\r\n\r\n glide.on('update', function() {\r\n updateMobileIndex();\r\n UpdateMediaSelectorIcons();\r\n updateThumbnails();\r\n handleVideoMedia();\r\n });\r\n\r\n glide.on('swipe.end', function(){\r\n updateMobileIndex()\r\n })\r\n\r\n glide.on('move.after', function(){\r\n updateThumbnails();\r\n updateMobileIndex();\r\n UpdateMediaSelectorIcons();\r\n })\r\n\r\n glide.mount();\r\n carousels.set(indexClass, glide);\r\n\r\n markElementReady(htmlElement);\r\n\r\n });\r\n\r\n const destroyModalCarousel = () => {\r\n // Destory each Glide instance to prevent memory leaks\r\n for (let [, glide] of carousels) {\r\n glide.destroy();\r\n }\r\n\r\n for (const [element, event, listener] of listeners) {\r\n element.removeEventListener(event, listener);\r\n }\r\n };\r\n\r\n return { elements, carousels, destroyModalCarousel };\r\n}\r\n","/* eslint-disable @typescript-eslint/no-unsafe-assignment */\r\n/* eslint-disable @typescript-eslint/no-unsafe-call */\r\n/**\r\n * Media Gallery Component\r\n * @module patterns/components/media-gallery\r\n */\r\n\r\nimport Glide from '@glidejs/glide';\r\n\r\nimport { App } from '~/app';\r\n\r\nimport { CLASS_NAME } from '../../carousels/archive/modal-carousel/constants';\r\nimport { carousels } from '../../carousels/archive/modal-carousel/modal-carousel';\r\n\r\n// Add overlay count value to the last thumbnail in media gallery\r\nconst renderMediaItemCount = (mediaGalleryComponent: HTMLElement) => {\r\n const mediaItemCount = mediaGalleryComponent.querySelector('.media-gallery-count');\r\n if (mediaItemCount) {\r\n const imageCount = mediaGalleryComponent.querySelectorAll('.media-gallery-modal .thumbnails img')?.length || 0;\r\n const imageOverflowCount = imageCount - 4;\r\n mediaItemCount.innerHTML = imageOverflowCount > 0 ? `+${String(imageOverflowCount)}` : '';\r\n }\r\n};\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Modal Feature Component');\r\n\r\n const listeners: Array<[Element, string, EventListenerOrEventListenerObject]> = [];\r\n\r\n app.afterMount\r\n .then(() => {\r\n const mediaGalleryComponents = document.querySelectorAll('[data-media-gallery]');\r\n\r\n for (const mediaGalleryComponent of mediaGalleryComponents) {\r\n // Updates image overflow count on media gallery\r\n renderMediaItemCount(mediaGalleryComponent);\r\n\r\n const modalId = mediaGalleryComponent.dataset.modalId;\r\n const mediaGalleryModal = mediaGalleryComponent.querySelector('.modal');\r\n\r\n if (mediaGalleryModal) {\r\n\r\n // Update / render the glide instance\r\n const updateGlideInstance = (event: Event) => {\r\n const glide = carousels.get(`${CLASS_NAME}-${modalId}`) as Glide;\r\n const focusEvent = event as FocusEvent;\r\n\r\n if (event.type.includes('shown')) {\r\n // Set carousel starting value based on the image clicked\r\n const targetHtml = focusEvent.relatedTarget as HTMLElement;\r\n const startIndex = targetHtml.dataset.goTo ?? \"3\";\r\n glide.update({\r\n startAt: Number.parseInt(startIndex),\r\n });\r\n } else {\r\n glide.update();\r\n }\r\n };\r\n\r\n mediaGalleryModal.addEventListener('shown.bs.modal', updateGlideInstance);\r\n listeners.push([mediaGalleryModal, 'shown.bs.modal', updateGlideInstance]);\r\n\r\n mediaGalleryModal.addEventListener('hidden.bs.modal', updateGlideInstance);\r\n listeners.push([mediaGalleryModal, 'hidden.bs.modal', updateGlideInstance]);\r\n }\r\n }\r\n })\r\n .catch((error) => {\r\n throw new Error('[Stockland FE] Unable to register Stockland Media Gallery component', error);\r\n });\r\n\r\n return function destoryMediaGalleryFeature() {\r\n for (const [element, event, listener] of listeners) {\r\n element.removeEventListener(event, listener);\r\n }\r\n\r\n app.logger.debug('[DXA] Media Gallery component destroyed');\r\n };\r\n};\r\n","/* eslint-disable @typescript-eslint/no-loop-func */\r\n/**\r\n * Vertical Carousel Component\r\n * @module patterns/components/carousels/vertical-carousel\r\n */\r\n\r\nimport { type App } from '~/app';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Vertical Carousel Component');\r\n\r\n const listeners: Array<[Document | Element | Window, string, EventListenerOrEventListenerObject]> = [];\r\n\r\n app.afterMount\r\n .then(() => {\r\n mountVerticalCarousel(listeners, '.vertical-carousel', 'active-indicator');\r\n })\r\n .catch((error: ErrorOptions) => {\r\n throw new Error('[Stockland FE] Unable to register Stockland Vertical Carousel Component', error);\r\n });\r\n\r\n return function destroyVerticalCarousel() {\r\n unMountVerticalCarousel(listeners);\r\n\r\n app.logger.debug('[DXA] Vertical Carousel Component destroyed');\r\n };\r\n};\r\n\r\nexport function mountVerticalCarousel(\r\n listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>,\r\n componentSelector: string,\r\n activeIndicatorClass: string,\r\n root: HTMLElement | null = null\r\n) {\r\n let rootNode: Document | HTMLElement = document;\r\n if (root) rootNode = root;\r\n\r\n const verticalSliderContainers = rootNode.querySelectorAll(componentSelector);\r\n\r\n for (const verticalSliderContainer of verticalSliderContainers) {\r\n const slideContainer = verticalSliderContainer.querySelector('.slides');\r\n const slides = verticalSliderContainer.querySelectorAll('.slide');\r\n const indicatorContainer = verticalSliderContainer.querySelector('.indicators');\r\n const indicators = verticalSliderContainer.querySelectorAll('.indicator');\r\n const variant = verticalSliderContainer.dataset.variant;\r\n const heading = verticalSliderContainer.querySelector('.heading');\r\n const headingHeight = heading ? heading.clientHeight : 0;\r\n\r\n // Functions\r\n const removeAllActiveIndicator = () => {\r\n for (const indicator of indicators) {\r\n indicator.classList.remove('!bg-primary');\r\n }\r\n };\r\n\r\n const removeAllActiveSlides = () => {\r\n for (const slide of slides) {\r\n slide.classList.add('lg:opacity-60');\r\n }\r\n };\r\n\r\n const setActiveIndicator = (targetIndex: number) => {\r\n removeAllActiveIndicator();\r\n const activeIndicator = indicators[targetIndex];\r\n activeIndicator?.classList.add('!bg-primary');\r\n };\r\n\r\n const setActiveSlides = (targetIndex: number) => {\r\n removeAllActiveSlides();\r\n const activeSlides = slides[targetIndex];\r\n activeSlides?.classList.remove('lg:opacity-60');\r\n };\r\n\r\n const addIndicatorClick = (indicator: HTMLElement, target: HTMLElement | null) => {\r\n //prevent default anchor link navigation and add smooth scrolling to sections\r\n indicator.addEventListener('click', (event) => {\r\n event.preventDefault();\r\n const navigation = document.querySelector('.navigation');\r\n const navigationHeight = navigation ? navigation.clientHeight : 0;\r\n const targetTop = target ? target.getBoundingClientRect().top : 0;\r\n\r\n if (variant === 'collapse') {\r\n // Scroll container into view\r\n const containerY =\r\n\t\t\t\t\t\tverticalSliderContainer.getBoundingClientRect().top + window.scrollY - navigationHeight;\r\n\r\n // Scroll target slide into view\r\n const slideOffset = target ? target.offsetTop : 0;\r\n const distance = slideOffset - headingHeight;\r\n\r\n window.scrollTo({ top: containerY, behavior: 'smooth' });\r\n verticalSliderContainer.scrollTo({ top: distance, behavior: 'smooth' });\r\n } else {\r\n target?.scrollIntoView({\r\n behavior: 'smooth',\r\n });\r\n\r\n const targetY = targetTop + window.scrollY - navigationHeight - headingHeight;\r\n window.scrollTo({ top: targetY, behavior: 'smooth' });\r\n }\r\n });\r\n };\r\n\r\n const initialiseVerticalSliderContainer = () => {\r\n // Set up default layouts for both variants\r\n if (slideContainer && indicatorContainer) {\r\n const slide = slideContainer.querySelector('.slide')\r\n\r\n if (variant === 'collapse') {\r\n // 40px is the slides top and bottom margin\r\n const containerHeight = 40 * 2 + slideContainer.scrollHeight / slides.length;\r\n\r\n // 60px is the additional padding on the heading\r\n const headingPadding = heading ? 60 : 0;\r\n\r\n verticalSliderContainer.style.height =\r\n\t\t\t\t\t\twindow.innerWidth > 1024 ? `${containerHeight + headingPadding}px` : 'auto';\r\n\r\n // //Always set the indicator at the middle of the first tile\r\n if (slide) {\r\n indicatorContainer.style.top= `${slide.offsetHeight / 2 - indicatorContainer.offsetHeight / 2 + headingHeight }px`;\r\n }\r\n\r\n // console.log(\r\n // \tparseInt(window.getComputedStyle(verticalSliderContainer).getPropertyValue('padding-top') ?? 0),\r\n // \t'pad'\r\n // );\r\n } else {\r\n setActiveIndicator(0);\r\n const navigation = document.querySelector('.navigation');\r\n const navigationHeight = navigation ? navigation.clientHeight : 0;\r\n\r\n if (heading) {\r\n heading.style.top = `${navigationHeight}px`;\r\n }\r\n\r\n if (slide) {\r\n indicatorContainer.style.top= '72px';\r\n indicatorContainer.style.paddingTop = `${\r\n headingHeight + slide.offsetHeight / 2 - indicatorContainer.offsetHeight / 2 \r\n }px`;\r\n }\r\n }\r\n }\r\n\r\n let space = 0;\r\n if (indicatorContainer && variant !== 'collapse') {\r\n space = -250;\r\n }\r\n\r\n // Set up intersection observer\r\n const observer = new IntersectionObserver(\r\n (entries: IntersectionObserverEntry[]) => {\r\n for (const entry of entries) {\r\n if (entry.isIntersecting) {\r\n const slidesArray = [...slides];\r\n const target = entry.target as HTMLElement;\r\n const index = slidesArray.indexOf(target);\r\n setActiveIndicator(index);\r\n if (variant !== 'collapse') {\r\n setActiveSlides(index);\r\n }\r\n }\r\n }\r\n },\r\n {\r\n root: variant === 'collapse' ? verticalSliderContainer : null,\r\n threshold: 0.75,\r\n rootMargin: `0px 0px ${space}px 0px`,\r\n }\r\n );\r\n\r\n // Add intersection observer\r\n for (const [index, currentIndicator] of indicators.entries()) {\r\n const currentAnchorBlock = slides[index];\r\n addIndicatorClick(currentIndicator, currentAnchorBlock);\r\n if (currentAnchorBlock) {\r\n observer.observe(currentAnchorBlock);\r\n }\r\n }\r\n };\r\n\t\t\r\n setTimeout(() => {\r\n initialiseVerticalSliderContainer();\r\n }, 150);\r\n\r\n window.addEventListener('resize', initialiseVerticalSliderContainer);\r\n listeners.push([window, 'resize', initialiseVerticalSliderContainer]);\r\n }\r\n}\r\n\r\nexport function unMountVerticalCarousel(\r\n listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>\r\n) {\r\n for (const [element, event, listener] of listeners) {\r\n element.removeEventListener(event, listener);\r\n }\r\n}\r\n","/**\r\n * Sticky Slider Component\r\n * @module patterns/components/sticky-slider\r\n */\r\n\r\nimport { App } from '~/app';\r\nimport { mountVerticalCarousel } from '~/patterns/components/carousels/vertical-carousel/vertical-carousel';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Sticky Slider Component');\r\n\r\n const listeners: Array<[Document | Element | Window | Document, string, EventListenerOrEventListenerObject]> = [];\r\n\r\n app.afterMount\r\n .then(() => {\r\n mountVerticalCarousel(listeners, '.sticky-slider', 'active-text-indicator');\r\n })\r\n .catch((error) => {\r\n throw new Error('[Stockland FE] Unable to register Stockland Sticky Slider Component', error);\r\n });\r\n\r\n return function destroyVerticalScrollCarousel() {\r\n unMountVerticalScrollCarousel(listeners);\r\n\r\n app.logger.debug('[DXA] Sticky Slider Component destroyed');\r\n };\r\n};\r\n\r\n\r\nexport function unMountVerticalScrollCarousel(\r\n listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>\r\n) {\r\n for (const [element, event, listener] of listeners) {\r\n element.removeEventListener(event, listener);\r\n }\r\n}\r\n","// Loader for our JS Components\r\n\r\nimport type Glide from '@glidejs/glide';\r\n\r\nimport { type App } from '~/app';\r\n\r\nexport default class JsController {\r\n title = 'Unnamed';\r\n listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]> = [];\r\n carousels: Glide[] = [];\r\n mountFunctions: Array<() => void> = [];\r\n unmountFunctions: Array<() => void> = [];\r\n\r\n constructor(readonly app: App, title: string) {\r\n this.title = title;\r\n }\r\n\r\n init() {\r\n // Run Mount on app ready\r\n this.app.logger.debug(`[Stockland FE] Initialise Stockland ${this.title} Component`);\r\n this.app.afterMount\r\n .then(() => {\r\n for (const mountFunction of this.mountFunctions) {\r\n mountFunction();\r\n }\r\n })\r\n .catch((error) => {\r\n // console.trace();\r\n throw new Error(`[Stockland FE] Unable to register Stockland ${this.title} component`, error);\r\n });\r\n return this.unmount;\r\n }\r\n\r\n addMountFunction(function_: () => void) {\r\n this.mountFunctions.push(function_)\r\n }\r\n\r\n addUnmountFunction(function_: () => void) {\r\n this.unmountFunctions.push(function_)\r\n }\r\n\r\n addCarouselInstance(carousel: Glide) {\r\n this.carousels.push(carousel);\r\n }\r\n\r\n addListener(element: Element | Window | Document, event: string, listener: EventListenerOrEventListenerObject) {\r\n \r\n element.addEventListener(event, listener);\r\n this.listeners.push([element, event, listener]);\r\n }\r\n\r\n unmount() {\r\n // Remove all listeners\r\n for (const [element, event, listener] of this.listeners) {\r\n element.removeEventListener(event, listener);\r\n }\r\n \r\n // Unmount carousels\r\n for (const carousel of this.carousels) {\r\n carousel.destroy();\r\n }\r\n\r\n // Run all unmount functions\r\n for (const function_ of this.unmountFunctions) function_();\r\n\r\n this.app.logger.debug(`[DXA] ${ this.title } component destroyed`);\r\n }\r\n}","\r\n/**\r\n * Modal Carousel Constant\r\n * @module patterns/components/carousels/hero-carousel\r\n */\r\n\r\n// Determine\r\n\r\n/**\r\n * Class to style and load the carousel\r\n */\r\nexport const CLASS_NAME = 'asset-hero-carousel';\r\n\r\n/**\r\n * Options for the modal carousel.\r\n */\r\nexport const OPTIONS = {\r\n gap: 0,\r\n classes: {\r\n direction: {\r\n ltr: 'carousel--ltr',\r\n rtl: 'carousel--rtl',\r\n },\r\n slider: 'carousel--slider',\r\n carousel: 'carousel--carousel',\r\n swipeable: 'carousel--swipeable',\r\n dragging: 'carousel--dragging',\r\n cloneSlide: 'carousel--clone',\r\n activeNav: 'carousel__bullet--active',\r\n activeSlide: 'carousel__slide--active',\r\n disabledArrow: 'carousel--disabled',\r\n },\r\n};\r\n","/**\r\n * Carousel Component\r\n * @module patterns/components/banners/asset-hero-banner\r\n */\r\n\r\nimport Glide from '@glidejs/glide';\r\n\r\nimport { type App } from '~/app';\r\n\r\nimport JsController from '../../js-controller';\r\n\r\nimport { CLASS_NAME } from './constants';\r\n\r\nexport default (app: App) => {\r\n\r\n const controller = new JsController(app, 'Asset Hero');\r\n controller.addMountFunction(() => {\r\n mountAssetHeroBanner(controller);\r\n })\r\n\r\n return controller.init();\r\n}\r\n\r\nexport function mountAssetHeroBanner( controller: JsController ) {\r\n const elements = document.querySelectorAll(`.${CLASS_NAME}`);\r\n let index = 0;\r\n for (const element of elements) {\r\n textNewLine(element);\r\n handleScrollArrowClick(controller, element);\r\n mountCarousel(controller, element, index);\r\n index++;\r\n }\r\n}\r\n\r\n// Handle header on new line\r\nconst textNewLine = (element: HTMLElement) => {\r\n const header = element.querySelector('.asset-hero-header');\r\n if (header) {\r\n const headerArray = header.innerHTML.split(\" \");\r\n const newHeaderArray: string[] = [];\r\n for(const headerPart of headerArray) {\r\n if(headerPart.length < 3 && newHeaderArray.length > 0) {\r\n newHeaderArray[newHeaderArray.length - 1] = `${newHeaderArray.at(-1)} ${headerPart}`;\r\n } else {\r\n newHeaderArray.push(headerPart);\r\n }\r\n }\r\n \r\n header.innerHTML = newHeaderArray.join(\"\\n\");\r\n }\r\n}\r\n\r\n// Handle scroll arrow click\r\nconst handleScrollArrowClick = (controller: JsController, element: HTMLElement) => {\r\n\r\n const slideArrows = element.querySelectorAll('.scroll-to-bottom-of-hero');\r\n\r\n if (slideArrows.length > 0) {\r\n for (const slideArrow of slideArrows) {\r\n controller.addListener(slideArrow, \"click\", () => {\r\n const navigation = document.querySelector('.navigation');\r\n const navigationHeight = navigation ? navigation.clientHeight : 0;\r\n const scrollToPos = element.getBoundingClientRect().bottom + window.scrollY - navigationHeight;\r\n window.scrollTo({ top: scrollToPos, behavior: 'smooth' });\r\n });\r\n }\r\n }\r\n}\r\n\r\n// Handle scroll arrow click\r\nconst mountCarousel = (controller: JsController, element: HTMLElement, carouselIndex: number) => {\r\n const imageCarousel = element.querySelector('.glide__track');\r\n if (imageCarousel) {\r\n const indexClass = `${CLASS_NAME}-${carouselIndex}`;\r\n element.classList.add(indexClass);\r\n const glide: Glide = new Glide(`.${indexClass}`, {\r\n type: 'slider',\r\n perView: 1,\r\n startAt: 0,\r\n gap: 0,\r\n autoplay: 5000,\r\n rewind: true,\r\n })\r\n .mount();\r\n controller.addCarouselInstance(glide);\r\n }\r\n}","/**\r\n * Carousel Component\r\n * @module patterns/components/banners/mpc-takeover-hero\r\n */\r\n\r\nimport { type App } from '~/app';\r\n\r\nimport JsController from '../../js-controller';\r\n\r\n\r\nexport default (app: App) => {\r\n\r\n const controller = new JsController(app, 'MPC Takeover Hero');\r\n controller.addMountFunction(() => {\r\n mountAssetHeroBanner(controller);\r\n })\r\n\r\n return controller.init();\r\n}\r\n\r\nexport function mountAssetHeroBanner( controller: JsController ) {\r\n const elements = document.querySelectorAll(`.mpc-takeover-hero`);\r\n let index = 0;\r\n for (const element of elements) {\r\n handleScrollArrowClick(controller, element);\r\n index = index + 1;\r\n }\r\n}\r\n\r\n// Handle scroll arrow click\r\nconst handleScrollArrowClick = (controller: JsController, element: HTMLElement) => {\r\n const slideArrows = element.querySelectorAll('.scroll-to-bottom-of-hero');\r\n\r\n if (slideArrows.length > 0) {\r\n for (const slideArrow of slideArrows) {\r\n controller.addListener(slideArrow, \"click\", () => {\r\n const navigation = document.querySelector('.navigation');\r\n const navigationHeight = navigation ? navigation.clientHeight : 0;\r\n const scrollToPos = element.getBoundingClientRect().bottom + window.scrollY - navigationHeight;\r\n window.scrollTo({ top: scrollToPos, behavior: 'smooth' });\r\n });\r\n }\r\n }\r\n}\r\n\r\n// Handle scroll arrow click\r\n","/**\r\n * Browser Media Query Helpers\r\n */\r\n\r\n/**\r\n * Returns true if the user's browser has reduced motion turned on\r\n */\r\nexport function prefersReducedMotion(): boolean {\r\n return window.matchMedia('(prefers-reduced-motion: reduce)').matches;\r\n}\r\n\r\n/**\r\n * Returns true if the user's browser is small enough to be considered mobile resolution\r\n */\r\nexport function isMobile(breakpoint?:number): boolean {\r\n if (breakpoint){\r\n return window.innerWidth < breakpoint;\r\n }else{\r\n return window.innerWidth < 769; // Matches md screen breakpoint\r\n }\r\n}\r\n","\r\n/**\r\n * Modal Carousel Constant\r\n * @module patterns/components/carousels/hero-carousel\r\n */\r\n\r\n// Determine\r\n\r\n/**\r\n * Class to style and load the carousel\r\n */\r\nexport const CLASS_NAME = 'halcyon-home-header';\r\n\r\n/**\r\n * Options for the modal carousel.\r\n */\r\nexport const OPTIONS = {\r\n gap: 0,\r\n classes: {\r\n direction: {\r\n ltr: 'carousel--ltr',\r\n rtl: 'carousel--rtl',\r\n },\r\n slider: 'carousel--slider',\r\n carousel: 'carousel--carousel',\r\n swipeable: 'carousel--swipeable',\r\n dragging: 'carousel--dragging',\r\n cloneSlide: 'carousel--clone',\r\n activeNav: 'carousel__bullet--active',\r\n activeSlide: 'carousel__slide--active',\r\n disabledArrow: 'carousel--disabled',\r\n },\r\n};\r\n","/**\r\n * Carousel Component\r\n * @module patterns/components/banners/asset-hero-banner\r\n */\r\n\r\nimport Glide from '@glidejs/glide';\r\n\r\nimport { isMobile } from '@root/src/framework/scripts/helpers/browser/media-query'; \r\nimport { type App } from '~/app';\r\n\r\nimport JsController from '../../js-controller';\r\n\r\nimport { CLASS_NAME } from './constants';\r\n\r\nexport default (app: App) => {\r\n\r\n const controller = new JsController(app, 'Halcyon Home Header');\r\n controller.addMountFunction(() => {\r\n mountHalcyonHomeHeader(controller);\r\n })\r\n\r\n return controller.init();\r\n}\r\n\r\nexport function mountHalcyonHomeHeader( controller: JsController ) {\r\n const elements = document.querySelectorAll(`.${CLASS_NAME}`);\r\n let index = 0;\r\n for (const element of elements) {\r\n handleScrollArrowClick(controller, element);\r\n mountCarousel(controller, element, index);\r\n index++;\r\n }\r\n}\r\n\r\n// Handle scroll arrow click\r\nconst handleScrollArrowClick = (controller: JsController, element: HTMLElement) => {\r\n\r\n const slideArrows = element.querySelectorAll('.scroll-to-bottom-of-hero');\r\n\r\n if (slideArrows.length > 0) {\r\n for (const slideArrow of slideArrows) {\r\n controller.addListener(slideArrow, \"click\", () => {\r\n const navigation = document.querySelector('.navigation');\r\n const navigationHeight = navigation ? navigation.clientHeight : 0;\r\n const scrollToPos = element.getBoundingClientRect().bottom + window.scrollY - navigationHeight;\r\n window.scrollTo({ top: scrollToPos, behavior: 'smooth' });\r\n });\r\n }\r\n }\r\n}\r\n\r\n// Handle scroll arrow click\r\nconst mountCarousel = (controller: JsController, element: HTMLElement, carouselIndex: number) => {\r\n const imageCarousel = element.querySelector('.glide__track');\r\n if (imageCarousel) {\r\n const indexClass = `${CLASS_NAME}-${carouselIndex}`;\r\n element.classList.add(indexClass);\r\n const glide: Glide = new Glide(`.${indexClass}`, {\r\n type: 'slider',\r\n perView: 1,\r\n startAt: 0,\r\n gap: 0,\r\n autoplay: 5000,\r\n rewind: true,\r\n })\r\n \r\n glide.on(['mount.after', 'run'], function() {\r\n const bannerDescriptions = document.querySelectorAll('.banner-description')\r\n for (const description of bannerDescriptions) {\r\n\r\n if( description.classList.contains(`description-${glide.index}`)){\r\n description.classList.add('opacity-100')\r\n\r\n if (isMobile()) {\r\n description.classList.remove('hidden')\r\n description.classList.add('relative')\r\n }\r\n }else{\r\n if(isMobile()){\r\n description.classList.add('hidden')\r\n description.classList.remove('relative') \r\n } \r\n\r\n description.classList.add('opacity-0')\r\n description.classList.remove('opacity-100')\r\n }\r\n }\r\n\r\n })\r\n\r\n glide.mount() \r\n controller.addCarouselInstance(glide);\r\n }\r\n}","/**\r\n * Scroll Utils\r\n */\r\n\r\n// Height of header on mobile\r\nconst OFFSETDEFAULT = 80;\r\n\r\nexport const scrollTo = (element: HTMLElement | null, offset = OFFSETDEFAULT): void => {\r\n if (!element) return;\r\n\r\n const top = element?.offsetHeight - offset;\r\n window.scrollTo({\r\n top,\r\n behavior: 'smooth',\r\n });\r\n};\r\n\r\nexport const scrollToCoord = (coord: number, offset = OFFSETDEFAULT): void => {\r\n const top = coord - offset;\r\n window.scrollTo({\r\n top,\r\n behavior: 'smooth',\r\n });\r\n};\r\n\r\nconst defaultScrollIntoViewOptions: ScrollIntoViewOptions = {\r\n behavior: 'smooth',\r\n block: 'start',\r\n inline: 'start',\r\n};\r\n\r\nexport const scrollIntoView = (element: Element, options = defaultScrollIntoViewOptions): void => {\r\n if (!element) return;\r\n element.scrollIntoView(options);\r\n};\r\n","import { type App } from '~/app';\r\n\r\nimport { scrollIntoView } from '../../../../framework/scripts/utils/scroll';\r\nimport JsController from '../../js-controller';\r\n\r\nexport default (app: App) => {\r\n\r\n const controller = new JsController(app, 'Rich Media Banner');\r\n controller.addMountFunction(() => {\r\n mountRichMediaBanner(controller);\r\n })\r\n\r\n return controller.init();\r\n}\r\n\r\nexport function mountRichMediaBanner( controller: JsController ) {\r\n const richMediaBanner = document.querySelector('.rich-media-banner')\r\n function updateMediaPanel (imageClass: string){\r\n const media = richMediaBanner?.querySelectorAll('.rich-media')\r\n if (media) {\r\n for (const mediaItem of media) {\r\n mediaItem.classList.remove('display')\r\n }\r\n\r\n for (const mediaItem of media) {\r\n if(mediaItem.classList.contains(imageClass)){\r\n mediaItem.classList.add('display')\r\n } \r\n }\r\n } \r\n }\r\n function updateTextPanel (textPanelClass: string){\r\n const textPanels = richMediaBanner?.querySelectorAll('.rich-media-text')\r\n if (textPanels) {\r\n for (const textPanel of textPanels) {\r\n textPanel.classList.remove('show','active')\r\n }\r\n\r\n for (const textPanel of textPanels) {\r\n if(textPanel.classList.contains(textPanelClass)){\r\n textPanel.classList.add('show','active')\r\n } \r\n }\r\n } \r\n }\r\n\r\n function updateTabs(id:string){\r\n const navLinks = richMediaBanner?.querySelectorAll('.nav-link')\r\n if (navLinks) {\r\n for (const navLink of navLinks) {\r\n navLink.classList.remove('active')\r\n }\r\n\r\n for (const navLink of navLinks) {\r\n if(navLink.id=== id){\r\n navLink.classList.add('active')\r\n scrollIntoView(navLink, {\r\n behavior: 'smooth',\r\n inline: 'center',\r\n block: 'nearest'\r\n });\r\n } \r\n }\r\n } \r\n }\r\n\r\n if (richMediaBanner) {\r\n const navLinks = richMediaBanner.querySelectorAll('.nav-link')\r\n if (navLinks) {\r\n for (const tab of navLinks) {\r\n controller.addListener(tab, \"click\",()=>{\r\n const tabId = tab.id\r\n updateMediaPanel(tabId)\r\n updateTabs(tabId)\r\n scrollIntoView(tab, {\r\n behavior: 'smooth',\r\n inline: 'center',\r\n block: 'nearest'\r\n });\r\n }\r\n ) \r\n }\r\n }\r\n \r\n } \r\n \r\n //Handle previous and next tab button click\r\n const prevTabButton = richMediaBanner?.querySelector('.prev-tab-button')\r\n const nextTabButton = richMediaBanner?.querySelector('.next-tab-button')\r\n if (prevTabButton && nextTabButton) {\r\n controller.addListener(prevTabButton, \"click\",()=>{\r\n const activeTab = richMediaBanner?.querySelector('.nav-link.active')\r\n const prevTab = activeTab?.previousElementSibling as HTMLElement\r\n if(prevTab){\r\n const tabId = prevTab.id\r\n updateMediaPanel(tabId)\r\n updateTabs(tabId)\r\n updateTextPanel(tabId)\r\n }\r\n })\r\n\r\n controller.addListener(nextTabButton, \"click\",()=>{\r\n const activeTab = richMediaBanner?.querySelector('.nav-link.active')\r\n const nextTab = activeTab?.nextElementSibling as HTMLElement\r\n if(nextTab){\r\n const tabId = nextTab.id\r\n updateMediaPanel(tabId)\r\n updateTabs(tabId)\r\n updateTextPanel(tabId)\r\n }\r\n })\r\n }\r\n\r\n // Handle scroll arrow click\r\n const slideArrow = document?.querySelector('.scroll-to-bottom-of-hero');\r\n\r\n if (slideArrow && richMediaBanner) {\r\n controller.addListener(slideArrow, \"click\", () => {\r\n const navigation = document.querySelector('.navigation');\r\n const navigationHeight = navigation ? navigation.clientHeight : 0;\r\n const scrollToPos = richMediaBanner.getBoundingClientRect().bottom + window.scrollY - navigationHeight;\r\n window.scrollTo({ top: scrollToPos, behavior: 'smooth' });\r\n });\r\n \r\n }\r\n}\r\n\r\n\r\n","/**\r\n * Reusable Card Components\r\n */\r\n\r\n// eslint-disable-next-line simple-import-sort/imports\r\nimport { type App } from '~/app';\r\nimport { defineAsyncComponent } from 'vue';\r\n\r\nexport default (app: App) => {\r\n\tapp.logger.debug('[Stockland FE] Initialise Reusable Card Components');\r\n\tapp.vueApp.component(\r\n\t\t'event-card',\r\n\t\tdefineAsyncComponent(async () => import('./event-card/EventCard.vue'))\r\n\t);\r\n\tapp.vueApp.component(\r\n\t\t'image-card-modal',\r\n\t\tdefineAsyncComponent(async () => import('./image-card-modal/ImageCardModal.vue'))\r\n\t);\r\n\tapp.vueApp.component(\r\n\t\t'contact-card',\r\n\t\tdefineAsyncComponent(async () => import('./contact-card/ContactCard.vue'))\r\n\t);\r\n\tapp.vueApp.component(\r\n\t\t'image-tile-card',\r\n\t\tdefineAsyncComponent(async () => import('./image-tile-card/ImageTileCard.vue'))\r\n\t);\r\n\tapp.vueApp.component(\r\n\t\t'llc-event-card',\r\n\t\tdefineAsyncComponent(async () => import('./llc-event-card/LlcEventCard.vue'))\r\n\t);\r\n\tapp.vueApp.component(\r\n\t\t'llc-community-card',\r\n\t\tdefineAsyncComponent(async () => import('./llc-community-card/LlcCommunityCard.vue'))\r\n\t);\r\n\tapp.vueApp.component(\r\n\t\t'llc-community-card-mobile',\r\n\t\tdefineAsyncComponent(async () => import('./llc-community-card/LlcCommunityCardMobile.vue'))\r\n\t);\r\n\tapp.vueApp.component(\r\n\t\t'llc-amenity-card',\r\n\t\tdefineAsyncComponent(async () => import('./llc-amenity-card/LlcAmenityCard.vue'))\r\n\t);\r\n\tapp.vueApp.component(\r\n\t\t'llc-amenity-card-mobile',\r\n\t\tdefineAsyncComponent(async () => import('./llc-amenity-card/LlcAmenityCardMobile.vue'))\r\n\t);\r\n\tapp.vueApp.component(\r\n\t\t'product-card',\r\n\t\tdefineAsyncComponent(async () => import('../card/product-card/ProductCard.vue'))\r\n\t);\r\n\treturn function destroyComponents() {\r\n\t\t// Component de-registration\r\n\t\tapp.logger.debug('[Stockland FE] Card Components destroyed');\r\n\t};\r\n};\r\n","/**\r\n * Card Container\r\n */\r\n\r\nimport { App } from '~/app';\r\n\r\nimport { defineAsyncComponent } from 'vue';\r\n\r\nexport default (app: App) => {\r\n\t app.logger.debug('[Stockland FE] Initialise Stockland Card Container Component');\r\n\t app.vueApp.component('card-container', defineAsyncComponent(async () => import(\"./CardContainer.vue\")));\r\n};\r\n","\r\nexport const associateResponseWithForm = (selector: string, instanceId: string, token: string) => {\r\n // This function is used to ensure the uniqueness of each form submission with global/singleton forms (i.e. a single form used in multiple places, such as events \"notify me\")\r\n // Each instance of the global form is associated with their responses by replacing a tokenised value in a hidden input within the form, with the id of the instance\r\n // This hidden input is a required form field in the backend form for this to work, otherwise all responses will be generic against the global form\r\n\r\n const root = document.querySelector(selector);\r\n if (!root) return;\r\n\r\n const hiddenInputs = root.querySelectorAll('form section input[type=hidden]') as unknown as HTMLInputElement[];\r\n if (!hiddenInputs || hiddenInputs.length === 0) return;\r\n\r\n for (const element of hiddenInputs) {\r\n if (element.value === token)\r\n element.value = instanceId;\r\n }\r\n}\r\n","/**\r\n * Button Grouping Form Field Component\r\n * @module patterns/components/form-and-content/fields/button-grouping\r\n */\r\n\r\nimport { type App } from '~/app';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Button Grouping Field Component');\r\n\r\n const listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]> = [];\r\n\r\n app.afterMount\r\n .then(() => {\r\n mountButtonGroupingFormField(listeners);\r\n })\r\n .catch((error) => {\r\n throw new Error('[Stockland FE] Unable to register Stockland Button Grouping Field Component', error);\r\n });\r\n\r\n return function destroyButtonGroupingFormField() {\r\n unMountButtonGroupingFormField(listeners);\r\n\r\n app.logger.debug('[DXA] Button Grouping Field Component destroyed');\r\n };\r\n};\r\n\r\nexport function mountButtonGroupingFormField(\r\n listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>,\r\n root: HTMLElement | null = null\r\n) {\r\n let rootNode: Document | HTMLElement = document;\r\n if (root) rootNode = root;\r\n const forms = rootNode.querySelectorAll('form');\r\n\r\n for (const form of forms) {\r\n const buttonGroupings = form.querySelectorAll('.button-grouping-field');\r\n\r\n for (const buttonGrouping of buttonGroupings) {\r\n // HiddenSelect is what Optimizely Forms will use for validation/submit value(s)\r\n const hiddenSelect = buttonGrouping.querySelector('.button-grouping-hidden-element');\r\n const buttons = buttonGrouping.querySelectorAll('button');\r\n\r\n for (const button of buttons) {\r\n const handleButtonClick = (event: Event) => {\r\n event.preventDefault();\r\n\r\n // Clear out selected styling\r\n for (const button of buttons) {\r\n button.classList.remove('selected');\r\n }\r\n\r\n if (event && hiddenSelect) {\r\n const targetElement = event.currentTarget as HTMLElement;\r\n let buttonValue = '';\r\n let selectedValues = '';\r\n\r\n // Get selected button value\r\n if (targetElement) {\r\n const spanElement = targetElement.querySelector('span');\r\n if (spanElement) {\r\n buttonValue = spanElement.textContent?.trim().toLowerCase() ?? '';\r\n }\r\n }\r\n\r\n // Check if any items are already selected\r\n for (const hiddenOption of hiddenSelect.options) {\r\n if (selectedValues.length > 0) selectedValues += '|';\r\n selectedValues += hiddenOption.selected ? hiddenOption.value : '';\r\n }\r\n\r\n let valueArray = selectedValues ? selectedValues.split('|') : [];\r\n\r\n if (valueArray.includes(buttonValue)) {\r\n // Option deselected\r\n valueArray = valueArray.filter((x) => x !== buttonValue);\r\n button.classList.remove('selected');\r\n } else {\r\n // Option select\r\n valueArray = [buttonValue];\r\n button.classList.add('selected');\r\n }\r\n\r\n // Set the hidden select field so Optimizely forms is able to validate and submit the values\r\n for (const hiddenOption of hiddenSelect.options) {\r\n hiddenOption.selected = valueArray.some((x) => x.toLowerCase() == hiddenOption.value.toLowerCase());\r\n }\r\n\r\n // Strip empty items of any falsy values (false, 0, 0, 0n, \"\", null, undefined, NaN)\r\n valueArray = valueArray.filter(Boolean);\r\n }\r\n\r\n\r\n };\r\n\r\n button.addEventListener('click', handleButtonClick);\r\n listeners.push([button, 'click', handleButtonClick]);\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport function unMountButtonGroupingFormField(\r\n listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>\r\n) {\r\n for (const [element, event, listener] of listeners) {\r\n element.removeEventListener(event, listener);\r\n }\r\n}\r\n\r\nexport function selectDefaultInButtonGroup(currentButtonGroup:HTMLElement,selectElementText:string){\r\n const buttonGroupingContainer = currentButtonGroup?.parentNode;\r\n if(buttonGroupingContainer){\r\n const interestedButtonElement = buttonGroupingContainer.querySelector(`[data-option-text=\"${selectElementText}\"]`);\r\n if(interestedButtonElement)\r\n {\r\n interestedButtonElement.click();\r\n interestedButtonElement.classList.add('selected');\r\n }\r\n }\r\n}","/**\r\n * Select Form Field Component\r\n * @module patterns/components/form-and-content/fields/select\r\n */\r\n\r\nimport { type App } from '~/app';\r\n\r\nimport { type SelectItem,type SelectObject } from './interfaces';\r\n\r\nconst listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]> = [];\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Select Field Component');\r\n\r\n app.afterMount\r\n .then(() => {\r\n const selectFormField = document.querySelector('.select-input-field');\r\n mountSelectFormField(listeners);\r\n })\r\n .catch((error) => {\r\n throw new Error('[Stockland FE] Unable to register Stockland Select Field Component', error);\r\n });\r\n\r\n return function destroySelectFormField() {\r\n unMountSelectFormField(listeners);\r\n\r\n app.logger.debug('[DXA] Select Field Component destroyed');\r\n };\r\n};\r\n\r\nexport function mountSelectFormField(\r\n listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>,\r\n root: HTMLElement | null = null\r\n) {\r\n let rootNode: Document | HTMLElement = document;\r\n if (root) rootNode = root;\r\n const forms = rootNode.querySelectorAll('form');\r\n\r\n for (const form of forms) {\r\n //TODO: Refactor this loop to be more concise and readable\r\n\r\n const selectFormFields = form.querySelectorAll('.select-input-field');\r\n\r\n for (const selectFormField of selectFormFields) {\r\n // HiddenPlaceHolderText is displayed when no item is selected\r\n const hiddenPlaceholderText =\r\n\t\t\t\tselectFormField.querySelector('.select-hidden-placeholder')?.value ?? '';\r\n // HiddenSelect is what Optimizely Forms will ultimate ultimately use for validation/submit value(s)\r\n const hiddenSelect = selectFormField.querySelector('.select-hidden-form-element');\r\n // Container for the input control and the button visible to user\r\n const userVisibleDropdownContainer = selectFormField.querySelector('div.toggle-select-button');\r\n // The input control visible to the user\r\n const userVisibleFormField = selectFormField.querySelector('div.selected-input');\r\n // The button control visable to the user\r\n const userVisibleButton = selectFormField.querySelector('div.selected-input-button');\r\n // All selectable options within our custom form field\r\n const formFieldOptions = selectFormField.querySelectorAll('li.selected-option');\r\n\r\n if (\r\n hiddenSelect &&\r\n\t\t\t\tuserVisibleFormField &&\r\n\t\t\t\tformFieldOptions &&\r\n\t\t\t\tuserVisibleButton &&\r\n\t\t\t\tuserVisibleDropdownContainer\r\n ) {\r\n for (const option of formFieldOptions) {\r\n // Each selectable option requires a trigger to update the form field value\r\n const toggleOption = () => {\r\n const selectedValue = option.dataset.value ?? '';\r\n let selectedValues = '';\r\n for (const hiddenOption of hiddenSelect.options) {\r\n if (selectedValues.length > 0) selectedValues += '|';\r\n selectedValues += hiddenOption.selected ? hiddenOption.value : '';\r\n }\r\n\r\n let valueArray = selectedValues ? selectedValues.split('|') : [];\r\n\r\n if (valueArray.includes(selectedValue)) {\r\n // Option deselected\r\n valueArray = valueArray.filter((x) => x !== selectedValue);\r\n option.querySelector('svg')?.classList.replace('inline-block', 'hidden');\r\n } else {\r\n // Option selected\r\n if (userVisibleFormField.classList.contains('multiple')) {\r\n // Multiple select mode: add the value to the list\r\n valueArray.push(selectedValue);\r\n } else {\r\n // Single select mode: unselect all options and overwrite the selected value\r\n valueArray = [selectedValue];\r\n const allOptionIcons = option.closest('.dropdown-menu')?.querySelectorAll('svg');\r\n if (allOptionIcons) {\r\n for (const element of allOptionIcons) {\r\n element.classList.replace('inline-block', 'hidden');\r\n }\r\n }\r\n }\r\n\r\n // Display selected icon on the option clicked\r\n option.querySelector('svg')?.classList.replace('hidden', 'inline-block');\r\n }\r\n\r\n // Set the hidden select field so Optimizely forms is able to validate and submit the values\r\n for (const hiddenOption of hiddenSelect.options) {\r\n hiddenOption.selected = valueArray.some((x) => x == hiddenOption.value);\r\n }\r\n\r\n // Strip empty items of any falsy values (false, 0, 0, 0n, \"\", null, undefined, NaN)\r\n valueArray = valueArray.filter(Boolean);\r\n\r\n // Get display text of selected values to display to the user\r\n const textArray = [];\r\n for (const textOption of formFieldOptions) {\r\n if (valueArray.some((x) => x == textOption.dataset.value)) textArray.push(textOption.textContent?.trim());\r\n }\r\n\r\n // Update what the user sees\r\n userVisibleFormField.textContent = textArray.length > 0 ? textArray.join(', ') : hiddenPlaceholderText;\r\n };\r\n // *******************\r\n // END TOGGLE FUNCTION\r\n // *******************\r\n\r\n // Clone and replace existing option tag to remove all event listeners before adding a new event listener\r\n // Temporary fix to ensure multiple click events aren't added to the same select dropdowns\r\n const optionClone = option.cloneNode(true) as HTMLElement;\r\n option.parentNode?.replaceChild(optionClone, option);\r\n\r\n // Bind toggleOption to option onClick\r\n optionClone.addEventListener('click', toggleOption);\r\n listeners.push([optionClone, 'click', toggleOption]);\r\n\r\n // Once the events have been hooked up we can check if the option is meant to be active by default and \"click\" it\r\n // Not an ideal method as the dataset property is hard coded but there's no way to replicate how the BE does it\r\n const isSelected = option.dataset.fDefaultValue;\r\n if (isSelected?.toLocaleLowerCase() == '\"true\"') {\r\n option.click();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport function refreshSelectData(currentSelect: HTMLElement | null, overrideUrl: string) {\r\n //const dropdown = document?.querySelector('#00687bbc-f94d-48c9-8de8-715d72f72fd3');\r\n const selectContainer = currentSelect?.parentNode;\r\n const dropdown = selectContainer?.querySelector('.dropdown-menu');\r\n const defaultSelect = selectContainer?.querySelector('select');\r\n const defaultOptionType = defaultSelect?.dataset.elementType;\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n fetch(overrideUrl)\r\n // the JSON body is taken from the response\r\n .then(async (res) => res.json())\r\n .then((res) => {\r\n // The response has an `any` type, so we need to cast\r\n // it to the `User` type, and return it from the promise\r\n const selectData = mapAsSelectObject(res);\r\n if (selectData && selectData?.options?.length > 0 && dropdown && defaultSelect) {\r\n //clear all options and add new\r\n defaultSelect.innerHTML = '';\r\n const newOption = document.createElement('option');\r\n defaultSelect.append(newOption);\r\n //Clear all custom divs and add li\r\n dropdown.innerHTML = '';\r\n for (const currentOption of selectData.options) {\r\n const newOption = document.createElement('option');\r\n newOption.text = currentOption.label;\r\n newOption.value = currentOption.value ?? '';\r\n defaultSelect.append(newOption);\r\n\r\n const newLi = document.createElement('li');\r\n newLi.append(document.createTextNode(currentOption.label));\r\n newLi.classList.add(\r\n 'selected-option',\r\n 'px-3',\r\n 'py-2.5',\r\n 'border-b',\r\n 'border-grey-pastel',\r\n 'hover:bg-info-500-12',\r\n 'cursor-pointer'\r\n );\r\n\r\n newLi.dataset.optionText=currentOption?.label ?? '';\r\n if(defaultOptionType){\r\n newLi.dataset.elementType=defaultOptionType;\r\n }\r\n\r\n newLi.dataset.value = currentOption?.value ?? '';\r\n dropdown?.append(newLi);\r\n }\r\n\r\n //Remove the visible selection as well\r\n const userVisibleFormField = selectContainer?.querySelector('div.selected-input');\r\n const placeHolderText =\r\n\t\t\t\t\t\tselectContainer?.querySelector('.select-hidden-placeholder')?.value ?? '';\r\n if (userVisibleFormField) userVisibleFormField.textContent = placeHolderText;\r\n //Remove all the default event listeners as mounting will add it again\r\n unMountSelectFormField(listeners);\r\n mountSelectFormField(listeners);\r\n }\r\n });\r\n}\r\n\r\nconst mapAsSelectObject = (flatData: any | null) => {\r\n const allOptions: SelectObject = {\r\n name: 'Override',\r\n options: [],\r\n };\r\n\r\n if (flatData?.data) {\r\n for (const [key, value] of Object.entries(flatData.data)) {\tconst option: SelectItem = {\r\n label: value as string,\r\n value: key as string,\r\n };\r\n allOptions.options.push(option);\r\n }\r\n\r\n allOptions.options.sort((a, b) => { return a.label > b.label ? 1 : -1 });\r\n }\r\n\r\n return allOptions;\r\n};\r\n\r\nexport function unMountSelectFormField(\r\n listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>\r\n) {\r\n for (const [element, event, listener] of listeners) {\r\n element.removeEventListener(event, listener);\r\n }\r\n}\r\n\r\nexport const resetSelectField = (form: HTMLElement) => {\r\n const selectFormFields = form.querySelectorAll('.select-input-field');\r\n for (const selectFormField of selectFormFields) {\r\n const userVisibleFormField = selectFormField.querySelector('div.selected-input');\r\n const hiddenSelect = selectFormField.querySelector('.select-hidden-form-element');\r\n const hiddenPlaceholderText =\r\n\t\t\tselectFormField.querySelector('.select-hidden-placeholder')?.value ?? '';\r\n\r\n if (userVisibleFormField && hiddenPlaceholderText && hiddenSelect) {\r\n userVisibleFormField.textContent = hiddenPlaceholderText;\r\n\r\n // Set the first option (placeholder) as the selected value\r\n if (hiddenSelect.options.length > 1) {\r\n hiddenSelect.options[0].selected = true;\r\n }\r\n }\r\n }\r\n};\r\n\r\nexport const selectDefaultInSelectElement = (selectElement: HTMLElement,selectText:string) => {\r\n const dependentEventTriggerElementParent= selectElement.querySelectorAll('ul.dropdown-menu li.selected-option');\r\n for (const element of dependentEventTriggerElementParent) {\r\n const liElement = element as HTMLLIElement;\r\n if(liElement.innerHTML?.trim()?.toLowerCase() === selectText.toLowerCase())\r\n {\r\n liElement.click();\r\n }\r\n }\r\n};\r\n","/* eslint-disable @typescript-eslint/no-unsafe-assignment */\r\n/* eslint-disable @typescript-eslint/no-unsafe-call */\r\n/**\r\n * Optimizely Forms Extension Component\r\n * @module patterns/components/form-and-content/forms/forms\r\n */\r\n\r\nimport { type App } from '~/app';\r\nimport { refreshSelectData, resetSelectField} from '~/patterns/components/form-and-content/fields/select/select';\r\n\r\nimport { selectDefaultInButtonGroup } from '../fields/button-grouping/button-grouping';\r\n\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\ndeclare let $$epiforms: any;\r\n\r\nconst listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]> = [];\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Form Component');\r\n\r\n app.afterMount\r\n .then(() => setTimeout(() => {\r\n mountOptimizelyFormExtensions(listeners);\r\n }, 300))\r\n .catch((error) => {\r\n throw new Error('[Stockland FE] Unable to register Stockland Form Component', error);\r\n });\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n return function destroyEPiForm() {\r\n unMountOptimizelyFormExtensions(listeners);\r\n\r\n app.logger.debug('[DXA] Form Component destroyed');\r\n };\r\n};\r\n\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport function mountOptimizelyFormExtensions(\r\n listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>,\r\n root: HTMLElement | null = null\r\n) {\r\n let rootNode: Document | HTMLElement = document;\r\n if (root) rootNode = root;\r\n\r\n const forms = rootNode.querySelectorAll('form.EPiServerForms');\r\n\r\n if (forms.length > 0) {\r\n // initialise EPiServerForms.js file if a form is found\r\n initialiseEpiServerForms();\r\n \r\n let remindMeFormCount = 0;\r\n\r\n for (const [index, form] of forms.entries()) {\r\n // Only display the first instance of the remind me form on the page\r\n // TODO: Remove this logic and only render 1 form in the backend.\r\n // We will leave as is for now as not to change components too much before release\r\n if (form.dataset.formType == 'RemindMe' ) {\r\n remindMeFormCount++;\r\n if(remindMeFormCount>1){\r\n form.remove();\r\n }\r\n }\r\n \r\n initialiseFormRecaptcha(form,\"in-page\");\r\n // Form grid DOM updates - looks for start and end DIV elements and wraps inner content\r\n // Removes the use of the form grid container component\r\n // It causes issues accessing inner form elements for validation, submission and dependency\r\n const startDivs = form.querySelectorAll('.form-start-container');\r\n for (const startDiv of startDivs) {\r\n const columns = startDiv.dataset.colsToSplit ? Number(startDiv.dataset.colsToSplit) : 1;\r\n const gridContainer = document.createElement('div');\r\n gridContainer.classList.add('grid', 'grid-cols-1', `md:grid-cols-${columns}`, 'gap-x-8');\r\n const containerChildren = [];\r\n let endDiv;\r\n\r\n let element = startDiv;\r\n // For each start div, look for the next end div unless there is no next sibling element or there is another start element\r\n while (\r\n element &&\r\n\t\t\t\t\t!element.classList.contains('form-end-container') &&\r\n\t\t\t\t\t!element.nextElementSibling?.classList.contains('form-start-container')\r\n ) {\r\n element = element.nextElementSibling as HTMLElement;\r\n\r\n if (element) {\r\n if (element.classList.contains('form-end-container')) {\r\n endDiv = element;\r\n } else {\r\n containerChildren.push(element);\r\n }\r\n }\r\n }\r\n\r\n if (endDiv) {\r\n for (const containerChild of containerChildren) {\r\n gridContainer.append(containerChild);\r\n }\r\n\r\n endDiv.before(gridContainer);\r\n }\r\n }\r\n\r\n //check if any field is dependent on other\r\n const dependentElement = form.querySelectorAll('[data-dependent-on]');\r\n if (dependentElement && dependentElement.length > 0) {\r\n for (const currentElement of dependentElement) {\r\n //Grab the id of the controlling elements\r\n const currentControllingElementIdsRaw = currentElement.dataset.dependentOn;\r\n const currentControllingElementIds=currentControllingElementIdsRaw?currentControllingElementIdsRaw.includes(\",\")? currentControllingElementIdsRaw.split(\",\"): [currentControllingElementIdsRaw]:[''];\r\n //grab the api endpoint for override\r\n const currentApiToOverrideData = currentElement.dataset.override;\r\n if (currentElement && currentControllingElementIds && currentApiToOverrideData) {\r\n //On each click load the data on dependent element\r\n bindTheClickListenerToControllingElement(\r\n form,\r\n currentControllingElementIds,\r\n currentElement,\r\n currentApiToOverrideData\r\n );\r\n //Refresh the element if there is a default selection on controlling element\r\n refreshTheDependentData(\r\n currentElement,\r\n getDefaultUrl(form, currentControllingElementIds, currentApiToOverrideData)\r\n );\r\n }\r\n }\r\n }\r\n\r\n \r\n const identityElements = form.querySelectorAll('[data-hidden-identity-id]');\r\n if (identityElements && identityElements.length > 0) {\r\n const userIdentityId = localStorage\r\n ? localStorage.getItem('website-user-identity')\r\n : getCookie('website-user-identity');\r\n\r\n for (const element of identityElements) {\r\n element.value = userIdentityId ?? '';\r\n }\r\n }\r\n\t\t\t\r\n if ($$epiforms !== undefined) {\r\n $$epiforms(document).ready(function myfunction() {\r\n // listen to event when form is about submitting\r\n $$epiforms(\".EPiServerForms\").on(\"formsStartSubmitting\", function (event: any) {\r\n //var $formContainer = $('#' + data.workingFormInfo.Id);\r\n //$formContainer.addClass(\"loading\");\r\n $$epiforms(\".EPiServerForms [data-f-type='submitbutton'] .loading\").removeClass(\"hide\");\r\n if(event.workingFormInfo.Name === \"Stockland Hub Callback Request Form\" && !event.isFinalizedSubmission)\r\n {\r\n $$epiforms(\".EPiServerForms [data-f-type='submitbutton'] .loading\").addClass(\"hide\");\r\n }\r\n });\r\n $$epiforms(\".EPiServerForms\").on(\"formsSubmitted\", function (event: any) {\r\n form.querySelector('.Form__Title')?.classList.add('hidden');\r\n\r\n if (event.workingFormInfo.Name === \"LLC Home Visualiser Enquiry Form\")\r\n {\r\n const enquiryId = form.querySelector(\"input[data-enquiry-id]\")!.value;\r\n\r\n let intervalId: ReturnType;\r\n\r\n const url = `/pdf/home-visualiser/hv_${enquiryId}.pdf`;\r\n\r\n const checkPdf = () => {\r\n fetch(url, { method: \"HEAD\" })\r\n .then(response => {\r\n if (response.status === 200) {\r\n const hvSave = document.createElement('a');\r\n hvSave.href = url;\r\n hvSave.download = `hv_${enquiryId}.pdf`;\r\n document.body.append(hvSave);\r\n hvSave.click();\r\n hvSave.remove();\r\n\r\n // Update form success message\r\n let successMessage = '
';\r\n successMessage += '
Thank you for your enquiry. If your saved design has not automatically started downloading click the button below.
';\r\n successMessage += ``;\r\n successMessage += '
';\r\n const formResponse = form.querySelector('.EPiServerForms .Form__Status__Message');\r\n if (formResponse) {\r\n formResponse.innerHTML = successMessage;\r\n }\r\n \r\n clearInterval(intervalId); // stop checking once the PDF is ready\r\n } else {\r\n console.log('PDF not ready yet. Server responded with status:', response.status);\r\n }\r\n })\r\n .catch(error => console.error('An error occurred while trying to fetch the PDF:', error));\r\n };\r\n\r\n intervalId = setInterval(checkPdf, 1000); // check every second\r\n }\r\n else if (event.workingFormInfo.Name === \"Stockland Hub Callback Request Form\" && event.isFinalizedSubmission)\r\n {\r\n var linkBlock= document.querySelector(\".hub-suggestion-block\");\r\n linkBlock?.classList.remove(\"hidden\");\r\n event.isFinalizedSubmission=false;\r\n }\r\n });\r\n\t\t\t\r\n // formsSubmittedError\r\n $$epiforms(\".EPiServerForms\").on(\"formsSubmittedError\", function () {\r\n $$epiforms(\".EPiServerForms [data-f-type='submitbutton'] .loading\").addClass(\"hide\");\r\n });\r\n \r\n const ackSection = form.querySelector(\".Form__Status\")!;\r\n ackSection?.addEventListener('click', (e) => handleAcknowledgementClick(e));\r\n listeners.push([ackSection, 'click', (e) => handleAcknowledgementClick(e)]);\r\n });\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport const initialiseFormRecaptcha = (form: HTMLElement, modalId: string) => {\r\n const recaptchaElement = form.querySelectorAll('.FormRecaptcha');\r\n if (recaptchaElement && recaptchaElement.length > 0) {\r\n const siteKey = recaptchaElement[0].dataset.epiformsSitekey;\r\n if (siteKey) {\r\n const script = document.createElement('script');\r\n script.id = `script-${modalId}`;\r\n script.src = 'https://www.google.com/recaptcha/api.js?render=' + siteKey;\r\n document.head.append(script);\r\n }\r\n }\r\n};\r\n\r\nexport const destroyFormRecaptcha = (modal: HTMLElement) => {\r\n const modalId = modal.id;\r\n const recaptchaScriptElement = document.querySelector(`#script-${modalId}`);\r\n const grecaptchaBadge = document.querySelector('.grecaptcha-badge');\r\n recaptchaScriptElement?.remove();\r\n grecaptchaBadge?.remove();\r\n};\r\n\r\nconst handleAcknowledgementClick=(event: Event)=>{\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\r\n const target = (event.target as HTMLElement)?.closest(\".Form__Status__Message button.acknowledgement\");\r\n if(target)\r\n {\r\n window.location.reload();\r\n }\r\n}\r\n\r\nconst getCookie = (cookieName: string) => {\r\n const name = cookieName + '=';\r\n const decodedCookie = decodeURIComponent(document.cookie);\r\n const ca = decodedCookie.split(';');\r\n for (let c of ca) {\r\n while (c.startsWith(' ')) {\r\n c = c.slice(1);\r\n }\r\n\r\n if (c.startsWith(name)) {\r\n return c.substring(name.length, c.length);\r\n }\r\n }\r\n\r\n return '';\r\n};\r\n\r\nexport function unMountOptimizelyFormExtensions(\r\n listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>\r\n) {\r\n for (const [element, event, listener] of listeners) {\r\n element.removeEventListener(event, listener);\r\n }\r\n}\r\n\r\n//Grab the element which is controlling the data load on dependent element\r\nconst getRootControllinglement = (currentForm: HTMLElement, currentElementId: string) => {\r\n return currentForm.querySelector(`[data-element-id='${currentElementId}']`);\r\n};\r\n\r\n//Get default override url if default is selected\r\nconst getDefaultUrl = (currentForm: HTMLElement, currentElementIds: string[], overrideUrl: string) => {\r\n let currentOverrideUrl= overrideUrl+\"?\";\r\n let urlParameters: Record={};\r\n\r\n for(const currentElementId of currentElementIds){\r\n const dependentElement = getRootControllinglement(currentForm, currentElementId);\r\n if(!urlParameters.BU)\r\n {\r\n urlParameters.BU= dependentElement?.getAttribute('data-bu') ?? '';\r\n }\r\n\r\n urlParameters= updateOverrideUrlForElement(dependentElement,urlParameters);\r\n }\r\n\r\n for(const key in urlParameters)\r\n {\r\n currentOverrideUrl=`${currentOverrideUrl}&${key}=${urlParameters[key]}`;\r\n }\r\n\r\n return currentOverrideUrl;\r\n};\r\n\r\n//Update the override url on each button click with the button value\r\nconst updateOverrideUrlForElement = (element: HTMLElement | null, defaultUrlParameters: any) => {\r\n const elementType = element?.getAttribute('data-element-type');\r\n const elementValue = element?.getAttribute('data-option-text');\r\n if(elementType){\r\n defaultUrlParameters[elementType]=elementValue??'';\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\r\n return defaultUrlParameters;\r\n};\r\n\r\nconst bindTheClickListenerToControllingElement = (\r\n currentForm: HTMLElement,\r\n currentElementIds: string[],\r\n dependentElement: HTMLElement,\r\n overrideUrl: string\r\n) => {\r\n let overloadUrlParameters: Record={};\r\n for (const currentElementId of currentElementIds){\r\n const controllingElement = getRootControllinglement(currentForm, currentElementId);\r\n //Get Business unit\r\n \r\n\r\n const currentControllingElement = controllingElement?.parentNode as HTMLElement;\r\n if(currentControllingElement){\r\n currentControllingElement?.addEventListener('click', (event:any) =>{ \r\n let currentOverrideUrl= overrideUrl+\"?\";\r\n let eventTarget= event.target as HTMLElement;\r\n if(eventTarget.tagName===\"SPAN\"){\r\n eventTarget=eventTarget.parentNode as HTMLElement;\r\n }\r\n \r\n if(eventTarget.tagName===\"BUTTON\"){\r\n \r\n overloadUrlParameters={};\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\r\n overloadUrlParameters = updateOverrideUrlForElement(eventTarget, overloadUrlParameters );\r\n }\r\n\r\n if(eventTarget.tagName===\"LI\"){\r\n overloadUrlParameters = updateOverrideUrlForElement(eventTarget, overloadUrlParameters );\r\n }\r\n\r\n const currentBu = controllingElement?.getAttribute('data-bu') ?? '';\r\n if(currentBu){\r\n overloadUrlParameters.businessunit=currentBu;\r\n }\r\n\r\n for(const key in overloadUrlParameters)\r\n {\r\n currentOverrideUrl=`${currentOverrideUrl}&${key}=${overloadUrlParameters[key]}`;\r\n }\r\n\r\n refreshTheDependentData(dependentElement, currentOverrideUrl)\r\n });\r\n // listeners.push([currentControllingElement, 'click', (event:any) => refreshTheDependentData(event.target as HTMLElement,dependentElement, `${overrideUrl}?businessunit='${currentBu}'`)]);\r\n }\r\n }\r\n}\r\n\r\nconst refreshTheDependentData = (currentElement: HTMLElement, dataOverloadUrl: string) => {\r\n refreshSelectData(currentElement, dataOverloadUrl);\r\n};\r\n\r\nconst initialiseEpiServerForms = () => {\r\n const source = '/Util/EPiServer.Forms/EPiServerForms.js';\r\n if (!isScriptAlreadyIncluded(source)) {\r\n const script = document.createElement('script');\r\n script.src = source;\r\n document.head.append(script);\r\n }\r\n};\r\n\r\nexport const resetForm = (form: HTMLElement) => {\r\n // Remove success message\r\n const statusMessage = form.querySelector('.Form__Status__Message');\r\n if (statusMessage) {\r\n while (statusMessage.firstChild) {\r\n statusMessage.firstChild.remove();\r\n }\r\n }\r\n\r\n // Unhide main body and input elements\r\n const mainBody = form.querySelector('.Form__MainBody');\r\n if (mainBody && mainBody.style.display === 'none') {\r\n mainBody.style.display = 'block';\r\n }\r\n\r\n // Reset steps\r\n const allSteps= mainBody?.querySelectorAll(\".FormStep\")\r\n if(allSteps && allSteps.length>1){\r\n allSteps[0].classList.remove(\"hide\");\r\n allSteps[1].classList.add(\"hide\");\r\n const nextBtn = mainBody?.querySelector('.Form__NavigationBar__Action.btnNext');\r\n if(nextBtn){\r\n nextBtn.removeAttribute(\"disabled\");\r\n }\r\n const stepIndexInput = form?.querySelector('[name=\"__FormCurrentStepIndex\"]');\r\n if(stepIndexInput){\r\n stepIndexInput.value=\"0\";\r\n }\r\n }\r\n\r\n //hide the loading class\r\n $$epiforms(\".EPiServerForms [data-f-type='submitbutton'] .loading\").addClass(\"hide\");\r\n};\r\n\r\nexport const resetFormInputElements = (form: HTMLElement) => {\r\n // Reset value of all standard input elements\r\n const inputs = form.querySelectorAll('.Form__MainBody .FormTextbox__Input,.Form__MainBody .Form__CustomInput');\r\n for (const input of inputs) {\r\n input.value = '';\r\n }\r\n\r\n // Reset value of all checkboxes\r\n const checkboxes = form.querySelectorAll('.Form__MainBody .FormChoice__Input--Checkbox,.Form__MainBody .FormChoice__Input--Radio');\r\n for (const checkbox of checkboxes) {\r\n checkbox.checked = false;\r\n }\r\n\r\n resetSelectField(form);\r\n};\r\n\r\nexport const resetValidations = (form: HTMLElement) => {\r\n const validationFailedElements = form.querySelectorAll('.ValidationFail');\r\n const validationFailedErrors = form?.querySelectorAll('.Form__Element__ValidationError');\r\n\r\n for (const validationFailedError of validationFailedErrors) {\r\n // Hides validation error message\r\n validationFailedError.classList?.add('hidden');\r\n validationFailedError.textContent = '';\r\n }\r\n\r\n for (const validationFailedElement of validationFailedElements) {\r\n validationFailedElement.classList.remove('ValidationFail');\r\n }\r\n};\r\n\r\nconst isScriptAlreadyIncluded = (source: string) => {\r\n const scripts = document.querySelectorAll('script');\r\n for (const script of scripts) {\r\n const scriptSource = script.getAttribute('src');\r\n if (scriptSource === source) return true;\r\n }\r\n\r\n return false;\r\n};\r\n\r\n\r\n// Archived function\r\n// Used with modal submit button and confirmation modal\r\n// const initialiseModalSubmitButton = (\r\n// \tlisteners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>,\r\n// \tform: HTMLElement,\r\n// \tconfirmationModal: HTMLElement,\r\n// \tmodalSubmitButton: HTMLElement\r\n// ) => {\r\n// \tconst formType = modalSubmitButton.dataset.formType;\r\n\r\n// \tif (formType === 'RemindMe') {\r\n// \t\t//With \"Allow multiple submissions from the same IP/cookie\" turned on on the form,\r\n// \t\t//using localstorage to determine if user submitted the form for the partuclar event and disable the button accordingly.\r\n// \t\t//We cannot use the \"Allow multiple submissions from the same IP/cookie\" unticked\r\n// \t\t// because this will restrict from submitting the form on all events\r\n\r\n// \t\tlet disableButton = false;\r\n// \t\tconst currentEventPageId = form.querySelector('input[name=\"__FormHostedPage\"]');\r\n// \t\tif (currentEventPageId) {\r\n// \t\t\tconst eventId = currentEventPageId.value;\r\n// \t\t\tconst localStorageEventId = localStorage.getItem('event-id');\r\n// \t\t\tif (localStorageEventId) {\r\n// \t\t\t\tconst parsedEventId = JSON.parse(localStorageEventId);\r\n// \t\t\t\tfor (const index in parsedEventId) {\r\n// \t\t\t\t\tif (parsedEventId[index].split('|')[0] == eventId) {\r\n// \t\t\t\t\t\tdisableButton = true;\r\n// \t\t\t\t\t}\r\n// \t\t\t\t}\r\n// \t\t\t}\r\n// \t\t}\r\n\r\n// \t\tconst submitButton = form.querySelector('button[type=\"submit\"]');\r\n// \t\tif (submitButton) {\r\n// \t\t\tsubmitButton.disabled = disableButton;\r\n// \t\t}\r\n\r\n// \t\t// CMS setting can load form with button disabled, update text accordingly\r\n// \t\tupdateFormSubmitText(form);\r\n// \t}\r\n\r\n// \tif (typeof $$epiforms !== 'undefined') {\r\n// \t\t// We are using jQuery here as that is Optimizely Forms is implemented and we are piggy backing on that logic\r\n// \t\t$$epiforms(document).ready(function myfunction() {\r\n// \t\t\t$$epiforms('.EPiServerForms').on('formsSubmitted', () => {\r\n// \t\t\t\tconst formBody = form.querySelector('.Form__MainBody');\r\n// \t\t\t\tconst formStatus = form.querySelector('.Form__Status');\r\n\r\n// \t\t\t\t// Hide the Form Status element on the confirmation page\r\n// \t\t\t\tif (formStatus) {\r\n// \t\t\t\t\tformStatus.classList.add('!hidden');\r\n// \t\t\t\t}\r\n\r\n// \t\t\t\t// Keep the Form Body element visable\r\n// \t\t\t\tif (formBody) {\r\n// \t\t\t\t\tformBody.classList.add('!block');\r\n// \t\t\t\t}\r\n\r\n// \t\t\t\tif (formType === 'RemindMe') {\r\n// \t\t\t\t\t// When the modal is closed update the form's submit button to be disabled and change text to \"Attending\"\r\n// \t\t\t\t\tconst modalButtons = confirmationModal.querySelectorAll('button');\r\n\r\n// \t\t\t\t\tfor (const modalButton of modalButtons) {\r\n// \t\t\t\t\t\tmodalButton.addEventListener('click', () => disableFormSubmitButton(form, formType));\r\n// \t\t\t\t\t\tlisteners.push([modalButton, 'click', () => disableFormSubmitButton(form, formType)]);\r\n// \t\t\t\t\t}\r\n\r\n// \t\t\t\t\t// Get the ics event data from the submit button with modal form element\r\n// \t\t\t\t\tif (modalSubmitButton.dataset.formCalender) {\r\n// \t\t\t\t\t\t// Update the event text anchor to download the ics event\r\n// \t\t\t\t\t\tconst modalAnchors = confirmationModal.querySelectorAll('a');\r\n\r\n// \t\t\t\t\t\tfor (const anchor of modalAnchors) {\r\n// \t\t\t\t\t\t\tif (anchor.innerHTML === 'event') {\r\n// \t\t\t\t\t\t\t\tanchor.href = generateIcsUrl(modalSubmitButton.dataset.formCalender);\r\n// \t\t\t\t\t\t\t}\r\n// \t\t\t\t\t\t}\r\n// \t\t\t\t\t}\r\n// \t\t\t\t}\r\n\r\n// \t\t\t\t// Display Bootstrap modal\r\n// \t\t\t\tconst bsConfirmationModal = new Modal(confirmationModal);\r\n// \t\t\t\tbsConfirmationModal.show();\r\n// \t\t\t});\r\n\r\n// \t\t\t$$epiforms('.EPiServerForms').on('formsStepValidating', (event: any) => {\r\n// \t\t\t\t// Hide Bootstrap modal if form is not valid\r\n// \t\t\t\tif (!event.isValid && confirmationModal) {\r\n// \t\t\t\t\tconst bsConfirmationModal = new Modal(confirmationModal);\r\n// \t\t\t\t\tbsConfirmationModal.hide();\r\n// \t\t\t\t}\r\n// \t\t\t});\r\n// \t\t});\r\n// \t}\r\n// };\r\n\r\n// const disableFormSubmitButton = (form: HTMLElement, formType: string) => {\r\n// \t// Since we don't hide the form on submit (as per Opti default behaviour)\r\n// \t// disable the submit button to prevent duplicate entries if data-form-disable-button-onclick exists\r\n// \tif (formType === 'RemindMe') {\r\n// \t\tconst eventPageId = form.querySelector('input[name=\"__FormHostedPage\"]') as HTMLInputElement;\r\n// \t\tvar eventPageIdArray = [];\r\n// \t\tvar userIdentityId = '';\r\n// \t\tif (eventPageId) {\r\n// \t\t\tif (localStorage.getItem('event-id')) {\r\n// \t\t\t\teventPageIdArray = JSON.parse(localStorage.getItem('event-id')!);\r\n// \t\t\t}\r\n// \t\t\tuserIdentityId = localStorage.getItem('website-user-identity')!;\r\n// \t\t\tif (userIdentityId != '') {\r\n// \t\t\t\tvar currentEventUserId = eventPageId.value + '|' + userIdentityId;\r\n// \t\t\t\tif (!eventPageIdArray.includes(currentEventUserId)) {\r\n// \t\t\t\t\teventPageIdArray.push(currentEventUserId);\r\n// \t\t\t\t\tlocalStorage.setItem('event-id', JSON.stringify(eventPageIdArray));\r\n// \t\t\t\t}\r\n// \t\t\t}\r\n// \t\t}\r\n// \t\tconst submitButton = form.querySelector('button[type=\"submit\"]');\r\n// \t\tif (submitButton) {\r\n// \t\t\tsubmitButton.disabled = submitButton.dataset.formDisableButtonOnclick?.toLowerCase() == 'true' ?? false;\r\n// \t\t}\r\n// \t\tupdateFormSubmitText(form, true);\r\n// \t}\r\n// };\r\n// const updateFormSubmitText = (form: HTMLElement, forceUpdate = false) => {\r\n// \t// On submit, if the property data-form-alternate-text-on-click exists set the button text to that\r\n// \t// We only want to update buttons that have been disabled (either after form submission, or page load in certain circumstances)\r\n// \tconst submitButton = form.querySelector('button[type=\"submit\"]');\r\n\r\n// \tif (submitButton && (submitButton.disabled || forceUpdate)) {\r\n// \t\tconst alternateText = submitButton.dataset.formAlternateTextOnClick ?? '';\r\n// \t\tif (alternateText.length > 0) submitButton.textContent = alternateText;\r\n\r\n// \t\t// TODO: Should this be moved outside?\r\n// \t\tconst formStatusBlock = form.querySelector('.Form__Status');\r\n// \t\tformStatusBlock?.classList.add('hidden');\r\n// \t}\r\n// };\r\n","/* eslint-disable unicorn/prefer-spread */\r\nimport { associateResponseWithForm } from '~/framework/utils/forms';\r\nimport { type App } from '~/app';\r\n\r\nimport { scrollIntoView } from '../../../../framework/scripts/utils/scroll';\r\nimport { selectDefaultInButtonGroup } from '../fields/button-grouping/button-grouping';\r\nimport { selectDefaultInSelectElement } from '../fields/select/select';\r\nimport { destroyFormRecaptcha,initialiseFormRecaptcha,resetForm, resetFormInputElements, resetValidations } from '../forms/form';\r\n\r\nimport { type Event } from './interfaces';\r\n\r\ndeclare const window: Window & { dataLayer: Array> };\r\n\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Modal Form Component');\r\n\r\n const listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]> = [];\r\n\r\n app.afterMount\r\n .then(() => {\r\n mountModalForm(listeners);\r\n })\r\n .catch((error) => {\r\n throw new Error('[Stockland FE] Unable to register Stockland Modal Form Component', error);\r\n });\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n return function destroyModalForm() {\r\n unMountModalForm(listeners);\r\n\r\n app.logger.debug('[DXA] Modal Form Component destroyed');\r\n };\r\n};\r\n\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport function mountModalForm(\r\n listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>,\r\n root: HTMLElement | null = null\r\n) {\r\n let rootNode: Document | HTMLElement = document;\r\n if (root) rootNode = root;\r\n\r\n const modalButtons = rootNode.querySelectorAll('.modal-form-button');\r\n const form = rootNode.querySelector('.modal-dialog .form-container form.EPiServerForms'); // Looks for the first instance of a form within the modal\r\n\r\n if (\r\n form\r\n ) {\r\n const target = form.querySelector('.Form__Status .Form__Status__Message');\r\n if (target) {\r\n const observer = new MutationObserver(() => {\r\n const modal = form.closest('.modal');\r\n if(modal)\r\n {\r\n const successElement = modal.querySelector('.Form__Status__Message.Form__Success__Message');\r\n if(successElement)\r\n {\r\n form.dataset.formSubmitted='true';\r\n }\r\n\r\n if(\tform.dataset.formType == 'RemindMe' && // requires the \"Display message after form submission\" in the CMS to have an anchor\r\n modal?.dataset?.formCalendar) {\r\n const icsUrl = generateIcsUrl(modal.dataset.formCalendar);\r\n const anchor = modal.querySelector('.Form__Status__Message.Form__Success__Message a');\r\n if (anchor) {\r\n anchor.href = icsUrl;\r\n }\r\n }\r\n\r\n }\r\n });\r\n const config = { attributes: true, childList: true, characterData: true };\r\n observer.observe(target, config);\r\n }\r\n }\r\n\r\n for (const modalButton of modalButtons) {\r\n const modalButtonId = modalButton.dataset.bsTarget;\r\n const modal = modalButtonId ? rootNode.querySelector(`${modalButtonId}`) : null;\r\n\r\n if (modalButton && modal && form) {\r\n modal.addEventListener('show.bs.modal', (event) => initialiseFormInModal(form, modal, event));\r\n listeners.push([modal, 'show.bs.modal', (event) => initialiseFormInModal(form, modal, event)]);\r\n\r\n modal.addEventListener('hidden.bs.modal', () => destroyFormInModal(form, modal));\r\n listeners.push([modal, 'hidden.bs.modal', () => destroyFormInModal(form, modal)]);\r\n }\r\n }\r\n}\r\n\r\nfunction unMountModalForm(listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>) {\r\n for (const [element, event, listener] of listeners) {\r\n element.removeEventListener(event, listener);\r\n }\r\n}\r\n\r\nconst initialiseFormInModal = (form: HTMLElement, modal: HTMLElement, event: globalThis.Event) => {\r\n // Check if there is an inline form on the page, and if there is, we scroll to it and don't open the modal (If it's the same form then it should have been removed from the modal by the takeover callout anyway)\r\n const takeoverCallout = document.querySelector('.takeover-callout');\r\n const takeoverCalloutForm = document.querySelector('.takeover-callout-form-container:not(.hidden) form');\r\n if (takeoverCallout && takeoverCalloutForm ) {\r\n scrollIntoView(takeoverCallout);\r\n return event.preventDefault();\r\n }\r\n\r\n resetForm(form);\r\n resetValidations(form);\r\n const modalId = modal?.id;\r\n const modalEventId = modal.dataset.eventId;\r\n\r\n // Check if the modal already has the form before moving it\r\n const formInModal = modal.querySelector('.form-container form.EPiServerForms');\r\n if (!formInModal) {\r\n // Move the remind me form on the page into the modal you are displaying\r\n const formContainer = modal.querySelector('.form-container');\r\n formContainer?.append(form);\r\n }\r\n\r\n // Update hidden input with event id\r\n if (modalEventId){\r\n associateResponseWithForm(`#${modalId}`, modalEventId, '###EventIdToken###');\r\n }\r\n\r\n //check if any default value\r\n const defaultSelectionElements = form.querySelectorAll('[data-default]');\r\n if(defaultSelectionElements && defaultSelectionElements.length>0){\r\n for(const currentElement of defaultSelectionElements)\r\n {\r\n if(currentElement.dataset.default && currentElement.classList.contains('button-grouping-hidden-element'))\r\n {\r\n selectDefaultInButtonGroup(currentElement,currentElement.dataset.default) \r\n }\r\n else if(currentElement.dataset.default && currentElement.classList.contains('select-input-field'))\r\n {\r\n setTimeout(() => {\r\n selectDefaultInSelectElement(currentElement,currentElement.dataset.default??\"\");\r\n }, 1000);\r\n }\r\n }\r\n }\r\n\r\n initialiseFormRecaptcha(form, modalId);\r\n};\r\n\r\nconst destroyFormInModal = (form: HTMLElement, modal: HTMLElement) => {\r\n if(!form.dataset.formSubmitted || form.dataset.formSubmitted!='true'){\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push(\r\n {\r\n \"formName\":\"\",\r\n \"formEvent\": \"modal-close\",\r\n \"formSubmitted\": false\r\n }\r\n );\r\n }\r\n\r\n resetForm(form);\r\n resetFormInputElements(form);\r\n resetValidations(form);\r\n // Reset hidden input\r\n const modalId = modal?.id;\r\n const modalEventId = modal.dataset.eventId;\r\n if (modalEventId){\r\n associateResponseWithForm(`#${modalId}`, '###EventIdToken###', modalEventId);\r\n }\r\n\r\n destroyFormRecaptcha(modal)\r\n}\r\n\r\nexport const getMainEnquiryForm = () => {\r\n const modalButton = document.querySelector('.enquiry-button-parent .modal-form-button .btn');\r\n return modalButton;\r\n};\r\n\r\nconst generateIcsUrl = (json: string) => {\r\n const eventData = JSON.parse(json) as Event;\r\n \r\n // Create ics event\r\n const eventStartTime = eventData.startTime ? new Date(Number(eventData.startTime) * 1000).toISOString().split(\"-\").join(\"\").split(\":\").join(\"\").slice(0,15).concat(\"Z\") : '';\r\n const eventEndTime = eventData.endTime ? new Date(Number(eventData.endTime) * 1000).toISOString().split(\"-\").join(\"\").split(\":\").join(\"\").slice(0,15).concat(\"Z\") : '';\r\n const eventLocation = eventData.location ?? '';\r\n const eventHeading = eventData.heading ?? '';\r\n const eventDescription = eventData.description ? eventData.description.replaceAll(/\\r\\n|\\r|\\n/g, '
') : '';\r\n\r\n const icsMessage = `BEGIN:VCALENDAR\\nVERSION:2.0\\nMETHOD:PUBLISH\\nCALSCALE:GREGORIAN\\nBEGIN:VEVENT\\nSEQUENCE:0\\nCLASS:PUBLIC\\nPRIORITY:5\\nDTSTAMP:${Date.now()}\\nDTSTART:${eventStartTime}\\nDTEND:${eventEndTime}\\nSUMMARY:${eventHeading}\\nLOCATION:${eventLocation}\\nDESCRIPTION:${eventDescription}\\nX-ALT-DESC;FMTTYPE=text/html:${eventDescription}\\nBEGIN:VALARM\\nTRIGGER:-PT30M\\nACTION:DISPLAY\\nDESCRIPTION:Reminder\\nEND:VALARM\\nEND:VEVENT\\nEND:VCALENDAR`;\r\n\r\n return 'data:text/calendar;charset=utf8,' + encodeURIComponent(icsMessage);\r\n};\r\n","/**\r\n * Carousel Component\r\n * @module patterns/components/banners/asset-hero-banner\r\n */\r\n\r\nimport { type App } from '~/app';\r\n\r\nimport { getMainEnquiryForm } from '../form-and-content/modal-form/modal-form';\r\nimport JsController from '../js-controller';\r\n\r\nexport default (app: App) => {\r\n\r\n const controller = new JsController(app, 'Campaign Block');\r\n controller.addMountFunction(() => {\r\n mountComponent(controller);\r\n })\r\n\r\n return controller.init();\r\n}\r\n\r\nexport function mountComponent( controller: JsController ) {\r\n const fireEnquireModal = document.querySelector(`.fire-enquire-modal`);\r\n const modalButton = getMainEnquiryForm();\r\n if (modalButton && fireEnquireModal) {\r\n controller.addListener(fireEnquireModal, \"click\", (event) => {\r\n event.preventDefault();\r\n modalButton.click();\r\n });\r\n }\r\n}\r\n","/**\r\n * Carousel Component\r\n * @module patterns/components/slim-campaign-block\r\n */\r\n\r\nimport { type App } from '~/app';\r\n\r\nimport { getMainEnquiryForm } from '../form-and-content/modal-form/modal-form';\r\nimport JsController from '../js-controller';\r\n\r\nexport default (app: App) => {\r\n\r\n const controller = new JsController(app, 'Slim Campaign Block');\r\n controller.addMountFunction(() => {\r\n mountComponent(controller);\r\n })\r\n\r\n return controller.init();\r\n}\r\n\r\nexport function mountComponent( controller: JsController ) {\r\n const fireEnquireModal = document.querySelector(`.fire-enquire-modal`);\r\n const modalButton = getMainEnquiryForm();\r\n if (modalButton && fireEnquireModal) {\r\n controller.addListener(fireEnquireModal, \"click\", (event) => {\r\n event.preventDefault();\r\n modalButton.click();\r\n });\r\n }\r\n}\r\n","/**\r\n * Carousel Lazy Load\r\n * @module patterns/components/carousels/carousel\r\n */\r\n\r\n// Local Dependencies\r\nimport { type App } from '~/app';\r\n\r\nexport default function initialisePassiveCarousel(app: App) {\r\n\r\n let destroyCarousel = () => {};\r\n\r\n\r\n import(/* webpackChunkName: \"carousel\" */ './announcement-tile-carousel')\r\n .then(async ({ carousel }) => {\r\n await app.afterMount;\r\n\r\n const { elements, destroyCarousel: _destroyCarousel } = carousel();\r\n destroyCarousel = _destroyCarousel;\r\n\r\n // Notify the DOM that we've loaded\r\n for (const item of elements) {\r\n item.dataset.lazy = 'loaded';\r\n }\r\n })\r\n .catch((error) => {\r\n throw new Error('[Stockland FE] Unable to register Carousel component', error);\r\n });\r\n\r\n // Cleanup - `destroyCarousel` is updated at a later time, so we can't return it, but we can leverage closure to call it.\r\n\r\n return () => destroyCarousel();\r\n}\r\n","/**\r\n * Modal Carousel Lazy Load\r\n * @module patterns/components/carousels/modal-carousel\r\n */\r\n\r\n// Local Dependencies\r\nimport { App } from '~/app';\r\nimport { CLASS_NAME } from './constants';\r\n\r\n\r\nexport default function initialiseModalCarousel(app: App) {\r\n const elements: NodeListOf = document.querySelectorAll(`.${CLASS_NAME}`);\r\n\r\n\r\n let destroyModalCarousel = () => {};\r\n\r\n // No carousel items on load, return no-op.\r\n if (!elements.length) return destroyModalCarousel;\r\n\r\n import(/* webpackChunkName: \"carousel\" */ './modal-carousel')\r\n .then(async ({ carousel }) => {\r\n await app.afterMount;\r\n\r\n const { elements, destroyModalCarousel: _destroyModalCarousel } = carousel();\r\n destroyModalCarousel = _destroyModalCarousel;\r\n\r\n // Notify the DOM that we've loaded\r\n elements.forEach((item) => {\r\n item.setAttribute('data-lazy', 'loaded');\r\n });\r\n })\r\n .catch((error) => {\r\n throw new Error('[Stockland FE] Unable to register Carousel component', error);\r\n });\r\n\r\n // Cleanup - `destroyModalCarousel` is updated at a later time, so we can't return it, but we can leverage closure to call it.\r\n\r\n return () => destroyModalCarousel();\r\n\r\n}\r\n","\r\n/**\r\n * Carousel Constant\r\n * @module patterns/components/carousels/carousel\r\n */\r\n\r\n// Determine\r\n\r\n/**\r\n * Class to style and load the carousel\r\n */\r\nexport const CLASS_NAME = 'carousel';\r\n\r\n/**\r\n * Options for the carousel.\r\n */\r\nexport const OPTIONS = {\r\n gap: 0,\r\n classes: {\r\n direction: {\r\n ltr: 'carousel--ltr',\r\n rtl: 'carousel--rtl',\r\n },\r\n slider: 'carousel--slider',\r\n carousel: 'carousel--carousel',\r\n swipeable: 'carousel--swipeable',\r\n dragging: 'carousel--dragging',\r\n cloneSlide: 'carousel--clone',\r\n activeNav: 'carousel__bullet--active',\r\n activeSlide: 'carousel__slide--active',\r\n disabledArrow: 'carousel--disabled',\r\n },\r\n};\r\n","/**\r\n * Carousel Lazy Load\r\n * @module patterns/components/carousels/carousel\r\n */\r\n\r\n// Local Dependencies\r\nimport { App } from '~/app';\r\nimport { CLASS_NAME } from './constants';\r\n\r\n\r\nexport default function initialiseCarousel(app: App) {\r\n const elements: NodeListOf = document.querySelectorAll(`.${CLASS_NAME}`);\r\n\r\n let destroyCarousel = () => {};\r\n\r\n // No carousel items on load, return no-op.\r\n if (!elements.length) return destroyCarousel;\r\n\r\n import(/* webpackChunkName: \"carousel\" */ './carousel')\r\n .then(async ({ carousel }) => {\r\n await app.afterMount;\r\n\r\n const { elements, destroyCarousel: _destroyCarousel } = carousel();\r\n destroyCarousel = _destroyCarousel;\r\n\r\n // Notify the DOM that we've loaded\r\n elements.forEach((item) => {\r\n item.setAttribute('data-lazy', 'loaded');\r\n });\r\n })\r\n .catch((error) => {\r\n throw new Error('[Stockland FE] Unable to register Carousel component', error);\r\n });\r\n\r\n // Cleanup - `destroyCarousel` is updated at a later time, so we can't return it, but we can leverage closure to call it.\r\n\r\n return () => destroyCarousel();\r\n\r\n}\r\n","\r\n/**\r\n * Modal Feature Stat Quote Carousel Constant\r\n * @module patterns/components/carousels/feature-stat-quote-carousel\r\n */\r\n\r\n// Determine\r\n\r\n/**\r\n * Class to style and load the carousel\r\n */\r\nexport const CLASS_NAME = 'feature-stat-quote-carousel';\r\n\r\n/**\r\n * Options for the modal carousel.\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport const OPTIONS = {\r\n gap: 0,\r\n classes: {\r\n direction: {\r\n ltr: 'carousel--ltr',\r\n rtl: 'carousel--rtl',\r\n },\r\n slider: 'carousel--slider',\r\n carousel: 'carousel--carousel',\r\n swipeable: 'carousel--swipeable',\r\n dragging: 'carousel--dragging',\r\n cloneSlide: 'carousel--clone',\r\n activeNav: 'carousel__bullet--active',\r\n activeSlide: 'carousel__slide--active',\r\n disabledArrow: 'carousel--disabled',\r\n },\r\n};\r\n","/**\r\n * Feature Stat Quote Carousel Lazy Load\r\n * @module patterns/components/carousels/feature-stat-quote-carousel\r\n */\r\n\r\n// Local Dependencies\r\nimport { App } from '~/app';\r\n\r\nimport { CLASS_NAME } from './constants';\r\n\r\n\r\nexport default function initialiseFeatureStatQuoteCarousel(app: App) {\r\n const featureStatequoteElements: NodeListOf = document.querySelectorAll(`.${CLASS_NAME}`);\r\n\r\n let destroyFeatureStatQuoteCarousel = () => {};\r\n\r\n // No carousel items on load, return no-op.\r\n if (!featureStatequoteElements.length) return destroyFeatureStatQuoteCarousel;\r\n\r\n import(/* webpackChunkName: \"carousel\" */ './feature-stat-quote-carousel')\r\n .then(async ({ carousel }) => {\r\n await app.afterMount;\r\n const { elements, destroyFeatureStatQuoteCarousel: _destroyFeatureStatQuoteCarousel } = carousel();\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\r\n destroyFeatureStatQuoteCarousel = _destroyFeatureStatQuoteCarousel;\r\n\r\n // Notify the DOM that we've loaded\r\n elements.forEach((item) => {\r\n item.setAttribute('data-lazy', 'loaded');\r\n });\r\n })\r\n .catch((error) => {\r\n throw new Error('[Stockland FE] Unable to register FeatureStatequote Component', error);\r\n });\r\n\r\n // Cleanup - `destroyFeatureStatQuoteCarousel` is updated at a later time, so we can't return it, but we can leverage closure to call it.\r\n\r\n return () => destroyFeatureStatQuoteCarousel();\r\n\r\n}\r\n","/**\r\n * Carousel Lazy Load\r\n * @module patterns/components/carousels/carousel\r\n */\r\n\r\n// Local Dependencies\r\nimport { type App } from '~/app';\r\n\r\nexport default function initialiseFeaturedPropertysCarousel(app: App) {\r\n\r\n let destroyCarousel = () => {};\r\n\r\n\r\n import(/* webpackChunkName: \"carousel\" */ './featured-property-carousel')\r\n .then(async ({ carousel }) => {\r\n await app.afterMount;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\r\n const { elements, destroyCarousel: _destroyCarousel } = carousel();\r\n destroyCarousel = _destroyCarousel;\r\n\r\n // Notify the DOM that we've loaded\r\n for (const item of elements) {\r\n item.dataset.lazy = 'loaded';\r\n }\r\n })\r\n .catch((error) => {\r\n throw new Error('[Stockland FE] Unable to register Carousel component', error);\r\n });\r\n\r\n // Cleanup - `destroyCarousel` is updated at a later time, so we can't return it, but we can leverage closure to call it.\r\n\r\n return () => destroyCarousel();\r\n}\r\n","// tslint:disable:no-redundant-jsdoc\r\n/**\r\n * Modal Carousel Constant\r\n * @module patterns/components/carousels/hero-carousel\r\n */\r\n\r\n// Determine\r\n\r\n/**\r\n * Class to style and load the carousel\r\n */\r\nexport const CLASS_NAME = 'hero-carousel';\r\n\r\n/**\r\n * Options for the modal carousel.\r\n */\r\nexport const OPTIONS = {\r\n gap: 0,\r\n classes: {\r\n direction: {\r\n ltr: 'carousel--ltr',\r\n rtl: 'carousel--rtl',\r\n },\r\n slider: 'carousel--slider',\r\n carousel: 'carousel--carousel',\r\n swipeable: 'carousel--swipeable',\r\n dragging: 'carousel--dragging',\r\n cloneSlide: 'carousel--clone',\r\n activeNav: 'carousel__bullet--active',\r\n activeSlide: 'carousel__slide--active',\r\n disabledArrow: 'carousel--disabled',\r\n },\r\n};\r\n","/**\r\n * Hero Carousel Lazy Load\r\n * @module patterns/components/carousels/hero-carousel\r\n */\r\n\r\n// Local Dependencies\r\nimport { App } from '~/app';\r\nimport { CLASS_NAME } from './constants';\r\n\r\n\r\nexport default function initialiseHeroCarousel(app: App) {\r\n const heroElements: NodeListOf = document.querySelectorAll(`.${CLASS_NAME}`);\r\n\r\n\r\n let destroyHeroCarousel = () => {};\r\n\r\n // No carousel items on load, return no-op.\r\n if (!heroElements.length) return destroyHeroCarousel;\r\n\r\n import(/* webpackChunkName: \"carousel\" */ './hero-carousel')\r\n .then(async ({ carousel }) => {\r\n await app.afterMount;\r\n const { elements, destroyHeroCarousel: _destroyHeroCarousel } = carousel();\r\n destroyHeroCarousel = _destroyHeroCarousel;\r\n\r\n // Notify the DOM that we've loaded\r\n elements.forEach((item) => {\r\n item.setAttribute('data-lazy', 'loaded');\r\n });\r\n })\r\n .catch((error) => {\r\n throw new Error('[Stockland FE] Unable to register Hero Carousel Component', error);\r\n });\r\n\r\n // Cleanup - `destroyHeroCarousel` is updated at a later time, so we can't return it, but we can leverage closure to call it.\r\n\r\n return () => destroyHeroCarousel();\r\n\r\n}\r\n","/**\r\n * Carousel Constant\r\n * @module patterns/components/carousels/carousel\r\n */\r\n\r\n// Determine\r\n\r\n/**\r\n * Class to style and load the carousel\r\n */\r\nexport const CLASS_NAME = 'horizontal-carousel';\r\n\r\n/**\r\n * Options for the carousel.\r\n */\r\nexport const OPTIONS = {\r\n classes: {\r\n direction: {\r\n ltr: 'carousel--ltr',\r\n rtl: 'carousel--rtl',\r\n },\r\n carousel: 'carousel--carousel',\r\n swipeable: 'carousel--swipeable',\r\n dragging: 'carousel--dragging',\r\n cloneSlide: 'carousel--clone',\r\n activeNav: 'carousel__bullet--active',\r\n activeSlide: 'carousel__slide--active',\r\n disabledArrow: 'carousel--disabled',\r\n },\r\n};","/**\r\n * Carousel Lazy Load\r\n * @module patterns/components/carousels/carousel\r\n */\r\n\r\n// Local Dependencies\r\nimport { type App } from '~/app';\r\n\r\nimport { CLASS_NAME } from './constants';\r\n\r\nexport default function initialiseHorizontalCarousel(app: App) {\r\n const elements: NodeListOf = document.querySelectorAll(`.${CLASS_NAME}`);\r\n\r\n let destroyCarousel = () => {};\r\n\r\n // No carousel items on load, return no-op.\r\n // if (elements.length === 0) return destroyCarousel;\r\n\r\n import(/* webpackChunkName: \"carousel\" */ './horizontal-carousel')\r\n .then(async ({ carousel }) => {\r\n await app.afterMount;\r\n\r\n const { elements, destroyCarousel: _destroyCarousel } = carousel();\r\n destroyCarousel = _destroyCarousel;\r\n\r\n // Notify the DOM that we've loaded\r\n for (const item of elements) {\r\n item.dataset.lazy = 'loaded';\r\n }\r\n })\r\n .catch((error) => {\r\n throw new Error('[Stockland FE] Unable to register Carousel component', error);\r\n });\r\n\r\n // Cleanup - `destroyCarousel` is updated at a later time, so we can't return it, but we can leverage closure to call it.\r\n\r\n return () => destroyCarousel();\r\n}\r\n","/**\r\n * Carousel Constant\r\n * @module patterns/components/carousels/carousel\r\n */\r\n\r\n// Determine\r\n\r\n/**\r\n * Class to style and load the carousel\r\n */\r\nexport const CLASS_NAME = 'multi-image-carousel';\r\n\r\n/**\r\n * Options for the carousel.\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport const OPTIONS = {\r\n classes: {\r\n direction: {\r\n ltr: 'carousel--ltr',\r\n rtl: 'carousel--rtl',\r\n },\r\n slider: 'carousel--slider',\r\n carousel: 'carousel--carousel',\r\n swipeable: 'carousel--swipeable',\r\n dragging: 'carousel--dragging',\r\n cloneSlide: 'carousel--clone',\r\n activeNav: 'carousel__bullet--active',\r\n activeSlide: 'carousel__slide--active',\r\n disabledArrow: 'carousel--disabled',\r\n },\r\n};\r\n","/* eslint-disable @typescript-eslint/no-unsafe-assignment */\r\n/* eslint-disable @typescript-eslint/no-unsafe-call */\r\n// Above global eslint rules disabled as GlideJS has no TS implementation\r\n/**\r\n * Carousel Component\r\n * @module patterns/components/carousels/carousel\r\n */\r\n// eslint-disable-next-line @typescript-eslint/ban-tslint-comment\r\n/* tslint:disable:no-any */\r\n\r\n// Dependencies\r\nimport Glide from '@glidejs/glide';\r\n\r\nimport { markElementReady } from '@root/src/framework/scripts/helpers/element-ready';\r\nimport { scrollIntoView } from '~/framework/utils/scroll';\r\nimport { type App } from '~/app';\r\n\r\nimport { CLASS_NAME, OPTIONS } from './constants';\r\n\r\n// eslint-disable-next-line import/no-unassigned-import\r\nimport './multi-image-carousel.scss';\r\n\r\n\r\nexport const carousels = new Map();\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Multi Image Carousel Component');\r\n\r\n const listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]> = [];\r\n\r\n app.afterMount\r\n .then(() => setTimeout(() => {\r\n mountMultiImageCarousel(listeners)\r\n },200) )\r\n .catch((error: ErrorOptions) => {\r\n throw new Error('[Stockland FE] Unable to register Stockland Multi Image Carousel Component', error);\r\n });\r\n\r\n return () => {\r\n unMountMultiImageCarousel(listeners);\r\n\r\n app.logger.debug('[DXA] Horizontal Tab Bar Container Component destroyed');\r\n };\r\n}\r\n\r\nfunction unMountMultiImageCarousel(listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>) {\r\n for (const [element, event, listener] of listeners) {\r\n element.removeEventListener(event, listener);\r\n }\r\n}\r\n\r\n\r\nexport function mountMultiImageCarousel(listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>) {\r\n const elements = document.querySelectorAll(`.${CLASS_NAME}`);\r\n\r\n // Loop through and individually instantiate each Glide instance\r\n const updateDisableButtons = (element: HTMLElement, index: number) => {\r\n const navButtons = element.querySelectorAll('.article-button');\r\n const slides = element.querySelectorAll('.carousel__slide');\r\n if(!index) {\r\n for(const navButton of navButtons) {\r\n const button = navButton.querySelector('button')!;\r\n if(navButton.classList.contains('prev-article-button')) {\r\n navButton.classList.add('disabled')\r\n button.disabled = true;\r\n } else {\r\n navButton.classList.remove('disabled')\r\n button.disabled = false;\r\n }\r\n }\r\n } else if(index === slides.length - 1) {\r\n for(const navButton of navButtons) {\r\n const button = navButton.querySelector('button')!;\r\n if(navButton.classList.contains('next-article-button')) {\r\n navButton.classList.add('disabled')\r\n button.disabled = true;\r\n } else {\r\n navButton.classList.remove('disabled')\r\n button.disabled = false;\r\n }\r\n }\r\n } else {\r\n for(const navButton of navButtons) {\r\n navButton.classList.remove('disabled');\r\n const button = navButton.querySelector('button')!;\r\n button.disabled = false;\r\n }\r\n }\r\n }\r\n\r\n const initialiseMultiImageCarousel = (elements: NodeListOf) => {\r\n for (const [index, element] of elements.entries()) {\r\n\r\n const carouselId = element.dataset.carouselId ?? '';\r\n const indexClass = `${CLASS_NAME}-${carouselId}-${index}`;\r\n element.classList.add(indexClass);\r\n\r\n const existingGlides = carousels.get(indexClass) as Glide;\r\n if (existingGlides) {\r\n existingGlides.destroy();\r\n }\r\n \r\n //@ts-expect-error Types of property 'classes' are incompatible.\r\n const glide = new Glide(`.${indexClass}`, {\r\n ...OPTIONS,\r\n type: 'slider',\r\n perView: 1,\r\n gap: 32,\r\n autoplay: false,\r\n animationTimingFunc: 'cubic-bezier(0.25, 0.1, 0.25, 1)',\r\n swipeThreshold: false,\r\n dragThreshold: false\r\n\r\n });\r\n\r\n // On each slide click get the slide index and set it active\r\n for (const slides of element.querySelectorAll('.multi-image-carousel__slides')) {\r\n slides.addEventListener('click', function (e) {\r\n const slideNode = (e.target as HTMLElement).closest('.carousel__slide');\r\n // eslint-disable-next-line unicorn/prefer-dom-node-dataset, unicorn/prefer-number-properties\r\n const ind = Number(slideNode?.getAttribute('data-index'));\r\n if (ind === 0 || ind > 0) {\r\n // eslint-disable-next-line @typescript-eslint/restrict-plus-operands\r\n glide.go('=' + (ind - 1));\r\n }\r\n });\r\n }\r\n\r\n // Scrolls active tab into view when slide is active\r\n glide.on(['run'], function () {\r\n const slideNumber: number = glide.index;\r\n const tabs = element.querySelectorAll('.nav-link');\r\n for (const tab of tabs) {\r\n if(tab.dataset.glideDir == `=${slideNumber}`){\r\n scrollIntoView(tab, {\r\n behavior: 'smooth',\r\n inline: 'center',\r\n block: 'nearest'\r\n });\r\n }\r\n }\r\n\r\n updateDisableButtons(element, slideNumber);\r\n })\r\n\r\n glide.mount();\r\n updateDisableButtons(element, 0);\r\n\r\n carousels.set(indexClass, glide);\r\n\r\n markElementReady(element);\r\n\r\n }\r\n };\r\n\r\n initialiseMultiImageCarousel(elements);\r\n\r\n\r\n const destroyMultiImageCarousel = () => {\r\n // Destory each Glide instance to prevent memory leaks\r\n for (const [, glide] of carousels) {\r\n glide.destroy();\r\n }\r\n\r\n for (const [element, event, listener] of listeners) {\r\n element.removeEventListener(event, listener);\r\n }\r\n };\r\n\r\n return { elements, carousels, destroyMultiImageCarousel };\r\n}\r\n","// Dependencies\r\nimport Glide from '@glidejs/glide';\r\n\r\nimport { type App } from '~/app';\r\n\r\nimport './multi-image-inner-carousel.scss'\r\n\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Multi Image Inner Carousel Component');\r\n\r\n const listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]> = [];\r\n\r\n app.afterMount\r\n .then(() => {\r\n setTimeout(() => {\r\n mountMultiImageInnerCarousel(listeners);\r\n } , 300);\r\n\r\n })\r\n .catch((error: ErrorOptions | undefined) => {\r\n throw new Error('[Stockland FE] Unable to register Stockland Multi Image Inner Carousel Component', error);\r\n });\r\n\r\n return function destroyMultiImageInnerCarousel() {\r\n unMountMultiImageInnerCarousel(listeners);\r\n app.logger.debug('[DXA] Feature Links and Image component destroyed');\r\n };\r\n\r\n function mountMultiImageInnerCarousel(\r\n listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>,\r\n root: HTMLElement | null = null\r\n ) {\r\n let rootNode: Document | HTMLElement = document;\r\n if (root) rootNode = root;\r\n\r\n const carousels = rootNode.querySelectorAll('.multi-image-inner-carousel');\r\n\r\n const config = {\r\n type: 'slider',\r\n perView: 1.8,\r\n focusAt: 0,\r\n startAt: 0,\r\n gap: 24,\r\n peek: {\r\n before: 0,\r\n after: 0\r\n }\r\n ,\r\n breakpoints:{\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n 641: {\r\n perView: 1.4,\r\n focusAt: 0,\r\n gap: 8,\r\n peek: {\r\n before: 0,\r\n after: 0\r\n }\r\n },\r\n }\r\n\r\n }\r\n\r\n const debounce = (func:any, wait:any) => {\r\n let timeout: NodeJS.Timeout;\r\n return () => {\r\n // @ts-expect-error this is dependant on how the function is called\r\n const context = this;\r\n const args = arguments;\r\n const later = function() {\r\n func.apply(context, args);\r\n };\r\n\r\n clearTimeout(timeout);\r\n timeout = setTimeout(later, wait);\r\n };\r\n }\r\n\r\n carousels.forEach((carousel: Element) => {\r\n try {\r\n // @ts-expect-error Types of property 'type' are incompatible.\r\n const multiImageInnerCarouselGlide = new Glide(carousel as HTMLElement, config);\r\n\r\n multiImageInnerCarouselGlide.on(['mount.after', 'run.after', 'update'], function() {\r\n setTimeout(() => {\r\n setCounterPosition(carousel, multiImageInnerCarouselGlide.index);\r\n }, 0);\r\n });\r\n\r\n\r\n multiImageInnerCarouselGlide.mount();\r\n\r\n const handleRefresh = debounce(function() {\r\n if (multiImageInnerCarouselGlide){\r\n multiImageInnerCarouselGlide.update()\r\n }\r\n }, 250);\r\n\r\n window.addEventListener('resize', handleRefresh);\r\n\r\n listeners.push([window, 'resize', handleRefresh]);\r\n\r\n const button = document.querySelectorAll(\".nav-link\")\r\n\r\n for (const tabButton of button) {\r\n tabButton.addEventListener('click', handleRefresh)\r\n listeners.push([tabButton, 'click', handleRefresh])\r\n }\r\n\r\n\r\n } catch {\r\n console.info(\"Multi Image Inner Carousels does not exist, not mounting\");\r\n }\r\n });\r\n }\r\n\r\n\r\n function setCounterPosition(carousel: any, currentIndex: any) {\r\n const counter = carousel.parentElement?.querySelector('.slide-counter');\r\n\r\n if (counter) {\r\n const firstSlide = carousel.querySelector('.multi-image-inner-carousel .glide__slide[data-index=\"0\"]');\r\n const currentSlide = carousel.querySelector('.multi-image-inner-carousel .glide__slide.glide__slide--active');\r\n\r\n\r\n if (firstSlide && currentSlide) {\r\n const slideWidth = currentSlide.offsetWidth;\r\n const currentSlideRect = currentSlide.getBoundingClientRect();\r\n\r\n const leftPosition = currentSlideRect.left + (slideWidth / 3);\r\n\r\n counter.style.marginLeft = (leftPosition ) + 'px';\r\n counter.style.marginTop = `30px`;\r\n\r\n counter.querySelector('.current-slide').textContent = currentIndex + 1;\r\n }\r\n }\r\n }\r\n\r\n function unMountMultiImageInnerCarousel(\r\n listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>\r\n ) {\r\n for (const [element, event, listener] of listeners) {\r\n element.removeEventListener(event, listener);\r\n }\r\n }\r\n}\r\n","/**\r\n * Carousel Constant\r\n * @module patterns/components/carousels/carousel\r\n */\r\n\r\n/**\r\n * Options for the carousel.\r\n */\r\nexport const OPTIONS = {\r\n classes: {\r\n direction: {\r\n ltr: 'carousel--ltr',\r\n rtl: 'carousel--rtl',\r\n },\r\n slider: 'carousel--slider',\r\n carousel: 'carousel--carousel',\r\n swipeable: 'carousel--swipeable',\r\n dragging: 'carousel--dragging',\r\n cloneSlide: 'carousel--clone',\r\n activeNav: 'carousel__bullet--active',\r\n activeSlide: 'carousel__slide--active',\r\n disabledArrow: 'carousel--disabled',\r\n },\r\n};\r\n","/**\r\n * Carousel Component\r\n * @module patterns/components/carousels/carousel\r\n */\r\n\r\n// Dependencies\r\nimport Glide from '@glidejs/glide';\r\n\r\nimport { markElementReady } from '@root/src/framework/scripts/helpers/element-ready';\r\nimport { type App } from '~/app';\r\n\r\nimport { OPTIONS } from './constants';\r\n\r\n\r\nexport const carousels: Glide[] = [];\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Number Panels Carousel Component');\r\n\r\n app.afterMount\r\n .then(() => mountCarousel() )\r\n .catch((error) => {\r\n throw new Error('[Stockland FE] Unable to register Number Panels Component', error);\r\n });\r\n\r\n return () => {\r\n while(carousels.length > 0) {\r\n const c = carousels.pop();\r\n if (c) {\r\n c.destroy();\r\n }\r\n }\r\n\r\n app.logger.debug('[DXA] Number Panels Component destroyed');\r\n };\r\n}\r\n\r\n// Loop through and individually instantiate each Glide instance\r\nconst initialiseMultiImageCarousel = (element: HTMLElement, index: number): Glide => {\r\n const indexClass = `number-panels-carousel-${index}`;\r\n element.classList.add(indexClass);\r\n\r\n const setButtonStyling = (index: number) => {\r\n const buttons = document.querySelectorAll('.number-panels-carousel-button');\r\n const workplaceButtons = document.querySelectorAll('.number-panels-carousel-button-workplace');\r\n buttons.forEach((button: HTMLElement) => {\r\n if (button) {\r\n button.dataset.theme = 'btn--style-2';\r\n button.classList.remove('active');\r\n }\r\n });\r\n workplaceButtons.forEach((button: HTMLElement) => {\r\n if (button) {\r\n button.dataset.theme = 'btn--style-4';\r\n }\r\n });\r\n const button = document.getElementById(`number-panels-carousel-button-${index}`);\r\n const workplaceButton = document.getElementById(`number-panels-carousel-button-${index}-workplace`);\r\n if(button && workplaceButton) {\r\n button.dataset.theme = 'btn--style-1';\r\n button.classList.add('active');\r\n workplaceButton.dataset.theme = 'btn--style-1';\r\n }\r\n }\r\n\r\n // @ts-expect-error - Types of property 'classes' are incompatible.\r\n const glide = new Glide(`.${indexClass}`, {\r\n ...OPTIONS,\r\n type: 'slider',\r\n perView: 1,\r\n gap: 32,\r\n autoplay: false,\r\n animationDuration: 400,\r\n animationTimingFunc: 'cubic-bezier(0.25, 0.1, 0.25, 1)',\r\n peek: {\r\n before: 0,\r\n after: 300\r\n },\r\n breakpoints: {\r\n 550: {\r\n gap: 16,\r\n peek: {\r\n before: 0,\r\n after: 80\r\n }\r\n },\r\n 655: {\r\n gap: 24,\r\n peek: {\r\n before: 0,\r\n after: 150\r\n }\r\n },\r\n 768: {\r\n gap: 24,\r\n peek: {\r\n before: 0,\r\n after: 300\r\n }\r\n },\r\n 900: {\r\n gap: 24,\r\n peek: {\r\n before: 0,\r\n after: 24\r\n }\r\n },\r\n 1024: {\r\n gap: 24,\r\n peek: {\r\n before: 0,\r\n after: 100\r\n }\r\n },\r\n 1280: {\r\n gap: 24,\r\n peek: {\r\n before: 0,\r\n after: 200\r\n }\r\n },\r\n 1440: {\r\n gap: 24,\r\n peek: {\r\n before: 0,\r\n after: 300\r\n }\r\n },\r\n },\r\n });\r\n\r\n // // On each slide click get the slide index and set it active\r\n for (const slides of element.querySelectorAll('.number-panels-carousel__slides')) {\r\n slides.addEventListener('click', function (e) {\r\n const slideNode = (e.target as HTMLElement).closest('.carousel__slide');\r\n // eslint-disable-next-line unicorn/prefer-dom-node-dataset, unicorn/prefer-number-properties\r\n const ind = Number(slideNode?.getAttribute('data-index'));\r\n if (ind === 0 || ind > 0) {\r\n glide.go(`=${ind - 1}`);\r\n }\r\n });\r\n }\r\n\r\n // Scrolls active tab into view when slide is active\r\n glide.on(['run'], function () {\r\n setButtonStyling(glide.index);\r\n })\r\n\r\n glide.mount();\r\n\r\n setButtonStyling(0);\r\n\r\n markElementReady(element);\r\n\r\n return glide;\r\n};\r\n\r\nexport function mountCarousel() {\r\n const elements: NodeListOf = document.querySelectorAll(`.number-panels-carousel`);\r\n for (const [index, element] of elements.entries()) {\r\n carousels.push(initialiseMultiImageCarousel(element, index));\r\n }\r\n}","/**\r\n * Carousel Lazy Load\r\n * @module patterns/components/carousels/carousel\r\n */\r\n\r\n// Local Dependencies\r\nimport { type App } from '~/app';\r\n\r\nexport default function initialisePassiveCarousel(app: App) {\r\n\r\n let destroyCarousel = () => {};\r\n\r\n\r\n import(/* webpackChunkName: \"carousel\" */ './passive-carousel')\r\n .then(async ({ carousel }) => {\r\n await app.afterMount;\r\n\r\n const { elements, destroyCarousel: _destroyCarousel } = carousel();\r\n destroyCarousel = _destroyCarousel;\r\n\r\n // Notify the DOM that we've loaded\r\n for (const item of elements) {\r\n item.dataset.lazy = 'loaded';\r\n }\r\n })\r\n .catch((error) => {\r\n throw new Error('[Stockland FE] Unable to register Carousel component', error);\r\n });\r\n\r\n // Cleanup - `destroyCarousel` is updated at a later time, so we can't return it, but we can leverage closure to call it.\r\n\r\n return () => destroyCarousel();\r\n}\r\n","/* eslint-disable @typescript-eslint/naming-convention */\r\n\r\n/* global navigator */\r\n/* global document */\r\n/* global localStorage */\r\n\r\nimport { Firehose } from '@aws-sdk/client-firehose';\r\nimport { type CognitoIdentityCredentialProvider, fromCognitoIdentityPool } from '@aws-sdk/credential-providers';\r\n\r\nimport { type ClickstreamData } from './clickstream-interfaces';\r\n\r\nclass Clickstream {\r\n private readonly credentials: CognitoIdentityCredentialProvider;\r\n private readonly firehose: Firehose;\r\n private readonly deliveryStreamName: string;\r\n\r\n constructor(identityPoolId: string, bindArg: string, deliveryStreamName = \"WebsiteEvents\") {\r\n this.deliveryStreamName = deliveryStreamName;\r\n\r\n this.credentials = fromCognitoIdentityPool({\r\n clientConfig: { region: \"ap-southeast-2\" },\r\n identityPoolId: identityPoolId,\r\n });\r\n\r\n this.firehose = new Firehose({\r\n region: \"ap-southeast-2\",\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\r\n credentials: this.credentials\r\n });\r\n\r\n document.addEventListener(\"click\", async (e: MouseEvent) => {\r\n if ((e.target as HTMLElement)?.closest(bindArg))\r\n {\r\n const elem = e.target;\r\n const enc = new TextEncoder();\r\n\r\n try {\r\n await this.firehose.putRecord({\r\n Record: {\r\n Data: enc.encode(JSON.stringify(await this.getUserData(\"Click\", elem as HTMLElement, null)))\r\n },\r\n DeliveryStreamName: deliveryStreamName\r\n });\r\n } catch (error) {\r\n console.error(error);\r\n }\r\n }\r\n }, true);\r\n\r\n void this.visit();\r\n }\r\n\r\n getUserData = async (eventType: string, element: HTMLElement | null, additionaldata: unknown) => {\r\n let userIdentityId = localStorage.getItem(\"website-user-identity\");\r\n const credentials = await this.credentials();\r\n\r\n if (!userIdentityId) {\r\n localStorage.setItem(\"website-user-identity\", credentials.identityId)\r\n userIdentityId = localStorage.getItem(\"website-user-identity\");\r\n }\r\n\r\n const data: ClickstreamData = {\r\n IdentityId: userIdentityId!,\r\n AWSIdentityId: credentials.identityId,\r\n URL: location.href,\r\n Event: eventType,\r\n SitecoreId: \"\",\r\n Location: \"\",\r\n Browser: this.getBrowser(),\r\n DateTime: new Date().toISOString()\r\n };\r\n\r\n const salesforceId = this.getUrlParameter(\"sid\");\r\n\r\n if (salesforceId !== null) {\r\n data.SalesforceId = salesforceId;\r\n }\r\n\r\n if (navigator.userAgent) {\r\n data.UserAgent = navigator.userAgent;\r\n }\r\n\r\n if (additionaldata !== null) {\r\n data.AdditionalData = additionaldata;\r\n }\r\n\r\n data.Session = credentials.sessionToken;\r\n\r\n if (element) {\r\n data.Element = element.outerHTML;\r\n\r\n const href = element.getAttribute(\"href\");\r\n\r\n if (href) {\r\n data.Link = href;\r\n }\r\n }\r\n\r\n if (document.referrer) {\r\n data.Referrer = document.referrer;\r\n }\r\n\r\n const OSName = this.getOSName();\r\n if (OSName !== \"\") {\r\n data.OSPlatform = OSName;\r\n }\r\n\r\n return data;\r\n }\r\n\r\n getUrlParameter(name: string) {\r\n name = name.replace(/\\[/, \"\\\\[\").replace(/]/, \"\\\\]\");\r\n const regex = new RegExp(\"[\\\\?&]\" + name + \"=([^&#]*)\");\r\n const results = regex.exec(location.search);\r\n return results === null ? \"\" : decodeURIComponent(results[1].replaceAll('+', \" \"));\r\n }\r\n\r\n getBrowser() {\r\n const nAgt = navigator.userAgent;\r\n let browserName = navigator.appName;\r\n let fullVersion = \"\" + Number.parseFloat(navigator.appVersion);\r\n let nameOffset, verOffset, ix;\r\n\r\n // In Opera, the true version is after \"Opera\" or after \"Version\"\r\n if ((verOffset = nAgt.indexOf(\"Opera\")) != -1) {\r\n browserName = \"Opera\";\r\n fullVersion = nAgt.slice(Math.max(0, verOffset + 6));\r\n if ((verOffset = nAgt.indexOf(\"Version\")) != -1)\r\n fullVersion = nAgt.slice(Math.max(0, verOffset + 8));\r\n }\r\n // In MSIE, the true version is after \"MSIE\" in userAgent\r\n else if ((verOffset = nAgt.indexOf(\"MSIE\")) != -1) {\r\n browserName = \"Microsoft Internet Explorer\";\r\n fullVersion = nAgt.slice(Math.max(0, verOffset + 5));\r\n }\r\n // In Edge, the true version is after \"Edg\"\r\n else if ((verOffset = nAgt.indexOf(\"Edg\")) != -1) {\r\n browserName = \"Microsoft Edge\";\r\n fullVersion = nAgt.slice(Math.max(0, verOffset + 4));\r\n }\r\n // In Chrome, the true version is after \"Chrome\"\r\n else if ((verOffset = nAgt.indexOf(\"Chrome\")) != -1) {\r\n browserName = \"Chrome\";\r\n fullVersion = nAgt.slice(Math.max(0, verOffset + 7));\r\n }\r\n // In Safari, the true version is after \"Safari\" or after \"Version\"\r\n else if ((verOffset = nAgt.indexOf(\"Safari\")) != -1) {\r\n browserName = \"Safari\";\r\n fullVersion = nAgt.slice(Math.max(0, verOffset + 7));\r\n if ((verOffset = nAgt.indexOf(\"Version\")) != -1)\r\n fullVersion = nAgt.slice(Math.max(0, verOffset + 8));\r\n }\r\n // In Firefox, the true version is after \"Firefox\"\r\n else if ((verOffset = nAgt.indexOf(\"Firefox\")) != -1) {\r\n browserName = \"Firefox\";\r\n fullVersion = nAgt.slice(Math.max(0, verOffset + 8));\r\n }\r\n // In most other browsers, \"name/version\" is at the end of userAgent\r\n else if ((nameOffset = nAgt.lastIndexOf(\" \") + 1) <\r\n (verOffset = nAgt.lastIndexOf(\"/\"))) {\r\n browserName = nAgt.slice(nameOffset, verOffset);\r\n fullVersion = nAgt.slice(Math.max(0, verOffset + 1));\r\n if (browserName.toLowerCase() == browserName.toUpperCase()) {\r\n browserName = navigator.appName;\r\n }\r\n }\r\n\r\n // trim the fullVersion string at semicolon/space if present\r\n if ((ix = fullVersion.indexOf(\";\")) != -1)\r\n fullVersion = fullVersion.slice(0, Math.max(0, ix));\r\n if ((ix = fullVersion.indexOf(\" \")) != -1)\r\n fullVersion = fullVersion.slice(0, Math.max(0, ix));\r\n\r\n const majorVersion = Number.parseInt(\"\" + fullVersion, 10);\r\n if (Number.isNaN(majorVersion)) {\r\n fullVersion = \"\" + Number.parseFloat(navigator.appVersion);\r\n }\r\n\r\n return browserName + \" \" + fullVersion;\r\n };\r\n\r\n getOSName() {\r\n const OSName = navigator.platform;\r\n\r\n if (navigator.platform.includes(\"Win\")) return \"Windows\";\r\n if (navigator.platform.includes(\"Mac\")) return \"MacOS\";\r\n if (navigator.platform.includes(\"X11\")) return \"UNIX\";\r\n if (navigator.platform.includes(\"Linux armv7l\")) return \"Android\";\r\n if (navigator.platform.includes(\"Linux\")) return \"Linux\";\r\n if (navigator.platform.includes(\"Android\")) return \"Android\";\r\n\r\n return OSName;\r\n };\r\n\r\n async visit() {\r\n const enc = new TextEncoder();\r\n try {\r\n await this.firehose.putRecord({\r\n Record: {\r\n Data: enc.encode(JSON.stringify(await this.getUserData(\"Page Visit\", null, null)))\r\n },\r\n DeliveryStreamName: this.deliveryStreamName\r\n });\r\n } catch (error) {\r\n console.error(error);\r\n }\r\n }\r\n}\r\n\r\nexport { Clickstream }\r\n","\r\n\r\n","/**\r\n * Clickstream Component\r\n */\r\n\r\nimport { type App } from '~/app';\r\n\r\nimport ClickStream from './ClickStream.vue';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Clickstream Component');\r\n app.vueApp.component('click-stream', ClickStream);\r\n};\r\n\r\n","/**\r\n * Collapsed Form CTA Component\r\n * @module patterns/components/collapsed-form-cta\r\n */\r\n\r\nimport { isMobile } from '@root/src/framework/scripts/helpers/browser/media-query';\r\nimport { type App } from '~/app';\r\n\r\nimport { getMainEnquiryForm } from '../form-and-content/modal-form/modal-form';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Collapsed CTA Component');\r\n\r\n const listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]> = [];\r\n\r\n app.afterMount\r\n .then(() => {\r\n mountCollapsedFormCta(listeners);\r\n })\r\n .catch((error) => {\r\n throw new Error('[Stockland FE] Unable to register Stockland Collapsed Form CTA component', error);\r\n });\r\n\r\n return function destroyCollapsedFormCta() {\r\n unMountCollapsedFormCta(listeners);\r\n\r\n app.logger.debug('[DXA] Collapsed Form CTA component destroyed');\r\n };\r\n};\r\n\r\nfunction mountCollapsedFormCta(\r\n listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>\r\n) {\r\n const collapsedFormCta = document.querySelector('.collapsed-form-cta');\r\n\r\n if (collapsedFormCta) {\r\n const ctaHeadings = collapsedFormCta.querySelector('.collapsed-cta-headings');\r\n const ctaButton = collapsedFormCta.querySelector('.collapsed-cta-button');\r\n const form = collapsedFormCta.querySelector('.collapsed-form');\r\n const overlayGradient = collapsedFormCta.querySelector('.overlay-gradient');\r\n const imageContainer = collapsedFormCta.querySelector('.collapsed-form-container');\r\n const formContainer = collapsedFormCta.querySelector('.form-container');\r\n\r\n const showForm = () => {\r\n ctaHeadings?.classList.add('active');\r\n ctaButton?.classList.add('active');\r\n form?.classList.remove('hidden');\r\n overlayGradient?.classList.add('active');\r\n imageContainer?.classList.add('md:h-[810px]');\r\n formContainer?.classList.add('md:absolute', 'md:component-spacing-top-xl');\r\n\r\n if (isMobile()) {\r\n form?.scrollIntoView({ behavior: 'smooth' });\r\n }\r\n };\r\n\t\t\r\n if (ctaButton) {\r\n if (form) {\r\n ctaButton.addEventListener('click', showForm);\r\n listeners.push([ctaButton, 'click', showForm]);\r\n } else {\r\n const modalButton = getMainEnquiryForm();\r\n if (modalButton) {\r\n ctaButton.addEventListener('click', ()=>{modalButton.click()});\r\n listeners.push([ctaButton, 'click', ()=>{modalButton.click()}]);\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction unMountCollapsedFormCta(\r\n listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>\r\n) {\r\n for (const [element, event, listener] of listeners) {\r\n element.removeEventListener(event, listener);\r\n }\r\n}\r\n","/**\r\n * Community-Tiles-Listing Component\r\n */\r\n\r\nimport { App } from '~/app';\r\n\r\nimport { defineAsyncComponent } from 'vue';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Community-Tiles-Listing Component');\r\n app.vueApp.component('community-tiles-listing', defineAsyncComponent(async () => import(\"./CommunityTilesListing.vue\")));\r\n};\r\n","/**\r\n * Tiny MCE Links Utils\r\n */\r\n\r\n// Currently Tiny MCE does not support automatic class changes to existing buttons and links when editing buttons.js file. This script is meant to update existing links with new classes without the need to republish in the CMS editor.\r\n\r\nexport const updateLinkClasses = (component: HTMLElement | null = null) => {\r\n const tinyMceLinks = component?.querySelectorAll('[data-mce-button=\"true\"][data-theme=\"btn--style-6\"]')\r\n \r\n // Add classes in array as required\r\n const linkClassesArray = ['items-baseline']\r\n const linkTextClassesArray = ['underline', 'text-left']\r\n const linkIconClassesArray = ['relative', 'top-1']\r\n\r\n tinyMceLinks?.forEach((link) => {\r\n linkClassesArray.forEach((linkClass) => {\r\n link.classList.add(linkClass)\r\n });\r\n const linkTextEls = link.querySelectorAll('span')\r\n linkTextEls.forEach((span)=>{\r\n if (!span.children[0]?.classList.contains('icon')) {\r\n linkTextClassesArray.forEach((linkClass)=>{\r\n if (!span?.classList.contains(linkClass)) {\r\n span?.classList.add(linkClass) \r\n }\r\n })\r\n }else{\r\n linkIconClassesArray.forEach((linkClass)=>{\r\n if (!span?.classList.contains(linkClass)) {\r\n span?.classList.add(linkClass) \r\n }\r\n })\r\n }\r\n })\r\n })\r\n}\r\n","/* eslint-disable @typescript-eslint/ban-types */\r\n/**\r\n * Vertical Tab Bar Container Component\r\n * @module patterns/components/containers/vertical-tab-bar-container\r\n */\r\nimport { isMobile } from '@root/src/framework/scripts/helpers/browser/media-query';\r\nimport { scrollIntoView, scrollToCoord } from '@root/src/framework/scripts/utils/scroll';\r\nimport { updateLinkClasses } from '@root/src/framework/scripts/utils/tiny-mce-links';\r\nimport { App } from '~/app';\r\n\r\nfunction findParentWithFloatingIsland(element: HTMLElement | null): HTMLElement | null {\r\n if (!element) {\r\n\t return null;\r\n }\r\n \r\n if (element.classList.contains('floating-island')) {\r\n\t return element;\r\n }\r\n \r\n return findParentWithFloatingIsland(element.parentElement);\r\n}\r\n \r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Vertical Tab Bar Container Component');\r\n\r\n const listeners: Array<[Document | Element | Window | Document, string, EventListenerOrEventListenerObject]> = [];\r\n\r\n app.afterMount\r\n .then(() => {\r\n const verticalTabs = document.querySelectorAll('.vertical-tabs');\r\n const tabWrappers: NodeListOf = document.querySelectorAll('.vertical-tab-buttons');\r\n\t\t\t\r\n let isStuck = false;\r\n\r\n tabWrappers.forEach((tabWrapper: HTMLElement) => {\r\n window.addEventListener('scroll', () => {\r\n const tabWrapperBoundingRect = tabWrapper.getBoundingClientRect();\r\n const tabWrapperTopOffset = tabWrapperBoundingRect.y;\r\n const screenSize = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;\r\n if (!isStuck && tabWrapperTopOffset <= 150 && screenSize >768 && findParentWithFloatingIsland(tabWrapper)) {\r\n isStuck = true;\r\n tabWrapper.classList.add('stuck');\r\n } else if (isStuck && tabWrapperTopOffset > 150) {\r\n isStuck = false;\r\n tabWrapper.classList.remove('stuck');\r\n }\r\n });\r\n })\r\n\t\t\t\r\n for (const verticalTab of verticalTabs) {\r\n updateLinkClasses(verticalTab)\r\n // eslint-disable-next-line @typescript-eslint/no-loop-func\r\n const scrollToContentTop = (event: Event) => {\r\n if (event.target instanceof Element) {\r\n if (isMobile()) {\r\n // On mobile the tabs stack on top of the content, thus the go-to point changes\r\n const tabWrapper = verticalTab?.querySelector('.vertical-tab-buttons');\r\n\r\n if (!tabWrapper) return;\r\n\r\n // Scroll to bottom of vertical tab buttons\r\n const rect = tabWrapper.getBoundingClientRect();\r\n const top = rect.bottom + window.scrollY;\r\n scrollToCoord(top);\r\n } else {\r\n // \"auto\" used due to issues with the delay when content is faded into view\r\n // \"auto\" used due to issues with the delay when content is faded into view\r\n const headerOffset = 25;\r\n const elementPosition = verticalTab?.getBoundingClientRect();\r\n const topOffset = elementPosition?.top ?? 0;\r\n const offsetPosition = topOffset + window.pageYOffset - headerOffset;\r\n\r\n window.scrollTo({\r\n top: offsetPosition,\r\n behavior: 'auto',\r\n });\r\n }\r\n }\r\n };\r\n\r\n const tabs = verticalTab.querySelectorAll('.nav-link');\r\n for (const tab of tabs) {\r\n tab.addEventListener('click', scrollToContentTop);\r\n listeners.push([tab, 'click', scrollToContentTop]);\r\n }\r\n }\r\n })\r\n .catch((error) => {\r\n throw new Error('[Stockland FE] Unable to register Stockland Vertical Tab Bar Container Component', error);\r\n });\r\n\r\n\r\n return function destroyVerticalScrollCarousel() {\r\n for (const [element, event, listener] of listeners) {\r\n element.removeEventListener(event, listener);\r\n }\r\n\r\n app.logger.debug('[DXA] Vertical Tab Bar Container Component destroyed');\r\n };\r\n};\r\n","/**\r\n * Content Container Component\r\n * @module patterns/components/containers/content-container\r\n */\r\n\r\nimport { App } from '~/app';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Content Container Component');\r\n\r\n const listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]> = [];\r\n\r\n app.afterMount\r\n .then(() => {\r\n mountContentContainer(listeners);\r\n })\r\n .catch((error) => {\r\n throw new Error('[Stockland FE] Unable to register Stockland Content Container component', error);\r\n });\r\n\r\n return function destroyContentContainer() {\r\n unMountContentContainer(listeners);\r\n\r\n app.logger.debug('[DXA] Content Container component destroyed');\r\n };\r\n};\r\n\r\n// Extracted method for logic reuse within other component\r\nexport function mountContentContainer(\r\n listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>,\r\n root: HTMLElement | null = null\r\n) {\r\n let rootNode: Document | HTMLElement = document;\r\n if (root) rootNode = root;\r\n\r\n const contentContainers = rootNode.querySelectorAll('.content-container-component');\r\n\r\n for (const contentContainer of contentContainers) {\r\n const stickyCol2 = contentContainer.querySelector('.sticky-col2');\r\n\r\n // Check if the content container is within a Floating Island and update column 2 top position accordinginly\r\n if (stickyCol2?.closest('.floating-island') && stickyCol2?.classList.contains('md:top-24')) {\r\n stickyCol2.classList.remove('md:top-24');\r\n stickyCol2.classList.add('md:top-48');\r\n }\r\n }\r\n}\r\n\r\nexport function unMountContentContainer(\r\n listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>\r\n) {\r\n for (const [element, event, listener] of listeners) {\r\n element.removeEventListener(event, listener);\r\n }\r\n}\r\n","import { scrollIntoView } from '~/framework/utils/scroll';\r\nimport { App } from '~/app';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Horizontal Tab Bar Container Component');\r\n\r\n const listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]> = [];\r\n\r\n app.afterMount\r\n .then(() => mountHorizontalTabBarContainer(listeners))\r\n .catch((error) => {\r\n throw new Error('[Stockland FE] Unable to register Stockland Horizontal Tab Bar Container Component', error);\r\n });\r\n\r\n return () => {\r\n unmountVerticalScrollCarousel(listeners);\r\n\r\n app.logger.debug('[DXA] Horizontal Tab Bar Container Component destroyed');\r\n };\r\n}\r\n\r\nfunction mountHorizontalTabBarContainer(listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>) {\r\n const horizontalTabs = document.querySelectorAll('.horizontal-tab-buttons');\r\n\r\n for (const horizontalTab of horizontalTabs) {\r\n // eslint-disable-next-line @typescript-eslint/no-loop-func,unicorn/consistent-function-scoping\r\n const scrollTabIntoView = (event: Event) => {\r\n if (event.target instanceof Element) {\r\n scrollIntoView(event.target, {\r\n behavior: 'smooth',\r\n inline: 'center',\r\n block: 'nearest'\r\n });\r\n }\r\n };\r\n\r\n const tabs = horizontalTab.querySelectorAll('.nav-link');\r\n for (const tab of tabs) {\r\n tab.addEventListener('click', scrollTabIntoView);\r\n listeners.push([tab, 'click', scrollTabIntoView]);\r\n }\r\n }\r\n}\r\n\r\nfunction unmountVerticalScrollCarousel(listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>) {\r\n for (const [element, event, listener] of listeners) {\r\n element.removeEventListener(event, listener);\r\n }\r\n}","/**\r\n * Carousel Component\r\n * @module patterns/components/banners/asset-hero-banner\r\n */\r\n\r\nimport { type App } from '~/app';\r\n\r\nimport { scrollToCoord } from \"../../../../framework/scripts/utils/scroll\";\r\nimport JsController from '../../js-controller';\r\n\r\nexport default (app: App) => {\r\n\r\n const controller = new JsController(app, 'Asset Hero');\r\n controller.addMountFunction(() => {\r\n mountVerticalScrollTab(controller);\r\n })\r\n\r\n return controller.init();\r\n}\r\n\r\nexport function mountVerticalScrollTab( controller: JsController ) {\r\n const verticalTabScrolls = document.querySelectorAll(`.vertical-tab-scroll`);\r\n const navigation = document.querySelector('.navigation');\r\n const navigationHeight = navigation ? navigation.clientHeight : 0;\r\n\r\n for(const verticalTabScroll of verticalTabScrolls) {\r\n const innerTabs = verticalTabScroll.querySelectorAll(`.vertical-scroll-inner-tab`);\r\n verticalTabScroll.querySelector(`#verticalScrollSticky`)!.style.top = `${navigationHeight + 15}px`;\r\n\r\n for (const innerTab of innerTabs) {\r\n const scroll = (event: Event) => {\r\n const target = event.currentTarget as HTMLElement;\r\n setTimeout(() => {\r\n const coords = target.getBoundingClientRect().top + window.scrollY\r\n scrollToCoord(coords, (navigationHeight - 2))\r\n }, 400);\r\n }\r\n\r\n controller.addListener(innerTab, \"click\", scroll)\r\n }\r\n }\r\n}\r\n","/**\r\n * Carousel Component\r\n * @module patterns/components/banners/asset-hero-banner\r\n */\r\n\r\nimport { type App } from '~/app';\r\n\r\nimport { scrollToCoord } from \"../../../../framework/scripts/utils/scroll\";\r\nimport JsController from '../../js-controller';\r\n\r\nexport default (app: App) => {\r\n\r\n const controller = new JsController(app, 'Asset Hero');\r\n controller.addMountFunction(() => {\r\n mountVerticalVideoTab(controller);\r\n })\r\n\r\n return controller.init();\r\n}\r\n\r\nexport function mountVerticalVideoTab( controller: JsController ) {\r\n const verticalTabScrolls = document.querySelectorAll(`.vertical-tab-video`);\r\n const navigation = document.querySelector('.navigation');\r\n const navigationHeight = navigation ? navigation.clientHeight : 0;\r\n\r\n for(const verticalTabScroll of verticalTabScrolls) {\r\n // Inner tabs\r\n const innerTabs = verticalTabScroll.querySelectorAll(`.vertical-video-inner-tab`);\r\n verticalTabScroll.querySelector(`#verticalVideoSticky`)!.style.top = `${navigationHeight + 15}px`;\r\n\r\n for (const innerTab of innerTabs) {\r\n const scroll = (event: Event) => {\r\n const target = event.currentTarget as HTMLElement;\r\n setTimeout(() => {\r\n const coords = target.getBoundingClientRect().top + window.scrollY\r\n scrollToCoord(coords, (navigationHeight - 2))\r\n }, 400);\r\n }\r\n\r\n controller.addListener(innerTab, \"click\", scroll)\r\n }\r\n }\r\n}\r\n","/**\r\n * Carousel Component\r\n * @module patterns/components/banners/asset-hero-banner\r\n */\r\n\r\nimport { type App } from '~/app';\r\n\r\nimport JsController from '../js-controller';\r\n\r\n\r\nexport default (app: App) => {\r\n\r\n const controller = new JsController(app, 'Event Details');\r\n controller.addMountFunction(() => {\r\n mountEventDetailsComponent(controller);\r\n })\r\n\r\n return controller.init();\r\n}\r\n\r\nexport function mountEventDetailsComponent( controller: JsController ) {\r\n const eventDetails = document.querySelectorAll('.event-details')\r\n for(const eventDetail of eventDetails){\r\n\r\n const readMoreButton = eventDetail.querySelector('.read-more-button')\r\n const readLessButton = eventDetail.querySelector('.read-less-button')\r\n const eventIntroduction = eventDetail.querySelector('.event-introduction')\r\n\r\n\r\n\r\n if(readMoreButton && eventIntroduction && readLessButton){\r\n if(eventIntroduction?.clientHeight < 200){\r\n readMoreButton?.classList.add('hidden')\r\n eventIntroduction.classList.add('no-after','mb-9')\r\n }\r\n\r\n const expandText = () => {\r\n readMoreButton.classList.add('hidden')\r\n readLessButton.classList.remove('hidden')\r\n\r\n if (eventIntroduction.classList.contains('max-h-[200px]')) {\r\n eventIntroduction.classList.remove('max-h-[200px]')\r\n }\r\n else {\r\n eventIntroduction.classList.add('max-h-full') \r\n }\r\n\r\n eventIntroduction.classList.add('mb-9')\r\n eventIntroduction.classList.add('no-after')\r\n }\r\n\r\n const collapseText = () => {\r\n readLessButton.classList.add('hidden')\r\n readMoreButton.classList.remove('hidden')\r\n\r\n if (eventIntroduction.classList.contains('max-h-[200px]')) {\r\n eventIntroduction.classList.remove('max-h-full') \r\n }\r\n else {\r\n eventIntroduction.classList.add('max-h-[200px]')\r\n }\r\n\r\n eventIntroduction.classList.remove('mb-9')\r\n\r\n eventIntroduction.classList.remove('no-after')\r\n }\r\n \r\n controller.addListener(readMoreButton, \"click\", expandText)\r\n controller.addListener(readLessButton, \"click\", collapseText)\r\n }\r\n }\r\n}\r\n","/**\r\n * Carousel Component\r\n * @module patterns/components/banners/asset-hero-banner\r\n */\r\n\r\nimport { type App } from '~/app';\r\n\r\nimport JsController from '../../js-controller';\r\n\r\nexport default (app: App) => {\r\n\r\n const controller = new JsController(app, 'recipe-body');\r\n controller.addMountFunction(() => {\r\n mountComponent(controller);\r\n })\r\n\r\n return controller.init();\r\n}\r\n\r\nexport function mountComponent( controller: JsController ) {\r\n const isMobileScreen = window.innerWidth <= 768 ? true : false;\r\n if(isMobileScreen){\r\n const recipeDetail = document.querySelector('.recipe-detail')\r\n const teaserTexts = recipeDetail?.querySelectorAll('.teaser-text')\r\n if(teaserTexts && teaserTexts.length>0){\r\n for(const currentTeaserText of teaserTexts){\r\n const readMoreButton = currentTeaserText.querySelector('.read-more-button')\r\n const readLessButton = currentTeaserText.querySelector('.read-less-button')\r\n const bodyText = currentTeaserText.querySelector('.body-text')\r\n if(readMoreButton && readLessButton && bodyText){\r\n //If the text is overflowing\r\n if(bodyText.scrollHeight {\r\n if(!readMoreButton.classList.contains(\"hidden\"))\r\n {\r\n readMoreButton.classList.add('hidden')\r\n }\r\n\r\n if(readLessButton.classList.contains(\"hidden\"))\r\n {\r\n readLessButton.classList.remove('hidden')\r\n }\r\n\r\n if(!bodyText.classList.contains(\"!max-h-[unset]\")){\r\n bodyText?.classList.add(\"!max-h-[unset]\");\r\n }\r\n\r\n if(bodyText.classList.contains(\"bottom-fade-mask\")){\r\n bodyText.classList.remove(\"bottom-fade-mask\");\r\n }\r\n }\r\n\r\n const hideFullText=()=>{\r\n\r\n if(readMoreButton.classList.contains(\"hidden\"))\r\n {\r\n readMoreButton.classList.remove('hidden')\r\n }\r\n\r\n if(!readLessButton.classList.contains(\"hidden\"))\r\n {\r\n readLessButton.classList.add('hidden')\r\n }\r\n\r\n if(bodyText.classList.contains(\"!max-h-[unset]\")){\r\n bodyText?.classList.remove(\"!max-h-[unset]\");\r\n }\r\n \r\n if(!bodyText.classList.contains(\"bottom-fade-mask\")){\r\n bodyText.classList.add(\"bottom-fade-mask\");\r\n }\r\n }\r\n\r\n controller.addListener(readMoreButton, \"click\", showFullText)\r\n controller.addListener(readLessButton, \"click\", hideFullText)\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","/**\r\n * Search Experiment\r\n */\r\nimport { App } from '~/app';\r\n\r\n// import SearchAutocomplete from './SearchAutocomplete.vue';\r\n// import SearchFilters from './SearchFilters.vue';\r\n// import SearchListing from './SearchListing.vue';\r\n// import SearchPagination from './SearchPagination.vue';\r\n// import SearchQuery from './SearchQuery.vue';\r\n// import SearchSorting from './SearchSorting.vue';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Search Experiment Component');\r\n\r\n\t // These Vue components are not used - commenting out to prevent compilation in the completed bundle\r\n\t // app.vueApp.component('search-autocomplete-experiment', SearchAutocomplete);\r\n\t // app.vueApp.component('search-filters-experiment', SearchFilters);\r\n\t // app.vueApp.component('search-listing-experiment', SearchListing);\r\n\t // app.vueApp.component('search-pagination-experiment', SearchPagination);\r\n\t // app.vueApp.component('search-query-experiment', SearchQuery);\r\n\t // app.vueApp.component('search-sorting-experiment', SearchSorting);\r\n};\r\n","/**\r\n * Vue Example\r\n */\r\n\r\nimport { App } from '~/app';\r\n\r\nimport { defineAsyncComponent } from 'vue';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Vue Example Component');\r\n\r\n // These Vue components are not used - commenting out to prevent compilation in the completed bundle\r\n app.vueApp.component('stockland-vue-example', defineAsyncComponent(async () => import(\"./StocklandVueExample.vue\")));\r\n};\r\n","/**\r\n * AmenityList Component\r\n */\r\n\r\nimport { defineAsyncComponent } from 'vue';\r\n\r\nimport { type App } from '~/app';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Facilities Filters Component');\r\n app.vueApp.component('facilities-filters', defineAsyncComponent(async () => import(\"./FacilitiesFilters.vue\")));\r\n};\r\n","import { isMobile } from '~/framework/helpers/browser/media-query';\r\nimport { scrollToCoord } from '~/framework/utils/scroll';\r\nimport { type App } from '~/app';\r\n\r\n\r\nexport default (app: App) => { \r\n app.logger.debug('[Stockland FE] Initialise Stockland Feature Links and Image Component');\r\n\r\n const listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]> = [];\r\n\r\n app.afterMount\r\n .then(() => {\r\n setTimeout(() =>{\r\n mountFeatureLinksAndImages(listeners)\r\n }, 300)\r\n })\r\n .catch((error) => {\r\n throw new Error('[Stockland FE] Unable to register Stockland Feature Links and Image component', error);\r\n });\r\n\r\n return function destroyFreeTextQuickLinks() {\r\n unMountFeatureLinksAndImages(listeners)\r\n\r\n app.logger.debug('[DXA] Feature Links and Image component destroyed');\r\n };\r\n\r\n\r\n function mountFeatureLinksAndImages(\r\n listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>,\r\n root: HTMLElement | null = null) {\r\n let rootNode: Document | HTMLElement = document;\r\n if (root) rootNode = root;\r\n\r\n const featuredLinks = rootNode.querySelectorAll(\".feature-link-image-parent\");\r\n\r\n for (const featuredLinkBlock of featuredLinks) {\r\n const buTitles = featuredLinkBlock.querySelectorAll(\".bu-title-2\");\r\n const scrollAnchor = featuredLinkBlock.querySelector(\".overlap-elements-mobile-scroll-anchor\");\r\n\r\n const buTitleClick = (buTitlesParameter:NodeListOf, eventTarget: EventTarget | undefined, scroll: boolean) => {\r\n const currentTitle = eventTarget as HTMLElement;\r\n\r\n if(!currentTitle.classList.contains('active-link')) {\r\n for (const buTitle of buTitlesParameter){\r\n // Unset all active links\r\n buTitle.classList.remove('active-link');\r\n }\r\n\r\n currentTitle.classList.add('active-link')\r\n\r\n const textDivs = featuredLinkBlock.querySelectorAll('.text-div')\r\n const buButtonDivs = featuredLinkBlock.querySelectorAll('.bu-button-div-2')\r\n const buVideos = featuredLinkBlock.querySelectorAll('.video-player')\r\n \r\n const buImages = featuredLinkBlock.querySelectorAll('.bu-image-2')\r\n \r\n \r\n\t\t\t\t\t\r\n for(const buButtonDiv of buButtonDivs){\r\n if (buButtonDiv.classList.contains('active')){\r\n buButtonDiv.classList.remove('active');\r\n \r\n }\r\n }\r\n\r\n for(const textDiv of textDivs){\r\n if (textDiv.classList.contains('active')){\r\n textDiv.classList.remove('active');\r\n }\r\n }\r\n\r\n for(const buImage of buImages){\r\n if (buImage.classList.contains('active')){\r\n buImage.classList.remove('active');\r\n }\r\n }\r\n\r\n for(const buVideo of buVideos){\r\n buVideo.pause();\r\n }\r\n\r\n const currentId = Number.parseInt((/\\d+/.exec(currentTitle?.id))?.[0] ?? \"0\");\r\n\r\n textDivs[currentId].classList.add('active')\r\n buButtonDivs[currentId].classList.add('active')\r\n \r\n // No bu images for this component\r\n if(buImages.length > 0 && buImages[currentId]) {\r\n buImages[currentId].classList.add('active')\r\n }\r\n\r\n // Assuming all are videos\r\n if(buVideos.length > 0 && buVideos[currentId]) {\r\n void buVideos[currentId].play();\r\n }\r\n }\r\n\r\n if(!currentTitle.classList.contains('active-accordion')){\r\n for (const buTitle of buTitlesParameter){\r\n // Unset all active accordions\r\n buTitle.classList.remove('active-accordion');\r\n \r\n }\r\n\r\n currentTitle.classList.add('active-accordion');\r\n \r\n const buButtonDivs2 = featuredLinkBlock.querySelectorAll('.bu-button-div-2')\r\n const accordionBodys = featuredLinkBlock.querySelectorAll('.text-div')\r\n for(const accordionBody of accordionBodys ){\r\n if (accordionBody.classList.contains('active-accordion-body')){\r\n accordionBody.classList.remove('active-accordion-body');\r\n accordionBody.style.maxHeight = \"0px\";\r\n \r\n }\r\n }\r\n\r\n for(const buButtonDiv2 of buButtonDivs2){\r\n if (buButtonDiv2.classList.contains('active')){\r\n buButtonDiv2.classList.remove('active');\r\n }\r\n }\r\n\r\n\r\n const currentId = Number.parseInt((/\\d+/.exec(currentTitle?.id))?.[0] ?? \"0\");\r\n if(buButtonDivs2.length > 0 && buButtonDivs2[currentId]) {\r\n buButtonDivs2[currentId].classList.add('active')\r\n }\r\n\t\t\t\t\t\r\n if(accordionBodys.length > 0 && accordionBodys[currentId]) {\r\n accordionBodys[currentId].classList.add('active-accordion-body');\r\n\t\r\n const currentAccordionBody = accordionBodys[currentId];\r\n\t\t\t\t\t\t\r\n if (currentAccordionBody.classList.contains(\"active-accordion-body\")){\r\n const divHeight = currentAccordionBody.scrollHeight + 48;\r\n currentAccordionBody.style.maxHeight = `${divHeight}px`;\r\n }\r\n else {\r\n currentAccordionBody.style.maxHeight = \"0px\";\r\n }\r\n }\r\n }\r\n\r\n\r\n if (scroll && isMobile() && scrollAnchor) {\r\n const rect = scrollAnchor.getBoundingClientRect();\r\n const top = rect.top + window.scrollY;\r\n scrollToCoord(top);\r\n }\r\n }\r\n\t\t\r\n for (const buTitle of buTitles) {\r\n buTitle.addEventListener('click', (event: Event) => buTitleClick(buTitles, event.target!, true));\r\n listeners.push([buTitle, \"click\", (event: Event) => buTitleClick(buTitles, event.target!, true)])\r\n\r\n if (buTitle.innerHTML == buTitles[0].innerHTML) {\r\n // Piggy back on our click events to make the first item visible\r\n buTitleClick(buTitles, buTitle, false)\r\n }\r\n }\r\n }\r\n }\r\n\r\n\r\n function unMountFeatureLinksAndImages(\r\n listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>\r\n ) {\r\n for (const [element, event, listener] of listeners) {\r\n element.removeEventListener(event, listener);\r\n }\r\n }\r\n}","import { App } from '~/app';\r\nimport { isMobile } from '~/framework/helpers/browser/media-query';\r\nimport { scrollToCoord } from '~/framework/utils/scroll';\r\n\r\n\r\nexport default (app: App) => { \r\n app.logger.debug('[Stockland FE] Initialise Stockland Feature Links and Image Component');\r\n\r\n const listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]> = [];\r\n\r\n app.afterMount\r\n .then(() => {\r\n setTimeout(() =>{\r\n mountFeatureLinksAndImages(listeners)\r\n }, 300)\r\n })\r\n .catch((error) => {\r\n throw new Error('[Stockland FE] Unable to register Stockland Feature Links and Image component', error);\r\n });\r\n\r\n return function destroyFreeTextQuickLinks() {\r\n unMountFeatureLinksAndImages(listeners)\r\n\r\n app.logger.debug('[DXA] Feature Links and Image component destroyed');\r\n };\r\n\r\n\r\n function mountFeatureLinksAndImages(\r\n listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>,\r\n root: HTMLElement | null = null) {\r\n let rootNode: Document | HTMLElement = document;\r\n if (root) rootNode = root;\r\n\r\n const featuredLinks = rootNode.querySelectorAll(\".feature-link-image-parent\");\r\n\r\n for (const featuredLinkBlock of featuredLinks) {\r\n const buTitles = featuredLinkBlock.querySelectorAll(\".bu-title\");\r\n const scrollAnchor = featuredLinkBlock.querySelector(\".overlap-elements-mobile-scroll-anchor\");\r\n\r\n const buTitleClick = (buTitlesParameter:NodeListOf, eventTarget: EventTarget | undefined, scroll: boolean) => {\r\n const currentTitle = eventTarget as HTMLElement;\r\n\r\n if(!currentTitle.classList.contains('active-link')) {\r\n for (const buTitle of buTitlesParameter){\r\n // Unset all active links\r\n buTitle.classList.remove('active-link');\r\n }\r\n\r\n currentTitle.classList.add('active-link')\r\n\r\n const textDivs = featuredLinkBlock.querySelectorAll('.text-div')\r\n const buButtonDivs = featuredLinkBlock.querySelectorAll('.bu-button-div')\r\n const buImages = featuredLinkBlock.querySelectorAll('.bu-image')\r\n\t\t\t\t\t\r\n for(const buButtonDiv of buButtonDivs){\r\n if (buButtonDiv.classList.contains('active')){\r\n buButtonDiv.classList.remove('active');\r\n }\r\n }\r\n\r\n for(const textDiv of textDivs){\r\n if (textDiv.classList.contains('active')){\r\n textDiv.classList.remove('active');\r\n }\r\n }\r\n\r\n for(const buImage of buImages){\r\n if (buImage.classList.contains('active')){\r\n buImage.classList.remove('active');\r\n }\r\n }\r\n\r\n const currentId = Number.parseInt((/\\d+/.exec(currentTitle?.id))?.[0] ?? \"0\");\r\n\r\n textDivs[currentId].classList.add('active')\r\n buButtonDivs[currentId].classList.add('active')\r\n buImages[currentId].classList.add('active')\r\n }\r\n\r\n if (scroll && isMobile() && scrollAnchor) {\r\n const rect = scrollAnchor.getBoundingClientRect();\r\n const top = rect.top + window.scrollY;\r\n scrollToCoord(top);\r\n }\r\n }\r\n\t\t\r\n\t\r\n for (const buTitle of buTitles) {\r\n buTitle.addEventListener('click', (event: Event) => buTitleClick(buTitles, event.target!, true));\r\n listeners.push([buTitle, \"click\", (event: Event) => buTitleClick(buTitles, event.target!, true)])\r\n\r\n if (buTitle.innerHTML == buTitles[0].innerHTML) {\r\n // Piggy back on our click events to make the first item visible\r\n buTitleClick(buTitles, buTitle, false)\r\n }\r\n }\r\n }\r\n }\r\n\r\n\r\n function unMountFeatureLinksAndImages(\r\n listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>\r\n ) {\r\n for (const [element, event, listener] of listeners) {\r\n element.removeEventListener(event, listener);\r\n }\r\n }\r\n}","/**\r\n * Feature Statement Event Component\r\n * @module patterns/components/feature-statement/event\r\n */\r\n\r\nimport { associateResponseWithForm } from '~/framework/utils/forms';\r\nimport { App } from '~/app';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Feature Statement Event Component');\r\n\r\n app.afterMount\r\n .then(() => {\r\n const eventFeatures = document.querySelectorAll('.featured-content');\r\n\r\n if (eventFeatures) {\r\n for (const feature of eventFeatures) {\r\n // Same as in EventCard.vue, we need to associate the form response with the singleton form\r\n\r\n const modalButton = feature.querySelector('.modal-button');\r\n if (!modalButton) return;\r\n\r\n const selector = modalButton.dataset.bsTarget ?? '';\r\n const instanceId = modalButton.dataset.instanceId ?? '';\r\n const token = modalButton.dataset.token ?? '';\r\n\r\n associateResponseWithForm(selector, instanceId, token);\r\n }\r\n }\r\n })\r\n .catch((error) => {\r\n throw new Error('[Stockland FE] Unable to register Stockland Feature Statement Event component', error);\r\n });\r\n}\r\n","/* eslint-disable unicorn/consistent-function-scoping,@typescript-eslint/naming-convention */\r\n/* eslint-disable unicorn/prefer-dom-node-dataset */\r\n// Dependencies\r\nimport Glide from '@glidejs/glide';\r\n\r\nimport { type App } from '~/app';\r\n\r\nimport './featured-carousel.scss';\r\n\r\nexport const carousels: Glide[] = [];\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Featured Carousel Component');\r\n\r\n app.afterMount\r\n .then(() => {\r\n mountFeaturedCarousel()\r\n })\r\n .catch((error: ErrorOptions | undefined) => {\r\n throw new Error('[Stockland FE] Unable to register Stockland Featured Carousel component', error);\r\n });\r\n\r\n return function destroyFeaturedCarousel() {\r\n while (carousels.length > 0) {\r\n const c = carousels.pop();\r\n if (c) {\r\n c.destroy();\r\n }\r\n }\r\n\r\n app.logger.debug('[DXA] Feature Links and Image component destroyed');\r\n };\r\n\r\n\r\n function mountFeaturedCarousel(\r\n root?: HTMLElement | undefined) {\r\n let rootNode: Document | HTMLElement = document;\r\n if (root) rootNode = root;\r\n\r\n const isMobile = window.matchMedia(\"(max-width: 1024px)\").matches;\r\n\r\n var config;\r\n if (document.querySelectorAll('.feature-card-carousel').length) {\r\n config = {\r\n type: 'carousel',\r\n perView: 2.5,\r\n focusAt: 1,\r\n startAt: isMobile ? 0 : 1,\r\n gap: 0,\r\n peek: {\r\n before: 0,\r\n after: 0\r\n },\r\n breakpoints:{\r\n 550: {\r\n focusAt: \"center\",\r\n perView: 1.4,\r\n gap: 4,\r\n },\r\n 1024: {\r\n focusAt: \"center\",\r\n perView: 2,\r\n gap: 4,\r\n },\r\n 1441: {\r\n focusAt: 1,\r\n perView: 2.5,\r\n gap: 4,\r\n }\r\n }\r\n }\r\n } else {\r\n config = {\r\n type: 'carousel',\r\n perView: 3,\r\n focusAt: 1,\r\n startAt: isMobile ? 0 : 1,\r\n gap: 0,\r\n peek: {\r\n before: 0,\r\n after: 0\r\n },\r\n breakpoints:{\r\n 1441:{\r\n perView: 2,\r\n focusAt: \"center\",\r\n peek: {\r\n before: 0,\r\n after: 280\r\n }\r\n },\r\n 1281:{\r\n perView: 1.6,\r\n focusAt: \"center\",\r\n peek: {\r\n before: 0,\r\n after: 200\r\n }\r\n },\r\n 1024: {\r\n perView: 2,\r\n focusAt: \"center\",\r\n peek: {\r\n before: 0,\r\n after: 0\r\n }\r\n },\r\n 970: {\r\n perView: 1.6,\r\n focusAt: \"center\",\r\n peek: {\r\n before: 0,\r\n after: 0\r\n }\r\n },\r\n 768:{\r\n perView: 1.6,\r\n focusAt: 0,\r\n gap: 4,\r\n peek: {\r\n before: 0,\r\n after: 0\r\n }\r\n\r\n },\r\n 550: {\r\n perView: 1.4,\r\n focusAt: 0,\r\n gap: 4,\r\n peek: {\r\n before: 0,\r\n after: 0\r\n }\r\n }\r\n }\r\n }\r\n }\r\n const carouselElements = document.querySelectorAll('.featured-carousel');\r\n if(carouselElements && carouselElements.length > 0) {\r\n // @ts-expect-error - Types of property 'type' are incompatible\r\n const featuredCarouselGlide = new Glide(\".featured-carousel\", config);\r\n featuredCarouselGlide.on(['mount.after', 'move'], () => {\r\n // Remove custom active class from all slides\r\n for (const slide of document.querySelectorAll('.glide__slide')) slide.classList.remove('glide__slide--active--custom');\r\n\r\n // Add the custom active class to the current slide\r\n const currentSlideIndices = document.querySelectorAll(`.glide__slides [data-index='${featuredCarouselGlide.index}']`);\r\n for (const slide of currentSlideIndices) slide.classList.add('glide__slide--active--custom');\r\n });\r\n\r\n featuredCarouselGlide.mount();\r\n\r\n carousels.push(featuredCarouselGlide as Glide);\r\n }\r\n\r\n // eslint-disable-next-line unicorn/consistent-function-scoping\r\n const switchView = (link: Element) => {\r\n const linkText = link.querySelector('div.link-text');\r\n const icon = link.querySelector('use');\r\n const currentIconHref = icon!.getAttribute(\"xlink:href\");\r\n \r\n // Find the closest parent that matches the provided link\r\n let parentCarouselOrGrid = link.closest('.featured-properties');\r\n if (parentCarouselOrGrid){\r\n parentCarouselOrGrid = parentCarouselOrGrid.querySelector('.featured-carousel, .featured-grid')\r\n } else{\r\n console.log(\"No parent found in featured property carousel/grid\")\r\n return;\r\n }\r\n \r\n const parentNode = parentCarouselOrGrid!.parentNode\r\n const map = parentNode!.querySelector('.featured-asset-map')\r\n \r\n if (parentCarouselOrGrid!.classList.contains('hidden')) {\r\n linkText!.textContent = \"View as Map\";\r\n const iconHref = currentIconHref!.split('#')[0] + '#' + \"location-filled\";\r\n icon!.setAttribute(\"xlink:href\", iconHref);\r\n parentCarouselOrGrid!.classList.remove('hidden');\r\n map!.classList.add('hidden')\r\n } else {\r\n linkText!.textContent = \"View as List\";\r\n const iconHref = currentIconHref!.split('#')[0] + '#' + \"hamburger\";\r\n icon!.setAttribute(\"xlink:href\", iconHref);\r\n parentCarouselOrGrid!.classList.add('hidden');\r\n map!.classList.remove('hidden')\r\n }\r\n \r\n }\r\n \r\n\r\n for (const link of rootNode.querySelectorAll('.featured-carousel-map-button')) {\r\n if (!link.hasAttribute('data-listener-set')){\r\n link.addEventListener('click', () => switchView(link))\r\n link.setAttribute('data-listener-set', 'true')\r\n }\r\n\r\n }\r\n\r\n }\r\n}\r\n","/**\r\n * Password Field Component\r\n * @module patterns/components/form-and-content/fields/password\r\n */\r\n\r\nimport { App } from '~/app';\r\n\r\nexport default (app: App) => {\r\n\r\n app.logger.debug('[Stockland FE] Initialise Stockland Password Field Component');\r\n\r\n const listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]> = [];\r\n\r\n app.afterMount\r\n .then(() => {\r\n mountPasswordFormField(listeners);\r\n })\r\n .catch((error) => {\r\n throw new Error('[Stockland FE] Unable to register Stockland Password Field Component', error);\r\n });\r\n\r\n return function destroyPasswordFormField() {\r\n unMountPasswordFormField(listeners);\r\n\r\n app.logger.debug('[DXA] Password Field Component destroyed');\r\n };\r\n}\r\n\r\n// Extracted method for logic reuse within other component\r\nexport function mountPasswordFormField(\r\n listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>,\r\n root: HTMLElement | null = null) {\r\n let rootNode: Document | HTMLElement = document;\r\n if (root)\r\n rootNode = root;\r\n\r\n const forms = rootNode.querySelectorAll('form');\r\n\r\n forms.forEach( form => {\r\n const passwordFields = form.querySelectorAll('.password-input-field');\r\n\r\n passwordFields.forEach( passwordField => {\r\n const passwordInput = passwordField.querySelector('input');\r\n if (!passwordInput?.disabled){\r\n const togglePasswordButtons = passwordField.querySelectorAll('.toggle-password-button div');\r\n\r\n if (togglePasswordButtons && passwordInput){\r\n\r\n const toggleShowPassword = () => {\r\n passwordInput.type === \"password\" ? passwordInput.type = \"text\" : passwordInput.type = \"password\";\r\n togglePasswordButtons.forEach( togglePasswordButton => {\r\n togglePasswordButton.classList.toggle('hidden');\r\n });\r\n }\r\n\r\n togglePasswordButtons.forEach( togglePasswordButton => {\r\n togglePasswordButton.addEventListener(\"click\", toggleShowPassword);\r\n listeners.push([togglePasswordButton, \"click\", toggleShowPassword]);\r\n });\r\n }\r\n }\r\n });\r\n });\r\n}\r\n\r\nexport function unMountPasswordFormField(listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>) {\r\n for (const [element, event, listener] of listeners) {\r\n element.removeEventListener(event, listener);\r\n }\r\n}\r\n","/**\n * Button Grouping Form Field Component\n * @module patterns/components/form-and-content/fields/button-grouping\n */\n\nimport { type App } from '~/app';\n\nexport default (app: App) => {\n app.logger.debug('[Stockland FE] Initialise Multi Stockland Button Grouping Field Component');\n\n const listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]> = [];\n\n app.afterMount\n .then(() => {\n mountMultiButtonGroupingFormField(listeners);\n })\n .catch((error) => {\n throw new Error('[Stockland FE] Unable to register Stockland Multi Button Grouping Field Component', error);\n });\n\n return function destroyButtonGroupingFormField() {\n unMountMultiButtonGroupingFormField(listeners);\n\n app.logger.debug('[DXA] Multi Button Grouping Field Component destroyed');\n };\n};\n\nexport function mountMultiButtonGroupingFormField(\n listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>,\n root: HTMLElement | null = null\n) {\n let rootNode: Document | HTMLElement = document;\n if (root) rootNode = root;\n const forms = rootNode.querySelectorAll('form');\n\n for (const form of forms) {\n const buttonGroupings = form.querySelectorAll('.multi-button-grouping-field');\n\n // HiddenSelect is what Optimizely Forms will use for validation/submit value(s)\n const hiddenSelect = form.querySelector('.multi-button-grouping-hidden-element');\n for (const buttonGrouping of buttonGroupings) {\n const buttons = buttonGrouping.querySelectorAll('button');\n for (const button of buttons) {\n const handleButtonClick = (event: Event) => {\n event.preventDefault();\n\n // Clear out selected styling\n for (const button of buttons) {\n button.classList.remove('selected');\n }\n\n if (event && hiddenSelect) {\n const targetElement = event.currentTarget as HTMLElement;\n let buttonValue = '';\n let selectedValues = '';\n \n if(targetElement)\n {\n buttonValue = targetElement.dataset.value || \"\";\n }\n\n // Check if any items are already selected\n for (const hiddenOption of hiddenSelect.options) {\n if (selectedValues.length > 0) selectedValues += '|';\n selectedValues += hiddenOption.selected ? hiddenOption.value : '';\n }\n\n let valueArray = selectedValues ? selectedValues.split('|') : [];\n\n if (valueArray.includes(buttonValue)) {\n // Option deselected\n valueArray = valueArray.filter((x) => x !== buttonValue);\n button.classList.remove('selected');\n } else {\n // Option select\n valueArray = [buttonValue];\n button.classList.add('selected');\n }\n\n // Set the hidden select field so Optimizely forms is able to validate and submit the values\n for (const hiddenOption of hiddenSelect.options) {\n hiddenOption.selected = valueArray.some((x) => x.toLowerCase() == hiddenOption.value.toLowerCase());\n }\n\n // Strip empty items of any falsy values (false, 0, 0, 0n, \"\", null, undefined, NaN)\n valueArray = valueArray.filter(Boolean);\n }\n\n\n };\n\n button.addEventListener('click', handleButtonClick);\n listeners.push([button, 'click', handleButtonClick]);\n }\n }\n }\n}\n\nexport function unMountMultiButtonGroupingFormField(\n listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>\n) {\n for (const [element, event, listener] of listeners) {\n element.removeEventListener(event, listener);\n }\n}\n\nexport function selectDefaultInButtonGroup(currentButtonGroup:HTMLElement,selectElementText:string){\n const buttonGroupingContainer = currentButtonGroup?.parentNode;\n if(buttonGroupingContainer){\n const interestedButtonElement = buttonGroupingContainer.querySelector(`[data-option-text=\"${selectElementText}\"]`);\n if(interestedButtonElement)\n {\n interestedButtonElement.click();\n interestedButtonElement.classList.add('selected');\n }\n }\n}\n","/**\r\n * Multi-Select Component\r\n */\r\n\r\nimport { type App } from '~/app';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Multi Select Component');\r\n\r\n const listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]> = [];\r\n\r\n app.afterMount\r\n .then(() => {\r\n mountLocationBox(listeners);\r\n })\r\n .catch((error) => {\r\n throw new Error('[Stockland FE] Unable to register Stockland Multi Select Field Component', error);\r\n });\r\n\r\n return function destroySelectFormField() {\r\n unMountLocationBox(listeners);\r\n\r\n app.logger.debug('[DXA] Multi Select Field Component destroyed');\r\n };\r\n};\r\n\r\nexport function mountLocationBox(\r\n listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>,\r\n root: HTMLElement | null = null\r\n) {\r\n let rootNode: Document | HTMLElement = document;\r\n if (root) rootNode = root;\r\n const currentToolTips = rootNode.querySelectorAll('.location-box-tooltip');\r\n for (const currentToolTip of currentToolTips) {\r\n const toolTipLabel= currentToolTip.querySelector('.tooltip-label');\r\n const currentTrigger= currentToolTip.querySelector('.tooltip-trigger');\r\n if(toolTipLabel && currentTrigger){\r\n currentTrigger.addEventListener('click',()=> {\r\n toolTipLabel.classList.toggle(\"opacity-0\")\r\n })\r\n currentTrigger.addEventListener('mouseout',()=> {\r\n toolTipLabel.classList.add(\"opacity-0\");\r\n })\r\n\r\n currentTrigger.addEventListener('mouseover',()=> {\r\n toolTipLabel.classList.remove(\"opacity-0\");\r\n })\r\n \r\n listeners.push([currentTrigger,'mouseover', ()=> toolTipLabel.classList.remove(\" opacity-0\")], [currentTrigger,'mouseout', ()=> toolTipLabel.classList.add(\" opacity-0\")],[toolTipLabel,'click', ()=> toolTipLabel.classList.toggle(\"opacity-0\")]); \r\n }\r\n }\r\n}\r\n\r\nexport function unMountLocationBox(\r\n listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>\r\n) {\r\n for (const [element, event, listener] of listeners) {\r\n element.removeEventListener(event, listener);\r\n }\r\n}\r\n","/**\r\n * Quick Links Component\r\n * @module patterns/components/quick-links\r\n */\r\n\r\nimport { scrollIntoView } from '@root/src/framework/scripts/utils/scroll';\r\nimport { App } from '~/app';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Quick Links Component');\r\n\r\n const listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]> = [];\r\n\r\n app.afterMount\r\n .then(() => {\r\n mountFreeTextQuickLinks(listeners);\r\n })\r\n .catch((error) => {\r\n throw new Error('[Stockland FE] Unable to register Stockland Quick Links component', error);\r\n });\r\n\r\n return function destroyFreeTextQuickLinks() {\r\n unMountFreeTextQuickLinks(listeners);\r\n\r\n app.logger.debug('[DXA] Quick Links component destroyed');\r\n };\r\n}\r\n\r\n// Extracted method for logic reuse within other component\r\nexport function mountFreeTextQuickLinks(\r\n listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>,\r\n root: HTMLElement | null = null) {\r\n let rootNode: Document | HTMLElement = document;\r\n if (root)\r\n rootNode = root;\r\n\r\n const freeText = [...rootNode.querySelectorAll('.free-text')];\r\n const allQuickLinks = rootNode.querySelectorAll('.quick-links');\r\n const headings = freeText.flatMap(x => [...x.querySelectorAll('h2')]);\r\n\r\n for (const quickLinks of allQuickLinks) {\r\n const defaultLink = quickLinks.querySelector('.quick-link.default');\r\n\t\t\t const header = document.querySelector('.quick-links')\r\n\r\n const quickLinksDiv = defaultLink?.nextElementSibling;\r\n if (headings && defaultLink && quickLinksDiv){\r\n\r\n for (const h2 of headings)\r\n {\r\n const idValue = h2.textContent?.replaceAll(\" \", \"-\").toLowerCase() ?? '';\r\n const headingText = h2.textContent ?? ''\r\n const a = defaultLink.cloneNode(true) as HTMLElement;\r\n\t\t\t\t\t a.classList.remove('default');\r\n\r\n h2.id = idValue;\r\n a.setAttribute(\"href\", `#${idValue}`);\r\n const linkText = document.createTextNode(headingText);\r\n a.prepend(linkText);\r\n a.classList.toggle('hidden');\r\n\r\n quickLinksDiv.append(a);\r\n\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-loop-func\r\n const scrollToHeading = (event: Event) => {\r\n event.preventDefault();\r\n if (event.target instanceof Element) {\r\n scrollIntoView(h2)\r\n }\r\n }\r\n\r\n a.addEventListener(\"click\", scrollToHeading);\r\n listeners.push([a, \"click\", scrollToHeading]);\r\n }\r\n\r\n if (header != null){\r\n const stickyHeading = header.querySelector('.quick-links-header')\r\n if (stickyHeading != null){\r\n \tquickLinksDiv.prepend(stickyHeading)\r\n }\r\n }\r\n\r\n quickLinks.append(quickLinksDiv)\r\n\t\t\t\t defaultLink?.remove();\r\n }\r\n }\r\n}\r\n\r\nexport function unMountFreeTextQuickLinks(listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>) {\r\n for (const [element, event, listener] of listeners) {\r\n element.removeEventListener(event, listener);\r\n }\r\n}\r\n","/**\r\n * Modal Component\r\n * @module patterns/components/form-and-content/modal/modal\r\n */\r\n\r\nimport { defineAsyncComponent } from 'vue';\r\n\r\nimport { type App } from '~/app';\r\n\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Modal Component');\r\n\r\n const listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]> = [];\r\n\r\n app.afterMount\r\n .then(() => {\r\n mountModal(listeners);\r\n\r\n app.vueApp.component('stockland-modal', defineAsyncComponent(async () => import(\"./StocklandModal.vue\")));\r\n })\r\n .catch((error) => {\r\n throw new Error('[Stockland FE] Unable to register Stockland Modal Component', error);\r\n });\r\n\r\n return function destroyModal() {\r\n unMountModal(listeners);\r\n\r\n app.logger.debug('[DXA] Modal Component destroyed');\r\n };\r\n};\r\n\r\n// Extracted method for logic reuse within other component\r\nexport function mountModal(\r\n listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>,\r\n root: HTMLElement | null = null\r\n) {\r\n let rootNode: Document | HTMLElement = document;\r\n if (root) rootNode = root;\r\n\r\n const modals = rootNode.querySelectorAll('.modal');\r\n\r\n\r\n // Handle background colour options for modal\r\n modals.forEach((modal) => {\r\n const updateBackgroundColour = () => {\r\n const backgroundColour = modal.dataset.modalBackground;\r\n const modalBackground = rootNode.querySelector('.modal-backdrop');\r\n backgroundColour && modalBackground && modalBackground.classList.add(backgroundColour);\r\n };\r\n\r\n modal.addEventListener('shown.bs.modal', updateBackgroundColour);\r\n listeners.push([modal, 'shown.bs.modal', updateBackgroundColour]);\r\n });\r\n}\r\n\r\nexport function unMountModal(listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>) {\r\n for (const [element, event, listener] of listeners) {\r\n element.removeEventListener(event, listener);\r\n }\r\n}\r\n","import Collapse from 'bootstrap/js/dist/collapse';\r\n\r\n// This function will attempt to close all elements passed in, as if they were Bootstrap collapse elements\r\n// Generally this would be called when they are open and a click is registered elsewhere in the page, matching how dropdowns work\r\nexport const closeAllCollapses = (collapses: NodeListOf) => {\r\n for (const collapse of collapses) {\r\n const collapseItem = new Collapse(collapse, {\r\n toggle: false,\r\n });\r\n collapseItem.hide();\r\n }\r\n};\r\n","import VueSocialSharing from 'vue-social-sharing';\r\n\r\nimport { closeAllCollapses } from '@root/src/framework/scripts/utils/bootstrap';\r\nimport { App } from '~/app';\r\n\r\nimport { defineAsyncComponent } from 'vue';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Share On Socials Component');\r\n\r\n app.vueApp.component('stockland-share-link-list', defineAsyncComponent(async () => import(\"./StocklandShareLinkList.vue\")));\r\n app.vueApp.component('stockland-share-on-socials', defineAsyncComponent(async () => import(\"./StocklandShareOnSocials.vue\")));\r\n\r\n // Third party plugin - https://github.com/nicolasbeauvais/vue-social-sharing\r\n app.vueApp.use(VueSocialSharing);\r\n\r\n const listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]> = [];\r\n\r\n app.afterMount\r\n .then(() => {\r\n const pageLayoutContainer = document.querySelector('.container');\r\n const shareOnSocialButton = document.querySelectorAll('#shareIcons');\r\n\t\t\t\r\n\r\n if (pageLayoutContainer && shareOnSocialButton) {\r\n pageLayoutContainer.addEventListener('click', () => closeAllCollapses(shareOnSocialButton));\r\n listeners.push([pageLayoutContainer, 'click', () => closeAllCollapses(shareOnSocialButton)]);\r\n }\r\n })\r\n .catch((error) => {\r\n throw new Error('[Stockland FE] Unable to register Stockland Share On Socials component', error);\r\n });\r\n\r\n return function destroyShareOnSocials() {\r\n for (const [element, event, listener] of listeners) {\r\n element.removeEventListener(event, listener);\r\n }\r\n\r\n app.logger.debug('[DXA] Stockland Share On Socials component destroyed');\r\n };\r\n};","\r\n/**\r\n * Image with Caption Constants\r\n * @module patterns/components/form-and-content/rich-text/image-with-caption\r\n */\r\n\r\n\r\n/**\r\n * Class to style and load the carousel\r\n */\r\nexport const CLASS_NAME = 'image-with-caption-carousel';\r\n\r\n/**\r\n * Options for the modal carousel.\r\n */\r\nexport const OPTIONS = {\r\n gap: 0,\r\n classes: {\r\n direction: {\r\n ltr: 'carousel--ltr',\r\n rtl: 'carousel--rtl',\r\n },\r\n slider: 'carousel--slider',\r\n carousel: 'carousel--carousel',\r\n swipeable: 'carousel--swipeable',\r\n dragging: 'carousel--dragging',\r\n cloneSlide: 'carousel--clone',\r\n activeNav: 'carousel__bullet--active',\r\n activeSlide: 'carousel__slide--active',\r\n disabledArrow: 'carousel--disabled',\r\n },\r\n};\r\n","/**\r\n * Image With Caption Lazy Load\r\n * @module patterns/components/form-and-content/rich-text/image-with-caption\r\n */\r\n\r\n// Local Dependencies\r\nimport { App } from '~/app';\r\n\r\nimport { CLASS_NAME } from './constants';\r\n\r\n\r\nexport default function initialiseImageWithCaption(app: App) {\r\n const elements: NodeListOf = document.querySelectorAll(`.${CLASS_NAME}`);\r\n\r\n let destroyCarousel = () => {};\r\n\t\r\n // No carousel items on load, return no-op.\r\n if (!elements.length) return destroyCarousel;\r\n\r\n import(/* webpackChunkName: \"image-with-caption\" */ './image-with-caption')\r\n .then(async ({ carousel }) => {\r\n await app.afterMount;\r\n\r\n const { elements, destroyCarousel: _destroyCarousel } = carousel();\r\n destroyCarousel = _destroyCarousel;\r\n\r\n // Notify the DOM that we've loaded\r\n elements.forEach((item) => {\r\n item.setAttribute('data-lazy', 'loaded');\r\n });\r\n })\r\n .catch((error) => {\r\n throw new Error('[Stockland FE] Unable to register Image With Caption component', error);\r\n });\r\n\r\n // Cleanup - `destroyCarousel` is updated at a later time, so we can't return it, but we can leverage closure to call it.\r\n return () => destroyCarousel();\r\n\r\n}\r\n","import Plyr from 'plyr';\r\n\r\nimport { v4 as uuid } from 'uuid';\r\nimport { type App } from '~/app';\r\n\r\n// eslint-disable-next-line import/no-unassigned-import\r\nimport '@root/node_modules/plyr/src/sass/plyr.scss';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Video Component');\r\n\r\n const listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]> = [];\r\n\r\n const playerlist: Plyr[] = [];\r\n\r\n app.afterMount\r\n .then(() => {\r\n mountVideo(listeners, playerlist);\r\n })\r\n .catch((error) => {\r\n throw new Error('[Stockland FE] Unable to register Video Component', error);\r\n });\r\n\r\n return function destroyVideo() {\r\n unMountVideo(listeners, playerlist);\r\n\r\n app.logger.debug('[DXA] Video Component destroyed');\r\n };\r\n};\r\n\r\nconst mountVideo = (\r\n listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>,\r\n playerlist: Plyr[]\r\n) => {\r\n const videoContainers = document.querySelectorAll('.video-player-container');\r\n\r\n for (const videoContainer of videoContainers) {\r\n const autoPlay = !!videoContainer.dataset.autoPlay;\r\n const clickToPlay = !!videoContainer.dataset.clickToPlay;\r\n const closeIcon = videoContainer.dataset.closeButtonUrl ? videoContainer.dataset.closeButtonUrl : '';\r\n const closeButton = videoContainer.dataset.closeButton\r\n ? ``\r\n : '';\r\n\r\n let embedContainerClass=\"video-player-embed\";\r\n\r\n const videoSource = videoContainer.dataset.source;\r\n const embedContainer = videoContainer.querySelector(`.${embedContainerClass}`);\r\n const htmlContainer = videoContainer.querySelector('.video-player-file');\r\n const videoPlayerElement = videoContainer.querySelector('.video-player');\r\n\r\n let videoEmbed = false;\r\n let nativeVideoPoster = false;\r\n\r\n let isVimeo=videoSource?.includes('vimeo');\r\n\r\n const video = videoEmbed ? embedContainer : htmlContainer;\r\n const overlayPlayButton = videoContainer.querySelector('.overlay-play-btn');\r\n const customPlayButton = videoContainer.querySelector('.custom-play-btn');\r\n const customPlayButtonPlay = videoContainer.querySelector('.video-play-icon');\r\n const customPlayButtonPause = videoContainer.querySelector('.video-pause-icon');\r\n\r\n const isYoutubeVideo= videoSource?.includes('youtube') || videoSource?.includes('youtu.be');\r\n const applyPlyr= !isYoutubeVideo;\r\n\r\n if (embedContainer && htmlContainer) {\r\n if (isYoutubeVideo) {\r\n\r\n const ytFrame= document.createElement(\"iframe\");\r\n ytFrame.setAttribute('anonymous','true');\r\n ytFrame.setAttribute('allow-fullscreen','true');\r\n embedContainer?.append(ytFrame)\r\n\r\n overlayPlayButton?.classList.remove('hidden');\r\n overlayPlayButton?.classList.add('z-1');\r\n\r\n const poster= document.createElement(\"img\");\r\n poster.src= htmlContainer.dataset.poster||'';\r\n poster.classList.add('w-full','h-full','object-cover','absolute','top-0','left-0')\r\n videoContainer?.append(poster)\r\n\r\n videoContainer?.classList.add('relative')\r\n embedContainer.classList.remove('hidden')\r\n const beginAutoPlaySequence=()=>\r\n {\r\n poster.classList.add('hidden');\r\n overlayPlayButton?.classList.add('hidden');\r\n ytFrame.src=videoSource+'?&autoplay=1&mute=1'\r\n }\r\n\r\n videoContainer.addEventListener('click', beginAutoPlaySequence)\r\n listeners.push([poster, \"click\", beginAutoPlaySequence])\r\n } else if (isVimeo) {\r\n videoEmbed = true;\r\n //assigning the video container a unique class as a selector just in case there are multiple videos on the page\r\n embedContainerClass=`${embedContainerClass}${uuid()}`\r\n embedContainer.classList.add(embedContainerClass);\r\n embedContainer.dataset.plyrProvider = 'vimeo';\r\n htmlContainer.remove();\r\n\r\n if (videoSource) {\r\n const id = getVimeoId(videoSource);\r\n if (id) {\r\n embedContainer.dataset.plyrEmbedId = id;\r\n }\r\n }\r\n } else {\r\n embedContainer.remove();\r\n\r\n if (videoPlayerElement){\r\n videoPlayerElement.addEventListener( \"loadeddata\", () => {\r\n const videoWidth = videoPlayerElement.videoWidth;\r\n const videoHeight = videoPlayerElement.videoHeight;\r\n videoPlayerElement.style.aspectRatio = `${videoWidth}/${videoHeight}`;\t\r\n }, false );\r\n }\r\n\r\n if (htmlContainer?.dataset.poster) {\r\n htmlContainer.setAttribute(\"poster\", htmlContainer.dataset.poster);\r\n nativeVideoPoster = true;\r\n }\r\n }\r\n }\r\n\r\n if (video && applyPlyr) {\r\n video.classList.toggle('hidden');\r\n\r\n const controls = `\r\n\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t${closeButton}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t% buffered\r\n\t\t\t\t\t\t00:00\r\n\t\t\t\t\t
\r\n\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t
`;\r\n\r\n const videoPlayer = new Plyr(isVimeo?`.${embedContainerClass}`:video, {\r\n controls: controls,\r\n clickToPlay: clickToPlay,\r\n loop: { active: true },\r\n invertTime: false,\r\n hideControls: false,\r\n fullscreen: { enabled: true, fallback: true, iosNative: false } // Adding to test full screen behaviour on IOS\r\n });\r\n\r\n videoPlayer.on('error', (error) => {\r\n console.error('Plyr error', error);\r\n });\r\n\r\n if (autoPlay) {\r\n videoPlayer.muted = true;\r\n htmlContainer?.setAttribute('playsinline', 'playsinline');\r\n }\r\n\r\n if (!nativeVideoPoster) {\r\n const videoPoster = video.dataset.poster;\r\n videoPlayer.poster = videoPoster ? videoPoster : '';\r\n }\r\n\r\n videoPlayer.currentTime = 0;\r\n\r\n // Don't let the volume get to 0 unless muted\r\n // Ensures mute button will always work\r\n const handleVolumeChange = (event: CustomEvent) => {\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\r\n const plyrDetails = event?.detail?.plyr;\r\n if (!plyrDetails.muted && plyrDetails.volume === 0) {\r\n videoPlayer.volume = 0.05;\r\n }\r\n };\r\n\r\n videoPlayer.on('volumechange', handleVolumeChange);\r\n\r\n const hideButtons = () => {\r\n overlayPlayButton?.classList.add('hidden');\r\n videoContainer.classList.remove('hide-controls');\r\n };\r\n\r\n if (videoContainer.dataset.previewLength) {\r\n const preview = +videoContainer.dataset.previewLength;\r\n setTimeout(() => {\r\n videoPlayer.pause();\r\n overlayPlayButton?.classList.remove('hidden');\r\n videoContainer.classList.add('cursor-pointer');\r\n videoContainer.dataset.clickToPlay = 'false';\r\n }, preview);\r\n }\r\n\r\n if (videoContainer.dataset.overlayPlayButton) {\r\n overlayPlayButton?.classList.remove('hidden');\r\n videoContainer.classList.add('hide-controls');\r\n\r\n videoContainer.addEventListener('click', hideButtons);\r\n overlayPlayButton?.addEventListener('click', () => {\r\n hideButtons();\r\n void videoPlayer.play();\r\n });\r\n }\r\n\r\n if (videoContainer.dataset.customPlayButton) {\r\n customPlayButton?.classList.remove('hidden');\r\n videoContainer.classList.add('hide-controls');\r\n if(!autoPlay) {\r\n customPlayButtonPlay?.classList.remove('hidden');\r\n customPlayButtonPause?.classList.add('hidden');\r\n }\r\n \r\n customPlayButton?.addEventListener('click', () => {\r\n if (videoPlayer.playing) {\r\n videoPlayer.pause();\r\n customPlayButtonPlay?.classList.remove('hidden');\r\n customPlayButtonPause?.classList.add('hidden');\r\n } else {\r\n void videoPlayer.play();\r\n customPlayButtonPlay?.classList.add('hidden');\r\n customPlayButtonPause?.classList.remove('hidden');\r\n }\r\n });\r\n }\r\n\r\n\r\n videoPlayer.currentTime = 0;\r\n\r\n playerlist.push(videoPlayer);\r\n }\r\n }\r\n};\r\n\r\nfunction unMountVideo(\r\n listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>,\r\n playerList: Plyr[]\r\n) {\r\n for (const element of playerList) {\r\n element.destroy();\r\n }\r\n\r\n for (const [element, event, listener] of listeners) {\r\n element.removeEventListener(event, listener);\r\n }\r\n}\r\n\r\nfunction getYoutubeId(url: string) {\r\n const urlList = url.split(/(vi\\/|v=|\\/v\\/|youtu\\.be\\/|\\/embed\\/)/);\r\n return urlList[2] === undefined ? urlList[0] : urlList[2].split(/[^\\w\\-]/i)[0];\r\n}\r\n\r\nfunction getVimeoId(url: string) {\r\n const urlList = url.split(/(videos|video|channels|\\.com)\\/(\\d+)/);\r\n return urlList[2] === undefined ? urlList[0] : urlList[2].split(/[^\\w\\-]/i)[0];\r\n}\r\n","/**\r\n * Reusable From and Content Components\r\n */\r\n\r\n// eslint-disable-next-line simple-import-sort/imports\r\nimport { App } from '~/app';\r\n\r\nimport initialisePasswordFormField from './fields/password/password';\r\nimport initialiseSelectFormField from './fields/select/select';\r\nimport initialiseButtonGroupingFormField from './fields/button-grouping/button-grouping';\r\nimport initialiseMultiButtonGroupingFormField from './fields/multi-button-grouping/multi-button-grouping';\r\nimport initialiseLocationBox from './fields/location-box/location-box'\r\nimport initialiseFreeTextQuickLinks from './quick-links/quick-links';\r\nimport initialiseForm from './forms/form';\r\nimport initialiseModal from './modal/modal';\r\nimport initialiseShareOnSocials from './share-on-socials/share-on-socials';\r\nimport initialiseImageWithCaption from './rich-text/image-with-caption/lazy-image-with-caption';\r\nimport initialiseVideo from './video/video';\r\nimport initialiseModalForm from './modal-form/modal-form';\r\nimport { defineAsyncComponent } from 'vue';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Reusable From and Content Components');\r\n app.vueApp.component('inline-error', defineAsyncComponent(async () => import(\"./inline-error/InlineError.vue\")));\r\n app.vueApp.component('stockland-select', defineAsyncComponent(async () => import(\"./fields/select/StocklandSelect.vue\")));\r\n app.vueApp.component('stockland-button', defineAsyncComponent(async () => import(\"./button/StocklandButton.vue\")));\r\n app.vueApp.component('stockland-radio-button', defineAsyncComponent(async () => import(\"./fields/radio-button/StocklandRadioButton.vue\")));\r\n app.vueApp.component('stockland-multi-select', defineAsyncComponent(async () => import(\"./fields/multi-select/StocklandMultiSelect.vue\")));\r\n app.vueApp.component('stockland-multi-select-with-checkboxes', defineAsyncComponent(async () => import(\"./fields/multi-select-with-checkboxes/StocklandMultiSelectWithCheckboxes.vue\")));\r\n app.vueApp.component('stockland-icon', defineAsyncComponent(async () => import(\"./icon/StocklandIcon.vue\")));\r\n app.vueApp.component('counter', defineAsyncComponent(async () => import(\"./fields/counter/Counter.vue\")));\r\n app.vueApp.component('resized-image', defineAsyncComponent(async () => import(\"./resized-image/ResizedImage.vue\")));\r\n app.vueApp.component(\r\n 'tab-selection',\r\n defineAsyncComponent(async () => import('./group-fields/tab-filter/TabSelection.vue'))\r\n );\r\n app.vueApp.component(\r\n 'vue-buttons-group',\r\n defineAsyncComponent(async () => import('./group-fields/vue-buttons-group/VueButtonsGroup.vue'))\r\n );\r\n app.vueApp.component(\r\n 'multi-range-slider',\r\n defineAsyncComponent(async () => import('./fields/range-slider/MultiRangeSlider.vue'))\r\n );\r\n\r\n app.vueApp.component(\r\n 'location-box',\r\n defineAsyncComponent(async () => import('./fields/location-box/LocationBox.vue'))\r\n );\r\n\r\n const destroyButtonGroupingFormField = initialiseButtonGroupingFormField(app);\r\n const destroyMultiButtonGroupingFormField = initialiseMultiButtonGroupingFormField(app);\r\n const destroyForm = initialiseForm(app);\r\n const destroyFreeTextQuickLinks = initialiseFreeTextQuickLinks(app);\r\n const destroyImageWithCaption = initialiseImageWithCaption(app);\r\n const destroyModal = initialiseModal(app);\r\n const destroyPasswordFormField = initialisePasswordFormField(app);\r\n const destroySelectFormField = initialiseSelectFormField(app);\r\n const destoryShareOnSocials = initialiseShareOnSocials(app);\r\n const destroyVideo = initialiseVideo(app);\r\n const destroyModalForm = initialiseModalForm(app);\r\n const destroyLocationBox = initialiseLocationBox(app);\r\n\r\n return function destroyComponents() {\r\n // Component de-registration\r\n destroyForm();\r\n destroyFreeTextQuickLinks();\r\n destroyImageWithCaption();\r\n destroyModal();\r\n destroyPasswordFormField();\r\n destroySelectFormField();\r\n destoryShareOnSocials();\r\n destroyVideo();\r\n destroyModalForm();\r\n destroyButtonGroupingFormField();\r\n destroyMultiButtonGroupingFormField(); \r\n destroyLocationBox();\r\n\r\n app.logger.debug('[Stockland FE] Form and Content Components destroyed');\r\n };\r\n};\r\n","/**\r\n * Formatted Time Component\r\n */\r\n\r\nimport { App } from '~/app';\r\n\r\nimport { defineAsyncComponent } from 'vue';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Formatted Time Component');\r\n app.vueApp.component('formatted-time', defineAsyncComponent(async () => import(\"./FormattedTime.vue\")));\r\n};\r\n","/* eslint-disable @typescript-eslint/no-unsafe-assignment */\r\n/* eslint-disable @typescript-eslint/no-unsafe-call */\r\n// Above global eslint rules disabled as GlideJS has no TS implementation\r\n/**\r\n * Carousel Component\r\n * @module patterns/components/enquiry-contact\r\n */\r\n// eslint-disable-next-line @typescript-eslint/ban-tslint-comment\r\n/* tslint:disable:no-any */\r\n\r\n// Dependencies\r\n\r\n// import { markElementReady } from '@root/src/framework/scripts/helpers/element-ready';\r\n// import { scrollIntoView } from '~/framework/utils/scroll';\r\nimport { type App } from '~/app';\r\n\r\nexport default (app: App) => {\r\n\tapp.logger.debug('[Stockland FE] Initialise Stockland Enquiry Contact Component');\r\n\r\n\tconst listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]> = [];\r\n\r\n\tapp.afterMount\r\n\t\t.then(() =>\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tmountEnquireContact(listeners);\r\n\t\t\t}, 200)\r\n\t\t)\r\n\t\t.catch((error: ErrorOptions) => {\r\n\t\t\tthrow new Error('[Stockland FE] Unable to register Stockland Enquiry Contact Carousel Component', error);\r\n\t\t});\r\n\r\n\treturn () => {\r\n\t\tunMountEnquireContact(listeners);\r\n\r\n\t\tapp.logger.debug('[DXA] Horizontal Enquiry Contact Component destroyed');\r\n\t};\r\n};\r\n\r\nfunction unMountEnquireContact(\r\n\tlisteners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>\r\n) {\r\n\tfor (const [element, event, listener] of listeners) {\r\n\t\telement.removeEventListener(event, listener);\r\n\t}\r\n}\r\n\r\nexport function mountEnquireContact(\r\n\tlisteners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>\r\n) {\r\n\t// const contactFormButtons = document.querySelectorAll(\".enquiry-contact-button\");\r\n\r\n\t// for (const button of contactFormButtons) {\r\n\t// const contactFormParent= button.closest(\".enquiry-contact-form\");\r\n\t// const contactForm = contactFormParent!.querySelector(\".enquiry-contact-form-container\");\r\n\t// button.setAttribute('type', 'button')\r\n\r\n\t// if (!button.dataset.hasListener) {\r\n\t// button.addEventListener(\"click\", () => {\r\n\t// contactForm?.classList.remove(\"hidden\");\r\n\t// button.classList.add(\"hidden\")\r\n\r\n\t// });\r\n\t// button.dataset.hasListener = 'true';\r\n\t// }\r\n\r\n\t// }\r\n\r\n\tconst phoneDetails = document.querySelectorAll('.phone-click');\r\n\tconst emailDetails = document.querySelectorAll('.email-click');\r\n\r\n\tremoveFormFieldFocus();\r\n\tfor (const phoneDetail of phoneDetails) {\r\n\t\tconst number = phoneDetail.querySelector('.phone');\r\n\t\tconst numberView = phoneDetail.querySelector('.phone-view');\r\n\t\tif (!phoneDetail.dataset.hasListener) {\r\n\t\t\tphoneDetail.addEventListener('click', () => {\r\n\t\t\t\tif (number && numberView) {\r\n\t\t\t\t\t// Start transition to hide the view element\r\n\t\t\t\t\tnumberView.classList.add('opacity-0');\r\n\t\t\t\t\tnumberView.classList.add('pointer-events-none');\r\n\r\n\t\t\t\t\t// Ensure the number element is ready to be shown\r\n\r\n\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\tnumber.classList.remove('hidden');\r\n\t\t\t\t\t\t// Fully display the number element after the transition\r\n\t\t\t\t\t\tnumberView.classList.add('hidden');\r\n\t\t\t\t\t\tnumber.classList.remove('opacity-0');\r\n\t\t\t\t\t}, 300); // Match this duration with your transition duration\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tphoneDetail.dataset.hasListener = 'true';\r\n\t\t}\r\n\t}\r\n\r\n\tfor (const emailDetail of emailDetails) {\r\n\t\tconst email = emailDetail.querySelector('.email');\r\n\t\tconst emailView = emailDetail.querySelector('.email-view');\r\n\t\tif (!emailDetail.dataset.hasListener) {\r\n\t\t\temailDetail.addEventListener('click', () => {\r\n\t\t\t\tif (email && emailView) {\r\n\t\t\t\t\t// Start transition to hide the view element\r\n\t\t\t\t\temailView.classList.add('opacity-0');\r\n\t\t\t\t\temailView.classList.add('pointer-events-none');\r\n\r\n\t\t\t\t\t// Ensure the email element is ready to be shown\r\n\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\temail.classList.remove('hidden');\r\n\t\t\t\t\t\t// Fully display the email element after the transition\r\n\t\t\t\t\t\temailView.classList.add('hidden');\r\n\t\t\t\t\t\temail.classList.remove('opacity-0');\r\n\t\t\t\t\t}, 300); // Match this duration with your transition duration\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\temailDetail.dataset.hasListener = 'true';\r\n\t\t}\r\n\t}\r\n\r\n\tfunction removeFormFieldFocus() {\r\n\t\tconst enquiryContactFormContainer = document.querySelectorAll('.enquiry-contact-form-container');\r\n\t\tfor (const formContainer of enquiryContactFormContainer) {\r\n\t\t\tconst formFields = formContainer.querySelectorAll('input, textarea');\r\n\t\t\tfor (const formField of formFields) {\r\n\t\t\t\tformField.blur();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tconst destroyEnquireContact = () => {\r\n\t\t// Destory each Glide instance to prevent memory leaks\r\n\r\n\t\tfor (const [element, event, listener] of listeners) {\r\n\t\t\telement.removeEventListener(event, listener);\r\n\t\t}\r\n\t};\r\n\r\n\treturn { destroyEnquireContact };\r\n}\r\n","/**\r\n * Unsubscribe-Form Component\r\n */\r\n\r\nimport { App } from '~/app';\r\n\r\nimport { defineAsyncComponent } from 'vue';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Unsubscribe Component');\r\n app.vueApp.component('unsubscribe', defineAsyncComponent(async () => import(\"./Unsubscribe.vue\")));\r\n};\r\n","/**\r\n * Unsubscribe-Form Component\r\n */\r\n\r\nimport { App } from '~/app';\r\n\r\nimport { defineAsyncComponent } from 'vue';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Whistleblower Component');\r\n app.vueApp.component('whistleblower', defineAsyncComponent(async () => import(\"./Whistleblower.vue\")));\r\n};\r\n","import { type App } from '~/app';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Enquiry Button Component');\r\n\r\n const listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]> = [];\r\n\r\n app.afterMount\r\n .then(() => {\r\n mountEnquiryButton(listeners);\r\n })\r\n .catch((error:Error) => {\r\n throw new Error('[Stockland FE] Unable to register Stockland Enquiry Button Component', error);\r\n });\r\n\r\n return function destroyEnquiryButton() {\r\n unMountEnquiryButton(listeners);\r\n\r\n app.logger.debug('[DXA] Enquiry Button Component destroyed');\r\n };\r\n};\r\n\r\nfunction mountEnquiryButton(\r\n listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>,\r\n root: HTMLElement | null = null\r\n) {\r\n let rootNode: Document | HTMLElement = document;\r\n if (root) rootNode = root;\r\n\r\n\r\n // Sticky enquiry button\r\n const enquiryButton: HTMLElement | null = document?.querySelector('.workplace-enquiry-button');\r\n if (enquiryButton) {\r\n enquiryButton.addEventListener('click', (event) => event.preventDefault());\r\n const boundingBox = enquiryButton.getBoundingClientRect();\r\n const topNavigationBar: HTMLElement = rootNode.querySelector('.top-navigation-bar')!;\r\n const footer = rootNode.querySelector('footer')!;\r\n\r\n const placeEnquiryButton = () => {\r\n enquiryButton.style.bottom = `unset`;\r\n enquiryButton.style.right = `unset`;\r\n enquiryButton.style.top = `unset`;\r\n enquiryButton.style.left = `unset`;\r\n enquiryButton.style.position = `sticky`;\r\n\r\n\r\n if (window.innerWidth > 769) {\r\n window.addEventListener('scroll',()=>{\r\n const buttonMargin = 18 + (topNavigationBar ? topNavigationBar.offsetHeight + 85: 0);\r\n const buttonTop = boundingBox.top - buttonMargin;\r\n enquiryButton.style.top = (window.innerWidth > 769 ? `${buttonMargin}px` : `unset`)\r\n\r\n enquiryButton.style.left = window.scrollY < buttonTop || (window.scrollY > buttonTop && (!footer ||\r\n window.scrollY + enquiryButton.offsetTop + enquiryButton.offsetHeight < footer?.offsetTop)) ? \"initial\" : \"-1000px\";\r\n });\r\n }\r\n else {\r\n enquiryButton.style.position = 'fixed';\r\n enquiryButton.style.top = `unset`;\r\n enquiryButton.style.bottom = `36px`;\r\n enquiryButton.style.right = `32px`;\r\n }\r\n }\r\n\r\n const modalOverlay = document.querySelector(\".button-modal-overlay\")\r\n const modal = document.querySelector(\".modal\")\r\n\r\n const observer = new MutationObserver(function () {\r\n modalOverlay?.classList.toggle('invisible')\r\n })\r\n\r\n observer.observe(modal!, {\r\n attributes: true, \r\n attributeFilter: ['class'],\r\n childList: false, \r\n characterData: false\r\n })\r\n\r\n placeEnquiryButton();\r\n\r\n window.addEventListener('resize', placeEnquiryButton)\r\n listeners.push([window, 'resize', placeEnquiryButton]);\r\n }\r\n \r\n}\r\n\r\nexport function unMountEnquiryButton(\r\n listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>\r\n) {\r\n for (const [element, event, listener] of listeners) {\r\n element.removeEventListener(event, listener);\r\n }\r\n}","import { type App } from '~/app';\nimport { isMobile } from '@root/src/framework/scripts/helpers/browser/media-query';\n\nexport default (app: App) => {\n\tapp.logger.debug('[Stockland FE] Initialise Get In Touch Button Component');\n\n\tconst listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]> = [];\n\n\tapp.afterMount\n\t\t.then(() => {\n\t\t\tmountGetInTouchButton(listeners);\n\t\t})\n\t\t.catch((error: Error) => {\n\t\t\tthrow new Error('[Stockland FE] Unable to register Get In Touch Button Component', error);\n\t\t});\n\n\treturn function destroyGetInTouchButton() {\n\t\tunMountGetInTouchButton(listeners);\n\n\t\tapp.logger.debug('[DXA] GetInTouch Button Component destroyed');\n\t};\n};\n\nfunction mountGetInTouchButton(\n\tlisteners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>,\n\troot: HTMLElement | null = null\n) {\n\tlet rootNode: Document | HTMLElement = document;\n\tif (root) rootNode = root;\n\n\tconst getInTouchButton: HTMLElement | null = rootNode?.querySelector('.get-in-touch-button');\n\tconst getInTouchButtonMobile: HTMLElement | null = rootNode?.querySelector('.get-in-touch-button-mobile');\n\tif (getInTouchButton) {\n\t\tconst placeGetInTouchButton = () => {\n\t\t\tlet previousScrollPos = window.scrollY;\n\n\t\t\twindow.addEventListener('scroll', () => {\n\t\t\t\tif (isMobile(1024)) {\n\t\t\t\t\tgetInTouchButton.style.position = '';\n\t\t\t\t\tgetInTouchButton.style.bottom = '';\n\t\t\t\t\tgetInTouchButton.style.right = '';\n\t\t\t\t} else {\n\t\t\t\t\tconst currentScrollPos = window.scrollY;\n\t\t\t\t\tif (previousScrollPos > currentScrollPos) {\n\t\t\t\t\t\tgetInTouchButton.style.position = '';\n\t\t\t\t\t\tgetInTouchButton.style.bottom = '';\n\t\t\t\t\t\tgetInTouchButton.style.right = '';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tgetInTouchButton.style.position = 'fixed';\n\t\t\t\t\t\tgetInTouchButton.style.bottom = '60px';\n\t\t\t\t\t\tgetInTouchButton.style.right = '64px';\n\t\t\t\t\t}\n\t\t\t\t\tpreviousScrollPos = currentScrollPos;\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\t\tplaceGetInTouchButton();\n\t}\n\tgetInTouchButton?.addEventListener('click', () => {\n\t\tconst contactSection = document.getElementById('contact-section');\n\t\tconst ribbonBar = document.querySelector('.ribbon-bar');\n\t\tconst ribbonBarHeight = ribbonBar ? ribbonBar.clientHeight : 0;\n\n\t\tif (!contactSection) return;\n\t\tconst scrollToPos = contactSection?.getBoundingClientRect().y + window.scrollY - ribbonBarHeight;\n\t\twindow.scrollTo({ top: scrollToPos, behavior: 'smooth' });\n\t});\n\tgetInTouchButtonMobile?.addEventListener('click', () => {\n\t\tconst contactSection = document.getElementById('contact-section');\n\t\tconst navigation = document.querySelector('.hub-navigation-bar');\n\t\tconst navigationHeight = navigation ? navigation.clientHeight : 0;\n\n\t\tif (!contactSection) return;\n\t\tconst scrollToPos = contactSection?.getBoundingClientRect().y + window.scrollY - navigationHeight;\n\t\twindow.scrollTo({ top: scrollToPos, behavior: 'smooth' });\n\t});\n}\n\nexport function unMountGetInTouchButton(\n\tlisteners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>\n) {\n\tfor (const [element, event, listener] of listeners) {\n\t\telement.removeEventListener(event, listener);\n\t}\n}\n","import { type App } from '~/app';\r\nimport { isMobile } from '@root/src/framework/scripts/helpers/browser/media-query';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Global Navigation Component');\r\n\r\n const listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]> = [];\r\n\r\n app.afterMount\r\n .then(() => {\r\n mountGlobalNavigation(listeners);\r\n })\r\n .catch((error: Error) => {\r\n throw new Error('[Stockland FE] Unable to register Stockland Global Navigation Component', error);\r\n });\r\n\r\n return function destroyGlobalNavigation() {\r\n unMountGlobalNavigation(listeners);\r\n\r\n app.logger.debug('[DXA] Global Navigation Component destroyed');\r\n };\r\n};\r\n\r\nfunction mountGlobalNavigation(\r\n listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>,\r\n root: HTMLElement | null = null\r\n) {\r\n let rootNode: Document | HTMLElement = document;\r\n if (root) rootNode = root;\r\n /* When the user scrolls down, hide the ribbon bar. When the user scrolls up, show the ribbon bar */\r\n let previousScrollpos = window.scrollY;\r\n const ribbonBarParent = rootNode.querySelector(\".ribbon-bar-parent\")\r\n const hubNav = rootNode.querySelector(\".hub-navigation-bar\")\r\n const enquiryButtonParent = rootNode.querySelector(\".enquiry-button-parent\") \r\n window.addEventListener('scroll', function () {\r\n let ribbonBarParentHeight = 0;\r\n const currentScrollPos = window.scrollY;\r\n if (ribbonBarParent){\r\n ribbonBarParentHeight = ribbonBarParent.offsetHeight;\r\n ribbonBarParent.style.top = (previousScrollpos > currentScrollPos) ? \"113px\" : `${113 - ribbonBarParentHeight}px`\r\n }\r\n\r\n if (enquiryButtonParent) {\r\n enquiryButtonParent.style.top = (previousScrollpos > currentScrollPos) ? `${114 + ribbonBarParentHeight}px` : \"114px\"\r\n }\r\n \r\n previousScrollpos = currentScrollPos;\r\n })\r\n\r\n if (hubNav) {\r\n handleHubScroll(hubNav);\r\n }\r\n}\r\n\r\nexport function unMountGlobalNavigation(\r\n listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>\r\n) {\r\n for (const [element, event, listener] of listeners) {\r\n element.removeEventListener(event, listener);\r\n }\r\n}\r\nconst handleHubScroll = (nav: HTMLElement) => {\r\n let previousScrollPos = window.scrollY;\r\n window.addEventListener('scroll', function () {\r\n if(!isMobile(1025)){\r\n let navHeight = 0;\r\n const currentScrollPos = window.scrollY;\r\n if (nav){\r\n navHeight = nav.offsetHeight +1;\r\n nav.style.top = (previousScrollPos > currentScrollPos) ? '0px' : '-'+navHeight+'px';\r\n }\r\n previousScrollPos = currentScrollPos;\r\n }\r\n });\r\n window.addEventListener('resize', function () {\r\n if(isMobile(1025)){\r\n nav.style.top = '0px';\r\n }\r\n });\r\n\r\n};\r\n","import { defineAsyncComponent } from 'vue';\r\n\r\nimport { type App } from '~/app';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Menu Overlay Component');\r\n\r\n const listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]> = [];\r\n\r\n app.logger.debug('[Stockland FE] Initialise Stockland Menu Overlay RTC Component');\r\n app.vueApp.component('menu-overlay-rtc', defineAsyncComponent(async () => import(\"./menu-overlay-rtc.vue\")));\r\n\r\n app.afterMount\r\n .then(() => {\r\n mountMenuOverlay(listeners);\r\n })\r\n .catch((error) => {\r\n throw new Error('[Stockland FE] Unable to register Stockland Menu Overlay Component', error);\r\n });\r\n\r\n return function destroyMenuOverlay() {\r\n unMountMenuOverlay(listeners);\r\n\r\n app.logger.debug('[DXA] Menu Overlay Component destroyed');\r\n };\r\n};\r\n\r\nfunction mountMenuOverlay(\r\n listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>,\r\n root: HTMLElement | null = null\r\n) {\r\n let rootNode: Document | HTMLElement = document;\r\n if (root) rootNode = root;\r\n\r\n const menuOverlays = rootNode.querySelectorAll('.menu-overlay');\r\n\r\n for (const menuOverlay of menuOverlays) {\r\n const businessUnits = menuOverlay.querySelectorAll('.business-units .business-unit');\r\n const menuItems = menuOverlay.querySelectorAll('.menu-items .menu-item');\r\n const mobileMenu = menuOverlay.querySelector('.mobile-menu');\r\n\r\n for (const businessUnit of businessUnits) {\r\n const updateActiveBusinessUnit = () => {\r\n const businessUnitIndex = businessUnit.id;\r\n const businessUnitMenuitems = menuOverlay.querySelector(\r\n `.menu-items #menu-item-${businessUnitIndex}`\r\n );\r\n\r\n // Update active business unit text/chevron style\r\n for (const businessUnit of businessUnits) {\r\n businessUnit.classList.remove('active');\r\n }\r\n\r\n businessUnit.classList.add('active');\r\n\r\n // Update menu items to new business unit\r\n for (const menuItem of menuItems) {\r\n menuItem.classList.remove('grid');\r\n menuItem.classList.add('hidden');\r\n }\r\n\r\n businessUnitMenuitems?.classList.remove('hidden');\r\n businessUnitMenuitems?.classList.add('grid');\r\n\r\n businessUnit.addEventListener('click', updateActiveBusinessUnit);\r\n listeners.push([businessUnit, 'click', updateActiveBusinessUnit]);\r\n\r\n // Update business unit link value after it becomes the active business unit and remove links from all other BUs\r\n const dataLinkValue = businessUnit.dataset.href;\r\n\r\n for (const businessUnit of businessUnits) {\r\n businessUnit.setAttribute('onclick', '');\r\n }\r\n\r\n setTimeout(() => {\r\n if (dataLinkValue) {\r\n businessUnit.setAttribute('onclick', `window.location='${dataLinkValue}';`);\r\n }\r\n }, 500);\r\n };\r\n\r\n businessUnit.addEventListener('click', updateActiveBusinessUnit);\r\n listeners.push([businessUnit, 'click', updateActiveBusinessUnit]);\r\n }\r\n\r\n if (mobileMenu) {\r\n const menuItems = mobileMenu.querySelectorAll('.menu-item');\r\n const bottomBar = mobileMenu.querySelector('.bottom-bar');\r\n\r\n for (const menuItem of menuItems) {\r\n const dropdownButton = menuItem.querySelector('.dropdown-button');\r\n const menuItemCollapse = menuItem.querySelector('.mobile-item-collapse');\r\n const menuSubItemCollapse = menuItem.querySelector('.mobile-subitem-collapse');\r\n const menuLabel = menuItem.querySelector('.menu-label');\r\n\r\n if (dropdownButton) {\r\n const rotateDropdownButton = () => {\r\n const icon = dropdownButton.querySelector('svg');\r\n icon?.classList.toggle('rotate-180');\r\n };\r\n\r\n if (menuLabel) {\r\n const menuLabelLink = menuLabel.querySelector('a');\r\n if (menuLabelLink) {\r\n menuLabelLink.addEventListener('click', rotateDropdownButton);\r\n listeners.push([menuLabelLink, 'click', rotateDropdownButton]);\r\n }\r\n }\r\n\r\n dropdownButton.addEventListener('click', rotateDropdownButton);\r\n\r\n listeners.push([dropdownButton, 'click', rotateDropdownButton]);\r\n }\r\n\r\n if (bottomBar) {\r\n const bottomBarLinks = bottomBar.querySelectorAll('a');\r\n\r\n for (const link of bottomBarLinks) {\r\n // eslint-disable-next-line @typescript-eslint/no-loop-func\r\n const handleTouchLink = (event: Event) => {\r\n event.preventDefault();\r\n const href = link.getAttribute('href');\r\n if (href) {\r\n window.location.href = href;\r\n }\r\n };\r\n\r\n link.addEventListener('touchend', handleTouchLink);\r\n listeners.push([link, 'touchend', handleTouchLink]);\r\n }\r\n }\r\n\r\n stopCollapsePropagation(menuItemCollapse);\r\n stopCollapsePropagation(menuSubItemCollapse);\r\n }\r\n }\r\n }\r\n\r\n function stopCollapsePropagation(element: HTMLElement | null) {\r\n if (element) {\r\n // Stop the shown and hide collapse event proprogations to not trigger\r\n element.addEventListener('show.bs.collapse', (event: Event) => event.stopPropagation());\r\n listeners.push([element, 'show.bs.collapse', (event: Event) => event.stopPropagation()]);\r\n\r\n element.addEventListener('hide.bs.collapse', (event: Event) => event.stopPropagation());\r\n listeners.push([element, 'hide.bs.collapse', (event: Event) => event.stopPropagation()]);\r\n\r\n element.addEventListener('shown.bs.collapse', (event: Event) => event.stopPropagation());\r\n listeners.push([element, 'shown.bs.collapse', (event: Event) => event.stopPropagation()]);\r\n\r\n element.addEventListener('hidden.bs.collapse', (event: Event) => event.stopPropagation());\r\n listeners.push([element, 'hidden.bs.collapse', (event: Event) => event.stopPropagation()]);\r\n }\r\n }\r\n}\r\n\r\nexport function unMountMenuOverlay(\r\n listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>\r\n) {\r\n for (const [element, event, listener] of listeners) {\r\n element.removeEventListener(event, listener);\r\n }\r\n}\r\n","import Collapse from 'bootstrap/js/dist/collapse';\r\n\r\nimport { closeAllCollapses } from '@root/src/framework/scripts/utils/bootstrap';\r\nimport { type App } from '~/app';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Navigation Bar Component');\r\n\r\n const listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]> = [];\r\n\r\n app.afterMount\r\n\r\n .then(() => {\r\n mountNavigationBar(listeners);\r\n })\r\n .catch((error) => {\r\n throw new Error('[Stockland FE] Unable to register Stockland Navigation Bar Component', error);\r\n });\r\n\r\n return function destroyNavigationBar() {\r\n unMountNavigationBar(listeners);\r\n\r\n app.logger.debug('[DXA] Navigation Bar Component destroyed');\r\n };\r\n};\r\n\r\nfunction mountNavigationBar(\r\n listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>,\r\n root: HTMLElement | null = null\r\n) {\r\n let rootNode: Document | HTMLElement = document;\r\n if (root) rootNode = root;\r\n\r\n const navigation = rootNode.querySelector('.navigation');\r\n\r\n if (navigation) {\r\n const collapses = navigation.querySelectorAll('.navigation-collapse');\r\n const pageLayoutContainer = rootNode.querySelector('.container');\r\n\r\n const menuToggleButtons = navigation.querySelectorAll('.menu-toggle button');\r\n const searchToggleButtons = navigation.querySelectorAll('.search-toggle button');\r\n\r\n const searchCollapse = navigation.querySelector('.search-collapse');\r\n const menuCollapse = navigation.querySelector('.menu-collapse');\r\n\r\n const businessUnitSelect = navigation.querySelector('.business-unit-select')\r\n const dropdownChevron = navigation.querySelector('.selected-input-button')\r\n\r\n const tabletPhoneIcon = navigation.querySelector('.tablet-phone-icon')\r\n const tabletPhoneBubble = navigation.querySelector('.tablet-phone-bubble')\r\n\r\n if (businessUnitSelect) {\r\n const observer = new MutationObserver(function () {\r\n dropdownChevron?.classList.toggle('open')\r\n if (businessUnitSelect?.classList.contains('show')) {\r\n for (const collapse of collapses) {\r\n if (collapse.classList.contains('show')) {\r\n if (collapse.id == 'menu-collapse' && menuCollapse) {\r\n const collapeItem = new Collapse(menuCollapse, {\r\n toggle: false,\r\n });\r\n collapeItem.hide();\r\n }\r\n\r\n if (collapse.id == 'search-collapse' && searchCollapse) {\r\n const collapeItem = new Collapse(searchCollapse, {\r\n toggle: false,\r\n });\r\n collapeItem.hide();\r\n }\r\n }\r\n }\r\n }\r\n })\r\n\r\n observer.observe(businessUnitSelect!, {\r\n attributes: true,\r\n attributeFilter: ['class'],\r\n childList: false,\r\n characterData: false\r\n })\r\n }\r\n\r\n if (tabletPhoneBubble && tabletPhoneIcon) {\r\n tabletPhoneIcon.addEventListener('click', () => {\r\n tabletPhoneBubble.classList.toggle('hidden');\r\n })\r\n\r\n // Checks if mouseclick is not on phone icon or bubble, then hides phone popup\r\n document.addEventListener('click', function (event: Event) {\r\n const target = event.target as Element\r\n if (!tabletPhoneBubble.contains(target) && !tabletPhoneIcon.contains(target)) {\r\n tabletPhoneBubble.classList.add('hidden');\r\n }\r\n })\r\n }\r\n\r\n\r\n\r\n // Called on collapse toggle\r\n // Will add the overlay class to the page's main content div\r\n const toggleBackdropOpacity = () => {\r\n pageLayoutContainer?.classList.toggle('overlay-20');\r\n };\r\n\r\n // Called on collapse toggle\r\n // Will toggle between the search and xmark icons\r\n const toggleSearchButtons = () => {\r\n for (const button of searchToggleButtons) {\r\n button.classList.toggle('hidden');\r\n }\r\n };\r\n\r\n // Called on collapse toggle\r\n // Will toggle between the menu and xmark icons\r\n const toggleMenuButtons = () => {\r\n for (const button of menuToggleButtons) {\r\n button.classList.toggle('hidden');\r\n }\r\n };\r\n\r\n // Calls on collapse toggle\r\n // Will ensure the other collapse is closed when the triggered one opens\r\n // Calls the toggle icons function\r\n const toggleCollapse = (collapse: HTMLElement) => {\r\n if (collapse.id.includes('search')) {\r\n if (menuCollapse) {\r\n const collapeItem = new Collapse(menuCollapse, {\r\n toggle: false,\r\n });\r\n collapeItem.hide();\r\n }\r\n\r\n toggleSearchButtons();\r\n } else if (collapse.id.includes('menu')) {\r\n if (searchCollapse) {\r\n const collapeItem = new Collapse(searchCollapse, {\r\n toggle: false,\r\n });\r\n collapeItem.hide();\r\n }\r\n\r\n toggleMenuButtons();\r\n }\r\n };\r\n\r\n for (const collapse of collapses) {\r\n collapse.addEventListener('show.bs.collapse', () => {\r\n toggleCollapse(collapse);\r\n toggleBackdropOpacity();\r\n });\r\n listeners.push([\r\n collapse,\r\n 'show.bs.collapse',\r\n () => {\r\n toggleBackdropOpacity();\r\n toggleCollapse(collapse);\r\n },\r\n ]);\r\n\r\n collapse.addEventListener('hidden.bs.collapse', () => {\r\n toggleCollapse(collapse);\r\n toggleBackdropOpacity();\r\n });\r\n listeners.push([\r\n collapse,\r\n 'hide.bs.collapse',\r\n () => {\r\n toggleBackdropOpacity();\r\n toggleCollapse(collapse);\r\n },\r\n ]);\r\n }\r\n\r\n if (pageLayoutContainer) {\r\n pageLayoutContainer.addEventListener('click', () => closeAllCollapses(collapses));\r\n listeners.push([pageLayoutContainer, 'click', () => closeAllCollapses(collapses)]);\r\n }\r\n }\r\n}\r\n\r\nexport function unMountNavigationBar(\r\n listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>\r\n) {\r\n for (const [element, event, listener] of listeners) {\r\n element.removeEventListener(event, listener);\r\n }\r\n}\r\n","import { type App } from '~/app';\r\nimport { defineAsyncComponent } from 'vue';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Ribbon Bar Component');\r\n app.vueApp.component('stockland-hub-ribbon-bar', defineAsyncComponent(async () => import(\"./RibbonBar.vue\")));\r\n const listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]> = [];\r\n\r\n app.afterMount\r\n .then(() => {\r\n mountRibbonBar(listeners);\r\n })\r\n .catch((error) => {\r\n throw new Error('[Stockland FE] Unable to register Stockland Ribbon Bar Component', error);\r\n });\r\n\r\n return function destroyRibbonBar() {\r\n unMountRibbonBar(listeners);\r\n\r\n app.logger.debug('[DXA] Ribbon Bar Component destroyed');\r\n };\r\n};\r\n\r\nfunction mountRibbonBar(\r\n listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>,\r\n root: HTMLElement | null = null\r\n) {\r\n let rootNode: Document | HTMLElement = document;\r\n if (root) rootNode = root;\r\n\r\n const ribbonBars = rootNode.querySelectorAll('.ribbon-bar');\r\n for (const ribbonBar of ribbonBars) {\r\n const dropdowns = ribbonBar.querySelectorAll('.dropdown');\r\n\r\n handleHalcyonCommunitiesDropdown(ribbonBar, listeners);\r\n\r\n checkCurrentDay(ribbonBar)\r\n\r\n disableDropdownMenuCloseOnclick(ribbonBar)\r\n closeChangeCentreModal(ribbonBar)\r\n\r\n for (const dropdown of dropdowns) {\r\n // Showing the menu sub items on hover\r\n const dropdownHoverTriggers = dropdown.querySelectorAll('.dropdown-hover-trigger');\r\n\r\n for (const dropdownHoverTrigger of dropdownHoverTriggers) {\r\n dropdownHoverTrigger.addEventListener('mouseenter', () => forceShowDropdown(dropdown));\r\n listeners.push([dropdownHoverTrigger, 'mouseenter', () => forceShowDropdown(dropdown)]);\r\n\r\n dropdown.addEventListener('mouseleave', () => forceCloseDropdown(dropdown));\r\n listeners.push([dropdown, 'mouseleave', () => forceCloseDropdown(dropdown)]);\r\n }\r\n\r\n dropdown.addEventListener('show.bs.dropdown', () => toggleDropdownActiveStyles(dropdown));\r\n listeners.push([dropdown, 'show.bs.dropdown', () => toggleDropdownActiveStyles(dropdown)]);\r\n\r\n dropdown.addEventListener('hide.bs.dropdown', () => toggleDropdownActiveStyles(dropdown));\r\n listeners.push([dropdown, 'hide.bs.dropdown', () => toggleDropdownActiveStyles(dropdown)]);\r\n }\r\n }\r\n}\r\n\r\nexport function unMountRibbonBar(\r\n listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>\r\n) {\r\n for (const [element, event, listener] of listeners) {\r\n element.removeEventListener(event, listener);\r\n }\r\n}\r\n\r\nconst handleHalcyonCommunitiesDropdown = (ribbonBar: HTMLElement, listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>) => {\r\n // For Halcyon BU we are not going to use the Bootstrap scripting because popper is static and we can get better control without it\r\n const businessUnitDropdown = ribbonBar.querySelector('.business-unit-dropdown');\r\n if (businessUnitDropdown) {\r\n const businessUnitDropdownHoverTrigger = businessUnitDropdown.querySelector('.dropdown-hover-trigger');\r\n const dropdownMenu = businessUnitDropdown.querySelector('.dropdown-menu');\r\n if(businessUnitDropdownHoverTrigger && dropdownMenu){\r\n const showBUDropdown = () => {\r\n if (!dropdownMenu?.classList.contains('show')) {\r\n dropdownMenu?.classList.add('show');\r\n toggleDropdownActiveStyles(businessUnitDropdown);\r\n }\r\n }\r\n\r\n const hideBUDropdown = () => {\r\n if (dropdownMenu?.classList.contains('show')) {\r\n dropdownMenu?.classList.remove('show');\r\n toggleDropdownActiveStyles(businessUnitDropdown);\r\n }\r\n }\r\n\r\n businessUnitDropdown.addEventListener('mouseenter', showBUDropdown);\r\n businessUnitDropdown.addEventListener('mouseleave', hideBUDropdown);\r\n businessUnitDropdownHoverTrigger.addEventListener('focus', showBUDropdown);\r\n businessUnitDropdownHoverTrigger.addEventListener('blur', hideBUDropdown);\r\n listeners.push(\r\n [businessUnitDropdown, 'mouseenter', showBUDropdown],\r\n [businessUnitDropdown, 'mouseleave', hideBUDropdown],\r\n [businessUnitDropdownHoverTrigger, 'focus', showBUDropdown],\r\n [businessUnitDropdownHoverTrigger, 'blur', hideBUDropdown]\r\n );\r\n }\r\n\r\n const businessUnitSubItems = businessUnitDropdown.querySelectorAll('.dropdown-sub-item');\r\n const businessUnitSubItemsDescriptions =\r\n businessUnitDropdown.querySelectorAll('.business-unit-description');\r\n\r\n // On business unit hover update the description text that is displayed\r\n const updateBusinessUnitText = (businessUnitSubitem: HTMLElement) => {\r\n const businessUnitSubItemId = businessUnitSubitem.dataset.buId;\r\n\r\n for (const description of businessUnitSubItemsDescriptions) {\r\n description.classList.remove('active-businessunit-description');\r\n description.classList.add('hidden');\r\n\r\n if (description.dataset.buId === businessUnitSubItemId) {\r\n description.classList.remove('hidden');\r\n description.classList.add('active-businessunit-description');\r\n }\r\n }\r\n };\r\n\r\n for (const businessUnitSubitem of businessUnitSubItems) {\r\n businessUnitSubitem.addEventListener('mouseover', () => updateBusinessUnitText(businessUnitSubitem));\r\n listeners.push([businessUnitSubitem, 'mouseover', () => updateBusinessUnitText(businessUnitSubitem)]);\r\n }\r\n }\r\n}\r\n\r\n// Forces dropdown open, called on mouse enter dropdown menu item event\r\nconst forceShowDropdown = (dropdown: Element) => {\r\n const dropdownMenu = dropdown.querySelector('.dropdown-menu');\r\n if (!dropdownMenu?.classList.contains('show')) {\r\n const dropdownToggle = dropdown.querySelector('.dropdown-toggle');\r\n dropdownToggle?.click();\r\n }\r\n};\r\n\r\n// Forces dropdown closed, called on mouse leave dropdown event\r\nconst forceCloseDropdown = (dropdown: Element) => {\r\n const dropdownMenu = dropdown.querySelector('.dropdown-menu');\r\n if (dropdownMenu?.classList.contains('show')) {\r\n const dropdownToggle = dropdown.querySelector('.dropdown-toggle');\r\n dropdownToggle?.click();\r\n }\r\n};\r\n\r\n// Called when the dropdowns are shown or hidden and runs helper functions\r\nconst toggleDropdownActiveStyles = (dropdown: HTMLElement) => {\r\n const dropdownChevron = dropdown.querySelector('.dropdown-chevron');\r\n dropdownChevron?.classList.toggle('rotate-180');\r\n\r\n // For menu items, when dropdown is toggled, toggle active class to add or remove chevron and text colour white for menu items\r\n dropdown.classList.toggle('active');\r\n toggleBackdropOpacity();\r\n};\r\n\r\n// Toggles background opacity to the main content parts of the page\r\nconst toggleBackdropOpacity = () => {\r\n const pageLayoutContainer = document.querySelectorAll('.overlay-container');\r\n for (const x of pageLayoutContainer) {\r\n const overlayElement = x?.querySelectorAll('.overlay-transition');\r\n if (overlayElement && overlayElement.length > 0) {\r\n for (const oElement of overlayElement) {\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\r\n oElement?.classList.toggle('transition-overlay-60');\r\n }\r\n } else {\r\n const divelem = document.createElement('div');\r\n divelem.classList.add('overlay-transition');\r\n divelem.classList.add('transition-overlay-60');\r\n x?.append(divelem);\r\n }\r\n }\r\n};\r\n\r\n// For Shopping Centre opening hours dropdown to select current day and highlight it\r\nconst checkCurrentDay = (ribbonBar: HTMLElement) =>{\r\n const openingHoursArray = ribbonBar.querySelectorAll('.opening-hours-text');\r\n if(openingHoursArray){\r\n const currentDay = new Date().getDay()\r\n for (const [index, openingHours] of openingHoursArray.entries()) {\r\n if (index === currentDay - 1) {\r\n openingHours.classList.add('text-primary-accent-text')\r\n } \r\n }\r\n }\r\n}\r\n\r\nconst disableDropdownMenuCloseOnclick = (ribbonBar: HTMLElement) => {\r\n const dropdownMenus = ribbonBar.querySelectorAll('.dropdown-menu');\r\n\r\n for (const menu of dropdownMenus) {\r\n menu.addEventListener('click', function(event) {\r\n event.stopPropagation();\r\n });\r\n }\r\n}\r\n\r\nconst closeChangeCentreModal = (ribbonBar: HTMLElement) => {\r\n const closeCentreModalButton = ribbonBar.querySelector('.close-change-centre-button');\r\n const centreModal = ribbonBar.querySelector('.rtc-change-centre-modal');\r\n const centreModalButton = ribbonBar.querySelector('.change-centre-dropdown-button');\r\n \r\n if (closeCentreModalButton && centreModal &¢reModalButton) {\r\n const iconElement = centreModalButton.querySelector('.icon');\r\n closeCentreModalButton.addEventListener('click', () => {\r\n centreModal.classList.remove('show'); \r\n centreModal.setAttribute('aria-expanded', 'false'); \r\n centreModalButton.classList.remove('show'); \r\n centreModalButton.setAttribute('aria-expanded', 'false'); \r\n iconElement?.classList.remove('rotate-180');\r\n toggleBackdropOpacity()\r\n });\r\n }\r\n};","/**\n * Hamburger Menu Component\n */\n\nimport { defineAsyncComponent } from 'vue';\n\nimport { type App } from '~/app';\n\nexport default (app: App) => {\n app.logger.debug('[Stockland FE] Initialise Stockland Hamburger Menu Component');\n app.vueApp.component('hamburger-menu', defineAsyncComponent(async () => import(\"./HamburgerMenu.vue\")));\n};\n","import { App } from '~/app';\r\nimport { isMobile } from '@root/src/framework/scripts/helpers/browser/media-query';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Image Area Focus Component');\r\n\r\n const listeners: Array<[Element | Window, string, EventListenerOrEventListenerObject]> = [];\r\n\r\n app.afterMount\r\n\r\n .then(() => {\r\n mountImageAreaFocus(listeners);\r\n })\r\n .catch((error) => {\r\n throw new Error('[Stockland FE] Unable to register Stockland Image Area Focus Component', error);\r\n });\r\n\r\n return function destroyImageAreaFocus() {\r\n unMountImageAreaFocus(listeners);\r\n\r\n app.logger.debug('[DXA] Image Area Focus Component destroyed');\r\n };\r\n};\r\n\r\nfunction mountImageAreaFocus(\r\n listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>,\r\n root: HTMLElement | null = null\r\n) {\r\n let rootNode: Document | HTMLElement = document;\r\n if (root) rootNode = root;\r\n\r\n const imageAreaFocus = rootNode.querySelectorAll('.image-area-focus')\r\n\r\n imageAreaFocus.forEach((area)=> {\r\n const hoverItem = area.querySelectorAll('.hover-item')\r\n const hoverTarget = area.querySelectorAll('.hover-target')\r\n const buildingImages = area.querySelectorAll('.building-images')\r\n\r\n const preventFirstMobileLinkClick = () => {\r\n const buildingLinks = area.querySelectorAll('.building-link')\r\n buildingLinks.forEach((link)=>{\r\n if (isMobile(1025)){\r\n let firstClick = true\r\n link?.addEventListener('click', (e)=>{\r\n if (firstClick) {\r\n e.preventDefault()\r\n firstClick = false;\r\n } else{\r\n firstClick = true;\r\n }\r\n })\r\n }\r\n })\r\n }\r\n\r\n preventFirstMobileLinkClick()\r\n\t\t\r\n window.addEventListener('resize', preventFirstMobileLinkClick);\r\n listeners.push([window, 'resize', preventFirstMobileLinkClick]);\r\n\r\n let activeAutoPlay = 0;\r\n let intervalCount = 0;\r\n const autoPlayInterval = setInterval(() => {\r\n buildingImages.forEach((building)=>{\r\n //Show hovered building\r\n if(building.dataset.group === buildingImages[activeAutoPlay].dataset.group ){\r\n building.classList.remove('opacity-0','lg:opacity-0')\r\n } else {\r\n building.classList.remove('opacity-100')\r\n building.classList.remove('lg:opacity-100')\r\n building.classList.add('opacity-0')\r\n }\r\n })\r\n hoverTarget.forEach((target)=> {\r\n //Hide building 1 mobile text and show hovered text\r\n if(target.dataset.group === hoverTarget[activeAutoPlay].dataset.group) {\r\n\t\t\t\t\t target.classList.remove('hidden','lg:hidden')\r\n }else{\r\n target.classList.add('hidden')\r\n }\r\n })\r\n activeAutoPlay = intervalCount%buildingImages.length;\r\n intervalCount++;\r\n }, 5000);\r\n\r\n hoverItem.forEach((item)=> {\r\n item.addEventListener('mouseover', ()=>{\r\n clearInterval(autoPlayInterval);\r\n buildingImages.forEach((building)=>{\r\n //Show hovered building\r\n if(building.dataset.group === 'mpark-group-1' && building.dataset.group === item.dataset.group){\r\n building.classList.add('opacity-100','lg:opacity-100')\r\n building.classList.remove('opacity-0')\r\n } else if(building.dataset.group === item.dataset.group ){\r\n building.classList.remove('opacity-0','lg:opacity-0')\r\n } else {\r\n building.classList.remove('opacity-100')\r\n building.classList.remove('lg:opacity-100')\r\n building.classList.add('opacity-0')\r\n }\r\n })\r\n\r\n hoverTarget.forEach((target)=> {\r\n //Hide building 1 mobile text and show hovered text\r\n if(item.dataset.group !== 'mpark-group-1' && target.dataset.group === 'mpark-group-1' ){\r\n target.classList.add('hidden','lg:hidden')\r\n }else if(target.dataset.group === item.dataset.group) {\r\n\t\t\t\t\t\t\t target.classList.remove('hidden','lg:hidden')\r\n }else{\r\n target.classList.add('hidden')\r\n }\r\n })\r\n })\r\n })\r\n\r\n })\r\n}\r\n\r\nfunction unMountImageAreaFocus(\r\n listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>\r\n) {\r\n for (const [element, event, listener] of listeners) {\r\n element.removeEventListener(event, listener);\r\n }\r\n}","/**\r\n * Image Range Slider Component\r\n */\r\n\r\nimport { defineAsyncComponent } from 'vue';\r\n\r\nimport { type App } from '~/app';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Image Range Slider Component');\r\n app.vueApp.component('image-range-slider', defineAsyncComponent(async () => import(\"./ImageRangeSlider.vue\")));\r\n};\r\n","/**\r\n * Investor Centre\r\n */\r\n// eslint-disable-next-line simple-import-sort/imports\r\nimport { App } from '~/app';\r\n\r\nimport { defineAsyncComponent } from 'vue';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Investor Centre Component');\r\n\t app.vueApp.component('investor-centre', defineAsyncComponent(async () => import(\"./InvestorCentre.vue\")));\r\n\r\n\t // Tabs\r\n\t app.vueApp.component('asx-announcements', defineAsyncComponent(async () => import(\"./asx-announcements/AsxAnnouncements.vue\")));\r\n\t app.vueApp.component('property-portfolio', defineAsyncComponent(async () => import(\"./property-portfolio/PropertyPortfolio.vue\")));\r\n\t app.vueApp.component('results-reports', defineAsyncComponent(async () => import(\"./results-reports/ResultsReports.vue\")));\r\n\t app.vueApp.component('presentations', defineAsyncComponent(async () => import(\"./presentations/Presentations.vue\")));\r\n};\r\n","/**\r\n * Carousel Component\r\n * @module patterns/components/banners/asset-hero-banner\r\n */\r\n\r\nimport { type App } from '~/app';\r\n\r\nimport JsController from '../../js-controller';\r\n\r\nexport default (app: App) => {\r\n\r\n const controller = new JsController(app, 'live-chat-monitoring');\r\n controller.addMountFunction(() => {\r\n mountComponent(controller);\r\n })\r\n\r\n return controller.init();\r\n}\r\n\r\n\r\n// eslint-disable-next-line @typescript-eslint/naming-convention, @typescript-eslint/no-explicit-any\r\ndeclare let LCM: any;\r\n\r\nfunction hideLcmButton()\r\n{\r\n const se:any = document.createElement('script'); \r\n se.type = 'text/javascript';\r\n se.async = true;\r\n se.src = '//storage.googleapis.com/livechatmonitoring/js/fdeea3cd-dce4-407a-82b8-fdbd21e10562.js';\r\n let done = false;\r\n se.onload = se.onreadystatechange = function () {\r\n if (!done && (!this.readyState || this.readyState === 'loaded' || this.readyState === 'complete')) {\r\n done = true;\r\n LCM.hideButton();\r\n }\r\n };\r\n\r\n let s = document.getElementsByTagName('script')[0]; s.parentNode?.insertBefore(se, s);\r\n}\r\n\r\nexport function mountComponent( controller: JsController ) {\r\n const element = document.querySelector('#live-chat-monitoring');\r\n const script = document.createElement('script')\r\n script.src = 'https://www.widgetinstall.com/plugin/chat.js?rand='+Math.random()\r\n script.id= 'chat_js_lib';\r\n script.dataset.key='72ZBah4PK4n13A146SGC';\r\n // now append the script into HEAD, it will fetched and executed\r\n if(element){\r\n element.append(script);\r\n if(element?.dataset.hideButton==='true')\r\n {\r\n hideLcmButton();\r\n }\r\n }\r\n}\r\n\r\n","/* eslint-disable import/no-unassigned-import */\r\n/* eslint-disable @typescript-eslint/no-unsafe-return */\r\n/* eslint-disable @typescript-eslint/no-unsafe-call */\r\n/* eslint-disable @typescript-eslint/naming-convention */\r\n\r\nimport { type App } from '~/app';\r\n\r\nimport JsController from '../../js-controller';\r\n\r\nimport './salesforce-chat.scss';\r\n\r\nexport default (app: App) => {\r\n\r\n const controller = new JsController(app, 'salesforce-chat');\r\n controller.addMountFunction(() => {\r\n mountComponent(controller);\r\n })\r\n\r\n return controller.init();\r\n}\r\n\r\ndeclare let embedded_svc:any;\r\ndeclare const window: any;\r\n\r\nexport function mountComponent( controller: JsController ) {\r\n const salesforceElement= document.querySelector(\"#salesforce-chat\");\r\n if(salesforceElement){\r\n const salesforceOrgId= salesforceElement.dataset.salesforceOrgId;\r\n const securedDomain= salesforceElement.dataset.securedDomain;\r\n const publicDomain= salesforceElement.dataset.publicDomain;\r\n const scriptLocation= salesforceElement.dataset.scriptLocation??\"\";\r\n const apiEndpoint= salesforceElement.dataset.apiEndpoint;\r\n const apiContentEndpoint= salesforceElement.dataset.apiContentEndpoint;\r\n const chatButtonId= salesforceElement.dataset.chatButtonId;\r\n const deploymentId= salesforceElement.dataset.deploymentId;\r\n const eswDevelopmentName= salesforceElement.dataset.eswDevName;\r\n const developerName= salesforceElement.dataset.developerName;\r\n const chatAvatar= salesforceElement.dataset.chatAvatar;\r\n const defaultMinimizedText= salesforceElement.dataset.defaultMinimizedText;\r\n const disabledDefaultMinimizedText= salesforceElement.dataset.disableMinimizedText;\r\n const eswUrl= salesforceElement.dataset.eswUrl??\"https://service.force.com\";\r\n\r\n const initESW = function(gslbBaseURL:string|null) {\r\n embedded_svc.settings.displayHelpButton = true; //Or false\r\n embedded_svc.settings.language = ''; //For example, enter 'en' or 'en-US'\r\n\r\n embedded_svc.settings.defaultMinimizedText = defaultMinimizedText; //(Defaults to Chat with an Expert)\r\n if(chatAvatar)\r\n {\r\n embedded_svc.settings.chatbotAvatarImgURL = chatAvatar;\r\n }\r\n \r\n if(disabledDefaultMinimizedText)\r\n {\r\n embedded_svc.settings.disabledMinimizedText = disabledDefaultMinimizedText; \r\n }\r\n\r\n embedded_svc.settings.extraPrechatFormDetails = [{\r\n \"label\": \"URL\",\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\r\n \"value\": window.location.href,\r\n \"displayToAgent\": true,\r\n \"transcriptFields\": [\"URL__c\"]\r\n }];\r\n \r\n embedded_svc.settings.enabledFeatures = ['LiveAgent'];\r\n embedded_svc.settings.entryFeature = 'LiveAgent';\r\n\r\n embedded_svc.init(\r\n securedDomain,\r\n publicDomain,\r\n gslbBaseURL,\r\n salesforceOrgId,\r\n developerName,\r\n {\r\n \"baseLiveAgentContentURL\": apiContentEndpoint,\r\n \"deploymentId\": deploymentId,\r\n \"buttonId\": chatButtonId,\r\n \"baseLiveAgentURL\": apiEndpoint,\r\n \"eswLiveAgentDevName\":eswDevelopmentName,\r\n \"isOfflineSupportEnabled\": false\r\n }\r\n );\r\n };\r\n\r\n if (window.embedded_svc) {\r\n initESW(eswUrl);\r\n } else {\r\n const s = document.createElement('script');\r\n s.setAttribute('src', scriptLocation);\r\n s.addEventListener('load', function() {\r\n initESW(null);\r\n });\r\n\r\n document.body.append(s);\r\n }\r\n \r\n //transforming sitecore js to proper ts here\r\n (function () {\r\n\r\n const closeInviteElement = document.querySelector('#closeInvite');\r\n const rejectInviteElement = document.querySelector('#rejectInvite');\r\n const acceptInviteElement = document.querySelector('#acceptInvite');\r\n\r\n if(closeInviteElement)\r\n controller.addListener(closeInviteElement, \"click\", () => embedded_svc.inviteAPI.inviteButton.rejectInvite())\r\n if(rejectInviteElement)\r\n controller.addListener(rejectInviteElement, \"click\", () => embedded_svc.inviteAPI.inviteButton.rejectInvite())\r\n if(acceptInviteElement)\r\n controller.addListener(acceptInviteElement, \"click\", () => embedded_svc.inviteAPI.inviteButton.acceptInvite())\r\n\r\n const targetNode = document.querySelector(\"#snapins_invite\");\r\n if(targetNode){\r\n const config = { attributes: true, childList: false, subtree: false };\r\n\r\n const callback = () => {\r\n const snapinsInvite = document.querySelector('#snapins_invite');\r\n if(snapinsInvite)\r\n snapinsInvite.style.position='fixed';\r\n\r\n const serviceIcon = document.querySelector('.embeddedServiceIcon');\r\n if(serviceIcon)\r\n serviceIcon.dataset.icon= \"💬\";\r\n };\r\n\r\n const observer = new MutationObserver(callback);\r\n observer.observe(targetNode, config);\r\n }\r\n })();\r\n }\r\n}\r\n","/**\r\n * Carousel Component\r\n * @module patterns/components/banners/asset-hero-banner\r\n */\r\n\r\nimport { type App } from '~/app';\r\n\r\nimport JsController from '../../js-controller';\r\nimport { f } from 'msw/lib/glossary-58eca5a8';\r\n\r\ndeclare let embedded_svc: any;\r\ndeclare let embeddedservice_bootstrap: any;\r\ndeclare const window: any;\r\n\r\nexport default (app: App) => {\r\n\r\n const controller = new JsController(app, 'salesforce-chat-MIAW');\r\n controller.addMountFunction(() => {\r\n mountComponent(controller);\r\n })\r\n\r\n return controller.init();\r\n}\r\n\r\nexport function mountComponent( controller: JsController ) {\r\n \r\n const salesforceElement= document.querySelector(\"#salesforce-chat-miaw\");\r\n const chatInitiator = document.querySelector(\"#chat-initiator\");\r\n const chatDialog = document.querySelector(\"#custom-chat-dialog\");\r\n const loadingIcon = document.querySelector(\"#loading-icon\");\r\n const closeChatIcon = document.querySelector(\"#chat-close\");\r\n\r\n if(salesforceElement){ \r\n const chatId= salesforceElement.dataset.chatId;\r\n const deploymentName= salesforceElement.dataset.deploymentName;\r\n const deploymentURL= salesforceElement.dataset.deploymentUrl;\r\n const scrtURL= salesforceElement.dataset.scrtUrl;\r\n const scriptSource= salesforceElement.dataset.scriptSource??\"\";\r\n const projectId= salesforceElement.dataset.projectId;\r\n \r\n const sourceURL = window.location.href ;\r\n let formattedUrl = sourceURL.split(\"?\")[0];\r\n formattedUrl = formattedUrl.substring(0, 99);\r\n \r\n function initEmbeddedMessaging() {\r\n try { \r\n window.addEventListener(\"onEmbeddedMessagingReady\", () => {\r\n console.log(\"Received the onEmbeddedMessagingReady event…\");\r\n \r\n // Send data to Salesforce\r\n embeddedservice_bootstrap.prechatAPI.setHiddenPrechatFields({\"BrowserURL\" : formattedUrl});\r\n embeddedservice_bootstrap.prechatAPI.setHiddenPrechatFields({\"ProjectId\" : projectId});\r\n \r\n });\r\n chatInitiator?.addEventListener(\"click\", () => {\r\n addToCookie(\"chatInitiatorClicked\", \"true\", 1);\r\n loadingIcon?.classList.remove(\"hidden\");\r\n embeddedservice_bootstrap.utilAPI.launchChat().then(function(){\r\n console.log(\"Chat Launched\");\r\n chatDialog?.classList.add(\"hidden\");\r\n })\r\n });\r\n\r\n closeChatIcon?.addEventListener(\"click\", () => {\r\n chatDialog?.classList.add(\"hidden\");\r\n addToCookie(\"chatInitiatorClicked\", \"true\", 1);\r\n });\r\n\r\n \r\n window.addEventListener(\"onEmbeddedMessagingWindowMaximized\", () => {\r\n chatDialog?.classList.add(\"hidden\");\r\n });\r\n embeddedservice_bootstrap.settings.language = 'en_US'; // For example, enter 'en' or 'en-US'\r\n\r\n embeddedservice_bootstrap.init(\r\n chatId,\r\n deploymentName,\r\n deploymentURL,\r\n {\r\n scrt2URL: scrtURL\r\n }\r\n ); \r\n \r\n } catch (err) {\r\n console.error('Error loading Embedded Messaging: ', err);\r\n }\r\n };\r\n\r\n function addToCookie(name:string, value:string, days:number) {\r\n let expires = \"\";\r\n if (days) {\r\n const date = new Date();\r\n date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));\r\n expires = \"; expires=\" + date.toUTCString();\r\n }\r\n document.cookie = name + \"=\" + value + expires + \"; path=/\";\r\n }\r\n \r\n function getCookie(name:string) {\r\n const nameEQ = name + \"=\";\r\n const ca = document.cookie.split(';');\r\n for(let i=0;i < ca.length;i++) {\r\n let c = ca[i];\r\n while (c.charAt(0)===' ') c = c.substring(1,c.length);\r\n if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length,c.length);\r\n }\r\n return null;\r\n }\r\n\r\n const s = document.createElement('script');\r\n s.type = 'text/javascript';\r\n s.setAttribute('src', scriptSource);\r\n s.onload = function(){ \r\n initEmbeddedMessaging();\r\n if(getCookie(\"chatInitiatorClicked\") === \"true\") {\r\n chatDialog?.classList.add(\"hidden\");\r\n }\r\n else { \r\n setTimeout(() => {\r\n chatDialog?.classList.remove(\"hidden\");\r\n }, 3000);\r\n }\r\n }\r\n document.body.append(s);\r\n }\r\n} ","/**\r\n * Location Map Search\r\n */\r\n\r\nimport { defineAsyncComponent } from 'vue';\r\n\r\nimport { type App } from '~/app';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland LLC Home Viz Components');\r\n app.vueApp.component('llc-home-viz-full', defineAsyncComponent(async () => import(\"./llc-home-viz-full/LlcHomeVizFull.vue\")));\r\n app.vueApp.component('llc-home-viz-mini', defineAsyncComponent(async () => import(\"./llc-home-viz-mini/LlcHomeVizMini.vue\")));\r\n app.vueApp.component('llc-home-viz-step-header', defineAsyncComponent(async () => import(\"./llc-home-viz-step-header/LlcHomeVizStepHeader.vue\")));\r\n app.vueApp.component('llc-home-viz-steps', defineAsyncComponent(async () => import(\"./llc-home-viz-steps/LlcHomeVizSteps.vue\")));\r\n app.vueApp.component('llc-home-viz-buttons', defineAsyncComponent(async () => import(\"./llc-home-viz-buttons/LlcHomeVizButtons.vue\")));\r\n app.vueApp.component('llc-home-viz-full-step-1', defineAsyncComponent(async () => import(\"./llc-home-viz-full-step-1/LlcHomeVizFullStep_1.vue\")));\r\n app.vueApp.component('llc-home-viz-full-step-1-through-5', defineAsyncComponent(async () => import(\"./llc-home-viz-full-step-1-through-5/LlcHomeVizFullStep_1Through5.vue\")));\r\n app.vueApp.component('llc-home-viz-full-step-2', defineAsyncComponent(async () => import(\"./llc-home-viz-full-step-2/LlcHomeVizFullStep_2.vue\")));\r\n app.vueApp.component('llc-home-viz-full-step-3', defineAsyncComponent(async () => import(\"./llc-home-viz-full-step-3/LlcHomeVizFullStep_3.vue\")));\r\n app.vueApp.component('llc-home-viz-full-step-4', defineAsyncComponent(async () => import(\"./llc-home-viz-full-step-4/LlcHomeVizFullStep_4.vue\")));\r\n app.vueApp.component('llc-home-viz-full-step-5', defineAsyncComponent(async () => import(\"./llc-home-viz-full-step-5/LlcHomeVizFullStep_5.vue\")));\r\n app.vueApp.component('llc-home-viz-features', defineAsyncComponent(async () => import(\"./llc-home-viz-features/LlcHomeVizFeatures.vue\")));\r\n};\r\n","/**\r\n * URL Utils\r\n */\r\n\r\nimport queryString from 'query-string';\r\n\r\nexport * from 'query-string';\r\n\r\nexport const parametise = (parameters: {} = {}): string =>\r\n queryString.stringify(parameters, {\r\n skipEmptyString: true,\r\n });\r\n\r\n\r\nexport const getQuery = (url = window.location.search): Record => queryString.parse(url);\r\n\r\nexport const updateUrl = (url = ''): void => window.history.pushState('', '', `?${url}`);\r\n\r\nexport const parseQuery = (uri = ''): {} => queryString.parseUrl(uri);\r\n\r\nexport const extractQuery = (uri = ''): string => queryString.extract(uri);\r\n\r\n// TODO: see if query-string can be used to do this\r\nexport const getQueryStringUrl = (url: string, skipQuery: string): string => {\r\n if (skipQuery) {\r\n const queryIndex = url.indexOf('?');\r\n if (queryIndex > -1) {\r\n const existingQuery = url.slice(queryIndex).indexOf('=');\r\n return existingQuery > -1 ? `${url}&${skipQuery}` : `${url}${skipQuery}`;\r\n } else {\r\n return `${url}?${skipQuery}`;\r\n }\r\n } else {\r\n return url;\r\n }\r\n};\r\n\r\nexport const removeQueryString = (url: string): string => {\r\n if (url.includes('?')) {\r\n const queryIndex = url.indexOf('?');\r\n return url.slice(0, queryIndex);\r\n } else {\r\n return url;\r\n }\r\n};\r\n\r\nexport const generateQueryString = (object: any): string => {\r\n for (const key in object) {\r\n if (typeof object[key] === 'object') {\r\n object[key] = JSON.stringify(object[key]);\r\n }\r\n }\r\n\r\n return new URLSearchParams(object as Record).toString();\r\n};\r\n\r\nexport const generateUrlWithQuery = (baseUrl: string, queryParameters: object) => {\r\n const queryString = generateQueryString(queryParameters);\r\n return `${baseUrl}${baseUrl.includes(\"?\") ? \"&\" : \"?\"}${queryString}`;\r\n}\r\n","import { reactive, Ref,ref, toRefs } from 'vue';\r\n\r\ninterface BaseApi {\r\n\tdata: T | null;\r\n\terror: any;\r\n hasLoaded: boolean;\r\n\tisLoading: boolean;\r\n}\r\n\r\nexport function useApiGet() {\r\n const state = reactive>({\r\n data: null,\r\n error: null,\r\n hasLoaded: false,\r\n isLoading: false,\r\n });\r\n\r\n const getData = async (url: string): Promise => {\r\n state.isLoading = true;\r\n state.error = null;\r\n\r\n const options = {\r\n headers: {\r\n //'Access-Control-Allow-Origin': '*',\r\n },\r\n };\r\n\r\n try {\r\n state.data = await fetch(url, options).then(async (response) => response.json());\r\n } catch (error) {\r\n state.error = error;\r\n } finally {\r\n state.hasLoaded = true;\r\n state.isLoading = false;\r\n }\r\n };\r\n\r\n return {\r\n ...toRefs(state),\r\n getData,\r\n };\r\n}\r\n\r\nexport function useApiPost() {\r\n const state = reactive>({\r\n data: null,\r\n error: null,\r\n hasLoaded: false,\r\n isLoading: false,\r\n });\r\n\r\n const postData = async (url: string, body: Record): Promise => {\r\n state.isLoading = true;\r\n state.error = null;\r\n\r\n const options = {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify(body),\r\n };\r\n\r\n try {\r\n state.data = await fetch(url, options).then(async (response) => response.json());\r\n } catch (error) {\r\n state.error = error;\r\n } finally {\r\n state.isLoading = false;\r\n state.hasLoaded = true;\r\n }\r\n };\r\n\r\n return {\r\n ...toRefs(state),\r\n postData,\r\n };\r\n}\r\n","\r\n\r\n\r\n\r\n","/**\r\n * Location Map Search\r\n */\r\n\r\nimport { type App } from '~/app';\r\n\r\nimport LlcMpcMapContainer from './LlcMpcMapContainer.vue';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Map Container Components');\r\n app.vueApp.component('llc-mpc-map-container', LlcMpcMapContainer);\r\n};\r\n","\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\n\r\n","import { Library, Loader } from '@googlemaps/js-api-loader';\r\n\r\nclass GoogleMapsLibrary {\r\n private readonly loader : Loader;\r\n private _mapsLibrary: Promise | undefined;\r\n private _geocodingLibrary: Promise | undefined;\r\n private _placesLibrary: Promise | undefined;\r\n\t\r\n constructor() {\r\n this.loader = new Loader({\r\n apiKey: \"AIzaSyDMUpYBzjBC698OdCqPMvehi3VshsYT7Ws\",\r\n version: \"quarterly\"\r\n });\r\n }\r\n\r\n async mapsLibrary() : Promise {\r\n if (this._mapsLibrary) return this._mapsLibrary;\r\n\r\n this._mapsLibrary = this.loadFunction(\"maps\");\r\n return this._mapsLibrary;\r\n }\r\n\r\n async geocodingLibrary() : Promise {\r\n if (this._geocodingLibrary) return this._geocodingLibrary;\r\n\r\n this._geocodingLibrary = this.loadFunction(\"geocoding\");\r\n return this._geocodingLibrary;\r\n }\r\n\r\n\r\n async placesLibrary() : Promise {\r\n if (this._placesLibrary) return this._placesLibrary;\r\n\r\n this._placesLibrary = this.loadFunction(\"places\");\r\n return this._placesLibrary;\r\n }\r\n\r\n async loadFunction(libraryName: Library) : Promise {\r\n await this.loader.importLibrary(libraryName)\r\n return await google.maps.importLibrary(libraryName) as unknown as T;\r\n }\r\n}\r\n\r\nconst instance = new GoogleMapsLibrary();\r\n\r\nexport { instance as GoogleMapsLibrary }","export default \"data:image/svg+xml,%3csvg%20width='36'%20height='36'%20fill='%232a6df6'%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2036%2036'%3e%3ccircle%20cx='18'%20cy='18'%20opacity='1'%20r='18'%20/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20width='40'%20height='54'%20viewBox='0%200%2040%2054'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M20%2053.8071L18.65%2052.2643C17.8786%2051.3%200.328613%2030.2786%200.328613%2019.6714C0.328613%2014.4542%202.40113%209.45074%206.09024%205.76163C9.77935%202.07252%2014.7829%200%2020%200C25.2172%200%2030.2207%202.07252%2033.9098%205.76163C37.599%209.45074%2039.6715%2014.4542%2039.6715%2019.6714C39.6715%2029.8929%2023.2786%2049.95%2021.35%2052.2643L20%2053.8071ZM20%201.92857C15.2943%201.92857%2010.7814%203.7979%207.45395%207.12533C4.12652%2010.4528%202.25719%2014.9657%202.25719%2019.6714C2.25719%2027.5786%2013.8286%2043.3929%2020%2050.9143C26.1715%2043.3929%2037.7429%2027.3857%2037.7429%2019.6714C37.7429%2014.9657%2035.8736%2010.4528%2032.5461%207.12533C29.2187%203.7979%2024.7057%201.92857%2020%201.92857Z'%20fill='white'/%3e%3cpath%20d='M20.0001%200.964355C15.0542%201.01457%2010.3251%203.00162%206.82768%206.49906C3.33023%209.99651%201.34318%2014.7256%201.29297%2019.6715C1.29297%2029.8929%2018.6501%2050.7215%2019.4215%2051.6858L20.0001%2052.2644L20.5787%2051.6858C21.3501%2050.7215%2038.7073%2029.8929%2038.7073%2019.6715C38.7073%2017.2148%2038.2234%2014.7822%2037.2833%2012.5126C36.3431%2010.2429%2034.9652%208.18067%2033.2281%206.44355C31.4909%204.70643%2029.4287%203.32847%2027.159%202.38835C24.8894%201.44823%2022.4568%200.964355%2020.0001%200.964355Z'%20fill='%232A6DF6'/%3e%3cg%20clip-path='url(%23clip0_26605_25920)'%3e%3cpath%20d='M29.6233%2018.3984H16.9791V17.0935C16.9791%2015.6778%2015.8165%2014.4825%2014.4411%2014.4825H10.5379C9.96862%2014.4825%209.4371%2014.6904%209.00761%2015.0304V11H8V29.2906H9.00761V26.1696H30.9924V29.2906H32V20.7738C32%2019.4639%2030.9345%2018.3984%2029.6246%2018.3984H29.6233ZM9.00761%2017.0935C9.00761%2016.2396%209.72301%2015.4902%2010.5379%2015.4902H14.4411C15.256%2015.4902%2015.9715%2016.2396%2015.9715%2017.0935V18.3984H9.00761V17.0935ZM9.00761%2019.406H29.6233C30.3777%2019.406%2030.9911%2020.0194%2030.9911%2020.7738V25.162H9.00761V19.406Z'%20fill='white'/%3e%3c/g%3e%3cdefs%3e%3cclipPath%20id='clip0_26605_25920'%3e%3crect%20width='24'%20height='24'%20fill='white'%20transform='translate(8%208)'/%3e%3c/clipPath%3e%3c/defs%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20width='32'%20height='32'%20viewBox='0%200%2032%2032'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M15.9998%200.457153C12.9991%200.457153%2010.1213%201.64919%207.99942%203.77103C5.87758%205.89287%204.68555%208.7707%204.68555%2011.7714C4.68555%2017.9429%2015.1998%2030.5143%2015.657%2031.0857L15.9998%2031.5429L16.3427%2031.0857C16.7998%2030.5143%2027.3141%2017.9429%2027.3141%2011.7714C27.3141%208.7707%2026.1221%205.89287%2024.0002%203.77103C21.8784%201.64919%2019.0006%200.457153%2015.9998%200.457153Z'%20fill='black'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20width='32'%20height='32'%20viewBox='0%200%2032%2032'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M15.9998%200.457153C12.9991%200.457153%2010.1213%201.64919%207.99942%203.77103C5.87758%205.89287%204.68555%208.7707%204.68555%2011.7714C4.68555%2017.9429%2015.1998%2030.5143%2015.657%2031.0857L15.9998%2031.5429L16.3427%2031.0857C16.7998%2030.5143%2027.3141%2017.9429%2027.3141%2011.7714C27.3141%208.7707%2026.1221%205.89287%2024.0002%203.77103C21.8784%201.64919%2019.0006%200.457153%2015.9998%200.457153Z'%20fill='%232A6DF6'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20width='32'%20height='32'%20viewBox='0%200%2032%2032'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M15.9998%200.457153C12.9991%200.457153%2010.1213%201.64919%207.99942%203.77103C5.87758%205.89287%204.68555%208.7707%204.68555%2011.7714C4.68555%2017.9429%2015.1998%2030.5143%2015.657%2031.0857L15.9998%2031.5429L16.3427%2031.0857C16.7998%2030.5143%2027.3141%2017.9429%2027.3141%2011.7714C27.3141%208.7707%2026.1221%205.89287%2024.0002%203.77103C21.8784%201.64919%2019.0006%200.457153%2015.9998%200.457153Z'%20fill='%23314c8d'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20width='40'%20height='54'%20viewBox='0%200%2040%2054'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M20%2053.8071L18.65%2052.2643C17.8786%2051.3%200.328613%2030.2786%200.328613%2019.6714C0.328613%2014.4542%202.40113%209.45074%206.09024%205.76163C9.77935%202.07252%2014.7829%200%2020%200C25.2172%200%2030.2207%202.07252%2033.9098%205.76163C37.599%209.45074%2039.6715%2014.4542%2039.6715%2019.6714C39.6715%2029.8929%2023.2786%2049.95%2021.35%2052.2643L20%2053.8071ZM20%201.92857C15.2943%201.92857%2010.7814%203.7979%207.45395%207.12533C4.12652%2010.4528%202.25719%2014.9657%202.25719%2019.6714C2.25719%2027.5786%2013.8286%2043.3929%2020%2050.9143C26.1715%2043.3929%2037.7429%2027.3857%2037.7429%2019.6714C37.7429%2014.9657%2035.8736%2010.4528%2032.5461%207.12533C29.2187%203.7979%2024.7057%201.92857%2020%201.92857Z'%20fill='white'/%3e%3cpath%20d='M20.0001%200.964355C15.0542%201.01457%2010.3251%203.00162%206.82768%206.49906C3.33023%209.99651%201.34318%2014.7256%201.29297%2019.6715C1.29297%2029.8929%2018.6501%2050.7215%2019.4215%2051.6858L20.0001%2052.2644L20.5787%2051.6858C21.3501%2050.7215%2038.7073%2029.8929%2038.7073%2019.6715C38.7073%2017.2148%2038.2234%2014.7822%2037.2833%2012.5126C36.3431%2010.2429%2034.9652%208.18067%2033.2281%206.44355C31.4909%204.70643%2029.4287%203.32847%2027.159%202.38835C24.8894%201.44823%2022.4568%200.964355%2020.0001%200.964355Z'%20fill='%232A6DF6'/%3e%3cg%20clip-path='url(%23clip0_26605_25918)'%3e%3cpath%20d='M17.3118%2015.988H13.9956V19.5376H17.3118V15.988ZM16.4477%2018.6734H14.8598V16.8522H16.4477V18.6734Z'%20fill='white'/%3e%3cpath%20d='M21.9627%2015.988H18.6465V19.5376H21.9627V15.988ZM21.0986%2018.6734H19.5106V16.8522H21.0986V18.6734Z'%20fill='white'/%3e%3cpath%20d='M26.6126%2015.988H23.2964V19.5376H26.6126V15.988ZM25.7485%2018.6734H24.1606V16.8522H25.7485V18.6734Z'%20fill='white'/%3e%3cpath%20d='M17.3118%2010.8257H13.9956V14.3752H17.3118V10.8257ZM16.4477%2013.51H14.8598V11.6888H16.4477V13.51Z'%20fill='white'/%3e%3cpath%20d='M21.9627%2010.8257H18.6465V14.3752H21.9627V10.8257ZM21.0986%2013.51H19.5106V11.6888H21.0986V13.51Z'%20fill='white'/%3e%3cpath%20d='M26.6126%2010.8257H23.2964V14.3752H26.6126V10.8257ZM25.7485%2013.51H24.1606V11.6888H25.7485V13.51Z'%20fill='white'/%3e%3cpath%20d='M11.75%208V32H18.646H21.9623H28.8583V8H11.75ZM21.0981%2031.1358H19.5102V27.1348H21.0981V31.1358ZM27.9941%2031.1358H21.9623V26.2706H18.646V31.1358H12.6142V8.86416H27.9941V31.1358Z'%20fill='white'/%3e%3cpath%20d='M21.9627%2021.0725H18.6465V24.6221H21.9627V21.0725ZM21.0986%2023.7568H19.5106V21.9356H21.0986V23.7568Z'%20fill='white'/%3e%3cpath%20d='M17.3118%2021.0725H13.9956V24.6221H17.3118V21.0725ZM16.4477%2023.7568H14.8598V21.9356H16.4477V23.7568Z'%20fill='white'/%3e%3cpath%20d='M26.6126%2021.0725H23.2964V24.6221H26.6126V21.0725ZM25.7485%2023.7568H24.1606V21.9356H25.7485V23.7568Z'%20fill='white'/%3e%3c/g%3e%3cdefs%3e%3cclipPath%20id='clip0_26605_25918'%3e%3crect%20width='24'%20height='24'%20fill='white'%20transform='translate(8%208)'/%3e%3c/clipPath%3e%3c/defs%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20width='40'%20height='54'%20viewBox='0%200%2040%2054'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M20%2053.8071L18.65%2052.2643C17.8786%2051.3%200.328613%2030.2786%200.328613%2019.6714C0.328613%2014.4542%202.40113%209.45074%206.09024%205.76163C9.77935%202.07252%2014.7829%200%2020%200C25.2172%200%2030.2207%202.07252%2033.9098%205.76163C37.599%209.45074%2039.6715%2014.4542%2039.6715%2019.6714C39.6715%2029.8929%2023.2786%2049.95%2021.35%2052.2643L20%2053.8071ZM20%201.92857C15.2943%201.92857%2010.7814%203.7979%207.45395%207.12533C4.12652%2010.4528%202.25719%2014.9657%202.25719%2019.6714C2.25719%2027.5786%2013.8286%2043.3929%2020%2050.9143C26.1715%2043.3929%2037.7429%2027.3857%2037.7429%2019.6714C37.7429%2014.9657%2035.8736%2010.4528%2032.5461%207.12533C29.2187%203.7979%2024.7057%201.92857%2020%201.92857Z'%20fill='white'/%3e%3cpath%20d='M20.0001%200.964355C15.0542%201.01457%2010.3251%203.00162%206.82768%206.49906C3.33023%209.99651%201.34318%2014.7256%201.29297%2019.6715C1.29297%2029.8929%2018.6501%2050.7215%2019.4215%2051.6858L20.0001%2052.2644L20.5787%2051.6858C21.3501%2050.7215%2038.7073%2029.8929%2038.7073%2019.6715C38.7073%2017.2148%2038.2234%2014.7822%2037.2833%2012.5126C36.3431%2010.2429%2034.9652%208.18067%2033.2281%206.44355C31.4909%204.70643%2029.4287%203.32847%2027.159%202.38835C24.8894%201.44823%2022.4568%200.964355%2020.0001%200.964355Z'%20fill='%232A6DF6'/%3e%3cpath%20d='M28.6457%2020.3016C28.6457%2015.6786%2024.8848%2011.9177%2020.2618%2011.9177C15.6388%2011.9177%2011.8779%2015.6786%2011.8779%2020.3016C11.8779%2024.9246%2015.6388%2028.6855%2020.2618%2028.6855C24.8848%2028.6855%2028.6457%2024.9246%2028.6457%2020.3016ZM20.2618%2027.766C16.1457%2027.766%2012.7975%2024.4177%2012.7975%2020.3016C12.7975%2016.1855%2016.1457%2012.8373%2020.2618%2012.8373C24.3779%2012.8373%2027.7262%2016.1855%2027.7262%2020.3016C27.7262%2024.4177%2024.3779%2027.766%2020.2618%2027.766Z'%20fill='white'/%3e%3cpath%20d='M31.9998%2027.7948V11.75L31.401%2011.9385C31.17%2012.0109%2029.147%2012.8293%2029.147%2019.0339C29.147%2020.0603%2029.424%2020.85%2029.9711%2021.3799C30.3424%2021.7397%2030.7642%2021.8994%2031.0792%2021.9707V27.7948H31.9987H31.9998ZM30.6021%2020.7098C30.247%2020.3592%2030.0677%2019.796%2030.0677%2019.0339C30.0677%2015.8247%2030.6194%2014.242%2031.0803%2013.4799V21.0144C30.9286%2020.9569%2030.7573%2020.8626%2030.6021%2020.7086V20.7098Z'%20fill='white'/%3e%3cpath%20d='M8%2015.3926C8%2016.4099%208.71724%2017.2616%209.67241%2017.4731V27.7949H10.592V17.4731C11.5471%2017.2616%2012.2644%2016.4099%2012.2644%2015.3926V12.0513H11.3448V15.3926C11.3448%2015.8984%2011.0333%2016.3317%2010.592%2016.5133V12.0513H9.67241V16.5133C9.23103%2016.3317%208.91954%2015.8984%208.91954%2015.3926V12.0513H8V15.3926Z'%20fill='white'/%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20width='40'%20height='54'%20viewBox='0%200%2040%2054'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M20%2053.8071L18.65%2052.2643C17.8786%2051.3%200.328613%2030.2786%200.328613%2019.6714C0.328613%2014.4542%202.40113%209.45074%206.09024%205.76163C9.77935%202.07252%2014.7829%200%2020%200C25.2172%200%2030.2207%202.07252%2033.9098%205.76163C37.599%209.45074%2039.6715%2014.4542%2039.6715%2019.6714C39.6715%2029.8929%2023.2786%2049.95%2021.35%2052.2643L20%2053.8071ZM20%201.92857C15.2943%201.92857%2010.7814%203.7979%207.45395%207.12533C4.12652%2010.4528%202.25719%2014.9657%202.25719%2019.6714C2.25719%2027.5786%2013.8286%2043.3929%2020%2050.9143C26.1715%2043.3929%2037.7429%2027.3857%2037.7429%2019.6714C37.7429%2014.9657%2035.8736%2010.4528%2032.5461%207.12533C29.2187%203.7979%2024.7057%201.92857%2020%201.92857Z'%20fill='white'/%3e%3cpath%20d='M20.0001%200.964355C15.0542%201.01457%2010.3251%203.00162%206.82768%206.49906C3.33023%209.99651%201.34318%2014.7256%201.29297%2019.6715C1.29297%2029.8929%2018.6501%2050.7215%2019.4215%2051.6858L20.0001%2052.2644L20.5787%2051.6858C21.3501%2050.7215%2038.7073%2029.8929%2038.7073%2019.6715C38.7073%2017.2148%2038.2234%2014.7822%2037.2833%2012.5126C36.3431%2010.2429%2034.9652%208.18067%2033.2281%206.44355C31.4909%204.70643%2029.4287%203.32847%2027.159%202.38835C24.8894%201.44823%2022.4568%200.964355%2020.0001%200.964355Z'%20fill='%232A6DF6'/%3e%3cg%20clip-path='url(%23clip0_26605_25930)'%3e%3cpath%20d='M32%2019.2973H27.4626L27.8964%2018.7457L27.9126%2018.7227C29.441%2016.4625%2028.8467%2013.3801%2026.5866%2011.8509C25.492%2011.1106%2024.1745%2010.8408%2022.8758%2011.091C21.7342%2011.3113%2020.7292%2011.9107%2019.9991%2012.7961C18.3956%2010.8545%2015.5395%2010.4113%2013.4126%2011.8509C11.1524%2013.3793%2010.5573%2016.4625%2012.0865%2018.7227L12.5382%2019.2965H8V20.0777H13.1538L20%2028.775L26.847%2020.0794H32V19.2973ZM12.7269%2018.2744C11.4496%2016.372%2011.9525%2013.7849%2013.8514%2012.4998C15.7547%2011.2122%2018.3504%2011.7134%2019.638%2013.6167L20.0094%2014.076L20.3108%2013.685L20.3629%2013.6158C21.6505%2011.7126%2024.2462%2011.2114%2026.1494%2012.499C28.0484%2013.784%2028.5513%2016.3712%2027.2739%2018.2736L26.4679%2019.2973H21.975L20.3578%2023.1533L18.2291%2013.9018L15.618%2019.2982H13.5338L12.7269%2018.2744ZM20%2027.5122L14.1477%2020.0794H16.1064L17.9644%2016.2414L20.1392%2025.6935L22.4941%2020.0803H25.8514L20%2027.5122Z'%20fill='white'/%3e%3c/g%3e%3cdefs%3e%3cclipPath%20id='clip0_26605_25930'%3e%3crect%20width='24'%20height='24'%20fill='white'%20transform='translate(8%208)'/%3e%3c/clipPath%3e%3c/defs%3e%3c/svg%3e\"","export default \"__VITE_ASSET__D$utcAtg__\"","export default \"data:image/svg+xml,%3csvg%20width='40'%20height='54'%20viewBox='0%200%2040%2054'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M20%2053.8071L18.65%2052.2643C17.8786%2051.3%200.328613%2030.2786%200.328613%2019.6714C0.328613%2014.4542%202.40113%209.45074%206.09024%205.76163C9.77935%202.07252%2014.7829%200%2020%200C25.2172%200%2030.2207%202.07252%2033.9098%205.76163C37.599%209.45074%2039.6715%2014.4542%2039.6715%2019.6714C39.6715%2029.8929%2023.2786%2049.95%2021.35%2052.2643L20%2053.8071ZM20%201.92857C15.2943%201.92857%2010.7814%203.7979%207.45395%207.12533C4.12652%2010.4528%202.25719%2014.9657%202.25719%2019.6714C2.25719%2027.5786%2013.8286%2043.3929%2020%2050.9143C26.1715%2043.3929%2037.7429%2027.3857%2037.7429%2019.6714C37.7429%2014.9657%2035.8736%2010.4528%2032.5461%207.12533C29.2187%203.7979%2024.7057%201.92857%2020%201.92857Z'%20fill='white'/%3e%3cpath%20d='M20.0001%200.964355C15.0542%201.01457%2010.3251%203.00162%206.82768%206.49906C3.33023%209.99651%201.34318%2014.7256%201.29297%2019.6715C1.29297%2029.8929%2018.6501%2050.7215%2019.4215%2051.6858L20.0001%2052.2644L20.5787%2051.6858C21.3501%2050.7215%2038.7073%2029.8929%2038.7073%2019.6715C38.7073%2017.2148%2038.2234%2014.7822%2037.2833%2012.5126C36.3431%2010.2429%2034.9652%208.18067%2033.2281%206.44355C31.4909%204.70643%2029.4287%203.32847%2027.159%202.38835C24.8894%201.44823%2022.4568%200.964355%2020.0001%200.964355Z'%20fill='%232A6DF6'/%3e%3cg%20clip-path='url(%23clip0_26605_25921)'%3e%3cpath%20d='M32%2016.0211V14.7826L28.657%209.5H11.343L8%2014.7826V16.0211C8%2017.4435%208.8952%2018.6607%2010.1516%2019.1397V29.6724H8.94008V30.5698H31.0599V29.6724H29.8484V19.1397C31.1048%2018.6607%2032%2017.4435%2032%2016.0211ZM28.6637%2018.4599C27.3187%2018.4599%2026.2249%2017.3661%2026.2249%2016.0211V15.3615H31.1026V16.0211C31.1026%2017.3661%2030.0088%2018.4599%2028.6637%2018.4599ZM22.8875%2018.4599C21.5425%2018.4599%2020.4487%2017.3661%2020.4487%2016.0211V15.3615H25.3264V16.0211C25.3275%2017.3661%2024.2326%2018.4599%2022.8875%2018.4599ZM14.6736%2015.3615H19.5513V16.0211C19.5513%2017.3661%2018.4575%2018.4599%2017.1125%2018.4599C15.7674%2018.4599%2014.6736%2017.3661%2014.6736%2016.0211V15.3615ZM11.8366%2010.3974H28.1623L30.7357%2014.464H9.26428L11.8366%2010.3974ZM8.89745%2016.0211V15.3615H13.7751V16.0211C13.7751%2017.3661%2012.6813%2018.4599%2011.3363%2018.4599C9.99121%2018.4599%208.89745%2017.3661%208.89745%2016.0211ZM11.0491%2019.3439C11.1444%2019.3517%2011.2398%2019.3573%2011.3363%2019.3573C12.5691%2019.3573%2013.6461%2018.6854%2014.2238%2017.6892C14.8015%2018.6854%2015.8796%2019.3573%2017.1113%2019.3573C18.3431%2019.3573%2019.4211%2018.6854%2019.9989%2017.6892C20.5048%2018.562%2021.3955%2019.1857%2022.4377%2019.3271V29.6724H11.0491V19.3439ZM28.9509%2029.6724H23.3363V19.3259C24.3784%2019.1846%2025.2691%2018.562%2025.7751%2017.6881C26.3528%2018.6843%2027.4309%2019.3562%2028.6626%2019.3562C28.7591%2019.3562%2028.8556%2019.3506%2028.9498%2019.3428V29.6724H28.9509Z'%20fill='white'/%3e%3cpath%20d='M25.4341%2023.2959H24.5366V25.903H25.4341V23.2959Z'%20fill='white'/%3e%3cpath%20d='M12.4556%2020.4163V27.9245H21.0329V20.4163H12.4556ZM20.1355%2027.0271H13.353V21.3137H20.1355V27.0271Z'%20fill='white'/%3e%3c/g%3e%3cdefs%3e%3cclipPath%20id='clip0_26605_25921'%3e%3crect%20width='24'%20height='24'%20fill='white'%20transform='translate(8%208)'/%3e%3c/clipPath%3e%3c/defs%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20width='54'%20height='54'%20viewBox='0%200%2054%2054'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cg%20clip-path='url(%23clip0_26463_73909)'%3e%3cpath%20d='M27.0001%200.964355C22.0542%201.01457%2017.3251%203.00162%2013.8277%206.49906C10.3302%209.99651%208.34318%2014.7256%208.29297%2019.6715C8.29297%2029.8929%2025.6501%2050.7215%2026.4215%2051.6858L27.0001%2052.2644L27.5787%2051.6858C28.3501%2050.7215%2045.7073%2029.8929%2045.7073%2019.6715C45.7073%2017.2148%2045.2234%2014.7822%2044.2833%2012.5126C43.3431%2010.2429%2041.9652%208.18067%2040.2281%206.44355C38.4909%204.70643%2036.4287%203.32847%2034.159%202.38835C31.8894%201.44823%2029.4568%200.964355%2027.0001%200.964355Z'%20fill='%232A6DF6'/%3e%3cpath%20d='M27%2053.8071L25.65%2052.2643C24.8786%2051.3%207.32861%2030.2786%207.32861%2019.6714C7.32861%2014.4542%209.40113%209.45074%2013.0902%205.76163C16.7794%202.07252%2021.7829%200%2027%200C32.2172%200%2037.2207%202.07252%2040.9098%205.76163C44.599%209.45074%2046.6715%2014.4542%2046.6715%2019.6714C46.6715%2029.8929%2030.2786%2049.95%2028.35%2052.2643L27%2053.8071ZM27%201.92857C22.2943%201.92857%2017.7814%203.7979%2014.4539%207.12533C11.1265%2010.4528%209.25719%2014.9657%209.25719%2019.6714C9.25719%2027.5786%2020.8286%2043.3929%2027%2050.9143C33.1715%2043.3929%2044.7429%2027.3857%2044.7429%2019.6714C44.7429%2014.9657%2042.8736%2010.4528%2039.5461%207.12533C36.2187%203.7979%2031.7057%201.92857%2027%201.92857Z'%20fill='white'/%3e%3c/g%3e%3cdefs%3e%3cclipPath%20id='clip0_26463_73909'%3e%3crect%20width='54'%20height='54'%20fill='white'/%3e%3c/clipPath%3e%3c/defs%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='50px'%20height='60px'%20viewBox='0%200%2014%2015'%20fill='none'%3e%3cg%20clip-path='url(%23clip0_27796_112)'%3e%3cpath%20d='M7.12533%200.650574C5.80781%200.650574%204.54424%201.17396%203.61261%202.10559C2.68098%203.03722%202.15759%204.30079%202.15759%205.61832C2.15759%208.27781%206.77408%2013.8477%206.9748%2014.0986L7.12533%2014.2993L7.27587%2014.0986C7.47659%2013.8477%2012.0931%208.27781%2012.0931%205.61832C12.0931%204.96594%2011.9646%204.31996%2011.7149%203.71724C11.4653%203.11453%2011.0994%202.56689%2010.6381%202.10559C10.1768%201.64429%209.62912%201.27837%209.02641%201.02872C8.42369%200.779068%207.77771%200.650574%207.12533%200.650574ZM7.02498%207.07351C6.81651%207.08024%206.60883%207.04498%206.41427%206.96982C6.21971%206.89467%206.04225%206.78115%205.89245%206.63603C5.74265%206.49091%205.62356%206.31714%205.54226%206.12507C5.46097%205.93299%205.41913%205.72653%205.41924%205.51796C5.3779%205.28682%205.38775%205.04942%205.4481%204.8225C5.50845%204.59557%205.61784%204.38465%205.76855%204.20459C5.91926%204.02453%206.10762%203.87971%206.32037%203.78034C6.53312%203.68097%206.76508%203.62948%206.99989%203.62948C7.2347%203.62948%207.46665%203.68097%207.6794%203.78034C7.89215%203.87971%208.08052%204.02453%208.23123%204.20459C8.38194%204.38465%208.49132%204.59557%208.55168%204.8225C8.61203%205.04942%208.62188%205.28682%208.58053%205.51796C8.58053%205.93052%208.41664%206.32618%208.12492%206.6179C7.8332%206.90962%207.43754%207.07351%207.02498%207.07351Z'%20fill='%232A6DF6'/%3e%3c/g%3e%3cdefs%3e%3cclipPath%20id='clip0_27796_112'%3e%3crect%20width='14'%20height='14'%20fill='white'%20transform='translate(0%200.5)'/%3e%3c/clipPath%3e%3c/defs%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20width='40'%20height='54'%20viewBox='0%200%2040%2054'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M20%2053.8071L18.65%2052.2643C17.8786%2051.3%200.328613%2030.2786%200.328613%2019.6714C0.328613%2014.4542%202.40113%209.45074%206.09024%205.76163C9.77935%202.07252%2014.7829%200%2020%200C25.2172%200%2030.2207%202.07252%2033.9098%205.76163C37.599%209.45074%2039.6715%2014.4542%2039.6715%2019.6714C39.6715%2029.8929%2023.2786%2049.95%2021.35%2052.2643L20%2053.8071ZM20%201.92857C15.2943%201.92857%2010.7814%203.7979%207.45395%207.12533C4.12652%2010.4528%202.25719%2014.9657%202.25719%2019.6714C2.25719%2027.5786%2013.8286%2043.3929%2020%2050.9143C26.1715%2043.3929%2037.7429%2027.3857%2037.7429%2019.6714C37.7429%2014.9657%2035.8736%2010.4528%2032.5461%207.12533C29.2187%203.7979%2024.7057%201.92857%2020%201.92857Z'%20fill='white'/%3e%3cpath%20d='M20.0001%200.964355C15.0542%201.01457%2010.3251%203.00162%206.82768%206.49906C3.33023%209.99651%201.34318%2014.7256%201.29297%2019.6715C1.29297%2029.8929%2018.6501%2050.7215%2019.4215%2051.6858L20.0001%2052.2644L20.5787%2051.6858C21.3501%2050.7215%2038.7073%2029.8929%2038.7073%2019.6715C38.7073%2017.2148%2038.2234%2014.7822%2037.2833%2012.5126C36.3431%2010.2429%2034.9652%208.18067%2033.2281%206.44355C31.4909%204.70643%2029.4287%203.32847%2027.159%202.38835C24.8894%201.44823%2022.4568%200.964355%2020.0001%200.964355Z'%20fill='%232A6DF6'/%3e%3cg%20clip-path='url(%23clip0_26605_25922)'%3e%3cpath%20d='M24.4294%2012.5501V12.3451C24.4294%209.94949%2022.4799%208%2020.0843%208C17.6887%208%2015.7392%209.94949%2015.7392%2012.3451V12.5501H11V32H29.1365V12.5501H24.4294ZM16.5394%2012.3451C16.5394%2010.3906%2018.1298%208.8002%2020.0843%208.8002C22.0388%208.8002%2023.6292%2010.3906%2023.6292%2012.3451V12.5501H16.5384V12.3451H16.5394ZM28.3363%2031.1998H11.8002V13.3503H15.7392V14.9057H14.3008V15.7059H17.9127V14.9057H16.5384V13.3503H23.6292V14.9057H22.2228V15.7059H25.8347V14.9057H24.4284V13.3503H28.3353V31.1998H28.3363Z'%20fill='white'/%3e%3c/g%3e%3cdefs%3e%3cclipPath%20id='clip0_26605_25922'%3e%3crect%20width='24'%20height='24'%20fill='white'%20transform='translate(8%208)'/%3e%3c/clipPath%3e%3c/defs%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20width='40'%20height='54'%20viewBox='0%200%2040%2054'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M20%2053.8071L18.65%2052.2643C17.8786%2051.3%200.328613%2030.2786%200.328613%2019.6714C0.328613%2014.4542%202.40113%209.45074%206.09024%205.76163C9.77935%202.07252%2014.7829%200%2020%200C25.2172%200%2030.2207%202.07252%2033.9098%205.76163C37.599%209.45074%2039.6715%2014.4542%2039.6715%2019.6714C39.6715%2029.8929%2023.2786%2049.95%2021.35%2052.2643L20%2053.8071ZM20%201.92857C15.2943%201.92857%2010.7814%203.7979%207.45395%207.12533C4.12652%2010.4528%202.25719%2014.9657%202.25719%2019.6714C2.25719%2027.5786%2013.8286%2043.3929%2020%2050.9143C26.1715%2043.3929%2037.7429%2027.3857%2037.7429%2019.6714C37.7429%2014.9657%2035.8736%2010.4528%2032.5461%207.12533C29.2187%203.7979%2024.7057%201.92857%2020%201.92857Z'%20fill='white'/%3e%3cpath%20d='M20.0001%200.964355C15.0542%201.01457%2010.3251%203.00162%206.82768%206.49906C3.33023%209.99651%201.34318%2014.7256%201.29297%2019.6715C1.29297%2029.8929%2018.6501%2050.7215%2019.4215%2051.6858L20.0001%2052.2644L20.5787%2051.6858C21.3501%2050.7215%2038.7073%2029.8929%2038.7073%2019.6715C38.7073%2017.2148%2038.2234%2014.7822%2037.2833%2012.5126C36.3431%2010.2429%2034.9652%208.18067%2033.2281%206.44355C31.4909%204.70643%2029.4287%203.32847%2027.159%202.38835C24.8894%201.44823%2022.4568%200.964355%2020.0001%200.964355Z'%20fill='%232A6DF6'/%3e%3cg%20clip-path='url(%23clip0_26605_25927)'%3e%3cpath%20d='M29.0494%2015.5229V11.0289C29.0494%209.35851%2027.6909%208%2026.0205%208H13.5711C11.9007%208%2010.5421%209.35851%2010.5421%2011.0289V15.5218C9.52381%2015.5924%208.75%2016.2413%208.75%2017.0564V19.0887C8.75%2019.9049%209.52381%2020.5526%2010.5421%2020.6233V29.3275L11.5496%2029.3308V32H16.199V29.3438L23.3926%2029.3645V32H28.0419V29.3775L29.0494%2029.3808V20.6222C30.058%2020.545%2030.822%2019.8984%2030.822%2019.0876V17.0553C30.822%2016.2467%2030.0591%2015.6011%2029.0494%2015.5229ZM10.5421%2019.7517C9.99114%2019.6919%209.61945%2019.3767%209.61945%2019.0898V17.0575C9.61945%2016.7705%209.99005%2016.4554%2010.5421%2016.3956V19.7517ZM11.4116%2014.2068C12.0115%2013.7699%2012.7397%2013.5319%2013.4852%2013.5319H19.3279V21.771H11.4116V14.2068ZM15.3295%2031.1316H12.4191V29.3341L15.3295%2029.3428V31.1316ZM27.1725%2031.1316H24.262V29.3677L27.1725%2029.3764V31.1316ZM28.18%2028.5103L11.4116%2028.4624V22.6404H28.18V28.5103ZM28.18%2021.771H20.1963V13.5319H26.1053C26.8508%2013.5319%2027.579%2013.771%2028.1789%2014.2068V21.771H28.18ZM28.18%2013.183C27.5464%2012.8439%2026.8323%2012.6613%2026.1063%2012.6613H13.4852C12.7592%2012.6613%2012.0452%2012.8439%2011.4116%2013.183V11.0289C11.4116%209.83779%2012.3799%208.86945%2013.5711%208.86945H26.0205C27.2116%208.86945%2028.18%209.83779%2028.18%2011.0289V13.183ZM29.9526%2019.0898C29.9526%2019.3735%2029.5906%2019.6854%2029.0494%2019.7495V16.3978C29.5906%2016.4619%2029.9526%2016.7738%2029.9526%2017.0575V19.0898Z'%20fill='white'/%3e%3cpath%20d='M14.3447%2027.2897H14.9457V26.4203H14.3447C13.9882%2026.4203%2013.6981%2026.1301%2013.6981%2025.7736V25.1726H12.8286V25.7736C12.8286%2026.6094%2013.5079%2027.2897%2014.3447%2027.2897Z'%20fill='white'/%3e%3cpath%20d='M26.7641%2025.7736V25.1726H25.8946V25.7736C25.8946%2026.1301%2025.6045%2026.4203%2025.248%2026.4203H24.647V27.2897H25.248C26.0837%2027.2897%2026.7641%2026.6094%2026.7641%2025.7736Z'%20fill='white'/%3e%3c/g%3e%3cdefs%3e%3cclipPath%20id='clip0_26605_25927'%3e%3crect%20width='24'%20height='24'%20fill='white'%20transform='translate(8%208)'/%3e%3c/clipPath%3e%3c/defs%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20width='40'%20height='54'%20viewBox='0%200%2040%2054'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M20%2053.8071L18.65%2052.2643C17.8786%2051.3%200.328613%2030.2786%200.328613%2019.6714C0.328613%2014.4542%202.40113%209.45074%206.09024%205.76163C9.77935%202.07252%2014.7829%200%2020%200C25.2172%200%2030.2207%202.07252%2033.9098%205.76163C37.599%209.45074%2039.6715%2014.4542%2039.6715%2019.6714C39.6715%2029.8929%2023.2786%2049.95%2021.35%2052.2643L20%2053.8071ZM20%201.92857C15.2943%201.92857%2010.7814%203.7979%207.45395%207.12533C4.12652%2010.4528%202.25719%2014.9657%202.25719%2019.6714C2.25719%2027.5786%2013.8286%2043.3929%2020%2050.9143C26.1715%2043.3929%2037.7429%2027.3857%2037.7429%2019.6714C37.7429%2014.9657%2035.8736%2010.4528%2032.5461%207.12533C29.2187%203.7979%2024.7057%201.92857%2020%201.92857Z'%20fill='white'/%3e%3cpath%20d='M20.0001%200.964355C15.0542%201.01457%2010.3251%203.00162%206.82768%206.49906C3.33023%209.99651%201.34318%2014.7256%201.29297%2019.6715C1.29297%2029.8929%2018.6501%2050.7215%2019.4215%2051.6858L20.0001%2052.2644L20.5787%2051.6858C21.3501%2050.7215%2038.7073%2029.8929%2038.7073%2019.6715C38.7073%2017.2148%2038.2234%2014.7822%2037.2833%2012.5126C36.3431%2010.2429%2034.9652%208.18067%2033.2281%206.44355C31.4909%204.70643%2029.4287%203.32847%2027.159%202.38835C24.8894%201.44823%2022.4568%200.964355%2020.0001%200.964355Z'%20fill='%232A6DF6'/%3e%3cg%20clip-path='url(%23clip0_26605_25928)'%3e%3cpath%20d='M30.1083%2019.0455C31.7377%2017.4161%2032.3785%2015.0207%2031.779%2012.7959L31.5603%2011.9846L28.2904%2014.6027L25.6654%2014.4143L25.4014%2011.5281L28.0457%208.44792L27.2028%208.22104C24.9779%207.62151%2022.5839%208.26229%2020.9531%209.89174C19.732%2011.1128%2019.0596%2012.7381%2019.0596%2014.4693C19.0596%2014.9327%2019.1091%2015.3879%2019.204%2015.8306L17.1744%2017.8602L13.6859%2014.3717L14.185%2013.8725L13.3077%2011.2393L9.95672%209.56447L8%2011.5212L9.67483%2014.8722L12.3081%2015.7495L12.9076%2015.15L16.3961%2018.6385L9.69683%2025.3378C9.03542%2026.0116%208.66966%2026.8916%208.66966%2027.8157C8.66966%2028.7397%209.03405%2029.6211%209.70095%2030.299C10.3885%2030.9811%2011.2892%2031.3221%2012.1898%2031.3221C13.0905%2031.3221%2013.9898%2030.9811%2014.6732%2030.2977L19.259%2025.7022L23.6578%2030.101C24.3247%2030.7679%2025.2089%2031.1365%2026.1481%2031.1365C26.1508%2031.1365%2026.1536%2031.1365%2026.1563%2031.1365C27.0928%2031.1351%2027.9728%2030.7666%2028.6287%2030.1052C29.2956%2029.4506%2029.6614%2028.5678%2029.6614%2027.6204C29.6614%2026.673%2029.2942%2025.7902%2028.6314%2025.1384L24.3206%2020.8276C24.7194%2020.9032%2025.1237%2020.9417%2025.5293%2020.9417C27.189%2020.939%2028.846%2020.3078%2030.1083%2019.0455ZM12.0111%2014.4899L10.4559%2013.9715L9.33931%2011.7371L10.1753%2010.901L12.4098%2012.0176L12.9282%2013.5728L12.0111%2014.4899ZM21.7314%2010.67C22.7489%209.65248%2024.124%209.0997%2025.5293%209.0997C25.6916%209.0997%2025.8552%209.10658%2026.0175%209.1217L24.2642%2011.165L24.6561%2015.4456L28.6424%2015.7316L30.8742%2013.944C31.0309%2015.5267%2030.474%2017.1246%2029.33%2018.2686C27.2358%2020.3628%2023.827%2020.3642%2021.7314%2018.2686C20.718%2017.2552%2020.1597%2015.9063%2020.1597%2014.4693C20.1597%2013.0324%2020.718%2011.6834%2021.7314%2010.67ZM13.8963%2029.5194C12.9585%2030.4572%2011.4239%2030.4572%2010.482%2029.5221C10.0241%2029.056%209.77108%2028.4496%209.77108%2027.8143C9.77108%2027.179%2010.0241%2026.574%2010.4792%2026.1106L19.578%2017.0118C19.8984%2017.7626%2020.3604%2018.4515%2020.9545%2019.0455C21.554%2019.6451%2022.2443%2020.1016%2022.9813%2020.4151L13.8963%2029.5194ZM28.5627%2027.6177C28.5627%2028.2681%2028.3124%2028.8717%2027.8532%2029.3228C27.3994%2029.7793%2026.7971%2030.0323%2026.155%2030.0337C26.1536%2030.0337%2026.1522%2030.0337%2026.1495%2030.0337C25.5046%2030.0337%2024.8968%2029.7807%2024.4375%2029.3214L20.0373%2024.9212L23.4461%2021.5041L27.8573%2025.9153C28.3124%2026.3636%2028.5627%2026.9673%2028.5627%2027.6177Z'%20fill='white'/%3e%3c/g%3e%3cdefs%3e%3cclipPath%20id='clip0_26605_25928'%3e%3crect%20width='24'%20height='24'%20fill='white'%20transform='translate(8%208)'/%3e%3c/clipPath%3e%3c/defs%3e%3c/svg%3e\"","export default \"data:image/svg+xml,%3csvg%20width='32'%20height='32'%20viewBox='0%200%2032%2032'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M15.9998%200.457153C12.9991%200.457153%2010.1213%201.64919%207.99942%203.77103C5.87758%205.89287%204.68555%208.7707%204.68555%2011.7714C4.68555%2017.9429%2015.1998%2030.5143%2015.657%2031.0857L15.9998%2031.5429L16.3427%2031.0857C16.7998%2030.5143%2027.3141%2017.9429%2027.3141%2011.7714C27.3141%208.7707%2026.1221%205.89287%2024.0002%203.77103C21.8784%201.64919%2019.0006%200.457153%2015.9998%200.457153Z'%20fill='white'/%3e%3c/svg%3e\"","import { GoogleMapsLibrary } from '~/framework/helpers/google/google-maps-library';\r\n\r\nimport clusterPin from \"./cluster-blue.svg\";\r\nimport { type Icons } from './interfaces';\r\nimport accommodation from \"./marker-accommodation.svg\";\r\nimport blackPin from \"./marker-black.svg\";\r\nimport bluePin from \"./marker-blue.svg\";\r\nimport bluePinDark from \"./marker-blue-dark.svg\";\r\nimport building from \"./marker-building.svg\";\r\nimport food from \"./marker-food.svg\";\r\nimport health from \"./marker-health.svg\";\r\nimport leisure from \"./marker-leisure.svg\";\r\nimport localBusiness from \"./marker-local-business.svg\";\r\nimport location from \"./marker-location.svg\";\r\nimport locationFilled from \"./marker-location-filled.svg\"\r\nimport shopping from \"./marker-shopping.svg\";\r\nimport transport from \"./marker-transport.svg\";\r\nimport utilities from \"./marker-utilities.svg\";\r\nimport whitePin from \"./marker-white.svg\";\r\n\r\nfunction dynamicIcon (color: string): string {\r\n return 'data:image/svg+xml;charset=UTF-8,' + encodeURIComponent(`\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n `).replace('2A6DF6', color)\r\n}\r\n\r\nconst colours: Record = {\r\n stocklandAzureBlue : \"2A6DF6\",\r\n stocklandAzureBlueDark : \"1D5BC5\",\r\n stocklandAzureBlueMuted : \"52ABE8\",\r\n stocklandDarkBlue : \"152A65\",\r\n stocklandDarkBlueMuted : \"52ABE8\",\r\n stocklandDarkGreen : \"1F551D\",\r\n stocklandDarkGreenMuted : \"80E172\",\r\n stocklandGreen : \"1F551D\",\r\n stocklandGreenMuted : \"80E172\",\r\n stocklandMutedGreen : \"1F551D\",\r\n stocklandMutedGreenMuted : \"80E172\",\r\n stocklandOrange : \"9A4400\",\r\n stocklandOrangeMuted : \"F78F4D\",\r\n stocklandPastelBlue : \"152A65\",\r\n stocklandPastelBlueMuted : \"52ABE8\",\r\n stocklandPastelOrange : \"9A4400\",\r\n stocklandPastelOrangeMuted : \"F78F4D\",\r\n stocklandPastelPink : \"79305A\",\r\n stocklandPastelPinkMuted : \"F27FB2\",\r\n stocklandPastelPurple : \"431465\",\r\n stocklandPastelPurpleMuted : \"B591DB\",\r\n stocklandPink : \"79305A\",\r\n stocklandPinkMuted : \"F27FB2\",\r\n stocklandPurple : \"431465\",\r\n stocklandPurpleMuted : \"B591DB\",\r\n}\r\n\r\nexport const initializeIcons = async (): Promise => {\r\n await GoogleMapsLibrary.mapsLibrary();\r\n\t\r\n const icons: Icons = {\r\n accommodation: {\r\n anchor: new google.maps.Point(20, 54),\r\n origin: new google.maps.Point(0, 0),\r\n url: accommodation,\r\n },\r\n building: {\r\n anchor: new google.maps.Point(20, 54),\r\n origin: new google.maps.Point(0, 0),\r\n url: building,\r\n },\r\n food: {\r\n anchor: new google.maps.Point(20, 54),\r\n origin: new google.maps.Point(0, 0),\r\n url: food,\r\n },\r\n health: {\r\n anchor: new google.maps.Point(20, 54),\r\n origin: new google.maps.Point(0, 0),\r\n url: health,\r\n },\r\n leisure: {\r\n anchor: new google.maps.Point(20, 54),\r\n origin: new google.maps.Point(0, 0),\r\n url: leisure,\r\n },\r\n localBusiness: {\r\n anchor: new google.maps.Point(20, 54),\r\n origin: new google.maps.Point(0, 0),\r\n url: localBusiness,\r\n },\r\n location: {\r\n anchor: new google.maps.Point(20, 54),\r\n origin: new google.maps.Point(0, 0),\r\n url: location,\r\n },\r\n shopping: {\r\n anchor: new google.maps.Point(20, 54),\r\n origin: new google.maps.Point(0, 0),\r\n url: shopping,\r\n },\r\n transport: {\r\n anchor: new google.maps.Point(20, 54),\r\n origin: new google.maps.Point(0, 0),\r\n url: transport,\r\n },\r\n utilities: {\r\n anchor: new google.maps.Point(20, 54),\r\n origin: new google.maps.Point(0, 0),\r\n url: utilities,\r\n },\r\n blackPin: {\r\n anchor: new google.maps.Point(20, 54),\r\n origin: new google.maps.Point(0, 0),\r\n url: blackPin,\r\n },\r\n bluePin: {\r\n anchor: new google.maps.Point(20, 54),\r\n origin: new google.maps.Point(0, 0),\r\n url: bluePin,\r\n },\r\n bluePinDark: {\r\n anchor: new google.maps.Point(20, 54),\r\n origin: new google.maps.Point(0, 0),\r\n url: bluePinDark,\r\n },\r\n clusterPin: {\r\n anchor: new google.maps.Point(36, 36),\r\n origin: new google.maps.Point(0, 0),\r\n url: clusterPin,\r\n },\r\n whitePin: {\r\n anchor: new google.maps.Point(20, 54),\r\n origin: new google.maps.Point(0, 0),\r\n url: whitePin,\r\n },\r\n locationPin: {\r\n anchor: new google.maps.Point(20, 54),\r\n origin: new google.maps.Point(0, 0),\r\n url: locationFilled,\r\n },\r\n };\r\n\r\n // This could be dynamic, or it could go through tailwind config (see ColoursDocumentation) and add every brand colour\r\n for (const key of Object.keys(colours)) {\r\n icons[key] = {\r\n anchor: new google.maps.Point(30, 61),\r\n origin: new google.maps.Point(0, 0),\r\n url: dynamicIcon(colours[key]),\r\n }\r\n }\r\n \r\n return icons;\r\n}","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'?%3e%3csvg%20width='1200pt'%20height='1200pt'%20version='1.1'%20viewBox='0%200%201200%201200'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='m55.555%20612.22%2042.223-95.555h-40c-44.445-22.223-57.777-51.109-57.777-97.777l140%202.2227%2091.109-206.67c40-48.891%2077.777-75.555%20108.89-73.332%20175.55%202.2227%20346.67%202.2227%20520%200%2031.109-2.2227%2068.891%2024.445%20108.89%2073.332l91.109%20206.67%20140-2.2227c0%2046.668-13.332%2075.555-57.777%2097.777h-40l42.223%2095.555v397.78c0%2026.668-22.223%2048.891-48.891%2048.891h-166.67c-26.668%200-48.891-22.223-48.891-48.891v-113.33h-560v113.33c0%2026.668-22.223%2048.891-48.891%2048.891h-166.67c-26.668%200-48.891-22.223-48.891-48.891v-397.78zm295.55-386.67c-15.555%202.2227-31.109%2015.555-48.891%2035.555-31.109%2068.891-64.445%20135.55-95.555%20204.45h788.89c-33.332-68.891-66.668-135.55-97.777-204.45-17.777-20-33.332-33.332-48.891-35.555zm115.55%20466.67c-22.223%200-37.777%2017.777-37.777%2040s15.555%2040%2037.777%2040h266.67c22.223%200%2040-17.777%2040-40s-17.777-40-40-40zm520-68.891c-42.223%200-77.777%2033.332-77.777%2077.777s35.555%2077.777%2077.777%2077.777c44.445%200%2080-33.332%2080-77.777s-35.555-77.777-80-77.777zm-773.33%200c42.223%200%2077.777%2033.332%2077.777%2077.777s-35.555%2077.777-77.777%2077.777c-44.445%200-80-33.332-80-77.777s35.555-77.777%2080-77.777z'%20fill-rule='evenodd'/%3e%3c/svg%3e\"","import { type onClusterClickHandler,defaultOnClusterClickHandler, MarkerClusterer, SuperClusterAlgorithm } from '@googlemaps/markerclusterer';\r\n\r\nimport { GoogleMapsLibrary } from '~/framework/helpers/google/google-maps-library';\r\n\r\nimport { initializeIcons } from './gmaps-markers';\r\nimport CarIcon from \"./icon-car.svg\";\r\nimport { type Icons, type LatLng, type MarkerClickFunction, type MarkerData } from './interfaces';\r\n\r\n\r\nexport class GmapsMapController {\r\n static async mountMap(mapDiv: HTMLElement, options?: google.maps.MapOptions) {\r\n const { Map: map } = await GoogleMapsLibrary.mapsLibrary();\r\n const icons = await initializeIcons();\r\n return new GmapsMapController(new map(mapDiv, options), icons);\r\n }\r\n \r\n private readonly _map: google.maps.Map;\r\n private _markers : Array<{marker: google.maps.Marker, markerData: MarkerData}>;\r\n private _markerClickHandler? : MarkerClickFunction;\r\n private _markerClustererClickHandler : onClusterClickHandler;\r\n private _routeMarker? : google.maps.Marker;\r\n private readonly _icons : Icons;\r\n private readonly _infoWindow : google.maps.InfoWindow;\r\n private readonly _directionsService : google.maps.DirectionsService;\r\n private readonly _directionsRenderer: google.maps.DirectionsRenderer;\r\n private readonly _markerClusterer : MarkerClusterer;\r\n \r\n constructor(map: google.maps.Map, icons: Icons) {\r\n this._map = map;\r\n this._markers = [];\r\n this._icons = icons;\r\n this._infoWindow = new google.maps.InfoWindow({\r\n zIndex: 10,\r\n });\r\n\r\n // Check if \r\n const appEl = document.getElementById('app');\r\n const momentaTheme = appEl && appEl.dataset.theme === 'momenta';\r\n\r\n this._routeMarker = undefined;\r\n this._directionsService = new google.maps.DirectionsService();\r\n this._directionsRenderer = new google.maps.DirectionsRenderer({\r\n suppressMarkers: true,\r\n polylineOptions: {\r\n strokeWeight: 6,\r\n strokeColor: momentaTheme ? '#FF5200' : '#0071fd',\r\n zIndex: 9,\r\n }\r\n });\r\n this._markerClustererClickHandler = defaultOnClusterClickHandler;\r\n this._markerClickHandler = undefined;\r\n this._markerClusterer = new MarkerClusterer({\r\n map: this._map,\r\n algorithm: new SuperClusterAlgorithm({\r\n radius: 80,\r\n maxZoom: 12\r\n }),\r\n onClusterClick: (event, cluster, map) => (this._markerClustererClickHandler?.(event, cluster, map)),\r\n renderer: { render: ({ count, position }: {count: number, position:google.maps.LatLng}) => {\r\n return new google.maps.Marker({\r\n position,\r\n icon: this._icons.clusterPin,\r\n label: {\r\n text: String(count),\r\n color: \"white\",\r\n fontSize: \"24px\",\r\n fontWeight: '500',\r\n fontFamily: 'Work Sans'\r\n },\r\n // adjust zIndex to be above other markers\r\n zIndex: Number(google.maps.Marker.MAX_ZINDEX) + count,\r\n });\r\n }}\r\n });\r\n this._directionsRenderer.setMap(this._map);\r\n }\r\n \r\n addMarker(marker: google.maps.Marker, markerData: MarkerData) {\r\n marker.setMap(this._map);\r\n this._markers.push({marker, markerData});\r\n this._markerClusterer.addMarker(marker, true);\r\n }\r\n\r\n clearMarkers() {\r\n \r\n if (this._markers.length > 0) {\r\n this._markerClusterer.clearMarkers();\r\n }\r\n \r\n for (const marker of this._markers) {\r\n marker.marker.setMap(null);\r\n marker.marker.setVisible(false);\r\n }\r\n\r\n this._markers = [];\r\n }\r\n\r\n setActiveIcon(marker: google.maps.Marker, icon: string) {\r\n marker.setIcon(this._icons[icon] ?? this._icons.building)\r\n }\r\n\r\n // This is used by LLC to highlight selected icon\r\n setAllIcons(icon: string) {\r\n for (const marker of this._markers) {\r\n // Issue #168108\r\n if (!marker.markerData?.assetData?.type || marker.markerData?.assetData.type !== 'communityMarker') {\r\n marker.marker.setIcon(this._icons[icon]);\r\n }\r\n }\r\n }\r\n\r\n setClusterClickHandler(f: onClusterClickHandler) {\r\n this._markerClustererClickHandler = f;\r\n }\r\n \r\n setMarkerClickHandler(f: MarkerClickFunction) {\r\n this._markerClickHandler = f;\r\n }\r\n\r\n setMapCenter(center: LatLng) {\r\n this._map.setCenter(center);\r\n }\r\n\r\n panTo(center: LatLng) {\r\n this._map.panTo(center);\r\n }\r\n\r\n setMapZoom(zoom: number) {\r\n this._map.setZoom(zoom);\r\n }\r\n \r\n smoothZoom(max: number, cnt: number) {\r\n if (cnt >= max) {\r\n return;\r\n }\r\n else {\r\n google.maps.event.addListenerOnce(this._map, 'zoom_changed', () => {\r\n this.smoothZoom(max, cnt + 1);\r\n });\r\n setTimeout(() => {this._map.setZoom(cnt)}, 80);\r\n } \r\n }\r\n\r\n\r\n setMarkersFromMarkerData(markerData: MarkerData[], fitBounds = true): void {\r\n this.clearMarkers();\r\n for (const m of markerData) {\r\n const marker = new google.maps.Marker({\r\n position: m.location,\r\n icon: this._icons[m.markerImage] ?? this._icons.building,\r\n zIndex: m.zIndex ?? 7,\r\n title: m.title ?? undefined,\r\n });\r\n if (m.label) {\r\n marker.setLabel({\r\n className: 'map-marker-label',\r\n text: m.label,\r\n color: \"black\",\r\n fontSize: \"12px\",\r\n fontWeight: '500',\r\n fontFamily: 'Work Sans'\r\n })\r\n }\r\n\r\n marker.addListener(\"click\", () => {\r\n this._markerClickHandler?.(marker, m);\r\n });\r\n\r\n this.addMarker(marker, m);\r\n }\r\n\r\n if (fitBounds) {\r\n this.fitBoundsToMarkers();\r\n }\r\n }\r\n\r\n async route(origin: LatLng, destination: LatLng, markerImage: string) {\r\n const directions = await this._directionsService.route({\r\n origin: origin,\r\n destination: destination,\r\n // @ts-expect-error Google Namespace is not available in this file\r\n travelMode: \"DRIVING\"\r\n });\r\n this._routeMarker?.setMap(null);\r\n this._routeMarker?.setVisible(false);\r\n this._routeMarker = new google.maps.Marker({\r\n position: destination,\r\n icon: this._icons[markerImage] ?? this._icons.building,\r\n map: this._map,\r\n });\r\n const firstRoute = directions.routes[0] ?? false;\r\n if(firstRoute?.legs) {\r\n const halfwayPoint = firstRoute.overview_path[Math.floor(firstRoute.overview_path.length / 2)];\r\n if(firstRoute.legs[0]?.distance && firstRoute.legs[0].duration) {\r\n this._infoWindow.close();\r\n const content = `\r\n
\r\n
\r\n \r\n
\r\n
\r\n
${firstRoute.legs[0].duration.text}
\r\n
${firstRoute.legs[0].distance.text}
\r\n
\r\n
\r\n `\r\n this._infoWindow.setContent(content);\r\n this._infoWindow.setPosition(halfwayPoint);\r\n this._infoWindow.open(this.map);\r\n }\r\n\r\n this._directionsRenderer.setDirections(directions);\r\n }\r\n }\r\n\r\n clearRoute() {\r\n this._directionsRenderer.setDirections(null);\r\n this._routeMarker?.setMap(null);\r\n }\r\n\r\n fitBounds(points: LatLng[]) {\r\n const bounds = new google.maps.LatLngBounds();\r\n for(const p of points) {\r\n bounds.extend(p);\r\n }\r\n\r\n this._map.fitBounds(bounds);\r\n }\r\n\r\n fitBoundsToMarkers() {\r\n const bounds = new google.maps.LatLngBounds();\r\n for(const marker of this._markers) {\r\n const position = marker.marker.getPosition();\r\n if(position) {\r\n bounds.extend(position);\r\n }\r\n }\r\n \r\n if (!bounds.isEmpty()) {\r\n this._map.fitBounds(bounds);\r\n // Set minimum zoom to be 8\r\n google.maps.event.addListenerOnce(this._map, \"bounds_changed\", () => {\r\n if(this._map.getZoom()) {\r\n this._map.setZoom(Math.min(this._map.getZoom() ?? 16, 16));\r\n }\r\n });\r\n }\r\n }\r\n\r\n resetMarkerIcons() {\r\n for(const marker of this._markers) {\r\n marker.marker.setIcon(this._icons[marker.markerData.markerImage] ?? this._icons.building);\r\n }\r\n }\r\n\r\n set clusteringEnabled(clusteringEnabled: boolean) {\r\n this._markerClusterer.setMap(clusteringEnabled ? this._map : null);\r\n }\r\n \r\n get map() {\r\n return this._map;\r\n }\r\n}","export default [\r\n {\r\n \"featureType\": \"landscape\",\r\n \"elementType\": \"geometry.fill\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#f2f2f2\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"poi\",\r\n \"elementType\": \"labels\",\r\n \"stylers\": [\r\n {\r\n \"visibility\": \"off\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"poi.business\",\r\n \"elementType\": \"geometry.fill\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#b4d9ba\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"poi.government\",\r\n \"elementType\": \"all\",\r\n \"stylers\": [\r\n {\r\n \"visibility\": \"off\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"poi.medical\",\r\n \"elementType\": \"all\",\r\n \"stylers\": [\r\n {\r\n \"visibility\": \"off\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"poi.park\",\r\n \"elementType\": \"geometry.fill\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#d3e8d7\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"poi.school\",\r\n \"elementType\": \"all\",\r\n \"stylers\": [\r\n {\r\n \"visibility\": \"off\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"poi.sports_complex\",\r\n \"elementType\": \"geometry.fill\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#b4d9b8\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"road\",\r\n \"elementType\": \"labels\",\r\n \"stylers\": [\r\n {\r\n \"visibility\": \"off\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"road.highway\",\r\n \"elementType\": \"geometry.fill\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#cfcfcf\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"road.highway\",\r\n \"elementType\": \"geometry.stroke\",\r\n \"stylers\": [\r\n {\r\n \"visibility\": \"off\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"road.highway.controlled_access\",\r\n \"elementType\": \"geometry.fill\",\r\n \"stylers\": [\r\n {\r\n \"visibility\": \"on\"\r\n },\r\n {\r\n \"color\": \"#cfcfcf\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"road.arterial\",\r\n \"elementType\": \"geometry.fill\",\r\n \"stylers\": [\r\n {\r\n \"visibility\": \"off\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"road.local\",\r\n \"elementType\": \"geometry.fill\",\r\n \"stylers\": [\r\n {\r\n \"visibility\": \"off\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"transit\",\r\n \"elementType\": \"labels\",\r\n \"stylers\": [\r\n {\r\n \"visibility\": \"off\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"transit.line\",\r\n \"elementType\": \"all\",\r\n \"stylers\": [\r\n {\r\n \"visibility\": \"off\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"transit.station.airport\",\r\n \"elementType\": \"geometry.fill\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#f2f2f2\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"water\",\r\n \"elementType\": \"geometry.fill\",\r\n \"stylers\": [\r\n {\r\n \"visibility\": \"on\"\r\n },\r\n {\r\n \"color\": \"#b0eaf6\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"water\",\r\n \"elementType\": \"labels\",\r\n \"stylers\": [\r\n {\r\n \"visibility\": \"off\"\r\n }\r\n ]\r\n }\r\n];","export default [\r\n {\r\n \"featureType\": \"landscape\",\r\n \"elementType\": \"geometry.fill\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#fffdfd\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"poi\",\r\n \"elementType\": \"labels\",\r\n \"stylers\": [\r\n {\r\n \"visibility\": \"off\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"poi.business\",\r\n \"elementType\": \"geometry.fill\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#d1f8cf\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"poi.government\",\r\n \"elementType\": \"all\",\r\n \"stylers\": [\r\n {\r\n \"visibility\": \"off\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"poi.medical\",\r\n \"elementType\": \"all\",\r\n \"stylers\": [\r\n {\r\n \"visibility\": \"off\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"poi.park\",\r\n \"elementType\": \"geometry.fill\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#d1f8cf\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"poi.school\",\r\n \"elementType\": \"all\",\r\n \"stylers\": [\r\n {\r\n \"visibility\": \"off\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"poi.sports_complex\",\r\n \"elementType\": \"geometry.fill\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#b4d9b8\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"road\",\r\n \"elementType\": \"labels\",\r\n \"stylers\": [\r\n {\r\n \"visibility\": \"off\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"road.highway\",\r\n \"elementType\": \"geometry.fill\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#fcf3e3\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"road.highway\",\r\n \"elementType\": \"geometry.stroke\",\r\n \"stylers\": [\r\n {\r\n \"visibility\": \"off\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"road.highway.controlled_access\",\r\n \"elementType\": \"geometry.fill\",\r\n \"stylers\": [\r\n {\r\n \"visibility\": \"on\"\r\n },\r\n {\r\n \"color\": \"#fcf3e3\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"road.arterial\",\r\n \"elementType\": \"geometry.fill\",\r\n \"stylers\": [\r\n {\r\n \"visibility\": \"off\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"road.local\",\r\n \"elementType\": \"geometry.fill\",\r\n \"stylers\": [\r\n {\r\n \"visibility\": \"off\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"transit\",\r\n \"elementType\": \"labels\",\r\n \"stylers\": [\r\n {\r\n \"visibility\": \"off\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"transit.line\",\r\n \"elementType\": \"all\",\r\n \"stylers\": [\r\n {\r\n \"visibility\": \"off\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"transit.station.airport\",\r\n \"elementType\": \"geometry.fill\",\r\n \"stylers\": [\r\n {\r\n \"color\": \"#f2f2f2\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"water\",\r\n \"elementType\": \"geometry.fill\",\r\n \"stylers\": [\r\n {\r\n \"visibility\": \"on\"\r\n },\r\n {\r\n \"color\": \"#2f6cf1\"\r\n }\r\n ]\r\n },\r\n {\r\n \"featureType\": \"water\",\r\n \"elementType\": \"labels\",\r\n \"stylers\": [\r\n {\r\n \"visibility\": \"off\"\r\n }\r\n ]\r\n }\r\n];","\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\n","\n\n\n\n","\n\n\n\n","\r\n\r\n\r\n\r\n","\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 { GoogleMapsLibrary } from '~/framework/helpers/google/google-maps-library';\r\n\r\nimport { type AutocompletePrediction, type LatLng } from './interfaces';\r\n\r\nexport default class GmapsMapPlaces {\r\n static async places(map: HTMLDivElement | google.maps.Map | undefined) : Promise {\r\n const placesLibrary = await GoogleMapsLibrary.placesLibrary();\r\n return new GmapsMapPlaces(placesLibrary, map);\r\n }\r\n\t\r\n private readonly _placesLibrary: google.maps.PlacesLibrary;\r\n private readonly _autocompleteService: google.maps.places.AutocompleteService;\r\n private readonly _placesService: google.maps.places.PlacesService | undefined;\r\n\t\r\n constructor(placesLibrary: google.maps.PlacesLibrary, map: HTMLDivElement | google.maps.Map | undefined) {\r\n this._placesLibrary = placesLibrary;\r\n const { AutocompleteService: autocompleteService, PlacesService: placesService } = placesLibrary;\r\n this._autocompleteService = new autocompleteService();\r\n this._placesService = map ? new placesService(map) : undefined;\r\n }\r\n\r\n async getPlaceLocation(placeId: string) {\r\n const result: google.maps.places.PlaceResult | null = await new Promise((resolve, reject) =>{\r\n const fields = ['name','geometry','place_id','formatted_address','address_components'];\r\n if(this._placesService) {\r\n this._placesService.getDetails(\r\n {\r\n placeId,\r\n fields, \r\n },\r\n (result, status: google.maps.places.PlacesServiceStatus) => {\r\n if(status === 'OK') {\r\n resolve(result)\r\n } else {\r\n reject(status);\r\n }\r\n }\r\n );\r\n } else {\r\n console.error('Unable to get place details as map component has not been supplied.');\r\n resolve(null);\r\n }\r\n\r\n });\r\n // console.log(\"details\",result?.formatted_address)\r\n return result;\r\n }\r\n\r\n async getPlacePredictions(input: string, origin: LatLng | undefined): Promise {\r\n const locationRestriction = origin ? new google.maps.Circle({center: origin, radius: 50_000}).getBounds() : undefined;\r\n const request: google.maps.places.AutocompletionRequest =origin? {\r\n input,\r\n locationRestriction,\r\n location: new google.maps.LatLng(origin.lat, origin.lng),\r\n radius: 50_000,\r\n }:{\r\n input,\r\n region:'au'\r\n };\r\n const result: google.maps.places.AutocompleteResponse = await this._autocompleteService.getPlacePredictions(request);\r\n // console.log(result,\"gmap\");\r\n return result.predictions.map((prediction) => this._transformPlacePrediction(prediction))\r\n }\r\n\r\n _transformPlacePrediction(prediction: google.maps.places.AutocompletePrediction): AutocompletePrediction {\r\n const { place_id: placeId, structured_formatting: structuredFormatting } = prediction;\r\n const { main_text: mainText, secondary_text: secondaryText, main_text_matched_substrings: mainTextMatchedSubstrings } = structuredFormatting;\r\n let htmlText = mainText;\r\n mainTextMatchedSubstrings.reverse();\r\n\r\n for (const ss of mainTextMatchedSubstrings) {\r\n htmlText = htmlText.slice(0, (ss.length + ss.offset)) + \"\" + htmlText.slice((ss.length + ss.offset));\r\n htmlText = htmlText.slice(0, ss.offset) + \"\" + htmlText.slice(ss.offset);\r\n }\r\n\r\n return {\r\n htmlText,\r\n placeId,\r\n textLocation: secondaryText,\r\n title: mainText,\r\n }\r\n }\r\n}\r\n","\r\n\r\n\r\n\r\n","/**\r\n * Location Map Search\r\n */\r\n\r\nimport { type App } from '~/app';\r\n\r\nimport AssetMap from './asset-map/AssetMap.vue';\r\nimport EsriMap from './esrimaps-map/EsrimapsMap.vue';\r\nimport GmapsMapVue from './gmaps-map/GmapsMap.vue';\r\nimport LlcMpcMap from './llc-mpc-map/LlcMpcMap.vue';\r\nimport LlcMpcEventMap from './llc-mpc-event-map/LlcMpcEventMap.vue';\r\nimport LlcMpcEventMapCards from './llc-mpc-event-map/LlcMpcEventCards.vue';\r\nimport LlcMpcMapLlcAmenityCards from './llc-mpc-map/LlcMpcMapLlcAmenityCards.vue';\r\nimport LlcMpcMapLlcCommunityCards from './llc-mpc-map/LlcMpcMapLlcCommunityCards.vue';\r\nimport LlcMpcMapPropertyCards from './llc-mpc-map/LlcMpcMapPropertyCards.vue';\r\nimport LocationMap from './location-map/LocationMap.vue';\r\nimport LocationMapSearch from './location-map/LocationMapSearch.vue';\r\n\r\nexport default (app: App) => {\r\n\tapp.logger.debug('[Stockland FE] Initialise Stockland Map Components');\r\n\tapp.vueApp.component('gmaps-map', GmapsMapVue);\r\n\tapp.vueApp.component('location-map-search', LocationMapSearch);\r\n\tapp.vueApp.component('location-map', LocationMap);\r\n\tapp.vueApp.component('asset-map', AssetMap);\r\n\tapp.vueApp.component('llc-mpc-map', LlcMpcMap);\r\n\tapp.vueApp.component('llc-mpc-event-map', LlcMpcEventMap);\r\n\tapp.vueApp.component('llc-mpc-map-property-cards', LlcMpcMapPropertyCards);\r\n\tapp.vueApp.component('llc-mpc-map-llc-community-cards', LlcMpcMapLlcCommunityCards);\r\n\tapp.vueApp.component('llc-mpc-map-llc-amenity-cards', LlcMpcMapLlcAmenityCards);\r\n\tapp.vueApp.component('llc-mpc-event-map-cards', LlcMpcEventMapCards);\r\n\tapp.vueApp.component('esrimaps-map', EsriMap);\r\n};\r\n","\r\n\r\n\r\n\r\n","/**\r\n * Media Article Listing\r\n */\r\n\r\nimport { App } from '~/app';\r\n\r\nimport ArticleListing from './ArticleListing.vue';\r\n\r\nexport default (app: App) => {\r\n\t app.logger.debug('[Stockland FE] Initialise Stockland Media Article Listing Component');\r\n\t app.vueApp.component('article-listing', ArticleListing);\r\n};\r\n","/**\r\n * Carousel Component\r\n * @module patterns/components/banners/asset-hero-banner\r\n */\r\nimport Glide from '@glidejs/glide';\r\n\r\nimport { type App } from '~/app';\r\n\r\nexport const carousels: Glide[] = [];\r\n\r\nexport default (app: App) => {\r\n\r\n app.afterMount\r\n .then(() => {\r\n mountMarketplacerProductBlock();\r\n })\r\n .catch((error: ErrorOptions | undefined) => {\r\n throw new Error('[Stockland FE] Unable to register Stockland Step by Marketplacer Product Block component', error);\r\n });\r\n\r\n return function destropyMarketPlacerProductBlock() {\r\n while (carousels.length > 0) {\r\n const c = carousels.pop();\r\n if (c) {\r\n c.destroy();\r\n }\r\n }\r\n\r\n app.logger.debug('[DXA] Marketplacer Product Block component destroyed');\r\n };\r\n}\r\n\r\nexport function mountMarketplacerProductBlock( ) {\r\n const marketplacerProductBlocks = document.querySelectorAll('.marketplacer-product-block');\r\n\r\n for (const block of marketplacerProductBlocks) {\r\n\r\n const carouselGlide = new Glide(block, {\r\n type: 'carousel',\r\n perView: 3,\r\n focusAt: 0,\r\n gap: 32,\r\n rewind: false,\r\n breakpoints:{\r\n 767: {\r\n peek:0,\r\n focusAt: 0,\r\n perView: 1,\r\n\r\n },\r\n 1100: {\r\n peek:0,\r\n focusAt: 0,\r\n perView: 2,\r\n\r\n },\r\n 1280:{\r\n peek:0,\r\n focusAt: 0,\r\n perView: 3,\r\n\r\n },\r\n 1441: {\r\n peek:0,\r\n focusAt: 0,\r\n perView: 3,\r\n\r\n }\r\n }\r\n });\r\n\r\n carouselGlide.mount();\r\n carousels.push(carouselGlide as Glide);\r\n\r\n\r\n }\r\n}\r\n","\r\n/**\r\n * Modal Media Gallery Constant\r\n * @module patterns/components/mediaGallery\r\n */\r\n\r\n// Determine\r\n\r\n/**\r\n * Class to style and load the carousel\r\n */\r\nexport const CLASS_NAME = 'media-gallery-carousel';\r\n\r\n/**\r\n * Options for the modal carousel.\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport const OPTIONS = {\r\n gap: 0,\r\n classes: {\r\n direction: {\r\n ltr: 'carousel--ltr',\r\n rtl: 'carousel--rtl',\r\n },\r\n slider: 'carousel--slider',\r\n carousel: 'carousel--carousel',\r\n swipeable: 'carousel--swipeable',\r\n dragging: 'carousel--dragging',\r\n cloneSlide: 'carousel--clone',\r\n activeNav: 'carousel__bullet--active',\r\n activeSlide: 'carousel__slide--active',\r\n disabledArrow: 'carousel--disabled',\r\n },\r\n};\r\n","/* eslint-disable no-inner-declarations */\r\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\r\n/* eslint-disable @typescript-eslint/no-unsafe-call */\r\n// Above global eslint rules disabled as GlideJS has no TS implementation\r\n/**\r\n * Carousel Component\r\n * @module patterns/components/media-gallery\r\n */\r\n// eslint-disable-next-line @typescript-eslint/ban-tslint-comment\r\n/* tslint:disable:no-any */\r\n\r\n// Dependencies\r\nimport Glide from '@glidejs/glide';\r\n\r\n// Local Dependencies\r\nimport { markElementReady } from '@root/src/framework/scripts/helpers/element-ready';\r\nimport { parseToObject } from '@root/src/framework/scripts/utils/parse';\r\nimport { scrollIntoView } from '~/framework/utils/scroll';\r\n/**\r\n * Initialises the Carousel component\r\n */\r\nimport { type App } from '~/app';\r\n\r\nimport JsController from '../js-controller'\r\n\r\nimport { CLASS_NAME, OPTIONS } from './constants';\r\n\r\n// eslint-disable-next-line import/no-unassigned-import\r\nimport './media-gallery.scss';\r\n\r\nexport default (app: App) => {\r\n\r\n const controller = new JsController(app, 'Media Gallery');\r\n controller.addMountFunction(() => {\r\n mountMediaGallery(controller);\r\n })\r\n\r\n return controller.init();\r\n}\r\n\r\n\r\nexport const carousels = new Map();\r\n\r\nexport function mountMediaGallery( controller: JsController ) {\r\n \r\n\r\n const elements = document.querySelectorAll(`.${CLASS_NAME}`);\r\n const mediaGallery = document.querySelectorAll('.media-gallery');\r\n\r\n // Loop through and individually instantiate each Glide instance\r\n const initialiseMediaGallery = (elements: NodeListOf) => {\r\n for (const gallery of mediaGallery) {\r\n for (const element of elements) {\t\t\t\t\r\n const carouselOptions = parseToObject(element.dataset.carouselOptions);\r\n const carouselId = element.dataset.carouselId ?? \"\";\r\n const slides = element.querySelectorAll('.carousel__slide:not(.glide__slide--clone)');\r\n\r\n const indexClass = `${CLASS_NAME}-${carouselId}`;\r\n element.classList.add(indexClass);\r\n\r\n const existingGlides = carousels.get(indexClass)!;\r\n if (existingGlides) {\r\n existingGlides.destroy();\r\n }\r\n\r\n const glide = new Glide(`.${indexClass}`, {\r\n ...OPTIONS,\r\n ...carouselOptions,\r\n type: 'carousel',\r\n perView: 1,\r\n gap: 90,\r\n });\r\n\r\n\r\n //Display current slide index\r\n const updateNumberIndicatorIndex = (slides: NodeListOf) => {\r\n const slideIndex = element.querySelector('.slide-index');\r\n\r\n if (slideIndex && slides) {\r\n slideIndex.innerHTML = `${Number(glide.index) + 1} / ${slides.length}`;\r\n }\r\n };\r\n\r\n const viewMoreButton = gallery.querySelectorAll('.view-more-btn');\r\n for (const button of viewMoreButton) {\r\n refreshCarouselOnClick(button)\r\n }\r\n\r\n const galleryImage = gallery.querySelectorAll('.gallery-images');\r\n for (const [index, image] of galleryImage.entries()) {\r\n refreshCarouselOnClick(image,index)\r\n }\r\n\r\n function refreshCarouselOnClick(element: HTMLElement,slideStart?:number) {\t\r\n controller.addListener(element, 'click', ()=>{\r\n setTimeout(() => {\r\n glide.update(\r\n {\r\n startAt:slideStart ?? 0\r\n }\r\n );\r\n }, 200);\r\n })\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-loop-func,unicorn/consistent-function-scoping\r\n const scrollImageIntoView = (element:HTMLElement) => {\r\n scrollIntoView(element, {\r\n behavior: 'smooth',\r\n inline: 'center',\r\n block: 'nearest'\r\n });\r\n };\r\n\r\n // Observe class change in image thumbnails\r\n const galleryPictures = gallery?.querySelectorAll('.gallery-thumbnail-list > div')\r\n const galleryImageDescription = gallery.querySelectorAll('.image-description');\t\t\t\t\t\r\n const slideIndex = gallery.querySelector('.slide-index');\r\n\r\n\r\n if (galleryPictures) for (const picture of galleryPictures) {\r\n const observer = new MutationObserver(function() {\r\n if(picture.classList.contains('glide__bullet--active')){\r\n scrollImageIntoView(picture)\r\n for (const description of galleryImageDescription) {\r\n if (description.dataset.imageIndex === picture?.dataset.imageIndex){\r\n description?.classList.remove('hidden')\r\n }else if(!description.classList.contains('hidden')){\r\n description?.classList.add('hidden')\r\n }\r\n }\r\n\r\n if(picture.classList.contains('video-thumbnail')){\r\n slideIndex?.classList.add('hidden')\r\n }else{\r\n slideIndex?.classList.remove('hidden')\r\n\r\n }\r\n }\r\n });\r\n observer.observe(picture, {\r\n attributes: true,\r\n attributeFilter: [\"class\"]\r\n });\r\n }\t\r\n\t\t\t\t\r\n glide.on('update', function () {\r\n updateNumberIndicatorIndex(slides);\r\n });\r\n\r\n glide.on('swipe.end', function () {\r\n updateNumberIndicatorIndex(slides);\r\n });\r\n\r\n glide.on('move.after', function () {\r\n updateNumberIndicatorIndex(slides);\r\n });\r\n \r\n // On screensize re-initialise the carousel to handle per view updates on different screensizes\r\n const glideUpdate = () => glide.update();\r\n\r\n controller.addListener(window, \"resize\", glideUpdate)\r\n\t\t\r\n glide.mount();\r\n\t\t\t\r\n carousels.set(indexClass, glide);\r\n\t\t\t\r\n markElementReady(element);\r\n\t\t\t }\r\n\r\n }\r\n \r\n };\r\n\r\n initialiseMediaGallery(elements);\r\n\r\n const modal = document.querySelector('#media-gallery-modal-id')\r\n if (modal) {\r\n console.log(\"mounting to modal\");\r\n if (!modal.dataset.listenerAdded) {\r\n controller.addListener(modal, 'hidden.bs.modal', () => {\r\n const allVideoControls = document.querySelectorAll('.plyr__control');\r\n for (const button of allVideoControls) {\r\n if (button.classList.contains('plyr__control--pressed')) {\r\n button.dispatchEvent(new Event('click'));\r\n }\r\n }\r\n });\r\n modal.dataset.listenerAdded = 'true';\r\n }\r\n }\r\n\r\n\r\n}\r\n","import { type App } from '~/app';\r\nimport { isMobile } from '~/framework/helpers/browser/media-query';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Anchor Links Component');\r\n\r\n app.afterMount\r\n .then(() => {\r\n // Desktop\r\n mountAnchorLinks();\r\n })\r\n .catch((error: ErrorOptions) => {\r\n throw new Error('[Stockland FE] Unable to register Stockland Anchor Links Island Component', error);\r\n });\r\n\r\n return function destroyVerticalScrollCarousel() {\r\n app.logger.debug('[DXA] Anchor Links Component destroyed');\r\n };\r\n}\r\n\r\nfunction mountAnchorLinks() {\r\n for (const link of document.querySelectorAll(\".anchor-links-link\") as NodeListOf) {\r\n const triggerLink = () => {\r\n window.location.hash = '';\r\n window.location.assign(link.href);\r\n };\r\n\r\n link.addEventListener(\"click\", (event: MouseEvent) => {\r\n // Stop the implicit navigation to #\r\n event.preventDefault();\r\n\r\n if (isMobile()) {\r\n // Trigger the link after a delay to ensure the dropdown closes first\r\n setTimeout(triggerLink, 500);\r\n } else {\r\n // There is no dropdown on mobile, so immediately trigger the link\r\n triggerLink();\r\n }\r\n });\r\n }\r\n}\r\n","/**\r\n * Wayfinding Component\r\n * @module patterns/components/navigation/wayfinding-bar/wayfinding-bar\r\n */\r\nimport { type App } from '~/app';\r\n\r\nimport JsController from '../../js-controller';\r\n\r\nexport default (app: App) => {\r\n\r\n const controller = new JsController(app, 'Wayfinding Bar');\r\n controller.addMountFunction(() => {\r\n mountWayfindingBar(controller);\r\n })\r\n\r\n return controller.init();\r\n}\r\n\r\nfunction mountWayfindingBar(controller: JsController) {\r\n const elements = document.querySelectorAll('.wayfinding-bar');\r\n let index = 0;\r\n \r\n for (const element of elements) {\r\n handleWayfindingBarBulletClick(controller, element);\r\n displayWayfindingBullets(element);\r\n handleWayfindingScroll(element)\r\n \r\n index = index + 1;\r\n }\r\n}\r\n\r\n\r\nconst handleWayfindingBarBulletClick = (controller: JsController, element: HTMLElement) => {\r\n const wayfindingBullets = element.querySelectorAll('.wayfinding-bullet');\r\n \r\n for (const wayfindingBullet of wayfindingBullets) {\r\n controller.addListener(wayfindingBullet, \"click\", () => {\r\n const wayfindingId = wayfindingBullet.dataset.wayfindingId;\r\n const activeLink = document.querySelector(`[data-wayfinding-id=\"${wayfindingId}\"]`);\r\n activeLink?.scrollIntoView({behavior: \"smooth\", inline: \"center\"});\r\n\r\n for (const bullet of wayfindingBullets) {\r\n bullet.classList.remove('first:active-bullet','active-bullet');\r\n }\r\n\r\n wayfindingBullet.classList.add('active-bullet');\r\n });\r\n \r\n }\r\n}\r\n\r\nconst displayWayfindingBullets = (element: HTMLElement) => {\r\n const wayfindingBulletContainer = element.querySelector('.wayfinding-bullet-container') ;\r\n const wayfindingLinkContainer = element.querySelector('.wayfinding-link-container') ;\r\n if (!wayfindingBulletContainer || !wayfindingLinkContainer) return;\r\n\r\n const checkOverflowAndDisplayBullets = () => {\r\n const isOverflowing = wayfindingLinkContainer.scrollWidth > wayfindingLinkContainer.clientWidth;\r\n if (isOverflowing) {\r\n wayfindingBulletContainer.classList.remove('hidden');\r\n } else {\r\n wayfindingBulletContainer.classList.add('hidden');\r\n }\r\n };\r\n\r\n // Initial check\r\n checkOverflowAndDisplayBullets();\r\n\r\n // Check on screen resize\r\n window.addEventListener('resize', checkOverflowAndDisplayBullets);\r\n\r\n};\r\n\r\n\r\nfunction handleWayfindingScroll( element : HTMLElement){\r\n const wayfindingLinkContainer = element.querySelector('.wayfinding-link-container') ;\r\n\r\n wayfindingLinkContainer?.addEventListener('scroll', () => {\r\n const wayfindingLinkContainer = document.querySelector('.wayfinding-link-container')!;\r\n const scrollPercentage = checkWayfindingScrollPercent(wayfindingLinkContainer);\r\n\r\n //Shows active pip when dragging wayfinding links on mobile\r\n wayfindingLinkContainer.addEventListener('touchmove', handleTouchMove);\r\n\r\n function handleTouchMove(){\r\n const wayfindingLinkBullets = document.querySelectorAll('.wayfinding-bullet')!;\r\n for (const [index, bullet] of [...wayfindingLinkBullets].entries()) {\r\n const bulletPercentageLower = Math.ceil(100 / wayfindingLinkBullets.length) * index\r\n const bulletPercentageHigher = Math.ceil(100 / wayfindingLinkBullets.length) * (index + 1)\r\n bullet.classList.remove('first:active-bullet');\r\n if (bulletPercentageLower <= scrollPercentage && scrollPercentage <= bulletPercentageHigher) {\r\n bullet.classList.add('active-bullet');\r\n }else{\r\n bullet.classList.remove('active-bullet');\r\n } \r\n }\r\n }\r\n } );\r\n}\r\n\r\nfunction checkWayfindingScrollPercent(element: HTMLElement) {\r\n const scrollableWidth = element.scrollWidth - element.clientWidth;\r\n const currentScroll = element.scrollLeft;\r\n const scrollPercentage = Math.floor((currentScroll / scrollableWidth) * 100);\r\n\r\n return scrollPercentage;\r\n}\r\n","import { offset } from '@popperjs/core';\r\nimport { add } from 'lodash';\r\nimport { Html5Event } from 'plyr';\r\n\r\nimport { type App } from '~/app';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Floatier Island Component');\r\n\r\n const listeners: Array<[Document | Element | Window , string, EventListenerOrEventListenerObject]> = [];\r\n\r\n app.afterMount\r\n .then(() => {\r\n // Desktop\r\n mountFloatierIsland(\r\n listeners,\r\n '.floatier-island',\r\n '.indicator',\r\n 'active-tab-indicator',\r\n '#indicator-',\r\n '.indicator-container-desktop'\r\n );\r\n // Mobile\r\n mountFloatierIsland(\r\n listeners,\r\n '.floatier-island',\r\n '.indicator-mobile',\r\n 'active-step-indicator',\r\n '#indicator-mobile-',\r\n '.indicator-container-mobile'\r\n );\r\n })\r\n .catch((error) => {\r\n throw new Error('[Stockland FE] Unable to register Stockland Floatier Island Component', error);\r\n });\r\n\r\n return function destroyFloatierIslandl() {\r\n unMountFloatierIsland(listeners);\r\n app.logger.debug('[DXA] Floatier Island Component destroyed');\r\n };\r\n};\r\n\r\nfunction mountFloatierIsland(\r\n listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>,\r\n componentSelector: string, // Used to find slider parent wrapper\r\n indicatorSelector: string, // Used to find indicators (useful when multiple handle the same slides)\r\n activeIndicatorClass: string,\r\n currentIndicatorPrefix: string,\r\n indicatorContainer: string,\r\n root: HTMLElement | null = null\r\n) {\r\n let rootNode: HTMLElement | Document = document;\r\n if (root) rootNode = root;\r\n\r\n const floatingIslands = rootNode.querySelectorAll(componentSelector);\r\n\r\n for (const currentFloatingIsland of floatingIslands) {\r\n const islandIndicators = currentFloatingIsland.querySelectorAll(indicatorSelector);\r\n\r\n //setting up floating island\r\n let isIslandFixed = false;\r\n let initialIslandOffset = 0;\r\n const defaultIslandOffset = 96;\r\n // eslint-disable-next-line @typescript-eslint/no-loop-func\r\n window.addEventListener('scroll', () => {\r\n const floatIslandElement = currentFloatingIsland.querySelector(indicatorContainer);\r\n //try to find the offset of island from window's top before the position is fixed\r\n //once the position is fixed try to use the offset that was set earlier\r\n initialIslandOffset = isIslandFixed\r\n ? initialIslandOffset\r\n : (floatIslandElement?.getBoundingClientRect().top ?? 0) + window.scrollY;\r\n\r\n if (window.scrollY > initialIslandOffset - defaultIslandOffset) {\r\n floatIslandElement?.classList.add('fixed', 'left-0', 'right-0');\r\n isIslandFixed = true;\r\n } else {\r\n floatIslandElement?.classList.remove('fixed', 'left-0', 'right-0');\r\n isIslandFixed = false;\r\n }\r\n });\r\n\r\n //setup intersection observer\r\n\r\n const isMobileView = window.matchMedia(\"(max-width: 1024px)\").matches;\r\n\r\n\r\n const options = {\r\n root: null,\r\n rootMargin: isMobileView ? '-40% 0px -10% 0px' : '-30% 0px -60% 0px',\r\n threshold: isMobileView ? 0.25: 0\r\n };\r\n\r\n const callback = (entries: any[]) => {\r\n for (const entry of entries) {\r\n if (entry.isIntersecting) {\r\n //when section goes into the viewport\r\n setActiveIsland(entry.target.id);\r\n }\r\n }\r\n };\r\n\r\n const observer = new IntersectionObserver(callback, options);\r\n //for all links on floating island\r\n for (const currentIndicator of islandIndicators) {\r\n const currentAnchorBlock = rootNode.querySelector(\r\n currentIndicator.dataset?.indicates ? `#${currentIndicator.dataset.indicates}` : ''\r\n );\r\n\r\n addIndicatorClickEvents(currentIndicator, currentAnchorBlock);\r\n //set observer for all section linked to floating island component\r\n if (currentAnchorBlock) {\r\n observer.observe(currentAnchorBlock);\r\n }\r\n }\r\n\r\n const removeAllActiveIndicator = () => {\r\n for (const indicator of islandIndicators) {\r\n indicator.classList.remove(activeIndicatorClass);\r\n }\r\n };\r\n\r\n const setActiveIsland = (targetId: string) => {\r\n removeAllActiveIndicator();\r\n const inactiveIndicator = currentFloatingIsland.querySelector(\r\n `${currentIndicatorPrefix}${targetId}`\r\n );\r\n inactiveIndicator?.classList.add(activeIndicatorClass);\r\n };\r\n\r\n let previousScrollpos = window.scrollY;\r\n const floatingIsland = rootNode.querySelector(\".indicator-container-desktop\")\r\n const ribbonBarParent = rootNode.querySelector(\".ribbon-bar-parent\")\r\n const topNavigation = rootNode.querySelector(\".top-navigation-bar\")\r\n if (floatingIsland && ribbonBarParent && topNavigation){\r\n window.addEventListener('scroll', function () {\r\n let ribbonBarParentHeight = 0;\r\n let topNavigationHeight = 0;\r\n const floatingIslandTopPadding = 16;\r\n const currentScrollPos = window.scrollY;\r\n ribbonBarParentHeight = ribbonBarParent.offsetHeight;\r\n topNavigationHeight = topNavigation.offsetHeight;\r\n floatingIsland.style.top = (previousScrollpos > currentScrollPos) ? `${ribbonBarParentHeight + topNavigationHeight + floatingIslandTopPadding }px` : `${topNavigationHeight + floatingIslandTopPadding}px`\r\n previousScrollpos = currentScrollPos;\r\n })\r\n }\r\n }\r\n}\r\n\r\nfunction addIndicatorClickEvents(indicator: HTMLElement, target: HTMLElement | null) {\r\n indicator.addEventListener('click', (event) => {\r\n event.preventDefault();\r\n if (target) {\r\n // Determine if we are in mobile view\r\n const isMobileView = window.matchMedia(\"(max-width: 1024px)\").matches;\r\n\r\n // Get the current scroll position\r\n const currentScrollPos = window.scrollY;\r\n\r\n // Get the top position of the target relative to the viewport\r\n const targetPos = target.getBoundingClientRect().top;\r\n\r\n let offset = isMobileView ? 120 :230; // Default offset\r\n\r\n if (isMobileView) {\r\n // Find the floating island element by traversing up from the target\r\n const openMenu = document.querySelector('.indicator-container-mobile');\r\n\r\n\r\n // If the floating island is found and it's a mobile view, adjust the offset\r\n if (openMenu) {\r\n offset += openMenu.offsetHeight;\r\n }\r\n }\r\n\r\n // Calculate the desired scroll position with an offset\r\n const desiredScrollPos = currentScrollPos + targetPos - offset;\r\n\r\n // Smoothly scroll to the desired position\r\n window.scrollTo({\r\n top: desiredScrollPos,\r\n behavior: 'smooth'\r\n });\r\n\r\n if (isMobileView) {\r\n setTimeout(() => {\r\n window.scrollTo({\r\n top: desiredScrollPos,\r\n behavior: 'smooth'\r\n });\r\n }, 50);\r\n }\r\n\r\n\r\n history.pushState({}, '', `#${target.id}`);\r\n }\r\n });\r\n}\r\n\r\nfunction unMountFloatierIsland(\r\n listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>\r\n) {\r\n for (const [element, event, listener] of listeners) {\r\n element.removeEventListener(event, listener);\r\n }\r\n}\r\n","/**\r\n * Carousel Component\r\n * @module patterns/components/banners/asset-hero-banner\r\n */\r\n\r\nimport { defineAsyncComponent } from 'vue';\r\n\r\nimport { type App } from '~/app';\r\n\r\nexport default (app: App) => {\r\n\r\n app.vueApp.component('offers-carousel', defineAsyncComponent(async () => import(\"./OffersCarousel.vue\")));\r\n}\r\n\r\n\r\n","/**\r\n * Offers Card Component\r\n */\r\n\r\nimport { defineAsyncComponent } from 'vue';\r\n\r\nimport { type App } from '~/app';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Offers Card Component');\r\n app.vueApp.component('offers-card', defineAsyncComponent(async () => import(\"./OffersCard.vue\")));\r\n};\r\n","/**\r\n * Offers Modal Component\r\n */\r\n\r\nimport { defineAsyncComponent } from 'vue';\r\n\r\nimport { type App } from '~/app';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Offers Modal Component');\r\n app.vueApp.component('offers-modal', defineAsyncComponent(async () => import(\"./OffersModal.vue\")));\r\n};\r\n","/**\r\n * Offer Modal Button Component\r\n */\r\n\r\nimport { defineAsyncComponent } from 'vue';\r\n\r\nimport { type App } from '~/app';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Offer Modal Button Component');\r\n app.vueApp.component('offers-modal-button', defineAsyncComponent(async () => import(\"./OffersModalButton.vue\")));\r\n};\r\n","/**\r\n * Offer Teaser Component\r\n */\r\n\r\nimport { defineAsyncComponent } from 'vue';\r\n\r\nimport { type App } from '~/app';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Offer Teaser Component');\r\n app.vueApp.component('offer-teaser', defineAsyncComponent(async () => import(\"./OfferTeaser.vue\")));\r\n};\r\n\r\n","/**\r\n * Retail Offers Tile Component\r\n */\r\n\r\nimport { defineAsyncComponent } from 'vue';\r\n\r\nimport { type App } from '~/app';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Retail Offers-Tile Component');\r\n app.vueApp.component('retail-offers-tile', defineAsyncComponent(async () => import(\"./RetailOffersTile.vue\")));\r\n};\r\n","/* eslint-disable @typescript-eslint/no-loop-func */\r\n/**\r\n * Parallax Scroll Block Component\r\n * @module patterns/components/parallax-scroll-block\r\n */\r\n\r\nimport { App } from '~/app';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Parallax Scroll Block Component');\r\n\r\n const listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]> = [];\r\n\r\n app.afterMount\r\n .then(() => {\r\n mountParallaxScrollBlock(listeners);\r\n })\r\n .catch((error) => {\r\n throw new Error('[Stockland FE] Unable to register Stockland Parallax Scroll Block component', error);\r\n });\r\n\r\n return function destroyParallaxScrollBlock() {\r\n unMountParallaxScrollBlock(listeners);\r\n\r\n app.logger.debug('[DXA] Parallax Scroll Block component destroyed');\r\n };\r\n};\r\n\r\n// Extracted method for logic reuse within other component\r\nexport function mountParallaxScrollBlock(\r\n listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>,\r\n root: HTMLElement | null = null\r\n) {\r\n let rootNode: Document | HTMLElement = document;\r\n if (root) rootNode = root;\r\n\r\n const parallaxContainers = rootNode.querySelectorAll('.parallax-container');\r\n\r\n for (const parallaxContainer of parallaxContainers) {\r\n const parallaxBlock = parallaxContainer.querySelector('.parallax-background');\r\n\r\n if (parallaxBlock) {\r\n const logo = parallaxBlock.querySelector('.logo-container');\r\n const header = parallaxBlock.querySelector('.header-container');\r\n const modals = parallaxBlock.querySelectorAll('.modal');\r\n const navigationBar = rootNode?.querySelector('header.navigation');\r\n const navigationBarHeight = navigationBar ? navigationBar.clientHeight : 0;\r\n const cards = parallaxBlock.querySelectorAll('.card');\r\n let scrollTop = parallaxContainer.scrollTop;\r\n\r\n const initialiseParallaxBackgroundLock = (entries: any) => {\r\n for (const entry of entries) {\r\n if (entry.isIntersecting) {\r\n parallaxContainer.focus();\r\n\r\n setTimeout(() => {\r\n if (logo) {\r\n logo.classList.add('parallax-show');\r\n }\r\n }, 1000);\r\n\r\n setTimeout(() => {\r\n if (header) {\r\n header.classList.add('parallax-show');\r\n }\r\n }, 1500);\r\n\r\n return;\r\n }\r\n }\r\n };\r\n\r\n const initialiseParallaxScroll = (parallaxBlock: HTMLElement) => {\r\n const backgroundLayers = parallaxBlock?.querySelectorAll('.parallax-background-layer');\r\n const contentLayer = parallaxBlock?.querySelector('.parallax-content-layer');\r\n if (contentLayer) {\r\n\r\n const handleScroll = () => {\r\n const topOffSet = parallaxContainer.getBoundingClientRect().top;\r\n scrollTop = document.documentElement.scrollTop - (window.scrollY + parallaxContainer.getBoundingClientRect().top);\r\n\r\n\r\n if (topOffSet < navigationBarHeight && scrollTop + window.innerHeight < parallaxContainer.clientHeight) {\r\n\r\n for (const [index, backgroundLayer] of backgroundLayers.entries()) {\r\n const scrollIndicator = window.scrollY/(parallaxContainer.clientHeight-window.innerHeight);\r\n if (scrollIndicator>=1){\r\n backgroundLayer.style.transform = \"\";\r\n backgroundLayer.style.top = \"unset\";\r\n backgroundLayer.style.bottom = \"0\";\r\n backgroundLayer.style.position = \"absolute\";\r\n }\r\n else{\r\n const ind= Math.pow(Math.min(Math.max(scrollIndicator,0),1), 1/(index/10 +1))\r\n const translationValue = -1* ind * (backgroundLayer.clientHeight-window.innerHeight);\r\n backgroundLayer.style.transform = `translate3d(0px, ${translationValue}px, 0px)`;\r\n backgroundLayer.style.top = \"\";\r\n backgroundLayer.style.bottom = \"\";\r\n backgroundLayer.style.position = \"\"\r\n }\r\n }\r\n\r\n //setup intersection observer\r\n const options = {\r\n root: null,\r\n rootMargin: '-30% 0% -30% 0%',\r\n threshold: 0,\r\n };\r\n\r\n const callback = (entries:any[]) => {\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\r\n const interSectingEntry = entries?.find(x=>x.isIntersecting);\r\n if(interSectingEntry)\r\n {\r\n interSectingEntry.target.style.opacity='1';\r\n const allNonInterSectingEntry= entries.filter(x=>!x.isIntersecting);\r\n if (allNonInterSectingEntry) for (const element of allNonInterSectingEntry) {\r\n element.target.style.opacity='0';\r\n }\r\n }\r\n \r\n \r\n };\r\n\r\n const cardPositionObserver = new IntersectionObserver(callback, options);\r\n\r\n for (const card of cards) {\r\n cardPositionObserver.observe(card);\r\n }\r\n }\r\n\r\n \r\n\r\n };\r\n\r\n window.addEventListener('scroll', handleScroll);\r\n listeners.push([window, 'scroll', handleScroll]);\r\n }\r\n\r\n };\r\n\r\n const observerInitialiseParallax = new IntersectionObserver(initialiseParallaxBackgroundLock, {\r\n threshold: 0.1,\r\n });\r\n\r\n for (const modal of modals) {\r\n // let scrollPostion = 0;\r\n\r\n const handleModalShow = () => {\r\n const modalBackground = rootNode.querySelector('.modal-backdrop');\r\n modalBackground?.classList.add('!top-auto');\r\n };\r\n\r\n modal.addEventListener('shown.bs.modal', handleModalShow);\r\n listeners.push([modal, 'shown.bs.modal', handleModalShow]);\r\n }\r\n\r\n initialiseParallaxScroll(parallaxBlock);\r\n\r\n window.addEventListener('resize', () => initialiseParallaxScroll(parallaxBlock));\r\n observerInitialiseParallax.observe(parallaxContainer);\r\n }\r\n }\r\n}\r\n\r\nexport function unMountParallaxScrollBlock(\r\n listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>\r\n) {\r\n for (const [element, event, listener] of listeners) {\r\n element.removeEventListener(event, listener);\r\n }\r\n}\r\n\r\nfunction between(x: number, min: number, max: number) {\r\n return x >= min && x <= max;\r\n}\r\n","/**\r\n * Product-Search Component\r\n */\r\n\r\nimport { defineAsyncComponent } from 'vue';\r\n\r\nimport { getQuery } from '@root/src/framework/scripts/utils/url';\r\nimport { type App } from '~/app';\r\n\r\nimport { type FilterItems } from '../../../../framework/scripts/use/store/search/interfaces';\r\nimport { type MultiRangeSlider } from '../../form-and-content/fields/range-slider/interfaces';\r\nimport { type TabSelection } from '../../form-and-content/group-fields/tab-filter/interfaces';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Product-Search Component');\r\n app.vueApp.component(\r\n 'product-search',\r\n defineAsyncComponent(async () => import('./ProductSearch.vue'))\r\n );\r\n app.vueApp.component(\r\n 'product-filter-modal',\r\n defineAsyncComponent(async () => import('./ProductFilterModal.vue'))\r\n );\r\n app.vueApp.component(\r\n 'product-search-input',\r\n defineAsyncComponent(async () => import('./ProductSearchInput.vue'))\r\n );\r\n app.vueApp.component(\r\n 'product-search-listing',\r\n defineAsyncComponent(async () => import('./ProductSearchListing.vue'))\r\n );\r\n};\r\n\r\nexport function mapTabSelectionData(\r\n filterData: FilterItems,\r\n defaultSelection: string | undefined\r\n): TabSelection | undefined {\r\n //check if querystring has the parent selection filter already set\r\n const currentQuery = getQuery();\r\n if (filterData.type == 'parent' && currentQuery?.filters) {\r\n const currentFilterQuery = JSON.parse(currentQuery.filters);\r\n if (filterData.id in currentFilterQuery) {\r\n defaultSelection = currentFilterQuery[filterData.id];\r\n }\r\n }\r\n\r\n if (filterData)\r\n return {\r\n id: filterData.id,\r\n title: filterData.title,\r\n type: filterData.type,\r\n items: filterData.items.map((x, index) => ({\r\n id: x.id,\r\n text: x.title,\r\n alternateTitle: x.alternateTitle ? x.alternateTitle : x.title,\r\n value: x.count,\r\n selected: defaultSelection ? x.id == defaultSelection ? true : false : (index == 0 ? true : false),\r\n })),\r\n };\r\n}\r\n\r\nconst floor = (value: number) => Math.floor(value / 10) * 10\r\nconst ceil = (value: number) => Math.ceil(value / 10) * 10\r\n\r\nexport function mapMultiRangeSliderData(filterData: FilterItems, defaultSelection: number[]): MultiRangeSlider {\r\n // console.log('mapping range slider', defaultSelection);\r\n return {\r\n id: filterData.id,\r\n min: floor(Number.parseFloat(filterData.items.filter((x) => x.id == 'min').map((x) => x.title)[0] ?? 0)),\r\n max: ceil(Number.parseFloat(filterData.items.filter((x) => x.id == 'max').map((x) => x.title)[0] ?? 0)),\r\n minValue: defaultSelection\r\n ? defaultSelection[0]\r\n : floor(Number.parseFloat(filterData.items.filter((x) => x.id == 'min').map((x) => x.title)[0] ?? 0)),\r\n maxValue: defaultSelection\r\n ? defaultSelection[1]\r\n : ceil(Number.parseFloat(filterData.items.filter((x) => x.id == 'max').map((x) => x.title)[0] ?? 0)),\r\n prefix: filterData.items.filter((x) => x.id == 'prefix').map((x) => x.title)[0],\r\n suffix: filterData.items.filter((x) => x.id == 'suffix').map((x) => x.title)[0],\r\n step: filterData.items.filter((x) => x.id == 'step').map((x) => x.title)[0],\r\n label: filterData.title,\r\n type: filterData.type,\r\n };\r\n}\r\n\r\nexport const filterIconMap = {\r\n state: 'location',\r\n area: 'lot-skinny',\r\n rent: 'dollar-rounded',\r\n term: 'search-skinny',\r\n};\r\n","/* eslint-disable @typescript-eslint/naming-convention */\r\n\r\nimport { type App } from '~/app';\r\n\r\nimport JsController from '../js-controller';\r\nimport { info } from 'node:console';\r\nimport { set } from 'lodash';\r\nimport { doc } from 'prettier';\r\n\r\nexport default (app: App) => {\r\n\tconst controller = new JsController(app, 'Product Details');\r\n\tcontroller.addMountFunction(() => {\r\n\t\tmountProductDetails(controller);\r\n\t});\r\n\r\n\treturn controller.init();\r\n};\r\n\r\nexport function mountProductDetails(controller: JsController) {\r\n\tconst isMobileScreen = window.innerWidth <= 768 ? true : false;\r\n\r\n\tconst textContainers = document.querySelectorAll(`.product-detail-text-container`);\r\n\r\n\tfor (const textContainer of textContainers) {\r\n\t\tconst text = textContainer.querySelector('.product-detail-text');\r\n\t\tif (text) {\r\n\t\t\tconst style = window.getComputedStyle(text);\r\n\t\t\tconst lineHeight = Number.parseFloat(style.lineHeight);\r\n\t\t\tconst containerHeight = text.clientHeight;\r\n\t\t\tconst lines = containerHeight / lineHeight;\r\n\r\n\t\t\tif (lines > 8) {\r\n\t\t\t\tconst readMore = textContainer.querySelector('.product-detail-read-more');\r\n\t\t\t\tconst gradient = textContainer.querySelector('.product-detail-text-gradient');\r\n\t\t\t\tif (readMore && !readMore.dataset.listenerAdded && gradient) {\r\n\t\t\t\t\treadMore.dataset.listenerAdded = 'true';\r\n\r\n\t\t\t\t\treadMore.classList.remove('hidden');\r\n\t\t\t\t\tgradient.classList.remove('hidden');\r\n\r\n\t\t\t\t\tconst inner = readMore.querySelector('.product-detail-read-more-inner');\r\n\t\t\t\t\tconst icon = readMore.querySelector('.icon-item');\r\n\r\n\t\t\t\t\tcontroller.addListener(inner!, 'click', () => {\r\n\t\t\t\t\t\tconst gradient = textContainer.querySelector('.product-detail-text-gradient');\r\n\t\t\t\t\t\tconst readMoreText = inner!.querySelector('.read-more-text');\r\n\r\n\t\t\t\t\t\tif (readMoreText!.textContent?.trim() === 'Read More') {\r\n\t\t\t\t\t\t\t// Actions for Read More\r\n\t\t\t\t\t\t\tgradient?.classList.add('hidden');\r\n\t\t\t\t\t\t\ttext.classList.remove('overflow-hidden', 'max-h-52');\r\n\t\t\t\t\t\t\ttext.classList.add('mb-10');\r\n\t\t\t\t\t\t\treadMoreText!.textContent = 'Read Less';\r\n\t\t\t\t\t\t\ticon!.classList.add('rotate-180'); // Rotate icon\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t// Actions for Read Less\r\n\t\t\t\t\t\t\tgradient?.classList.remove('hidden');\r\n\t\t\t\t\t\t\ttext.classList.add('overflow-hidden', 'max-h-52');\r\n\t\t\t\t\t\t\ttext.classList.remove('mb-10');\r\n\t\t\t\t\t\t\treadMoreText!.textContent = 'Read More';\r\n\t\t\t\t\t\t\ticon!.classList.remove('rotate-180'); // Revert icon rotation\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tconst builderSections = document.querySelectorAll('.product-detail-builder-section');\r\n\r\n\tfor (const builderSection of builderSections) {\r\n\t\tconst builderList = builderSection.querySelector('.product-detail-builder-list');\r\n\t\tconst lines = builderList?.querySelectorAll('li').length;\r\n\t\tconst builderReadMore = builderSection.querySelector('.product-detail-builder-read-more');\r\n\t\tconst builderListContainer = builderSection.querySelector('.product-details-builder-container');\r\n\t\tconst gradient = builderListContainer!.querySelector('.product-detail-builder-gradient');\r\n\r\n\t\tif (lines && lines > 4 && builderReadMore && !builderReadMore?.dataset.listenerAdded) {\r\n\t\t\tbuilderReadMore?.classList.remove('hidden');\r\n\t\t\tbuilderReadMore.dataset.listenerAdded = 'true'; // Set a flag that the listener is added\r\n\t\t\tgradient?.classList.add('bg-gradient-to-t', 'from-primary-background');\r\n\r\n\t\t\tconst inner = builderReadMore?.querySelector('.product-detail-builder-read-more-inner');\r\n\t\t\tconst icon = builderReadMore?.querySelector('.icon-item');\r\n\r\n\t\t\tcontroller.addListener(inner!, 'click', () => {\r\n\t\t\t\tconst readMoreText = inner!.querySelector('.read-more-text');\r\n\r\n\t\t\t\tif (readMoreText!.textContent!.trim() === 'Read More') {\r\n\t\t\t\t\t// Actions for Read More\r\n\t\t\t\t\tgradient?.classList.remove('bg-gradient-to-t', 'from-primary-background');\r\n\t\t\t\t\tbuilderListContainer!.classList.remove('overflow-hidden', 'max-h-96');\r\n\t\t\t\t\treadMoreText!.textContent = 'Read Less';\r\n\t\t\t\t\ticon!.classList.add('rotate-180'); // Rotate icon\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// Actions for Read Less\r\n\t\t\t\t\tgradient?.classList.add('bg-gradient-to-t', 'from-primary-background');\r\n\t\t\t\t\tbuilderListContainer!.classList.add('overflow-hidden', 'max-h-96');\r\n\t\t\t\t\treadMoreText!.textContent = 'Read More';\r\n\t\t\t\t\ticon!.classList.remove('rotate-180'); // Revert icon rotation\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tconst featureSections = document.querySelectorAll('.product-details-features-section');\r\n\r\n\tfor (const featureSection of featureSections) {\r\n\t\tconst LLCIconList = featureSection.querySelector('.LLC-features-icons');\r\n\t\tconst LLCIconCount = LLCIconList?.querySelectorAll('.features-icon').length;\r\n\t\tconst LLCReadMore = featureSection.querySelector('.LLC-read-more');\r\n\r\n\t\tconst MPCIconList = featureSection.querySelector('.MPC-features-icons');\r\n\t\tconst MPCIconCount = MPCIconList?.querySelectorAll('.features-icon').length;\r\n\t\tconst MPCReadMore = featureSection.querySelector('.MPC-read-more');\r\n\r\n\t\tif (LLCReadMore && LLCIconCount && LLCIconCount > 12 && !LLCReadMore!.dataset.listenerAdded) {\r\n\t\t\tLLCReadMore.dataset.listenerAdded = 'true';\r\n\r\n\t\t\tconst icons = LLCIconList?.querySelectorAll('.features-icon');\r\n\t\t\tconst count = isMobileScreen ? 10 : 12;\r\n\r\n\t\t\t// Initially hide icons beyond the count\r\n\t\t\tfor (let index = count; index < icons.length; index++) {\r\n\t\t\t\ticons[index].classList.add('hidden');\r\n\t\t\t}\r\n\r\n\t\t\tLLCReadMore.classList.remove('hidden');\r\n\t\t\tLLCReadMore.classList.add('flex');\r\n\r\n\t\t\tcontroller.addListener(LLCReadMore, 'click', () => {\r\n\t\t\t\tconst readMoreText = LLCReadMore.querySelector('.read-more-text');\r\n\t\t\t\tconst icon = LLCReadMore.querySelector('.icon-item');\r\n\r\n\t\t\t\tif (readMoreText!.textContent!.trim() === 'View All') {\r\n\t\t\t\t\t// Show all icons\r\n\t\t\t\t\tfor (const icon of icons) {\r\n\t\t\t\t\t\ticon.classList.remove('hidden');\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treadMoreText!.textContent = 'View Less';\r\n\t\t\t\t\ticon!.classList.add('rotate-180'); // Rotate icon\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// Hide extra icons\r\n\t\t\t\t\tfor (let index = count; index < icons.length; index++) {\r\n\t\t\t\t\t\ticons[index].classList.add('hidden');\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treadMoreText!.textContent = 'View All';\r\n\t\t\t\t\ticon!.classList.remove('rotate-180'); // Revert icon rotation\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (MPCReadMore && MPCIconCount && MPCIconCount > 6 && !MPCReadMore.dataset.listenerAdded) {\r\n\t\t\tMPCReadMore.dataset.listenerAdded = 'true';\r\n\r\n\t\t\tMPCReadMore.classList.remove('hidden');\r\n\t\t\tMPCReadMore.classList.add('flex');\r\n\r\n\t\t\tconst icons = MPCIconList?.querySelectorAll('.features-icon');\r\n\t\t\tconst count = isMobileScreen ? 4 : 6;\r\n\r\n\t\t\tfor (let index = count; index < icons!.length; index++) {\r\n\t\t\t\ticons![index].classList.add('hidden');\r\n\t\t\t}\r\n\r\n\t\t\tcontroller.addListener(MPCReadMore, 'click', () => {\r\n\t\t\t\tconst readMoreText = MPCReadMore.querySelector('.read-more-text');\r\n\t\t\t\tconst icon = MPCReadMore.querySelector('.icon-item');\r\n\r\n\t\t\t\tif (readMoreText!.textContent!.trim() === 'Read More') {\r\n\t\t\t\t\tfor (const icon of icons!) {\r\n\t\t\t\t\t\ticon.classList.remove('hidden');\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treadMoreText!.textContent! = 'Read Less';\r\n\t\t\t\t\ticon!.classList.add('rotate-180');\r\n\t\t\t\t} else {\r\n\t\t\t\t\tfor (let index = count; index < icons!.length; index++) {\r\n\t\t\t\t\t\ticons![index].classList.add('hidden');\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treadMoreText!.textContent = 'Read More';\r\n\t\t\t\t\ticon!.classList.remove('rotate-180');\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tconst bonusBars = document.querySelectorAll(`.bonus-bar`);\r\n\r\n\tfor (const bonusBar of bonusBars) {\r\n\t\tcontroller.addListener(bonusBar, 'click', () => {\r\n\t\t\tif (bonusBar.getAttribute('aria-expanded') == 'true') {\r\n\t\t\t\tconst chevron = bonusBar.querySelector('.bonus-chevron');\r\n\t\t\t\tchevron?.classList.add('rotate-180');\r\n\t\t\t} else {\r\n\t\t\t\tconst chevron = bonusBar.querySelector('.bonus-chevron');\r\n\t\t\t\tchevron?.classList.remove('rotate-180');\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tconst featureTags = document.querySelectorAll(`.feature-tag`);\r\n\tconst toolTips = document.querySelectorAll(`.feature-tooltip`);\r\n\tfor (const featureTag of featureTags) {\r\n\t\tcontroller.addListener(featureTag, 'click', () => {\r\n\t\t\tfor (const tooltip of toolTips) {\r\n\t\t\t\ttooltip.classList.add('hidden');\r\n\t\t\t\tif (tooltip.classList.contains(featureTag.id)) {\r\n\t\t\t\t\ttooltip.classList.remove('hidden');\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tfunction checkInfoBubbleInViewPort() {\r\n\t\tconst infoBubble = document.querySelectorAll('.information-bubble');\r\n\t\tinfoBubble.forEach((bubble) => {\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tconst bubbleRect = bubble.getBoundingClientRect();\r\n\r\n\t\t\t\tif (bubbleRect.right > window.innerWidth) {\r\n\t\t\t\t\tbubble.classList.remove('left');\r\n\t\t\t\t\tbubble.classList.add('right');\r\n\t\t\t\t} else if (bubbleRect.left < 0) {\r\n\t\t\t\t\tbubble.classList.remove('right');\r\n\t\t\t\t\tbubble.classList.add('left');\r\n\t\t\t\t}\r\n\t\t\t}, 500);\r\n\t\t});\r\n\t}\r\n\tcheckInfoBubbleInViewPort();\r\n\twindow.addEventListener('resize', checkInfoBubbleInViewPort);\r\n}\r\n","\r\n/**\r\n * Modal Product Gallery Constant\r\n * @module patterns/components/productGallery\r\n */\r\n\r\n// Determine\r\n\r\nexport const CLASS_NAME = 'product-gallery-carousel'\r\n\r\n/**\r\n * Options for the modal carousel.\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport const OPTIONS = {\r\n gap: 0,\r\n classes: {\r\n direction: {\r\n ltr: 'carousel--ltr',\r\n rtl: 'carousel--rtl',\r\n },\r\n slider: 'carousel--slider',\r\n carousel: 'carousel--carousel',\r\n swipeable: 'carousel--swipeable',\r\n dragging: 'carousel--dragging',\r\n cloneSlide: 'carousel--clone',\r\n activeNav: 'carousel__bullet--active',\r\n activeSlide: 'carousel__slide--active',\r\n disabledArrow: 'carousel--disabled',\r\n },\r\n};\r\n","/* eslint-disable no-inner-declarations */\r\n/**\r\n * Carousel Component\r\n * @module patterns/components/banners/asset-hero-banner\r\n */\r\n\r\nimport Glide from '@glidejs/glide';\r\n\r\nimport { parseToObject } from '@root/src/framework/scripts/utils/parse';\r\nimport { markElementReady } from '~/framework/helpers/element-ready';\r\nimport { scrollIntoView } from '~/framework/utils/scroll';\r\nimport { type App } from '~/app';\r\n\r\nimport { isMobile } from '../../../framework/scripts/helpers/browser/media-query';\r\nimport JsController from '../js-controller'\r\n\r\nimport { CLASS_NAME, OPTIONS } from './constants';\r\n\r\n// eslint-disable-next-line import/no-unassigned-import\r\nimport './product-gallery.scss';\r\n\r\nexport default (app: App) => {\r\n\r\n const controller = new JsController(app, 'Product Gallery');\r\n controller.addMountFunction(() => {\r\n mountProductGallery(controller);\r\n })\r\n\r\n return controller.init();\r\n}\r\n\r\nexport const carousels = new Map();\r\n\r\nexport function mountProductGallery( controller: JsController ) {\r\n\r\n // Select all hotspot buttons\r\n const hotspotContainers = document.querySelectorAll('.hotspot-container');\r\n\r\n for (const container of hotspotContainers) {\r\n const hotspot = container.querySelector('.hotspot');\r\n const infoBox = container.querySelector('.info-box');\r\n if (hotspot && !hotspot.dataset.listenerAdded && infoBox) {\r\n controller.addListener(hotspot, \"click\", (event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n // Hide all other info boxes except the one related to the clicked hotspot\r\n for (const box of document.querySelectorAll('.info-box')) {\r\n if (box !== infoBox) {\r\n box.classList.add('hidden');\r\n }\r\n }\r\n\r\n // Toggle the visibility of the current info box\r\n infoBox.classList.toggle('hidden');\r\n });\r\n // Mark the hotspot as having the event listener added\r\n hotspot.dataset.listenerAdded = 'true';\r\n }\r\n }\r\n\r\n const infoBoxes = document.querySelectorAll('.info-box');\r\n\r\n controller.addListener(document, \"click\", () =>{\r\n for (const infoBox of infoBoxes) {\r\n infoBox.classList.add('hidden')\r\n }\r\n })\r\n\r\n for (const infoBox of infoBoxes) {\r\n controller.addListener(infoBox, \"click\", (event) =>{\r\n event.stopPropagation();\r\n })\r\n }\r\n\r\n const elements = document.querySelectorAll(`.${CLASS_NAME}`)\r\n const productGallery = document.querySelectorAll('.product-gallery')\r\n\r\n //\r\n const initialiseProductGallery = (elements: NodeListOf) => {\r\n\r\n for (const gallery of productGallery) {\r\n for (const element of elements) {\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-explicit-any\r\n const carouselOptions = parseToObject(element.dataset.carouselOptions);\r\n const carouselId = element.dataset.carouselId ?? \"\";\r\n const slides = element.querySelectorAll('.carousel__slide:not(.glide__slide--clone)')\r\n\r\n\r\n const indexClass = `${CLASS_NAME}-${carouselId}`;\r\n element.classList.add(indexClass);\r\n\r\n const existingGlides = carousels.get(indexClass)!;\r\n if (existingGlides) {\r\n existingGlides.destroy();\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\r\n const glide = new Glide(`.${indexClass}`, {\r\n ...OPTIONS,\r\n ...carouselOptions,\r\n type: 'carousel',\r\n perView: 1,\r\n gap: 90,\r\n });\r\n\r\n\r\n\r\n const updateNumberIndicatorIndex = (slides: NodeListOf) => {\r\n const slideIndex = element.querySelector('.slide-index');\r\n\r\n if (slideIndex && slides) {\r\n slideIndex.innerHTML = `${Number(glide.index) + 1} / ${slides.length}`;\r\n }\r\n };\r\n\r\n function initialiseClicks(){\r\n const galleryImage = gallery.querySelectorAll('.gallery-images');\r\n const desktopOnlyGalleryImages = gallery.querySelectorAll('.gallery-images.desktop-only')\r\n const desktopImageCount = desktopOnlyGalleryImages.length ?? 0\r\n\r\n // eslint-disable-next-line prefer-const\r\n for (let [index, image] of galleryImage.entries()) {\r\n if(image.classList.contains(\"mobile\")){\r\n index = index-desktopImageCount\r\n }\r\n\r\n refreshCarouselOnClick(image,index)\r\n }\r\n }\r\n\r\n // Fullscreen view\r\n const modalDialog = gallery.querySelector('.modal-dialog')\r\n const modalContent = gallery.querySelector('.modal-content')\r\n const expandButton = gallery.querySelector('.expand-button')\r\n const thumbnailList = gallery.querySelector('.gallery-thumbnail-list')\r\n const carouselImageContainer = gallery.querySelector('.carousel__image-container')\r\n const closeModalButton = gallery.querySelector('.close-modal-button')\r\n const toggleCssclasses = (element : HTMLElement, ...classes: string[]) => classes.map(className => element.classList.toggle(className));\r\n\r\n const toggleFullscreen = ()=>{\r\n if(modalDialog && modalContent && thumbnailList && carouselImageContainer){\r\n if(isMobile()){\r\n toggleCssclasses(thumbnailList, 'hidden');\r\n toggleCssclasses(carouselImageContainer, 'mx-6');\r\n toggleCssclasses(modalContent, 'max-h-[720px]');\r\n toggleCssclasses(modalDialog, 'fullscreen');\r\n glide.update();\r\n }else{\r\n toggleCssclasses(modalDialog, 'narrow','fullscreen');\r\n toggleCssclasses(modalContent, 'md:max-h-[1002px]');\r\n toggleCssclasses(modalContent, 'max-h-[720px]');\r\n toggleCssclasses(thumbnailList, 'hidden');\r\n glide.update();\r\n }\r\n\r\n }\r\n }\r\n\r\n if(closeModalButton){\r\n controller.addListener(closeModalButton,'click', ()=>{\r\n if(!isMobile()){\r\n modalDialog?.classList.add('narrow')\r\n modalDialog?.classList.remove('fullscreen')\r\n modalContent?.classList.add('md:max-h-[1002px]')\r\n thumbnailList?.classList.remove('hidden')\r\n glide.update();\r\n }\r\n })\r\n }\r\n\r\n if(expandButton){\r\n controller.addListener(expandButton,'click', ()=>{\r\n toggleFullscreen()\r\n })\r\n }\r\n\r\n\r\n const observer = new MutationObserver((mutations, obs) => {\r\n const gallery = document.querySelector('.product-gallery');\r\n if (gallery && gallery.querySelectorAll('.gallery-images').length > 0) {\r\n initialiseClicks();\r\n\r\n const modals = document.querySelectorAll('.product-gallery-modal')\r\n\r\n for (const modal of modals){\r\n\r\n const floorPlanButton = modal.querySelectorAll('.floor-plan-button')\r\n for (const button of floorPlanButton){\r\n goToFloorPlanCarouselOnClick(button)\r\n }\r\n }\r\n\r\n obs.disconnect();\r\n }\r\n });\r\n\r\n observer.observe(document, { childList: true, subtree: true });\r\n\r\n const extendedGalleryImage = gallery.querySelectorAll('.gallery-images-extended')\r\n for (const extended of extendedGalleryImage){\r\n let index = 6\r\n if (extended.classList.contains(\"mobile\")){\r\n index = 3\r\n }\r\n\r\n refreshCarouselOnClick(extended,index)\r\n }\r\n\r\n const expandButtonDetailPage = document.querySelectorAll('.product-detail-zoom-button, .floorplan-button')\r\n for (const detailButton of expandButtonDetailPage) {\r\n goToFloorPlanCarouselOnClick(detailButton)\r\n }\r\n\r\n function refreshCarouselOnClick(element: HTMLElement,slideStart?:number) {\r\n controller.addListener(element, 'click', ()=>{\r\n setTimeout(() => {\r\n glide.update(\r\n {\r\n startAt:slideStart ?? 0\r\n }\r\n );\r\n }, 200);\r\n })\r\n }\r\n\r\n function goToFloorPlanCarouselOnClick(element: HTMLElement) {\r\n controller.addListener(element, 'click', ()=>{\r\n setTimeout(() => {\r\n // Ensure the carousel is ready\r\n // glide.update({\r\n // startAt: 0\r\n // })\r\n const galleryCarouselSlides = gallery.querySelectorAll('.gallery-carousel-slide');\r\n // eslint-disable-next-line prefer-const\r\n for (let [index, image] of galleryCarouselSlides.entries()) {\r\n if(image.classList.contains(\"floor-plan\") && !image.classList.contains(\"glide__slide--clone\")){\r\n // glide.go(`=${index}`);\r\n glide.update({\r\n // Exclude first 2 clone slide\r\n startAt: index - 2\r\n })\r\n return;\r\n }\r\n }\r\n\r\n glide.update({\r\n startAt: 0\r\n })\r\n }, 200);\r\n })\r\n }\r\n\r\n const scrollImageIntoView = (element:HTMLElement) => {\r\n scrollIntoView(element, {\r\n behavior: 'smooth',\r\n inline: 'center',\r\n block: 'nearest'\r\n });\r\n };\r\n\r\n const thumbnailObserver = new MutationObserver((mutations, obs) => {\r\n\r\n if( gallery && gallery?.querySelectorAll('.gallery-thumbnail-list > div').length > 0 ) {\r\n // Observe class change in image thumbnails\r\n const galleryPictures = gallery?.querySelectorAll('.gallery-thumbnail-list > div')\r\n const galleryImageDescription = gallery.querySelectorAll('.image-description');\r\n const slideIndex = gallery.querySelector('.slide-index');\r\n\r\n if (galleryPictures) for (const picture of galleryPictures) {\r\n const observer = new MutationObserver(function() {\r\n if(picture.classList.contains('glide__bullet--active')){\r\n scrollImageIntoView(picture)\r\n for (const description of galleryImageDescription) {\r\n\r\n if (description.dataset.imageIndex === picture?.dataset.imageIndex){\r\n description?.classList.remove('hidden')\r\n }else if(!description.classList.contains('hidden')){\r\n description?.classList.add('hidden')\r\n }\r\n }\r\n\r\n if(picture.classList.contains('video-thumbnail')){\r\n slideIndex?.classList.add('hidden')\r\n }else{\r\n slideIndex?.classList.remove('hidden')\r\n\r\n }\r\n }\r\n });\r\n observer.observe(picture, {\r\n attributes: true,\r\n attributeFilter: [\"class\"]\r\n });\r\n }\r\n\r\n // Optionally disconnect the observer if no longer needed\r\n obs.disconnect();\r\n }\r\n });\r\n\r\n thumbnailObserver.observe(document, { childList: true, subtree: true });\r\n\r\n\r\n\r\n glide.on('update', function () {\r\n updateNumberIndicatorIndex(slides);\r\n });\r\n\r\n glide.on('swipe.end', function () {\r\n updateNumberIndicatorIndex(slides);\r\n });\r\n\r\n glide.on('move.after', function () {\r\n updateNumberIndicatorIndex(slides);\r\n });\r\n\r\n // On screensize re-initialise the carousel to handle per view updates on different screensizes\r\n const glideUpdate = () => glide.update();\r\n\r\n controller.addListener(window, \"resize\", glideUpdate)\r\n\r\n glide.mount();\r\n\r\n carousels.set(indexClass, glide);\r\n\r\n markElementReady(element);\r\n\r\n }\r\n }\r\n };\r\n\r\n\r\n initialiseProductGallery(elements);\r\n\r\n const modal = document.querySelector('#media-gallery-modal-id')\r\n if (modal && !modal.dataset.listenerAdded) {\r\n controller.addListener(modal, 'hidden.bs.modal', () => {\r\n const allVideoControls = document.querySelectorAll('.plyr__control');\r\n for (const button of allVideoControls) {\r\n if (button.classList.contains('plyr__control--pressed')) {\r\n button.dispatchEvent(new Event('click'));\r\n }\r\n }\r\n });\r\n modal.dataset.listenerAdded = 'true';\r\n }\r\n\r\n}\r\n\r\n\r\n","/**\r\n * Property-Tiles-and-Filters Component\r\n */\r\n\r\nimport { App } from '~/app';\r\n\r\nimport { defineAsyncComponent } from 'vue';\r\nimport { getMainEnquiryForm } from '../form-and-content/modal-form/modal-form';\r\n\r\nimport { scrollTo } from '../../../framework/scripts/utils/scroll';\r\nexport default (app: App) => {\r\n\tapp.logger.debug('[Stockland FE] Initialise Stockland Property-Tiles-and-Filters Component');\r\n\tapp.vueApp.component(\r\n\t\t'property-tiles-and-filters',\r\n\t\tdefineAsyncComponent(async () => import('./PropertyTilesAndFilters.vue'))\r\n\t);\r\n\tapp.vueApp.component(\r\n\t\t'property-listing',\r\n\t\tdefineAsyncComponent(async () => import('./PropertyListing.vue'))\r\n\t);\r\n\tapp.vueApp.component(\r\n\t\t'property-filter',\r\n\t\tdefineAsyncComponent(async () => import('./PropertyFilters.vue'))\r\n\t);\r\n\tconst listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]> = [];\r\n\r\n\tapp.afterMount\r\n\t\t.then(() => {\r\n\t\t\tmountPropertyTilesAndFilters(listeners);\r\n\t\t})\r\n\t\t.catch((error) => {\r\n\t\t\tthrow new Error('[Stockland FE] Unable to register Stockland Property Tiles', error);\r\n\t\t});\r\n\r\n\treturn function destroyPropertyTilesAndFilters() {\r\n\t\tunMountPropertyTilesAndFilters(listeners);\r\n\r\n\t\tapp.logger.debug('[DXA] Property Tiles destroyed');\r\n\t};\r\n};\r\nfunction mountPropertyTilesAndFilters(\r\n\tlisteners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>,\r\n\troot: HTMLElement | null = null\r\n) {\r\n\tlet rootNode: Document | HTMLElement = document;\r\n\tif (root) rootNode = root;\r\n\r\n\tconst propertyTilesAndFilters = rootNode.querySelector('.property-tiles-and-filters');\r\n\tif (propertyTilesAndFilters) {\r\n\t\tconst findOutMoreButton = propertyTilesAndFilters.querySelector('.find-out-more-button');\r\n\r\n\t\tif (findOutMoreButton) {\r\n\t\t\tfindOutMoreButton.addEventListener('click', () => {\r\n\t\t\t\tconst takeoverCallout = rootNode.querySelector('.takeover-callout');\r\n\t\t\t\tif (takeoverCallout) {\r\n\t\t\t\t\tscrollTo(takeoverCallout);\r\n\t\t\t\t\tconst takeoverCalloutButton =\r\n\t\t\t\t\t\ttakeoverCallout.querySelector('.takeover-callout-button');\r\n\t\t\t\t\tif (takeoverCalloutButton) {\r\n\t\t\t\t\t\ttakeoverCalloutButton.click();\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tconst enquiryButton = rootNode.querySelector('.ribbon-bar-enquire-button');\r\n\t\t\t\t\tif (enquiryButton) {\r\n\t\t\t\t\t\tenquiryButton.click();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n}\r\n\r\nexport function unMountPropertyTilesAndFilters(\r\n\tlisteners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>\r\n) {\r\n\tfor (const [element, event, listener] of listeners) {\r\n\t\telement.removeEventListener(event, listener);\r\n\t}\r\n}\r\n","/**\n * Progress Home Header Component\n */\n\nimport { defineAsyncComponent } from 'vue';\n\nimport { type App } from '~/app';\n\nexport default (app: App) => {\n app.logger.debug('[Stockland FE] Initialise Stockland Progress Home Header Component');\n app.vueApp.component('progress-home-header', defineAsyncComponent(async () => import(\"./ProgressHomeHeader.vue\")));\n};\n","/**\r\n * Carousel Component\r\n * @module patterns/components/banners/asset-hero-banner\r\n */\r\n\r\nimport { type App } from '~/app';\r\n\r\nimport JsController from '../../js-controller';\r\n\r\nexport default (app: App) => {\r\n\r\n const controller = new JsController(app, 'Promo Tile with Icon');\r\n controller.addMountFunction(() => {\r\n mountComponent(controller);\r\n })\r\n\r\n return controller.init();\r\n}\r\n\r\nexport function mountComponent( controller: JsController ) {\r\n const promoTilesWithIcon = document.querySelectorAll('.promo-tile-with-icon');\r\n\r\n for (const promoTileWithIcon of promoTilesWithIcon){\r\n const description = promoTileWithIcon.querySelector('.description');\r\n const readMoreButton = promoTileWithIcon.querySelector('.read-more-button');\r\n\r\n const isTextClamped = (elm: HTMLElement) => elm.scrollHeight > elm.clientHeight;\r\n\r\n if (description && readMoreButton){\r\n const readMore = readMoreButton.querySelector('.read-more-text');\r\n const readLess = readMoreButton.querySelector('.read-less-text');\r\n const chevron = readMoreButton.querySelector('.chevron-toggle');\r\n\r\n const readMoreLessToggle = () => {\r\n description.classList.toggle('line-clamp-3');\r\n readMore?.classList.toggle('hidden');\r\n readLess?.classList.toggle('hidden');\r\n chevron?.classList.toggle(\"rotate-180\");\r\n }\r\n\r\n controller.addListener(readMoreButton, \"click\", readMoreLessToggle);\r\n\r\n const toggleReadMoreButton = () => {\r\n if (isTextClamped(description)) {\r\n readMoreButton.classList.remove('hidden')\r\n } else {\r\n readMoreButton.classList.add('hidden')\r\n }\r\n }\r\n\r\n toggleReadMoreButton();\r\n controller.addListener(window, \"resize\", toggleReadMoreButton);\r\n\r\n }\r\n\r\n }\r\n}\r\n","import { defineAsyncComponent } from 'vue';\r\n\r\nimport { type App } from '~/app';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Recently Viewed Homes Vue Component');\r\n app.vueApp.component(\r\n 'recently-viewed-homes',\r\n defineAsyncComponent(async () => import('./RecentlyViewedHomes.vue'))\r\n );\r\n app.vueApp.component('recently-viewed-products-writer', defineAsyncComponent(async () => import('./RecentlyViewedProductsWriter.vue')));\r\n};","/**\r\n * Resources List Component\r\n */\r\n\r\nimport { defineAsyncComponent } from 'vue';\r\n\r\nimport { type App } from '~/app';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Resources List Component');\r\n app.vueApp.component('resources-list', defineAsyncComponent(async () => import(\"./ResourcesList.vue\")));\r\n app.vueApp.component('resources-list-filters', defineAsyncComponent(async () => import(\"./ResourcesListFilters.vue\")));\r\n};\r\n","import { App } from '~/app';\r\n\r\nimport { defineAsyncComponent } from 'vue';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Contextual Search Component');\r\n app.vueApp.component(\r\n 'search-input',\r\n defineAsyncComponent(async () => import('./SearchInput.vue'))\r\n );\r\n app.vueApp.component(\r\n 'search-results',\r\n defineAsyncComponent(async () => import('./SearchResults.vue'))\r\n );\r\n app.vueApp.component(\r\n 'context-search-query',\r\n defineAsyncComponent(async () => import('./SearchQuery.vue'))\r\n );\r\n app.vueApp.component(\r\n 'search-results-pagination',\r\n defineAsyncComponent(async () => import('./SearchResultsPagination.vue'))\r\n );\r\n app.vueApp.component(\r\n 'search-filters',\r\n defineAsyncComponent(async () => import('./SearchFilters.vue'))\r\n );\r\n app.vueApp.component(\r\n 'search-sort',\r\n defineAsyncComponent(async () => import('./SearchSort.vue'))\r\n );\r\n\r\n // Views\r\n // Cards\r\n app.vueApp.component(\r\n 'card-view',\r\n defineAsyncComponent(async () => import('./card-views/CardView.vue'))\r\n );\r\n app.vueApp.component(\r\n 'article-card-item',\r\n defineAsyncComponent(async () => import('./card-views/types/ArticleCardItem.vue'))\r\n );\r\n app.vueApp.component(\r\n 'default--card-item',\r\n defineAsyncComponent(async () => import('./card-views/types/DefaultCardItem.vue'))\r\n );\r\n app.vueApp.component(\r\n 'event-card-item',\r\n defineAsyncComponent(async () => import('./card-views/types/EventCardItem.vue'))\r\n );\r\n\r\n // Lists\r\n app.vueApp.component(\r\n 'list-view',\r\n defineAsyncComponent(async () => import('./list-views/ListView.vue'))\r\n );\r\n app.vueApp.component(\r\n 'article-list-item',\r\n defineAsyncComponent(async () => import('./list-views/types/ArticleListItem.vue'))\r\n );\r\n app.vueApp.component(\r\n 'document-list-item',\r\n defineAsyncComponent(async () => import('./list-views/types/DocumentListItem.vue'))\r\n );\r\n app.vueApp.component(\r\n 'default-list-item',\r\n defineAsyncComponent(async () => import('./list-views/types/DefaultListItem.vue'))\r\n );\r\n};\r\n","/**\r\n * SearchAssetsBar Component\r\n */\r\n\r\nimport { defineAsyncComponent } from 'vue';\r\n\r\nimport { App } from '~/app';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland SearchAssetsBar Component');\r\n app.vueApp.component('search-assets-bar', defineAsyncComponent(async () => import(\"./SearchAssetsBar.vue\")));\r\n};\r\n","/**\r\n * Shrinking Header Component\r\n */\r\n\r\nimport Lenis from '@studio-freight/lenis'\r\n\r\nimport { type App } from '~/app';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Shrinking Header');\r\n\r\n const listeners: Array<[Element | Window | Document | Lenis, string, EventListenerOrEventListenerObject]> = [];\r\n\r\n app.afterMount\r\n .then(() => {\r\n const elements: NodeListOf = document.querySelectorAll(`.header-fit`);\r\n if (elements.length > 0) {\r\n const lenis = new Lenis();\r\n\r\n // eslint-disable-next-line no-inner-declarations\r\n function raf(time: DOMHighResTimeStamp) {\r\n lenis.raf(time);\r\n requestAnimationFrame(raf);\r\n }\r\n\r\n requestAnimationFrame(raf);\r\n\r\n fitHeaders(listeners, lenis);\r\n }\r\n })\r\n .catch((error: Error) => {\r\n throw new Error('[Stockland FE] Unable to register Stockland Shrinking Header', error);\r\n });\r\n\r\n return function destroyShrinkingHeader() {\r\n unMountShrinkingHeader(listeners);\r\n\r\n app.logger.debug('[DXA] Shrinking Header Component destroyed');\r\n };\r\n};\r\n\r\nfunction calculateFontSize(text: string, maxWidth: number, context: CanvasRenderingContext2D, fontFamily: string): number {\r\n let fontSize = 5; // Start with a small font size\r\n context.font = `${fontSize}px ${fontFamily}`; // Set initial font size\r\n\r\n while (context.measureText(text).width < maxWidth) {\r\n fontSize++; // Decrease the font size\r\n context.font = `${fontSize}px ${fontFamily}`; // Update the font size\r\n }\r\n\r\n return fontSize;\r\n}\r\n\r\nexport function fitHeaders(\r\n listeners: Array<[Element | Window | Document | Lenis, string, EventListenerOrEventListenerObject]>,\r\n lenis: Lenis\r\n) {\r\n const elements: NodeListOf = document.querySelectorAll(`.header-fit`);\r\n for (const element of elements) {\r\n const child = element.querySelector('h1');\r\n if (child) {\r\n const containerWidth = child.clientWidth;\r\n\r\n const canvas = document.createElement('canvas');\r\n const context = canvas.getContext('2d');\r\n if (context) {\r\n const fontFamily = 'Work Sans'; // Replace with your custom font family\r\n const fontSize = calculateFontSize(child.textContent ?? \"\", containerWidth, context, fontFamily);\r\n child.style.fontSize = `${fontSize - 1}px`;\r\n }\r\n\r\n child.style.opacity = '1';\r\n let boundingBox = element.getBoundingClientRect();\r\n boundingBox = new DOMRect(boundingBox.left, boundingBox.top + document.documentElement.scrollTop, boundingBox.width, boundingBox.height);\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-loop-func\r\n const setScale = () => {\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\r\n const topNavigationBar = document.querySelector('.top-navigation-bar')! as HTMLElement;\r\n const containerTop = 0;\r\n const elementHeight = boundingBox.top + element.clientHeight + (topNavigationBar ? topNavigationBar.offsetHeight : 50);\r\n element.style.height = child.style.fontSize;\r\n\r\n // Slightly increase the scrollTop so that the animation finishes slightly earlier, allowing space for the text to stick around afterwards\r\n\r\n let smallestSize = 0.35;\r\n const scrollTop = document.documentElement.scrollTop * 1.2;\r\n if (document.body.scrollWidth < 600) {\r\n smallestSize = 0.5;\r\n }\r\n\r\n if (scrollTop >= containerTop && scrollTop < containerTop + elementHeight) {\r\n const ratio = Math.max(1-((scrollTop - containerTop) / elementHeight), smallestSize);\r\n child.style.transform = `scale(${ratio})`;\r\n } else if(scrollTop < containerTop) {\r\n child.style.transform = `scale(1)`;\r\n } else {\r\n child.style.transform = `scale(${smallestSize})`;\r\n }\r\n }\r\n\r\n lenis.on('scroll', setScale);\r\n // window.addEventListener('scroll', setScale);\r\n // listeners.push([window, \"scroll\", setScale]);\r\n listeners.push([lenis, \"scroll\", setScale]);\r\n }\r\n }\r\n\r\n let timeout: ReturnType;\r\n const handleResize = () => {\r\n timeout = setTimeout(() => {\r\n clearTimeout(timeout)\r\n unMountShrinkingHeader(listeners);\r\n listeners = [];\r\n fitHeaders(listeners, lenis);\r\n }, 250)\r\n };\r\n\r\n window.addEventListener('resize', handleResize);\r\n\r\n listeners.push([window, \"resize\", handleResize]);\r\n}\r\n\r\nexport function unMountShrinkingHeader(\r\n listeners: Array<[Element | Window | Document | Lenis, string, EventListenerOrEventListenerObject]>\r\n) {\r\n for (const [element, event, listener] of listeners) {\r\n if ((element as Lenis).off) {\r\n (element as Lenis).off(event, listener);\r\n } else {\r\n (element as Element | Window | Document).removeEventListener(event, listener);\r\n }\r\n }\r\n}\r\n","/**\n * Stage Image With Steps Component\n */\n\nimport { defineAsyncComponent } from 'vue';\n\nimport { type App } from '~/app';\n\nexport default (app: App) => {\n app.logger.debug('[Stockland FE] Initialise Stockland Stage Image With Steps Component');\n app.vueApp.component('stage-image-with-steps', defineAsyncComponent(async () => import(\"./StageImageWithSteps.vue\")));\n};\n","/**\r\n * Carousel Component\r\n * @module patterns/components/banners/asset-hero-banner\r\n */\r\nimport Glide from '@glidejs/glide';\r\n\r\nimport { type App } from '~/app';\r\n\r\n// eslint-disable-next-line import/no-unresolved\r\n\r\nexport const carousels: Glide[] = [];\r\n\r\nexport default (app: App) => {\r\n\r\n app.afterMount\r\n .then(() => {\r\n mountStepByStepFeatureCarousel();\r\n })\r\n .catch((error: ErrorOptions | undefined) => {\r\n throw new Error('[Stockland FE] Unable to register Stockland Step by Step Featured Carousel component', error);\r\n });\r\n\r\n return function destroyFeaturedCarousel() {\r\n while (carousels.length > 0) {\r\n const c = carousels.pop();\r\n if (c) {\r\n c.destroy();\r\n }\r\n }\r\n\r\n app.logger.debug('[DXA] Feature Links and Image component destroyed');\r\n };\r\n}\r\n\r\nexport function mountStepByStepFeatureCarousel() {\r\n const stepByStepFeatureCarousels = document.querySelectorAll('.step-by-step-feature-carousel');\r\n\r\n for (const carousel of stepByStepFeatureCarousels) {\r\n const carouselGlide = new Glide(carousel, {\r\n type: 'carousel',\r\n perView: 1.5,\r\n focusAt: 0,\r\n gap: 32,\r\n rewind: false,\r\n breakpoints:{\r\n 550: {\r\n focusAt: 0,\r\n perView: 1.2,\r\n gap: 32,\r\n },\r\n 769: {\r\n focusAt: 0,\r\n perView: 1.5,\r\n gap: 32,\r\n },\r\n 1025: {\r\n focusAt: 0,\r\n perView: 1,\r\n gap: 32 ,\r\n },\r\n 1281: {\r\n focusAt: 0,\r\n perView: 1.5,\r\n gap: 32 ,\r\n },\r\n 1441: {\r\n focusAt: 0,\r\n perView: 1.5,\r\n gap: 32 ,\r\n }\r\n }\r\n });\r\n\r\n carouselGlide.mount();\r\n carousels.push(carouselGlide as Glide);\r\n }\r\n\r\n\r\n}\r\n","/**\r\n * Carousel Component\r\n * @module patterns/components/carousels/offers-tile-and-carousel\r\n */\r\nimport Glide from '@glidejs/glide';\r\n\r\nimport { type App } from '~/app';\r\n\r\n// eslint-disable-next-line import/no-unresolved\r\n\r\nexport const CAROUSELS: Glide[] = [];\r\n\r\nexport default (app: App) => {\r\n\r\n app.afterMount\r\n .then(() => {\r\n mountOffersTileCarousel()\r\n })\r\n .catch((error: ErrorOptions | undefined) => {\r\n throw new Error('[Stockland FE] Unable to register Stockland Offers Tile and Carousel component', error);\r\n });\r\n\r\n return function destroyFeaturedCarousel() {\r\n while (CAROUSELS.length > 0) {\r\n const c = CAROUSELS.pop();\r\n if (c) {\r\n c.destroy();\r\n }\r\n }\r\n\r\n app.logger.debug('[DXA] Offers Tile and Carousel component destroyed');\r\n };\r\n}\r\n\r\nexport function mountOffersTileCarousel() {\r\n const offerTilesCarouselComponents = document.querySelectorAll('.offers-tile-and-carousel');\r\n for (const carousel of offerTilesCarouselComponents) {\r\n\r\n const carouselGlide = new Glide(carousel, {\r\n type:'carousel',\r\n perView: 1,\r\n focusAt: 0,\r\n gap: 32,\r\n peek:340,\r\n breakpoints:{\r\n 767: {\r\n peek:0,\r\n focusAt: 0,\r\n perView: 1,\r\n\r\n },\r\n 1024: {\r\n peek:120,\r\n focusAt: 0,\r\n perView: 1,\r\n\r\n },\r\n 1280:{\r\n peek:240,\r\n focusAt: 0,\r\n perView: 1,\r\n\r\n },\r\n 1441: {\r\n peek:340,\r\n focusAt: 0,\r\n perView: 1,\r\n\r\n }\r\n }\r\n });\r\n\r\n setTimeout(() => {\r\n // Timeout to load clone slides\r\n carouselGlide.mount();\r\n }, 800);\r\n CAROUSELS.push(carouselGlide as Glide);\r\n }\r\n \r\n}","/**\r\n * Tabbed Image Panel Component\r\n */\r\n\r\nimport { App } from '~/app';\r\n\r\nimport { defineAsyncComponent } from 'vue';\r\n\r\nexport default (app: App) => {\r\n\t app.logger.debug('[Stockland FE] Initialise Stockland Tabbed Image Panel Component');\r\n\t app.vueApp.component('tabbed-image-panel', defineAsyncComponent(async () => import(\"./TabbedImagePanel.vue\")));\r\n};\r\n","/**\r\n * Tabbed Image with Text Component\r\n * @module patterns/components/tabbed-image-with-text\r\n */\r\n\r\nimport { App } from '~/app';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Tabbed Image with Text Component');\r\n\r\n const listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]> = [];\r\n\r\n app.afterMount\r\n .then(() => {\r\n mountTabbedImageWithText(listeners);\r\n })\r\n .catch((error) => {\r\n throw new Error('[Stockland FE] Unable to register Stockland Tabbed Image with Text component', error);\r\n });\r\n\r\n return function destroyTabbedImageWithText() {\r\n unmountTabbedImageWithText(listeners);\r\n\r\n app.logger.debug('[DXA] Tabbed Image with Text component destroyed');\r\n };\r\n};\r\n\r\n// Extracted method for logic reuse within other component\r\nexport function mountTabbedImageWithText(\r\n listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>,\r\n root: HTMLElement | null = null\r\n) {\r\n let rootNode: Document | HTMLElement = document;\r\n if (root) rootNode = root;\r\n\r\n const tabbedImageWithTexts = rootNode.querySelectorAll('.tabbed-image-with-text');\r\n for (const tabbedImageWithText of tabbedImageWithTexts) {\r\n\r\n const tabClicks = tabbedImageWithText.querySelectorAll('.nav-link')\r\n\r\n tabClicks.forEach((tab, index) => {\r\n const handleTabClick = () => {\r\n const contentTabs = tabbedImageWithText.querySelectorAll(`#nav-tabContent .tab-pane`);\r\n const activeContentTab = tabbedImageWithText.querySelector(`#nav-${index}-content`);\r\n\r\n for (const contentTab of contentTabs){\r\n contentTab.classList.remove('show', 'active');\r\n }\r\n activeContentTab?.classList.add('show', 'active')\r\n\r\n }\r\n\r\n tab.addEventListener(\"show.bs.tab\", handleTabClick);\r\n listeners.push([tab, \"show.bs.tab\", handleTabClick]);\r\n });\r\n }\r\n}\r\n\r\nexport function unmountTabbedImageWithText(\r\n listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>\r\n) {\r\n for (const [element, event, listener] of listeners) {\r\n element.removeEventListener(event, listener);\r\n }\r\n}\r\n","// Dependencies\r\n\r\nimport { type App } from '~/app';\r\n\r\nimport { getMainEnquiryForm } from '../form-and-content/modal-form/modal-form';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Takeover Callout Component');\r\n\r\n app.afterMount\r\n .then(() => setTimeout(() => {\r\n mountEnquireContact()\r\n removeModalForm()\r\n removeTakeoverForm()\r\n }, 200))\r\n .catch((error: ErrorOptions) => {\r\n throw new Error('[Stockland FE] Unable to register Stockland Takeover Callout Component', error);\r\n });\r\n\r\n return () => {\r\n app.logger.debug('[DXA] Takeover Callout destroyed');\r\n };\r\n}\r\n\r\n\r\nfunction mountEnquireContact() {\r\n const contactFormButtons = document.querySelectorAll(\".takeover-callout-button\");\r\n const takeOverCalloutContainer = document.querySelector(\".takeover-callout\");\r\n\r\n for (const button of contactFormButtons) {\r\n const parent = button.closest('.takeover-callout-parent-container')\r\n const contactForm = parent?.querySelector(\".takeover-callout-form-container\")\r\n const info = parent?.querySelector(\".takeover-callout-info-container\")\r\n const columns = parent?.querySelector(\".takeover-callout-columns\")\r\n\r\n button.setAttribute('type', 'button')\r\n\r\n const modalButton = getMainEnquiryForm();\r\n\r\n\r\n if (!button.dataset.hasListener) {\r\n button.addEventListener(\"click\", () => {\r\n // Epi form should have been removed if it is the same\r\n const epiForm = takeOverCalloutContainer?.querySelector('.EPiServerForms')\r\n if (modalButton && !epiForm) {\r\n const modalButton = getMainEnquiryForm();\r\n if (modalButton) {\r\n modalButton.click()\r\n }\r\n }\r\n else if (parent) {\r\n contactForm?.classList.remove(\"hidden\");\r\n info?.classList.add(\"hidden\")\r\n parent.classList.remove(\"grid-cols-6\")\r\n parent.classList.remove(\"md:col-span-6\")\r\n columns?.classList.remove(\"md:col-span-4\")\r\n parent.classList.add(\"grid-cols-8\")\r\n parent.classList.add(\"md:col-span-8\")\r\n columns?.classList.add(\"md:col-span-6\")\r\n }\r\n });\r\n button.dataset.hasListener = 'true';\r\n }\r\n }\r\n}\r\n\r\nfunction removeModalForm() {\r\n // If the form is visible on mount and it is the same as what is in the modal then remove the modal form\r\n const takeoverCallout = document.querySelector('.takeover-callout');\r\n const takeoverCalloutForm = document.querySelector('.takeover-callout-form-container:not(.hidden) form');\r\n const modalButton = getMainEnquiryForm();\r\n const enquiryModal = document.querySelector('.modal.enquiry-modal');\r\n if (takeoverCallout && takeoverCalloutForm && modalButton && enquiryModal && enquiryModal.id === `form-${takeoverCalloutForm.dataset.customFormId}`) {\r\n const enquiryModalForm = enquiryModal.querySelector('.form-container');\r\n if (enquiryModalForm) {\r\n enquiryModalForm.remove();\r\n }\r\n }\r\n}\r\n\r\nfunction removeTakeoverForm() {\r\n // If the form is not visible on mount and it is the same as what is in the modal then remove the modal form\r\n const takeoverCallout = document.querySelector('.takeover-callout');\r\n const takeoverCalloutFormHidden = document.querySelector('.takeover-callout-form-container.hidden form');\r\n const modalButton = getMainEnquiryForm();\r\n const enquiryModal = document.querySelector('.enquiry-modal');\r\n if (takeoverCallout && takeoverCalloutFormHidden && modalButton && enquiryModal && enquiryModal.id === `form-${takeoverCalloutFormHidden.dataset.customFormId}`) {\r\n takeoverCalloutFormHidden.remove();\r\n }\r\n}\r\n","import { type App } from '~/app';\r\n\r\n\r\nexport default (app: App) => { \r\n app.logger.debug('[Stockland FE] Initialise Stockland Takeover Image With Inline Tabs Component');\r\n\r\n const listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]> = [];\r\n\r\n app.afterMount\r\n .then(() => {\r\n setTimeout(() =>{\r\n mountTakeoverImageWithInlineTabs(listeners)\r\n }, 300)\r\n })\r\n .catch((error: Error) => {\r\n throw new Error('[Stockland FE] Unable to register Stockland Takeover Image With Inline Tabs component', error);\r\n });\r\n\r\n return function destroyFreeTextQuickLinks() {\r\n unMountTakeoverImageWithInlineTabs(listeners)\r\n\r\n app.logger.debug('[DXA] Takeover Image With Inline Tabs component destroyed');\r\n };\r\n\r\n\r\n function mountTakeoverImageWithInlineTabs(\r\n listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>,\r\n root: HTMLElement | null = null) {\r\n let rootNode: Document | HTMLElement = document;\r\n if (root) rootNode = root;\r\n\r\n const takeoverImageTabs = rootNode.querySelectorAll(\".takeover-image-with-inline-tabs\");\r\n for (const takeoverImageTab of takeoverImageTabs) {\r\n\r\n const amenityTabs = takeoverImageTab.querySelectorAll('.amenity-tab')\r\n\r\n for (const [index, tab] of amenityTabs.entries()) {\r\n const handleTabClick = () => {\r\n const contentTabs = takeoverImageTab.querySelectorAll(`.amenity-subheading`);\r\n const activeContentTab = takeoverImageTab.querySelector(`#panel-text-tab-${index}`);\r\n\r\n for (const amenityTab of amenityTabs){\r\n amenityTab.classList.remove('active-tab');\r\n }\r\n\r\n tab?.classList.add('active-tab')\r\n\r\n for (const contentTab of contentTabs){\r\n contentTab.classList.remove('active');\r\n }\r\n\r\n activeContentTab?.classList.add('active')\r\n\r\n }\r\n\r\n tab.addEventListener(\"show.bs.tab\", handleTabClick);\r\n listeners.push([tab, \"show.bs.tab\", handleTabClick]);\r\n }\r\n }\r\n }\r\n\r\n\r\n function unMountTakeoverImageWithInlineTabs(\r\n listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>\r\n ) {\r\n for (const [element, event, listener] of listeners) {\r\n element.removeEventListener(event, listener);\r\n }\r\n }\r\n}","import { type App } from '~/app';\r\n\r\nimport JsController from '../../js-controller';\r\n\r\nexport default (app: App) => {\r\n const controller = new JsController(app, 'Takeover Card');\r\n controller.addMountFunction(() => {\r\n mountTakeoverCard(controller);\r\n })\r\n return controller.init();\r\n}\r\n\r\n\r\nexport function mountTakeoverCard( controller: JsController ) {\r\n const elements = document.querySelectorAll(`.takeover-card-component`);\r\n let index = 0;\r\n for (const element of elements) {\r\n handleScrollArrowClick(controller, element);\r\n index++;\r\n }\r\n}\r\n\r\nconst handleScrollArrowClick = (controller: JsController, element: HTMLElement) => {\r\n const slideArrows = element.querySelectorAll('.scroll-to-bottom-of-hero');\r\n if (slideArrows.length > 0) {\r\n for (const slideArrow of slideArrows) {\r\n controller.addListener(slideArrow, \"click\", () => {\r\n const navigation = document.querySelector('.navigation');\r\n const navigationHeight = navigation ? navigation.clientHeight : 0;\r\n const scrollToPos = element.getBoundingClientRect().bottom + window.scrollY - navigationHeight;\r\n window.scrollTo({ top: scrollToPos, behavior: 'smooth' });\r\n });\r\n }\r\n }\r\n}","/**\r\n * Carousel Component\r\n * @module patterns/components/banners/asset-hero-banner\r\n */\r\n\r\nimport { type App } from '~/app';\r\n\r\n// eslint-disable-next-line import/no-unresolved\r\nimport JsController from '../js-controller';\r\n\r\nexport default (app: App) => {\r\n\r\n const controller = new JsController(app, 'takeover-highlights');\r\n controller.addMountFunction(() => {\r\n mountComponent(controller);\r\n })\r\n\r\n return controller.init();\r\n}\r\n\r\n// Handle scroll arrow click\r\nconst handleScrollArrowClick = (controller: JsController, element: HTMLElement) => {\r\n\r\n const slideArrows = element.querySelectorAll('.scroll-to-bottom-of-takeover');\r\n\r\n if (slideArrows.length > 0) {\r\n for (const slideArrow of slideArrows) {\r\n controller.addListener(slideArrow, \"click\", () => {\r\n const navigation = document.querySelector('.navigation');\r\n const navigationHeight = navigation ? navigation.clientHeight : 0;\r\n const scrollToPos = element.getBoundingClientRect().bottom + window.scrollY - navigationHeight;\r\n window.scrollTo({ top: scrollToPos, behavior: 'smooth' });\r\n });\r\n }\r\n }\r\n}\r\n\r\nexport function mountComponent( controller: JsController ) {\r\n const elements = document.querySelectorAll(\".takeover-highlights\");\r\n for (const element of elements) {\r\n handleScrollArrowClick(controller,element)\r\n }\r\n}\r\n","import { App } from '~/app';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Collapse Tile Component');\r\n\r\n const listeners: Array<[Element | Window, string, EventListenerOrEventListenerObject]> = [];\r\n\r\n app.afterMount\r\n\r\n .then(() => {\r\n mountCollapseTile(listeners);\r\n })\r\n .catch((error) => {\r\n throw new Error('[Stockland FE] Unable to register Stockland Collapse Tile Component', error);\r\n });\r\n\r\n return function destroyCollapseTile() {\r\n unMountCollapseTile(listeners);\r\n\r\n app.logger.debug('[DXA] Collapse Tile Component destroyed');\r\n };\r\n};\r\n\r\nfunction mountCollapseTile(\r\n listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>,\r\n root: HTMLElement | null = null\r\n) {\r\n let rootNode: Document | HTMLElement = document;\r\n if (root) rootNode = root;\r\n\r\n const collapseTiles = rootNode.querySelectorAll('.collapse-tile-navigation');\r\n\r\n collapseTiles.forEach((tile) => {\r\n const readButton = tile.querySelector('.read-button');\r\n const closeButton = tile.querySelector('.close-button');\r\n\r\n // Called on collapse toggle\r\n const showToggleMenuButtons = () => {\r\n readButton?.classList.add('hidden');\r\n closeButton?.classList.remove('hidden');\r\n };\r\n\r\n // Called on collapse toggle\r\n const hideToggleMenuButtons = () => {\r\n readButton?.classList.remove('hidden');\r\n closeButton?.classList.add('hidden');\r\n };\r\n\r\n readButton?.addEventListener('click', showToggleMenuButtons)\r\n closeButton?.addEventListener('click', hideToggleMenuButtons)\r\n });\r\n}\r\n\r\nfunction unMountCollapseTile(\r\n listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>\r\n) {\r\n for (const [element, event, listener] of listeners) {\r\n element.removeEventListener(event, listener);\r\n }\r\n}\r\n","/**\r\n * Carousel Component\r\n * @module patterns/components/banners/asset-hero-banner\r\n */\r\n\r\nimport Glide from '@glidejs/glide';\r\n\r\nimport { type App } from '~/app';\r\n\r\nimport JsController from '../../js-controller';\r\n\r\nexport default (app: App) => {\r\n\r\n const controller = new JsController(app, 'Asset Hero');\r\n controller.addMountFunction(() => {\r\n mountPromoTile(controller);\r\n })\r\n\r\n return controller.init();\r\n}\r\n\r\nexport function mountPromoTile( controller: JsController ) {\r\n const elements = document.querySelectorAll(`.promo-tile`);\r\n let index = 0;\r\n for (const element of elements) {\r\n mountCarousel(controller, element, index);\r\n index++;\r\n }\r\n}\r\n\r\n// Handle scroll arrow click\r\nconst mountCarousel = (controller: JsController, element: HTMLElement, carouselIndex: number) => {\r\n const imageCarousel = element.querySelector('.glide__track');\r\n if (imageCarousel) {\r\n const indexClass = `promo-tile-${carouselIndex}`;\r\n element.classList.add(indexClass);\r\n const glide: Glide = new Glide(`.${indexClass}`, {\r\n type: 'slider',\r\n perView: 1,\r\n startAt: 0,\r\n gap: 0,\r\n })\r\n .mount();\r\n controller.addCarouselInstance(glide);\r\n }\r\n}","/* eslint-disable @typescript-eslint/no-unsafe-return */\r\n/* eslint-disable @typescript-eslint/no-unsafe-call */\r\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\r\n/**\r\n * Community Tiles Component\r\n */\r\n\r\nimport { defineAsyncComponent } from 'vue';\r\n\r\nimport { type App } from '~/app';\r\n\r\nimport { type Amenity } from '../../card/llc-community-card/interfaces';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Community Tiles Component');\r\n app.vueApp.component('community-tiles', defineAsyncComponent(async () => import(\"./CommunityTiles.vue\")));\r\n};\r\n\r\nfunction groupBy(array:any, property:string) {\r\n // eslint-disable-next-line unicorn/no-array-reduce\r\n return array.reduce(function (memo:any, x:any) {\r\n if (!memo[x[property]]) { memo[x[property]] = []; }\r\n memo[x[property]].push(x);\r\n return memo;\r\n }, {});\r\n}\r\n\r\n;\r\n\r\nexport function mapAmenitiesRawValue(rawAmenity:any):Amenity[] {\r\n const amenities: Amenity[] = [];\r\n if (rawAmenity && rawAmenity.length > 0) {\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\r\n const groupedType = groupBy(rawAmenity,'type')//Object.groupBy(rawAmenity, ({ type:any }) => type);\r\n if (groupedType) {\r\n for (const item in groupedType) {\r\n if(item && item !== 'undefined' && item !== 'null') \r\n {\r\n const amenity: Amenity = {\r\n name: item,\r\n count: groupedType[item]?.length ?? 0,\r\n icon: rawAmenity.filter((x:any) => x.type === item) ? rawAmenity.find((x:any) => x.type === item)?.icon : ''\r\n }\r\n amenities.push(amenity);\r\n }\r\n }\r\n }\r\n }\r\n \r\n return amenities;\r\n}\r\n\r\n","/**\r\n * -Download list component\r\n */\r\n\r\nimport { App } from '~/app';\r\nimport { defineAsyncComponent } from 'vue';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Unsubscribe Component');\r\n app.vueApp.component('download-list', defineAsyncComponent(async () => import(\"./DownloadList.vue\")));\r\n};\r\n","import { waitForElement } from '@root/src/framework/scripts/helpers/element-ready';\r\nimport { App } from '~/app';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland HeroBanner Component');\r\n\r\n const listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]> = [];\r\n\r\n app.afterMount\r\n .then(() => {\r\n mountHeroBanner(listeners);\r\n })\r\n .catch((error) => {\r\n throw new Error('[Stockland FE] Unable to register HeroBanner Component', error);\r\n });\r\n\r\n return function destroyHeroBanner() {\r\n unMountHeroTakerOver(listeners);\r\n\r\n app.logger.debug('[DXA] HeroBanner destroyed');\r\n };\r\n};\r\n\r\nconst mountHeroBanner = (listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>) => {\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\r\n\r\n const heroTakeoverBanners = document.querySelectorAll('.hero-slide');\r\n\r\n for (const heroTakeoverBanner of heroTakeoverBanners) {\r\n const imageVideos = heroTakeoverBanner.querySelectorAll('.imageVideo');\r\n const videoContainer = heroTakeoverBanner.querySelector('.videoContainer');\r\n const overlay = heroTakeoverBanner.querySelector('.overlay');\r\n const overlaybackGround = heroTakeoverBanner.querySelector('.overlaybackGround');\r\n\r\n // This is the play button using style-5, not the big white one from video.liquid\r\n const slidePlayButton = heroTakeoverBanner.querySelector('#play');\r\n\r\n\r\n //For shortvideo autoplay for every two secs\r\n const shortVideo = heroTakeoverBanner.querySelector('#shortVideo');\r\n void shortVideo?.play();\r\n\r\n if (shortVideo) shortVideo.muted = true;\r\n\r\n shortVideo?.addEventListener('ended', function () {\r\n setTimeout(() => {\r\n void shortVideo.play();\r\n }, 2000);\r\n });\r\n\r\n const handlePlayVideoClick = (event: Event) => {\r\n event.preventDefault();\r\n\r\n for (const imageVideo of imageVideos) {\r\n imageVideo.classList.add('!hidden');\r\n }\r\n\r\n if (overlay) overlay.style.display = 'none';\r\n if (overlaybackGround) overlaybackGround.style.display = 'none';\r\n if (shortVideo) {\r\n shortVideo.pause();\r\n shortVideo.currentTime = 0;\r\n }\r\n\r\n videoContainer?.classList.remove('hidden');\r\n };\r\n\r\n // Click listener for play/watch button\r\n if (slidePlayButton) {\r\n slidePlayButton.addEventListener('click', handlePlayVideoClick);\r\n listeners.push([slidePlayButton, 'click', handlePlayVideoClick]);\r\n }\r\n\r\n // There is an issue when using Youtube sources where controls aren't created until after this code is run\r\n // So wait for the controls to exist, then attempt the bind\r\n void waitForElement('.plyr__controls_left .stopVideo', heroTakeoverBanner)\r\n .then((elm) => {\r\n const stopVideo = heroTakeoverBanner.querySelector('.stopVideo');\r\n\r\n const handleStopVideoClick = (event: Event) => {\r\n event.preventDefault();\r\n // Youtube player also doesnt like pausing via Plyr, so check if pause button is visible, then click to pause video\r\n const playVideo = heroTakeoverBanner.querySelector('.playVideo.plyr__control--pressed');\r\n if (playVideo) {\r\n playVideo.click();\r\n }\r\n\r\n for (const imageVideo of imageVideos) {\r\n\t\t\t\t\t // This double hidden remove is here because hero-carousel.ts adds a hidden tag also\r\n\t\t\t\t\t // There is so much duplicate code between this and that file it's a mess\r\n\t\t\t\t\t // TODO: Untangle that mess of code\r\n imageVideo.classList.remove('!hidden', 'hidden');\r\n }\r\n\r\n void shortVideo?.play();\r\n if (overlay) overlay.style.display = 'flex';\r\n // if (overlay) overlay.style.display = 'none';\r\n if (overlaybackGround) overlaybackGround.style.display = 'flex';\r\n // if (overlaybackGround) overlaybackGround.style.display = 'none';\r\n if (shortVideo) shortVideo.muted = true;\r\n\r\n videoContainer?.classList.add('hidden');\r\n };\r\n\r\n if (stopVideo) {\r\n stopVideo.addEventListener('click', handleStopVideoClick);\r\n listeners.push([stopVideo, 'click', handleStopVideoClick]);\r\n }\r\n });\r\n }\r\n};\r\n\r\nfunction unMountHeroTakerOver(listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>) {\r\n for (const [element, event, listener] of listeners) {\r\n element.removeEventListener(event, listener);\r\n }\r\n}\r\n","import { scrollIntoView } from '~/framework/utils/scroll';\r\nimport { App } from '~/app';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Multi Target Tab Component');\r\n\r\n const listeners: Array<[Document | Element | Window | Document, string, EventListenerOrEventListenerObject]> = [];\r\n\r\n app.afterMount\r\n .then(() => {\r\n mountMultipleTargetTabs(listeners);\r\n })\r\n .catch((error) => {\r\n throw new Error('[Stockland FE] Unable to register Stockland Multi Target Tab Component', error);\r\n });\r\n\r\n return function destroyVerticalScrollCarousel() {\r\n unMountMultipleTargetTabs(listeners);\r\n\r\n app.logger.debug('[DXA] Multi Target Tab Component destroyed');\r\n };\r\n};\r\n\r\nexport function mountMultipleTargetTabs(\r\n listeners: Array<[Document | Element | Window | Document, string, EventListenerOrEventListenerObject]>\r\n) {\r\n const elements = document.querySelectorAll('.multi-target-tabs');\r\n\r\n const toggleTargets = (tab: HTMLElement, element: HTMLElement) => {\r\n let targets = tab.getAttribute('data-target');\r\n //split the query selector\r\n const target_array = targets?.split(',');\r\n target_array?.forEach((currentTarget) => {\r\n let currentTargetElement = element.querySelector(currentTarget);\r\n let currentActiveElement = currentTargetElement?.parentElement?.querySelector('.tab-pane.active');\r\n //remove all active tabs\r\n currentActiveElement?.classList.remove('active');\r\n currentActiveElement?.classList.remove('show');\r\n //add active tabs to current tab\r\n currentTargetElement?.classList.add('show');\r\n currentTargetElement?.classList.add('active');\r\n });\r\n\r\n const navTabs = element.querySelectorAll('.nav-tabs')\r\n for (const inlineTabs of navTabs) {\r\n // eslint-disable-next-line @typescript-eslint/no-loop-func,unicorn/consistent-function-scoping\r\n const scrollTabIntoView = (event: Event) => {\r\n if (event.target instanceof Element) {\r\n scrollIntoView(event.target, {\r\n behavior: 'smooth',\r\n inline: 'center',\r\n block: 'nearest'\r\n });\r\n }\r\n };\r\n\t\r\n const tabs = inlineTabs.querySelectorAll('.nav-link');\r\n for (const tab of tabs) {\r\n tab.addEventListener('click', scrollTabIntoView);\r\n listeners.push([tab, 'click', scrollTabIntoView]);\r\n }\r\n }\r\n };\r\n\r\n const initialiseMultipleTargetTabs = (elements: NodeListOf) => {\r\n elements.forEach((element, index) => {\r\n let currentTab = element.querySelectorAll(\"[data-bs-toggle='tab']\");\r\n currentTab.forEach((tab) => {\r\n tab.addEventListener('show.bs.tab', function () {\r\n toggleTargets(tab, element);\r\n });\r\n listeners.push([\r\n tab,\r\n 'show.bs.tab',\r\n function () {\r\n toggleTargets(tab, element);\r\n },\r\n ]);\r\n });\r\n });\r\n };\r\n\r\n initialiseMultipleTargetTabs(elements);\r\n\r\n return { elements };\r\n}\r\nexport function unMountMultipleTargetTabs(\r\n listeners: Array<[Document | Element | Window | Document, string, EventListenerOrEventListenerObject]>\r\n) {\r\n for (const [element, event, listener] of listeners) {\r\n element.removeEventListener(event, listener);\r\n }\r\n}\r\n","import { scrollIntoView } from '~/framework/utils/scroll';\r\nimport { type App } from '~/app';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Multi Target Tab Component v2');\r\n\r\n const listeners: Array<[Document | Element | Window , string, EventListenerOrEventListenerObject]> = [];\r\n\r\n app.afterMount\r\n .then(() => {\r\n mountMultipleTargetTabsV2(listeners);\r\n })\r\n .catch((error) => {\r\n throw new Error('[Stockland FE] Unable to register Stockland Multi Target Tab Component v2', error);\r\n });\r\n\r\n return function destroyVerticalScrollCarousel() {\r\n unMountMultipleTargetTabsV2(listeners);\r\n\r\n app.logger.debug('[DXA] Multi Target Tab v2 Component destroyed');\r\n };\r\n};\r\n\r\nexport function mountMultipleTargetTabsV2(\r\n listeners: Array<[Document | Element | Window , string, EventListenerOrEventListenerObject]>\r\n) {\r\n const elements = document.querySelectorAll('.multi-target-tabs-v2');\r\n\r\n const toggleTargets = (tab: HTMLElement, element: HTMLElement) => {\r\n const targets = tab.dataset.target;\r\n //split the query selector\r\n const targetArray = targets?.split(',');\r\n if (targetArray) for (const currentTarget of targetArray) {\r\n const currentTargetElement = element.querySelector(currentTarget);\r\n const currentActiveElement = currentTargetElement?.parentElement?.querySelector('.tab-pane.active');\r\n //remove all active tabs\r\n currentActiveElement?.classList.remove('active');\r\n currentActiveElement?.classList.remove('show');\r\n //add active tabs to current tab\r\n currentTargetElement?.classList.add('show');\r\n currentTargetElement?.classList.add('active');\r\n }\r\n\r\n const navTabs = element.querySelectorAll('.nav-tabs')\r\n for (const inlineTabs of navTabs) {\r\n // eslint-disable-next-line @typescript-eslint/no-loop-func,unicorn/consistent-function-scoping\r\n const scrollTabIntoView = (event: Event) => {\r\n if (event.target instanceof Element) {\r\n scrollIntoView(event.target, {\r\n behavior: 'smooth',\r\n inline: 'center',\r\n block: 'nearest'\r\n });\r\n }\r\n };\r\n\t\r\n const tabs = inlineTabs.querySelectorAll('.nav-link');\r\n for (const tab of tabs) {\r\n tab.addEventListener('click', scrollTabIntoView);\r\n listeners.push([tab, 'click', scrollTabIntoView]);\r\n }\r\n }\r\n };\r\n\r\n const loadRemainingButtons = (buttonLoader: HTMLElement, targets: NodeListOf) => {\r\n for (const target of targets) {\r\n target.classList.remove('hidden');\r\n buttonLoader.classList.add('hidden');\r\n } \r\n }\r\n\r\n const initialiseMultipleTargetTabs = (elements: NodeListOf) => {\r\n for (const [index, element] of elements.entries()) {\r\n const currentTab = element.querySelectorAll(\"[data-bs-toggle='tab']\");\r\n for (const tab of currentTab) {\r\n tab.addEventListener('show.bs.tab', function () {\r\n toggleTargets(tab, element);\r\n });\r\n listeners.push([\r\n tab,\r\n 'show.bs.tab',\r\n function () {\r\n toggleTargets(tab, element);\r\n },\r\n ]);\r\n }\r\n\r\n const buttonLoader = element.querySelector('.btn-lazy-loader');\r\n if(buttonLoader)\r\n {\r\n const targets = element.querySelectorAll('.nav-link.hidden'); \r\n buttonLoader.addEventListener('click', ()=> loadRemainingButtons(buttonLoader, targets)); \r\n listeners.push([buttonLoader,'click',()=> loadRemainingButtons(buttonLoader, targets)]);\r\n }\r\n }\r\n }\r\n\r\n initialiseMultipleTargetTabs(elements);\r\n\r\n return { elements };\r\n}\r\n\r\nexport function unMountMultipleTargetTabsV2(\r\n listeners: Array<[Document | Element | Window , string, EventListenerOrEventListenerObject]>\r\n) {\r\n for (const [element, event, listener] of listeners) {\r\n element.removeEventListener(event, listener);\r\n }\r\n}\r\n","/**\r\n * Data-List Component\r\n */\r\n\r\nimport { defineAsyncComponent } from 'vue';\r\n\r\nimport { type App } from '~/app';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Property Card Vue Component');\r\n app.vueApp.component(\r\n 'property-card',\r\n defineAsyncComponent(async () => import('./PropertyCard.vue'))\r\n );\r\n app.vueApp.component(\r\n 'property-card-mobile',\r\n defineAsyncComponent(async () => import('./PropertyCardMobile.vue'))\r\n );\r\n};\r\n","/**\r\n * Location-Tile-Card Component\r\n */\r\n\r\nimport { defineAsyncComponent } from 'vue';\r\n\r\nimport { type App } from '~/app';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Location-Tile-Card Component');\r\n app.vueApp.component('location-tile-card', defineAsyncComponent(async () => import(\"./LocationTileCard.vue\")));\r\n};\r\n","/**\r\n * Location-Tile-Listing Component\r\n */\r\n\r\nimport { defineAsyncComponent } from 'vue';\r\n\r\nimport { type App } from '~/app';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Location-Tile-Listing Component');\r\n app.vueApp.component('location-tile-listing', defineAsyncComponent(async () => import(\"./LocationTileListing.vue\")));\r\n};\r\n","/* eslint-disable @typescript-eslint/no-unsafe-assignment */\r\nimport { type App } from '~/app';\r\n\r\n\r\nexport default (app: App) => { \r\n app.logger.debug('[Stockland FE] Initialise Stockland MPC Progress timeline Component');\r\n\r\n const listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]> = [];\r\n\r\n app.afterMount\r\n .then(() => {\r\n setTimeout(() =>{\r\n mountProgressTimeLine(listeners)\r\n }, 300)\r\n })\r\n .catch((error) => {\r\n throw new Error('[Stockland FE] Unable to register Stockland Feature Links and Image component', error);\r\n });\r\n\r\n return function destroyFreeTextQuickLinks() {\r\n unMountProgressTimeLine(listeners)\r\n\r\n app.logger.debug('[DXA] Feature Links and Image component destroyed');\r\n };\r\n\r\n\r\n function mountProgressTimeLine(\r\n listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>,\r\n root: HTMLElement | null = null) {\r\n\r\n const observer = new IntersectionObserver((entries) => {\r\n const entry = entries[0];\r\n if (entry.isIntersecting){\r\n observer.unobserve(entry.target);\r\n\r\n const value = document.getElementById(entry.target.id);\r\n \r\n const child = value?.children[0] as HTMLElement;\r\n if (child !== undefined || child !== null){\r\n const childWidth = child?.style.width;\r\n document.documentElement.style.setProperty(`--progressValue`,`${childWidth}`);\r\n child.animate(\r\n [\r\n ///keyframes\r\n {width: \"0%\"},\r\n {width:`${childWidth}` }\r\n ],\r\n {\r\n duration: 4000,\r\n iterations: 1\r\n }\r\n );\r\n }\r\n }\r\n });\r\n \r\n // Tell the observer which elements to track\r\n const elements =document.querySelectorAll(\".mpc-progress-bar\")\r\n for (const element of elements){\r\n observer.observe(element);\r\n }\r\n \r\n }\r\n\r\n\r\n function unMountProgressTimeLine(\r\n listeners: Array<[Element | Window | Document, string, EventListenerOrEventListenerObject]>\r\n ) {\r\n for (const [element, event, listener] of listeners) {\r\n element.removeEventListener(event, listener);\r\n }\r\n }\r\n}","import { type App } from '~/app';\n\nimport { defineAsyncComponent } from 'vue';\n\nexport default (app: App) => {\n app.logger.debug('[Stockland FE] Initialise Stockland Progress Bar Component');\n app.vueApp.component(\n 'progress-bar',\n defineAsyncComponent(async () => import('./ProgressBar.vue'))\n );\n};","/**\r\n * Community-Tiles-Listing Component\r\n */\r\n\r\nimport { defineAsyncComponent } from 'vue';\r\n\r\nimport { type App } from '~/app';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Community-Tiles-Listing Component');\r\n app.vueApp.component('construction-tracker', defineAsyncComponent(async () => import(\"./ConstructionTracker.vue\")));\r\n app.vueApp.component('construction-accordion', defineAsyncComponent(async () => import(\"./ConstructionAccordion.vue\")));\r\n};\r\n","/**\r\n * Article-Master Component\r\n */\r\n\r\nimport { defineAsyncComponent } from 'vue';\r\n\r\nimport { type App } from '~/app';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Article-Master Component');\r\n app.vueApp.component('article-master', defineAsyncComponent(async () => import(\"./ArticleMaster.vue\")));\r\n};\r\n","/**\r\n * Location-Tile-Card Component\r\n */\r\n\r\nimport { defineAsyncComponent } from 'vue';\r\n\r\nimport { type App } from '~/app';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Large-Image-Card Component');\r\n app.vueApp.component('large-image-card', defineAsyncComponent(async () => import(\"./LargeImageCard.vue\")));\r\n};\r\n","/**\r\n * Large-Video-Card Component\r\n */\r\n\r\nimport { defineAsyncComponent } from 'vue';\r\n\r\nimport { type App } from '~/app';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Large-Video-Card Component');\r\n app.vueApp.component('large-video-card', defineAsyncComponent(async () => import(\"./LargeVideoCard.vue\")));\r\n};\r\n","/**\r\n * Inspiration-Card-Listing Component\r\n */\r\n\r\nimport { defineAsyncComponent } from 'vue';\r\n\r\nimport { type App } from '~/app';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Inspiration-Card-Listing Component');\r\n app.vueApp.component('inspiration-card-listing', defineAsyncComponent(async () => import(\"./InspirationCardListing.vue\")));\r\n};\r\n","/**\r\n * Carousel Component\r\n * @module patterns/components/banners/asset-hero-banner\r\n */\r\n\r\nimport { type App } from '~/app';\r\n\r\nimport JsController from '../js-controller';\r\n\r\nexport default (app: App) => {\r\n\r\n const controller = new JsController(app, 'Map with Supporting Content');\r\n controller.addMountFunction(() => {\r\n mountComponent(controller);\r\n })\r\n\r\n return controller.init();\r\n}\r\n\r\ninterface Document {\r\n exitFullscreen: () => void;\r\n mozCancelFullScreen: () => void;\r\n webkitCancelFullScreen: () => void;\r\n msCancelFullScreen: () => void;\r\n}\r\n\r\ninterface Map {\r\n requestFullscreen: () => void;\r\n webkitRequestFullScreen: () => void;\r\n mozRequestFullScreen: () => void;\r\n msRequestFullscreen: () => void;\r\n}\r\nexport function mountComponent( controller: JsController ) {\r\n const mapWithSupportingContents = document.querySelectorAll('.map-with-supporting-content')\r\n for (const mapWithSupportingContent of mapWithSupportingContents) { \r\n const currentDay = getCurrentDay(mapWithSupportingContent)\r\n const timeRangeElements = mapWithSupportingContent.querySelectorAll('.opening-time-range')\r\n for (const [index,timeRange] of timeRangeElements.entries()) {\r\n if (currentDay && index === currentDay - 1 ) {\r\n const previousDayRange = currentDay == 0 ? null: timeRangeElements[index-1]\r\n toggleOpenStatus(timeRange,previousDayRange)\r\n }\r\n }\r\n\r\n // Enable fullscreen ability \r\n const map = mapWithSupportingContent.querySelector('.map-container')\r\n const expandButton = mapWithSupportingContent.querySelector('.expand-map-button')\r\n const sideContent = mapWithSupportingContent.querySelector('.supporting-content')\r\n const centreDirectory = mapWithSupportingContent.querySelector('.centre-directory')\r\n const esriMap = mapWithSupportingContent.querySelector('.esrimap')\r\n\r\n if ((expandButton && map && sideContent && centreDirectory && esriMap) ?? (expandButton && map && sideContent )) {\r\n const blockHeight = sideContent.offsetHeight\r\n\r\n controller.addListener(expandButton, \"click\", ()=>{\r\n if(document.fullscreenElement){ \r\n (document as unknown as Document).exitFullscreen(); \r\n (document as unknown as Document).webkitCancelFullScreen();\r\n (document as unknown as Document).mozCancelFullScreen();\r\n (document as unknown as Document).msCancelFullScreen();\r\n map.style.height = `${blockHeight}px`\r\n if (centreDirectory) {\r\n centreDirectory.style.width = `100%`\r\n }\r\n } else { \r\n ( map as unknown as Map).requestFullscreen();\r\n ( map as unknown as Map).webkitRequestFullScreen();\r\n ( map as unknown as Map).mozRequestFullScreen();\r\n ( map as unknown as Map).msRequestFullscreen();\r\n if (centreDirectory && esriMap) {\r\n centreDirectory.style.width = `100vw`\r\n esriMap.style.marginLeft = '0'\r\n }\r\n } \r\n });\r\n\r\n controller.addListener(document, \"fullscreenchange\", ()=>{\r\n if (!document.fullscreenElement) {\r\n map.style.height = `${blockHeight}px`\r\n map.classList.add('!max-h-132', 'md:!h-full')\r\n if (centreDirectory) {\r\n centreDirectory.style.width = `100%`\r\n }\r\n } \r\n });\r\n }\r\n }\r\n \r\n}\r\n\r\nconst getCurrentDay = (element: Element) =>{\r\n const openingHoursArray = element.querySelectorAll('.opening-hours-day');\r\n if(openingHoursArray){\r\n const currentDay = new Date().getDay()\r\n for (const [index, openingHours] of openingHoursArray.entries()) {\r\n if (index === currentDay - 1) {\r\n openingHours.parentElement?.classList.add('text-primary-accent-text','font-medium')\r\n return currentDay\r\n } \r\n }\r\n }\r\n}\r\n\r\nconst toggleOpenStatus = (element: Element, previousElement: Element | null)=>{\r\n const timeRange = element.textContent\r\n const previousTimeRange = previousElement?.textContent\r\n \r\n if (timeRange) {\r\n const openTime = timeRange.split(\" - \")[0].toLowerCase()\r\n const closeTime = timeRange.split(\" - \")[1].toLowerCase()\r\n let previousCloseTime = null\r\n if (previousTimeRange) {\r\n previousCloseTime = previousTimeRange.split(\" - \")[1].toLowerCase()\r\n }\r\n \r\n let openTimeHour = 0\r\n let closeTimeHour = 0\r\n let previousCloseMins = null\r\n\r\n // Checking the previous day as well to do if shop opens after midnight for currently open\r\n if(previousCloseTime && previousCloseTime?.includes('am')){\r\n const previousCloseHours = Number.parseInt(previousCloseTime.split(':')[0]) === 12 ? 0 : Number.parseInt(previousCloseTime.split(':')[0])\r\n previousCloseMins= previousCloseHours * 60 + Number.parseInt(previousCloseTime.split(':')[1]);\r\n }\r\n\r\n if (openTime.includes('am')) {\r\n openTimeHour = Number.parseInt(openTime.split(':')[0]) === 12 ? 0 : Number.parseInt(openTime.split(':')[0]);\r\n }else{\r\n openTimeHour = Number.parseInt(openTime.split(':')[0]) === 12 ? 12 : 12 + Number.parseInt(openTime.split(':')[0])\r\n }\r\n\r\n const openTimeMin = openTime.split(':')[1].slice(0, -2); \r\n \r\n if (closeTime.includes('am')) {\r\n closeTimeHour = Number.parseInt(closeTime.split(':')[0]) === 12 ? 24 : 24 + Number.parseInt(closeTime.split(':')[0]);\r\n }else{\r\n closeTimeHour = Number.parseInt(closeTime.split(':')[0]) === 12 ? 12 : 12 + Number.parseInt(closeTime.split(':')[0])\r\n }\r\n \r\n const closeTimeMin = closeTime.split(':')[1].slice(0, -2); \r\n\r\n // Convert hours and minutes into minutes\r\n const openingTime = openTimeHour * 60 + Number.parseInt(openTimeMin);\r\n const closingTime = closeTimeHour * 60 + Number.parseInt(closeTimeMin);\r\n // Get Datalocation \r\n const openingHoursContainer = document.querySelector('.opening-hours-container ')\r\n\r\n const storeTimezone = openingHoursContainer?.getAttribute('data-timezone')\r\n const date = new Date(); \r\n const storeLocalDate = new Date(date.toLocaleString('en-US', {timeZone: storeTimezone!}))\r\n\r\n const currentTime = storeLocalDate.getHours() * 60 + storeLocalDate.getMinutes();\r\n \r\n // Check if current time is not within time range\r\n const openText = document.querySelector('.currently-open-text')\r\n const closedText = document.querySelector('.currently-closed-text')\r\n\r\n if (openText && closedText) {\r\n const isOutsideOpeningHours = currentTime < openingTime || currentTime > closingTime;\r\n const isAfterPreviousClose = previousCloseMins && currentTime > previousCloseMins ? true : false;\r\n \r\n if (isOutsideOpeningHours && isAfterPreviousClose) {\r\n openText.classList.add('hidden');\r\n closedText.classList.remove('hidden');\r\n } else if (!previousCloseMins && isOutsideOpeningHours) {\r\n openText.classList.add('hidden');\r\n closedText.classList.remove('hidden');\r\n }\r\n }\r\n }\r\n}\r\n","/**\r\n * Store Category Wayfinding Component\r\n * @module patterns/components/store-category-wayfinding\r\n */\r\n\r\nimport { type App } from '~/app';\r\n\r\nimport JsController from '../js-controller';\r\n\r\nexport default (app: App) => {\r\n\r\n const controller = new JsController(app, 'store category wayfinding');\r\n controller.addMountFunction(() => {\r\n mountComponent(controller);\r\n })\r\n\r\n return controller.init();\r\n}\r\n\r\nexport function mountComponent( controller: JsController ) {\r\n const storeCategoryWayfindings = document.querySelectorAll(\".store-category-wayfinding\");\r\n for (const storeCategoryWayfinding of storeCategoryWayfindings) {\r\n\r\n const categoryTabs = storeCategoryWayfinding.querySelectorAll('.nav-link')\r\n for (const [index, tab] of categoryTabs.entries()) { \r\n \r\n /** \r\n * Shows the selected tab content on click\r\n */\r\n const handleTabClick = () => {\r\n const contentTabs = storeCategoryWayfinding.querySelectorAll(`.tab-pane`);\r\n const navLinks = storeCategoryWayfinding.querySelectorAll(\".nav-link\");\r\n const activeNavLink = storeCategoryWayfinding.querySelector(`#nav-tab-${index}`);\r\n const activeContentTab = storeCategoryWayfinding.querySelector(`#nav-content-${index}`);\r\n const activeGridTab = storeCategoryWayfinding.querySelector(`#nav-grid-${index}`);\r\n\r\n for (const contentTab of contentTabs){\r\n contentTab.classList.remove('show', 'active');\r\n }\r\n\r\n for (const navLink of navLinks){\r\n navLink.classList.remove('active');\r\n }\r\n\r\n activeNavLink?.classList.add('active')\r\n activeContentTab?.classList.add('show', 'active')\r\n activeGridTab?.classList.add('show', 'active')\r\n }\r\n\r\n controller.addListener(tab, \"click\", handleTabClick);\r\n }\r\n\r\n const moreCategoriesButton = storeCategoryWayfinding.querySelector('.more-categories-button');\r\n\r\n if (!moreCategoriesButton) {\r\n return;\r\n }\r\n \r\n /** \r\n * Shows more categories when clicked\r\n */\r\n const handleMoreCategoriesClick = () => {\r\n const moreCategories = storeCategoryWayfinding.querySelectorAll(\".more-categories\");\r\n for (const moreCategory of moreCategories){\r\n moreCategory.classList.remove('hidden');\r\n }\r\n\r\n moreCategoriesButton.classList.add('hidden');\r\n }\r\n\r\n controller.addListener(moreCategoriesButton, \"click\", handleMoreCategoriesClick);\r\n }\r\n}\r\n","/**\r\n * Carousel Component\r\n * @module patterns/components/banners/asset-hero-banner\r\n */\r\n\r\nimport { type App } from '~/app';\r\n\r\nimport JsController from '../../js-controller';\r\n\r\nexport default (app: App) => {\r\n const controller = new JsController(app, 'half image banner');\r\n controller.addMountFunction(() => {\r\n mountComponent();\r\n });\r\n\r\n return controller.init();\r\n};\r\n\r\nexport function mountComponent() {\r\n const halfImageBanners = document.querySelectorAll('.half-image-banner')\r\n\r\n function getCurrentDate(){\r\n const currentDay = new Date()\r\n const month = String(currentDay).split(' ')[1]\r\n const day = String(currentDay).split(' ')[2]\r\n return (`${month} ${day}`)\r\n }\r\n\r\n for (const halfImageBanner of halfImageBanners) {\r\n const openingTimes = halfImageBanner.querySelectorAll('.opening-time')\r\n if(openingTimes){\r\n for (const [index, openingTime] of openingTimes.entries()) {\r\n const openingTimeDay = openingTime.querySelector('.opening-time-day')\r\n const currentDayNumber = new Date().getDay()\r\n\r\n if(openingTimeDay && index === currentDayNumber-1){\r\n const currentDay = getCurrentDate()\r\n const day = openingTimeDay.textContent\r\n openingTime.classList.add('text-primary-accent-text')\r\n openingTimeDay.classList.add('font-semibold')\r\n openingTimeDay.textContent = `${day} ${currentDay}`\r\n }\r\n }\r\n }\r\n }\r\n}","/**\r\n * Inspire Header Component\r\n */\r\n\r\nimport { defineAsyncComponent } from 'vue';\r\n\r\nimport { type App } from '~/app';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Inspire Header Component');\r\n app.vueApp.component('inspire-header', defineAsyncComponent(async () => import(\"./InspireHeader.vue\")));\r\n};\r\n \r\n","/* eslint-disable import/no-unassigned-import */\r\nimport 'swiper/css';\r\nimport 'swiper/css/pagination';\r\n\r\nimport Swiper from 'swiper';\r\nimport { Autoplay,Navigation, Pagination } from 'swiper/modules';\r\n\r\nimport { type App } from '~/app';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Retail Home Header Component');\r\n\r\n app.afterMount\r\n .then(() => {\r\n mountRetailHomeHeader();\r\n })\r\n .catch((error) => {\r\n throw new Error('[Stockland FE] Unable to register Stockland Retail Home Header Component', error);\r\n });\r\n};\r\n\r\n\r\n/**\r\n * @function mountRetailHomeHeader\r\n * @description Mounts the Retail Home Header component and inits swiper\r\n*/\r\n\r\nfunction mountRetailHomeHeader() {\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n const swiper = new Swiper('div[data-retail-home-swiper]', {\r\n modules: [Navigation, Pagination, Autoplay],\r\n loop: true,\r\n pagination: {\r\n el: '.swiper-pagination',\r\n clickable: true\r\n },\r\n slidesPerView: 'auto',\r\n speed: 1000,\r\n autoplay: {\r\n delay: 2000,\r\n disableOnInteraction: true,\r\n pauseOnMouseEnter: true\r\n },\r\n // direction:'vertical', // uncomment these two properties\r\n // breakpoints: { // to enable vert on xs - sm\r\n // 768: { // and horizontal on md +\r\n // direction: 'horizontal'\r\n // }\r\n // }\r\n });\r\n\r\n}\r\n","/**\r\n * Inspiration-Tiles-and-Filters Component\r\n */\r\n\r\nimport { defineAsyncComponent } from 'vue';\r\n\r\nimport { type App } from '~/app';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Inspiration-Tiles-and-Filters Component');\r\n app.vueApp.component('inspiration-tiles-and-filters', defineAsyncComponent(async () => import(\"./InspirationTilesAndFilters.vue\")));\r\n app.vueApp.component('inspiration-filters', defineAsyncComponent(async () => import(\"./InspirationFilters.vue\")));\r\n app.vueApp.component('inspiration-category-card', defineAsyncComponent(async () => import(\"./InspirationCategoryCard.vue\")));\r\n app.vueApp.component('inspiration-listing', defineAsyncComponent(async () => import(\"./InspirationListing.vue\")));\r\n};\r\n","/* eslint-disable @typescript-eslint/no-unsafe-assignment */\r\n/**\r\n * Carousel Component\r\n * @module patterns/components/banners/asset-hero-banner\r\n */\r\n\r\nimport { type App } from '~/app';\r\n\r\nimport JsController from '../../js-controller';\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any, unicorn/prevent-abbreviations\r\ndeclare let jQuery: any;\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\ndeclare let window: any;\r\nexport default (app: App) => {\r\n\r\n const controller = new JsController(app, 'gift-tile');\r\n \r\n controller.addMountFunction(async() => {\r\n //set jquery alias if jquery is already loaded on the page by epiforms\r\n if(typeof jQuery !== 'undefined' && jQuery && !window.$){\r\n window.$=jQuery;\r\n }\r\n\r\n await mountComponent();\r\n })\r\n\r\n return controller.init();\r\n}\r\n\r\nexport async function mountComponent() {\r\n // let host = location.hostname;\r\n const bindingElement= document.querySelector('.rtc-buy-card');\r\n if(bindingElement){\r\n const authUrl = bindingElement.dataset.authUrl;\r\n const data = {\r\n apiKey: bindingElement.dataset.apiKey ??\"\",\r\n app: bindingElement.dataset.app??\"\",\r\n name: bindingElement.dataset.name??\"\",\r\n email: bindingElement.dataset.email??\"\",\r\n mobile: bindingElement.dataset.mobile??\"\"\r\n };\r\n if(authUrl){\r\n try {\r\n // e.preventDefault();\r\n const response = await fetch(authUrl, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/x-www-form-urlencoded;charset=UTF-8\",\r\n },\r\n body: new URLSearchParams(data),\r\n });\r\n \r\n const responseData = await response.json();\r\n const status = responseData.status;\r\n\r\n if (status === \"success\") {\r\n const authToken = responseData.authToken;\r\n if (document.cookie.includes(\"tr-app-auth-token\")) {\r\n document.cookie =\r\n \"tr-app-auth-token=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;\";\r\n }\r\n\r\n document.cookie = `tr-app-auth-token=${authToken}; expires=${new Date(\r\n Date.now() + 604_800_000\r\n ).toUTCString()}; path=/;`;\r\n\r\n } else {\r\n console.log(\"Failed\");\r\n }\r\n } catch (error) {\r\n console.error(error);\r\n }\r\n }\r\n }\r\n}\r\n","import { type App } from '~/app';\n\nimport { defineAsyncComponent } from 'vue';\n\nexport default (app: App) => {\n app.logger.debug('[Stockland FE] Initialise Stockland Scroll To Card Component');\n app.vueApp.component(\n 'scroll-to-card',\n defineAsyncComponent(async () => import('./ScrollToCard.vue'))\n );\n};","/**\r\n * Store Directory Component\r\n */\r\n\r\nimport { defineAsyncComponent } from 'vue';\r\nimport { createPinia } from 'pinia';\r\n\r\nimport { type App } from '~/app';\r\n\r\n\r\nconst pinia = createPinia();\r\n \r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Store Directory Component');\r\n app.vueApp.component('store-directory', defineAsyncComponent(async () => import(\"./StoreDirectory.vue\")));\r\n\r\n app.vueApp.use(pinia); // State Management for VueJS - https://pinia.esm.dev/\r\n \r\n};\r\n","/**\r\n * Offers-Listing Component\r\n */\r\n\r\nimport { defineAsyncComponent } from 'vue';\r\n\r\nimport { type App } from '~/app';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Offers-Listing Component');\r\n app.vueApp.component('offers-listing', defineAsyncComponent(async () => import(\"./OffersListing.vue\")));\r\n};\r\n","/**\r\n * Recipe Campaign - One Side Scroll Takeover Component\r\n */\r\n\r\nimport { defineAsyncComponent } from 'vue';\r\nimport { createPinia } from 'pinia';\r\n\r\nimport { type App } from '~/app';\r\n\r\n\r\nconst pinia = createPinia();\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Recipe Campaign - One Side Scroll Takeover Component');\r\n app.vueApp.component('recipe-campaign-one-side-scroll-takeover', defineAsyncComponent(async () => import(\"./RecipeCampaignOneSideScrollTakeover.vue\")));\r\n\r\n app.vueApp.use(pinia); // State Management for VueJS - https://pinia.esm.dev/\r\n console.log('Recipe Campaign - One Side Scroll Takeover Component Initialised');\r\n};\r\n","/**\r\n * Carousel Component\r\n * @module patterns/components/banners/asset-hero-banner\r\n */\r\n\r\nimport Glide from '@glidejs/glide';\r\n\r\nimport { markElementReady } from '@root/src/framework/scripts/helpers/element-ready';\r\nimport { type App } from '~/app';\r\n\r\nimport JsController from '../../js-controller';\r\n\r\nexport default (app: App) => {\r\n\r\n const controller = new JsController(app, 'campaign-hero-banner');\r\n controller.addMountFunction(() => {\r\n mountComponent(controller);\r\n })\r\n\r\n return controller.init();\r\n}\r\n\r\nexport function mountComponent( controller: JsController ) {\r\n let originalWindowWidth= window.innerWidth;\r\n const elements = document.querySelectorAll('.campaign-banner-carousel');\r\n\r\n // Loop through and individually instantiate each Glide instance\r\n const initialiseCampaignHeroBannerCarousel = (elements: NodeListOf) => {\r\n for (const element of elements) {\r\n const glide = new Glide(element, {\r\n type:'carousel',\r\n perView: 1,\r\n gap:0,\r\n autoplay:5000,\r\n });\r\n \r\n glide.mount();\r\n\r\n markElementReady(element);\r\n }\r\n };\r\n\r\n \r\n if(elements && elements.length > 0)\r\n initialiseCampaignHeroBannerCarousel(elements);\r\n\r\n const reinitialiseCarousel = () => {\r\n if(originalWindowWidth!=window.innerWidth){\r\n originalWindowWidth = window.innerWidth;\r\n initialiseCampaignHeroBannerCarousel(elements);\r\n }\r\n };\r\n\r\n // On screensize re-initialise the carousel to handle per view updates on different screensizes\r\n controller.addListener(window,'resize', reinitialiseCarousel);\r\n}\r\n","/**\r\n * Event-Listing-Card Component\r\n */\r\n\r\nimport { defineAsyncComponent } from 'vue';\r\n\r\nimport { type App } from '~/app';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Event-Listing-Card Component');\r\n app.vueApp.component('event-listing-card', defineAsyncComponent(async () => import(\"./EventListingCard.vue\")));\r\n};\r\n","/**\r\n * Rtc-Event-Listing Component\r\n */\r\n\r\nimport { defineAsyncComponent } from 'vue';\r\n\r\nimport { type App } from '~/app';\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Stockland Rtc-Event-Listing Component');\r\n app.vueApp.component('rtc-event-listing', defineAsyncComponent(async () => import(\"./RtcEventListing.vue\")));\r\n};\r\n","/**\n * Carousel Component\n * @module patterns/components/banners/asset-hero-banner\n */\n\nimport { type App } from '~/app';\n\nimport Glide from '@glidejs/glide';\n\nimport JsController from '../js-controller';\n\nexport default (app: App) => {\n\n const controller = new JsController(app, 'feature-cards-component');\n controller.addMountFunction(() => {\n mountFeatureCardComponent(controller);\n })\n\n return controller.init();\n}\n\nexport function mountFeatureCardComponent( controller: JsController ) {\n const offerTilesCarouselComponents = document.querySelectorAll('.featured-cards-carousel-component');\n for (const carousel of offerTilesCarouselComponents) {\n\n const carouselGlide = new Glide(carousel, {\n type:'slider',\n perView: 1,\n startAt: 0,\n gap: 16,\n peek:{ before: 36, after: 36}\n });\n\n setTimeout(() => {\n // Timeout to load clone slides\n carouselGlide.mount();\n }, 800);\n controller.addCarouselInstance(carouselGlide);\n}\n}","/**\n * Progress-Card Component\n */\n\nimport { defineAsyncComponent } from 'vue';\n\nimport { type App } from '~/app';\n\nexport default (app: App) => {\n app.logger.debug('[Stockland FE] Initialise Stockland Progress-Card Component');\n app.vueApp.component('cards-progress-bar', defineAsyncComponent(async () => import(\"./CardsProgressBar.vue\")));\n app.vueApp.component('cards-steps-progress', defineAsyncComponent(async () => import(\"./CardsStepsProgress.vue\")));\n};\n","/**\r\n * Recipe Campaign - One Side Scroll Takeover Component\r\n */\r\n\r\nimport { defineAsyncComponent } from 'vue'; \r\nimport { register } from 'swiper/element';\r\n\r\nimport { type App } from '~/app';\r\n\r\nregister();\r\n\r\nexport default (app: App) => {\r\n app.logger.debug('[Stockland FE] Initialise Swiper Component');\r\n app.vueApp.component('swiper', defineAsyncComponent(async () => import(\"./swiper.vue\")));\r\n\r\n console.log('Swiper Component Initialised');\r\n};\r\n","/**\n * Local-Storage-Wrapper Component\n */\n\nimport { defineAsyncComponent } from 'vue';\n\nimport { type App } from '~/app';\n\nexport default (app: App) => {\n app.logger.debug('[Stockland FE] Initialise Stockland Local-Storage-Wrapper Component');\n app.vueApp.component('hub-data-wrapper', defineAsyncComponent(async () => import(\"./HubDataWrapper.vue\")));\n};\n","/**\n * Carousel Component\n * @module patterns/components/banners/asset-hero-banner\n */\n\nimport { type App } from '~/app';\n\nimport JsController from '../js-controller';\n\nimport Glide from '@glidejs/glide';\nimport { defineAsyncComponent } from 'vue';\n\nimport { markElementReady,waitForElement } from '@root/src/framework/scripts/helpers/element-ready';\n\nimport { useLocalStorageStore } from '../global/hub-data-wrapper/store/localStorageStore';\n\nexport default (app: App) => {\n app.vueApp.component(\n 'buyer-type-selection',\n defineAsyncComponent(async () => import('./BuyerTypeButtonSelection.vue'))\n );\n\n const controller = new JsController(app, 'hub-welcome-modal');\n controller.addMountFunction(() => {\n mountComponent(controller);\n });\n\n return controller.init();\n};\n\nexport function mountComponent(controller: JsController) {\n const elements = document.querySelectorAll('.welcome-modal-carousel');\n let modalElement = document.querySelector('#hub-welcome-modal');\n if (modalElement) {\n controller.addListener(modalElement, 'hidden.bs.modal', () => {\n window.location.reload();\n });\n }\n const initialiseModalCarousel = (elements: NodeListOf) => {\n for (const element of elements) {\n const glide = new Glide(element, {\n type: 'carousel',\n perView: 1,\n gap: 0,\n });\n setTimeout(() => glide.mount(), 1700);\n\n markElementReady(element);\n }\n };\n initialiseModalCarousel(elements);\n}\n\nexport const loadModalIfApplicable = () => {\n waitForElement('#hub-welcome-modal').then(() => {\n let modalElement = document.querySelector('#hub-welcome-modal');\n if (modalElement) {\n const openModalButton = document.querySelector('#open-welcome-modal-button');\n if (openModalButton) {\n openModalButton?.click();\n }\n }\n });\n}\n","/**\n * Step Accordion Component\n */\n\nimport { defineAsyncComponent } from 'vue';\n\nimport { type App } from '~/app';\n\nexport default (app: App) => {\n app.logger.debug('[Stockland FE] Initialise Stockland Step Accordion Component');\n app.vueApp.component('step-accordion', defineAsyncComponent(async () => import(\"./StepAccordion.vue\")));\n};\n","/**\n * Step-Completion Component\n */\n\nimport { defineAsyncComponent } from 'vue';\n\nimport { type App } from '~/app';\n\nexport default (app: App) => {\n app.logger.debug('[Stockland FE] Initialise Stockland Step-Completion Component');\n app.vueApp.component('confetti', defineAsyncComponent(async () => import(\"./Confettis.vue\")));\n app.vueApp.component('step-completion', defineAsyncComponent(async () => import(\"./StepCompletion.vue\")));\n};\n","/* eslint-disable simple-import-sort/imports */\r\n/**\r\n * Components Index\r\n * @hidden\r\n */\r\n\r\n// Bootstrap imports are global\r\n// eslint-disable-next-line import/no-unassigned-import\r\nimport 'bootstrap/js/dist/modal';\r\n// eslint-disable-next-line import/no-unassigned-import\r\nimport 'bootstrap/js/dist/collapse';\r\n// eslint-disable-next-line import/no-unassigned-import\r\nimport 'bootstrap/js/dist/dropdown';\r\n// eslint-disable-next-line import/no-unassigned-import\r\nimport 'bootstrap/js/dist/tab';\r\n\r\nimport { type App } from '~/app';\r\n\r\nimport initialiseAccordion from './accordion/accordion';\r\nimport initialiseAmenityList from './amenity-list/amenity-list';\r\nimport initialiseAmenityListContainer from './amenity-list-container/amenity-list-container';\r\nimport initialiseMediaGalleryFeature from './archive/media-gallery/media-gallery';\r\nimport initialiseStickySlider from './archive/sticky-slider/sticky-slider';\r\nimport initialiseAssetHeroBanner from './banners/asset-hero-banner/asset-hero-banner';\r\nimport initialiseMpcTakeoverHero from './banners/mpc-takeover-hero/mpc-takeover-hero';\r\nimport initialiseHalcyonHomeHeader from './banners/halcyon-home-header/halcyon-home-header';\r\nimport initialiseRichMediaBanner from './banners/rich-media-banner/rich-media-banner';\r\nimport initialiseCards from './card/card';\r\nimport initialiseCardContainer from './card-container/card-container';\r\nimport initialiseCampaignBlock from './campaign-block/campaign-block';\r\nimport initialiseSlimCampaignBlock from './slim-campaign-block/slim-campaign-block';\r\nimport initialiseAnnouncementTileCarousel from './carousels/announcement-tile-carousel/lazy-carousel';\r\nimport initialiseModalCarousel from './carousels/archive/modal-carousel/lazy-carousel';\r\nimport initialiseCarousel from './carousels/carousel/lazy-carousel';\r\nimport initialiseFeatureStatQuoteCarousel from './carousels/feature-stat-quote-carousel/lazy-carousel';\r\nimport initialiseFeaturedPropertysCarousel from './carousels/featured-property-carousel/lazy-carousel';\r\nimport initialiseHeroCarousel from './carousels/hero-carousel/lazy-carousel';\r\nimport initialiseHorizontalCarousel from './carousels/horizontal-carousel/lazy-carousel';\r\nimport initialiseMultiImageCarousel from './carousels/multi-image-carousel/multi-image-carousel'\r\nimport initialiseMultiImageInnerCarousel from './carousels/multi-image-inner-carousel/multi-image-inner-carousel';\r\nimport initialiseNumberPanelCarousel from './carousels/number-panels-carousel/number-panels-carousel';\r\nimport initialisePassiveCarousel from './carousels/passive-carousel/lazy-carousel';\r\nimport initialiseVerticalCarousel from './carousels/vertical-carousel/vertical-carousel';\r\nimport initialiseClickStream from './clickstream/click-stream';\r\nimport initialiseCollapsedFormCta from './collapsed-form-cta/collapsed-form-cta';\r\nimport initialiseCommunityTileListing from './community-tiles-listing/community-tiles-listing'\r\nimport initialiseVerticalTabBar from './containers/archive/vertical-tab-bar-container/vertical-tab-bar-container';\r\nimport initialiseContentContainer from './containers/content-container/content-container';\r\nimport initialiseHorizontalTabBar from './containers/horizontal-tab-bar-container/horizontal-tab-bar-container';\r\nimport initialiseVerticalTabScroll from './containers/vertical-tab-bar-container/vertical-tab-bar-container';\r\nimport initialiseVerticalTabVideo from './containers/vertical-tab-video/vertical-tab-video';\r\nimport initialiseEventDetails from './event-details/event-details';\r\nimport initialiseRecipePage from './recipe/recipe-body/recipe-body';\r\nimport initialiseSearchExperiment from './examples-and-experiments/search-experiment/search-experiment';\r\nimport initialiseVueExample from './examples-and-experiments/vue-example/vue-example';\r\nimport initialiseFacilitiesFilters from './facilities-filters/facilities-filters';\r\nimport initialiseFeatureLinkContainerV2 from './feature-link-container-v2/feature-link-container-v2';\r\nimport initialiseFeatureLinksAndImage from './feature-links-and-image/feature-links-and-image';\r\nimport initialiseFeaturedEventStatement from './feature-statement/archive/event/event';\r\nimport initialiseFeaturedCarousel from './featured-carousel/featured-carousel';\r\nimport initialiseFormAndContent from './form-and-content/form-and-content';\r\nimport initialiseFormattedTime from './form-and-content/formatted-time/formatted-time';\r\nimport initialiseEnquiryContact from './form-and-content/forms/enquiry-contact/enquiry-contact'\r\nimport initialiseUnsubscribe from './form-and-content/forms/unsubscribe/unsubscribe';\r\nimport initialiseWhistleblower from './form-and-content/forms/whistleblower/whistleblower';\r\nimport initialiseEnquiryButton from './global/header/enquiry-button/enquiry-button';\r\nimport initialiseGetInTouchButton from './global/header/get-in-touch-button/get-in-touch-button';\r\nimport initialiseGlobalNavigation from './global/header/global-navigation/global-navigation';\r\nimport initialiseMenuOverlay from './global/header/menu-overlay/menu-overlay';\r\nimport initialiseNavigationBar from './global/header/navigation-bar/navigation-bar';\r\nimport initialiseRibbonBar from './global/header/ribbon-bar/ribbon-bar';\r\nimport initialiseHamburgerMenu from './global/header/hamburger-menu/hamburger-menu';\r\nimport initialiseImageAreaFocus from './image-area-focus/image-area-focus';\r\nimport initialiseImageRangeSlider from './image-range-slider/image-range-slider';\r\nimport initialiseInvestorCentre from './investor-resources/investor-centre/investor-centre';\r\nimport initialiseLiveChatMonitoring from './chats/live-chat-monitoring/live-chat-monitoring'\r\nimport initialiseSalesforceChat from './chats/salesforce-chat/salesforce-chat'\r\nimport initialiseSalesforceChatMIAW from './chats/salesforce-chat-miaw/salesforce-chat-miaw'\r\nimport initialiseLlcHomeViz from './llc-home-viz/llc-home-viz';\r\nimport initialiseLlcMpcMapContainer from './llc-mpc-map-container/llc-mpc-map-container';\r\nimport initialiseMaps from './maps/maps';\r\nimport initialiseArticleListing from './media/archive/article-listing/article-listing';\r\nimport initialiseMarketplacerProductBlock from './marketplacer/marketplacer-product-block/marketplacer-product-block'\r\nimport initialiseMediaGallery from './media-gallery/media-gallery';\r\nimport initialiseAnchorLinks from './navigation/anchor-links/anchor-links';\r\nimport initialiseWayfindingBar from './navigation/wayfinding-bar/wayfinding-bar';\r\nimport initialiseFloatierIsland from './navigation/floating-island-scroll/floating-island-scroll';\r\nimport initialiseOffersBlock from './offers/offers-block/offers-block';\r\nimport initialiseOffersCard from './offers/offers-card/offers-card';\r\nimport initialiseOffersModal from './offers/offers-modal/offers-modal';\r\nimport initialiseOffersModalButton from './offers/offers-modal-button/offers-modal-button';\r\nimport initialiseOfferTeaser from './card/offer-teaser/offer-teaser';\r\nimport initialiseRetailOffersTile from './offers/retail-offers-tile/retail-offers-tile';\r\nimport initialiseParallaxScrollBlock from './parallax-scroll-block/parallax-scroll-block';\r\nimport initialiseProductSearch from './product/product-search/product-search';\r\nimport initialiseProductDetails from './product-details/product-details'\r\nimport initialiseProductGallery from './product-gallery/product-gallery'\r\nimport initialiseProductTilesandFilters from './property-tiles-and-filters/property-tiles-and-filters'\r\nimport initialiseProgressHomeHeader from './_hub/progress-home-header/progress-home-header'\r\nimport initialisePromoTileWithIcon from './tile/promo-tile-with-icon/promo-tile-with-icon'\r\nimport initialiseRecentlyViewedHomes from './recently-viewed-homes/recently-viewed-homes';\r\nimport initialiseResourcesList from './resources-list/resources-list';\r\nimport initialiseSearch from './search/search';\r\nimport initialiseSearchAssetsBar from './search-assets-bar/search-assets-bar';\r\nimport initialiseShrinkingHeader from './shrinking-header/shrinking-header';\r\nimport initialiseStageImageWithSteps from './_hub/stage-image-with-steps/stage-image-with-steps'\r\nimport initialiseStepByStepFeatureCarousel from './carousels/step-by-step-feature-carousel/step-by-step-feature-carousel'\r\nimport initialiseOffersTileAndCarousel from './carousels/offers-tile-and-carousel/offers-tile-and-carousel'\r\nimport initialiseTabbedImagePanel from './tabbed-containers/tabbed-image-panel/tabbed-image-panel';\r\nimport initialiseTabbedImageWithText from './tabbed-containers/tabbed-image-with-text/tabbed-image-with-text';\r\nimport initialiseTakeoverCallout from './takeover-callout/takeover-callout'\r\nimport initialiseTakeoverImageWithInlineTabs from './takeover-image-with-inline-tabs/takeover-image-with-inline-tabs';\r\nimport initialiseTakeoverCard from './card/takeover-card/takeover-card';\r\nimport initialiseTakeoverHighlights from './takeover-highlights/takeover-highlights';\r\nimport initialiseCollapseTile from './tile/collapse-tile/collapse-tile';\r\nimport initialisePromoTile from './tile/promo-tile/promo-tile';\r\nimport initialiseCommunityTiles from './tile/community-tiles/community-tiles'\r\nimport initialiseDownloadList from './tile/download-list/download-list';\r\nimport initialiseHeroBanner from './tile/hero-slide/hero-slide';\r\nimport initialiseMultipleTabTargetSelector from './tile/image-tile-with-inline-tabs/image-tile-with-inline-tabs';\r\nimport initialiseMultipleTabTargetSelectorv2 from './tile/image-tile-with-inline-tabs-v2/image-tile-with-inline-tabs-v2';\r\nimport initialisePropertyCard from './tile/property-tile-card/property-card';\r\nimport initialiseLocationCard from './card/location-tile-card/location-tile-card';\r\nimport initialiseLocationTileListing from './location-tile-listing/location-tile-listing';\r\nimport initialiseProgressTimeLine from './tile/mpc-progress-timeline/mpc-progress-timeline';\r\nimport initialiseProgressBar from './progress-bar/progress-bar';\r\nimport initialiseConstructionTracker from './construction-tracker/construction-tracker';\r\nimport initialiseArticleMaster from './article-master/article-master';\r\nimport initializeLargeImageCard from './card/large-image-card/large-image-card';\r\nimport initializeLargeVideoCard from './card/large-video-card/large-video-card';\r\nimport initializeInspirationListing from './inspiration-card-listing/inspiration-card-listing';\r\nimport initialiseMapWithSupportingContent from './map-with-supporting-content/map-with-supporting-content';\r\nimport initialiseStoreCategoryWayfinding from './store-category-wayfinding/store-category-wayfinding';\r\nimport initialiseHalfImageBanner from './banners/half-image-banner/half-image-banner';\r\nimport initialiseInspireHeader from './inspire-header/inspire-header';\r\nimport mountRetailHomeHeader from './retail-home-header/retail-home-header';\r\nimport initializeInspirationTilesAndFilter from './inspiration-tiles-and-filters/inspiration-tiles-and-filters';\r\nimport initializeGifttile from './tile/gift-tile/gift-tile';\r\nimport initializeScrollToCard from './card/scroll-to-card/scroll-to-card';\r\n\r\nimport initialiseStoreDirectory from './store-directory/store-directory';\r\nimport initialiseOfferListing from './offers/offers-listing/offers-listing';\r\n\r\nimport initialiseRecipeCampaignOneSideScrollTakeover from './recipe-campaign-one-side-scroll-takeover/recipe-campaign-one-side-scroll-takeover'\r\nimport initialiseCampaignHeroBanner from './banners/campaign-hero-banner/campaign-hero-banner'\r\n\r\nimport initialiseEventListingCard from './card/event-listing-card/event-listing-card'\r\nimport initialiseRTCEventListing from './rtc-event-listing/rtc-event-listing'\r\n\r\n\r\nimport initialiseFeatureCardsComponent from './feature-cards-component/feature-cards-component';\r\n\r\nimport intialiseProgressCard from './progress-card/progress-card';\r\n\r\nimport initialiseSwiper from './swiper/swiper';\r\nimport intialiseLocalStorageWrapper from './global/hub-data-wrapper/hub-data-wrapper';\r\nimport initialiseWelcomeModal from './hub-welcome-modal/hub-welcome-modal';\r\nimport intialiseStepAccordion from './_hub/step-accordion/step-accordion';\r\nimport initialiseStepCompletion from './step-completion/step-completion';\r\n/**\r\n * Initialise Components\r\n * @param app - App framework\r\n */\r\n\r\nexport function initialiseComponents(app: App) {\r\n // Component Registration\r\n initialiseAmenityList(app);\r\n initialiseAmenityListContainer(app);\r\n initialiseArticleListing(app);\r\n initialiseCards(app);\r\n initialiseCardContainer(app);\r\n initialiseCollapseTile(app);\r\n initialiseFeaturedCarousel(app);\r\n initialiseDownloadList(app);\r\n initialiseFeaturedEventStatement(app);\r\n initialiseFormattedTime(app);\r\n initialiseHalcyonHomeHeader(app);\r\n initialiseInvestorCentre(app);\r\n initialiseImageRangeSlider(app);\r\n initialiseLlcMpcMapContainer(app);\r\n initialiseLlcHomeViz(app);\r\n initialiseMaps(app);\r\n initialiseEventDetails(app)\r\n initialiseRecipePage(app)\r\n initialiseMultipleTabTargetSelector(app);\r\n initialiseMultipleTabTargetSelectorv2(app);\r\n initialiseProductSearch(app);\r\n initialiseResourcesList(app);\r\n initialiseStoreCategoryWayfinding(app);\r\n initialiseOffersCard(app);\r\n initialiseOffersModal(app);\r\n initialiseOffersModalButton(app);\r\n initialiseOfferTeaser(app);\r\n initialisePropertyCard(app);\r\n initialiseProgressHomeHeader(app);\r\n initialiseRecentlyViewedHomes(app);\r\n initialiseWayfindingBar(app);\r\n initialiseFacilitiesFilters(app);\r\n initialiseLiveChatMonitoring(app);\r\n initialiseSearch(app);\r\n initialiseSearchAssetsBar(app);\r\n initialiseSearchExperiment(app);\r\n initialiseStageImageWithSteps(app);\r\n initialiseTabbedImagePanel(app);\r\n initialiseTakeoverCallout(app);\r\n initialiseTakeoverCard(app);\r\n initialiseUnsubscribe(app);\r\n initialiseVueExample(app);\r\n initialiseWhistleblower(app);\r\n initialiseClickStream(app);\r\n initialiseRichMediaBanner(app);\r\n initialiseAnchorLinks(app);\r\n initialiseEnquiryContact(app);\r\n initialiseGetInTouchButton(app);\r\n initialiseCommunityTiles(app)\r\n initialiseCommunityTileListing(app);\r\n initialiseProductTilesandFilters(app);\r\n initialiseProgressTimeLine(app);\r\n initialiseProgressBar(app);\r\n initialiseLocationCard(app);\r\n initialiseLocationTileListing(app);\r\n initialiseSalesforceChat(app);\r\n initialiseSalesforceChatMIAW(app);\r\n initialiseMpcTakeoverHero(app);\r\n initialiseConstructionTracker(app);\r\n initialiseArticleMaster(app);\r\n initializeLargeImageCard(app);\r\n initializeLargeVideoCard(app);\r\n initializeInspirationListing(app);\r\n initialiseMapWithSupportingContent(app);\r\n initialiseHalfImageBanner(app);\r\n initialiseInspireHeader(app);\r\n initialiseOfferListing(app);\r\n initialiseRetailOffersTile(app);\r\n initialiseOffersBlock(app);\r\n initialiseStoreDirectory(app)\r\n initialiseSlimCampaignBlock(app);\r\n mountRetailHomeHeader( app );\r\n initializeGifttile(app);\r\n initialiseRecipeCampaignOneSideScrollTakeover( app );\r\n initializeInspirationTilesAndFilter(app);\r\n initialiseEventListingCard(app);\r\n initialiseRTCEventListing(app);\r\n initialiseSwiper(app);\r\n initializeScrollToCard(app);\r\n\r\n intialiseLocalStorageWrapper(app);\r\n intialiseProgressCard(app);\r\n initialiseHamburgerMenu(app);\r\n intialiseStepAccordion(app);\r\n initialiseStepCompletion(app);\r\n const destroyAnnouncementTileCarousel = initialiseAnnouncementTileCarousel(app);\r\n const destoryAccordion = initialiseAccordion(app);\r\n const destoryAssetHeroBanner = initialiseAssetHeroBanner(app);\r\n const destroyCampaignBlock = initialiseCampaignBlock(app);\r\n const destroySlimCampaignBlock = initialiseSlimCampaignBlock(app);\r\n const destroyCarousel = initialiseCarousel(app);\r\n const destroyCollapsedFormCta = initialiseCollapsedFormCta(app);\r\n const destroyCollapseTile = initialiseCollapseTile(app);\r\n const destroyContentContainer = initialiseContentContainer(app);\r\n const destroyEventDetails = initialiseEventDetails(app)\r\n const destroyRecipePage = initialiseRecipePage(app)\r\n const destroyFeaturedCarousel = initialiseFeaturedCarousel(app);\r\n const destroyFeatureLinksAndImage = initialiseFeatureLinksAndImage(app);\r\n const destroyFeatureLinkContainerV2 = initialiseFeatureLinkContainerV2(app);\r\n const destroyFeatureStatQuoteCarousel = initialiseFeatureStatQuoteCarousel(app);\r\n const destroyFloatingIsland = initialiseFloatierIsland(app);\r\n const destroyFormAndContent = initialiseFormAndContent(app);\r\n const destoryHeroBanner = initialiseHeroBanner(app);\r\n const destroyHeroCarousel = initialiseHeroCarousel(app);\r\n const destroyHorizontalCarousel = initialiseHorizontalCarousel(app);\r\n const destroyMediaGallery = initialiseMediaGallery(app);\r\n const destroyPassiveCarousel = initialisePassiveCarousel(app);\r\n const destroyPromoTileWithIcon = initialisePromoTileWithIcon(app);\r\n const destroyFeaturedPropertyCarousel = initialiseFeaturedPropertysCarousel(app);\r\n const destroyHorizontalTabBar = initialiseHorizontalTabBar(app);\r\n const destroyImageAreaFocus = initialiseImageAreaFocus(app);\r\n const destoryNavigationBar = initialiseNavigationBar(app);\r\n const destroyNumberPanelCarousel = initialiseNumberPanelCarousel(app);\r\n const destroyMarketplacerProductBlock = initialiseMarketplacerProductBlock(app);\r\n const destoryMediaGalleryFeature = initialiseMediaGalleryFeature(app);\r\n const destroyMenuOverlay = initialiseMenuOverlay(app);\r\n const destroyModalCarousel = initialiseModalCarousel(app);\r\n const destroyMultiImageInnerCarousel = initialiseMultiImageInnerCarousel(app);\r\n const destroyMultiImageCarousel = initialiseMultiImageCarousel(app)\r\n const destroyWayfindingBar = initialiseWayfindingBar(app)\r\n // const destroyOldCarousel = initialiseOldCarousel(app);\r\n const destroyMultipleTabTargetSelection = initialiseMultipleTabTargetSelector(app);\r\n const destroyMultipleTabTargetSelectionV2 = initialiseMultipleTabTargetSelectorv2(app);\r\n const destroyParallaxScrollBlock = initialiseParallaxScrollBlock(app);\r\n const destroyProductDetails = initialiseProductDetails(app);\r\n const destroyProductGallery = initialiseProductGallery(app);\r\n const destroyPromoTile = initialisePromoTile(app);\r\n const destroyRibbonBar = initialiseRibbonBar(app);\r\n const destroyGlobalNavigation = initialiseGlobalNavigation(app);\r\n const destroyEnquiryButton = initialiseEnquiryButton(app);\r\n const destroyShrinkingHeader = initialiseShrinkingHeader(app);\r\n const destroyStepByStepFeatureCarousel = initialiseStepByStepFeatureCarousel(app);\r\n const destroyOffersTileAndCarousel = initialiseOffersTileAndCarousel(app);\r\n const destroyStickySlider = initialiseStickySlider(app);\r\n const destroyVerticalCarousel = initialiseVerticalCarousel(app);\r\n const destroyVerticalTabScroll = initialiseVerticalTabScroll(app);\r\n const destroyVerticalTabVideo = initialiseVerticalTabVideo(app);\r\n const destroyTabbedImageWithText = initialiseTabbedImageWithText(app);\r\n const destroyTakeoverCard = initialiseTakeoverCard(app);\r\n const destroyTakeoverImageWithInlineTabs = initialiseTakeoverImageWithInlineTabs(app);\r\n const destroyTakeoverHighlights = initialiseTakeoverHighlights(app);\r\n const destroyVerticalTabBar = initialiseVerticalTabBar(app);\r\n const destroyEnquireContact = initialiseEnquiryContact(app);\r\n const destroyProgressTimeLine = initialiseProgressTimeLine(app);\r\n const destroyMpcTakeoverHero = initialiseMpcTakeoverHero(app);\r\n const destroyCampaignHeroBanner = initialiseCampaignHeroBanner(app);\r\n const destroyWelcomeModal = initialiseWelcomeModal(app);\r\n const destroyFeatureCardsComponents = initialiseFeatureCardsComponent(app);\r\n const destroySwiper = initialiseSwiper(app);\r\n\r\n app.logger.debug('[Stockland FE] Components mounted');\r\n\r\n return function destroyComponents() {\r\n // Component de-registration\r\n destoryAccordion();\r\n destoryAssetHeroBanner();\r\n destroyCampaignBlock();\r\n destroySlimCampaignBlock();\r\n destroyCarousel();\r\n destroyCollapsedFormCta();\r\n destroyCollapseTile();\r\n destroyContentContainer();\r\n destroyEnquiryButton();\r\n destroyFeaturedCarousel();\r\n destroyFeatureLinksAndImage();\r\n destroyFeatureLinkContainerV2();\r\n destroyFeatureStatQuoteCarousel();\r\n destroyFloatingIsland();\r\n destroyFormAndContent();\r\n destroyGlobalNavigation();\r\n destoryHeroBanner();\r\n destroyHeroCarousel();\r\n destroyHorizontalCarousel();\r\n destroyPassiveCarousel();\r\n destroyAnnouncementTileCarousel();\r\n destroyFeaturedPropertyCarousel();\r\n destroyHorizontalTabBar();\r\n destroyImageAreaFocus();\r\n destroyMarketplacerProductBlock();\r\n destoryMediaGalleryFeature();\r\n destroyMediaGallery();\r\n destroyMenuOverlay();\r\n destroyWayfindingBar();\r\n destroyModalCarousel();\r\n destroyEventDetails();\r\n destroyRecipePage();\r\n destroyMultiImageInnerCarousel()\r\n destroyMultiImageCarousel();\r\n destroyMultipleTabTargetSelection();\r\n destroyMultipleTabTargetSelectionV2();\r\n destoryNavigationBar();\r\n destroyNumberPanelCarousel();\r\n // destroyOldCarousel();\r\n destroyParallaxScrollBlock();\r\n destroyProductDetails();\r\n destroyProductGallery();\r\n destroyPromoTile();\r\n destroyPromoTileWithIcon();\r\n destroyRibbonBar();\r\n destroyShrinkingHeader();\r\n destroyStepByStepFeatureCarousel();\r\n destroyOffersTileAndCarousel();\r\n destroyStickySlider();\r\n destroyVerticalCarousel();\r\n destroyTabbedImageWithText();\r\n destroyTakeoverCard();\r\n destroyTakeoverImageWithInlineTabs();\r\n destroyVerticalTabBar();\r\n destroyVerticalTabScroll();\r\n destroyEnquireContact();\r\n destroyVerticalTabVideo();\r\n destroyTakeoverHighlights();\r\n destroyProgressTimeLine();\r\n destroyMpcTakeoverHero();\r\n destroyCampaignHeroBanner();\r\n destroyFeatureCardsComponents();\r\n destroyCampaignHeroBanner();\r\n destroyWelcomeModal();\r\n\r\n app.logger.debug('[Stockland FE] Components destroyed');\r\n };\r\n}\r\n","/* eslint-disable vue/one-component-per-file */\r\n/**\r\n * Application\r\n */\r\n\r\nimport { directives } from '~/framework/directives';\r\nimport { domLoaded } from '~/framework/helpers/dom-ready';\r\nimport { type App as VueApp, type ComponentPublicInstance, createApp } from '~/framework/vue';\r\n\r\nimport { initialiseComponents } from '~/components/components';\r\n\r\nif (process.env.NODE_ENV !== 'test') {\r\n // Static asset manifest output workaround: https://github.com/vitejs/vite/issues/2375#issuecomment-908579361\r\n // Until such time as that issue is resolved.\r\n const sprites = import.meta.glob('./assets/svg/*.svg');\r\n console.debug('[Stockland FE] Sprites:', sprites);\r\n}\r\n\r\nexport const IS_READY = 'is-ready';\r\n\r\n// Declarations\r\ndeclare global {\r\n type AppHookFunction = string | (() => unknown | Promise);\r\n\r\n type AppHook = AppHookFunction | AppHookFunction[];\r\n\r\n interface AppGlobals {\r\n [s: string]: unknown;\r\n polyfillsLoaded?: boolean;\r\n }\r\n\r\n interface CdnScript {\r\n global: string;\r\n src: string;\r\n }\r\n\r\n interface AppHooks {\r\n /**\r\n * Executes before auto-start invocation occurs.\r\n */\r\n beforeAutoStart?: AppHook[];\r\n\r\n /**\r\n * Executes before any initialisation occurs.\r\n */\r\n initialise?: AppHook[];\r\n\r\n /**\r\n * Executes before the App framework (Vue) is mounted.\r\n */\r\n beforeMount?: AppHook[];\r\n\r\n /**\r\n * Executes after the App framework (Vue) has mounted.\r\n */\r\n afterMount?: AppHook[];\r\n\r\n /**\r\n * Executes at the end of the initialisation process.\r\n */\r\n ready?: AppHook[];\r\n\r\n /**\r\n * Executes before the App framework (Vue) is unmounted.\r\n */\r\n beforeUnmount?: AppHook[];\r\n\r\n /**\r\n * Executes after the App framework (Vue) is unmounted.\r\n */\r\n afterUnmount?: AppHook[];\r\n }\r\n\r\n interface Window {\r\n /**\r\n * Provides access to global App class. It is not available until _after_ the application\r\n * has initialised (but before `ready` hook).\r\n */\r\n App: App;\r\n\r\n /**\r\n * Generic object facilitating namespaced globals.\r\n * Preference is to not require the use\r\n * of globals; this object is intended as a last resort.\r\n */\r\n AppGlobals: AppGlobals;\r\n\r\n /**\r\n * Array of paths to script fallbacks\r\n */\r\n CdnFallbacks: CdnScript[];\r\n\r\n /**\r\n * Application initialisation lifecycle hooks object.\r\n */\r\n AppHooks: AppHooks;\r\n }\r\n}\r\n\r\n// Config\r\nexport type AppLogger = Pick;\r\n\r\nexport interface AppConstructorOptions {\r\n /** Provide a custom logger. Defaults to `console`. */\r\n logger?: AppLogger;\r\n app?: VueApp;\r\n}\r\n\r\n/**\r\n * Application Wrapper\r\n */\r\nexport class App {\r\n /**\r\n * Runs provided AppHooks\r\n */\r\n public static async runHooks(hooks: AppHook[]): Promise {\r\n await Promise.all(\r\n hooks.map(async (hook) => {\r\n // Hooks in an array should run sequentially\r\n if (Array.isArray(hook)) {\r\n //hook.forEach(App.runHook);\r\n\r\n // eslint-disable-next-line unicorn/no-array-for-each,unicorn/no-array-callback-reference\r\n hook.forEach(App.runHook);\r\n return;\r\n }\r\n\r\n return App.runHook(hook);\r\n })\r\n );\r\n }\r\n\r\n private static async runHook(hook: AppHookFunction): Promise {\r\n if (typeof hook === 'string') {\r\n if (!hook.startsWith('https://') && !hook.startsWith('http://') && !hook.startsWith('/')) {\r\n throw new Error(`Hook unable to load file at path: ${hook}`);\r\n }\r\n\r\n // We don't know which external scripts are going to be run, so not possible to optimise at build time.\r\n return import(/* @vite-ignore */ hook);\r\n\r\n }\r\n\r\n if (typeof hook !== 'function') {\r\n // This is an unexpected case which shouldn't happen, so TS may miss it.\r\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\r\n throw new TypeError(`Hook is not a function:\\n${hook}`);\r\n }\r\n\r\n return hook();\r\n }\r\n\r\n /** Use `logger` instead of `console` to allow tests to ignore output. */\r\n public readonly logger: AppLogger;\r\n private isMounted = false;\r\n private readonly destroyers: Array<() => void> = [];\r\n private beforeMountPromiseResolver!: () => void;\r\n public afterMountPromiseResolver!: () => void;\r\n private readyPromiseResolver!: () => void;\r\n\r\n private _beforeMount!: Promise;\r\n public get beforeMount() {\r\n return this._beforeMount;\r\n }\r\n\r\n private _afterMount!: Promise;\r\n public get afterMount() {\r\n return this._afterMount;\r\n }\r\n\r\n private _ready!: Promise;\r\n public get ready() {\r\n return this._ready;\r\n }\r\n\r\n private _vueApp: VueApp;\r\n public get vueApp() {\r\n return this._vueApp;\r\n }\r\n\r\n private _vueInstance: ComponentPublicInstance | undefined = undefined;\r\n public get vueInstance() {\r\n return this._vueInstance;\r\n }\r\n\r\n private _status: 'stopped' | 'teardown' | 'starting' | 'running' | 'pending' = 'stopped';\r\n public get status() {\r\n return this._status;\r\n }\r\n\r\n private readonly _isOurVueInstance: boolean;\r\n\r\n constructor({ logger, app }: AppConstructorOptions = {}) {\r\n // eslint-disable-next-line vue/one-component-per-file\r\n this._isOurVueInstance = !app;\r\n this._vueApp = app ?? createApp({}); // Satisfy compiler\r\n this.resetPromises();\r\n\r\n // Logger - defaults to window.console\r\n this.logger = logger ?? console;\r\n\r\n window.App = this;\r\n }\r\n\r\n /**\r\n * Automatically starts the Application on load.\r\n */\r\n public async autoStart(): Promise {\r\n this._status = 'pending';\r\n\r\n if (window.AppHooks.beforeAutoStart) {\r\n await App.runHooks(window.AppHooks.beforeAutoStart);\r\n }\r\n\r\n await domLoaded;\r\n\r\n return this.start();\r\n }\r\n\r\n /**\r\n * Starts the Application\r\n */\r\n public async start(): Promise {\r\n // Ensure only a single instance is running\r\n if (window.App?.status === 'running' || window.App?.status === 'teardown') {\r\n return window.App;\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n this.init()\r\n .then(() => {\r\n resolve(this);\r\n dispatchEvent(new CustomEvent('app.start'));\r\n })\r\n .catch(reject);\r\n });\r\n }\r\n\r\n /**\r\n * Initiate the stop procedure.\r\n */\r\n public async stop(): Promise {\r\n if (this.status === 'stopped' || this.status === 'teardown') return;\r\n this.resetPromises();\r\n\r\n await this.teardown();\r\n document.dispatchEvent(new CustomEvent('app.stop'));\r\n }\r\n\r\n /**\r\n * Restart the application.\r\n */\r\n public async restart(): Promise {\r\n if (this.status === 'pending') return;\r\n this.logger.debug('[Stockland FE] App restarting');\r\n await this.stop();\r\n await this.start();\r\n }\r\n\r\n /**\r\n * Initialises the application, executing AppHooks\r\n */\r\n private async init(): Promise {\r\n if (this.status === 'running') return;\r\n this._status = 'starting';\r\n\r\n if (window.AppHooks.initialise) {\r\n await App.runHooks(window.AppHooks.initialise);\r\n if (this.status !== 'starting') return; // In case state changes during async\r\n }\r\n\r\n this.logger.debug('[Stockland FE] App starting');\r\n\r\n if (this._isOurVueInstance) this.initialiseVue();\r\n directives(this.vueApp);\r\n\r\n // Components\r\n const destroyComponents = await initialiseComponents(this);\r\n this.destroyers.push(destroyComponents);\r\n\r\n this.beforeMountPromiseResolver();\r\n\r\n if (window.AppHooks.beforeMount) {\r\n await App.runHooks(window.AppHooks.beforeMount);\r\n if (this.status !== 'starting') return; // In case state changes during async\r\n }\r\n\r\n document.dispatchEvent(new CustomEvent('app.beforeMount'));\r\n\r\n // Application\r\n if (this._isOurVueInstance) this.mount();\r\n this.afterMountPromiseResolver();\r\n\r\n if (window.AppHooks.afterMount) {\r\n await App.runHooks(window.AppHooks.afterMount);\r\n if (this.status !== 'starting') return; // In case state changes during async\r\n }\r\n\r\n document.dispatchEvent(new CustomEvent('app.afterMount'));\r\n\r\n this._status = 'running';\r\n\r\n // Add class after Vue has rendered (some tests watch for this)\r\n await this.vueInstance?.$nextTick();\r\n document.documentElement.classList.add(IS_READY);\r\n\r\n this.logger.log('[Stockland FE] App ready');\r\n\r\n this.readyPromiseResolver();\r\n\r\n if (window.AppHooks.ready) {\r\n await App.runHooks(window.AppHooks.ready);\r\n // @ts-expect-error Because TS for some reason hasn't realised this is async\r\n if (this.status !== 'running') return; // In case state changes during async\r\n }\r\n\r\n document.dispatchEvent(new CustomEvent('app.ready'));\r\n }\r\n\r\n /**\r\n * Tear down the application from the DOM.\r\n * @private\r\n */\r\n private async teardown(): Promise {\r\n this.logger.debug('[Stockland FE] App unmounting');\r\n this._status = 'teardown';\r\n\r\n while (this.destroyers.length > 0) {\r\n const destroyer = this.destroyers.pop();\r\n destroyer?.();\r\n }\r\n\r\n if (window.AppHooks.beforeUnmount) {\r\n await App.runHooks(window.AppHooks.beforeUnmount);\r\n if (this.status !== 'teardown') return; // In case state changes during async\r\n }\r\n\r\n document.dispatchEvent(new CustomEvent('app.beforeUnmount'));\r\n\r\n // Application\r\n this.unmount();\r\n\r\n if (window.AppHooks.afterUnmount) {\r\n await App.runHooks(window.AppHooks.afterUnmount);\r\n if (this.status !== 'teardown') return; // In case state changes during async\r\n }\r\n\r\n document.dispatchEvent(new CustomEvent('app.afterUnmount'));\r\n\r\n // Remove class (some tests watch for this)\r\n document.documentElement.classList.remove(IS_READY);\r\n\r\n this._status = 'stopped';\r\n this.logger.log('[Stockland FE] App stopped');\r\n }\r\n\r\n private initialiseVue() {\r\n // DEV mode global state for rendering comps in isolation\r\n // Will be removed from production built by webpack\r\n let initialState = {};\r\n if (process.env.NODE_ENV !== 'production') {\r\n initialState = {\r\n demoState: {},\r\n demoNum: 1,\r\n demoStr: '',\r\n };\r\n }\r\n\r\n // Global Vue App\r\n this._vueApp = createApp({\r\n data() {\r\n return initialState;\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * Mounts the App framework to the DOM\r\n */\r\n private mount(selector = '#app') {\r\n this._vueInstance = this.vueApp.mount(selector);\r\n this.isMounted = true;\r\n }\r\n\r\n /**\r\n * Unmount the App Framework from the DOM\r\n */\r\n private unmount() {\r\n if (!this.isMounted) return;\r\n this.vueApp.unmount();\r\n this._vueInstance = undefined;\r\n this.isMounted = false;\r\n }\r\n\r\n /**\r\n * Resets mounting promises.\r\n */\r\n public resetPromises() {\r\n this._beforeMount = new Promise((resolve) => {\r\n this.beforeMountPromiseResolver = resolve;\r\n });\r\n this._afterMount = new Promise((resolve) => {\r\n this.afterMountPromiseResolver = resolve;\r\n });\r\n this._ready = new Promise((resolve) => {\r\n this.readyPromiseResolver = resolve;\r\n });\r\n }\r\n}\r\n"],"file":"assets/app-B3WlgPfF.js"}