{"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-feae7ead98.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\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\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 * 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 { 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\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":""}