{"version":3,"file":"app-9e164259.xxxxxxxx.bundle.js","mappings":"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","sources":["webpack://iadviser/./src/resources/plugins/aurelia-table/au-table-pagination.html","webpack://iadviser/./src/resources/plugins/aurelia-table/au-table-pagination.ts","webpack://iadviser/./src/resources/plugins/aurelia-table/au-table-select.ts","webpack://iadviser/./src/resources/plugins/aurelia-table/au-table-sort.ts","webpack://iadviser/./src/resources/plugins/aurelia-table/au-table.ts","webpack://iadviser/./src/resources/plugins/aurelia-table/index.ts","webpack://iadviser/./src/resources/plugins/easter-eggs/easter-eggs.ts","webpack://iadviser/./src/resources/plugins/feature-flags/default-feature-flags.ts","webpack://iadviser/./src/resources/plugins/feature-flags/feature-flags-service.ts","webpack://iadviser/./src/resources/plugins/feature-flags/index.ts","webpack://iadviser/./src/resources/plugins/keyboard-sequence/keyboard-sequence.ts","webpack://iadviser/./src/resources/postrender-step.ts","webpack://iadviser/./src/resources/prepareTaskModel.ts","webpack://iadviser/./src/resources/prerender-step.ts","webpack://iadviser/./src/resources/scroll-into-view.ts","webpack://iadviser/./src/resources/services/aurelia-hooks.ts","webpack://iadviser/./src/resources/services/blob-service.ts","webpack://iadviser/./src/resources/services/claims-service.ts","webpack://iadviser/./src/resources/services/client-statement-service.ts","webpack://iadviser/./src/resources/services/ia-toast-service.ts","webpack://iadviser/./src/resources/services/log-service.ts","webpack://iadviser/./src/resources/services/token-service.ts","webpack://iadviser/./src/resources/startup/console-appender.ts","webpack://iadviser/./src/resources/startup/i18tn-validation.ts","webpack://iadviser/./src/resources/tab-scroll.ts","webpack://iadviser/./src/resources/timer.ts"],"sourcesContent":["// Module\nvar code = \"\\r\\n\";\n// Exports\nexport default code;","import { autoinject, bindable, bindingMode, DOM } from 'aurelia-framework';\r\n\r\n@autoinject()\r\nexport class AutPaginationCustomElement {\r\n @bindable({ defaultBindingMode: bindingMode.twoWay }) currentPage;\r\n @bindable pageSize;\r\n @bindable totalItems;\r\n @bindable hideSinglePage = true;\r\n @bindable paginationSize;\r\n @bindable boundaryLinks = false;\r\n @bindable firstText = 'First';\r\n @bindable lastText = 'Last';\r\n @bindable directionLinks = true;\r\n @bindable previousText = '<';\r\n @bindable nextText = '>';\r\n @bindable disable = false;\r\n\r\n totalPages = 1;\r\n displayPages = [];\r\n\r\n static inject = [Element];\r\n constructor(private element: Element) {\r\n this.element = element;\r\n }\r\n\r\n bind() {\r\n if (this.currentPage === undefined || this.currentPage === null || this.currentPage < 1) {\r\n this.currentPage = 1;\r\n }\r\n\r\n if (this.pageSize === undefined || this.pageSize === null || this.pageSize < 1) {\r\n this.pageSize = 5;\r\n }\r\n\r\n this.calculatePages();\r\n }\r\n\r\n totalItemsChanged() {\r\n this.calculatePages();\r\n }\r\n\r\n pageSizeChanged() {\r\n this.calculatePages();\r\n }\r\n\r\n currentPageChanged() {\r\n this.calculatePages();\r\n this.dispatchPageChangedEvent();\r\n }\r\n\r\n dispatchPageChangedEvent() {\r\n const event = DOM.createCustomEvent('page-changed', {\r\n bubbles: true,\r\n detail: {\r\n currentPage: this.currentPage,\r\n },\r\n });\r\n this.element.dispatchEvent(event);\r\n }\r\n\r\n calculatePages() {\r\n this.totalPages = this.totalItems <= this.pageSize ? 1 : Math.ceil(this.totalItems / this.pageSize);\r\n\r\n if (isNaN(this.paginationSize) || this.paginationSize <= 0) {\r\n this.displayAllPages();\r\n } else {\r\n this.limitVisiblePages();\r\n }\r\n }\r\n\r\n displayAllPages() {\r\n const displayPages = [];\r\n\r\n for (let i = 1; i <= this.totalPages; i++) {\r\n displayPages.push({\r\n title: i.toString(),\r\n value: i,\r\n });\r\n }\r\n this.displayPages = displayPages;\r\n }\r\n\r\n limitVisiblePages() {\r\n const displayPages = [];\r\n\r\n const totalTiers = Math.ceil(this.totalPages / this.paginationSize);\r\n\r\n const activeTier = Math.ceil(this.currentPage / this.paginationSize);\r\n\r\n const start = (activeTier - 1) * this.paginationSize + 1;\r\n const end = start + this.paginationSize;\r\n\r\n if (activeTier > 1) {\r\n displayPages.push({\r\n title: '...',\r\n value: start - 1,\r\n });\r\n }\r\n\r\n for (let i = start; i < end; i++) {\r\n if (i > this.totalPages) {\r\n break;\r\n }\r\n\r\n displayPages.push({\r\n title: i.toString(),\r\n value: i,\r\n });\r\n }\r\n\r\n if (activeTier < totalTiers) {\r\n displayPages.push({ title: '...', value: end });\r\n }\r\n\r\n this.displayPages = displayPages;\r\n }\r\n\r\n selectPage(page) {\r\n if (page < 1 || page > this.totalPages || page === this.currentPage) {\r\n return;\r\n }\r\n\r\n this.currentPage = page;\r\n }\r\n\r\n nextPage() {\r\n if (this.currentPage < this.totalPages && !this.disable) {\r\n this.currentPage++;\r\n }\r\n }\r\n\r\n previousPage() {\r\n if (this.currentPage > 1 && !this.disable) {\r\n this.currentPage--;\r\n }\r\n }\r\n\r\n firstPage() {\r\n this.currentPage = 1;\r\n }\r\n\r\n lastPage() {\r\n this.currentPage = this.totalPages;\r\n }\r\n}\r\n","import { bindable, bindingMode, BindingEngine, DOM, autoinject } from 'aurelia-framework';\r\nimport {AureliaTableCustomAttribute} from './au-table';\r\n\r\n@autoinject()\r\nexport class AutSelectCustomAttribute {\r\n\r\n @bindable({defaultBindingMode: bindingMode.twoWay})row;\r\n @bindable mode = 'single';\r\n @bindable selectedClass = 'aut-row-selected';\r\n @bindable custom = false;\r\n\r\n selectedSubscription;\r\n rowSelectedListener;\r\n\r\n constructor(private auTable: AureliaTableCustomAttribute, private element: Element, private bindingEngine: BindingEngine) {\r\n this.rowSelectedListener = event => {\r\n this.handleRowSelected(event);\r\n };\r\n }\r\n\r\n attached() {\r\n if (!this.custom) {\r\n (this.element as HTMLElement).style.cursor = 'pointer';\r\n this\r\n .element\r\n .addEventListener('click', this.rowSelectedListener);\r\n }\r\n\r\n this.selectedSubscription = this\r\n .bindingEngine\r\n .propertyObserver(this.row, '$isSelected')\r\n .subscribe(() => this.isSelectedChanged());\r\n\r\n this.setClass();\r\n }\r\n\r\n detached() {\r\n if (!this.custom) {\r\n this\r\n .element\r\n .removeEventListener('click', this.rowSelectedListener);\r\n }\r\n\r\n this\r\n .selectedSubscription\r\n .dispose();\r\n }\r\n\r\n setClass() {\r\n if (this.row.$isSelected) {\r\n this\r\n .element\r\n .classList\r\n .add(this.selectedClass);\r\n } else {\r\n this\r\n .element\r\n .classList\r\n .remove(this.selectedClass);\r\n }\r\n }\r\n\r\n handleRowSelected(event) {\r\n const source = event.target || event.srcElement;\r\n if (source.tagName.toLowerCase() !== 'td') {\r\n return;\r\n }\r\n this.row.$isSelected = this.row.$isSelected\r\n ? false\r\n : true;\r\n }\r\n\r\n dispatchSelectedEvent() {\r\n const selectedEvent = DOM.createCustomEvent('select', {\r\n detail: {\r\n row: this.row\r\n },\r\n bubbles: true\r\n });\r\n this\r\n .element\r\n .dispatchEvent(selectedEvent);\r\n }\r\n\r\n isSelectedChanged() {\r\n this.setClass();\r\n\r\n if (this.row.$isSelected) {\r\n if (this.mode === 'single') {\r\n this.deselectAll();\r\n }\r\n\r\n this.dispatchSelectedEvent();\r\n }\r\n }\r\n\r\n deselectAll() {\r\n this\r\n .auTable\r\n .data\r\n .forEach(item => {\r\n if (item !== this.row) {\r\n item.$isSelected = false;\r\n }\r\n });\r\n }\r\n}\r\n","import { inject, bindable, autoinject } from \"aurelia-framework\";\r\nimport { AureliaTableCustomAttribute } from \"./au-table\";\r\n\r\n@autoinject\r\nexport class AutSortCustomAttribute {\r\n @bindable key;\r\n @bindable custom;\r\n @bindable default;\r\n @bindable callback = () => \"\";\r\n\r\n order = 0;\r\n orderClasses = [\"aut-desc\", \"aut-sortable\", \"aut-asc\"];\r\n\r\n ignoreEvent = false;\r\n\r\n private rowSelectedListener;\r\n private sortChangedListener;\r\n\r\n constructor(private auTable: AureliaTableCustomAttribute, private element: Element) {\r\n this.rowSelectedListener = () => {\r\n this.handleHeaderClicked();\r\n };\r\n\r\n this.sortChangedListener = () => {\r\n this.handleSortChanged();\r\n };\r\n }\r\n\r\n handleSortChanged() {\r\n if (!this.ignoreEvent) {\r\n this.order = 0;\r\n this.setClass();\r\n this.callback();\r\n } else {\r\n this.ignoreEvent = false;\r\n }\r\n }\r\n\r\n attached() {\r\n if (this.key === null && this.custom === null) {\r\n throw new Error(\"Must provide a key or a custom sort function.\");\r\n }\r\n\r\n (this.element as HTMLElement).style.cursor = \"pointer\";\r\n this.element.classList.add(\"aut-sort\");\r\n\r\n this.element.addEventListener(\"click\", this.rowSelectedListener);\r\n this.auTable.addSortChangedListener(this.sortChangedListener);\r\n\r\n this.handleDefault();\r\n this.setClass();\r\n }\r\n\r\n detached() {\r\n this.element.removeEventListener(\"click\", this.rowSelectedListener);\r\n this.auTable.removeSortChangedListener(this.sortChangedListener);\r\n }\r\n\r\n handleDefault() {\r\n if (this.default) {\r\n this.order = this.default === \"desc\" ? -1 : 1;\r\n this.doSort();\r\n }\r\n }\r\n\r\n doSort() {\r\n if (this.auTable.dataSource === \"server\") {\r\n return;\r\n }\r\n this.ignoreEvent = true;\r\n this.auTable.sortChanged(this.key, this.custom, this.order);\r\n }\r\n\r\n setClass() {\r\n this.orderClasses.forEach((next) => this.element.classList.remove(next));\r\n this.element.classList.add(this.orderClasses[this.order + 1]);\r\n }\r\n\r\n handleHeaderClicked() {\r\n this.order = this.order === 0 || this.order === -1 ? this.order + 1 : -1;\r\n this.setClass();\r\n this.doSort();\r\n }\r\n}\r\n","import {\r\n autoinject,\r\n bindable,\r\n bindingMode,\r\n BindingEngine,\r\n} from \"aurelia-framework\";\r\n\r\n@autoinject()\r\nexport class AureliaTableCustomAttribute {\r\n @bindable dataSource = \"local\"; // local, ajax and server;\r\n\r\n @bindable data;\r\n @bindable({ defaultBindingMode: bindingMode.twoWay }) displayData;\r\n\r\n @bindable filters;\r\n\r\n @bindable({ defaultBindingMode: bindingMode.twoWay }) currentPage;\r\n @bindable pageSize;\r\n @bindable({ defaultBindingMode: bindingMode.twoWay }) totalItems;\r\n\r\n @bindable({ defaultBindingMode: bindingMode.twoWay }) api;\r\n\r\n isAttached = false;\r\n\r\n sortKey;\r\n sortOrder;\r\n sortChangedListeners = [];\r\n\r\n @bindable({ defaultBindingMode: bindingMode.twoWay }) beforePagination = [];\r\n\r\n private customSort;\r\n\r\n dataObserver;\r\n filterObservers = [];\r\n\r\n constructor(private bindingEngine: BindingEngine, private element: Element) {\r\n\r\n }\r\n\r\n bind() {\r\n if (Array.isArray(this.data)) {\r\n this.dataObserver = this.bindingEngine\r\n .collectionObserver(this.data)\r\n .subscribe(() => this.applyPlugins());\r\n }\r\n\r\n this.filtersChanged();\r\n\r\n this.api = {\r\n revealItem: (item) => this.revealItem(item),\r\n };\r\n }\r\n\r\n attached() {\r\n this.isAttached = true;\r\n this.applyPlugins();\r\n }\r\n\r\n detached() {\r\n if (this.dataObserver) {\r\n this.dataObserver.dispose();\r\n }\r\n\r\n for (const observer of this.filterObservers) {\r\n observer.dispose();\r\n }\r\n }\r\n\r\n filtersChanged() {\r\n if (Array.isArray(this.filters)) {\r\n for (const observer of this.filterObservers) {\r\n observer.dispose();\r\n }\r\n\r\n for (const filter of this.filters) {\r\n const observer = this.bindingEngine\r\n .propertyObserver(filter, \"value\")\r\n .subscribe(() => this.filterChanged());\r\n this.filterObservers.push(observer);\r\n }\r\n }\r\n }\r\n\r\n filterChanged() {\r\n if (this.dataSource === \"server\") {\r\n return;\r\n }\r\n\r\n if (this.hasPagination()) {\r\n this.currentPage = 1;\r\n }\r\n this.applyPlugins();\r\n }\r\n\r\n currentPageChanged() {\r\n this.applyPlugins();\r\n }\r\n\r\n pageSizeChanged() {\r\n this.applyPlugins();\r\n }\r\n\r\n /**\r\n * Copies the data into the display data\r\n */\r\n getDataCopy() {\r\n return [].concat(this.data);\r\n }\r\n\r\n getPageData(localData) {\r\n if (this.hasPagination()) {\r\n this.beforePagination = [].concat(localData);\r\n return this.doPaginate(localData);\r\n }\r\n\r\n return localData;\r\n }\r\n\r\n /**\r\n * Applies all the plugins to the display data\r\n */\r\n applyPlugins() {\r\n if (!this.isAttached || !this.data || this.dataSource === \"server\") {\r\n return;\r\n }\r\n\r\n let localData = this.getDataCopy();\r\n\r\n if (this.hasFilter()) {\r\n localData = this.doFilter(localData);\r\n }\r\n\r\n if ((this.sortKey || this.customSort) && this.sortOrder !== 0) {\r\n this.doSort(localData);\r\n }\r\n\r\n this.totalItems = localData.length;\r\n\r\n this.displayData = this.getPageData(localData);\r\n }\r\n\r\n doFilter(toFilter) {\r\n const filteredData = [];\r\n\r\n for (const item of toFilter) {\r\n let passed = true;\r\n\r\n for (const filter of this.filters) {\r\n if (!this.passFilter(item, filter)) {\r\n passed = false;\r\n break;\r\n }\r\n }\r\n\r\n if (passed) {\r\n filteredData.push(item);\r\n }\r\n }\r\n\r\n return filteredData;\r\n }\r\n\r\n passFilter(item, filter) {\r\n if (typeof filter.custom === \"function\") {\r\n return filter.custom(filter.value, item);\r\n }\r\n\r\n // No custom filter function (or the 'value' property is invalid\r\n // Execute default filter logic\r\n if (\r\n filter.value === null ||\r\n filter.value === undefined ||\r\n filter.value === \"\" ||\r\n filter.value?.toString()?.trim() === '' ||\r\n !Array.isArray(filter.keys)\r\n ) {\r\n return true;\r\n }\r\n\r\n for (const key of filter.keys) {\r\n let value = this.getPropertyValue(item, key);\r\n\r\n if (value === null || value === undefined) {\r\n return false;\r\n }\r\n\r\n // If we have types, we are dealing with with select dropdowns\r\n if ( filter?.types ) {\r\n if (filter.value === 'true' || filter.value === 'false') {\r\n if (value.toString() === filter.value) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n if (value == filter.value) {\r\n return true;\r\n }\r\n } else {\r\n value = value.toString().toLowerCase();\r\n\r\n if (value.indexOf(filter.value.toString().toLowerCase()) > -1) {\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n doSort(toSort) {\r\n toSort.sort((a, b) => {\r\n if (typeof this.customSort === \"function\") {\r\n return this.customSort(a, b, this.sortOrder);\r\n }\r\n\r\n let val1;\r\n let val2;\r\n\r\n if (typeof this.sortKey === \"function\") {\r\n val1 = this.sortKey(a, this.sortOrder);\r\n val2 = this.sortKey(b, this.sortOrder);\r\n } else {\r\n val1 = this.getPropertyValue(a, this.sortKey);\r\n val2 = this.getPropertyValue(b, this.sortKey);\r\n }\r\n\r\n if (val1 === null) {\r\n val1 = \"\";\r\n }\r\n if (val2 === null) {\r\n val2 = \"\";\r\n }\r\n\r\n if (this.isNumeric(val1) && this.isNumeric(val2)) {\r\n return (val1 - val2) * this.sortOrder;\r\n }\r\n\r\n const str1 = val1?.toString() ?? '';\r\n const str2 = val2?.toString() ?? '';\r\n\r\n return str1.localeCompare(str2) * this.sortOrder;\r\n });\r\n }\r\n\r\n /**\r\n * Retrieves the value in the object specified by the key path\r\n * @param object the object\r\n * @param keyPath the path\r\n * @returns {*} the value\r\n */\r\n getPropertyValue(object, keyPath) {\r\n keyPath = keyPath.replace(/\\[(\\w+)\\]/g, \".$1\"); // convert indexes to properties\r\n keyPath = keyPath.replace(/^\\./, \"\"); // strip a leading dot\r\n const a = keyPath.split(\".\");\r\n for (let i = 0, n = a.length; i < n; ++i) {\r\n const k = a[i];\r\n if (k in object) {\r\n object = object[k];\r\n } else {\r\n return;\r\n }\r\n }\r\n return object;\r\n }\r\n\r\n isNumeric(toCheck) {\r\n return !isNaN(parseFloat(toCheck)) && isFinite(toCheck);\r\n }\r\n\r\n doPaginate(toPaginate) {\r\n if (toPaginate.length <= this.pageSize) {\r\n return toPaginate;\r\n }\r\n\r\n const start = (this.currentPage - 1) * this.pageSize;\r\n\r\n const end = start + this.pageSize;\r\n\r\n return toPaginate.slice(start, end);\r\n }\r\n\r\n hasFilter() {\r\n return Array.isArray(this.filters) && this.filters.length > 0;\r\n }\r\n\r\n hasPagination() {\r\n return this.currentPage > 0;\r\n }\r\n\r\n dataChanged() {\r\n if (this.dataObserver) {\r\n this.dataObserver.dispose();\r\n }\r\n\r\n this.dataObserver = this.bindingEngine\r\n .collectionObserver(this.data)\r\n .subscribe(() => this.applyPlugins());\r\n\r\n this.applyPlugins();\r\n }\r\n\r\n sortChanged(key, custom, order) {\r\n this.sortKey = key;\r\n this.customSort = custom;\r\n this.sortOrder = order;\r\n this.applyPlugins();\r\n this.emitSortChanged();\r\n }\r\n\r\n addSortChangedListener(callback) {\r\n this.sortChangedListeners.push(callback);\r\n }\r\n\r\n removeSortChangedListener(callback) {\r\n this.removeListener(callback, this.sortChangedListeners);\r\n }\r\n\r\n emitSortChanged() {\r\n for (const listener of this.sortChangedListeners) {\r\n listener();\r\n }\r\n }\r\n\r\n removeListener(callback, listeners) {\r\n const index = listeners.indexOf(callback);\r\n\r\n if (index > -1) {\r\n listeners.splice(index, 1);\r\n }\r\n }\r\n\r\n revealItem(item) {\r\n if (!this.hasPagination()) {\r\n return true;\r\n }\r\n\r\n const index = this.beforePagination.indexOf(item);\r\n\r\n if (index === -1) {\r\n return false;\r\n }\r\n\r\n this.currentPage = Math.ceil((index + 1) / this.pageSize);\r\n\r\n return true;\r\n }\r\n}\r\n","import { FrameworkConfiguration, PLATFORM } from 'aurelia-framework';\r\n\r\nexport function configure(config: FrameworkConfiguration) {\r\n config.globalResources([\r\n PLATFORM.moduleName('resources/plugins/aurelia-table/au-table'),\r\n PLATFORM.moduleName('resources/plugins/aurelia-table/au-table-pagination'),\r\n PLATFORM.moduleName('resources/plugins/aurelia-table/au-table-select'),\r\n PLATFORM.moduleName('resources/plugins/aurelia-table/au-table-sort'),\r\n ]);\r\n}\r\n","// Styles are injected inline via JS rather than `import './easter-eggs.css'`.\r\n// v1's webpack config runs ALL .css imports from .ts files through css-loader\r\n// with `modules: { localIdentName: '[local]____[hash:base64:5]' }`, which would\r\n// hash these class names and break the plain-string matching the JS relies on.\r\nconst STYLE_TAG_ID = 'ia-easter-eggs-styles';\r\nconst STYLE_TEXT = `\r\n.ee-rain-layer {\r\n position: fixed;\r\n inset: 0;\r\n pointer-events: none;\r\n overflow: hidden;\r\n z-index: 99999;\r\n contain: strict;\r\n}\r\n.ee-circle {\r\n position: absolute;\r\n top: -10vh;\r\n width: var(--ee-size, 28px);\r\n height: var(--ee-size, 28px);\r\n border-radius: 50%;\r\n background: var(--ee-colour, #f58767);\r\n box-shadow: 0 6px 18px rgba(245, 135, 103, 0.35);\r\n opacity: var(--ee-opacity, 0.92);\r\n will-change: transform;\r\n animation:\r\n ee-fall var(--ee-duration, 3200ms) cubic-bezier(0.45, 0, 0.55, 1) forwards,\r\n ee-drift var(--ee-drift-duration, 1400ms) ease-in-out infinite alternate;\r\n animation-delay: var(--ee-delay, 0ms), var(--ee-delay, 0ms);\r\n}\r\n@keyframes ee-fall {\r\n 0% { transform: translate3d(0, -10vh, 0) rotate(0deg); }\r\n 100% { transform: translate3d(0, 110vh, 0) rotate(360deg); }\r\n}\r\n@keyframes ee-drift {\r\n from { margin-left: calc(-1 * var(--ee-drift-px, 18px)); }\r\n to { margin-left: var(--ee-drift-px, 18px); }\r\n}\r\n.ee-shake { animation: ee-shake 600ms cubic-bezier(0.36, 0.07, 0.19, 0.97); }\r\n@keyframes ee-shake {\r\n 10%, 90% { transform: translate3d(-1px, 0, 0); }\r\n 20%, 80% { transform: translate3d(2px, 0, 0); }\r\n 30%, 50%, 70% { transform: translate3d(-4px, 0, 0); }\r\n 40%, 60% { transform: translate3d(4px, 0, 0); }\r\n}\r\n.ee-scanlines {\r\n position: fixed;\r\n inset: 0;\r\n pointer-events: none;\r\n z-index: 99998;\r\n background:\r\n repeating-linear-gradient(\r\n to bottom,\r\n rgba(0, 0, 0, 0.18) 0,\r\n rgba(0, 0, 0, 0.18) 1px,\r\n transparent 1px,\r\n transparent 3px\r\n );\r\n mix-blend-mode: multiply;\r\n opacity: 0;\r\n animation: ee-scanlines 2400ms steps(36, end) forwards;\r\n}\r\n@keyframes ee-scanlines {\r\n 0% { opacity: 0; }\r\n 8% { opacity: 0.85; }\r\n 10% { opacity: 0.4; }\r\n 14% { opacity: 0.85; }\r\n 85% { opacity: 0.6; }\r\n 100% { opacity: 0; }\r\n}\r\n.ee-snow-layer {\r\n position: absolute;\r\n inset: 0;\r\n pointer-events: none;\r\n overflow: hidden;\r\n z-index: 1;\r\n text-indent: 0;\r\n white-space: normal;\r\n}\r\n.ee-snowflake {\r\n position: absolute;\r\n top: -14px;\r\n width: var(--ee-flake-size, 8px);\r\n height: var(--ee-flake-size, 8px);\r\n font-size: var(--ee-flake-size, 8px);\r\n line-height: 1;\r\n color: #ffffff;\r\n text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);\r\n opacity: var(--ee-flake-opacity, 0.9);\r\n will-change: transform;\r\n animation: ee-snowfall var(--ee-flake-duration, 3600ms) cubic-bezier(0.45, 0.05, 0.55, 0.95) forwards;\r\n --ee-flake-drift: 0px;\r\n text-indent: 0;\r\n white-space: normal;\r\n font-family: sans-serif;\r\n}\r\n@keyframes ee-snowfall {\r\n 0% { transform: translate3d(0, 0, 0) rotate(0deg); }\r\n 100% { transform: translate3d(var(--ee-flake-drift, 0px), 64px, 0) rotate(360deg); }\r\n}\r\n.ee-snowpile {\r\n position: absolute;\r\n inset: 0;\r\n pointer-events: none;\r\n background: linear-gradient(\r\n to bottom,\r\n #ffffff 0,\r\n #f8fafc var(--ee-pile-height, 0px),\r\n rgba(255, 255, 255, 0) var(--ee-pile-height, 0px),\r\n rgba(255, 255, 255, 0) 100%\r\n );\r\n -webkit-mask-image: var(--ee-mask-url, none);\r\n mask-image: var(--ee-mask-url, none);\r\n -webkit-mask-size: 100% 100%;\r\n mask-size: 100% 100%;\r\n -webkit-mask-repeat: no-repeat;\r\n mask-repeat: no-repeat;\r\n}\r\n.ee-santa-hat {\r\n position: absolute;\r\n top: -10px;\r\n left: -6px;\r\n width: 38px;\r\n height: 26px;\r\n transform: rotate(-18deg);\r\n transform-origin: bottom right;\r\n pointer-events: none;\r\n z-index: 2;\r\n filter: drop-shadow(0 1px 1px rgba(0, 0, 0, 0.25));\r\n}\r\n.ee-santa-hat-svg { width: 100%; height: 100%; display: block; }\r\n.ee-logo-frosty { filter: brightness(1.04) saturate(1.08) hue-rotate(-4deg); }\r\n@media (prefers-reduced-motion: reduce) {\r\n .ee-circle { animation-duration: var(--ee-reduced-duration, 6000ms), 0ms; }\r\n .ee-shake { animation: none; }\r\n .ee-scanlines { animation-duration: 1200ms; animation-timing-function: linear; }\r\n .ee-snowflake { animation-duration: calc(var(--ee-flake-duration, 3600ms) * 2); }\r\n}\r\n`;\r\n\r\nfunction ensureStyles(): void {\r\n if (typeof document === 'undefined') return;\r\n if (document.getElementById(STYLE_TAG_ID)) return;\r\n const tag = document.createElement('style');\r\n tag.id = STYLE_TAG_ID;\r\n tag.textContent = STYLE_TEXT;\r\n document.head.appendChild(tag);\r\n}\r\n\r\nexport interface RainOptions {\r\n count?: number;\r\n durationMs?: number;\r\n sizeRange?: [number, number];\r\n driftRange?: [number, number];\r\n}\r\n\r\nexport interface PlaySequenceOptions extends RainOptions {\r\n shake?: boolean;\r\n scanlines?: boolean;\r\n scanlinesDurationMs?: number;\r\n}\r\n\r\nconst IA_ORANGE = '#F58767';\r\n\r\nexport function rainLogos(options: RainOptions = {}): void {\r\n if (typeof document === 'undefined') return;\r\n ensureStyles();\r\n\r\n const reduced = prefersReducedMotion();\r\n const count = options.count ?? (reduced ? 8 : 32);\r\n const durationMs = options.durationMs ?? (reduced ? 5200 : 3200);\r\n const [minSize, maxSize] = options.sizeRange ?? [16, 44];\r\n const [minDrift, maxDrift] = options.driftRange ?? [8, 28];\r\n\r\n const layer = document.createElement('div');\r\n layer.className = 'ee-rain-layer';\r\n layer.setAttribute('aria-hidden', 'true');\r\n\r\n const maxDelay = Math.floor(durationMs * 0.6);\r\n\r\n for (let i = 0; i < count; i++) {\r\n const circle = document.createElement('span');\r\n circle.className = 'ee-circle';\r\n\r\n const size = randomInt(minSize, maxSize);\r\n const left = Math.random() * 100;\r\n const delay = Math.floor(Math.random() * maxDelay);\r\n const drift = randomInt(minDrift, maxDrift);\r\n const opacity = 0.7 + Math.random() * 0.3;\r\n const totalLifetimeMs = durationMs + delay + 200;\r\n\r\n circle.style.setProperty('--ee-size', `${size}px`);\r\n circle.style.setProperty('--ee-opacity', opacity.toFixed(2));\r\n circle.style.setProperty('--ee-duration', `${durationMs}ms`);\r\n circle.style.setProperty('--ee-reduced-duration', `${Math.max(durationMs, 5200)}ms`);\r\n circle.style.setProperty('--ee-delay', `${delay}ms`);\r\n circle.style.setProperty('--ee-drift-px', `${drift}px`);\r\n circle.style.setProperty('--ee-drift-duration', `${randomInt(900, 2000)}ms`);\r\n circle.style.setProperty('--ee-colour', IA_ORANGE);\r\n circle.style.left = `${left}vw`;\r\n\r\n layer.appendChild(circle);\r\n window.setTimeout(() => circle.remove(), totalLifetimeMs);\r\n }\r\n\r\n document.body.appendChild(layer);\r\n window.setTimeout(() => layer.remove(), durationMs + maxDelay + 800);\r\n}\r\n\r\nexport function shakeScreen(durationMs = 600): void {\r\n if (typeof document === 'undefined') return;\r\n if (prefersReducedMotion()) return;\r\n ensureStyles();\r\n\r\n const target = document.body;\r\n target.classList.add('ee-shake');\r\n window.setTimeout(() => target.classList.remove('ee-shake'), durationMs);\r\n}\r\n\r\nexport function scanlines(durationMs = 2400): void {\r\n if (typeof document === 'undefined') return;\r\n ensureStyles();\r\n\r\n const overlay = document.createElement('div');\r\n overlay.className = 'ee-scanlines';\r\n overlay.setAttribute('aria-hidden', 'true');\r\n overlay.style.animationDuration = `${durationMs}ms`;\r\n document.body.appendChild(overlay);\r\n window.setTimeout(() => overlay.remove(), durationMs + 100);\r\n}\r\n\r\nexport function playFullSequence(options: PlaySequenceOptions = {}): void {\r\n const {\r\n shake = true,\r\n scanlines: showScanlines = true,\r\n scanlinesDurationMs = 2400,\r\n count,\r\n durationMs,\r\n sizeRange,\r\n driftRange,\r\n } = options;\r\n\r\n if (shake) shakeScreen();\r\n if (showScanlines) scanlines(scanlinesDurationMs);\r\n rainLogos({ count: count ?? 60, durationMs: durationMs ?? 3600, sizeRange, driftRange });\r\n}\r\n\r\nfunction prefersReducedMotion(): boolean {\r\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') return false;\r\n return window.matchMedia('(prefers-reduced-motion: reduce)').matches;\r\n}\r\n\r\nfunction randomInt(min: number, max: number): number {\r\n return Math.floor(min + Math.random() * (max - min + 1));\r\n}\r\n\r\nexport interface ChristmasModeOptions {\r\n spawnIntervalMs?: number;\r\n reducedSpawnIntervalMs?: number;\r\n flakeDurationMs?: number;\r\n flakeSizeRange?: [number, number];\r\n driftRange?: [number, number];\r\n settleThreshold?: number;\r\n maxPilePx?: number;\r\n maxLiveFlakes?: number;\r\n}\r\n\r\nconst HAT_SVG =\r\n ''\r\n + ''\r\n + ''\r\n + ''\r\n + ''\r\n + ''\r\n + '';\r\n\r\nconst FLAKE_GLYPHS = ['❄', '❅', '❆', '*'];\r\nconst HIDDEN_TEXT_INDENT = '-9999em';\r\n\r\nconst CHRISTMAS_DEFAULTS = {\r\n spawnIntervalMs: 220,\r\n reducedSpawnIntervalMs: 1400,\r\n flakeDurationMs: 3600,\r\n flakeSizeRange: [6, 12] as [number, number],\r\n driftRange: [4, 14] as [number, number],\r\n settleThreshold: 18,\r\n maxPilePx: 10,\r\n maxLiveFlakes: 36,\r\n};\r\n\r\nexport class ChristmasMode {\r\n private readonly options: typeof CHRISTMAS_DEFAULTS;\r\n private logo: HTMLElement | null = null;\r\n private layer: HTMLElement | null = null;\r\n private pile: HTMLElement | null = null;\r\n private hat: HTMLElement | null = null;\r\n private spawnTimer: number | null = null;\r\n private settledCount = 0;\r\n private originalPosition: string | null = null;\r\n private originalOverflow: string | null = null;\r\n private originalTextIndent: string | null = null;\r\n private positionTouched = false;\r\n private overflowTouched = false;\r\n private textIndentTouched = false;\r\n private flakeTimers = new Set();\r\n private flakesInFlight = 0;\r\n\r\n constructor(options: ChristmasModeOptions = {}) {\r\n this.options = {\r\n ...CHRISTMAS_DEFAULTS,\r\n ...options,\r\n flakeSizeRange: options.flakeSizeRange ?? CHRISTMAS_DEFAULTS.flakeSizeRange,\r\n driftRange: options.driftRange ?? CHRISTMAS_DEFAULTS.driftRange,\r\n };\r\n }\r\n\r\n attach(logo: HTMLElement | null | undefined): void {\r\n if (!logo || typeof document === 'undefined') return;\r\n if (this.logo === logo) return;\r\n if (this.logo) this.dispose();\r\n\r\n ensureStyles();\r\n\r\n this.logo = logo;\r\n this.originalPosition = logo.style.position;\r\n this.originalOverflow = logo.style.overflow;\r\n this.originalTextIndent = logo.style.textIndent;\r\n\r\n const computed = getComputedStyle(logo);\r\n if (computed.position === 'static') {\r\n logo.style.position = 'relative';\r\n this.positionTouched = true;\r\n }\r\n if (computed.overflow !== 'visible') {\r\n logo.style.overflow = 'visible';\r\n this.overflowTouched = true;\r\n }\r\n if (computed.textIndent !== HIDDEN_TEXT_INDENT) {\r\n logo.style.textIndent = HIDDEN_TEXT_INDENT;\r\n this.textIndentTouched = true;\r\n }\r\n\r\n const layer = document.createElement('span');\r\n layer.className = 'ee-snow-layer';\r\n layer.setAttribute('aria-hidden', 'true');\r\n\r\n const pile = document.createElement('span');\r\n pile.className = 'ee-snowpile';\r\n pile.style.setProperty('--ee-pile-height', '0px');\r\n const maskUrl = extractBackgroundImageUrl(computed.backgroundImage);\r\n if (maskUrl) {\r\n pile.style.setProperty('--ee-mask-url', `url(\"${maskUrl}\")`);\r\n }\r\n layer.appendChild(pile);\r\n\r\n const hat = document.createElement('span');\r\n hat.className = 'ee-santa-hat';\r\n hat.setAttribute('aria-hidden', 'true');\r\n hat.innerHTML = HAT_SVG;\r\n\r\n logo.appendChild(layer);\r\n logo.appendChild(hat);\r\n logo.classList.add('ee-christmas-active');\r\n\r\n this.layer = layer;\r\n this.pile = pile;\r\n this.hat = hat;\r\n\r\n this.startSpawning();\r\n }\r\n\r\n reset(): void {\r\n this.stopSpawning();\r\n this.clearFlakeTimers();\r\n this.settledCount = 0;\r\n this.flakesInFlight = 0;\r\n if (this.pile) this.pile.style.setProperty('--ee-pile-height', '0px');\r\n if (this.layer) this.layer.querySelectorAll('.ee-snowflake').forEach((n) => n.remove());\r\n if (this.logo) {\r\n this.logo.classList.remove('ee-logo-frosty');\r\n this.startSpawning();\r\n }\r\n }\r\n\r\n dispose(): void {\r\n this.stopSpawning();\r\n this.clearFlakeTimers();\r\n\r\n if (this.logo) {\r\n this.logo.classList.remove('ee-logo-frosty');\r\n this.logo.classList.remove('ee-christmas-active');\r\n if (this.positionTouched) this.logo.style.position = this.originalPosition ?? '';\r\n if (this.overflowTouched) this.logo.style.overflow = this.originalOverflow ?? '';\r\n if (this.textIndentTouched) this.logo.style.textIndent = this.originalTextIndent ?? '';\r\n }\r\n this.layer?.remove();\r\n this.hat?.remove();\r\n\r\n this.logo = null;\r\n this.layer = null;\r\n this.pile = null;\r\n this.hat = null;\r\n this.originalPosition = null;\r\n this.originalOverflow = null;\r\n this.originalTextIndent = null;\r\n this.positionTouched = false;\r\n this.overflowTouched = false;\r\n this.textIndentTouched = false;\r\n this.settledCount = 0;\r\n this.flakesInFlight = 0;\r\n }\r\n\r\n isAttached(): boolean {\r\n return this.logo !== null;\r\n }\r\n\r\n spawnFlake(): void {\r\n if (!this.layer) return;\r\n if (this.flakesInFlight >= this.options.maxLiveFlakes) return;\r\n\r\n const flake = document.createElement('span');\r\n flake.className = 'ee-snowflake';\r\n flake.textContent = FLAKE_GLYPHS[Math.floor(Math.random() * FLAKE_GLYPHS.length)];\r\n\r\n const [minSize, maxSize] = this.options.flakeSizeRange;\r\n const [minDrift, maxDrift] = this.options.driftRange;\r\n const size = randomInt(minSize, maxSize);\r\n const drift = randomInt(minDrift, maxDrift) * (Math.random() < 0.5 ? -1 : 1);\r\n const left = Math.random() * 100;\r\n const variance = Math.floor(this.options.flakeDurationMs * 0.15);\r\n const duration = Math.max(50, this.options.flakeDurationMs + randomInt(-variance, variance));\r\n const opacity = 0.7 + Math.random() * 0.3;\r\n\r\n flake.style.setProperty('--ee-flake-size', `${size}px`);\r\n flake.style.setProperty('--ee-flake-drift', `${drift}px`);\r\n flake.style.setProperty('--ee-flake-duration', `${duration}ms`);\r\n flake.style.setProperty('--ee-flake-opacity', opacity.toFixed(2));\r\n flake.style.left = `${left}%`;\r\n\r\n this.layer.appendChild(flake);\r\n this.flakesInFlight++;\r\n\r\n const timerId = window.setTimeout(() => {\r\n this.flakeTimers.delete(timerId);\r\n flake.remove();\r\n this.flakesInFlight = Math.max(0, this.flakesInFlight - 1);\r\n this.onFlakeSettled();\r\n }, duration);\r\n this.flakeTimers.add(timerId);\r\n }\r\n\r\n private startSpawning(): void {\r\n if (this.spawnTimer !== null) return;\r\n if (typeof window === 'undefined') return;\r\n const interval = prefersReducedMotion() ? this.options.reducedSpawnIntervalMs : this.options.spawnIntervalMs;\r\n this.spawnTimer = window.setInterval(() => this.spawnFlake(), interval);\r\n }\r\n\r\n private stopSpawning(): void {\r\n if (this.spawnTimer === null) return;\r\n window.clearInterval(this.spawnTimer);\r\n this.spawnTimer = null;\r\n }\r\n\r\n private clearFlakeTimers(): void {\r\n this.flakeTimers.forEach((id) => window.clearTimeout(id));\r\n this.flakeTimers.clear();\r\n }\r\n\r\n private onFlakeSettled(): void {\r\n if (!this.logo || !this.pile) return;\r\n this.settledCount++;\r\n const ratio = Math.min(1, this.settledCount / this.options.settleThreshold);\r\n const pileHeight = Math.round(ratio * this.options.maxPilePx);\r\n this.pile.style.setProperty('--ee-pile-height', `${pileHeight}px`);\r\n if (this.settledCount >= this.options.settleThreshold) {\r\n this.logo.classList.add('ee-logo-frosty');\r\n }\r\n }\r\n}\r\n\r\nfunction extractBackgroundImageUrl(value: string | undefined): string | null {\r\n if (!value || value === 'none') return null;\r\n const match = value.match(/url\\(\\s*[\"']?([^\"')]+)[\"']?\\s*\\)/i);\r\n return match ? match[1] : null;\r\n}\r\n","import { FeatureFlag } from 'feature-flags';\r\n\r\nexport const defaultFeatureFlags: Partial> = {\r\n [FeatureFlag.christmas]: false,\r\n};\r\n","import { autoinject } from 'aurelia-framework';\r\nimport { FeatureFlag } from 'feature-flags';\r\nimport {\r\n FeatureFlagChange,\r\n FeatureFlagChangeListener,\r\n FeatureFlagMap,\r\n FeatureFlagState,\r\n IFeatureFlagService,\r\n} from './i-feature-flag';\r\n\r\ntype HeaderSource = Headers | Record;\r\n\r\nconst STORAGE_KEY = 'featureFlags';\r\nconst CHANGE_EVENT_NAME = 'feature-flags:changed';\r\nconst COOKIE_KEYS = ['featureFlags', 'ia_feature_flags'];\r\nconst HEADER_KEYS = ['X-Feature-Flags', 'Feature-Flags', 'X-IA-Feature-Flags'];\r\nconst TRUE_VALUES = ['true', '1', 'yes', 'y', 'on', 'enabled'];\r\nconst FALSE_VALUES = ['false', '0', 'no', 'n', 'off', 'disabled'];\r\n\r\n@autoinject\r\nexport class FeatureFlagService implements IFeatureFlagService {\r\n private codeFlags: FeatureFlagMap = {};\r\n private serverFlags: FeatureFlagMap = {};\r\n private serverCookieFlags: FeatureFlagMap = {};\r\n private serverHeaderFlags: FeatureFlagMap = {};\r\n private memoryFlags: FeatureFlagMap = {};\r\n private listeners: FeatureFlagChangeListener[] = [];\r\n\r\n constructor() {\r\n this.ensureFlagsInitialized();\r\n this.load();\r\n }\r\n\r\n private ensureFlagsInitialized(): void {\r\n if (typeof window === 'undefined') {\r\n return;\r\n }\r\n\r\n if (!window.featureFlags || typeof window.featureFlags !== 'object') {\r\n window.featureFlags = {};\r\n }\r\n }\r\n\r\n public enabled(flag: FeatureFlag): boolean {\r\n this.syncEffectiveFlags();\r\n return this.flags()[flag] === true;\r\n }\r\n\r\n public add(flag: FeatureFlag): void {\r\n this.setLocalOverride(flag, true);\r\n }\r\n\r\n public remove(flag: FeatureFlag): void {\r\n this.setLocalOverride(flag, false);\r\n }\r\n\r\n public all(): FeatureFlagMap {\r\n this.syncEffectiveFlags();\r\n return { ...this.flags() };\r\n }\r\n\r\n public known(): FeatureFlag[] {\r\n return this.knownFlags();\r\n }\r\n\r\n public state(flag: FeatureFlag): FeatureFlagState {\r\n this.syncEffectiveFlags();\r\n return this.createFlagState(flag);\r\n }\r\n\r\n public snapshot(): Partial> {\r\n this.syncEffectiveFlags();\r\n return this.createSnapshot();\r\n }\r\n\r\n public onChange(listener: FeatureFlagChangeListener): () => void {\r\n this.listeners.push(listener);\r\n\r\n return () => {\r\n this.listeners = this.listeners.filter((candidate) => candidate !== listener);\r\n };\r\n }\r\n\r\n public load(defaults: FeatureFlagMap = {}): void {\r\n this.codeFlags = this.normaliseFlagRecord(defaults);\r\n this.serverCookieFlags = this.readCookieFlags();\r\n this.serverHeaderFlags = {};\r\n this.syncServerFlags();\r\n this.syncEffectiveFlags();\r\n }\r\n\r\n public refresh(): void {\r\n this.serverCookieFlags = this.readCookieFlags();\r\n this.syncServerFlags();\r\n this.syncEffectiveFlags();\r\n }\r\n\r\n public applyServerFlagsFromResponse(response: Response): void {\r\n if (!response) {\r\n return;\r\n }\r\n\r\n this.applyServerFlagsFromCookie();\r\n this.applyServerFlagsFromHeaders(response.headers);\r\n }\r\n\r\n public applyServerFlagsFromHeaders(headers?: HeaderSource | null): void {\r\n this.applyServerHeaderFlags(this.readHeaderFlags(headers));\r\n }\r\n\r\n public applyServerFlagsFromCookie(cookie?: string): void {\r\n this.applyServerCookieFlags(this.readCookieFlags(cookie));\r\n }\r\n\r\n public setLocalOverride(flag: FeatureFlag, value: boolean): void {\r\n if (!this.isKnownFlag(flag)) {\r\n return;\r\n }\r\n\r\n this.persistLocalFlag(flag, value);\r\n this.syncEffectiveFlags();\r\n }\r\n\r\n public clearLocalOverride(flag: FeatureFlag): void {\r\n if (!this.isKnownFlag(flag)) {\r\n return;\r\n }\r\n\r\n const savedFlags = this.readSavedFlags();\r\n if (!this.hasFlag(savedFlags, flag)) {\r\n return;\r\n }\r\n\r\n delete savedFlags[flag];\r\n this.writeSavedFlags(savedFlags);\r\n this.syncEffectiveFlags();\r\n }\r\n\r\n public clearLocalOverrides(): void {\r\n this.writeSavedFlags({});\r\n this.syncEffectiveFlags();\r\n }\r\n\r\n private persistLocalFlag(flag: FeatureFlag, value: boolean): void {\r\n try {\r\n if (typeof localStorage !== 'undefined') {\r\n const savedFlags = this.readSavedFlags();\r\n savedFlags[flag] = value;\r\n this.writeSavedFlags(savedFlags);\r\n }\r\n } catch {\r\n // Storage may be blocked or full; keep the in-memory flags usable.\r\n }\r\n }\r\n\r\n private writeSavedFlags(flags: FeatureFlagMap): void {\r\n try {\r\n if (typeof localStorage === 'undefined') {\r\n return;\r\n }\r\n\r\n const normalisedFlags = this.normaliseFlagRecord(flags);\r\n if (Object.keys(normalisedFlags).length === 0) {\r\n localStorage.removeItem(STORAGE_KEY);\r\n return;\r\n }\r\n\r\n localStorage.setItem(STORAGE_KEY, JSON.stringify(normalisedFlags));\r\n } catch {\r\n // Storage may be blocked or full; keep the in-memory flags usable.\r\n }\r\n }\r\n\r\n private applyServerCookieFlags(flags: FeatureFlagMap): void {\r\n if (Object.keys(flags).length === 0) {\r\n return;\r\n }\r\n\r\n this.mergeFlags(this.serverCookieFlags, flags);\r\n this.syncServerFlags();\r\n this.syncEffectiveFlags();\r\n }\r\n\r\n private applyServerHeaderFlags(flags: FeatureFlagMap): void {\r\n if (Object.keys(flags).length === 0) {\r\n return;\r\n }\r\n\r\n this.mergeFlags(this.serverHeaderFlags, flags);\r\n this.syncServerFlags();\r\n this.syncEffectiveFlags();\r\n }\r\n\r\n private syncServerFlags(): void {\r\n const flags: FeatureFlagMap = {};\r\n\r\n this.mergeFlags(flags, this.serverCookieFlags);\r\n this.mergeFlags(flags, this.serverHeaderFlags);\r\n\r\n this.serverFlags = flags;\r\n }\r\n\r\n private syncEffectiveFlags(): void {\r\n const previousFlags = this.flags();\r\n const nextFlags = this.normaliseFlagRecord(this.effectiveFlags());\r\n const changed = this.serialiseFlags(previousFlags) !== this.serialiseFlags(nextFlags);\r\n\r\n this.replaceFlags(nextFlags);\r\n\r\n if (changed) {\r\n this.notifyChange(nextFlags);\r\n }\r\n }\r\n\r\n private effectiveFlags(): FeatureFlagMap {\r\n const flags: FeatureFlagMap = {};\r\n\r\n this.mergeFlags(flags, this.codeFlags);\r\n this.mergeFlags(flags, this.serverFlags);\r\n this.mergeFlags(flags, this.readSavedFlags());\r\n\r\n return flags;\r\n }\r\n\r\n private flags(): FeatureFlagMap {\r\n if (typeof window === 'undefined') {\r\n return this.memoryFlags;\r\n }\r\n\r\n this.ensureFlagsInitialized();\r\n return window.featureFlags!;\r\n }\r\n\r\n private replaceFlags(flags: FeatureFlagMap): void {\r\n const nextFlags = this.normaliseFlagRecord(flags);\r\n\r\n if (typeof window === 'undefined') {\r\n this.memoryFlags = nextFlags;\r\n return;\r\n }\r\n\r\n window.featureFlags = nextFlags;\r\n }\r\n\r\n private readSavedFlags(): FeatureFlagMap {\r\n try {\r\n if (typeof localStorage === 'undefined') {\r\n return {};\r\n }\r\n\r\n return this.parseFlagPayload(localStorage.getItem(STORAGE_KEY));\r\n } catch {\r\n return {};\r\n }\r\n }\r\n\r\n private readHeaderFlags(headers?: HeaderSource | null): FeatureFlagMap {\r\n if (!headers) {\r\n return {};\r\n }\r\n\r\n const flags: FeatureFlagMap = {};\r\n\r\n for (const headerKey of HEADER_KEYS) {\r\n this.mergeFlags(flags, this.parseFlagPayload(this.getHeaderValue(headers, headerKey)));\r\n }\r\n\r\n return flags;\r\n }\r\n\r\n private readCookieFlags(cookie = this.getDocumentCookie()): FeatureFlagMap {\r\n const cookies = this.parseCookieHeader(cookie);\r\n const flags: FeatureFlagMap = {};\r\n\r\n for (const cookieKey of COOKIE_KEYS) {\r\n if (cookies[cookieKey]) {\r\n this.mergeFlags(flags, this.parseFlagPayload(cookies[cookieKey]));\r\n }\r\n }\r\n\r\n return flags;\r\n }\r\n\r\n private getHeaderValue(headers: HeaderSource, key: string): string | null {\r\n if (typeof (headers as Headers).get === 'function') {\r\n try {\r\n return (headers as Headers).get(key);\r\n } catch {\r\n return null;\r\n }\r\n }\r\n\r\n const record = headers as Record;\r\n const targetKey = key.toLowerCase();\r\n\r\n for (const recordKey of Object.keys(record)) {\r\n if (recordKey.toLowerCase() === targetKey) {\r\n return record[recordKey] ?? null;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private getDocumentCookie(): string {\r\n try {\r\n return typeof document !== 'undefined' ? document.cookie : '';\r\n } catch {\r\n return '';\r\n }\r\n }\r\n\r\n private parseCookieHeader(cookie: string): Record {\r\n const cookies: Record = {};\r\n\r\n for (const part of (cookie || '').split(';')) {\r\n const separatorIndex = part.indexOf('=');\r\n if (separatorIndex === -1) {\r\n continue;\r\n }\r\n\r\n const key = part.slice(0, separatorIndex).trim();\r\n const value = part.slice(separatorIndex + 1).trim();\r\n\r\n if (key) {\r\n cookies[key] = this.safeDecode(value);\r\n }\r\n }\r\n\r\n return cookies;\r\n }\r\n\r\n private parseFlagPayload(payload: string | null | undefined): FeatureFlagMap {\r\n const text = this.safeDecode(payload || '').trim();\r\n if (!text) {\r\n return {};\r\n }\r\n\r\n const jsonFlags = this.parseJsonFlags(text);\r\n if (jsonFlags) {\r\n return jsonFlags;\r\n }\r\n\r\n return this.parseDelimitedFlags(text);\r\n }\r\n\r\n private parseJsonFlags(text: string): FeatureFlagMap | null {\r\n try {\r\n const parsed = JSON.parse(text);\r\n\r\n if (Array.isArray(parsed)) {\r\n const flags: FeatureFlagMap = {};\r\n for (const flagName of parsed) {\r\n const flag = this.normaliseFlagName(String(flagName));\r\n if (flag) {\r\n flags[flag] = true;\r\n }\r\n }\r\n return flags;\r\n }\r\n\r\n if (parsed && typeof parsed === 'object') {\r\n return this.normaliseFlagRecord(parsed as Record);\r\n }\r\n } catch {\r\n return null;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private parseDelimitedFlags(text: string): FeatureFlagMap {\r\n const flags: FeatureFlagMap = {};\r\n\r\n for (const part of text.split(/[;,]/)) {\r\n const entry = part.trim();\r\n if (!entry) {\r\n continue;\r\n }\r\n\r\n const separatorIndex = this.findFlagValueSeparator(entry);\r\n const name = separatorIndex === -1 ? entry : entry.slice(0, separatorIndex);\r\n const rawValue = separatorIndex === -1 ? 'true' : entry.slice(separatorIndex + 1);\r\n const flag = this.normaliseFlagName(name);\r\n const value = this.parseBoolean(rawValue);\r\n\r\n if (flag && value !== null) {\r\n flags[flag] = value;\r\n }\r\n }\r\n\r\n return flags;\r\n }\r\n\r\n private findFlagValueSeparator(entry: string): number {\r\n const equalsIndex = entry.indexOf('=');\r\n const colonIndex = entry.indexOf(':');\r\n\r\n if (equalsIndex === -1) {\r\n return colonIndex;\r\n }\r\n\r\n if (colonIndex === -1) {\r\n return equalsIndex;\r\n }\r\n\r\n return Math.min(equalsIndex, colonIndex);\r\n }\r\n\r\n private normaliseFlagRecord(record: Record): FeatureFlagMap {\r\n const flags: FeatureFlagMap = {};\r\n\r\n for (const key of Object.keys(record)) {\r\n const flag = this.normaliseFlagName(key);\r\n const value = this.parseBoolean(record[key]);\r\n\r\n if (flag && value !== null) {\r\n flags[flag] = value;\r\n }\r\n }\r\n\r\n return flags;\r\n }\r\n\r\n private normaliseFlagName(name: string): FeatureFlag | null {\r\n const normalisedName = this.trimQuotes(name).toLowerCase();\r\n\r\n for (const flagKey of Object.keys(FeatureFlag)) {\r\n const flag = FeatureFlag[flagKey as keyof typeof FeatureFlag];\r\n if (flagKey.toLowerCase() === normalisedName || flag.toLowerCase() === normalisedName) {\r\n return flag;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private parseBoolean(value: unknown): boolean | null {\r\n if (typeof value === 'boolean') {\r\n return value;\r\n }\r\n\r\n if (typeof value === 'number') {\r\n if (value === 1) {\r\n return true;\r\n }\r\n\r\n if (value === 0) {\r\n return false;\r\n }\r\n }\r\n\r\n if (typeof value === 'string') {\r\n const normalisedValue = this.trimQuotes(value).toLowerCase();\r\n if (TRUE_VALUES.indexOf(normalisedValue) !== -1) {\r\n return true;\r\n }\r\n\r\n if (FALSE_VALUES.indexOf(normalisedValue) !== -1) {\r\n return false;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private mergeFlags(target: FeatureFlagMap, source: FeatureFlagMap): void {\r\n for (const flag of this.knownFlags()) {\r\n if (Object.prototype.hasOwnProperty.call(source, flag)) {\r\n target[flag] = source[flag];\r\n }\r\n }\r\n }\r\n\r\n private createSnapshot(): Partial> {\r\n const states: Partial> = {};\r\n\r\n for (const flag of this.knownFlags()) {\r\n states[flag] = this.createFlagState(flag);\r\n }\r\n\r\n return states;\r\n }\r\n\r\n private createFlagState(flag: FeatureFlag): FeatureFlagState {\r\n const localFlags = this.readSavedFlags();\r\n const hasLocalValue = this.hasFlag(localFlags, flag);\r\n const hasServerValue = this.hasFlag(this.serverFlags, flag);\r\n const hasCodeValue = this.hasFlag(this.codeFlags, flag);\r\n const value = this.flags()[flag] === true;\r\n\r\n return {\r\n flag,\r\n enabled: value,\r\n value,\r\n source: hasLocalValue ? 'local' : hasServerValue ? 'server' : hasCodeValue ? 'code' : 'none',\r\n codeValue: hasCodeValue ? this.codeFlags[flag] : undefined,\r\n serverValue: hasServerValue ? this.serverFlags[flag] : undefined,\r\n localValue: hasLocalValue ? localFlags[flag] : undefined,\r\n };\r\n }\r\n\r\n private notifyChange(flags: FeatureFlagMap): void {\r\n const change: FeatureFlagChange = {\r\n flags: { ...flags },\r\n states: this.createSnapshot(),\r\n };\r\n\r\n for (const listener of this.listeners) {\r\n try {\r\n listener(change);\r\n } catch {\r\n // Listener failures should not make feature flag state unusable.\r\n }\r\n }\r\n\r\n try {\r\n if (typeof window !== 'undefined' && typeof window.dispatchEvent === 'function') {\r\n window.dispatchEvent(new CustomEvent(CHANGE_EVENT_NAME, { detail: change }));\r\n }\r\n } catch {\r\n // Some test/runtime environments do not support CustomEvent.\r\n }\r\n }\r\n\r\n private serialiseFlags(flags: FeatureFlagMap): string {\r\n return this.knownFlags()\r\n .map((flag) => {\r\n if (!this.hasFlag(flags, flag)) {\r\n return `${flag}:`;\r\n }\r\n\r\n return `${flag}:${flags[flag] === true ? '1' : '0'}`;\r\n })\r\n .join('|');\r\n }\r\n\r\n private knownFlags(): FeatureFlag[] {\r\n return Object.keys(FeatureFlag).map((flagKey) => FeatureFlag[flagKey as keyof typeof FeatureFlag]);\r\n }\r\n\r\n private isKnownFlag(flag: FeatureFlag): boolean {\r\n return this.knownFlags().indexOf(flag) !== -1;\r\n }\r\n\r\n private hasFlag(flags: FeatureFlagMap, flag: FeatureFlag): boolean {\r\n return Object.prototype.hasOwnProperty.call(flags, flag);\r\n }\r\n\r\n private trimQuotes(value: string): string {\r\n return value.trim().replace(/^['\"]|['\"]$/g, '');\r\n }\r\n\r\n private safeDecode(value: string): string {\r\n try {\r\n return decodeURIComponent(value);\r\n } catch {\r\n return value;\r\n }\r\n }\r\n}\r\n","import { Container, FrameworkConfiguration } from 'aurelia-framework';\r\nimport { FeatureFlag as FeatureFlags } from 'feature-flags';\r\nimport { FeatureFlagService } from './feature-flags-service';\r\nimport { FeatureFlagMap, FeatureFlagState, IFeatureFlagService } from './i-feature-flag';\r\n\r\ninterface FeatureFlagsPluginConfiguration {\r\n defaultFlags?: Partial>;\r\n}\r\n\r\ninterface FeatureFlagGuardOptions {\r\n whenDisabled?: (this: This, ...args: Args) => Return;\r\n}\r\n\r\nlet configuredContainer: Container | null = null;\r\n\r\nexport function configure(config: FrameworkConfiguration, options: FeatureFlagsPluginConfiguration = {}) {\r\n const featureFlagService = config.container.get(FeatureFlagService);\r\n configuredContainer = config.container;\r\n\r\n // Register handlers for feature flags\r\n for (const flagKey in FeatureFlags) {\r\n if (Object.prototype.hasOwnProperty.call(FeatureFlags, flagKey)) {\r\n const flagIdentifier = FeatureFlags[flagKey];\r\n\r\n config.container.registerHandler(flagIdentifier, () => {\r\n return featureFlagService.enabled(flagIdentifier);\r\n });\r\n }\r\n }\r\n\r\n // Load default feature flags if provided\r\n if (options.defaultFlags) {\r\n featureFlagService.load(options.defaultFlags);\r\n }\r\n}\r\n\r\nexport function featureFlag(flagIdentifier: FeatureFlags) {\r\n return function featureFlagPropertyDecorator(target: unknown, key: string | symbol): void {\r\n if (typeof key === 'undefined') {\r\n throw new TypeError('@featureFlag requires a property key.');\r\n }\r\n\r\n defineFlagBackedProperty(target as Record, key, () =>\r\n resolveFeatureFlagService().enabled(flagIdentifier)\r\n );\r\n };\r\n}\r\n\r\nexport function featureFlagState(flagIdentifier: FeatureFlags) {\r\n return function featureFlagStatePropertyDecorator(target: unknown, key: string | symbol): void {\r\n if (typeof key === 'undefined') {\r\n throw new TypeError('@featureFlagState requires a property key.');\r\n }\r\n\r\n defineFlagBackedProperty(target as Record, key, () =>\r\n resolveFeatureFlagService().state(flagIdentifier)\r\n );\r\n };\r\n}\r\n\r\nexport function featureFlagsSnapshot() {\r\n return function featureFlagsSnapshotPropertyDecorator(target: unknown, key: string | symbol): void {\r\n if (typeof key === 'undefined') {\r\n throw new TypeError('@featureFlagsSnapshot requires a property key.');\r\n }\r\n\r\n defineFlagBackedProperty(target as Record, key, () =>\r\n resolveFeatureFlagService().snapshot()\r\n );\r\n };\r\n}\r\n\r\nexport function requiresFeatureFlag(\r\n flagIdentifier: FeatureFlags,\r\n options: FeatureFlagGuardOptions = {},\r\n) {\r\n return function requiresFeatureFlagMethodDecorator(\r\n target: unknown,\r\n key: string | symbol,\r\n descriptor: PropertyDescriptor,\r\n ): PropertyDescriptor {\r\n if (!descriptor || typeof descriptor.value !== 'function') {\r\n throw new TypeError('@requiresFeatureFlag can only decorate methods.');\r\n }\r\n\r\n const originalMethod = descriptor.value;\r\n descriptor.value = function (...args: unknown[]) {\r\n if (resolveFeatureFlagService().enabled(flagIdentifier)) {\r\n return originalMethod.apply(this, args);\r\n }\r\n\r\n return options.whenDisabled?.apply(this, args);\r\n };\r\n\r\n return descriptor;\r\n };\r\n}\r\n\r\nfunction defineFlagBackedProperty(\r\n target: Record,\r\n key: string | symbol,\r\n getter: () => TValue,\r\n): void {\r\n if (!Reflect.deleteProperty(target, key)) {\r\n // ensure property cleared even if configurable false\r\n delete target[key];\r\n }\r\n\r\n Object.defineProperty(target, key, {\r\n get: getter,\r\n enumerable: true,\r\n configurable: true,\r\n });\r\n}\r\n\r\nfunction resolveFeatureFlagService(): IFeatureFlagService {\r\n const container = Container.instance ?? configuredContainer;\r\n\r\n if (!container) {\r\n throw new Error('No Aurelia container is available. Ensure the feature flag plugin is configured before use.');\r\n }\r\n\r\n return container.get(FeatureFlagService);\r\n}\r\n\r\nexport type {\r\n FeatureFlagGuardOptions,\r\n FeatureFlagMap,\r\n FeatureFlagState,\r\n};\r\n","type SequenceCallback = () => void;\r\n\r\nexport class KeyboardSequenceDetector {\r\n private sequences: Map = new Map();\r\n private listenerAttached = false;\r\n\r\n constructor() {\r\n // The constructor no longer automatically calls listenForKeySequence to allow for lazy loading\r\n }\r\n\r\n public registerSequence(label: string, keySequence: string[], callback: SequenceCallback): void {\r\n if (!this.listenerAttached) {\r\n this.listenForKeySequence();\r\n this.listenerAttached = true;\r\n }\r\n this.sequences.set(label, { sequence: keySequence, callback: callback, currentIndex: 0 });\r\n }\r\n\r\n public removeSequence(label: string): void {\r\n if (this.sequences.delete(label) && this.sequences.size === 0 && this.listenerAttached) {\r\n document.removeEventListener('keydown', this.handleKeydownBound);\r\n this.listenerAttached = false;\r\n }\r\n }\r\n\r\n private listenForKeySequence(): void {\r\n this.handleKeydownBound = this.handleKeydown.bind(this); // Store the bound function for removal\r\n document.addEventListener('keydown', this.handleKeydownBound);\r\n }\r\n\r\n private handleKeydownBound: (this: this, ev: KeyboardEvent) => any; // Define the type for the bound function\r\n\r\n private handleKeydown(event: KeyboardEvent): void {\r\n this.sequences.forEach((value, key) => {\r\n if (event.key === value.sequence[value.currentIndex]) {\r\n value.currentIndex++;\r\n\r\n if (value.currentIndex === value.sequence.length) {\r\n value.callback();\r\n value.currentIndex = 0; // Reset index to allow the sequence to be entered again.\r\n }\r\n } else {\r\n if (value.sequence.includes(event.key)) {\r\n value.currentIndex = 0; // Reset index if the sequence is broken.\r\n }\r\n }\r\n });\r\n }\r\n}\r\n\r\n// Usage\r\n// const detector = new KeyboardSequenceDetector();\r\n\r\n// // Register the Konami Code with a label\r\n// detector.registerSequence('konami', ['ArrowUp', 'ArrowUp', 'ArrowDown', 'ArrowDown', 'ArrowLeft', 'ArrowRight', 'ArrowLeft', 'ArrowRight', 'b', 'a'], () => {\r\n// console.log('Konami Code entered!');\r\n// // Trigger any action here\r\n// });\r\n\r\n// Remove the Konami Code sequence by its label\r\n// detector.removeSequence('konami');\r\n","/* istanbul ignore file */\r\n\r\nimport { EventAggregator } from 'aurelia-event-aggregator';\r\nimport { autoinject } from 'aurelia-dependency-injection';\r\nimport { Next, NavigationInstruction } from 'aurelia-router';\r\nimport { TaskQueue } from 'aurelia-framework';\r\nimport { PLATFORM } from 'aurelia-pal';\r\nimport { HttpClient } from 'aurelia-fetch-client';\r\nimport { getAppClientType, getAppClientInstance } from './parse-jwt';\r\n\r\n@autoinject()\r\nexport class PostRenderStep {\r\n constructor(private taskQueue: TaskQueue, private http: HttpClient, private ea: EventAggregator) {}\r\n\r\n async run(navigationInstruction: NavigationInstruction, next: Next) {\r\n this.taskQueue.queueMicroTask(() => {\r\n PLATFORM.global.scrollTo(0, 0);\r\n });\r\n\r\n if (!window.location.href.includes('localhost')) {\r\n const appClientType = getAppClientType();\r\n const appClientInstance = getAppClientInstance();\r\n const url = `/index_${appClientType.toLowerCase()}_${appClientInstance.toLowerCase()}.html`;\r\n\r\n await this.http\r\n .fetch(url, {\r\n method: 'HEAD',\r\n headers: {\r\n 'If-Modified-Since': localStorage.getItem('indexLastModified'),\r\n },\r\n })\r\n .then((response) => {\r\n if (response.headers.get('Last-modified')) {\r\n localStorage.setItem('indexLastModified', response.headers.get('Last-modified'));\r\n }\r\n\r\n if (response.status === 200) {\r\n this.ea.publish('promptForRefresh');\r\n }\r\n });\r\n }\r\n\r\n return next();\r\n }\r\n}\r\n","/* istanbul ignore file */\r\n\r\nimport { TaskNotificationTypes } from './enums';\r\nimport moment from 'moment';\r\n\r\nexport function prepareTasks(taskNotificationTypeId, tasks){\r\n switch (taskNotificationTypeId) {\r\n case TaskNotificationTypes.ALL:\r\n\r\n break;\r\n case TaskNotificationTypes.OVERDUE:\r\n tasks.forEach(x => {\r\n x.overdue=true;\r\n if(x.dueDate.split('T')[0] === moment().subtract('1', 'day').format('YYYY-MM-DD')){\r\n x.yesterday = true;\r\n x.dueDateLabel = 'Yesterday'\r\n }\r\n });\r\n break;\r\n case TaskNotificationTypes.DUE_TODAY:\r\n tasks.forEach(x => {\r\n x.duetoday=true;\r\n x.dueDateLabel = 'Today'\r\n });\r\n break;\r\n case TaskNotificationTypes.UPCOMING:\r\n tasks.forEach(x => {\r\n x.upcoming=true;\r\n\r\n if(x.dueDate.split('T')[0] === moment().add('1', 'day').format('YYYY-MM-DD')){\r\n x.tomorrow = true;\r\n x.dueDateLabel = 'Tomorrow'\r\n }\r\n });\r\n break;\r\n case TaskNotificationTypes.COMPLETE:\r\n tasks.forEach(x => {\r\n x.isCompletedTask=true;\r\n });\r\n // const result = (await response.json()).map(x => {\r\n // return {\r\n // isCompletedTask: true,\r\n // ...x, }\r\n // } );\r\n break;\r\n }\r\n\r\n return tasks;\r\n}\r\n","/* istanbul ignore file */\r\n\r\nexport class PreRenderStep {\r\n run(navigationInstruction, next) {\r\n const currentRoute = navigationInstruction.config;\r\n\r\n const currentRouteName = currentRoute.name;\r\n\r\n document.body.className = '';\r\n document.body.classList.add(`route--${currentRouteName}`);\r\n\r\n return next();\r\n }\r\n}\r\n","/* istanbul ignore file */\r\n\r\nexport function scrollIntoView(tableClassName, rowClassName = 'table-row-selected_') {\r\n setTimeout(() => {\r\n const tables = Array.from(document.querySelectorAll('table:not(.aurelia-hide)'));\r\n const table = tables.find((x) => x.className.includes(tableClassName)) as HTMLElement;\r\n if (table) {\r\n const tableRows = Array.from(table.querySelectorAll('tbody>tr'));\r\n const selectedTr = tableRows.find((x) => x.className.includes(rowClassName)) as HTMLElement;\r\n selectedTr?.scrollIntoView({ behavior: 'smooth', block: 'center' });\r\n }\r\n }, 0);\r\n}\r\n\r\nexport function scrollQCEErrorIntoView() {\r\n setTimeout(() => {\r\n const errors = document.querySelectorAll('qce .auFormInputError');\r\n if (errors.length) {\r\n errors[0].scrollIntoView({behavior: \"smooth\", block: \"center\", });\r\n }\r\n }, 0);\r\n}\r\n","import { ActionCallback, FilterCallback, Hook } from 'interfaces/i-aurelia-hooks';\r\n\r\nexport class AureliaHooks {\r\n private actions: Record = {};\r\n private filters: Record = {};\r\n\r\n addAction(name: string, callback: ActionCallback, priority = 10): void {\r\n this.actions[name] = this.actions[name] ?? [];\r\n const newHook = { priority, callback };\r\n this.actions[name] = [...this.actions[name], newHook].sort((a, b) => a.priority - b.priority);\r\n }\r\n\r\n addFilter(name: string, callback: FilterCallback, priority = 10): void {\r\n this.filters[name] = this.filters[name] ?? [];\r\n const newHook = { priority, callback };\r\n this.filters[name] = [...this.filters[name], newHook].sort((a, b) => a.priority - b.priority);\r\n }\r\n\r\n hasAction(name: string): boolean {\r\n return this.actions[name] !== undefined;\r\n }\r\n\r\n hasFilter(name: string): boolean {\r\n return this.filters[name] !== undefined;\r\n }\r\n\r\n getActions(name: string): Hook[] {\r\n return this.actions[name] ?? [];\r\n }\r\n\r\n getFilters(name: string): Hook[] {\r\n return this.filters[name] ?? [];\r\n }\r\n\r\n removeAction(name: string, callback: ActionCallback): void {\r\n if (this.actions[name]) {\r\n this.actions[name] = this.actions[name].filter((val) => val.callback !== callback);\r\n\r\n if (this.actions[name].length === 0) {\r\n delete this.actions[name];\r\n }\r\n }\r\n }\r\n\r\n removeAllActions(name: string): void {\r\n if (this.actions[name]) {\r\n delete this.actions[name];\r\n }\r\n }\r\n\r\n removeFilter(name: string, callback: FilterCallback): void {\r\n if (this.filters[name]) {\r\n this.filters[name] = this.filters[name].filter((val) => val.callback !== callback);\r\n\r\n if (this.filters[name].length === 0) {\r\n delete this.filters[name];\r\n }\r\n }\r\n }\r\n\r\n removeAllFilters(name: string): void {\r\n if (this.filters[name]) {\r\n delete this.filters[name];\r\n }\r\n }\r\n\r\n doAction(name: string, ...args: unknown[]): void {\r\n if (this.actions[name] && this.actions[name].length) {\r\n this.actions[name].forEach((hook) => {\r\n try {\r\n (hook.callback as ActionCallback)(...args);\r\n } catch (error) {\r\n console.error(`Error in action \"${name}\":`, error);\r\n }\r\n });\r\n }\r\n }\r\n\r\n async applyFilter(name: string, value: T, ...args: unknown[]): Promise {\r\n if (this.filters[name] && this.filters[name].length) {\r\n for (const hook of this.filters[name]) {\r\n try {\r\n const result = (hook.callback as FilterCallback)(value, ...args);\r\n\r\n // Check if the result is a promise or not\r\n if (result instanceof Promise) {\r\n value = await result;\r\n } else {\r\n value = result as T;\r\n }\r\n } catch (error) {\r\n console.error(`Error in filter \"${name}\":`, error);\r\n throw error; // Re-throw the error to propagate it\r\n }\r\n }\r\n }\r\n\r\n return value;\r\n }\r\n}\r\n","import { autoinject } from 'aurelia-framework';\r\nimport { HttpClient, json } from 'aurelia-fetch-client';\r\nimport { environment } from 'environment';\r\n\r\n@autoinject()\r\nexport class BlobService {\r\n constructor(private http: HttpClient) {}\r\n\r\n async downloadBlobFromUrl(fileName: string, url: string): Promise {\r\n if (this.isValidParams(fileName, url)) {\r\n const blob = await this.urlToBlob({ fileName, blobUrl: url });\r\n if (blob) {\r\n this.downloadFile(blob, fileName);\r\n }\r\n } else {\r\n console.error('Invalid params passed to BlobService');\r\n }\r\n }\r\n\r\n private isValidParams(fileName: string, url: string): boolean {\r\n return typeof url === 'string' && url.includes('http') && typeof fileName === 'string' && fileName.length > 0;\r\n }\r\n\r\n downloadFile(blob: Blob, fileName: string): void {\r\n const a = document.createElement('a');\r\n a.download = fileName;\r\n a.href = window.URL.createObjectURL(blob);\r\n document.body.appendChild(a);\r\n a.click();\r\n a.remove();\r\n }\r\n\r\n private async urlToBlob(body): Promise {\r\n const endpoint = environment.utils.urlToOctetStrem;\r\n const uri = endpoint.uri();\r\n\r\n try {\r\n const result = await this.http.fetch(uri, {\r\n body: json(body),\r\n headers: endpoint.headers,\r\n method: endpoint.method,\r\n });\r\n\r\n if (result.ok) {\r\n return result.blob();\r\n }\r\n } catch (error) {\r\n console.error(error.message);\r\n }\r\n\r\n return undefined;\r\n }\r\n}\r\n","import { autoinject } from 'aurelia-framework';\r\nimport { HttpClient } from 'aurelia-fetch-client';\r\nimport { Store } from 'aurelia-store';\r\nimport { State } from 'store/state';\r\nimport { Subscription } from 'rxjs';\r\n\r\nimport { environment } from 'environment';\r\n\r\n@autoinject()\r\nexport class ClaimsService {\r\n subscription: Subscription;\r\n claims: string[] = [];\r\n\r\n constructor(public store: Store, public http: HttpClient) {\r\n this.subscription = this.store.state.subscribe((state: State) => {\r\n if (state && Array.isArray(state.userClaims)) {\r\n this.claims = state.userClaims;\r\n }\r\n });\r\n }\r\n\r\n async getClaims() {\r\n try {\r\n const response = await this.http.fetch(`${environment.apiHost}/api/users/current/claims`);\r\n\r\n const { claims } = await response.json();\r\n const expiry = response.headers.get('X-Expiry');\r\n const expiryDate = new Date(expiry).getTime();\r\n\r\n return { claims: Array.isArray(claims) ? claims : [], expiryDate };\r\n } catch (e) {\r\n return { claims: [], expiryDate: null };\r\n }\r\n }\r\n\r\n /**\r\n * Returns true or false if the user has one or more claims\r\n *\r\n * @param claim string || string[]\r\n */\r\n has(claim: string | string[]): boolean {\r\n if (!Array.isArray(this.claims)) {\r\n return false;\r\n }\r\n\r\n if (Array.isArray(claim)) {\r\n return claim.every((value) => this.claims.includes(value));\r\n }\r\n\r\n return this.claims.includes(claim);\r\n }\r\n\r\n async hasAsync(claim: string | string[]): Promise {\r\n if (!Array.isArray(this.claims) || !this.claims.length) {\r\n const { expiryDate, claims } = await this.getClaims();\r\n this.claims = Array.isArray(claims) ? claims : [];\r\n localStorage.setItem('iadviserClaimsExpiry', expiryDate?.toString() ?? '');\r\n localStorage.setItem('iAdviserUserClaims', JSON.stringify(this.claims));\r\n }\r\n\r\n const dateNow = new Date().getTime();\r\n const expiry = parseInt(localStorage.getItem('iadviserClaimsExpiry') ?? '');\r\n\r\n if (isNaN(expiry) || dateNow > expiry) {\r\n const { expiryDate, claims } = await this.getClaims();\r\n this.claims = Array.isArray(claims) ? claims : [];\r\n localStorage.setItem('iadviserClaimsExpiry', expiryDate?.toString() ?? '');\r\n localStorage.setItem('iAdviserUserClaims', JSON.stringify(this.claims));\r\n }\r\n\r\n if (!Array.isArray(this.claims)) {\r\n return false;\r\n }\r\n\r\n if (Array.isArray(claim)) {\r\n return claim.some((value) => this.claims.includes(value));\r\n }\r\n\r\n return this.claims.includes(claim);\r\n }\r\n}\r\n","import { HttpClient, json } from 'aurelia-fetch-client';\r\nimport { autoinject } from 'aurelia-framework';\r\nimport { environment } from 'environment';\r\nimport { RequestMethod } from 'resources/endpoints/endpoints';\r\nimport { PLATFORM } from 'aurelia-pal';\r\nimport { log } from './log-service';\r\nimport { BlobService } from 'resources/services/blob-service';\r\nimport { DistributionType } from 'components/document-pack/constants';\r\nimport { AppRouter } from 'aurelia-router';\r\nimport { ModalService } from 'components/modal/modal-service';\r\nimport { IaMailtoModal } from 'components/ia-mailto-modal/ia-mailto-modal';\r\nexport interface StatusResult {\r\n entityId: number;\r\n reportId: number;\r\n reportSystemKey: string;\r\n generationStatus: number;\r\n docCreationProgress: number;\r\n reportCategory: number;\r\n statusMessage: string;\r\n lastException: {\r\n message: string;\r\n };\r\n isCompletedState: boolean;\r\n GenerationStatusString: string;\r\n reportCreationProgress: string;\r\n index: number;\r\n id: string;\r\n}\r\n\r\n@autoinject()\r\nexport class ClientStatementService {\r\n public processingBrowserPopupsDisabled: boolean;\r\n public processingError: string;\r\n private isProcessing = false;\r\n\r\n constructor(\r\n private http: HttpClient,\r\n private blobService: BlobService,\r\n private router: AppRouter,\r\n private modal: ModalService,\r\n ) {}\r\n\r\n async getDocument(params, distributionType: DistributionType) {\r\n if (!this.isProcessing) {\r\n this.beginProcessing();\r\n try {\r\n const documentUrl = await this.postDocumentGeneration(params);\r\n\r\n if (typeof documentUrl !== 'undefined') {\r\n this.processDocumentUrl(documentUrl, distributionType, params);\r\n } else {\r\n log.error('The requested document failed to generate, please try again.');\r\n }\r\n } catch (error) {\r\n log.error(error);\r\n }\r\n this.endProcessing();\r\n }\r\n }\r\n\r\n beginProcessing() {\r\n this.isProcessing = true;\r\n this.processingError = '';\r\n this.processingBrowserPopupsDisabled = false;\r\n }\r\n\r\n endProcessing() {\r\n this.isProcessing = false;\r\n }\r\n\r\n async processDocumentUrl(documentUrl: string, distributionType: DistributionType, params: any) {\r\n switch (distributionType) {\r\n case DistributionType.Preview:\r\n await this.openPreview(documentUrl);\r\n break;\r\n case DistributionType.Print:\r\n await this.fetchAndPrintDocument(documentUrl);\r\n break;\r\n case DistributionType.Download:\r\n case DistributionType.DownloadEmail:\r\n await this.downloadAndEmailDocument(documentUrl, distributionType, params.ClientId);\r\n break;\r\n }\r\n }\r\n\r\n async openPreview(documentUrl: string) {\r\n const clientName = document.title.split('|')[0].trim();\r\n\r\n const routeFragment = this.router.generate('pdfPreview', {\r\n title: `Statement | ${clientName}`,\r\n url: documentUrl,\r\n });\r\n\r\n const newWindow = PLATFORM.global.open(routeFragment, '_blank');\r\n if (newWindow === null) {\r\n this.processingBrowserPopupsDisabled = true;\r\n }\r\n }\r\n\r\n async fetchAndPrintDocument(documentUrl: string) {\r\n const response = await fetch(documentUrl);\r\n const fileBlob = await response.blob();\r\n const documentUrlFromBlob = URL.createObjectURL(fileBlob);\r\n const iframeContainer = document.getElementById('iframe-container') as HTMLIFrameElement;\r\n const iframe = this.getOrCreateIframe(iframeContainer, 'iframe-print-preview');\r\n\r\n iframe.src = documentUrlFromBlob;\r\n iframe.onload = async () => {\r\n iframe.focus();\r\n iframe.contentWindow.print();\r\n };\r\n\r\n if (iframeContainer.childElementCount === 0) {\r\n iframeContainer.appendChild(iframe);\r\n }\r\n }\r\n\r\n getOrCreateIframe(iframeContainer: HTMLIFrameElement, iframeId: string): HTMLIFrameElement {\r\n if (iframeContainer.childElementCount === 0) {\r\n const iframe = document.createElement('iframe');\r\n iframe.id = iframeId;\r\n return iframe;\r\n }\r\n\r\n return document.getElementById(iframeId) as HTMLIFrameElement;\r\n }\r\n\r\n async downloadAndEmailDocument(documentUrl: string, distributionType: DistributionType, clientId: number) {\r\n const clientName = document.title.split('|')[0].replace(' - ', '_').replace(' ', '_').trim();\r\n\r\n this.blobService.downloadBlobFromUrl(`Client_Statement_${clientName}.pdf`, documentUrl);\r\n\r\n if (distributionType === DistributionType.DownloadEmail) {\r\n const model = { clientId };\r\n this.modal.show().content(IaMailtoModal, { mode: 'client-statement', model }).withOptions({ type: 'wide-lg' });\r\n }\r\n }\r\n\r\n async postDocumentGeneration(params) {\r\n try {\r\n const queue = await this.http.fetch(`${environment.apiHost}/reportapi/reports/generate/queue`, {\r\n method: RequestMethod.post,\r\n body: json(params),\r\n });\r\n\r\n const queueGuid = await queue.json();\r\n\r\n if (queue.status === 200) {\r\n const statusResult = await this.pollDocumentStatus(queueGuid, 50, 2000);\r\n let documentUrl;\r\n\r\n if (statusResult.GenerationStatusString === 'Ready') {\r\n documentUrl = await this.getDocumentUrl(queueGuid);\r\n }\r\n\r\n if (statusResult.GenerationStatusString === 'Error') {\r\n this.processError(statusResult.lastException.message);\r\n }\r\n\r\n return documentUrl;\r\n } else {\r\n throw new Error(queueGuid.ExceptionMessage);\r\n }\r\n } catch (error) {\r\n log.error(error);\r\n }\r\n }\r\n\r\n processError(errorMessage: string) {\r\n this.processingError = errorMessage;\r\n\r\n if (errorMessage.toLowerCase() === 'no data') {\r\n this.processingError = 'No data returned for client statement.';\r\n }\r\n }\r\n\r\n async pollDocumentStatus(queueGuid, attempts, delayInMs) {\r\n let completed = false;\r\n let statusResult: StatusResult;\r\n let counter = 0;\r\n\r\n while (!completed && counter < attempts) {\r\n await this.timer(delayInMs); // delay status check\r\n statusResult = await this.getDocumentCreationStatus(queueGuid);\r\n completed = statusResult.isCompletedState;\r\n counter++;\r\n }\r\n\r\n return statusResult;\r\n }\r\n\r\n async getDocumentCreationStatus(queueGuid) {\r\n try {\r\n const result = await this.http.fetch(`${environment.apiHost}/reportapi/reports/generate/${queueGuid}/status`, {\r\n method: RequestMethod.get,\r\n });\r\n return await result.json();\r\n } catch (error) {\r\n log.error(error);\r\n }\r\n }\r\n\r\n async getDocumentUrl(queueGuid) {\r\n try {\r\n const result = await this.http.fetch(`${environment.apiHost}/reportapi/reports/generate/${queueGuid}/url/pdf`, {\r\n method: RequestMethod.get,\r\n });\r\n return await result.json();\r\n } catch (error) {\r\n log.error(error);\r\n }\r\n }\r\n\r\n async timer(msec): Promise {\r\n return new Promise((resolve) => {\r\n setTimeout(() => {\r\n resolve();\r\n }, msec);\r\n });\r\n }\r\n}\r\n","import { autoinject } from 'aurelia-dependency-injection';\r\nimport izitoast, { IziToastSettings, IziToastProgress } from 'izitoast';\r\nimport '!style-loader!css-loader!izitoast/dist/css/iziToast.css';\r\nimport '!style-loader!css-loader!styles/ia-toast.css';\r\nimport { computedFrom } from 'aurelia-binding';\r\nimport { TaskQueue } from 'aurelia-framework';\r\n\r\n/**\r\n * `iaAnyware` toast messenger service for global/component user messages\r\n *\r\n * Message types include success, error, warning, info, progress and question\r\n *\r\n * @see {@link IaToast} interface for available functionality (methods and options)\r\n * @see {@link router-layouts/client-nav/components.ClientDetails ClientDetails} component for an example usage\r\n */\r\n@autoinject()\r\nexport class IaToastService implements IaToast {\r\n private defaultOptions: IaToastOptions = {\r\n class: 'ia-toast',\r\n position: 'bottomRight',\r\n theme: 'light',\r\n layout: 1,\r\n title: '',\r\n titleColor: '#FFFFFF',\r\n messageColor: '#FFFFFF',\r\n iconColor: '#FFFFFF',\r\n backgroundColor: '#09A47A',\r\n close: true,\r\n closeOnEscape: false,\r\n closeOnClick: false,\r\n timeout: 3000,\r\n overlay: false,\r\n overlayClose: false,\r\n overlayColor: 'rgba(255,255,255,0.24)',\r\n transitionIn: 'fadeInUp',\r\n transitionOut: 'fadeOutDown',\r\n animateInside: false,\r\n progressBar: true,\r\n image: '',\r\n imageWidth: 50,\r\n maxWidth: null,\r\n displayMode: 0,\r\n drag: false,\r\n };\r\n\r\n private loader: IaToastMessage;\r\n private loaderOpen = false;\r\n\r\n constructor(private taskQueue: TaskQueue) {\r\n if (!izitoast)\r\n throw new Error('IziToast: Sorry but it seems the IziToast plugin is not available for the IaToastService!');\r\n izitoast.settings(this.defaultOptions);\r\n if (this.loader && this.loader.overrideOptions) return;\r\n this.bootstrapLoader();\r\n }\r\n\r\n setDefaultOptions(options: IaToastOptions): void {\r\n this.defaultOptions = { ...this.defaultOptions, ...options };\r\n izitoast.settings(this.defaultOptions);\r\n }\r\n\r\n getDefaultOptions(): IaToastOptions {\r\n return this.defaultOptions;\r\n }\r\n\r\n destroyAllToasts(): void {\r\n izitoast.destroy();\r\n }\r\n\r\n @computedFrom('loaderOpen')\r\n get isLoaderOpen() {\r\n return this.loaderOpen;\r\n }\r\n\r\n show(toast: IaToastMessage, toastMessageIsRequired = true): boolean | void {\r\n return izitoast.show(this.mergeToastSettings(toast, toastMessageIsRequired));\r\n }\r\n\r\n hide(toastRef: string | HTMLDivElement, toast?: IaToastMessage, closedBy?: string): void {\r\n let toastElement: HTMLDivElement;\r\n\r\n if (typeof toastRef === 'string' || toastRef instanceof String) {\r\n toastElement = document.querySelector(toastRef.toString());\r\n } else {\r\n toastElement = toastRef;\r\n }\r\n\r\n if (!toastElement) return;\r\n izitoast.hide(this.mergeToastSettings(toast, false), toastElement, closedBy);\r\n }\r\n\r\n public info(toast: IaToastMessage): void {\r\n toast.overrideOptions.timeout = false;\r\n toast.overrideOptions.layout = 2;\r\n\r\n izitoast.info(this.mergeToastSettings(toast));\r\n }\r\n\r\n progress(toastRef: HTMLDivElement, toast?: IaToastMessage, callback?: () => void): IaToastProgress {\r\n return izitoast.progress(this.mergeToastSettings(toast, false), toastRef, callback);\r\n }\r\n\r\n success(toast: IaToastMessage): void {\r\n toast.overrideOptions.layout = 2;\r\n\r\n izitoast.success(this.mergeToastSettings(toast));\r\n }\r\n\r\n warning(toast: IaToastMessage): void {\r\n toast.overrideOptions.timeout = false;\r\n toast.overrideOptions.layout = 2;\r\n\r\n izitoast.warning(this.mergeToastSettings(toast));\r\n }\r\n\r\n error(toast: IaToastMessage): void {\r\n toast.overrideOptions.timeout = false;\r\n toast.overrideOptions.layout = 2;\r\n\r\n izitoast.error(this.mergeToastSettings(toast));\r\n\r\n this.restoreDefaultSettings(toast);\r\n }\r\n\r\n question(toast: IaToastMessage): void {\r\n izitoast.question(this.mergeToastSettings(toast));\r\n }\r\n\r\n getLoaderPath(loader: Loader) {\r\n return require(`img/loaders/${loader}`);\r\n }\r\n\r\n showLoader(loader?: Loader, loaderText = '') {\r\n this.taskQueue.queueMicroTask(() => {\r\n if (this.loaderOpen) return;\r\n\r\n if (loader) {\r\n this.loader.overrideOptions.image = this.getLoaderPath(loader);\r\n }\r\n this.loader.overrideOptions.$loaderText = loaderText;\r\n\r\n this.show(this.loader, false);\r\n this.loaderOpen = true;\r\n });\r\n }\r\n\r\n hideLoader(showStatusIcon = false, statusSuccess = true, statusIconTimeout = 1000) {\r\n this.taskQueue.queueMicroTask(() => {\r\n if (!this.loaderOpen) return;\r\n\r\n this.hide(`.${this.loader.overrideOptions.class}`);\r\n this.loaderOpen = false;\r\n\r\n if (showStatusIcon) {\r\n this.showStatusIcon(statusSuccess, statusIconTimeout);\r\n }\r\n });\r\n }\r\n\r\n private showStatusIcon(statusSuccess: boolean, statusIconTimeout: number) {\r\n const existingImage = this.loader.overrideOptions.image;\r\n const existingTransIn = this.loader.overrideOptions.transitionIn;\r\n const existingTimeout = this.loader.overrideOptions.timeout;\r\n const existingOnClosed = this.loader.overrideOptions.onClosed;\r\n\r\n this.loader.overrideOptions.timeout = statusIconTimeout;\r\n this.loader.overrideOptions.transitionIn = statusSuccess ? 'bounceInUp' : 'bounceInDown';\r\n\r\n this.loader.overrideOptions.onClosed = () => {\r\n this.hide(`.${this.loader.overrideOptions.class}`);\r\n this.loader.overrideOptions.image = existingImage;\r\n this.loader.overrideOptions.transitionIn = existingTransIn;\r\n this.loader.overrideOptions.timeout = existingTimeout;\r\n this.loader.overrideOptions.onClosed = existingOnClosed;\r\n };\r\n\r\n this.showLoader(statusSuccess ? Loader.GreenTick : Loader.RedCross);\r\n }\r\n\r\n private bootstrapLoader(loader = Loader.TailSpin) {\r\n this.loader = new IaToastMessage();\r\n\r\n this.loader.overrideOptions = {\r\n id: 'iaToastLoader',\r\n overlay: true,\r\n overlayClose: false,\r\n overlayColor: 'rgba(255,255,255,0.84)',\r\n close: false,\r\n class: 'ia-loader-toast',\r\n timeout: false,\r\n closeOnClick: false,\r\n closeOnEscape: false,\r\n position: 'center',\r\n transitionIn: 'fadeIn',\r\n transitionOut: 'fadeOut',\r\n animateInside: false,\r\n drag: false,\r\n backgroundColor: 'transparent',\r\n progressBar: false,\r\n image: this.getLoaderPath(loader),\r\n imageWidth: 50,\r\n maxWidth: 50,\r\n displayMode: 1,\r\n $loaderText: '',\r\n $loaderTextClass: 'ia-loader-text',\r\n };\r\n\r\n this.loader.overrideOptions.onOpening = () => {\r\n this.addLoaderText();\r\n this.loaderOpen = true;\r\n };\r\n\r\n this.loader.overrideOptions.onClosing = () => {\r\n this.removeLoaderText();\r\n this.loaderOpen = false;\r\n };\r\n }\r\n\r\n private addLoaderText() {\r\n if (!this.loader.overrideOptions.$loaderText) return;\r\n\r\n const loaderText = document.createElement('h3');\r\n loaderText.classList.add(this.loader.overrideOptions.$loaderTextClass);\r\n\r\n loaderText.appendChild(document.createTextNode(this.loader.overrideOptions.$loaderText));\r\n document.querySelector(`.${this.loader.overrideOptions.class}`)?.parentNode?.appendChild(loaderText);\r\n }\r\n\r\n private removeLoaderText() {\r\n if (!this.loader.overrideOptions.$loaderText) return;\r\n\r\n document.querySelector(`.${this.loader.overrideOptions.$loaderTextClass}`)?.remove();\r\n this.loader.overrideOptions.$loaderText = '';\r\n }\r\n\r\n private restoreDefaultSettings(toast: IaToastMessage) {\r\n toast.overrideOptions = { ...this.defaultOptions };\r\n }\r\n\r\n private mergeToastSettings(toast: IaToastMessage, toastMessageIsRequired = true): IziToastSettings {\r\n if (toastMessageIsRequired && (!toast || !toast.message || !toast.message.length)) {\r\n throw new Error('IA Toast: Toast message cannot be empty if \"toastMessageIsRequired\" is true!');\r\n }\r\n return toast ? { ...toast.overrideOptions, ...{ message: toast.message || '', title: toast.title || '' } } : {};\r\n }\r\n}\r\n\r\n/**\r\n * From `T` pick all properties except the set of properties `K`\r\n */\r\nexport type Omit = Pick>;\r\n/**\r\n * Various toast options available to change the toast behaviour\r\n */\r\nexport type IaToastOptions = Omit;\r\n/**\r\n * Toast progress bar interface\r\n */\r\nexport type IaToastProgress = IziToastProgress;\r\n\r\n/**\r\n * Method parameters object for different types of toast messages\r\n */\r\nexport class IaToastMessage {\r\n constructor(\r\n /**\r\n * Toast message body - required except for `progress` and `hide`\r\n */\r\n public message?: string,\r\n /**\r\n * Toast message title (optional)\r\n */\r\n public title?: string,\r\n /**\r\n * Toast message override options (optional)\r\n */\r\n public overrideOptions: IaToastOptions & { $loaderText?: string; $loaderTextClass?: string } = {},\r\n ) {}\r\n}\r\n\r\n/**\r\n * iaAnyware toast messenger interface for various message types\r\n */\r\nexport interface IaToast {\r\n /**\r\n * Sets the default options object for all toast messages\r\n *\r\n * Merges the provided options with existing standard defaults\r\n *\r\n * @param options default option values\r\n */\r\n setDefaultOptions(options: IaToastOptions): void;\r\n /**\r\n * Gets the current default options object for all toast messages\r\n */\r\n getDefaultOptions(): IaToastOptions;\r\n /**\r\n * Destroys all toast messages\r\n */\r\n destroyAllToasts(): void;\r\n /**\r\n * Opens a generic toast message; returns false if toast cannot be opened\r\n */\r\n show(toast: IaToastMessage): void | boolean;\r\n /**\r\n * Closes the specific toast message identified by `toastRef`\r\n *\r\n * Toast parameter `IaToastMessage` is optional and defaults to `{}`\r\n *\r\n * Set new `hide` options by passing `IaToastMessage.overrideOptions`\r\n *\r\n * @param toastRef Toast html element or string selector to close\r\n * @param toast toast message params (optional); default = `{}`\r\n * @param closedBy Custom closed by meta information (optional)\r\n */\r\n hide(toastRef: HTMLDivElement | string, toast?: IaToastMessage, closedBy?: string): void;\r\n /**\r\n * Toast control progress bar time identified by `toastRef`\r\n *\r\n * Toast parameter `IaToastMessage` is optional and defaults to `{}`\r\n *\r\n * Set `progress` options by passing `IaToastMessage.overrideOptions`\r\n *\r\n * @param toastRef Toast html element\r\n * @param toast toast message params (optional); default = `{}`\r\n * @param callback handler triggered for `IaToast.progress(...)`\r\n */\r\n progress(toastRef: HTMLDivElement, toast?: IaToastMessage, callback?: () => void): IaToastProgress;\r\n /**\r\n * Shows an information toast message\r\n */\r\n info(toast: IaToastMessage): void;\r\n /**\r\n * Shows a success toast message\r\n */\r\n success(toast: IaToastMessage): void;\r\n /**\r\n * Shows a warning toast message\r\n */\r\n warning(toast: IaToastMessage): void;\r\n /**\r\n * Shows an error toast message\r\n *\r\n * Message remains open until user dismisses it\r\n */\r\n error(toast: IaToastMessage): void;\r\n /**\r\n * Shows a question toast message\r\n */\r\n question(toast: IaToastMessage): void;\r\n}\r\n\r\n/**\r\n * All available loading indicators\r\n */\r\nexport enum Loader {\r\n Audio = 'audio.svg',\r\n BallTriangle = 'ball-triangle.svg',\r\n Bars = 'bars.svg',\r\n Circles = 'circles.svg',\r\n Grid = 'grid.svg',\r\n Hearts = 'hearts.svg',\r\n Oval = 'oval.svg',\r\n Puff = 'puff.svg',\r\n Rings = 'rings.svg',\r\n SpinningCircles = 'spinning-circles.svg',\r\n TailSpin = 'tail-spin.svg',\r\n ThreeDots = 'three-dots.svg',\r\n GreenTick = 'green-tick.svg',\r\n RedCross = 'red-cross.svg',\r\n}\r\n","import { LogManager } from 'aurelia-framework';\r\n\r\nexport const log = LogManager.getLogger('iAdviser');\r\n","import { environment } from 'environment';\r\nimport { inject } from 'aurelia-framework';\r\nimport { User } from '../models/user';\r\nimport { getDeviceTokenForUser, addDeviceTokenForUser } from 'resources/device-token-manager';\r\nimport { AuthTokenEndpoint, ITokenResponse } from 'endpoints/auth/token-endpoint';\r\n\r\n@inject(AuthTokenEndpoint)\r\nexport class TokenService {\r\n constructor(private endpoint: AuthTokenEndpoint) {}\r\n\r\n async createAuthToken(user: User): Promise {\r\n const params = {};\r\n params['grant_type'] = user.webFormLinkCode ? 'web_form' : 'password';\r\n params['password_hashed'] = 'false';\r\n params['username'] = user.username;\r\n params['password'] = user.password;\r\n params['app_client_type'] = user.appClientType;\r\n params['app_client_instance'] = user.appClientInstance;\r\n params['client_id'] = environment.client;\r\n params['web_form_link_code'] = user.webFormLinkCode;\r\n\r\n const headers: Record = {};\r\n\r\n const deviceToken = getDeviceTokenForUser(user.username);\r\n if (deviceToken) {\r\n headers['X-Device-Token'] = deviceToken;\r\n }\r\n\r\n const { data, response } = await this.endpoint.fetch(null, params, headers);\r\n\r\n this.saveToken(data, user.webFormLinkCode ? sessionStorage : localStorage);\r\n\r\n if (response.headers.has('X-Password-Requires-Changing')) {\r\n const passwordRequiresChanging = response.headers.get('X-Password-Requires-Changing');\r\n localStorage.setItem('userRequiresPasswordChange', passwordRequiresChanging);\r\n }\r\n\r\n if (response.headers.has('X-Device-Id')) {\r\n const deviceId = response.headers.get('X-Device-Id');\r\n localStorage.setItem('deviceId', deviceId);\r\n }\r\n\r\n if (response.headers.has('X-Device-Token')) {\r\n const returnedDeviceToken = response.headers.get('X-Device-Token');\r\n addDeviceTokenForUser(user.username, returnedDeviceToken);\r\n }\r\n\r\n if (response.headers.has('X-2FA-Setup-Reqd')) {\r\n const twoFactorSetupRequired = response.headers.get('X-2FA-Setup-Reqd');\r\n localStorage.setItem('twoFactorSetupRequired', twoFactorSetupRequired);\r\n } else {\r\n /* istanbul ignore next */\r\n localStorage.removeItem('twoFactorSetupRequired');\r\n }\r\n\r\n if (response.headers.has('X-2FA-Code-Reqd')) {\r\n const twoFactorCodeRequired = response.headers.get('X-2FA-Code-Reqd');\r\n localStorage.setItem('twoFactorCodeRequired', twoFactorCodeRequired);\r\n } else {\r\n /* istanbul ignore next */\r\n localStorage.removeItem('twoFactorCodeRequired');\r\n }\r\n\r\n if (response.headers.has('X-Password-Expiry-Days')) {\r\n localStorage.setItem('daysUntilPasswordExpiry', response.headers.get('X-Password-Expiry-Days'));\r\n }\r\n\r\n if (response.headers.has('X-Licence-Acceptance-Reqd')) {\r\n localStorage.setItem('acceptLicenceAgreement', response.headers.get('X-Licence-Acceptance-Reqd'));\r\n }\r\n\r\n return data;\r\n }\r\n\r\n /* istanbul ignore next */\r\n getAuthToken() {\r\n return this.getLocation('access_token').getItem('access_token');\r\n }\r\n\r\n /* istanbul ignore next */\r\n getRefreshToken() {\r\n return this.getLocation('refresh_token').getItem('refresh_token');\r\n }\r\n\r\n /* istanbul ignore next */\r\n getDeviceId() {\r\n return localStorage.getItem('deviceId');\r\n }\r\n\r\n /* istanbul ignore next */\r\n getDeviceTokens() {\r\n return localStorage.getItem('device_tokens');\r\n }\r\n\r\n /* istanbul ignore next */\r\n async refreshAuthToken() {\r\n const storage = this.getLocation('refresh_token');\r\n\r\n const params = {};\r\n params['grant_type'] = 'refresh_token';\r\n params['client_id'] = environment.client;\r\n params['refresh_token'] = storage.getItem('refresh_token');\r\n\r\n const result = (await this.endpoint.fetch(null, params)).data;\r\n\r\n this.saveToken(result, storage);\r\n\r\n return result;\r\n }\r\n\r\n saveToken(token, storage) {\r\n storage.setItem('access_token', token.access_token);\r\n storage.setItem('refresh_token', token.refresh_token);\r\n storage.setItem('access_token_expiry', token['.expires']);\r\n }\r\n\r\n removeToken() {\r\n const storage = this.getLocation('access_token');\r\n\r\n storage.removeItem('access_token');\r\n storage.removeItem('refresh_token');\r\n storage.removeItem('access_token_expiry');\r\n }\r\n\r\n getLocation(key: string) {\r\n let storage = localStorage;\r\n\r\n if(sessionStorage.getItem(key)) {\r\n storage = sessionStorage;\r\n }\r\n\r\n return storage;\r\n }\r\n\r\n}\r\n","/*\r\n * An implementation of the Appender interface.\r\n */\r\nexport class ConsoleAppender {\r\n /**\r\n * Appends a debug log.\r\n *\r\n * @param logger The source logger.\r\n * @param rest The data to log.\r\n */\r\n debug(logger: { id: string }, ...rest: any[]): void {\r\n console.debug(`DEBUG [${logger.id}]`, ...rest);\r\n }\r\n\r\n /**\r\n * Appends an info log.\r\n *\r\n * @param logger The source logger.\r\n * @param rest The data to log.\r\n */\r\n info(logger: { id: string }, ...rest: any[]): void {\r\n console.info(`INFO [${logger.id}]`, ...rest);\r\n }\r\n\r\n /**\r\n * Appends a warning log.\r\n *\r\n * @param logger The source logger.\r\n * @param rest The data to log.\r\n */\r\n warn(logger: { id: string }, ...rest: any[]): void {\r\n console.warn(`WARN [${logger.id}]`, ...rest);\r\n }\r\n\r\n /**\r\n * Appends an error log.\r\n *\r\n * @param logger The source logger.\r\n * @param rest The data to log.\r\n */\r\n error(logger: { id: string }, ...rest: any[]): void {\r\n console.error(`ERROR [${logger.id}]`, ...rest);\r\n }\r\n}\r\n","import { Aurelia } from 'aurelia-framework';\r\nimport { I18N } from 'aurelia-i18n';\r\nimport { ValidationMessageProvider } from 'aurelia-validation';\r\n\r\nexport function i18tnValidation(aurelia: Aurelia) {\r\n const originalGetMessage = ValidationMessageProvider.prototype.getMessage;\r\n const originalGetDisplayName = ValidationMessageProvider.prototype.getDisplayName;\r\n ValidationMessageProvider.prototype.getMessage = function (key) {\r\n const i18n = aurelia.container.get(I18N);\r\n const translation = i18n.tr(`errorMessages.${key}`);\r\n const message = this.parser.parse(translation);\r\n\r\n if (message.value === translation) {\r\n return originalGetMessage.call(this, key);\r\n }\r\n return message;\r\n };\r\n\r\n ValidationMessageProvider.prototype.getDisplayName = function (propertyName, displayName) {\r\n const i18n = aurelia.container.get(I18N);\r\n\r\n if (displayName !== null && displayName !== undefined) {\r\n const translation = i18n.tr(displayName as string);\r\n\r\n if (translation === displayName) {\r\n return originalGetDisplayName.call(this, propertyName, displayName);\r\n }\r\n\r\n return translation;\r\n }\r\n const translation = i18n.tr(propertyName as string);\r\n\r\n if (translation === propertyName) {\r\n return originalGetDisplayName.call(this, propertyName, displayName);\r\n }\r\n\r\n return translation;\r\n };\r\n}\r\n","/* istanbul ignore file */\r\n\r\nexport function initScrollTabs(context) {\r\n context.tabPosition = 50;\r\n context.isRightChevronDisabled = false;\r\n\r\n if (context.tabUI) {\r\n // move tabs over\r\n const allTabs = context.tabUI.querySelectorAll(context.tabClass);\r\n\r\n if (allTabs.length) {\r\n allTabs.forEach((element) => {\r\n element.setAttribute('style', `position: relative; left: 50px;`);\r\n });\r\n\r\n context.tabUI.onwheel = (event) => {\r\n event.preventDefault();\r\n event.deltaY < 0 ? context.scrollTabs('left') : context.scrollTabs('right');\r\n };\r\n\r\n // Disabled right chevron when last tab becomes visible\r\n const observer = new IntersectionObserver(\r\n (entries) => {\r\n if (entries[0].isIntersecting === true) {\r\n context.isRightChevronDisabled = true;\r\n }\r\n },\r\n { threshold: [1] },\r\n );\r\n\r\n allTabs[allTabs.length - 1].classList.add('lastTab');\r\n observer.observe(document.querySelector('.lastTab'));\r\n }\r\n }\r\n}\r\n\r\nexport function scrollTabs(context, direction) {\r\n if (context.tabUI) {\r\n const allTabs = context.tabUI.querySelectorAll(context.tabClass);\r\n\r\n if (allTabs.length) {\r\n if (direction === 'left') {\r\n if (context.isLeftChevronDisabled) return;\r\n\r\n if (context.isRightChevronDisabled) {\r\n context.isRightChevronDisabled = false;\r\n }\r\n\r\n context.tabPosition = context.tabPosition + 200;\r\n allTabs.forEach((element) => {\r\n element.setAttribute('style', `position: relative; left: ${context.tabPosition}px;`);\r\n });\r\n }\r\n\r\n if (direction === 'right') {\r\n if (context.isRightChevronDisabled) return;\r\n\r\n context.tabPosition = context.tabPosition - 200;\r\n allTabs.forEach((element) => {\r\n element.setAttribute('style', `position: relative; left: ${context.tabPosition}px;`);\r\n });\r\n }\r\n }\r\n }\r\n}\r\n","export async function timer(msec): Promise {\r\n return new Promise((resolve) => {\r\n setTimeout(() => {\r\n resolve();\r\n }, msec);\r\n });\r\n}\r\n"],"names":["element","hideSinglePage","boundaryLinks","firstText","lastText","directionLinks","previousText","nextText","disable","totalPages","displayPages","this","bind","undefined","currentPage","pageSize","calculatePages","totalItemsChanged","pageSizeChanged","currentPageChanged","dispatchPageChangedEvent","event","DOM","createCustomEvent","bubbles","detail","dispatchEvent","totalItems","Math","ceil","isNaN","paginationSize","displayAllPages","limitVisiblePages","i","push","title","toString","value","totalTiers","activeTier","start","end","selectPage","page","nextPage","previousPage","firstPage","lastPage","inject","Element","bindable","defaultBindingMode","bindingMode","twoWay","autoinject","AutPaginationCustomElement","auTable","bindingEngine","mode","selectedClass","custom","rowSelectedListener","handleRowSelected","attached","style","cursor","addEventListener","selectedSubscription","propertyObserver","row","subscribe","isSelectedChanged","setClass","detached","removeEventListener","dispose","$isSelected","classList","add","remove","target","srcElement","tagName","toLowerCase","dispatchSelectedEvent","selectedEvent","deselectAll","data","forEach","item","AureliaTableCustomAttribute","BindingEngine","AutSelectCustomAttribute","callback","order","orderClasses","ignoreEvent","handleHeaderClicked","sortChangedListener","handleSortChanged","key","Error","addSortChangedListener","handleDefault","removeSortChangedListener","default","doSort","dataSource","sortChanged","next","AutSortCustomAttribute","isAttached","sortChangedListeners","beforePagination","filterObservers","Array","isArray","dataObserver","collectionObserver","applyPlugins","filtersChanged","api","revealItem","filters","observer","filter","filterChanged","hasPagination","getDataCopy","concat","getPageData","localData","doPaginate","hasFilter","doFilter","sortKey","customSort","sortOrder","length","displayData","toFilter","filteredData","passed","passFilter","trim","keys","getPropertyValue","types","indexOf","toSort","sort","a","b","val1","val2","isNumeric","str1","str2","localeCompare","object","keyPath","replace","split","n","k","toCheck","parseFloat","isFinite","toPaginate","slice","dataChanged","emitSortChanged","removeListener","listener","listeners","index","splice","configure","config","globalResources","STYLE_TAG_ID","STYLE_TEXT","ensureStyles","document","getElementById","tag","createElement","id","textContent","head","appendChild","IA_ORANGE","playFullSequence","options","shake","showScanlines","scanlinesDurationMs","count","durationMs","sizeRange","driftRange","prefersReducedMotion","body","window","setTimeout","shakeScreen","overlay","className","setAttribute","animationDuration","scanlines","reduced","minSize","maxSize","minDrift","maxDrift","layer","maxDelay","floor","circle","size","randomInt","left","random","delay","drift","opacity","totalLifetimeMs","setProperty","toFixed","max","rainLogos","matchMedia","matches","min","FLAKE_GLYPHS","HIDDEN_TEXT_INDENT","CHRISTMAS_DEFAULTS","spawnIntervalMs","reducedSpawnIntervalMs","flakeDurationMs","flakeSizeRange","settleThreshold","maxPilePx","maxLiveFlakes","logo","pile","hat","spawnTimer","settledCount","originalPosition","originalOverflow","originalTextIndent","positionTouched","overflowTouched","textIndentTouched","flakeTimers","Set","flakesInFlight","attach","position","overflow","textIndent","computed","getComputedStyle","maskUrl","match","extractBackgroundImageUrl","backgroundImage","innerHTML","startSpawning","reset","stopSpawning","clearFlakeTimers","querySelectorAll","spawnFlake","flake","variance","duration","timerId","delete","onFlakeSettled","interval","setInterval","clearInterval","clearTimeout","clear","ratio","pileHeight","round","defaultFeatureFlags","christmas","STORAGE_KEY","COOKIE_KEYS","HEADER_KEYS","TRUE_VALUES","FALSE_VALUES","codeFlags","serverFlags","serverCookieFlags","serverHeaderFlags","memoryFlags","ensureFlagsInitialized","load","featureFlags","enabled","flag","syncEffectiveFlags","flags","setLocalOverride","all","known","knownFlags","state","createFlagState","snapshot","createSnapshot","onChange","candidate","defaults","normaliseFlagRecord","readCookieFlags","syncServerFlags","refresh","applyServerFlagsFromResponse","response","applyServerFlagsFromCookie","applyServerFlagsFromHeaders","headers","applyServerHeaderFlags","readHeaderFlags","cookie","applyServerCookieFlags","isKnownFlag","persistLocalFlag","clearLocalOverride","savedFlags","readSavedFlags","hasFlag","writeSavedFlags","clearLocalOverrides","localStorage","normalisedFlags","Object","removeItem","setItem","JSON","stringify","mergeFlags","previousFlags","nextFlags","effectiveFlags","changed","serialiseFlags","replaceFlags","notifyChange","parseFlagPayload","getItem","headerKey","getHeaderValue","getDocumentCookie","cookies","parseCookieHeader","cookieKey","get","record","targetKey","recordKey","part","separatorIndex","safeDecode","payload","text","parseJsonFlags","parseDelimitedFlags","parsed","parse","flagName","normaliseFlagName","String","entry","findFlagValueSeparator","name","rawValue","parseBoolean","equalsIndex","colonIndex","normalisedName","trimQuotes","flagKey","normalisedValue","source","prototype","hasOwnProperty","call","states","localFlags","hasLocalValue","hasServerValue","hasCodeValue","codeValue","serverValue","localValue","change","CustomEvent","map","join","decodeURIComponent","FeatureFlagService","configuredContainer","featureFlagService","container","registerHandler","defaultFlags","featureFlag","flagIdentifier","TypeError","defineFlagBackedProperty","resolveFeatureFlagService","featureFlagState","featureFlagsSnapshot","requiresFeatureFlag","descriptor","originalMethod","apply","args","whenDisabled","getter","Reflect","deleteProperty","defineProperty","enumerable","configurable","Container","instance","sequences","Map","listenerAttached","registerSequence","label","keySequence","listenForKeySequence","set","sequence","currentIndex","removeSequence","handleKeydownBound","handleKeydown","includes","taskQueue","http","ea","run","navigationInstruction","queueMicroTask","global","scrollTo","location","href","appClientType","appClientInstance","url","fetch","method","then","status","publish","TaskQueue","EventAggregator","PostRenderStep","prepareTasks","taskNotificationTypeId","tasks","ALL","OVERDUE","x","overdue","dueDate","subtract","format","yesterday","dueDateLabel","DUE_TODAY","duetoday","UPCOMING","upcoming","tomorrow","COMPLETE","isCompletedTask","currentRouteName","scrollIntoView","tableClassName","rowClassName","table","from","find","selectedTr","behavior","block","scrollQCEErrorIntoView","errors","actions","addAction","priority","newHook","addFilter","hasAction","getActions","getFilters","removeAction","val","removeAllActions","removeFilter","removeAllFilters","doAction","hook","error","console","applyFilter","result","Promise","downloadBlobFromUrl","fileName","isValidParams","urlToBlob","blobUrl","blob","downloadFile","download","URL","createObjectURL","click","endpoint","utils","urlToOctetStrem","uri","ok","message","BlobService","store","claims","subscription","userClaims","getClaims","apiHost","json","expiry","expiryDate","Date","getTime","has","claim","every","hasAsync","dateNow","parseInt","some","Store","ClaimsService","blobService","router","modal","isProcessing","getDocument","params","distributionType","beginProcessing","postDocumentGeneration","documentUrl","processDocumentUrl","endProcessing","processingError","processingBrowserPopupsDisabled","Preview","Print","Download","DownloadEmail","openPreview","fetchAndPrintDocument","downloadAndEmailDocument","ClientId","clientName","routeFragment","generate","open","fileBlob","documentUrlFromBlob","iframeContainer","iframe","getOrCreateIframe","src","onload","focus","contentWindow","print","childElementCount","iframeId","clientId","model","show","content","withOptions","type","post","queue","queueGuid","pollDocumentStatus","statusResult","GenerationStatusString","getDocumentUrl","processError","lastException","ExceptionMessage","errorMessage","attempts","delayInMs","completed","counter","timer","getDocumentCreationStatus","isCompletedState","msec","resolve","ClientStatementService","Loader","defaultOptions","class","theme","layout","titleColor","messageColor","iconColor","backgroundColor","close","closeOnEscape","closeOnClick","timeout","overlayClose","overlayColor","transitionIn","transitionOut","animateInside","progressBar","image","imageWidth","maxWidth","displayMode","drag","loaderOpen","loader","overrideOptions","bootstrapLoader","setDefaultOptions","getDefaultOptions","destroyAllToasts","toast","toastMessageIsRequired","mergeToastSettings","hide","toastRef","closedBy","toastElement","querySelector","info","progress","success","warning","restoreDefaultSettings","question","getLoaderPath","showLoader","loaderText","$loaderText","hideLoader","showStatusIcon","statusSuccess","statusIconTimeout","existingImage","existingTransIn","existingTimeout","existingOnClosed","onClosed","GreenTick","RedCross","TailSpin","IaToastMessage","$loaderTextClass","onOpening","addLoaderText","onClosing","removeLoaderText","createTextNode","parentNode","IaToastService","log","LogManager","createAuthToken","user","webFormLinkCode","username","password","client","deviceToken","saveToken","sessionStorage","passwordRequiresChanging","deviceId","returnedDeviceToken","twoFactorSetupRequired","twoFactorCodeRequired","getAuthToken","getLocation","getRefreshToken","getDeviceId","getDeviceTokens","refreshAuthToken","storage","token","access_token","refresh_token","removeToken","TokenService","debug","logger","rest","warn","i18tnValidation","aurelia","originalGetMessage","ValidationMessageProvider","getMessage","originalGetDisplayName","getDisplayName","translation","I18N","tr","parser","propertyName","displayName","i18n","initScrollTabs","context","tabPosition","isRightChevronDisabled","tabUI","allTabs","tabClass","onwheel","preventDefault","deltaY","scrollTabs","IntersectionObserver","entries","isIntersecting","threshold","observe","direction","isLeftChevronDisabled"],"sourceRoot":""}