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