{"version":3,"sources":["webpack://dxa-ui/./src/patterns/02-components/header/header.ts","webpack://dxa-ui/./src/patterns/02-components/cookie-banner/cookie-banner.ts","webpack://dxa-ui/./src/framework/scripts/helpers/anchorHelpers.ts","webpack://dxa-ui/./src/patterns/02-components/tabs/constants.ts","webpack://dxa-ui/./src/patterns/02-components/tabs/tabs.ts","webpack://dxa-ui/./src/patterns/02-components/icon/vue/icon.ts","webpack://dxa-ui/./src/patterns/02-components/fields/input/password.ts","webpack://dxa-ui/./src/patterns/02-components/fields/input/input.ts","webpack://dxa-ui/./src/patterns/02-components/carousel/lazy.ts","webpack://dxa-ui/./src/patterns/02-components/investment-performance/lazy.ts","webpack://dxa-ui/./src/patterns/02-components/search/lazy.ts","webpack://dxa-ui/./src/patterns/02-components/search/listing/lazy.ts","webpack://dxa-ui/./src/patterns/02-components/search/filters/lazy.ts","webpack://dxa-ui/./src/patterns/02-components/search/query/lazy.ts","webpack://dxa-ui/./src/patterns/02-components/search/sorting/lazy.ts","webpack://dxa-ui/./src/patterns/02-components/search/article-listing/lazy.ts","webpack://dxa-ui/./src/patterns/02-components/components.ts","webpack://dxa-ui/./src/patterns/02-components/dropdown/dropdown.ts","webpack://dxa-ui/./src/patterns/02-components/icon/vue/index.ts","webpack://dxa-ui/./src/patterns/02-components/autocomplete/lazy.ts","webpack://dxa-ui/./src/patterns/02-components/chart/lazy.ts","webpack://dxa-ui/./src/patterns/02-components/pagination/vue/lazy.ts","webpack://dxa-ui/./src/patterns/02-components/fields/password-input/vue/lazy.ts","webpack://dxa-ui/./src/patterns/02-components/recaptcha/lazy.ts","webpack://dxa-ui/./src/patterns/02-components/rates-of-return/lazy.ts","webpack://dxa-ui/./src/patterns/02-components/unit-price/lazy.ts","webpack://dxa-ui/./src/patterns/02-components/iframe/index.ts","webpack://dxa-ui/./src/framework/scripts/directives/focus.ts","webpack://dxa-ui/./src/framework/scripts/directives/index.ts","webpack://dxa-ui/./src/framework/scripts/directives/scroll-to.ts","webpack://dxa-ui/./src/framework/scripts/directives/progressive.ts","webpack://dxa-ui/./src/framework/scripts/directives/tab-select.ts","webpack://dxa-ui/./src/framework/scripts/directives/ipxl.ts","webpack://dxa-ui/./src/app.ts","webpack://dxa-ui/./src/framework/scripts/helpers/elementReady.ts","webpack://dxa-ui/./src/framework/scripts/utils/mount.ts","webpack://dxa-ui/./src/patterns/02-components/carousel/constants.ts","webpack://dxa-ui/./src/patterns/02-components/fields/password-input/vue/password-input.ts","webpack://dxa-ui/./src/patterns/02-components/fields/password-input/vue/password-input.tpl.html","webpack://dxa-ui/./src/patterns/02-components/icon/vue/_icon.tpl.njk"],"names":["ready","liItems","mobileNav","document","getElementById","alertBanner","querySelector","alertFromSession","localStorage","getItem","undefined","dataset","content","classList","remove","alertBannerExit","addEventListener","add","value","setItem","documentElement","querySelectorAll","forEach","li","buttons","menus","button","setAttribute","menu","login","contains","blur","clearAllButtonsAndMenus","firstElementChild","nextElementSibling","event","getAttribute","toggle","preventDefault","CheckHeader","headerElement","viewportWidth","window","innerWidth","scrollPos","scrollY","headerBackgroundOnScroll","cookieBanner","cookieBannerFromSession","location","hash","length","anchor","substring","anchorElement","interactiveContent","screen","width","scrollIntoView","behavior","block","contentElement","parentElement","closest","buttonElement","id","accordionSetActive","contentParent","oldActiveContentElement","oldActiveButtonId","replace","oldActiveButtonElement","buttonId","mobileId","mobileElement","HTMLSelectElement","tabSetActive","ATTRIBUTE","SELECTOR","Promise","resolve","setTimeout","elements","markElementsReady","Icon","defineComponent","name","template","props","type","String","required","circle","Boolean","default","css","setup","classes","computed","url","path","initialisePasswordReveal","input","parent","noop","attributes","fromPairs","Array","from","map","attr","el","destroy","mountManually","PasswordInput","insertBefore","appendChild","lazyCarousel","CLASS_NAME","then","carousel","AppPromise","item","catch","console","error","app","wrapper","defineAsyncComponent","SearchListing","component","lazySearchListing","SearchFilters","lazySearchFilters","SearchQuery","lazySearchQuery","SearchSorting","lazySearchSorting","SearchArticleListing","lazySearchArticleListing","components","all","header","tabs","inputFields","anchorChecker","icon","Autocomplete","lazyAutocomplete","Chart","lazyChart","InvestmentPerformance","lazyInvestmentPerformance","lazySearch","Pagination","lazyPagination","LazyPasswordInput","Recaptcha","lazyRecaptcha","RatesOfReturn","lazyRatesOfReturn","UnitPrice","lazyUnitPrice","calculatorIframe","origin","data","style","minHeight","height","info","directives","directive","mounted","$el","focus","binding","$target","top","Math","max","offsetTop","scrollTo","e","loadImage","imageElement","src","srcset","handleIntersect","entries","observer","entry","isIntersecting","unobserve","IntersectionObserver","root","threshold","observe","progressive","targetDataLink","selectedOptions","href","click","tabSelect","checkOrientation","navigator","userAgent","match","availWidth","availHeight","ipxl","App","constructor","initialState","this","vue","createApp","appPromiseResolver","hooks","hook","isArray","runHook","startsWith","Error","loadScript","autoStart","start","warn","init","isInitialised","AppHooks","initialise","runHooks","beforeMount","mount","dispatchEvent","CustomEvent","afterMount","selector","markElementReady","element","vNode","createVNode","appContext","_context","render","createElement","OPTIONS","gap","direction","ltr","rtl","slider","swipeable","dragging","cloneSlide","activeNav","activeSlide","disabledArrow","Object","revealButtonText","context","state","handleActivation","handleFocusOut","reactive","toggled","inputType","inputAttributes","attrs","buttonClasses","relatedTarget","usePasswordInput","toRefs","module","exports"],"mappings":"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","file":"chunk-app-dd48fa22be.mjs","sourcesContent":["/**\r\n * Header Component\r\n * @module patterns/components/header\r\n */\r\n\r\nexport async function header(ready: Promise): Promise {\r\n\tawait ready;\r\n\r\n\tconst mobileNav = document.getElementById('navigation-mobile');\r\n\r\n\tconst alertBanner = document.querySelector('#alert-banner') as HTMLElement;\r\n\r\n\tif (alertBanner !== null) {\r\n\t\tconst alertFromSession = localStorage.getItem('supersa_alert');\r\n\r\n\t\tif (\r\n\t\t\t!alertFromSession ||\r\n\t\t\t(alertBanner.dataset.content != undefined &&\r\n\t\t\t\talertFromSession !== alertBanner.dataset.content)\r\n\t\t) {\r\n\t\t\talertBanner?.classList.remove('hidden');\r\n\r\n\t\t\tconst alertBannerExit = document.querySelector('#alert-banner-exit');\r\n\t\t\talertBannerExit?.addEventListener('click', () => {\r\n\t\t\t\talertBanner?.classList.add('hidden');\r\n\t\t\t\tconst value: string = alertBanner?.dataset?.content || '';\r\n\t\t\t\tif (value) {\r\n\t\t\t\t\tlocalStorage.setItem('supersa_alert', value);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tmobileNav?.addEventListener('show.bs.collapse', () => {\r\n\t\tdocument.documentElement.classList.add('overflow-hidden');\r\n\t});\r\n\r\n\tmobileNav?.addEventListener('hide.bs.collapse', () => {\r\n\t\tdocument.documentElement.classList.remove('overflow-hidden');\r\n\t});\r\n\r\n\tfunction hoverNav() {\r\n\t\t// This class is only set on mega menu list items\r\n\t\tconst liItems = document.querySelectorAll('.dropdown-li');\r\n\r\n\t\tfunction clearAllButtonsAndMenus() {\r\n\t\t\tvar buttons = document.querySelectorAll('button.dropdown-button');\r\n\t\t\tvar menus = document.querySelectorAll('.dropdown-menu');\r\n\t\t\tbuttons.forEach(function (button) {\r\n\t\t\t\tbutton.classList.remove('active');\r\n\t\t\t\tbutton.setAttribute('aria-expanded', 'false');\r\n\t\t\t});\r\n\t\t\tmenus.forEach(function (menu) {\r\n\t\t\t\tmenu.classList.remove('show');\r\n\t\t\t});\r\n\r\n\t\t\t// This is to fix a bug where the login dropdown button stays active on hover\r\n\t\t\tconst login = document.getElementById('desktop-login');\r\n\t\t\tif (login && login.classList.contains('show')) {\r\n\t\t\t\tlogin.classList.remove('show');\r\n\t\t\t\tlogin.setAttribute('aria-expanded', 'false');\r\n\t\t\t\tlogin.blur();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tliItems?.forEach(function (li) {\r\n\t\t\t// Mouse hover (open)\r\n\t\t\tli.addEventListener('mouseenter', () => {\r\n\t\t\t\tclearAllButtonsAndMenus();\r\n\t\t\t\tvar button = li.firstElementChild;\r\n\t\t\t\tif (button) {\r\n\t\t\t\t\tbutton.classList.add('active');\r\n\t\t\t\t\tbutton.setAttribute('aria-expanded', 'true');\r\n\t\t\t\t\tbutton.nextElementSibling?.classList.add('show');\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t// Mouse hover leave (close)\r\n\t\t\tli.addEventListener('mouseleave', () => {\r\n\t\t\t\tvar button = li.firstElementChild;\r\n\r\n\t\t\t\tif (button) {\r\n\t\t\t\t\tbutton.classList.remove('active');\r\n\t\t\t\t\tbutton.setAttribute('aria-expanded', 'false');\r\n\t\t\t\t\tbutton.nextElementSibling?.classList.remove('show');\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tvar button = li.firstElementChild;\r\n\t\t\tif (button) {\r\n\t\t\t\t// Mouse click\r\n\t\t\t\tbutton.addEventListener('click', (event) => {\r\n\t\t\t\t\tif (button) {\r\n\t\t\t\t\t\tvar ariaExpanded = button.getAttribute('aria-expanded');\r\n\t\t\t\t\t\tif (ariaExpanded === 'true') {\r\n\t\t\t\t\t\t\tbutton.setAttribute('aria-expanded', 'false');\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tbutton.setAttribute('aria-expanded', 'true');\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbutton.classList.toggle('active');\r\n\t\t\t\t\t\tbutton.nextElementSibling?.classList.toggle('show');\r\n\t\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// Touch tap\r\n\t\t\t\tbutton.addEventListener('touchstart', (event) => {\r\n\t\t\t\t\tif (button) {\r\n\t\t\t\t\t\tvar ariaExpanded = button.getAttribute('aria-expanded');\r\n\t\t\t\t\t\tif (ariaExpanded === 'true') {\r\n\t\t\t\t\t\t\tbutton.setAttribute('aria-expanded', 'false');\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tbutton.setAttribute('aria-expanded', 'true');\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbutton.classList.toggle('active');\r\n\t\t\t\t\t\tbutton.nextElementSibling?.classList.toggle('show');\r\n\t\t\t\t\t\tevent.preventDefault();\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\thoverNav();\r\n\r\n\tfunction headerBackgroundOnScroll() {\r\n\t\t// On page load, and on scroll, check if the screen is small enough and if the position of the page is below the top\r\n\t\t// And if they match, display a solid header stickied to the top of the screen.\r\n\r\n\t\tCheckHeader();\r\n\t\twindow.addEventListener('scroll', () => {\r\n\t\t\tCheckHeader();\r\n\t\t});\r\n\r\n\t\tfunction CheckHeader() {\r\n\t\t\tvar headerElement = document.getElementById('header');\r\n\t\t\tvar viewportWidth = window.innerWidth;\r\n\t\t\tvar scrollPos = window.scrollY;\r\n\t\t\tif (viewportWidth < 1024 && scrollPos > 50) {\r\n\t\t\t\theaderElement?.classList.add('opaque-backround-showing');\r\n\t\t\t}\r\n\t\t\tif (viewportWidth < 1024 && scrollPos < 50) {\r\n\t\t\t\theaderElement?.classList.remove('opaque-backround-showing');\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\theaderBackgroundOnScroll();\r\n}\r\n","/**\r\n * Cookie Banner Component\r\n * @module patterns/components/cookieBanner\r\n */\r\n\r\nexport async function cookieBanner(ready: Promise): Promise {\r\n\tawait ready;\r\n\r\n\tconst cookieBanner = document.querySelector('#cookie-banner') as HTMLElement;\r\n\tif (cookieBanner !== null) {\r\n\t\tconst cookieBannerFromSession = localStorage.getItem(\r\n\t\t\t'supersa_cookie_banner'\r\n\t\t);\r\n\t\tif (\r\n\t\t\t!cookieBannerFromSession ||\r\n\t\t\t(cookieBanner.dataset.content != undefined &&\r\n\t\t\t\tcookieBannerFromSession !== cookieBanner.dataset.content)\r\n\t\t) {\r\n\t\t\tcookieBanner?.classList.remove('hidden');\r\n\r\n\t\t\tconst alertBannerExit = document.querySelector('#cookie-banner-exit');\r\n\t\t\talertBannerExit?.addEventListener('click', () => {\r\n\t\t\t\tcookieBanner?.classList.add('hidden');\r\n\t\t\t\tlocalStorage.setItem('supersa_cookie_banner', 'Accepted');\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n}\r\n","/* eslint-disable prettier/prettier */\r\n/**\r\n * Used for ensuring anchors are correctly working\r\n * @module framework/helpers\r\n */\r\n\r\nexport async function anchorChecker(ready: Promise): Promise {\r\n\tawait ready;\r\n\r\n\tif (window.location.hash.length) {\r\n\t\tconst anchor = window.location.hash.substring(1);\r\n\t\tconst anchorElement = document.getElementById(anchor);\r\n\r\n\t\tif (anchorElement) {\r\n\t\t\tinteractiveContent(anchorElement);\r\n\r\n\t\t\tconst screenWidth =\r\n\t\t\t\twindow.innerWidth > 0 ? window.innerWidth : screen.width;\r\n\r\n\t\t\tif (screenWidth < 1024) {\r\n\t\t\t\tanchorElement.scrollIntoView({ behavior: 'smooth', block: 'center' });\r\n\t\t\t} else {\r\n\t\t\t\tanchorElement.scrollIntoView({ behavior: 'smooth', block: 'start' });\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nfunction interactiveContent(contentElement: Element) {\r\n\tconst parentElement = contentElement.parentElement?.closest(\r\n\t\t'.interactive-content'\r\n\t);\r\n\r\n\tif (parentElement) {\r\n\t\tif (parentElement.classList.contains('accordion-content')) {\r\n\t\t\taccordionSetActive(parentElement);\r\n\t\t} else if (parentElement.classList.contains('tabs-panel')) {\r\n\t\t\ttabSetActive(parentElement);\r\n\t\t}\r\n\r\n\t\tinteractiveContent(parentElement);\r\n\t}\r\n}\r\n\r\nfunction accordionSetActive(contentElement: Element) {\r\n\tcontentElement.classList.add('show');\r\n\r\n\tconst buttonElement = document.getElementById(contentElement.id + '-button');\r\n\tif (buttonElement) {\r\n\t\tbuttonElement.classList.remove('collapsed');\r\n\t\tbuttonElement.setAttribute('aria-expanded', 'true');\r\n\t}\r\n}\r\n\r\nfunction tabSetActive(contentElement: Element) {\r\n\tconst contentParent = contentElement.closest('.tab-content-parent');\r\n\tif (!contentParent) return;\r\n\r\n\tconst oldActiveContentElement = contentParent.firstElementChild as Element;\r\n\tif (!oldActiveContentElement) return;\r\n\r\n\toldActiveContentElement.classList.remove('active');\r\n\tcontentElement.classList.add('active');\r\n\r\n\tconst oldActiveButtonId = oldActiveContentElement.id.replace(\r\n\t\t'panel-',\r\n\t\t'tab-'\r\n\t);\r\n\tconst oldActiveButtonElement = document.getElementById(oldActiveButtonId);\r\n\tif (oldActiveButtonElement) {\r\n\t\toldActiveButtonElement.classList.remove('active');\r\n\t\toldActiveButtonElement.firstElementChild?.setAttribute(\r\n\t\t\t'aria-selected',\r\n\t\t\t'false'\r\n\t\t);\r\n\t}\r\n\tconst buttonId = contentElement.id.replace('panel-', 'tab-');\r\n\tconst buttonElement = document.getElementById(buttonId);\r\n\tif (buttonElement) {\r\n\t\tbuttonElement.classList.add('active');\r\n\t\tbuttonElement.setAttribute('aria-selected', 'true');\r\n\t}\r\n\r\n\tconst mobileId = contentElement.id.replace('panel-', 'mobile-');\r\n\tconst mobileElement = document.getElementById(mobileId);\r\n\tif (\r\n\t\tmobileElement &&\r\n\t\tmobileElement.parentElement instanceof HTMLSelectElement\r\n\t) {\r\n\t\tmobileElement.parentElement.value =\r\n\t\t\tmobileElement.getAttribute('value') || '';\r\n\t}\r\n}\r\n","/* tslint:disable:no-redundant-jsdoc */\r\n/**\r\n * Tabs Component Constants\r\n * @module patterns/components/tabs\r\n */\r\n\r\n/**\r\n * Class to style and load the component\r\n */\r\nexport const CLASS_NAME = 'tabs';\r\n\r\n/**\r\n * Attribute identifier\r\n */\r\nexport const ATTRIBUTE = `data-${CLASS_NAME}`;\r\n\r\n/**\r\n * Selector to detect the component\r\n */\r\nexport const SELECTOR = `[${ATTRIBUTE}]`;\r\n","/**\r\n * Tabs Component\r\n * @module patterns/components/tabs\r\n */\r\n\r\n//#region Dependencies\r\n// Third-party\r\nimport 'bootstrap/js/src/tab';\r\n\r\n// Framework\r\nimport { markElementsReady } from '@framework/helpers/elementReady';\r\n\r\n// Local\r\nimport { SELECTOR } from '@components/tabs/constants';\r\n//#endregion\r\n\r\n/**\r\n * Initialises the Tabs component.\r\n */\r\nexport async function tabs(): Promise<{\r\n\telements: NodeListOf;\r\n}> {\r\n\treturn new Promise<{\r\n\t\telements: NodeListOf;\r\n\t}>((resolve) => {\r\n\t\tsetTimeout(() => {\r\n\t\t\tconst elements = document.querySelectorAll(SELECTOR);\r\n\t\t\tmarkElementsReady(elements);\r\n\t\t\tresolve({ elements });\r\n\t\t});\r\n\t});\r\n}\r\n","/**\r\n * Icon Atom Vue\r\n */\r\n\r\n//#region Dependencies\r\nimport { defineComponent, computed } from '@framework/vue';\r\n\r\nimport { default as template } from './_icon.tpl.njk';\r\n//#endregion\r\n\r\n/**\r\n * Icon Atom Vue Component\r\n */\r\nexport const Icon = defineComponent({\r\n\t//#region Name\r\n\tname: 'icon',\r\n\t//#endregion\r\n\r\n\t//#region Template\r\n\ttemplate,\r\n\t//#endregion\r\n\r\n\t//#region Props\r\n\tprops: {\r\n\t\tname: { type: String, required: true },\r\n\t\tcircle: { type: Boolean, default: false },\r\n\t\tcss: { type: String },\r\n\t},\r\n\t//#endregion\r\n\r\n\t//#region Setup\r\n\tsetup(props) {\r\n\t\t//#region Computed\r\n\t\tconst classes = computed((): { [key: string]: boolean } => {\r\n\t\t\treturn {\r\n\t\t\t\t[`icon--${props.name}`]: true,\r\n\t\t\t\t'icon--circle': props.circle,\r\n\t\t\t};\r\n\t\t});\r\n\t\t//#endregion\r\n\r\n\t\t//#region Methods\r\n\t\tfunction url(path: string): string {\r\n\t\t\treturn `${path}${props.name}`;\r\n\t\t}\r\n\t\t//#endregion\r\n\r\n\t\t//#region Export\r\n\t\treturn {\r\n\t\t\tclasses,\r\n\t\t\turl,\r\n\t\t};\r\n\t\t//#endregion\r\n\t},\r\n\t//#endregion\r\n});\r\n","/**\r\n * Form Password Functions\r\n * @module patterns/components/form\r\n */\r\n\r\n//#region Dependencies\r\n// Third Party\r\nimport { fromPairs, noop } from 'lodash-es';\r\n\r\n// Local\r\nimport { mountManually } from '@framework/vue';\r\nimport { PasswordInput } from '@components/fields/password-input/vue/password-input';\r\n//#endregion\r\n\r\n// Constants\r\nconst TYPE_PASSWORD = 'password';\r\n\r\n/**\r\n * Adds a password reveal button to the provided password input.\r\n * @param input - Password input to add reveal button\r\n * @returns A function to undo the applied changes\r\n */\r\nexport function initialisePasswordReveal(input: HTMLInputElement): () => void {\r\n\tconst parent = input.parentElement;\r\n\tif (input.type !== TYPE_PASSWORD || !parent) return noop;\r\n\r\n\tconst attributes = fromPairs(\r\n\t\tArray.from(input.attributes).map((attr) => [attr.name, attr.value])\r\n\t);\r\n\r\n\tconst { el, destroy } = mountManually(PasswordInput, { props: attributes });\r\n\tif (!el) return noop;\r\n\r\n\tparent.insertBefore(el, input);\r\n\tinput.remove();\r\n\r\n\treturn () => {\r\n\t\tparent.appendChild(input);\r\n\t\tdestroy();\r\n\t};\r\n}\r\n","/**\r\n * Input Field Molecule\r\n */\r\n\r\n//#region Dependencies\r\n// Local\r\nimport { initialisePasswordReveal } from './password';\r\n//#endregion\r\n\r\n/**\r\n * Initialise Input Scripts\r\n */\r\nexport async function inputFields(ready: Promise): Promise {\r\n\tawait ready;\r\n\r\n\t// Initialise Password Reveal\r\n\tconst passwordInputs = Array.from(\r\n\t\tdocument.querySelectorAll('.field-input input[type=\"password\"]')\r\n\t);\r\n\tpasswordInputs.forEach(initialisePasswordReveal);\r\n}\r\n","/**\r\n * Carousel Lazy Load\r\n * @module patterns/components/carousel\r\n */\r\n\r\n// Local Dependencies\r\nimport { CLASS_NAME } from './constants';\r\n\r\nexport async function lazyCarousel(ready: Promise): Promise {\r\n\t// Lazy Load\r\n\tconst elements: NodeListOf = document.querySelectorAll(\r\n\t\t`.${CLASS_NAME}`\r\n\t);\r\n\r\n\tif (elements.length) {\r\n\t\tawait ready;\r\n\t\tawait import(/* webpackChunkName: \"carousel\" */ './carousel')\r\n\t\t\t.then(async ({ carousel }) =>\r\n\t\t\t\twindow.AppPromise.then(() => {\r\n\t\t\t\t\t// Notify the DOM that we've loaded\r\n\t\t\t\t\tcarousel().elements.forEach((item) => {\r\n\t\t\t\t\t\titem.setAttribute('data-lazy', 'loaded');\r\n\t\t\t\t\t});\r\n\t\t\t\t})\r\n\t\t\t)\r\n\t\t\t.catch(console.error);\r\n\t}\r\n}\r\n","/**\r\n * Investment Performance Lazy\r\n */\r\n\r\nimport { defineAsyncComponent, App } from 'vue';\r\n\r\n// Lazy Load\r\nexport default (app: App) => {\r\n\tconst wrapper = defineAsyncComponent(() =>\r\n\t\timport(\r\n\t\t\t/* webpackChunkName: \"investment-performance\" */ './investment-performance'\r\n\t\t).then(({ InvestmentPerformance }) => InvestmentPerformance)\r\n\t);\r\n\r\n\tapp.component('investment-performance', wrapper);\r\n};\r\n","/**\r\n * Search lazy load\r\n */\r\nimport { App } from '@framework/vue';\r\n\r\nimport lazySearchListing from './listing/lazy';\r\nimport lazySearchArticleListing from './article-listing/lazy';\r\nimport lazySearchFilters from './filters/lazy';\r\nimport lazySearchQuery from './query/lazy';\r\nimport lazySearchSorting from './sorting/lazy';\r\n\r\nexport default (app: App) => {\r\n\tlazySearchListing(app);\r\n\tlazySearchFilters(app);\r\n\tlazySearchQuery(app);\r\n\tlazySearchSorting(app);\r\n\tlazySearchArticleListing(app);\r\n};\r\n","/**\r\n * Search Listing Lazy\r\n */\r\n\r\nimport { defineAsyncComponent, App } from '@framework/vue';\r\n\r\n// Lazy Load\r\nexport default (app: App) => {\r\n\tconst wrapper = defineAsyncComponent(() =>\r\n\t\timport(/* webpackChunkName: \"search-listing\" */ './listing').then(\r\n\t\t\t({ SearchListing }) => SearchListing\r\n\t\t)\r\n\t);\r\n\r\n\tapp.component('search-listing', wrapper);\r\n};\r\n","/**\r\n * Search Filters Lazy\r\n */\r\n\r\nimport { defineAsyncComponent, App } from '@framework/vue';\r\n\r\n// Lazy Load\r\nexport default (app: App) => {\r\n\tconst wrapper = defineAsyncComponent(() =>\r\n\t\timport(/* webpackChunkName: \"search-filters\" */ './filters').then(\r\n\t\t\t({ SearchFilters }) => SearchFilters\r\n\t\t)\r\n\t);\r\n\r\n\tapp.component('search-filters', wrapper);\r\n};\r\n","/**\r\n * Search Listing Lazy\r\n */\r\n\r\nimport { defineAsyncComponent, App } from '@framework/vue';\r\n\r\n// Lazy Load\r\nexport default (app: App) => {\r\n\tconst wrapper = defineAsyncComponent(() =>\r\n\t\timport(/* webpackChunkName: \"search-query\" */ './query').then(\r\n\t\t\t({ SearchQuery }) => SearchQuery\r\n\t\t)\r\n\t);\r\n\r\n\tapp.component('search-query', wrapper);\r\n};\r\n","/**\r\n * Search Sorting Lazy\r\n */\r\n\r\nimport { defineAsyncComponent, App } from '@framework/vue';\r\n\r\n// Lazy Load\r\nexport default (app: App) => {\r\n\tconst wrapper = defineAsyncComponent(() =>\r\n\t\timport(/* webpackChunkName: \"search-sorting\" */ './sorting').then(\r\n\t\t\t({ SearchSorting }) => SearchSorting\r\n\t\t)\r\n\t);\r\n\r\n\tapp.component('search-sorting', wrapper);\r\n};\r\n","/**\r\n * Search Listing Lazy\r\n */\r\n\r\nimport { defineAsyncComponent, App } from '@framework/vue';\r\n\r\n// Lazy Load\r\nexport default (app: App) => {\r\n\tconst wrapper = defineAsyncComponent(() =>\r\n\t\timport(\r\n\t\t\t/* webpackChunkName: \"search-article-listing\" */ './article-listing'\r\n\t\t).then(({ SearchArticleListing }) => SearchArticleListing)\r\n\t);\r\n\r\n\tapp.component('search-article-listing', wrapper);\r\n};\r\n","/**\r\n * Components Index\r\n * @hidden\r\n */\r\nimport { App } from 'vue';\r\n\r\n//#region Dependencies\r\n// Components\r\nimport '@components/accordion/accordion';\r\nimport '@components/modal/modal';\r\nimport { dropdown } from '@components/dropdown/dropdown';\r\n// import { form } from '@components/form/form';\r\nimport { header } from '@components/header/header';\r\nimport { cookieBanner } from '@components/cookie-banner/cookie-banner';\r\nimport { anchorChecker } from '@framework/helpers/anchorHelpers';\r\n// import { socialSharing } from '@components/social-sharing/socialSharing';\r\nimport { tabs } from '@components/tabs/tabs';\r\nimport icon from '@components/icon/vue';\r\nimport { inputFields } from '@components/fields/input/input';\r\n\r\n// Lazy Load\r\n// These components will be loaded as-required.\r\n// Separating these files reduces the primary bundle size.\r\nimport lazyAutocomplete from '@components/autocomplete/lazy';\r\nimport lazyChart from '@components/chart/lazy';\r\nimport { lazyCarousel } from '@components/carousel/lazy';\r\nimport lazyInvestmentPerformance from '@components/investment-performance/lazy';\r\nimport lazyPagination from '@components/pagination/vue/lazy';\r\nimport LazyPasswordInput from '@components/fields/password-input/vue/lazy';\r\nimport lazyRecaptcha from '@components/recaptcha/lazy';\r\nimport lazySearch from '@components/search/lazy';\r\nimport lazyRatesOfReturn from '@components/rates-of-return/lazy';\r\nimport lazyUnitPrice from '@components/unit-price/lazy';\r\nimport setCalculatorIframeHeight from '@components/iframe';\r\n\r\n//#endregion\r\n\r\n/**\r\n * Initialise Components\r\n * @param ready - Expects a promise which resolves when the App is ready\r\n */\r\nexport function components(ready: Promise, app: App): void {\r\n\tPromise.all([lazyCarousel(ready)]).catch(console.error);\r\n\r\n\t// Initialise module which are almost _always_ required directly\r\n\t// These will be included in the primary bundle.\r\n\t// accordion();\r\n\t// drilldownMenu();\r\n\tdropdown();\r\n\t// smoothScroll();\r\n\t// socialSharing();\r\n\theader(ready).catch(console.error);\r\n\tcookieBanner(ready).catch(console.error);\r\n\ttabs().catch(console.error);\r\n\tinputFields(ready).catch(console.error);\r\n\tanchorChecker(ready).catch(console.error);\r\n\t// form(ready).catch(console.error);\r\n\ticon(app);\r\n\r\n\t// Register lazy comps\r\n\tlazyAutocomplete(app);\r\n\tlazyChart(app);\r\n\tlazyInvestmentPerformance(app);\r\n\tlazySearch(app);\r\n\tlazyPagination(app);\r\n\tLazyPasswordInput(app);\r\n\tlazyRecaptcha(app);\r\n\tlazyRatesOfReturn(app);\r\n\tlazyUnitPrice(app);\r\n\tsetCalculatorIframeHeight();\r\n\tconsole.info('Components mounted');\r\n}\r\n","/**\r\n * Dropdown Menu Component\r\n * @module patterns/components/dropdown\r\n */\r\n\r\n//#region Dependencies\r\nimport 'bootstrap/js/src/dropdown';\r\nimport { markElementsReady } from '@framework/helpers/elementReady';\r\n//#endregion\r\n\r\nexport function dropdown(): void {\r\n\tsetTimeout(() =>\r\n\t\tmarkElementsReady(document.querySelectorAll('[data-dropdown]'))\r\n\t);\r\n}\r\n","/**\r\n * Icon Atom Vue Index\r\n */\r\n\r\n//#region Dependencies\r\n// Framework\r\nimport { App } from '@framework/vue';\r\n\r\n// Components\r\nimport { Icon } from './icon';\r\n//#endregion\r\n\r\nexport default (app: App) => {\r\n\tapp.component('icon', Icon);\r\n};\r\n","/**\r\n * Autocomplete Lazy\r\n */\r\n\r\nimport { defineAsyncComponent, App } from 'vue';\r\n\r\n// Lazy Load\r\nexport default (app: App) => {\r\n\tconst wrapper = defineAsyncComponent(() =>\r\n\t\timport(/* webpackChunkName: \"autocomplete\" */ './autocomplete').then(\r\n\t\t\t({ Autocomplete }) => Autocomplete\r\n\t\t)\r\n\t);\r\n\r\n\tapp.component('autocomplete', wrapper);\r\n};\r\n","/**\r\n * Chart Lazy\r\n */\r\n\r\nimport { defineAsyncComponent, App } from 'vue';\r\n\r\n// Lazy Load\r\nexport default (app: App) => {\r\n\tconst wrapper = defineAsyncComponent(() =>\r\n\t\timport(/* webpackChunkName: \"chart\" */ './chart').then(({ Chart }) => Chart)\r\n\t);\r\n\r\n\tapp.component('chart', wrapper);\r\n};\r\n","/**\r\n * @file Pagination Lazy\r\n */\r\n\r\nimport { defineAsyncComponent, App } from 'vue';\r\n\r\n// Lazy Load\r\nexport default (app: App) => {\r\n\tconst wrapper = defineAsyncComponent(() =>\r\n\t\timport(/* webpackChunkName: \"pagination\" */ './pagination').then(\r\n\t\t\t({ Pagination }) => Pagination\r\n\t\t)\r\n\t);\r\n\tapp.component('pagination', wrapper);\r\n};\r\n","/**\r\n * Password Input Lazy\r\n * @module patterns/atoms/password-input\r\n */\r\nimport { defineAsyncComponent, App } from 'vue';\r\n\r\n// Lazy Load\r\nexport default (app: App) => {\r\n\tconst wrapper = defineAsyncComponent(() =>\r\n\t\timport(/* webpackChunkName: \"password-input\" */ './password-input').then(\r\n\t\t\t({ PasswordInput }) => PasswordInput\r\n\t\t)\r\n\t);\r\n\r\n\tapp.component('password-input', wrapper);\r\n};\r\n","/**\r\n * Recaptcha Lazy\r\n */\r\n\r\nimport { defineAsyncComponent, App } from '@framework/vue';\r\n\r\n// Lazy Load\r\nexport default (app: App) => {\r\n\tconst wrapper = defineAsyncComponent(() =>\r\n\t\timport(/* webpackChunkName: \"recaptcha\" */ './recaptcha').then(\r\n\t\t\t({ Recaptcha }) => Recaptcha\r\n\t\t)\r\n\t);\r\n\r\n\tapp.component('recaptcha', wrapper);\r\n};\r\n","/**\r\n * Rates of Return Lazy\r\n */\r\n\r\nimport { defineAsyncComponent, App } from 'vue';\r\n\r\n// Lazy Load\r\nexport default (app: App) => {\r\n\tconst wrapper = defineAsyncComponent(() =>\r\n\t\timport(/* webpackChunkName: \"rates-of-return\" */ './rates-of-return').then(\r\n\t\t\t({ RatesOfReturn }) => RatesOfReturn\r\n\t\t)\r\n\t);\r\n\r\n\tapp.component('rates-of-return', wrapper);\r\n};\r\n","/**\r\n * Unit Price Lazy\r\n */\r\n\r\nimport { defineAsyncComponent, App } from 'vue';\r\n\r\n// Lazy Load\r\nexport default (app: App) => {\r\n\tconst wrapper = defineAsyncComponent(() =>\r\n\t\timport(/* webpackChunkName: \"unit-price\" */ './unit-price').then(\r\n\t\t\t({ UnitPrice }) => UnitPrice\r\n\t\t)\r\n\t);\r\n\r\n\tapp.component('unit-price', wrapper);\r\n};\r\n","export default function setCalculatorIframeHeight() {\r\n\twindow.addEventListener(\r\n\t\t'message',\r\n\t\tfunction (event) {\r\n\t\t\tif (event.origin === 'https://supersa.lifetimesupermodeller.com.au') {\r\n\t\t\t\tif (event.data.type === 'resize') {\r\n\t\t\t\t\tvar calculatorIframe = document.querySelector(\r\n\t\t\t\t\t\t'.calculator-iframe iframe'\r\n\t\t\t\t\t);\r\n\t\t\t\t\tif (calculatorIframe)\r\n\t\t\t\t\t\tcalculatorIframe.style.minHeight = event.data.height + 65 + 'px';\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (event.origin === 'https://supersa.gbsau.com') {\r\n\t\t\t\tif (event.data.type === 'resize') {\r\n\t\t\t\t\tvar calculatorIframe = document.querySelector(\r\n\t\t\t\t\t\t'.calculator-iframe iframe'\r\n\t\t\t\t\t);\r\n\t\t\t\t\tif (calculatorIframe)\r\n\t\t\t\t\t\tcalculatorIframe.style.minHeight = event.data.height + 65 + 'px';\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tfalse\r\n\t);\r\n}\r\n","/**\r\n * @module framework/directives/focus\r\n */\r\n\r\nimport { App } from '@framework/vue';\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\tapp.directive('focus', {\r\n\t\t// When the bound element is inserted into the DOM...\r\n\t\tmounted($el, { value }) {\r\n\t\t\t// Focus the element\r\n\t\t\tif (value) $el.focus();\r\n\t\t},\r\n\t});\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 { scrollTo } from './scroll-to';\r\nimport { progressive } from './progressive';\r\nimport { tabSelect } from './tab-select';\r\nimport { ipxl } from './ipxl';\r\n\r\nexport const directives = (app: App) => {\r\n\tfocus(app);\r\n\tscrollTo(app);\r\n\tprogressive(app);\r\n\ttabSelect(app);\r\n\tipxl(app);\r\n};\r\n","/**\r\n * @module framework/directives/scroll-to\r\n */\r\n\r\nimport { App } from '@framework/vue';\r\n\r\n// Register a global custom directive called `v-scroll-to`\r\nexport const scrollTo = (app: App) => {\r\n\tapp.directive('scroll-to', {\r\n\t\t// When the bound element is inserted into the DOM...\r\n\t\tmounted($el, binding) {\r\n\t\t\t// Focus the element\r\n\t\t\tif (binding.value) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tconst $target = document.querySelector(binding.value);\r\n\t\t\t\t\tconst top = Math.max(0, $target.offsetTop);\r\n\t\t\t\t\t$el.addEventListener('click', () => {\r\n\t\t\t\t\t\twindow.scrollTo({\r\n\t\t\t\t\t\t\ttop,\r\n\t\t\t\t\t\t\tbehavior: 'smooth',\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t});\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tconsole.info(`Could not scroll to \"${binding.value}\"`);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t});\r\n};\r\n","/**\r\n * @module framework/directives/progressive\r\n */\r\n\r\nimport { App } from '@framework/vue';\r\n\r\n// Register a global custom directive called `v-progressive`\r\nexport const progressive = (app: App) => {\r\n\tapp.directive('progressive', {\r\n\t\tmounted($el) {\r\n\t\t\tfunction loadImage(): void {\r\n\t\t\t\tconst imageElement = $el as HTMLImageElement;\r\n\t\t\t\timageElement.addEventListener('load', () =>\r\n\t\t\t\t\tsetTimeout(() => $el.classList.add('loaded'), 100)\r\n\t\t\t\t);\r\n\t\t\t\timageElement.src = imageElement.dataset.src || imageElement.src;\r\n\t\t\t\timageElement.srcset =\r\n\t\t\t\t\timageElement.dataset.srcset || imageElement.srcset;\r\n\t\t\t}\r\n\r\n\t\t\tfunction handleIntersect(\r\n\t\t\t\tentries: IntersectionObserverEntry[],\r\n\t\t\t\tobserver: IntersectionObserver\r\n\t\t\t): void {\r\n\t\t\t\tentries.forEach((entry) => {\r\n\t\t\t\t\tif (entry.isIntersecting) {\r\n\t\t\t\t\t\tloadImage();\r\n\t\t\t\t\t\tobserver.unobserve($el);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tfunction createObserver(): void {\r\n\t\t\t\tconst options: IntersectionObserverInit = {\r\n\t\t\t\t\troot: null, // defaults to the browser viewport\r\n\t\t\t\t\tthreshold: 0,\r\n\t\t\t\t};\r\n\t\t\t\tconst observer = new IntersectionObserver(handleIntersect, options);\r\n\t\t\t\tobserver.observe($el);\r\n\t\t\t}\r\n\t\t\t//@ts-ignore\r\n\t\t\twindow.IntersectionObserver ? createObserver() : loadImage();\r\n\t\t},\r\n\t});\r\n};\r\n","/**\r\n * @module framework/directives/focus\r\n */\r\n\r\nimport { App } from '@framework/vue';\r\n\r\n// https://vuejs.org/v2/guide/custom-directive.html\r\n// Register a global custom directive called `v-tab-select`\r\nexport const tabSelect = (app: App) => {\r\n\tapp.directive('tab-select', {\r\n\t\t// When the bound element is inserted into the DOM...\r\n\t\tmounted($el, { value }) {\r\n\t\t\t// Click the element with id provided\r\n\t\t\t$el.addEventListener('change', function () {\r\n\t\t\t\tconst targetDataLink =\r\n\t\t\t\t\t$el.selectedOptions[0].attributes['data-link']?.value;\r\n\t\t\t\tif (targetDataLink) {\r\n\t\t\t\t\twindow.location.href = targetDataLink;\r\n\t\t\t\t} else if ($el.value) {\r\n\t\t\t\t\t// Try and click an element (tab) of the value supplied\r\n\t\t\t\t\tdocument.getElementById($el.value)?.click();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t},\r\n\t});\r\n};\r\n","/**\r\n * @module framework/directives/ipxl\r\n */\r\n\r\nimport { App } from '@framework/vue';\r\n\r\n//iPhone X landscape notch check\r\nexport const ipxl = (app: App) => {\r\n\tcheckOrientation();\r\n\twindow.addEventListener(\r\n\t\t'orientationchange',\r\n\t\tfunction () {\r\n\t\t\tcheckOrientation();\r\n\t\t},\r\n\t\tfalse\r\n\t);\r\n\tfunction checkOrientation() {\r\n\t\tif (navigator.userAgent.match(/(iPhone)/)) {\r\n\t\t\tif (screen.availWidth == 812 && screen.availHeight == 375) {\r\n\t\t\t\tdocument.documentElement.classList.add('ipx-l');\r\n\t\t\t} else {\r\n\t\t\t\tdocument.documentElement.classList.remove('ipx-l');\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\r\n","/**\r\n * Application\r\n */\r\n\r\n// Dependencies\r\nimport { createApp, App as VueApp } from '@framework/vue';\r\nimport { loadScript } from '@framework/network/script-loader';\r\nimport { components } from '@components/components';\r\nimport { directives } from '@framework/directives';\r\n// import Vuex from 'vuex';\r\n\r\n// Declarations\r\ndeclare global {\r\n\t// tslint:disable:no-any\r\n\ttype AppHookFn = () => void | Promise | string | any;\r\n\r\n\ttype AppHook = AppHookFn | AppHookFn[];\r\n\r\n\ttype AppGlobals = {\r\n\t\t[s: string]: any;\r\n\t\tpolyfillsLoaded?: boolean;\r\n\t};\r\n\r\n\ttype CdnScript = {\r\n\t\tglobal: string;\r\n\t\tsrc: string;\r\n\t};\r\n\t// tslint:enable:no-any\r\n\r\n\tinterface AppHooks {\r\n\t\t/**\r\n\t\t * Executes before any initialisation occurs.\r\n\t\t */\r\n\t\tinitialise?: AppHook[];\r\n\r\n\t\t/**\r\n\t\t * Executes before the App framework (Vue) is mounted.\r\n\t\t */\r\n\t\tbeforeMount?: AppHook[];\r\n\r\n\t\t/**\r\n\t\t * Executes after the App framework (Vue) has mounted.\r\n\t\t */\r\n\t\tafterMount?: AppHook[];\r\n\r\n\t\t/**\r\n\t\t * Executes at the end of the initialisation process.\r\n\t\t */\r\n\t\tready?: AppHook[];\r\n\t}\r\n\r\n\t// tslint:disable:interface-name\r\n\tinterface Window {\r\n\t\t/**\r\n\t\t * Provides access to global App class. Is not available until _after_ the application\r\n\t\t * has initialised (but before `ready` hook).\r\n\t\t */\r\n\t\tApp: App;\r\n\r\n\t\t/**\r\n\t\t * Provides asynchronous access to the global App class. Resolves _after_ the application\r\n\t\t * has initialised (but before `ready` hook).\r\n\t\t */\r\n\t\tAppPromise: Promise;\r\n\r\n\t\t/**\r\n\t\t * Generic object facilitating namespaced globals. Preference is to not require the use\r\n\t\t * of globals; this object is intended as a last resort.\r\n\t\t */\r\n\t\tAppGlobals: AppGlobals;\r\n\r\n\t\t/**\r\n\t\t * Array of paths to script fallbacks\r\n\t\t */\r\n\t\tCdnFallbacks: CdnScript[];\r\n\r\n\t\t/**\r\n\t\t * Application initialisation lifecycle hooks object.\r\n\t\t */\r\n\t\tAppHooks: AppHooks;\r\n\t}\r\n}\r\n\r\n// Config\r\n// @ts-ignore\r\n// Vue.use(Vuex);\r\n\r\n// Store\r\n// const store = new Vuex.Store({\r\n// \tstrict: true,\r\n// \tstate: {},\r\n// });\r\n\r\n/**\r\n * Application Wrapper\r\n */\r\nexport class App {\r\n\tprivate isInitialised: boolean = false;\r\n\tpublic readonly vue: VueApp;\r\n\tprivate appPromiseResolver!: (value: App) => void;\r\n\r\n\tconstructor() {\r\n\t\t// DEV mode global state for rendering comps in isolateion\r\n\t\t// Will be removed from production builds by webpack\r\n\t\tlet initialState = {};\r\n\t\tif (process.env.NODE_ENV !== 'production') {\r\n\t\t\tinitialState = {\r\n\t\t\t\tdemoState: {},\r\n\t\t\t\tdemoNum: 1,\r\n\t\t\t\tdemoStr: '',\r\n\t\t\t};\r\n\t\t}\r\n\t\t// Global Vue App\r\n\t\tthis.vue = createApp({\r\n\t\t\tdata() {\r\n\t\t\t\treturn initialState;\r\n\t\t\t},\r\n\t\t});\r\n\r\n\t\t// Init AppPromise\r\n\t\t// tslint:disable-next-line:promise-must-complete\r\n\t\twindow.AppPromise = new Promise((resolve) => {\r\n\t\t\tthis.appPromiseResolver = resolve;\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Runs provided AppHooks\r\n\t */\r\n\tprivate static async runHooks(hooks: AppHook[]): Promise {\r\n\t\tawait Promise.all(\r\n\t\t\thooks.map(async (hook) => {\r\n\t\t\t\t// Hooks in an array should run sequentially\r\n\t\t\t\tif (Array.isArray(hook)) {\r\n\t\t\t\t\t//hook.forEach(App.runHook);\r\n\r\n\t\t\t\t\treturn hook.forEach(App.runHook);\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn Promise.resolve(App.runHook(hook));\r\n\t\t\t})\r\n\t\t);\r\n\t}\r\n\r\n\tprivate static async runHook(hook: AppHookFn): Promise {\r\n\t\tif (typeof hook === 'string') {\r\n\t\t\tif (\r\n\t\t\t\t!(hook).startsWith('https://') &&\r\n\t\t\t\t// tslint:disable-next-line: no-http-string\r\n\t\t\t\t!(hook).startsWith('http://') &&\r\n\t\t\t\t!(hook).startsWith('/')\r\n\t\t\t) {\r\n\t\t\t\tthrow Error(`Hook unable to load file at path: ${hook}`);\r\n\t\t\t}\r\n\r\n\t\t\treturn loadScript(hook);\r\n\t\t}\r\n\r\n\t\tif (typeof hook !== 'function') {\r\n\t\t\tthrow Error(`Hook is not a function:\\n${hook}`);\r\n\t\t}\r\n\r\n\t\treturn Promise.resolve(hook());\r\n\t}\r\n\r\n\t/**\r\n\t * Automatically starts the Application on load\r\n\t */\r\n\tpublic async autoStart(): Promise {\r\n\t\treturn new Promise((resolve) => {\r\n\t\t\twindow.addEventListener('load', async () => resolve(await this.start()));\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Starts the Application\r\n\t */\r\n\tpublic async start(): Promise {\r\n\t\t// Ensure only a single instance is running\r\n\t\tif (!!window.App) {\r\n\t\t\tconsole.warn('Preventing attempt to start App more than once.');\r\n\r\n\t\t\treturn window.App;\r\n\t\t}\r\n\r\n\t\treturn new Promise(async (resolve) => {\r\n\t\t\tawait this.init();\r\n\t\t\tresolve(this);\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Initialises the application, executing AppHooks\r\n\t */\r\n\tprivate async init(): Promise {\r\n\t\tif (this.isInitialised) return;\r\n\r\n\t\tif (window.AppHooks.initialise) {\r\n\t\t\tawait App.runHooks(window.AppHooks.initialise);\r\n\t\t}\r\n\r\n\t\tconsole.info('Application starting');\r\n\t\t// Patch Browser\r\n\t\t//await patchBrowser();\r\n\r\n\t\tdirectives(this.vue);\r\n\r\n\t\t// Components\r\n\t\tcomponents(\r\n\t\t\twindow.AppPromise.then(() => {\r\n\t\t\t\treturn;\r\n\t\t\t}),\r\n\t\t\tthis.vue\r\n\t\t);\r\n\r\n\t\tif (window.AppHooks.beforeMount) {\r\n\t\t\tawait App.runHooks(window.AppHooks.beforeMount);\r\n\t\t}\r\n\r\n\t\t// Application\r\n\t\tthis.mount();\r\n\r\n\t\t// Allow external document binding scripts\r\n\t\tdocument.dispatchEvent(new CustomEvent('AppMounted'));\r\n\r\n\t\tif (window.AppHooks.afterMount) {\r\n\t\t\tawait App.runHooks(window.AppHooks.afterMount);\r\n\t\t}\r\n\r\n\t\tthis.isInitialised = true;\r\n\t\tconsole.info('Application ready');\r\n\r\n\t\twindow.App = this;\r\n\t\tthis.appPromiseResolver(this);\r\n\r\n\t\tif (window.AppHooks.ready) {\r\n\t\t\tawait App.runHooks(window.AppHooks.ready);\r\n\t\t}\r\n\r\n\t\t// Add class (some tests watch for this)\r\n\t\tsetTimeout(() => document.documentElement.classList.add('is-ready'));\r\n\t}\r\n\r\n\t/**\r\n\t * Mounts the App framework to the DOM\r\n\t */\r\n\tprivate mount(selector: string = '#app') {\r\n\t\treturn this.vue.mount(selector);\r\n\t}\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: Element): void {\r\n\telement.setAttribute('data-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\telements.forEach(markElementReady);\r\n}\r\n\r\n/**\r\n * Check if an element has been marked as ready\r\n */\r\nexport function isElementReady(element: Element): boolean {\r\n\treturn 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: Element): Promise {\r\n\tif (isElementReady(element)) return Promise.resolve();\r\n\r\n\treturn new Promise((resolve) => {\r\n\t\tconst observer = new MutationObserver(() => {\r\n\t\t\tobserver.disconnect();\r\n\t\t\tresolve();\r\n\t\t});\r\n\r\n\t\tobserver.observe(element, {\r\n\t\t\tattributes: true,\r\n\t\t\tattributeFilter: [DATA_READY],\r\n\t\t});\r\n\t});\r\n}\r\n","import { createVNode, render, Component } from '../vue';\r\n\r\nexport const mountManually = (\r\n\tcomponent: Component,\r\n\t{ props, element }: { props: any; element?: Element | null }\r\n) => {\r\n\tlet el = element;\r\n\tlet vNode = createVNode(component, props);\r\n\r\n\tvNode.appContext = window.App?.vue._context;\r\n\r\n\tif (el) render(vNode, el);\r\n\telse if (typeof document !== 'undefined')\r\n\t\trender(vNode, (el = document.createElement('div')));\r\n\r\n\tconst destroy = () => {\r\n\t\tif (el) render(null, el);\r\n\t\tel?.remove();\r\n\t\tel = null;\r\n\t\t//@ts-ignore\r\n\t\tvNode = null;\r\n\t};\r\n\r\n\treturn { vNode, destroy, el };\r\n};\r\n","// tslint:disable:no-redundant-jsdoc\r\n/**\r\n * Carousel Constant\r\n * @module patterns/components/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\tgap: 0,\r\n\tclasses: {\r\n\t\tdirection: {\r\n\t\t\tltr: 'carousel--ltr',\r\n\t\t\trtl: 'carousel--rtl',\r\n\t\t},\r\n\t\tslider: 'carousel--slider',\r\n\t\tcarousel: 'carousel--carousel',\r\n\t\tswipeable: 'carousel--swipeable',\r\n\t\tdragging: 'carousel--dragging',\r\n\t\tcloneSlide: 'carousel--clone',\r\n\t\tactiveNav: 'carousel__bullet--active',\r\n\t\tactiveSlide: 'carousel__slide--active',\r\n\t\tdisabledArrow: 'carousel--disabled',\r\n\t},\r\n};\r\n","/**\r\n * Password Input Component\r\n */\r\n\r\n//#region Dependencies\r\n\r\nimport {\r\n\tcomputed,\r\n\tdefineComponent,\r\n\treactive,\r\n\ttoRefs,\r\n\tSetupContext,\r\n} from '@framework/vue';\r\nimport { contextmenu } from 'modernizr';\r\n\r\nimport { Props, Data } from './interfaces';\r\nimport { default as template } from './password-input.tpl.html';\r\n//#endregion\r\n\r\nconst props = {\r\n\tattributes: { type: Object, default: () => ({}) },\r\n\trevealButtonText: { type: String, default: 'Reveal password' },\r\n};\r\n\r\n/**\r\n * Password Input Vue Component\r\n */\r\nexport const PasswordInput = defineComponent({\r\n\tname: 'password-input',\r\n\ttemplate,\r\n\tprops,\r\n\r\n\t//#region setup\r\n\tsetup(props: Props, context: SetupContext) {\r\n\t\tconst { state, handleActivation, handleFocusOut } = usePasswordInput(\r\n\t\t\tprops,\r\n\t\t\tcontext\r\n\t\t);\r\n\r\n\t\treturn {\r\n\t\t\t...toRefs(state),\r\n\t\t\thandleActivation,\r\n\t\t\thandleFocusOut,\r\n\t\t};\r\n\t},\r\n\t//#endregion\r\n});\r\n\r\nfunction usePasswordInput(props: Props, context: SetupContext) {\r\n\t//#region State\r\n\tconst state = reactive({\r\n\t\ttoggled: false,\r\n\t\t// Refs\r\n\t\troot: null,\r\n\t\tinput: null,\r\n\t\t// Computed\r\n\t\tinputType: computed((): string => (state.toggled ? 'text' : 'password')),\r\n\t\tinputAttributes: computed(() => {\r\n\t\t\tconst attrs = <{ [s: string]: string }>{ ...context.attrs };\r\n\t\t\tdelete attrs.type;\r\n\r\n\t\t\treturn attrs;\r\n\t\t}),\r\n\t\tbuttonClasses: computed((): { [s: string]: boolean } => ({\r\n\t\t\t'is-active': state.toggled,\r\n\t\t})),\r\n\t});\r\n\t//#endregion\r\n\r\n\t//#region Methods\r\n\tfunction handleActivation(): void {\r\n\t\tstate.toggled = !state.toggled;\r\n\r\n\t\tif (state.toggled) state.input?.focus();\r\n\t}\r\n\r\n\tfunction handleFocusOut(event: FocusEvent): void {\r\n\t\tconst relatedTarget = event.relatedTarget;\r\n\r\n\t\t// Do nothing if the focus target is within the component\r\n\t\tif (relatedTarget && state.root?.contains(relatedTarget)) return;\r\n\r\n\t\tstate.toggled = false;\r\n\t}\r\n\t//#endregion\r\n\r\n\treturn {\r\n\t\tstate,\r\n\t\thandleActivation,\r\n\t\thandleFocusOut,\r\n\t};\r\n}\r\n\r\n// export { template };\r\n","// Module\nvar code = \" \";\n// Exports\nmodule.exports = code;","// Module\nvar code = \" \";\n// Exports\nmodule.exports = code;"],"sourceRoot":""}