{"version":3,"file":"app-662ab070.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"],"sourcesContent":["// Module\nvar code = \"\\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n\\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 const filter = this.filters?.find((filter: any) => filter.keys?.includes(this.sortKey));\r\n\r\n if(filter?.types) {\r\n val1 = filter.types.find((type: any) => type.id == a[this.sortKey])?.label;\r\n val2 = filter.types.find((type: any) => type.id == b[this.sortKey])?.label;\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\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\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 localFlags: FeatureFlagMap = {};\r\n private memoryFlags: FeatureFlagMap = {};\r\n private stateKey = '';\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(false);\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(false);\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(false);\r\n return this.createFlagState(flag);\r\n }\r\n\r\n public snapshot(): Partial> {\r\n this.syncEffectiveFlags(false);\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 this.serverCookieFlags = this.readCookieFlags();\r\n this.mergeFlags(this.serverHeaderFlags, this.readHeaderFlags(response.headers));\r\n this.syncServerFlags();\r\n this.syncEffectiveFlags();\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 const savedFlags = this.readSavedFlags();\r\n savedFlags[flag] = value;\r\n this.writeSavedFlags(savedFlags);\r\n }\r\n\r\n private writeSavedFlags(flags: FeatureFlagMap): void {\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 }\r\n\r\n private applyServerCookieFlags(flags: FeatureFlagMap): void {\r\n 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(notify = true): void {\r\n const savedFlags = this.readSavedFlags();\r\n if (this.serialiseFlags(this.localFlags) !== this.serialiseFlags(savedFlags)) {\r\n this.localFlags = savedFlags;\r\n }\r\n const nextFlags = this.normaliseFlagRecord(this.effectiveFlags());\r\n this.replaceFlags(nextFlags);\r\n if (!notify) {\r\n return;\r\n }\r\n const states = this.createSnapshot();\r\n const stateKey = JSON.stringify(states);\r\n\r\n if (this.stateKey !== stateKey) {\r\n this.stateKey = stateKey;\r\n this.notifyChange(nextFlags, states);\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.localFlags);\r\n\r\n return flags;\r\n }\r\n\r\n private flags(): FeatureFlagMap {\r\n return this.memoryFlags;\r\n }\r\n\r\n private replaceFlags(flags: FeatureFlagMap): void {\r\n const nextFlags = this.normaliseFlagRecord(flags);\r\n if (this.serialiseFlags(this.memoryFlags) !== this.serialiseFlags(nextFlags)) {\r\n this.memoryFlags = nextFlags;\r\n }\r\n\r\n if (typeof window === 'undefined') {\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 hasLocalValue = this.hasFlag(this.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 ? this.localFlags[flag] : undefined,\r\n };\r\n }\r\n\r\n private notifyChange(flags: FeatureFlagMap, states: FeatureFlagChange['states']): void {\r\n const change: FeatureFlagChange = {\r\n flags: { ...flags },\r\n states,\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 = configuredContainer ?? Container.instance;\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"],"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","find","includes","type","id","label","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","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","localFlags","memoryFlags","stateKey","ensureFlagsInitialized","load","featureFlags","enabled","flag","syncEffectiveFlags","flags","setLocalOverride","all","known","knownFlags","state","createFlagState","snapshot","createSnapshot","onChange","candidate","defaults","normaliseFlagRecord","readCookieFlags","syncServerFlags","refresh","applyServerFlagsFromResponse","response","mergeFlags","readHeaderFlags","headers","applyServerFlagsFromHeaders","applyServerHeaderFlags","applyServerFlagsFromCookie","cookie","applyServerCookieFlags","isKnownFlag","persistLocalFlag","clearLocalOverride","savedFlags","readSavedFlags","hasFlag","writeSavedFlags","clearLocalOverrides","normalisedFlags","Object","localStorage","setItem","JSON","stringify","removeItem","notify","serialiseFlags","nextFlags","effectiveFlags","replaceFlags","states","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","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","keySequence","listenForKeySequence","set","sequence","currentIndex","removeSequence","handleKeydownBound","handleKeydown","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"],"sourceRoot":""}