@luigi-project/core-modular 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/App.svelte.d.ts +1 -0
- package/README.md +13 -0
- package/core-api/auth.d.ts +92 -0
- package/core-api/feature-toggles.d.ts +33 -0
- package/core-api/luigi.d.ts +79 -0
- package/core-api/navigation.d.ts +15 -0
- package/core-api/routing.d.ts +43 -0
- package/core-api/theming.d.ts +78 -0
- package/core-api/ux.d.ts +22 -0
- package/luigi-engine.d.ts +40 -0
- package/luigi.js +34 -0
- package/luigi.js.map +1 -0
- package/main.d.ts +1 -0
- package/modules/communicaton-module.d.ts +6 -0
- package/modules/routing-module.d.ts +18 -0
- package/modules/ui-module.d.ts +14 -0
- package/modules/ux-module.d.ts +49 -0
- package/package.json +22 -0
- package/services/auth-layer.service.d.ts +24 -0
- package/services/auth-store.service.d.ts +23 -0
- package/services/dirty-status.service.d.ts +41 -0
- package/services/i18n.service.d.ts +81 -0
- package/services/modal.service.d.ts +52 -0
- package/services/navigation.service.d.ts +213 -0
- package/services/node-data-management.service.d.ts +45 -0
- package/services/routing.service.d.ts +103 -0
- package/services/service-registry.d.ts +42 -0
- package/services/viewurl-decorator.d.ts +7 -0
- package/types/connector.d.ts +26 -0
- package/utilities/defaultLuigiTranslationTable.d.ts +1 -0
- package/utilities/helpers/async-helpers.d.ts +13 -0
- package/utilities/helpers/auth-helpers.d.ts +22 -0
- package/utilities/helpers/config-helpers.d.ts +19 -0
- package/utilities/helpers/escaping-helpers.d.ts +10 -0
- package/utilities/helpers/event-listener-helpers.d.ts +7 -0
- package/utilities/helpers/generic-helpers.d.ts +78 -0
- package/utilities/helpers/navigation-helpers.d.ts +15 -0
- package/utilities/helpers/routing-helpers.d.ts +254 -0
- package/utilities/helpers/storage-helpers.d.ts +25 -0
- package/utilities/helpers/usersetting-dialog-helpers.d.ts +8 -0
- package/utilities/luigi-config-defaults.d.ts +21 -0
- package/utilities/store.d.ts +11 -0
package/luigi.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"luigi.js","sources":["../src/utilities/defaultLuigiTranslationTable.ts","../src/utilities/helpers/escaping-helpers.ts","../src/utilities/helpers/generic-helpers.ts","../src/services/i18n.service.ts","../src/utilities/helpers/async-helpers.ts","../src/core-api/feature-toggles.ts","../src/services/modal.service.ts","../src/utilities/store.ts","../src/utilities/helpers/config-helpers.ts","../src/services/auth-store.service.ts","../src/services/auth-layer.service.ts","../src/core-api/auth.ts","../src/utilities/helpers/auth-helpers.ts","../src/utilities/helpers/navigation-helpers.ts","../src/utilities/helpers/routing-helpers.ts","../src/utilities/luigi-config-defaults.ts","../src/services/navigation.service.ts","../node_modules/@luigi-project/container/bundle.js","../src/services/service-registry.ts","../src/services/viewurl-decorator.ts","../src/modules/ui-module.ts","../src/services/routing.service.ts","../src/core-api/navigation.ts","../src/core-api/routing.ts","../src/core-api/theming.ts","../src/services/dirty-status.service.ts","../src/modules/ux-module.ts","../src/utilities/helpers/usersetting-dialog-helpers.ts","../src/core-api/ux.ts","../src/core-api/luigi.ts","../node_modules/esm-env/false.js","../node_modules/svelte/src/internal/shared/utils.js","../node_modules/svelte/src/internal/client/constants.js","../node_modules/svelte/src/internal/client/reactivity/equality.js","../node_modules/svelte/src/internal/client/errors.js","../node_modules/svelte/src/internal/client/reactivity/sources.js","../node_modules/svelte/src/internal/client/dom/operations.js","../node_modules/svelte/src/internal/client/reactivity/deriveds.js","../node_modules/svelte/src/internal/client/reactivity/effects.js","../node_modules/svelte/src/internal/client/runtime.js","../node_modules/svelte/src/internal/client/dom/elements/events.js","../node_modules/svelte/src/utils.js","../node_modules/svelte/src/internal/client/render.js","../node_modules/svelte/src/version.js","../node_modules/svelte/src/internal/disclose-version.js","../src/modules/routing-module.ts","../src/modules/communicaton-module.ts","../src/services/node-data-management.service.ts","../src/luigi-engine.ts","../src/main.ts"],"sourcesContent":["const defaultLuigiInternalTranslationTable: Record<string, any> = {\n luigi: {\n button: {\n confirm: 'Yes',\n dismiss: 'No'\n },\n confirmationModal: {\n body: 'Are you sure you want to do this?',\n header: 'Confirmation'\n },\n navigation: {\n up: 'Up'\n },\n notExactTargetNode: 'Could not map the exact target node for the requested route {route}.',\n requestedRouteNotFound: 'Could not find the requested route {route}.',\n unsavedChangesAlert: {\n body: 'Unsaved changes will be lost. Do you want to continue?',\n header: 'Unsaved changes detected'\n }\n }\n};\n\nexport const defaultLuigiTranslationTable = defaultLuigiInternalTranslationTable;\n","import type { Link, ProcessedTextAndLinks } from '../../modules/ux-module';\n\n// Helper methods that deal with character escaping.\nexport const EscapingHelpers = {\n sanitizeHtml(text = '') {\n return text\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''')\n .replace(/javascript:/g, '');\n },\n\n restoreSanitizedBrs(text = '') {\n return text\n .replace(/<br\\/>/g, '<br>')\n .replace(/<br \\/>/g, '<br>')\n .replace(/<br>/g, '<br>')\n .replace(/<br >/g, '<br>');\n },\n\n restoreSanitizedElements(text = '') {\n let result = text;\n const elements = ['i', 'b', 'br', 'mark', 'strong', 'em', 'small', 'del', 'ins', 'sub', 'sup'];\n\n for (let i = 0; i < elements.length; i++) {\n const openTag_1 = new RegExp(`<${elements[i]}\\/>`, 'g');\n const openTag_2 = new RegExp(`<${elements[i]} \\/>`, 'g');\n const openTag_3 = new RegExp(`<${elements[i]}>`, 'g');\n const openTag_4 = new RegExp(`<${elements[i]} >`, 'g');\n\n const closeTag_1 = new RegExp(`<\\/${elements[i]}[\\/]>`, 'g');\n const closeTag_2 = new RegExp(`<\\/${elements[i]} [\\/]>`, 'g');\n const closeTag_3 = new RegExp(`<[\\/]${elements[i]}>`, 'g');\n const closeTag_4 = new RegExp(`<[\\/]${elements[i]} >`, 'g');\n\n result = result\n .replace(openTag_1, `<${elements[i]}>`)\n .replace(openTag_2, `<${elements[i]}>`)\n .replace(openTag_3, `<${elements[i]}>`)\n .replace(openTag_4, `<${elements[i]}>`)\n .replace(closeTag_1, `</${elements[i]}>`)\n .replace(closeTag_2, `</${elements[i]}>`)\n .replace(closeTag_3, `</${elements[i]}>`)\n .replace(closeTag_4, `</${elements[i]}>`);\n }\n\n return result;\n },\n\n sanatizeHtmlExceptTextFormatting(text = '') {\n return this.restoreSanitizedElements(this.sanitizeHtml(text));\n },\n\n sanitizeParam(param = '') {\n return String(param)\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''')\n .replace(/\\//g, '/');\n },\n\n escapeKeyForRegexp(str = '') {\n return str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&');\n },\n\n processTextAndLinks(text = '', links: Link, uniqueID: any): ProcessedTextAndLinks {\n const sanitizedText = this.restoreSanitizedBrs(this.sanitizeHtml(text));\n const initialValue: ProcessedTextAndLinks = { sanitizedText, links: [] };\n\n if (!links) {\n return initialValue;\n }\n\n return Object.entries(links).reduce<ProcessedTextAndLinks>((acc, [key, content]) => {\n const elemId = `_luigi_alert_${uniqueID}_link_${this.sanitizeParam(key)}`;\n const escapedText = this.restoreSanitizedBrs(this.sanitizeHtml(content.text));\n const processedData = `<a id=\"${elemId}\">${escapedText}</a>`;\n const keyForRegex = this.escapeKeyForRegexp(key);\n const pattern = new RegExp(`({${keyForRegex}})`, 'g');\n return {\n sanitizedText: acc.sanitizedText.replace(pattern, processedData),\n links: acc.links.concat({\n elemId,\n url: content.url ? encodeURI(this.sanitizeHtml(content.url)) : undefined,\n dismissKey: content.dismissKey ? encodeURI(this.sanitizeHtml(content.dismissKey)) : undefined\n })\n };\n }, initialValue);\n }\n};\n","export const GenericHelpers = {\n /**\n * Creates a random Id\n * @returns random numeric value {number}\n * @private\n */\n getRandomId: (): number => {\n return window.crypto.getRandomValues(new Uint32Array(1))[0];\n },\n\n /**\n * Checks if input is a promise.\n * @param promiseToCheck mixed\n * @returns {boolean}\n */\n isPromise: (promiseToCheck: any): boolean => {\n return promiseToCheck && GenericHelpers.isFunction(promiseToCheck.then);\n },\n\n /**\n * Checks if input is a function.\n * @param functionToCheck mixed\n * @returns {boolean}\n */\n isFunction: (functionToCheck: any): boolean => {\n return functionToCheck && {}.toString.call(functionToCheck) === '[object Function]';\n },\n\n /**\n * Checks if input is a string.\n * @param stringToCheck mixed\n * @returns {boolean}\n */\n isString: (stringToCheck: string | any): boolean => {\n return typeof stringToCheck === 'string' || stringToCheck instanceof String;\n },\n\n /**\n * Checks if input is an object.\n * @param objectToCheck mixed\n * @returns {boolean}\n */\n isObject: (objectToCheck: object | any): boolean => {\n return !!(objectToCheck && typeof objectToCheck === 'object' && !Array.isArray(objectToCheck));\n },\n\n /**\n * Removes leading slash of a string\n * @param {str} string\n * @returns {string} string without leading slash\n */\n trimLeadingSlash: (str: string): string => {\n return GenericHelpers.isString(str) ? str.replace(/^\\/+/g, '') : '';\n },\n\n /**\n * Prepend current url to redirect_uri, if it is a relative path\n * @param {str} string from which any number of trailing slashes should be removed\n * @returns {string} string without any trailing slash\n */\n trimTrailingSlash: (str: string): string => {\n return GenericHelpers.isString(str) ? str.replace(/\\/+$/, '') : '';\n },\n\n /**\n * Checks if HTML element is visible\n * @param {Element} element to be checked in DOM\n * @returns {boolean} `true` if element is visible - otherwise `false`\n */\n isElementVisible: (element: Element): boolean => {\n if (!element) {\n return false;\n }\n\n const cssDisplayValue: string = window.getComputedStyle(element).getPropertyValue('display');\n\n return cssDisplayValue !== 'none';\n },\n\n /**\n * Gets collection of HTML elements\n * @param {string} selector to be searched in DOM\n * @param {boolean} onlyVisible elements should be included\n * @returns {Array} collection of HTML elements\n */\n getNodeList: (selector: string, onlyVisible = false): Element[] => {\n const items: Element[] = [];\n\n if (!selector) {\n return items;\n }\n\n const elements: Element[] = Array.from(document.querySelectorAll(selector));\n\n elements.forEach((item: Element) => {\n if (onlyVisible) {\n if (GenericHelpers.isElementVisible(item)) {\n items.push(item);\n }\n } else {\n items.push(item);\n }\n });\n\n return items;\n },\n\n /**\n * Prepend current url to redirect_uri, if it is a relative path\n * @param {path} string full url, relative or absolute path\n * @returns {string} window location origin\n */\n prependOrigin: (path: string): string => {\n if (!path || path.startsWith('http')) {\n return path;\n }\n\n const hasLeadingSlash: boolean = path.startsWith('/');\n\n if (path.length) {\n return window.location.origin + (hasLeadingSlash ? '' : '/') + path;\n }\n\n return window.location.origin;\n },\n\n /**\n * Gets value of the given property on the given object.\n * @param object mixed\n * @param property name of the given property\n */\n getConfigValueFromObject: (object: Record<string, any>, property: string): any => {\n let propIndex = 0;\n let nextValue: any = object;\n const propertyPath = property.split('.');\n\n while (nextValue && propIndex < propertyPath.length) {\n nextValue = nextValue[propertyPath[propIndex++]];\n }\n\n return nextValue;\n },\n\n /**\n * Gets boolean value of specified property on the given object.\n * Function returns true if the property value is equal true or 'true'. Otherwise the function returns false.\n * @param {Object} object mixed\n * @param {string} property name of the given property\n * @returns {boolean} boolean value\n */\n getConfigBooleanValue: (object: Record<string, any>, property: string): boolean => {\n const configuredValue = GenericHelpers.getConfigValueFromObject(object, property);\n\n if (configuredValue === true || configuredValue === 'true') {\n return true;\n }\n\n return false;\n },\n\n getUrlParameter: (key: string) => {\n return new URLSearchParams(window.location.search).get(key);\n }\n};\n","import type { LuigiContainer, LuigiCompoundContainer } from '@luigi-project/container';\nimport type { Luigi } from '../core-api/luigi';\nimport { defaultLuigiTranslationTable } from '../utilities/defaultLuigiTranslationTable';\nimport { EscapingHelpers } from './../utilities/helpers/escaping-helpers';\nimport { GenericHelpers } from '../utilities/helpers/generic-helpers';\n\n/**\n * Localization-related functions\n */\nexport class i18nService {\n currentLocaleStorageKey: string;\n defaultLocale: string;\n listeners: Record<number, (locale: string) => void>;\n translationImpl: any;\n translationTable: Record<string, any>;\n\n constructor(private luigi: Luigi) {\n this.currentLocaleStorageKey = 'luigi.currentLocale';\n this.defaultLocale = 'en';\n this.listeners = {};\n this.translationTable = defaultLuigiTranslationTable;\n }\n\n _init() {\n this._initCustomImplementation();\n this.addCurrentLocaleChangeListener((locale: string) => {\n this.broadcastLocaleToAllContainers(locale);\n });\n }\n\n /**\n * Gets the current locale.\n * @returns {string} current locale\n */\n getCurrentLocale(): string {\n return sessionStorage.getItem(this.currentLocaleStorageKey) || this.defaultLocale;\n }\n\n /**\n * Sets current locale to the specified one.\n * @param {string} locale locale to be set as the current locale\n */\n setCurrentLocale(locale: string, containerElement?: LuigiContainer | LuigiCompoundContainer): void {\n if (!(containerElement?.clientPermissions as any)?.changeCurrentLocale) {\n console.error(\n 'Current locale change declined from client, as client permission \"changeCurrentLocale\" is not set for this view.'\n );\n\n return;\n }\n\n if (locale) {\n if (containerElement) {\n containerElement.locale = locale;\n }\n\n sessionStorage.setItem(this.currentLocaleStorageKey, locale);\n this._notifyLocaleChange(locale);\n }\n\n this.luigi.getEngine()._connector?.setCurrentLocale(locale);\n }\n\n /**\n * Registers a listener for locale changes.\n * @param {Function} listener function called on every locale change with the new locale as argument\n * @returns {number | null} listener ID associated with the given listener; use it when removing the listener\n */\n addCurrentLocaleChangeListener(listener: (locale: string) => void): number | null {\n let listenerId = null;\n\n if (GenericHelpers.isFunction(listener)) {\n listenerId = GenericHelpers.getRandomId();\n this.listeners[listenerId] = listener;\n } else {\n console.error('Provided locale change listener is not a function.');\n }\n\n return listenerId;\n }\n\n /**\n * Unregisters a listener for locale changes.\n * @param {number} listenerId listener ID associated with the listener to be removed, returned by addCurrentLocaleChangeListener\n */\n removeCurrentLocaleChangeListener(listenerId: number): void {\n if (listenerId && this.listeners[listenerId]) {\n delete this.listeners[listenerId];\n } else {\n console.error('Unable to remove locale change listener - no listener registered for given ID.');\n }\n }\n\n /**\n * Gets translated text for the specified key in the current locale or in the specified one.\n * Property values for token replacement in the localization key will be taken from the specified interpolations object.\n *\n * <!-- add-attribute:class:success -->\n * > **TIP**: Be aware that this function is not asynchronous and therefore the translation table must be existing already at initialization. Take a look at our [i18n](i18n.md) section for an implementation suggestion.\n *\n * @param {string} key key to be translated\n * @param {Object} interpolations object with properties that will be used for token replacements in the localization key\n * @param {string} locale optional locale to get the translation for; default is the current locale\n * @returns {string} translated text for the specified key\n */\n getTranslation(key: string, interpolations = undefined, locale = undefined): string {\n if (!key) return '';\n\n if (this.translationImpl) {\n const result = this.translationImpl.getTranslation(key, interpolations, locale);\n\n if (result !== key) {\n return result;\n }\n }\n\n const findTranslation = this.findTranslation(key, this.translationTable, interpolations);\n\n return findTranslation ? findTranslation : key;\n }\n\n /**\n * @private\n */\n private _notifyLocaleChange(locale: string): void {\n Object.getOwnPropertyNames(this.listeners).forEach((listenerId: string) => {\n this.listeners[Number(listenerId)](locale);\n });\n\n this.luigi.configChanged();\n }\n\n /**\n * @private\n */\n private _initCustomImplementation(): void {\n this.translationImpl = this.luigi.getConfigValue('settings.customTranslationImplementation');\n\n if (GenericHelpers.isFunction(this.translationImpl)) {\n this.translationImpl = this.translationImpl();\n }\n }\n\n /**\n * @private\n * Sets locale to all Luigi containers\n */\n private broadcastLocaleToAllContainers(locale: string): void {\n const containers = GenericHelpers.getNodeList('luigi-container[lui_container]');\n\n if (containers?.length && locale) {\n containers.forEach((element: any) => {\n element.locale = locale;\n element.updateContext({ locale });\n });\n }\n }\n\n /**\n * @private\n * Finds the translated value based on given key.\n * @param {string} key key to be translated\n * @param {*} obj translation table\n * @param {Object | undefined} interpolations object with properties that will be used for token replacements in the localization key\n * @returns {string | undefined} current locale\n */\n private findTranslation(key: string, obj: any, interpolations: Record<any, string> | undefined): string | undefined {\n const splitted: string[] = key.split('.');\n\n for (let i = 0; i < splitted.length; i++) {\n const key = splitted[i];\n\n if (Object.prototype.hasOwnProperty.call(obj, key) && typeof obj[key] === 'object') {\n obj = obj[key];\n } else {\n if (interpolations) {\n return this.findInterpolations(obj[key], interpolations);\n }\n\n return obj[key];\n }\n }\n }\n\n /**\n * @private\n * Replaces values that are defiend in translation strings\n * @param {string} value string to be translated\n * @param {Object} interpolations translation table\n * @returns {string} current locale\n * @example\n * findInterpolations('Environment {num}', {num: 1})\n */\n private findInterpolations(value: string, interpolations: Record<any, string>): string {\n if (typeof value !== 'string' || !value.trim()) {\n return value;\n }\n\n Object.keys(interpolations).forEach((item: string) => {\n value = value.replace(\n new RegExp('{' + EscapingHelpers.escapeKeyForRegexp(item) + '}', 'gi'),\n interpolations[item]\n );\n });\n\n return value;\n }\n}\n","// Standalone or partly-standalone methods that are used widely through the whole app and are asynchronous.\nimport { GenericHelpers } from './generic-helpers';\n\nexport const AsyncHelpers = {\n \n wrapAsPromise: (value: any): Promise<any> => {\n return new Promise((resolve) => {\n resolve(value);\n });\n },\n\n /**\n * Executes a function with a set of parameters\n * and returns its value as promise\n *\n * @param {function} fn a function\n * @param {array} args an array of arguments\n * @returns {promise}\n */\n applyFunctionPromisified: (fn: any, args: any): Promise<any> => {\n fn = fn.apply(this, args);\n\n if (GenericHelpers.isPromise(fn)) {\n return fn;\n }\n\n return AsyncHelpers.wrapAsPromise(fn);\n },\n\n /*\n * Gets value of the given property on the given object.\n * If the value is a Function it is called and the result of that call is the value.\n * If the value is not a Promise it is wrapped to a Promise so that the returned value is definitely a Promise.\n */\n getConfigValueFromObjectAsync: (\n object: Record<string, any>,\n property: string,\n ...parameters: any[]\n ): Promise<any> => {\n const value = GenericHelpers.getConfigValueFromObject(object, property);\n\n if (GenericHelpers.isFunction(value)) {\n return AsyncHelpers.applyFunctionPromisified(value, parameters);\n }\n\n return AsyncHelpers.wrapAsPromise(value);\n }\n};\n","import { GenericHelpers } from '../utilities/helpers/generic-helpers';\n\nexport class FeatureToggles {\n featureToggleList!: Set<string>;\n\n constructor() {\n this.featureToggleList = new Set();\n }\n\n /**\n * Add a feature toggle to an active feature toggles list\n * @param {string} featureToggleName name of the feature toggle\n */\n setFeatureToggle(featureToggleName: string, fromUrlQuery = false): void {\n if (!this.isValid(featureToggleName)) return;\n if (featureToggleName.startsWith('!') && !fromUrlQuery) return;\n if (this.isDuplicatedOrDisabled(featureToggleName)) return;\n\n this.featureToggleList.add(featureToggleName);\n }\n\n /**\n * Remove a feature toggle from the list\n * @param {string} featureToggleName name of the feature toggle\n */\n unsetFeatureToggle(featureToggleName: string): void {\n if (!this.isValid(featureToggleName)) return;\n\n if (!this.featureToggleList.has(featureToggleName)) {\n console.warn('Feature toggle name is not in the list.');\n return;\n }\n\n this.featureToggleList.delete(featureToggleName);\n }\n\n /**\n * Get a list of active feature toggles\n * @return {Array} of active feature toggles\n */\n getActiveFeatureToggleList(): string[] {\n const featureToggles: string[] = Array.from(this.featureToggleList);\n\n return [...featureToggles].filter((ft) => !ft.startsWith('!'));\n }\n\n /**\n * Check if it is a valid feature toggle\n * @private\n * @param {string} featureToggleName name of the feature toggle\n * @return {boolean} of valid feature toggle name\n */\n private isValid(featureToggleName: string): boolean {\n if (GenericHelpers.isString(featureToggleName)) return true;\n\n console.warn(`Feature toggle name is not valid or not of type 'string'`);\n return false;\n }\n\n /**\n * Check if feature toggle is duplicated or already disabled\n * @private\n * @param {string} featureToggleName name of the feature toggle\n * @return {boolean} of valid feature toggle name\n */\n private isDuplicatedOrDisabled(featureToggleName: string): boolean {\n if (this.featureToggleList.has(featureToggleName)) {\n console.warn('Feature toggle name already exists');\n return true;\n }\n\n if (this.featureToggleList.has(`!${featureToggleName}`)) {\n console.warn('Disabled feature toggle can not be activated');\n return true;\n }\n\n return false;\n }\n}\n","import type { Luigi } from '../core-api/luigi';\nimport type { ModalSettings } from './navigation.service';\n\nexport interface ModalPromiseObject {\n closePromise?: Promise<void>;\n resolveFn?: () => void;\n onCloseRequestHandler?: () => void;\n onInternalClose?: () => void;\n modalsettings?: ModalSettings;\n}\n\nexport class ModalService {\n _modalStack: ModalPromiseObject[] = [];\n modalSettings: ModalSettings = {};\n\n constructor(private luigi: Luigi) {}\n\n /**\n * Closes the topmost modal in the stack.\n */\n async closeModals(): Promise<void> {\n if (this._modalStack.length === 0) return;\n\n const toClose = [...this._modalStack];\n for (const { onInternalClose } of toClose) {\n try {\n if (typeof onInternalClose === 'function') {\n onInternalClose();\n }\n } catch (e) {\n console.warn('onInternalClose threw an error', e);\n }\n }\n this.clearModalStack();\n }\n\n /**\n * Adds a modal promise object to the internal modal stack.\n *\n * This method is used to track active modals in a last-in-first-out (LIFO) stack,\n * enabling the service to manage and resolve/dismiss modals in the correct order.\n *\n * @param modalObj - The modal promise object to register on the stack.\n * @returns {void}\n */\n registerModal(modalObj: ModalPromiseObject): void {\n if (!modalObj) {\n return;\n }\n this._modalStack.push(modalObj);\n }\n\n /**\n * Gets the settings of the first modal in the stack.\n * @returns The settings of the first modal in the stack, or an empty object if the stack is empty.\n */\n getModalSettings(): ModalSettings | {} {\n if (this._modalStack.length > 0) {\n return this._modalStack[0].modalsettings || {};\n }\n return {};\n }\n\n /**\n * Gets the current number of modals in the stack.\n * @returns number The current number of modals in the stack.\n */\n getModalStackLength(): number {\n return this._modalStack.length;\n }\n\n /**\n * Updates the settings of the first modal in the stack.\n * @param settings modal settings to update the first modal with\n */\n updateFirstModalSettings(settings: ModalSettings): void {\n if (this._modalStack.length > 0) {\n const topModal = this._modalStack[0];\n topModal.modalsettings = { ...topModal.modalsettings, ...settings };\n }\n }\n\n /**\n * Clears the entire modal stack.\n */\n clearModalStack(): void {\n this._modalStack = [];\n }\n\n /**\n * Removes the last modal from the stack.\n */\n removeLastModalFromStack(): void {\n this._modalStack.pop();\n }\n}\n","class LuigiStore {\n $value: any;\n $subscribers: Set<(value: any) => void> = new Set();\n\n constructor(initialValue: any) {\n this.$value = initialValue;\n }\n\n set(value: any): void {\n this.$value = value;\n this.$subscribers.forEach((subscriber) => {\n subscriber(value);\n });\n }\n\n update(fn: (val: any) => any): void {\n this.set(fn(this.$value));\n }\n\n subscribe(subscriber: (value: any) => void): () => void {\n this.$subscribers.add(subscriber);\n subscriber(this.$value);\n return () => {\n this.$subscribers.delete(subscriber);\n };\n }\n}\n\nfunction get(store: LuigiStore) {\n return store.$value;\n}\n\nfunction writable(value: any): LuigiStore {\n return new LuigiStore(value);\n}\n\nexport { get, writable, LuigiStore };\n","import type { Luigi } from '../../core-api/luigi';\nimport { AsyncHelpers } from './async-helpers';\nimport { GenericHelpers } from './generic-helpers';\n\nclass ConfigHelpersClass {\n setErrorMessage(errorMsg: string) {\n this.getLuigi().getEngine()?._connector?.showFatalError(errorMsg);\n }\n\n getLuigi(): Luigi {\n return (window as any).Luigi;\n }\n\n getConfigValue(key: string): any {\n return this.getLuigi().getConfigValue(key);\n }\n\n getConfigValueAsync(key: string): any {\n return this.getLuigi().getConfigValueAsync(key);\n }\n\n /**\n * Executes the function of the given property on the Luigi config object.\n * Fails if property is not a function.\n *\n * If the value is a Function it is called (with the given parameters) and the result of that call is the value.\n * If the value is not a Promise it is wrapped to a Promise so that the returned value is definitely a Promise.\n * @private\n * @memberof Configuration\n */\n async executeConfigFnAsync(property: string, throwError = false, ...parameters: any) {\n const fn = this.getConfigValue(property);\n if (GenericHelpers.isFunction(fn)) {\n try {\n return await AsyncHelpers.applyFunctionPromisified(fn, parameters);\n } catch (error) {\n if (throwError) {\n return Promise.reject(error);\n }\n }\n }\n return Promise.resolve(undefined);\n }\n}\n\nexport const ConfigHelpers = new ConfigHelpersClass();\n","import { ConfigHelpers } from '../utilities/helpers/config-helpers';\n\nclass AuthStoreSvcClass {\n private _authKey: any;\n private _storageType: any;\n private _defaultStorage: any;\n private _newlyAuthorizedKey: any;\n private _invalidStorageMsg: any;\n\n private _internalStorage: Record<string, any> = {};\n\n constructor() {\n this._defaultStorage = 'localStorage';\n this._authKey = 'luigi.auth';\n this._newlyAuthorizedKey = 'luigi.newlyAuthorized';\n this._invalidStorageMsg =\n 'Configuration Error: Invalid auth.storage value defined. Must be one of localStorage, sessionStorage or none.';\n }\n\n reset() {\n this._storageType = undefined;\n }\n\n getStorageKey() {\n return this._authKey;\n }\n\n getStorageType(): string {\n if (!this._storageType) {\n this._storageType = ConfigHelpers.getConfigValue('auth.storage') || this._defaultStorage;\n }\n return this._storageType;\n }\n\n getAuthData() {\n return this._getStore(this.getStorageKey());\n }\n\n setAuthData(values: any) {\n this._setStore(this.getStorageKey(), values);\n }\n\n removeAuthData() {\n this._setStore(this.getStorageKey(), undefined);\n }\n\n isNewlyAuthorized() {\n return !!this._getStore(this._newlyAuthorizedKey);\n }\n\n setNewlyAuthorized() {\n this._setStore(this._newlyAuthorizedKey, true);\n }\n\n removeNewlyAuthorized() {\n this._setStore(this._newlyAuthorizedKey, undefined);\n }\n\n _getWebStorage(sType: string): Storage {\n return (window as any)[sType] as Storage;\n }\n\n _setStore(key: string, data: any) {\n switch (this.getStorageType()) {\n case 'localStorage':\n case 'sessionStorage':\n if (data !== undefined) {\n this._getWebStorage(this.getStorageType()).setItem(key, JSON.stringify(data));\n } else {\n this._getWebStorage(this.getStorageType()).removeItem(key);\n }\n break;\n\n case 'none':\n this._internalStorage[key] = data;\n break;\n\n default:\n console.error(this._invalidStorageMsg);\n }\n }\n\n _getStore(key: string): any {\n try {\n switch (this.getStorageType()) {\n case 'localStorage':\n case 'sessionStorage':\n return JSON.parse(this._getWebStorage(this.getStorageType()).getItem(key) as string);\n\n case 'none':\n return this._internalStorage[key];\n\n default:\n console.error(this._invalidStorageMsg);\n }\n } catch (e) {\n console.warn('Error parsing authorization data. Auto-logout might not work!');\n }\n }\n}\n\nexport const AuthStoreSvc = new AuthStoreSvcClass();\n","import { get, writable } from '../utilities/store';\nimport type { LuigiStore } from '../utilities/store';\nimport { GenericHelpers } from '../utilities/helpers/generic-helpers';\nimport { LuigiAuth } from '../core-api/auth';\nimport { ConfigHelpers } from '../utilities/helpers/config-helpers';\nimport { AuthHelpers } from '../utilities/helpers/auth-helpers';\nimport { AuthStoreSvc } from './auth-store.service';\n\nclass AuthLayerSvcClass {\n idpProviderInstance: any;\n private _userInfoStore: LuigiStore;\n private _loggedInStore: LuigiStore;\n\n constructor() {\n this._userInfoStore = writable({});\n this._loggedInStore = writable(false);\n }\n\n setUserInfo(uInfo: any) {\n this._userInfoStore.set(uInfo);\n }\n setLoggedIn(loggedIn: boolean) {\n this._loggedInStore.set(loggedIn);\n }\n\n getUserInfoStore() {\n return this._userInfoStore;\n }\n\n getLoggedInStore() {\n return this._loggedInStore;\n }\n\n async init() {\n const idpProviderName = ConfigHelpers.getConfigValue('auth.use');\n if (!idpProviderName) {\n // No Authentication active\n return Promise.resolve(true);\n }\n const idpProviderSettings = ConfigHelpers.getConfigValue(`auth.${idpProviderName}`);\n\n /**\n * Prevent IDP Provider initialization, if an error is present\n * in the url params and onAuthError is defined in the user config.\n * errors are represented by `error` and `errorDescription` param.\n */\n const uaError: any = AuthHelpers.parseUrlAuthErrors() || {};\n const noError = await AuthHelpers.handleUrlAuthErrors(idpProviderSettings, uaError.error, uaError.errorDescription);\n if (!noError) {\n return;\n }\n\n this.idpProviderInstance = this.getIdpProviderInstance(idpProviderName, idpProviderSettings);\n if (GenericHelpers.isPromise(this.idpProviderInstance)) {\n return this.idpProviderInstance\n .then((resolved: any) => {\n this.idpProviderInstance = resolved;\n return this.checkAuth(idpProviderSettings);\n })\n .catch((err: Error) => {\n const errorMsg = `Error: ${err.message || err}`;\n console.error(errorMsg, err.message && err);\n ConfigHelpers.setErrorMessage(errorMsg);\n });\n }\n return this.checkAuth(idpProviderSettings);\n }\n\n async checkAuth(idpProviderSettings: any) {\n const authData = AuthHelpers.getStoredAuthData();\n if (!authData || !AuthHelpers.isLoggedIn()) {\n if (ConfigHelpers.getConfigValue('auth.disableAutoLogin')) {\n return;\n }\n\n /**\n * onAuthExpired\n * If onAuthExpired exists, it will be evaluated.\n * Continues with the standard authorization flow,\n * if `onAuthExpired` it returns undefined or truthy value.\n */\n let startAuth = true;\n if (authData) {\n startAuth = await LuigiAuth.handleAuthEvent('onAuthExpired', idpProviderSettings);\n }\n if (startAuth) {\n return this.startAuthorization();\n }\n return;\n }\n\n if (this.idpProviderInstance.settings && GenericHelpers.isFunction(this.idpProviderInstance.settings.userInfoFn)) {\n this.idpProviderInstance.settings\n .userInfoFn(this.idpProviderInstance.settings, authData)\n .then((userInfo: any) => {\n this.setUserInfo(userInfo);\n this.setLoggedIn(true);\n });\n } else {\n if (GenericHelpers.isFunction(this.idpProviderInstance.userInfo)) {\n this.idpProviderInstance.userInfo(idpProviderSettings).then((userInfo: any) => {\n this.setUserInfo(userInfo);\n this.setLoggedIn(true);\n });\n } else {\n this.setLoggedIn(true);\n this.setUserInfo(get(this._userInfoStore));\n }\n }\n\n const hasAuthSuccessFulFn = GenericHelpers.isFunction(ConfigHelpers.getConfigValue('auth.events.onAuthSuccessful'));\n\n if (hasAuthSuccessFulFn && AuthStoreSvc.isNewlyAuthorized()) {\n await LuigiAuth.handleAuthEvent('onAuthSuccessful', idpProviderSettings, authData);\n }\n AuthStoreSvc.removeNewlyAuthorized();\n\n if (GenericHelpers.isFunction(this.idpProviderInstance.setTokenExpirationAction)) {\n this.idpProviderInstance.setTokenExpirationAction();\n }\n if (GenericHelpers.isFunction(this.idpProviderInstance.setTokenExpireSoonAction)) {\n this.idpProviderInstance.setTokenExpireSoonAction();\n }\n }\n\n async startAuthorization() {\n if (this.idpProviderInstance) {\n return this.idpProviderInstance.login().then((res: any) => {\n AuthStoreSvc.setNewlyAuthorized();\n if (res) {\n // TODO: is not required for secure usecases, only if auth is done within core.\n // Normally the login() redirects to external idp and errors are shown there.\n console.error(res);\n }\n return;\n });\n }\n }\n\n logout() {\n const authData = AuthHelpers.getStoredAuthData();\n const logoutCallback = async (redirectUrl: any) => {\n await LuigiAuth.handleAuthEvent('onLogout', this.idpProviderInstance.settings, undefined, redirectUrl);\n AuthStoreSvc.removeAuthData();\n };\n const customLogoutFn = ConfigHelpers.getConfigValue(`auth.${ConfigHelpers.getConfigValue('auth.use')}.logoutFn`);\n const profileLogoutFn = ConfigHelpers.getConfigValueAsync('navigation.profile.logout.customLogoutFn');\n if (GenericHelpers.isFunction(customLogoutFn)) {\n customLogoutFn(this.idpProviderInstance.settings, authData, logoutCallback);\n } else if (GenericHelpers.isFunction(this.idpProviderInstance.logout)) {\n this.idpProviderInstance.logout(authData, logoutCallback);\n } else if (profileLogoutFn && GenericHelpers.isFunction(profileLogoutFn)) {\n profileLogoutFn(authData, logoutCallback);\n } else {\n logoutCallback(this.idpProviderInstance.settings.logoutUrl);\n }\n }\n\n createIdpProviderException(message: string) {\n return { message, name: 'IdpProviderException' };\n }\n\n async getIdpProviderInstance(idpProviderName: string, idpProviderSettings: any) {\n // custom provider provided via config:\n const idpProvider = GenericHelpers.getConfigValueFromObject(idpProviderSettings, 'idpProvider');\n if (idpProvider) {\n const customIdpInstance = await new idpProvider(idpProviderSettings);\n ['login'].forEach((requiredFnName) => {\n if (!GenericHelpers.isFunction(customIdpInstance[requiredFnName])) {\n throw this.createIdpProviderException(\n `${requiredFnName} function does not exist in custom IDP Provider ${idpProviderName}`\n );\n }\n });\n\n return customIdpInstance;\n }\n\n // handle non-existing providers\n const onAuthConfigError = GenericHelpers.isFunction(ConfigHelpers.getConfigValue('auth.events.onAuthConfigError'));\n if (onAuthConfigError) {\n await LuigiAuth.handleAuthEvent('onAuthConfigError', {\n idpProviderName: idpProviderName,\n type: 'IdpProviderException'\n });\n } else {\n throw this.createIdpProviderException(`IDP Provider ${idpProviderName} does not exist.`);\n }\n }\n\n unload() {\n if (this.idpProviderInstance && GenericHelpers.isFunction(this.idpProviderInstance.unload)) {\n this.idpProviderInstance.unload();\n }\n }\n\n resetExpirationChecks() {\n if (this.idpProviderInstance && GenericHelpers.isFunction(this.idpProviderInstance.resetExpirationChecks)) {\n this.idpProviderInstance.resetExpirationChecks();\n }\n }\n}\n\nexport const AuthLayerSvc = new AuthLayerSvcClass();\n","import { AuthLayerSvc } from '../services/auth-layer.service';\nimport { AuthStoreSvc } from '../services/auth-store.service';\nimport { ConfigHelpers } from '../utilities/helpers/config-helpers';\n\nexport class LuigiAuthClass {\n /**\n * Detects if authorization is enabled via configuration.\n * Read more about [custom authorization providers](authorization-configuration.md).\n * @memberof Authorization\n * @returns {boolean} - `true` if authorization is enabled. Otherwise returns `false`.\n * @example\n * Luigi.auth().isAuthorizationEnabled();\n */\n isAuthorizationEnabled() {\n return !!ConfigHelpers.getConfigValue('auth.use');\n }\n\n /**\n * Login the user dynamically.\n * This will run the same functionality as though the user clicked the login button.\n * @memberof Authorization\n * @example\n * Luigi.auth().login();\n */\n login() {\n if (this.isAuthorizationEnabled()) {\n AuthLayerSvc.startAuthorization();\n }\n }\n\n /**\n * Logout the user dynamically.\n * This will run the same functionality as though the user clicked the logout button.\n * @memberof Authorization\n * @example\n * Luigi.auth().logout();\n */\n logout() {\n if (this.isAuthorizationEnabled()) {\n AuthLayerSvc.logout();\n }\n }\n\n /**\n * @private\n * @memberof Authorization\n * @param {string} eventName\n * @param {Object} providerInstanceSettings\n * @param {AuthData} data\n * @param {string} redirectUrl\n */\n async handleAuthEvent(\n eventName: string,\n providerInstanceSettings: any,\n data?: any,\n redirectUrl?: string\n ): Promise<any> {\n const result = await ConfigHelpers.executeConfigFnAsync(\n 'auth.events.' + eventName,\n false,\n providerInstanceSettings,\n data\n );\n const redirect = result === undefined || !!result;\n if (redirect && redirectUrl) {\n window.location.href = redirectUrl;\n return;\n }\n return redirect;\n }\n /**\n * Authorization Storage helpers, to be used in your custom authorization provider.\n * Read more about custom authorization providers [here](authorization-configuration.md#implement-a-custom-authorization-provider).\n * @name AuthorizationStore\n */\n\n /**\n * Authorization object that is stored in auth store and used within Luigi. It is then available in [LuigiClient.addInitListener](luigi-client-api.md#addInitListener) and can also be used in the Core configuration.\n * @typedef {Object} AuthData\n * @property {string} accessToken - access token value\n * @property {string} accessTokenExpirationDate - timestamp value\n * @property {string} scope - scope, can be empty if it is not required\n * @property {string} idToken - id token, used for renewing authentication\n */\n get store() {\n if (!ConfigHelpers.getLuigi()?.initialized) {\n console.warn(\n 'Luigi Core is not initialized yet. Consider moving your code to the luigiAfterInit lifecycle hook. ' +\n 'Documentation: https://docs.luigi-project.io/docs/lifecycle-hooks'\n );\n }\n return {\n /**\n * Retrieves the key name that is used to store the auth data.\n * @memberof AuthorizationStore\n * @returns {string} - name of the store key\n * @example Luigi.auth().store.getStorageKey()\n */\n getStorageKey: () => AuthStoreSvc.getStorageKey(),\n /**\n * Retrieves the storage type that is used to store the auth data. To set it, use the `storage` property of the `auth` Luigi configuration object. Find out more [here](https://docs.luigi-project.io/docs/authorization-configuration?section=general-authorization-options).\n * @memberof AuthorizationStore\n * @returns {('localStorage'|'sessionStorage'|'none')} - storage type\n * @example Luigi.auth().store.getStorageType()\n */\n getStorageType: () => AuthStoreSvc.getStorageType(),\n /**\n * Retrieves the current auth object.\n * @memberof AuthorizationStore\n * @returns {AuthData} - the current auth data object\n * @example Luigi.auth().store.getAuthData()\n */\n getAuthData: () => AuthStoreSvc.getAuthData(),\n /**\n * Sets authorization data\n * @memberof AuthorizationStore\n * @param {AuthData} data - new auth data object\n * @example Luigi.auth().store.setAuthData(data)\n */\n setAuthData: (data: any) => AuthStoreSvc.setAuthData(data),\n /**\n * Clears authorization data from store\n * @memberof AuthorizationStore\n * @example Luigi.auth().store.removeAuthData()\n */\n removeAuthData: () => AuthStoreSvc.removeAuthData(),\n /**\n * Defines a new authorization session. Must be triggered after initial `setAuthData()` in order to trigger **onAuthSuccessful** event after login.\n * @memberof AuthorizationStore\n * @example Luigi.auth().store.setNewlyAuthorized()\n */\n setNewlyAuthorized: () => {\n AuthStoreSvc.setNewlyAuthorized();\n AuthLayerSvc.resetExpirationChecks();\n }\n };\n }\n}\n\nexport const LuigiAuth = new LuigiAuthClass();\n","import { LuigiAuth } from '../../core-api/auth';\nimport { AuthStoreSvc } from '../../services/auth-store.service';\nimport { GenericHelpers } from './generic-helpers';\n\nclass AuthHelpersClass {\n getStoredAuthData() {\n return AuthStoreSvc.getAuthData();\n }\n\n isLoggedIn(): boolean {\n const storedAuthData = this.getStoredAuthData();\n const isAuthValid = () => storedAuthData.accessTokenExpirationDate > Number(new Date());\n return !!(storedAuthData && isAuthValid());\n }\n\n /**\n * Checks if there is a error parameter in the url\n * and returns error and error description\n */\n parseUrlAuthErrors() {\n const error = GenericHelpers.getUrlParameter('error');\n const errorDescription = GenericHelpers.getUrlParameter('errorDescription');\n if (error) {\n return { error, errorDescription };\n }\n return;\n }\n\n /**\n * Triggers onAuthError event with the found error\n * and error parameters.\n * @param {object} providerInstanceSettings\n * @param {string} error\n * @param {string} errorDescription\n */\n async handleUrlAuthErrors(providerInstanceSettings: any, error?: string, errorDescription?: string) {\n if (error) {\n return await LuigiAuth.handleAuthEvent(\n 'onAuthError',\n providerInstanceSettings,\n { error, errorDescription },\n providerInstanceSettings.logoutUrl +\n '?post_logout_redirect_uri=' +\n providerInstanceSettings.post_logout_redirect_uri +\n '&error=' +\n error +\n '&errorDescription=' +\n errorDescription\n );\n }\n return true;\n }\n}\n\nexport const AuthHelpers = new AuthHelpersClass();\n","import type { FeatureToggles } from '../../core-api/feature-toggles';\nimport type { Luigi } from '../../core-api/luigi';\nimport type { AppSwitcher, Node, PathData } from '../../services/navigation.service';\nimport { AuthHelpers } from './auth-helpers';\nimport { GenericHelpers } from './generic-helpers';\n\nexport const NavigationHelpers = {\n normalizePath: (raw: string) => {\n if (!raw || raw.length <= 0) {\n return raw;\n }\n let value = raw;\n if (value.startsWith('#')) {\n value = value.substring(1);\n }\n if (value.startsWith('/')) {\n value = value.substring(1);\n }\n return value;\n },\n\n segmentMatches: (linkSegment: string, pathSegment: string, pathParams: Record<string, any> /*TODO*/): boolean => {\n if (linkSegment === pathSegment) {\n return true;\n }\n if (pathSegment.startsWith(':') && pathParams && pathParams[pathSegment.substr(1)] === linkSegment) {\n return true;\n }\n return false;\n },\n\n checkMatch: (route: string, nodesInPath: Array<any>, pathParams?: Record<string, any>): boolean => {\n let match = true;\n GenericHelpers.trimTrailingSlash(GenericHelpers.trimLeadingSlash(route))\n .split('/')\n .forEach((pathSegment, index) => {\n if (match) {\n if (index + 1 >= nodesInPath.length) {\n match = false;\n } else if (\n !nodesInPath[index + 1]?.pathSegment ||\n !NavigationHelpers.segmentMatches(pathSegment, nodesInPath[index + 1]?.pathSegment ?? '', pathParams ?? {})\n ) {\n match = false;\n }\n }\n });\n return match;\n },\n\n checkVisibleForFeatureToggles: (nodeToCheckPermission: any, featureToggles: FeatureToggles): boolean => {\n if (nodeToCheckPermission?.visibleForFeatureToggles) {\n const activeFeatureToggles: string[] = featureToggles?.getActiveFeatureToggleList() || [];\n\n for (const ft of nodeToCheckPermission.visibleForFeatureToggles) {\n if (ft.startsWith('!')) {\n if (activeFeatureToggles.includes(ft.slice(1))) {\n return false;\n }\n } else {\n if (!activeFeatureToggles.includes(ft)) {\n return false;\n }\n }\n }\n }\n\n return true;\n },\n\n generateTooltipText: (node: any, translation: string, luigi: Luigi): string => {\n let ttText: boolean | string | undefined = node?.tooltipText;\n\n if (ttText === undefined) {\n ttText = luigi.getConfigValue('navigation.defaults.tooltipText');\n }\n\n switch (ttText) {\n case undefined:\n return translation;\n case false:\n return '';\n default:\n return luigi.i18n().getTranslation(ttText as string);\n }\n },\n\n isNodeAccessPermitted: (\n nodeToCheckPermissionFor: Node,\n parentNode: Node | undefined,\n currentContext: Record<string, any>,\n luigi: Luigi\n ): boolean => {\n if (luigi.auth().isAuthorizationEnabled()) {\n const loggedIn = AuthHelpers.isLoggedIn();\n const anon = nodeToCheckPermissionFor.anonymousAccess;\n\n if ((loggedIn && anon === 'exclusive') || (!loggedIn && anon !== 'exclusive' && anon !== true)) {\n return false;\n }\n }\n\n const featureToggles: FeatureToggles = luigi.featureToggles();\n\n if (!NavigationHelpers.checkVisibleForFeatureToggles(nodeToCheckPermissionFor, featureToggles)) {\n return false;\n }\n\n const permissionCheckerFn = luigi.getConfigValue('navigation.nodeAccessibilityResolver');\n\n if (typeof permissionCheckerFn !== 'function') {\n return true;\n }\n\n return permissionCheckerFn(nodeToCheckPermissionFor, parentNode, currentContext);\n },\n\n updateHeaderTitle: (appSwitcherData: AppSwitcher, pathData: PathData): string | undefined => {\n const appSwitcherItems = appSwitcherData?.items;\n if (appSwitcherItems && pathData) {\n let title = '';\n [...appSwitcherItems]\n .sort((el1, el2) => (el2.link || '').localeCompare(el1.link || ''))\n .some((item) => {\n let match = false;\n match = NavigationHelpers.checkMatch(item.link || '', pathData.nodesInPath ?? []);\n if (!match && item.selectionConditions && item.selectionConditions.route) {\n //TODO if pathParams are implemented\n match = NavigationHelpers.checkMatch(item.selectionConditions.route, pathData.nodesInPath ?? []);\n if (match) {\n (item.selectionConditions.contextCriteria || []).forEach((ccrit: any) => {\n match = match && (pathData?.selectedNode as any)?.context?.[ccrit.key] === ccrit.value;\n });\n }\n }\n if (match) {\n title = item.title || '';\n return true;\n }\n });\n return title;\n }\n return;\n },\n\n buildPath(pathToLeftNavParent: Node[], pathData?: PathData): string {\n const replacedSegments = pathToLeftNavParent.map((node) => {\n const segment = node.pathSegment;\n if (segment?.startsWith(':')) {\n const key = segment.slice(1);\n const value = pathData?.pathParams?.[key];\n if (value != null) {\n return encodeURIComponent(String(value));\n }\n }\n return segment;\n });\n\n return replacedSegments.join('/');\n },\n\n mergeContext(...objs: Record<string, any>[]): Record<string, any> {\n return Object.assign({}, ...objs);\n },\n\n prepareForTests(...parts: string[]): string {\n let result = '';\n parts.forEach((p) => {\n if (p) {\n result += (result ? '_' : '') + encodeURIComponent(p.toLowerCase().split(' ').join(''));\n }\n });\n return result;\n }\n};\n","import type { FeatureToggles } from '../../core-api/feature-toggles';\nimport type { Luigi } from '../../core-api/luigi';\nimport type { Node, PathData } from '../../services/navigation.service';\nimport { EscapingHelpers } from './escaping-helpers';\nimport { NavigationHelpers } from './navigation-helpers';\n\nexport const RoutingHelpers = {\n defaultContentViewParamPrefix: '~',\n defaultQueryParamSeparator: '?',\n defaultModalViewParamName: 'modal',\n\n /**\n * Adds or updates query parameters to a hash-based routing string.\n *\n * @param params - An object representing the parameters to add or update in the hash's query string.\n * @param hash - The hash string (e.g., \"#/path?foo=bar\") to which the parameters will be added or updated.\n * @param paramPrefix - (Optional) A prefix to apply to each parameter key when adding or updating.\n * @returns The updated hash string with the new or modified query parameters.\n */\n addParamsOnHashRouting(params: Record<string, any>, hash: string, paramPrefix?: string): string {\n let localhash = hash;\n const [hashValue, givenQueryParamsString] = localhash.split('?');\n const searchParams = new URLSearchParams(givenQueryParamsString);\n this.modifySearchParams(params, searchParams, paramPrefix);\n localhash = hashValue;\n if (searchParams.toString() !== '') {\n localhash += `?${searchParams.toString()}`;\n }\n return localhash;\n },\n\n /**\n * Modifies the given `URLSearchParams` object by setting or deleting parameters based on the provided `params` object.\n *\n * For each key-value pair in `params`, the function sets the corresponding parameter in `searchParams`.\n * If a `paramPrefix` is provided, it is prepended to each parameter key.\n * If a value in `params` is `undefined`, the corresponding parameter is deleted from `searchParams`.\n *\n * @param params - An object containing key-value pairs to set or delete in the search parameters.\n * @param searchParams - The `URLSearchParams` instance to modify.\n * @param paramPrefix - (Optional) A string to prefix to each parameter key.\n */\n modifySearchParams(params: Record<string, any>, searchParams: URLSearchParams, paramPrefix?: string): void {\n for (const [key, value] of Object.entries(params)) {\n const paramKey = paramPrefix ? `${paramPrefix}${key}` : key;\n\n searchParams.set(paramKey, value);\n if (value === undefined) {\n searchParams.delete(paramKey);\n }\n }\n },\n\n /**\n * Extracts and sanitizes node-specific parameters from the provided params object.\n *\n * This method filters the input `params` to include only those keys that start with\n * a specific prefix, determined by `getContentViewParamPrefix(luigi)`. The prefix is\n * removed from the key names in the resulting object. The resulting map is then\n * sanitized before being returned.\n *\n * @param params - An object containing key-value pairs of parameters.\n * @param luigi - The Luigi instance used to determine the parameter prefix.\n * @returns A sanitized map of node-specific parameters with the prefix removed from their keys.\n */\n filterNodeParams(params: Record<string, string>, luigi: Luigi): Record<string, string> {\n const result: Record<string, string> = {};\n const paramPrefix = this.getContentViewParamPrefix(luigi);\n if (params) {\n Object.entries(params).forEach((entry) => {\n if (entry[0].startsWith(paramPrefix)) {\n const paramName = entry[0].substr(paramPrefix.length);\n result[paramName] = entry[1];\n }\n });\n }\n return this.sanitizeParamsMap(result);\n },\n\n /**\n * Retrieves the content view parameter prefix from the Luigi configuration.\n *\n * This method attempts to obtain the prefix value from the Luigi configuration using the key\n * `'routing.nodeParamPrefix'`. If the configuration value is explicitly set to `false`, it returns\n * an empty string. If the value is not set or is falsy, it falls back to the default content view\n * parameter prefix defined in the class.\n *\n * @param luigi - The Luigi instance used to access configuration values.\n * @returns The content view parameter prefix as a string.\n */\n getContentViewParamPrefix(luigi: Luigi): any {\n let prefix = luigi?.getConfigValue('routing.nodeParamPrefix');\n if (prefix === false) {\n prefix = '';\n } else if (!prefix) {\n prefix = this.defaultContentViewParamPrefix;\n }\n return prefix;\n },\n\n /**\n * Sanitizes the keys and values of a parameter map by applying the `EscapingHelpers.sanitizeParam` function\n * to each key-value pair. Returns a new object with sanitized keys and values.\n *\n * @param paramsMap - An object containing string keys and values to be sanitized.\n * @returns A new object with both keys and values sanitized.\n */\n sanitizeParamsMap(paramsMap: Record<string, string>): Record<string, string> {\n return Object.entries(paramsMap).reduce(\n (sanitizedMap: Record<string, string>, paramPair) => {\n sanitizedMap[EscapingHelpers.sanitizeParam(paramPair[0])] = EscapingHelpers.sanitizeParam(paramPair[1]);\n return sanitizedMap;\n },\n {} as Record<string, string>\n );\n },\n\n /**\n * Prepares and filters the search parameters from the Luigi routing context\n * based on the current node's client permissions. Only parameters explicitly\n * allowed with `read: true` in the node's `clientPermissions.urlParameters`\n * are included in the returned object.\n *\n * @param currentNode - The current navigation node containing client permissions.\n * @param luigi - The Luigi instance providing access to routing and search parameters.\n * @returns An object containing only the permitted search parameters for the client.\n */\n prepareSearchParamsForClient(currentNode: Node, luigi: Luigi): {} {\n const filteredObj: Record<string, any> = {};\n if (currentNode && currentNode.clientPermissions && currentNode.clientPermissions.urlParameters) {\n Object.keys(currentNode.clientPermissions.urlParameters).forEach((key) => {\n if (\n key in luigi.routing().getSearchParams() &&\n currentNode.clientPermissions?.urlParameters &&\n currentNode.clientPermissions.urlParameters[key]?.read === true\n ) {\n filteredObj[key] = (luigi.routing().getSearchParams() as Record<string, any>)[key];\n }\n });\n }\n return filteredObj;\n },\n\n /**\n * Retrieves the current path and query string from the browser's location hash.\n *\n * @returns An object containing the normalized path and the query string.\n * @remarks\n * - The path is normalized using `NavigationHelpers.normalizePath`.\n * - The query string is extracted from the portion after the '?' in the hash.\n * - If there is no query string, `query` will be `undefined`.\n */\n getCurrentPath(hashRouting?: boolean): { path: string; query: string } {\n //TODO intentNavigation implementation\n if (hashRouting) {\n const pathRaw = NavigationHelpers.normalizePath(location.hash);\n const [path, query] = pathRaw.split('?');\n return { path, query };\n } else {\n return { path: NavigationHelpers.normalizePath(location.pathname), query: location.search };\n }\n },\n\n /**\n * Retrieves the modal path from the current URL's query parameters based on the provided Luigi instance.\n *\n * @param luigi - The Luigi instance used to determine the query parameter name and value.\n * @returns The modal path as a string if present in the query parameters; otherwise, `undefined`.\n */\n getModalPathFromPath(luigi: Luigi): string | undefined {\n return this.getQueryParam(this.getModalViewParamName(luigi), luigi);\n },\n\n /**\n * Retrieves the value of a specific query parameter from the current URL.\n *\n * @param paramName - The name of the query parameter to retrieve.\n * @param luigi - The Luigi instance used to access routing information.\n * @returns The value of the specified query parameter if present; otherwise, `undefined`.\n */\n getQueryParam(paramName: string, luigi: Luigi): string | undefined {\n return this.getQueryParams(luigi)[paramName];\n },\n\n /**\n * Retrieves the current query parameters from the URL as a key-value record.\n *\n * Depending on the Luigi configuration, this method will extract query parameters\n * either from the URL hash (if hash routing is enabled) or from the standard search\n * portion of the URL.\n *\n * @param luigi - The Luigi instance used to access configuration values.\n * @returns A record containing query parameter names and their corresponding values.\n */\n getQueryParams(luigi: Luigi): Record<string, string> {\n const hashRoutingActive = luigi.getConfigValue('routing.useHashRouting');\n return hashRoutingActive ? this.getLocationHashQueryParams() : this.getLocationSearchQueryParams();\n },\n\n /**\n * Retrieves the query parameters from the current location's search string as a key-value map.\n *\n * @returns {Record<string, string>} An object containing the query parameters as key-value pairs.\n * If there are no query parameters, returns an empty object.\n */\n getLocationSearchQueryParams(): Record<string, string> {\n return RoutingHelpers.getLocation().search\n ? RoutingHelpers.parseParams(RoutingHelpers.getLocation().search.slice(1))\n : {};\n },\n\n /**\n * Returns the current browser location object.\n *\n * @returns {Location} The current location object representing the URL of the document.\n */\n getLocation(): Location {\n return location;\n },\n\n /**\n * Extracts and parses query parameters from the current location's hash fragment.\n *\n * @returns {Record<string, string>} An object containing key-value pairs of query parameters\n * extracted from the hash, or an empty object if no query parameters are present.\n */\n getLocationHashQueryParams(): Record<string, string> {\n const queryParamIndex = RoutingHelpers.getLocation().hash.indexOf(this.defaultQueryParamSeparator);\n return queryParamIndex !== -1\n ? RoutingHelpers.parseParams(RoutingHelpers.getLocation().hash.slice(queryParamIndex + 1))\n : {};\n },\n\n /**\n * Retrieves the name of the URL parameter used for modal views in routing.\n *\n * This method attempts to obtain the parameter name from the Luigi configuration\n * using the key `'routing.modalPathParam'`. If the configuration value is not set,\n * it falls back to a default parameter name defined by `this.defaultModalViewParamName`.\n *\n * @param luigi - The Luigi instance used to access configuration values.\n * @returns The name of the modal view parameter to be used in routing.\n */\n getModalViewParamName(luigi: Luigi): string {\n let paramName = luigi.getConfigValue('routing.modalPathParam');\n if (!paramName) {\n paramName = this.defaultModalViewParamName;\n }\n return paramName;\n },\n\n /**\n * Parses a URL query parameter string into an object mapping parameter names to values.\n *\n * Replaces '+' with spaces, splits the string by '&' to get key-value pairs,\n * and decodes each component using `decodeURIComponent`.\n *\n * @param paramsString - The URL query parameter string to parse (e.g., \"foo=bar&baz=qux\").\n * @returns An object where each key is a parameter name and each value is the corresponding decoded value.\n */\n parseParams(paramsString: string): Record<string, string> {\n const params = new URLSearchParams(paramsString);\n\n const result = new Map<string, string>();\n\n for (const [key, value] of params.entries()) {\n result.set(key, value);\n }\n\n return Object.fromEntries(result);\n },\n\n getModalParamsFromPath(luigi: Luigi): any {\n const modalParamsStr = this.getQueryParam(`${this.getModalViewParamName(luigi)}Params`, luigi);\n return modalParamsStr && JSON.parse(modalParamsStr);\n },\n\n /**\n * Get the query param separator which is used with hashRouting\n * Default: :\n * @example /home?modal=(urlencoded)/some-modal?modalParams=(urlencoded){...}&otherParam=hmhm\n * @returns the first query param separator (like ? for path routing)\n */\n getHashQueryParamSeparator(): string {\n return this.defaultQueryParamSeparator;\n },\n\n /**\n * Get an url without modal data. It's necessary on page refresh or loading Luigi with modal data in a new tab\n * @param {String} searchParamsString url search parameter as string\n * @param {String} modalParamName modalPathParam value defined in Luigi routing settings\n * @returns {String} url search parameter as string without modal data\n */\n getURLWithoutModalData(searchParamsString: string, modalParamName: string): string {\n const searchParams = new URLSearchParams(searchParamsString);\n searchParams.delete(modalParamName);\n searchParams.delete(`${modalParamName}Params`);\n return searchParams.toString();\n },\n\n /**\n * Extending history state object for calculation how much history entries the browser have to go back when modal will be closed.\n * @param {Object} historyState history.state object.\n * @param {Number} historyState.modalHistoryLength will be increased when modals will be openend successively like e.g. stepping through a wizard.\n * @param {Number} historyState.historygap is the history.length at the time when the modal will be opened. It's needed for calculating how much we have to go back in the browser history when the modal will be closed.\n * @param {String} historyState.pathBeforeHistory path before modal will be opened. It's needed for calculating how much we have to go back in the browser history when the modal will be closed.\n * @param {boolean} hashRoutingActive true if hash routing is active, false if path routing is active\n * @param {URL} url url object to read hash value or pathname\n * @returns {Object} history state object\n */\n handleHistoryState(historyState: any, path: string): any {\n if (historyState && historyState.modalHistoryLength) {\n historyState.modalHistoryLength += 1;\n } else {\n historyState = {\n modalHistoryLength: 1,\n historygap: history.length,\n pathBeforeHistory: path\n };\n }\n return historyState;\n },\n\n /**\n * Encodes an object of key-value pairs into a URL query string.\n *\n * Each key and value in the input object is URI-encoded and joined with '='.\n * The resulting pairs are concatenated with '&' to form a valid query string.\n *\n * @param dataObj - An object containing key-value pairs to encode.\n * @returns A URL-encoded query string representing the input object.\n */\n encodeParams(dataObj: Record<string, any>): string {\n const queryArr = [];\n for (const key in dataObj) {\n queryArr.push(encodeURIComponent(key) + '=' + encodeURIComponent(dataObj[key]));\n }\n return queryArr.join('&');\n },\n\n /**\n * Retrieves the last node object from the provided `PathData`'s `nodesInPath` array.\n * If `nodesInPath` is empty or undefined, returns an empty object.\n *\n * @param pathData - The `PathData` object containing the `nodesInPath` array.\n * @returns The last node object in the `nodesInPath` array, or an empty object if none exists.\n */\n getLastNodeObject(pathData: PathData): Node | {} {\n const lastElement = pathData.nodesInPath ? [...pathData.nodesInPath].pop() : {};\n return lastElement || {};\n },\n\n /**\n * Checks if given URL is allowed to be included, based on 'navigation.validWebcomponentUrls' in Luigi config.\n *\n * @param {string} url the URL string to be checked\n * @param {Luigi} luigi - the Luigi instance used to determine the parameter prefix\n * @returns {boolean} `true` if allowed - `false` otherwise\n */\n checkWCUrl(url: string, luigi: Luigi): boolean {\n if (url.indexOf('://') > 0 || url.trim().indexOf('//') === 0) {\n const path = new URL(url);\n\n if (path.host === window.location.host) {\n return true; // same host is okay\n }\n\n const validUrls = luigi.getConfigValue('navigation.validWebcomponentUrls');\n\n if (validUrls?.length > 0) {\n for (const el of validUrls) {\n try {\n if (new RegExp(el).test(url)) {\n return true;\n }\n } catch (e) {\n console.error(e);\n }\n }\n }\n\n return false;\n }\n\n // relative URL is okay\n return true;\n },\n\n /**\n * Set feature toggles\n * @param {string} featureToggleProperty used for identifying feature toggles\n * @param {string} path used for retrieving and appending the path parameters\n */\n /**\n * Set feature toggles\n * @param {string} featureToggleProperty used for identifying feature toggles\n * @param {string} path used for retrieving and appending the path parameters\n */\n setFeatureToggles(featureToggleProperty: string, path: string, featureToggles: FeatureToggles): void {\n const paramsMap: Record<string, string> = this.sanitizeParamsMap(this.parseParams(path.split('?')[1]));\n let featureTogglesFromUrl;\n\n if (paramsMap[featureToggleProperty]) {\n featureTogglesFromUrl = paramsMap[featureToggleProperty];\n }\n\n if (!featureTogglesFromUrl) {\n return;\n }\n\n const featureToggleList: string[] = featureTogglesFromUrl.split(',');\n\n if (featureToggleList.length > 0 && featureToggleList[0] !== '') {\n featureToggleList.forEach((ft) => featureToggles?.setFeatureToggle(ft, true));\n }\n },\n\n /**\n * Replaces dynamic parameter placeholders in the values of the provided object\n * using a mapping of parameter names to concrete values.\n *\n * A placeholder is defined as the concatenation of `paramPrefix` and a key from `paramMap`\n * (e.g. \":id\"). Depending on the `contains` flag, the replacement logic operates in:\n * - Exact match mode (`contains = false`): a value is replaced only if it equals the full placeholder (e.g. value === \":id\").\n * - Containment mode (`contains = true`): a value is scanned and any single occurrence of a placeholder substring is replaced\n * (e.g. \"/users/:id/details\" becomes \"/users/123/details\"). Only the first matching key is replaced; subsequent occurrences\n * or multiple different placeholders in the same value are not handled by this implementation.\n *\n * The function returns a new plain object; the original `object` argument is not mutated.\n *\n * @param object A record whose string values may contain dynamic parameter placeholders to substitute.\n * @param paramMap A mapping of parameter names (without prefix) to their substitution values.\n * @param paramPrefix The prefix that denotes a placeholder in `object` values. Defaults to \":\".\n * @param contains If true, perform substring replacement; if false, only exact value matches are substituted.\n * @returns A new object with substituted values where placeholders matched the provided `paramMap`.\n *\n * @example\n * const obj = { userId: ':id', path: '/users/:id/details', untouched: 'static' };\n * const paramMap = { id: '123' };\n *\n * // Exact match mode:\n * substituteDynamicParamsInObject(obj, paramMap);\n * // => { userId: '123', path: '/users/:id/details', untouched: 'static' }\n *\n * // Containment mode:\n * substituteDynamicParamsInObject(obj, paramMap, ':', true);\n * // => { userId: '123', path: '/users/123/details', untouched: 'static' }\n *\n * @remarks\n * - Only the first matching parameter key is considered per value when `contains = true`.\n * - Values that are undefined or null are returned as-is.\n * - The return type is a generic object; if stronger typing is desired, consider overloading or\n * constraining `paramMap` and `object` to more specific record types.\n */\n substituteDynamicParamsInObject(\n object: Record<string, string>,\n paramMap: Record<any, any>,\n paramPrefix = ':',\n contains = false\n ): {} {\n return Object.entries(object)\n .map(([key, value]) => {\n const foundKey = contains\n ? Object.keys(paramMap).find((key2) => value && value.indexOf(paramPrefix + key2) >= 0)\n : Object.keys(paramMap).find((key2) => value === paramPrefix + key2);\n return [\n key,\n foundKey ? (contains ? value.replace(paramPrefix + foundKey, paramMap[foundKey]) : paramMap[foundKey]) : value\n ];\n })\n .reduce((acc, [key, value]) => {\n return Object.assign(acc, { [key]: value });\n }, {});\n }\n};\n","export const TOP_NAV_DEFAULTS = {\n logout: {\n label: 'Sign Out',\n icon: 'log'\n },\n userSettingsProfileMenuEntry: {\n label: 'Settings',\n icon: 'settings'\n },\n userSettingsDialog: {\n dialogHeader: 'User Settings',\n saveBtn: 'Save',\n dismissBtn: 'Cancel'\n },\n globalSearchCenteredCancelButton: 'Cancel'\n};\n\nexport const NAVIGATION_DEFAULTS = {\n externalLink: {\n sameWindow: false\n }\n};\n","import type { FeatureToggles } from '../core-api/feature-toggles';\nimport type { Luigi } from '../core-api/luigi';\nimport { AuthHelpers } from '../utilities/helpers/auth-helpers';\nimport { EscapingHelpers } from '../utilities/helpers/escaping-helpers';\nimport { GenericHelpers } from '../utilities/helpers/generic-helpers';\nimport { NavigationHelpers } from '../utilities/helpers/navigation-helpers';\nimport { RoutingHelpers } from '../utilities/helpers/routing-helpers';\nimport { TOP_NAV_DEFAULTS } from '../utilities/luigi-config-defaults';\nimport { AuthLayerSvc } from './auth-layer.service';\n\nexport interface TopNavData {\n appTitle: string;\n logo: string;\n topNodes: NavItem[];\n productSwitcher?: ProductSwitcher;\n profile?: ProfileSettings;\n appSwitcher?: AppSwitcher;\n navClick?: (item: NavItem) => void;\n}\n\nexport interface AppSwitcher {\n showMainAppEntry?: boolean;\n items?: AppSwitcherItem[];\n itemRenderer?: (item: AppSwitcherItem, slot: HTMLElement, appSwitcherApiObj?: any) => void;\n}\n\nexport interface AppSwitcherItem {\n title?: string;\n subtitle?: string;\n link?: string;\n selectionConditions?: selectionConditions;\n}\n\nexport interface selectionConditions {\n route?: string;\n contextCriteria?: ContextCriteria[];\n}\n\nexport interface ContextCriteria {\n key: string;\n value: string;\n}\nexport interface ProfileSettings {\n authEnabled: boolean;\n signedIn: boolean;\n logout: ProfileLogout;\n items?: ProfileItem[];\n staticUserInfoFn?: () => Promise<UserInfo>;\n onUserInfoUpdate: (fn: (uInfo: UserInfo) => void) => void;\n itemClick: (item: ProfileItem) => void;\n}\n\nexport interface ProfileLogout {\n label?: string;\n icon?: string;\n testId?: string;\n altText?: string;\n doLogout: () => void;\n}\n\nexport interface ProfileItem {\n label?: string;\n link?: string;\n externalLink?: ExternalLink;\n icon?: string;\n testId?: string;\n altText?: string;\n openNodeAsModal?: boolean | ModalSettings;\n}\n\nexport interface UserInfo {\n name?: string;\n initials?: string;\n email?: string;\n picture?: string;\n description?: string;\n}\n\nexport interface LeftNavData {\n selectedNode: any;\n items: NavItem[];\n basePath: string;\n sideNavFooterText?: string;\n navClick?: (item: NavItem) => void;\n}\n\nexport interface PathData {\n selectedNode?: Node;\n selectedNodeChildren?: Node[];\n nodesInPath?: Node[];\n rootNodes: Node[];\n pathParams: Record<string, any>;\n}\n\nexport interface Node {\n visibleForFeatureToggles?: string[];\n anonymousAccess?: any;\n category?: any;\n children?: Node[];\n clientPermissions?: {\n changeCurrentLocale?: boolean;\n urlParameters?: Record<string, any>;\n };\n context?: Record<string, any>;\n drawer?: ModalSettings;\n externalLink?: ExternalLink;\n hideFromNav?: boolean;\n hideSideNav?: boolean;\n icon?: string;\n keepSelectedForChildren?: boolean;\n label?: string;\n onNodeActivation?: (node: Node) => boolean | void;\n openNodeInModal?: boolean;\n pageErrorHandler?: PageErrorHandler;\n pathSegment?: string;\n tabNav?: boolean;\n tooltip?: string;\n viewUrl?: string;\n isRootNode?: boolean;\n}\n\nexport interface PageErrorHandler {\n timeout: number;\n viewUrl?: string;\n redirectPath?: string;\n errorFn?: (node?: Node) => void;\n}\n\nexport interface Category {\n collabsible?: boolean;\n icon?: string;\n id: string;\n isGroup?: boolean;\n label?: string;\n nodes?: NavItem[];\n tooltip?: string;\n}\n\nexport interface NavItem {\n node?: Node;\n category?: Category;\n selected?: boolean;\n}\n\nexport interface TabNavData {\n selectedNode?: any;\n items?: NavItem[];\n basePath?: string;\n navClick?: (item: NavItem) => void;\n}\n\nexport interface ModalSettings {\n size?: 'fullscreen' | 'l' | 'm' | 's';\n width?: string;\n height?: string;\n title?: string;\n closebtn_data_testid?: string;\n keepPrevious?: boolean;\n}\n\nexport interface ProductSwitcher {\n altText?: string;\n columns?: number;\n icon?: string;\n items?: [ProductSwitcherItem];\n label?: string;\n testId?: string;\n}\n\nexport interface ProductSwitcherItem {\n altText?: string;\n externalLink?: ExternalLink;\n icon?: string;\n label?: string;\n link?: string;\n selected?: boolean;\n subTitle?: string;\n testId?: string;\n}\n\nexport interface ExternalLink {\n url?: string;\n sameWindow?: boolean;\n}\n\nexport class NavigationService {\n constructor(private luigi: Luigi) {}\n\n getPathData(path: string): PathData {\n const cfg = this.luigi.getConfig();\n let pathSegments = path.split('/');\n if (pathSegments?.length > 0 && pathSegments[0] === '') {\n pathSegments = pathSegments.slice(1);\n }\n\n let globalContext = cfg.navigation.globalContext || {};\n let currentContext = globalContext;\n\n const rootNodes = this.prepareRootNodes(cfg.navigation?.nodes, currentContext);\n let pathParams: Record<string, any> = {};\n const pathData: PathData = {\n selectedNodeChildren: rootNodes,\n nodesInPath: [{ children: rootNodes }],\n rootNodes,\n pathParams\n };\n pathSegments.forEach((segment) => {\n if (pathData.selectedNodeChildren) {\n const node = this.findMatchingNode(segment, pathData.selectedNodeChildren || []);\n if (!node) {\n console.log('No matching node found for segment:', segment, 'in children:', pathData.selectedNodeChildren);\n return;\n }\n const nodeContext = node.context || {};\n const mergedContext = NavigationHelpers.mergeContext(currentContext, nodeContext);\n let substitutedContext = mergedContext;\n pathData.selectedNodeChildren = this.getAccessibleNodes(node, node.children || [], mergedContext);\n if (node.pathSegment?.startsWith(':')) {\n pathParams[node.pathSegment.replace(':', '')] = EscapingHelpers.sanitizeParam(segment);\n substitutedContext = RoutingHelpers.substituteDynamicParamsInObject(mergedContext, pathParams);\n }\n currentContext = substitutedContext;\n node.context = substitutedContext;\n pathData.selectedNode = node;\n pathData.selectedNodeChildren = pathData.selectedNode?.children\n ? this.getAccessibleNodes(pathData.selectedNode, pathData.selectedNode.children, currentContext)\n : undefined;\n if (pathData.selectedNode) {\n pathData.nodesInPath?.push(pathData.selectedNode);\n }\n }\n });\n return pathData;\n }\n\n findMatchingNode(urlPathElement: string, nodes: Node[]): Node | undefined {\n let result: Node | undefined = undefined;\n const segmentsLength = nodes.filter((n) => !!n.pathSegment).length;\n const dynamicSegmentsLength = nodes.filter((n) => n.pathSegment && n.pathSegment.startsWith(':')).length;\n\n if (segmentsLength > 1) {\n if (dynamicSegmentsLength === 1) {\n console.warn(\n 'Invalid node setup detected. \\nStatic and dynamic nodes cannot be used together on the same level. Static node gets cleaned up. \\nRemove the static node from the configuration to resolve this warning. \\nAffected pathSegment:',\n urlPathElement,\n 'Children:',\n nodes\n );\n nodes = nodes.filter((n) => n.pathSegment && n.pathSegment.startsWith(':'));\n }\n if (dynamicSegmentsLength > 1) {\n console.error(\n 'Invalid node setup detected. \\nMultiple dynamic nodes are not allowed on the same level. Stopped navigation. \\nInvalid Children:',\n nodes\n );\n return undefined;\n }\n }\n nodes.some((node) => {\n if (\n // Static nodes\n node.pathSegment === urlPathElement ||\n // Dynamic nodes\n (node.pathSegment && node.pathSegment.startsWith(':'))\n ) {\n // Return first matching node\n result = node;\n return true;\n }\n });\n return result;\n }\n\n buildNavItems(nodes: Node[], selectedNode: Node | undefined, pathData: PathData): NavItem[] {\n const catMap: Record<string, NavItem> = {};\n const items: NavItem[] = [];\n\n nodes?.forEach((node) => {\n if (\n !NavigationHelpers.isNodeAccessPermitted(\n node,\n this.getParentNode(pathData.selectedNode, pathData) as Node,\n pathData?.selectedNode?.context || {},\n this.luigi\n )\n ) {\n return;\n }\n if (node.label) {\n node.label = this.luigi.i18n().getTranslation(node.label);\n node.tooltip = this.resolveTooltipText(node, node.label);\n }\n\n if (node.category) {\n const catId = node.category.id || node.category.label || node.category;\n const catLabel = this.luigi.i18n().getTranslation(node.category.label || node.category.id || node.category);\n let catNode: NavItem = catMap[catId];\n\n if (!catNode) {\n catNode = {\n category: {\n icon: node.category.icon,\n id: catId,\n label: catLabel,\n nodes: [],\n tooltip: this.resolveTooltipText(node.category, catLabel)\n }\n };\n catMap[catId] = catNode;\n items.push(catNode);\n }\n\n catNode.category?.nodes?.push({ node, selected: node === selectedNode });\n } else {\n items.push({ node, selected: node === selectedNode });\n }\n });\n return items;\n }\n\n shouldRedirect(path: string, pData?: PathData): string | undefined {\n const pathData = pData ?? this.getPathData(path);\n if (path == '') {\n // poor mans implementation, full path resolution TBD\n return pathData.rootNodes[0].pathSegment;\n } else if (pathData.selectedNode && !pathData.selectedNode.viewUrl && pathData.selectedNode.children?.length) {\n return path + '/' + pathData.selectedNode.children[0].pathSegment;\n }\n return undefined;\n }\n\n getCurrentNode(path: string): any {\n const pathData = this.getPathData(path);\n const node = pathData.selectedNode;\n if (\n !node ||\n !NavigationHelpers.isNodeAccessPermitted(\n node,\n this.getParentNode(pathData.selectedNode, pathData) as Node,\n pathData?.selectedNode?.context || {},\n this.luigi\n )\n ) {\n return undefined;\n }\n return node;\n }\n\n getPathParams(path: string): Record<string, any> {\n return this.getPathData(path).pathParams;\n }\n\n /**\n * getTruncatedChildren\n *\n * Returns an array of children without the childs below\n * last node that has keepSelectedForChildren or tabnav enabled\n * @param array children\n * @returns array children\n */\n getTruncatedChildren(children: any): any[] {\n let childToKeepFound = false;\n let tabNavUnset = false;\n let res: any = [];\n\n children\n .slice()\n .reverse()\n .forEach((node: any) => {\n if (!childToKeepFound || node.tabNav) {\n if (node.tabNav === false) {\n // explicitly set to false\n tabNavUnset = true;\n }\n if (node.keepSelectedForChildren === false) {\n // explicitly set to false\n childToKeepFound = true;\n } else if (node.keepSelectedForChildren || (node.tabNav && !tabNavUnset)) {\n childToKeepFound = true;\n res = [];\n }\n }\n res.push(node);\n });\n\n return res.reverse();\n }\n\n applyNavGroups(items: NavItem[]): NavItem[] {\n const categoryById: Record<string, NavItem> = {};\n const subCatEntries: NavItem[] = [];\n const subCatDelim = '::';\n const converted: NavItem[] = [];\n\n items.forEach((entry) => {\n if (entry.node) {\n //single nodes\n converted.push(entry);\n } else if (entry.category) {\n // categories\n const catId = entry.category.id;\n if (catId && catId.indexOf(subCatDelim) > 0) {\n // subcat\n subCatEntries.push(entry);\n } else {\n // supercat\n const isGroup = entry.category.isGroup;\n categoryById[catId] = entry;\n converted.push(entry);\n }\n }\n });\n\n subCatEntries.forEach((entry) => {\n const superCatId = entry.category?.id.split(subCatDelim)[0] || '';\n const potentialSuperCat = categoryById[superCatId];\n if (!potentialSuperCat) {\n // dunno yet what to do in this case\n } else if (potentialSuperCat.category) {\n if (!potentialSuperCat.category.isGroup) {\n // convert to super cat\n potentialSuperCat.category.isGroup = true;\n }\n if (!potentialSuperCat.category.nodes) {\n potentialSuperCat.category.nodes = [];\n }\n potentialSuperCat.category.nodes.push(entry);\n }\n });\n\n return converted.filter((item) => {\n if (item.category?.isGroup && item.category?.nodes && item.category?.nodes.length > 0) {\n for (let index = 0; index < item.category?.nodes.length; index++) {\n const subitem = item.category?.nodes[index];\n if (\n (subitem.node && !subitem.node.hideFromNav && subitem.node.label) ||\n (subitem.category?.nodes &&\n subitem.category.nodes.filter((node) => !node.node?.hideFromNav && node.node?.label).length > 0)\n ) {\n return true;\n }\n }\n return false;\n }\n return true;\n });\n }\n\n getLeftNavData(path: string, pData?: PathData): LeftNavData {\n const pathData = pData ?? this.getPathData(path);\n let navItems: NavItem[] = [];\n const pathToLeftNavParent: Node[] = [];\n let basePath = '';\n pathData.nodesInPath?.forEach((nip) => {\n if (nip.children) {\n if (!nip.tabNav) {\n basePath += '/' + (nip.pathSegment || '');\n }\n pathToLeftNavParent.push(nip);\n }\n });\n\n const pathDataTruncatedChildren = this.getTruncatedChildren(pathData.nodesInPath);\n let lastElement = [...pathDataTruncatedChildren].pop();\n let selectedNode = pathData.selectedNode;\n if (lastElement?.keepSelectedForChildren || lastElement?.tabNav) {\n selectedNode = lastElement;\n pathDataTruncatedChildren.pop();\n lastElement = [...pathDataTruncatedChildren].pop();\n }\n\n if (selectedNode && selectedNode.children && pathData.rootNodes.includes(selectedNode)) {\n navItems = this.buildNavItems(selectedNode.children, undefined, pathData);\n } else if (selectedNode && selectedNode.tabNav) {\n navItems = lastElement?.children ? this.buildNavItems(lastElement.children, selectedNode, pathData) : [];\n } else {\n navItems = this.buildNavItems([...pathToLeftNavParent].pop()?.children || [], selectedNode, pathData);\n }\n const parentPath = NavigationHelpers.buildPath(pathToLeftNavParent, pathData);\n // convert\n navItems = this.applyNavGroups(navItems);\n return {\n selectedNode: selectedNode,\n items: navItems,\n basePath: basePath.replace(/\\/\\/+/g, '/'),\n sideNavFooterText: this.luigi.getConfig().settings?.sideNavFooterText,\n navClick: (node: Node) => this.navItemClick(node, parentPath)\n };\n }\n\n navItemClick(item: Node, parentPath: string): void {\n if (!item.pathSegment) {\n console.error('Navigation error: pathSegment is not defined for the node.');\n return;\n }\n let fullPath = '/';\n if (parentPath.trim() !== '') {\n fullPath += parentPath + '/';\n } else if (!item.isRootNode) {\n console.error('Navigation error: parentPath is empty while the node is not a root node');\n return;\n }\n fullPath += item.pathSegment;\n this.luigi.navigation().navigate(fullPath);\n }\n\n getTopNavData(path: string, pData?: PathData): TopNavData {\n const cfg = this.luigi.getConfig();\n\n const pathData: PathData = pData ?? this.getPathData(path);\n const rootNodes = this.prepareRootNodes(cfg.navigation?.nodes, cfg.navigation?.globalContext || {});\n const profileItems = cfg.navigation?.profile?.items?.length\n ? JSON.parse(JSON.stringify(cfg.navigation.profile.items))\n : [];\n const appSwitcher =\n cfg.navigation?.appSwitcher && this.getAppSwitcherData(cfg.navigation?.appSwitcher, cfg.settings?.header);\n const headerTitle = NavigationHelpers.updateHeaderTitle(appSwitcher, pathData);\n\n if (profileItems?.length) {\n profileItems.map((item: ProfileItem) => ({\n ...item,\n label: this.luigi.i18n().getTranslation(item.label || '')\n }));\n }\n\n const logoutLabel =\n this.luigi.i18n().getTranslation(cfg.navigation?.profile?.logout?.label) || TOP_NAV_DEFAULTS.logout.label;\n const itemClick = (item: ProfileItem) => {\n if (item.link) {\n this.luigi.navigation().navigate(item.link);\n } else if (item.externalLink?.url) {\n if (item.externalLink.sameWindow) {\n window.location.href = item.externalLink.url;\n } else {\n window.open(item.externalLink.url, '_blank', 'noopener noreferrer');\n }\n }\n };\n const profileSettings: ProfileSettings = {\n authEnabled: this.luigi.auth().isAuthorizationEnabled(),\n signedIn: this.luigi.auth().isAuthorizationEnabled() && AuthHelpers.isLoggedIn(),\n items: profileItems,\n itemClick,\n logout: {\n altText:\n this.luigi.i18n().getTranslation(cfg.navigation?.profile?.logout?.altText) || TOP_NAV_DEFAULTS.logout.label,\n label: logoutLabel,\n icon: cfg.navigation?.profile?.logout?.icon || TOP_NAV_DEFAULTS.logout.icon,\n testId: cfg.navigation?.profile?.logout?.testId || NavigationHelpers.prepareForTests(logoutLabel),\n doLogout: () => {\n AuthLayerSvc.logout();\n }\n },\n onUserInfoUpdate: (fn) => {\n if (cfg.navigation?.profile?.staticUserInfoFn) {\n const uifRes = cfg.navigation?.profile?.staticUserInfoFn();\n if (uifRes instanceof Promise) {\n uifRes.then((uInfo) => {\n fn(uInfo);\n });\n } else {\n fn(uifRes);\n }\n } else {\n AuthLayerSvc.getUserInfoStore().subscribe((uInfo: UserInfo) => {\n fn(uInfo);\n });\n }\n }\n };\n\n return {\n appTitle: headerTitle || cfg.settings?.header?.title,\n logo: cfg.settings?.header?.logo,\n topNodes: this.buildNavItems(rootNodes, undefined, pathData) as [any],\n productSwitcher: cfg.navigation?.productSwitcher,\n profile: profileSettings,\n appSwitcher:\n cfg.navigation?.appSwitcher && this.getAppSwitcherData(cfg.navigation?.appSwitcher, cfg.settings?.header),\n navClick: (node: Node) => {\n this.navItemClick(node, '');\n }\n };\n }\n\n getParentNode(node: Node | undefined, pathData: PathData) {\n if (node && node === pathData.nodesInPath?.[pathData.nodesInPath.length - 1]) {\n return pathData.nodesInPath[pathData.nodesInPath.length - 2];\n }\n return undefined;\n }\n\n getAppSwitcherData(appSwitcherData: AppSwitcher, headerSettings: any): AppSwitcher | undefined {\n const appSwitcher = appSwitcherData;\n const showMainAppEntry = appSwitcher?.showMainAppEntry;\n\n if (appSwitcher && appSwitcher.items && showMainAppEntry) {\n const mainAppEntry = {\n title: this.luigi.i18n().getTranslation(headerSettings.title || ''),\n subTitle: headerSettings.subTitle,\n link: '/'\n };\n\n appSwitcher.items?.map((item: AppSwitcherItem) => ({\n ...item,\n title: this.luigi.i18n().getTranslation(item.title || '')\n }));\n\n if (appSwitcher.items.some((item: AppSwitcherItem) => item.link === mainAppEntry.link)) {\n return appSwitcher;\n }\n\n appSwitcher.items.unshift(mainAppEntry);\n }\n\n return appSwitcher;\n }\n\n getTabNavData(path: string, pData?: PathData): TabNavData {\n const pathData = pData ?? this.getPathData(path);\n const selectedNode = pathData?.selectedNode;\n let parentNode: Node | undefined;\n if (!selectedNode) return {};\n if (!selectedNode.tabNav) {\n parentNode = this.getParentNode(selectedNode, pathData) as Node;\n if (parentNode && !parentNode.tabNav) return {};\n }\n let basePath = '';\n pathData.nodesInPath?.forEach((nip) => {\n if (nip.children) {\n basePath += '/' + (nip.pathSegment || '');\n }\n });\n\n const pathDataTruncatedChildren = parentNode\n ? this.getTruncatedChildren(parentNode.children)\n : this.getTruncatedChildren(selectedNode.children);\n\n const navItems = this.buildNavItems(pathDataTruncatedChildren, selectedNode, pathData);\n const parentPath = NavigationHelpers.buildPath(pathData.nodesInPath || [], pathData);\n return {\n selectedNode,\n items: navItems,\n basePath: basePath.replace(/\\/\\/+/g, '/'),\n navClick: (node: Node) => this.navItemClick(node, parentPath)\n };\n }\n\n /**\n * Handles changes between navigation nodes by invoking a configured hook function.\n *\n * This method retrieves the `navigation.nodeChangeHook` function from the Luigi configuration.\n * If the hook is defined and is a function, it is called with the previous and next node as arguments.\n * If the hook is defined but not a function, a warning is logged to the console.\n *\n * @param prevNode - The previous navigation node, or `undefined` if there was no previous node.\n * @param nextNode - The new navigation node that is being navigated to.\n */\n onNodeChange(prevNode: Node | undefined, nextNode: Node): void {\n const invokedFunction = this.luigi.getConfigValue('navigation.nodeChangeHook');\n if (GenericHelpers.isFunction(invokedFunction)) {\n invokedFunction(prevNode, nextNode);\n } else if (invokedFunction !== undefined) {\n console.warn('nodeChangeHook is not a function!');\n }\n }\n\n /**\n * Extracts navigation data from the provided path string.\n *\n * This method parses the given path to retrieve structured path data and the last node object\n * in the navigation hierarchy. It utilizes internal helpers to process the path and extract\n * relevant navigation information.\n *\n * @param path - The navigation path string to extract data from.\n * @returns A promise that resolves to an object containing:\n * - `nodeObject`: The last node object in the navigation path.\n * - `pathData`: The structured data representation of the path.\n */\n async extractDataFromPath(path: string): Promise<{ nodeObject: Node; pathData: PathData }> {\n const pathData = this.getPathData(path);\n const nodeObject: any = RoutingHelpers.getLastNodeObject(pathData);\n return { nodeObject, pathData };\n }\n\n private resolveTooltipText(node: any, translation: string): string {\n return NavigationHelpers.generateTooltipText(node, translation, this.luigi);\n }\n\n private prepareRootNodes(navNodes: any[], context: Record<string, any>): Node[] {\n const rootNodes = JSON.parse(JSON.stringify(navNodes)) || [];\n if (!rootNodes.length) {\n return rootNodes;\n }\n rootNodes.forEach((rootNode: Node) => {\n rootNode.isRootNode = true;\n });\n\n navNodes.forEach((node: any) => {\n if (node?.badgeCounter?.count) {\n const badgeItem = rootNodes.find((item: any) => item.badgeCounter && item.viewUrl === node.viewUrl);\n\n if (badgeItem) {\n badgeItem.badgeCounter.count = node.badgeCounter.count;\n }\n }\n });\n\n return this.getAccessibleNodes(undefined, rootNodes, context);\n }\n\n private getAccessibleNodes(node: Node | undefined, children: Node[], context: Record<string, any>): Node[] {\n return children\n ? children.filter((child) => NavigationHelpers.isNodeAccessPermitted(child, node, context, this.luigi))\n : [];\n }\n}\n","function t(){}function e(t){return t()}function i(){return Object.create(null)}function n(t){t.forEach(e)}function s(t){return\"function\"==typeof t}function o(t,e){return t!=t?e==e:t!==e||t&&\"object\"==typeof t||\"function\"==typeof t}let a,r;function c(t,e){return t===e||(a||(a=document.createElement(\"a\")),a.href=e,t===a.href)}function l(t,e,i){const n=function(t){if(!t)return document;const e=t.getRootNode?t.getRootNode():t.ownerDocument;if(e&&e.host)return e;return t.ownerDocument}(t);if(!n.getElementById(e)){const t=h(\"style\");t.id=e,t.textContent=i,function(t,e){(function(t,e){t.appendChild(e)})(t.head||t,e),e.sheet}(n,t)}}function d(t,e,i){t.insertBefore(e,i||null)}function u(t){t.parentNode&&t.parentNode.removeChild(t)}function h(t){return document.createElement(t)}function E(t){return document.createTextNode(t)}function m(t,e,i){null==i?t.removeAttribute(e):t.getAttribute(e)!==i&&t.setAttribute(e,i)}function p(t){r=t}function _(){if(!r)throw new Error(\"Function called outside component initialization\");return r}function g(t){_().$$.on_mount.push(t)}const T=[],S=[];let C=[];const $=[],f=Promise.resolve();let R=!1;function A(t){C.push(t)}const w=new Set;let b=0;function I(){if(0!==b)return;const t=r;do{try{for(;b<T.length;){const t=T[b];b++,p(t),O(t.$$)}}catch(t){throw T.length=0,b=0,t}for(p(null),T.length=0,b=0;S.length;)S.pop()();for(let t=0;t<C.length;t+=1){const e=C[t];w.has(e)||(w.add(e),e())}C.length=0}while(T.length);for(;$.length;)$.pop()();R=!1,w.clear(),p(t)}function O(t){if(null!==t.fragment){t.update(),n(t.before_update);const e=t.dirty;t.dirty=[-1],t.fragment&&t.fragment.p(t.ctx,e),t.after_update.forEach(A)}}const U=new Set;function v(t,e){const i=t.$$;null!==i.fragment&&(!function(t){const e=[],i=[];C.forEach((n=>-1===t.indexOf(n)?e.push(n):i.push(n))),i.forEach((t=>t())),C=e}(i.after_update),n(i.on_destroy),i.fragment&&i.fragment.d(e),i.on_destroy=i.fragment=null,i.ctx=[])}function N(t,e){-1===t.$$.dirty[0]&&(T.push(t),R||(R=!0,f.then(I)),t.$$.dirty.fill(0)),t.$$.dirty[e/31|0]|=1<<e%31}function y(o,a,c,l,d,h,E=null,m=[-1]){const _=r;p(o);const g=o.$$={fragment:null,ctx:[],props:h,update:t,not_equal:d,bound:i(),on_mount:[],on_destroy:[],on_disconnect:[],before_update:[],after_update:[],context:new Map(a.context||(_?_.$$.context:[])),callbacks:i(),dirty:m,skip_bound:!1,root:a.target||_.$$.root};E&&E(g.root);let T=!1;if(g.ctx=c?c(o,a.props||{},((t,e,...i)=>{const n=i.length?i[0]:e;return g.ctx&&d(g.ctx[t],g.ctx[t]=n)&&(!g.skip_bound&&g.bound[t]&&g.bound[t](n),T&&N(o,t)),e})):[],g.update(),T=!0,n(g.before_update),g.fragment=!!l&&l(g.ctx),a.target){if(a.hydrate){const t=function(t){return Array.from(t.childNodes)}(a.target);g.fragment&&g.fragment.l(t),t.forEach(u)}else g.fragment&&g.fragment.c();a.intro&&((S=o.$$.fragment)&&S.i&&(U.delete(S),S.i(C))),function(t,i,o){const{fragment:a,after_update:r}=t.$$;a&&a.m(i,o),A((()=>{const i=t.$$.on_mount.map(e).filter(s);t.$$.on_destroy?t.$$.on_destroy.push(...i):n(i),t.$$.on_mount=[]})),r.forEach(A)}(o,a.target,a.anchor),I()}var S,C;p(_)}let L;function P(t,e,i,n){const s=i[t]?.type;if(e=\"Boolean\"===s&&\"boolean\"!=typeof e?null!=e:e,!n||!i[t])return e;if(\"toAttribute\"===n)switch(s){case\"Object\":case\"Array\":return null==e?null:JSON.stringify(e);case\"Boolean\":return e?\"\":null;case\"Number\":return null==e?null:e;default:return e}else switch(s){case\"Object\":case\"Array\":return e&&JSON.parse(e);case\"Boolean\":default:return e;case\"Number\":return null!=e?+e:e}}function D(t,e,i,n,s,o){let a=class extends L{constructor(){super(t,i,s),this.$$p_d=e}static get observedAttributes(){return Object.keys(e).map((t=>(e[t].attribute||t).toLowerCase()))}};return Object.keys(e).forEach((t=>{Object.defineProperty(a.prototype,t,{get(){return this.$$c&&t in this.$$c?this.$$c[t]:this.$$d[t]},set(i){i=P(t,i,e),this.$$d[t]=i,this.$$c?.$set({[t]:i})}})})),n.forEach((t=>{Object.defineProperty(a.prototype,t,{get(){return this.$$c?.[t]}})})),o&&(a=o(a)),t.element=a,a}\"function\"==typeof HTMLElement&&(L=class extends HTMLElement{$$ctor;$$s;$$c;$$cn=!1;$$d={};$$r=!1;$$p_d={};$$l={};$$l_u=new Map;constructor(t,e,i){super(),this.$$ctor=t,this.$$s=e,i&&this.attachShadow({mode:\"open\"})}addEventListener(t,e,i){if(this.$$l[t]=this.$$l[t]||[],this.$$l[t].push(e),this.$$c){const i=this.$$c.$on(t,e);this.$$l_u.set(e,i)}super.addEventListener(t,e,i)}removeEventListener(t,e,i){if(super.removeEventListener(t,e,i),this.$$c){const t=this.$$l_u.get(e);t&&(t(),this.$$l_u.delete(e))}}async connectedCallback(){if(this.$$cn=!0,!this.$$c){if(await Promise.resolve(),!this.$$cn||this.$$c)return;function t(t){return()=>{let e;return{c:function(){e=h(\"slot\"),\"default\"!==t&&m(e,\"name\",t)},m:function(t,i){d(t,e,i)},d:function(t){t&&u(e)}}}}const e={},i=function(t){const e={};return t.childNodes.forEach((t=>{e[t.slot||\"default\"]=!0})),e}(this);for(const s of this.$$s)s in i&&(e[s]=[t(s)]);for(const o of this.attributes){const a=this.$$g_p(o.name);a in this.$$d||(this.$$d[a]=P(a,o.value,this.$$p_d,\"toProp\"))}for(const r in this.$$p_d)r in this.$$d||void 0===this[r]||(this.$$d[r]=this[r],delete this[r]);this.$$c=new this.$$ctor({target:this.shadowRoot||this,props:{...this.$$d,$$slots:e,$$scope:{ctx:[]}}});const n=()=>{this.$$r=!0;for(const t in this.$$p_d)if(this.$$d[t]=this.$$c.$$.ctx[this.$$c.$$.props[t]],this.$$p_d[t].reflect){const e=P(t,this.$$d[t],this.$$p_d,\"toAttribute\");null==e?this.removeAttribute(this.$$p_d[t].attribute||t):this.setAttribute(this.$$p_d[t].attribute||t,e)}this.$$r=!1};this.$$c.$$.after_update.push(n),n();for(const c in this.$$l)for(const l of this.$$l[c]){const E=this.$$c.$on(c,l);this.$$l_u.set(l,E)}this.$$l={}}}attributeChangedCallback(t,e,i){this.$$r||(t=this.$$g_p(t),this.$$d[t]=P(t,i,this.$$p_d,\"toProp\"),this.$$c?.$set({[t]:this.$$d[t]}))}disconnectedCallback(){this.$$cn=!1,Promise.resolve().then((()=>{!this.$$cn&&this.$$c&&(this.$$c.$destroy(),this.$$c=void 0)}))}$$g_p(t){return Object.keys(this.$$p_d).find((e=>this.$$p_d[e].attribute===t||!this.$$p_d[e].attribute&&e.toLowerCase()===t))||t}});class k{$$=void 0;$$set=void 0;$destroy(){v(this,1),this.$destroy=t}$on(e,i){if(!s(i))return t;const n=this.$$.callbacks[e]||(this.$$.callbacks[e]=[]);return n.push(i),()=>{const t=n.indexOf(i);-1!==t&&n.splice(t,1)}}$set(t){var e;this.$$set&&(e=t,0!==Object.keys(e).length)&&(this.$$.skip_bound=!0,this.$$set(t),this.$$.skip_bound=!1)}}var x;\"undefined\"!=typeof window&&(window.__svelte||(window.__svelte={v:new Set})).v.add(\"4\"),function(t){t.CUSTOM_MESSAGE=\"custom\",t.GET_CONTEXT=\"luigi.get-context\",t.SEND_CONTEXT_HANDSHAKE=\"luigi.init\",t.CONTEXT_RECEIVED=\"luigi.init.ok\",t.NAVIGATION_REQUEST=\"luigi.navigation.open\",t.ALERT_REQUEST=\"luigi.ux.alert.show\",t.ALERT_CLOSED=\"luigi.ux.alert.hide\",t.INITIALIZED=\"luigi.init.ok\",t.ADD_SEARCH_PARAMS_REQUEST=\"luigi.addSearchParams\",t.ADD_NODE_PARAMS_REQUEST=\"luigi.addNodeParams\",t.SHOW_CONFIRMATION_MODAL_REQUEST=\"luigi.ux.confirmationModal.show\",t.CONFIRMATION_MODAL_CLOSED=\"luigi.ux.confirmationModal.hide\",t.SHOW_LOADING_INDICATOR_REQUEST=\"luigi.show-loading-indicator\",t.HIDE_LOADING_INDICATOR_REQUEST=\"luigi.hide-loading-indicator\",t.SET_CURRENT_LOCALE_REQUEST=\"luigi.ux.set-current-locale\",t.LOCAL_STORAGE_SET_REQUEST=\"storage\",t.RUNTIME_ERROR_HANDLING_REQUEST=\"luigi-runtime-error-handling\",t.SET_ANCHOR_LINK_REQUEST=\"luigi.setAnchor\",t.SET_THIRD_PARTY_COOKIES_REQUEST=\"luigi.third-party-cookie\",t.BACK_NAVIGATION_REQUEST=\"luigi.navigation.back\",t.GET_CURRENT_ROUTE_REQUEST=\"luigi.navigation.currentRoute\",t.SEND_CURRENT_ROUTE_ANSWER=\"luigi.navigation.currentRoute.answer\",t.SEND_CONTEXT_OBJECT=\"luigi.navigate\",t.NAVIGATION_COMPLETED_REPORT=\"luigi.navigate.ok\",t.CLOSE_MODAL_ANSWER=\"luigi.navigation.modal.close\",t.UPDATE_MODAL_PATH_DATA_REQUEST=\"luigi.navigation.updateModalDataPath\",t.UPDATE_MODAL_SETTINGS=\"luigi.navigation.updateModalSettings\",t.CHECK_PATH_EXISTS_REQUEST=\"luigi.navigation.pathExists\",t.SEND_PATH_EXISTS_ANSWER=\"luigi.navigation.pathExists.answer\",t.SET_DIRTY_STATUS_REQUEST=\"luigi.set-page-dirty\",t.AUTH_SET_TOKEN=\"luigi.auth.tokenIssued\",t.ADD_BACKDROP_REQUEST=\"luigi.add-backdrop\",t.REMOVE_BACKDROP_REQUEST=\"luigi.remove-backdrop\",t.SET_VIEW_GROUP_DATA_REQUEST=\"luigi.setVGData\",t.CLOSE_CURRENT_MODAL_REQUEST=\"luigi.close-modal\"}(x||(x={}));class M extends Event{constructor(t,e,i,n){super(t),this.detail=e,this.payload=i||e||{},this.callbackFn=n}callback(t){this.callbackFn&&this.callbackFn(t)}}const Q={ADD_BACKDROP_REQUEST:\"add-backdrop-request\",ADD_NODE_PARAMS_REQUEST:\"add-node-params-request\",ADD_SEARCH_PARAMS_REQUEST:\"add-search-params-request\",ALERT_CLOSED:\"close-alert-request\",ALERT_REQUEST:\"show-alert-request\",BACK_NAVIGATION_REQUEST:\"navigate-back-request\",CHECK_PATH_EXISTS_REQUEST:\"check-path-exists-request\",CLOSE_CURRENT_MODAL_REQUEST:\"close-current-modal-request\",CLOSE_USER_SETTINGS_REQUEST:\"close-user-settings-request\",COLLAPSE_LEFT_NAV_REQUEST:\"collapse-leftnav-request\",CUSTOM_MESSAGE:\"custom-message\",GET_CONTEXT_REQUEST:\"get-context-request\",GET_CURRENT_ROUTE_REQUEST:\"get-current-route-request\",GO_BACK_REQUEST:\"go-back-request\",HAS_BACK_REQUEST:\"has-back-request\",HIDE_LOADING_INDICATOR_REQUEST:\"hide-loading-indicator-request\",INITIALIZED:\"initialized\",LOCAL_STORAGE_SET_REQUEST:\"set-storage-request\",NAVIGATION_COMPLETED_REPORT:\"report-navigation-completed-request\",NAVIGATION_REQUEST:\"navigation-request\",OPEN_USER_SETTINGS_REQUEST:\"open-user-settings-request\",PATH_EXISTS_REQUEST:\"path-exists-request\",REMOVE_BACKDROP_REQUEST:\"remove-backdrop-request\",RUNTIME_ERROR_HANDLING_REQUEST:\"runtime-error-handling-request\",SET_ANCHOR_LINK_REQUEST:\"set-anchor-request\",SET_CURRENT_LOCALE_REQUEST:\"set-current-locale-request\",SET_DIRTY_STATUS_REQUEST:\"set-dirty-status-request\",SET_DOCUMENT_TITLE_REQUEST:\"set-document-title-request\",SET_THIRD_PARTY_COOKIES_REQUEST:\"set-third-party-cookies-request\",SET_VIEW_GROUP_DATA_REQUEST:\"set-viewgroup-data-request\",SHOW_CONFIRMATION_MODAL_REQUEST:\"show-confirmation-modal-request\",SHOW_LOADING_INDICATOR_REQUEST:\"show-loading-indicator-request\",UPDATE_MODAL_PATH_DATA_REQUEST:\"update-modal-path-data-request\",UPDATE_MODAL_SETTINGS_REQUEST:\"update-modal-settings-request\",UPDATE_TOP_NAVIGATION_REQUEST:\"update-top-navigation-request\"};class H{isVisible(t){return!!(t.offsetWidth||t.offsetHeight||t.getClientRects().length)}sendCustomMessageToIframe(t,e,i){const n=i||\"custom\";if(t?.iframe?.contentWindow){const i=new URL(t.iframe.src);\"custom\"===n?t.iframe.contentWindow.postMessage({msg:n,data:e},i.origin):t.iframe.contentWindow.postMessage({msg:n,...e},i.origin)}else console.error(\"Message target could not be resolved\")}dispatchWithPayload(t,e,i,n,s){this.dispatch(t,e,i,s,n)}dispatch(t,e,i,n,s){const o=new M(t,i,s,n);e.dispatchEvent(o)}getTargetContainer(t){let e;return globalThis.__luigi_container_manager.container.forEach((i=>{i.iframeHandle?.iframe&&i.iframeHandle.iframe.contentWindow===t.source&&(e=i)})),e}getContainerManager(){return globalThis.__luigi_container_manager||(globalThis.__luigi_container_manager={container:[],messageListener:t=>{const e=this.getTargetContainer(t),i=e?.iframeHandle?.iframe?.contentWindow;if(i&&i===t.source){switch(t.data.msg){case x.CUSTOM_MESSAGE:{const i=t.data.data,n=i.id;delete i.id,this.dispatch(Q.CUSTOM_MESSAGE,e,{id:n,_metaData:{},data:i})}break;case x.GET_CONTEXT:i.postMessage({msg:x.SEND_CONTEXT_HANDSHAKE,context:e.context||{},internal:{thirdPartyCookieCheck:{disabled:\"true\"===e.skipCookieCheck},currentTheme:e.theme,currentLocale:e.locale,activeFeatureToggleList:e.activeFeatureToggleList||[],cssVariables:e.cssVariables||{},anchor:e.anchor||\"\",userSettings:e.userSettings||null,drawer:e.drawer||!1,modal:e.modal||!1,viewStackSize:e.viewStackSize||0,isNavigateBack:e.isNavigateBack||!1},authData:e.authData||{},nodeParams:e.nodeParams||{},searchParams:e.searchParams||{},pathParams:e.pathParams||{}},t.origin);break;case x.NAVIGATION_REQUEST:this.dispatch(Q.NAVIGATION_REQUEST,e,t.data.params,(e=>{i.postMessage({msg:x.CLOSE_MODAL_ANSWER,data:e},t.origin)}));break;case x.ALERT_REQUEST:this.dispatchWithPayload(Q.ALERT_REQUEST,e,t,t.data?.data?.settings,(i=>{e.notifyAlertClosed(t.data?.data?.settings?.id,i)}));break;case x.INITIALIZED:this.dispatch(Q.INITIALIZED,e,t.data?.params||{});break;case x.ADD_SEARCH_PARAMS_REQUEST:this.dispatch(Q.ADD_SEARCH_PARAMS_REQUEST,e,{data:t.data.data,keepBrowserHistory:t.data.keepBrowserHistory});break;case x.ADD_NODE_PARAMS_REQUEST:this.dispatch(Q.ADD_NODE_PARAMS_REQUEST,e,{data:t.data.data,keepBrowserHistory:t.data.keepBrowserHistory});break;case x.SHOW_CONFIRMATION_MODAL_REQUEST:this.dispatchWithPayload(Q.SHOW_CONFIRMATION_MODAL_REQUEST,e,t.data.data,t.data.data?.settings,(t=>{e.notifyConfirmationModalClosed(t)}));break;case x.SHOW_LOADING_INDICATOR_REQUEST:this.dispatch(Q.SHOW_LOADING_INDICATOR_REQUEST,e,t);break;case x.HIDE_LOADING_INDICATOR_REQUEST:this.dispatch(Q.HIDE_LOADING_INDICATOR_REQUEST,e,t);break;case x.SET_CURRENT_LOCALE_REQUEST:this.dispatchWithPayload(Q.SET_CURRENT_LOCALE_REQUEST,e,t,t.data.data);break;case x.LOCAL_STORAGE_SET_REQUEST:this.dispatchWithPayload(Q.LOCAL_STORAGE_SET_REQUEST,e,t,t.data.data?.params);break;case x.RUNTIME_ERROR_HANDLING_REQUEST:this.dispatch(Q.RUNTIME_ERROR_HANDLING_REQUEST,e,t);break;case x.SET_ANCHOR_LINK_REQUEST:this.dispatchWithPayload(Q.SET_ANCHOR_LINK_REQUEST,e,t,t.data.anchor);break;case x.SET_THIRD_PARTY_COOKIES_REQUEST:this.dispatch(Q.SET_THIRD_PARTY_COOKIES_REQUEST,e,t);break;case x.BACK_NAVIGATION_REQUEST:{let i=t.data?.goBackContext||{};if(\"string\"==typeof i)try{i=JSON.parse(i)}catch(t){console.warn(t)}this.dispatch(Q.GO_BACK_REQUEST,e,i),this.dispatch(Q.BACK_NAVIGATION_REQUEST,e,t)}break;case x.GET_CURRENT_ROUTE_REQUEST:this.dispatchWithPayload(Q.GET_CURRENT_ROUTE_REQUEST,e,t,t.data.data,(e=>{i.postMessage({msg:x.SEND_CURRENT_ROUTE_ANSWER,data:{correlationId:t.data?.data?.id,route:e}},t.origin)}));break;case x.NAVIGATION_COMPLETED_REPORT:this.dispatch(Q.NAVIGATION_COMPLETED_REPORT,e,t);break;case x.UPDATE_MODAL_PATH_DATA_REQUEST:this.dispatchWithPayload(Q.UPDATE_MODAL_PATH_DATA_REQUEST,e,t,t.data.params);break;case x.UPDATE_MODAL_SETTINGS:this.dispatchWithPayload(Q.UPDATE_MODAL_SETTINGS_REQUEST,e,t,{addHistoryEntry:t.data.addHistoryEntry,updatedModalSettings:t.data.updatedModalSettings});break;case x.CHECK_PATH_EXISTS_REQUEST:this.dispatchWithPayload(Q.CHECK_PATH_EXISTS_REQUEST,e,t,t.data.data,(e=>{i.postMessage({msg:x.SEND_PATH_EXISTS_ANSWER,data:{correlationId:t.data?.data?.id,pathExists:e}},t.origin)}));break;case x.SET_DIRTY_STATUS_REQUEST:this.dispatchWithPayload(Q.SET_DIRTY_STATUS_REQUEST,e,t,{dirty:t.data.dirty});break;case x.SET_VIEW_GROUP_DATA_REQUEST:this.dispatch(Q.SET_VIEW_GROUP_DATA_REQUEST,e,t.data.data);break;case x.ADD_BACKDROP_REQUEST:this.dispatch(Q.ADD_BACKDROP_REQUEST,e,t);break;case x.REMOVE_BACKDROP_REQUEST:this.dispatch(Q.REMOVE_BACKDROP_REQUEST,e,t);break;case x.CLOSE_CURRENT_MODAL_REQUEST:this.dispatch(Q.CLOSE_CURRENT_MODAL_REQUEST,e,t)}}}},window.addEventListener(\"message\",globalThis.__luigi_container_manager.messageListener)),globalThis.__luigi_container_manager}registerContainer(t){this.getContainerManager().container.push(t)}}const W=new H;const B=new class{constructor(){this.updateContext=(t,e,i,n,s,o)=>{if(i){const a=e||{};W.sendCustomMessageToIframe(i,{context:t,nodeParams:n||{},pathParams:s||{},searchParams:o||{},internal:a,withoutSync:!0},x.SEND_CONTEXT_OBJECT)}else console.warn(\"Attempting to update context on inexisting iframe\")},this.updateViewUrl=(t,e,i,n)=>{if(n){const s=i||{};W.sendCustomMessageToIframe(n,{context:e,internal:s,withoutSync:!1,viewUrl:t},x.SEND_CONTEXT_OBJECT)}else console.warn(\"Attempting to update route on inexisting iframe\")},this.updateAuthData=(t,e)=>{t&&e?W.sendCustomMessageToIframe(t,{authData:e},x.AUTH_SET_TOKEN):console.warn(\"Attempting to update auth data on inexisting iframe or authData\")},this.sendCustomMessage=(t,e,i,n,s)=>{if(i&&e._luigi_mfe_webcomponent)W.dispatch(t,e._luigi_mfe_webcomponent,s);else{const e={...s};e.id&&console.warn('Property \"id\" is reserved and can not be used in custom message data'),e.id=t,W.sendCustomMessageToIframe(n,e)}},this.notifyConfirmationModalClosed=(t,e)=>{const i={data:{confirmed:t}};W.sendCustomMessageToIframe(e,i,x.CONFIRMATION_MODAL_CLOSED)}}notifyAlertClosed(t,e,i){const n=e?{id:t,dismissKey:e}:{id:t};W.sendCustomMessageToIframe(i,n,x.ALERT_CLOSED)}},G=t=>{if(!t)return;const e=t;return e.forEach(((i,n)=>{e[n]=i+(-1!=i.indexOf(\";\")?\"\":\";\"),e[n]=t[n].replaceAll('\"',\"'\")})),e.join(\" \")};class V{constructor(t){t?(this.rendererObject=t,this.config=t.config||{}):this.config={}}createCompoundContainer(){return document.createElement(\"div\")}createCompoundItemContainer(t){return document.createElement(\"div\")}attachCompoundItem(t,e){t.appendChild(e)}}class j extends V{constructor(t){super(t||{use:{}}),t&&t.use&&t.use.extends&&(this.superRenderer=q({use:t.use.extends,config:t.config}))}createCompoundContainer(){return this.rendererObject.use.createCompoundContainer?this.rendererObject.use.createCompoundContainer(this.config,this.superRenderer):this.superRenderer?this.superRenderer.createCompoundContainer():super.createCompoundContainer()}createCompoundItemContainer(t){return this.rendererObject.use.createCompoundItemContainer?this.rendererObject.use.createCompoundItemContainer(t,this.config,this.superRenderer):this.superRenderer?this.superRenderer.createCompoundItemContainer(t):super.createCompoundItemContainer(t)}attachCompoundItem(t,e){this.rendererObject.use.attachCompoundItem?this.rendererObject.use.attachCompoundItem(t,e,this.superRenderer):this.superRenderer?this.superRenderer.attachCompoundItem(t,e):super.attachCompoundItem(t,e)}}class F extends V{createCompoundContainer(){const t=\"__lui_compound_\"+(new Date).getTime(),e=document.createElement(\"div\");e.classList.add(t);let i=\"\";return this.config.layouts&&this.config.layouts.forEach((e=>{if(e.minWidth||e.maxWidth){let n=\"@media only screen \";null!=e.minWidth&&(n+=`and (min-width: ${e.minWidth}px) `),null!=e.maxWidth&&(n+=`and (max-width: ${e.maxWidth}px) `),n+=`{\\n .${t} {\\n grid-template-columns: ${e.columns||\"auto\"};\\n grid-template-rows: ${e.rows||\"auto\"};\\n grid-gap: ${e.gap||\"0\"};\\n }\\n }\\n `,i+=n}})),e.innerHTML=`\\n <style scoped>\\n .${t} {\\n display: grid;\\n grid-template-columns: ${this.config.columns||\"auto\"};\\n grid-template-rows: ${this.config.rows||\"auto\"};\\n grid-gap: ${this.config.gap||\"0\"};\\n min-height: ${this.config.minHeight||\"auto\"};\\n }\\n ${i}\\n </style>\\n `,e}createCompoundItemContainer(t){const e=t||{},i=document.createElement(\"div\");return i.setAttribute(\"style\",`grid-row: ${e.row||\"auto\"}; grid-column: ${e.column||\"auto\"}`),i.classList.add(\"lui-compoundItemCnt\"),i}}const q=t=>{const e=t.use;return e?\"grid\"===e?new F(t):e.createCompoundContainer||e.createCompoundItemContainer||e.attachCompoundItem?new j(t):new V(t):new V(t)},K=(t,e,i,n)=>{e?.eventListeners&&e.eventListeners.forEach((e=>{const s=e.source+\".\"+e.name,o=t[s],a={wcElementId:i,wcElement:n,action:e.action,converter:e.dataConverter};o?o.push(a):t[s]=[a]}))};function X(t){return String(t).replaceAll(\"<\",\"<\").replaceAll(\">\",\">\").replaceAll(\""\",'\"').replaceAll(\"'\",\"'\").replaceAll(\"/\",\"/\")}class z{constructor(){this.alertResolvers={},this.alertIndex=0,this.containerService=new H}dynamicImport(t){return Object.freeze(import(/* webpackIgnore: true */t))}processViewUrl(t,e){return t}attachWC(t,e,i,n,s,o,a){if(i&&i.contains(e)){const r=document.createElement(t);o&&r.setAttribute(\"nodeId\",o),r.setAttribute(\"lui_web_component\",\"true\"),this.initWC(r,t,i,s,n,o,a),i.replaceChild(r,e),i._luigi_node&&(i._luigi_mfe_webcomponent=r),i.dispatchEvent(new Event(\"wc_ready\"))}}dispatchLuigiEvent(t,e,i){this.containerService.dispatch(t,this.thisComponent,e,i)}createClientAPI(t,e,i,n,s){return{linkManager:()=>{let t=null,e=!1,i=!1,n=!1,s={};const o={navigate:(o,a={})=>{const r={fromContext:t,fromClosestContext:e,fromVirtualTreeRoot:i,fromParent:n,nodeParams:s,...a};this.dispatchLuigiEvent(Q.NAVIGATION_REQUEST,{link:o,...r})},navigateToIntent:(t,e={})=>{let i=\"#?intent=\";if(i+=t,e&&Object.keys(e)?.length){const t=Object.entries(e);if(t.length>0){i+=\"?\";for(const[e,n]of t)i+=e+\"=\"+n+\"&\";i=i.slice(0,-1)}}o.navigate(i)},fromClosestContext:()=>(e=!0,o),fromContext:e=>(t=e,o),fromVirtualTreeRoot:()=>(i=!0,o),fromParent:()=>(n=!0,o),getCurrentRoute:()=>{const o={fromContext:t,fromClosestContext:e,fromVirtualTreeRoot:i,fromParent:n,nodeParams:s};return new Promise(((t,e)=>{this.containerService.dispatch(Q.GET_CURRENT_ROUTE_REQUEST,this.thisComponent,{...o},(i=>{i?t(i):e(\"No current route received.\")}))}))},withParams:t=>(s=t,o),updateModalPathInternalNavigation:(o,a={},r=!1)=>{if(!o)return void console.warn(\"Updating path of the modal upon internal navigation prevented. No path specified.\");const c={fromClosestContext:e,fromContext:t,fromParent:n,fromVirtualTreeRoot:i,nodeParams:s};this.dispatchLuigiEvent(Q.UPDATE_MODAL_PATH_DATA_REQUEST,Object.assign(c,{history:r,link:o,modal:a}))},updateTopNavigation:()=>{this.dispatchLuigiEvent(Q.UPDATE_TOP_NAVIGATION_REQUEST,{})},pathExists:o=>{const a={fromContext:t,fromClosestContext:e,fromVirtualTreeRoot:i,fromParent:n,nodeParams:s};return new Promise(((t,e)=>{this.containerService.dispatch(Q.CHECK_PATH_EXISTS_REQUEST,this.thisComponent,{...a,link:o},(i=>{i?t(!0):e(!1)})),this.containerService.dispatch(Q.PATH_EXISTS_REQUEST,this.thisComponent,{...a,link:o},(i=>{i?t(!0):e(!1)}))}))},openAsDrawer:(t,e={})=>{o.navigate(t,{drawer:e})},openAsModal:(t,e={})=>{o.navigate(t,{modal:e})},openAsSplitView:(t,e={})=>{o.navigate(t,{splitView:e})},goBack:t=>{this.dispatchLuigiEvent(Q.GO_BACK_REQUEST,t)},hasBack:()=>!1,updateModalSettings:(t={},e=!1)=>{this.dispatchLuigiEvent(Q.UPDATE_MODAL_SETTINGS_REQUEST,{updatedModalSettings:t,addHistoryEntry:e})}};return o},uxManager:()=>({showAlert:t=>(t.id=this.alertIndex++,new Promise((e=>{this.alertResolvers[t.id]=e,this.dispatchLuigiEvent(Q.ALERT_REQUEST,t,(e=>{this.resolveAlert(t.id,e)}))}))),showConfirmationModal:t=>new Promise(((e,i)=>{this.modalResolver={resolve:e,reject:i},this.containerService.dispatch(Q.SHOW_CONFIRMATION_MODAL_REQUEST,this.thisComponent,t,(t=>{t?e():i()}))})),getCurrentTheme:()=>this.thisComponent.theme,closeUserSettings:()=>{this.dispatchLuigiEvent(Q.CLOSE_USER_SETTINGS_REQUEST,this.thisComponent.userSettings)},openUserSettings:()=>{this.dispatchLuigiEvent(Q.OPEN_USER_SETTINGS_REQUEST,this.thisComponent.userSettings)},collapseLeftSideNav:()=>{this.dispatchLuigiEvent(Q.COLLAPSE_LEFT_NAV_REQUEST,{})},getDirtyStatus:()=>this.thisComponent.dirtyStatus||!1,getDocumentTitle:()=>this.thisComponent.documentTitle,setDocumentTitle:t=>{this.dispatchLuigiEvent(Q.SET_DOCUMENT_TITLE_REQUEST,t)},setDirtyStatus:t=>{this.dispatchLuigiEvent(Q.SET_DIRTY_STATUS_REQUEST,{dirty:t})},setCurrentLocale:t=>{t&&this.dispatchLuigiEvent(Q.SET_CURRENT_LOCALE_REQUEST,{currentLocale:t})},removeBackdrop:()=>{this.dispatchLuigiEvent(Q.REMOVE_BACKDROP_REQUEST,{})},addBackdrop:()=>{this.dispatchLuigiEvent(Q.ADD_BACKDROP_REQUEST,{})},showLoadingIndicator:()=>{this.dispatchLuigiEvent(Q.SHOW_LOADING_INDICATOR_REQUEST,{})},hideLoadingIndicator:()=>{this.dispatchLuigiEvent(Q.HIDE_LOADING_INDICATOR_REQUEST,{})},hideAppLoadingIndicator:()=>{this.dispatchLuigiEvent(Q.HIDE_LOADING_INDICATOR_REQUEST,{})},closeCurrentModal:()=>{this.dispatchLuigiEvent(Q.CLOSE_CURRENT_MODAL_REQUEST,{})}}),getCurrentLocale:()=>this.thisComponent.locale,getActiveFeatureToggles:()=>this.thisComponent.activeFeatureToggleList||[],publishEvent:s=>{t&&t.eventBus&&t.eventBus.onPublishEvent(s,e,i);const o={id:s.type,_metaData:{nodeId:e,wc_id:i,src:n},data:s.detail};this.dispatchLuigiEvent(Q.CUSTOM_MESSAGE,o)},luigiClientInit:()=>{this.dispatchLuigiEvent(Q.INITIALIZED,{})},addNodeParams:(t,e)=>{s||this.dispatchLuigiEvent(Q.ADD_NODE_PARAMS_REQUEST,{params:t,data:t,keepBrowserHistory:e})},getNodeParams:t=>{return s?{}:t?(e=this.thisComponent.nodeParams,Object.entries(e).reduce(((t,e)=>(t[X(e[0])]=X(e[1]),t)),{})):this.thisComponent.nodeParams||{};var e},setAnchor:t=>{s||this.dispatchLuigiEvent(Q.SET_ANCHOR_LINK_REQUEST,t)},getAnchor:()=>this.thisComponent.anchor||\"\",getCoreSearchParams:()=>this.thisComponent.searchParams||{},getPathParams:()=>this.thisComponent.pathParams||{},getClientPermissions:()=>this.thisComponent.clientPermissions||{},addCoreSearchParams:(t={},e=!0)=>{this.dispatchLuigiEvent(Q.ADD_SEARCH_PARAMS_REQUEST,{data:t,keepBrowserHistory:e})},getUserSettings:()=>this.thisComponent.userSettings||{},setViewGroupData:t=>{this.dispatchLuigiEvent(Q.SET_VIEW_GROUP_DATA_REQUEST,t)}}}initWC(t,e,i,n,s,o,a){const r=this.createClientAPI(i,o,e,t,a);if(t.__postProcess){const e=new URL(document.baseURI).origin===new URL(n,document.baseURI).origin?new URL(\"./\",new URL(n,document.baseURI)):new URL(\"./\",n);t.__postProcess(s,r,e.origin+e.pathname)}else t.context=s,t.LuigiClient=r}generateWCId(t){let e=\"\";const i=new URL(t,encodeURI(location.href)).href;for(let t=0;t<i.length;t++)e+=i.charCodeAt(t).toString(16);return\"luigi-wc-\"+e}registerWCFromUrl(t,e){const i=this.processViewUrl(t);return new Promise(((t,n)=>{if(this.checkWCUrl(i))this.dynamicImport(i).then((i=>{try{if(!window.customElements.get(e)){let t=i.default;if(!HTMLElement.isPrototypeOf(t)){const e=Object.keys(i);for(let n=0;n<e.length&&(t=i[e[n]],!HTMLElement.isPrototypeOf(t));n++);}window.customElements.define(e,t)}t(1)}catch(t){n(t)}})).catch((t=>{n(t)}));else{n(`Error: View URL '${i}' not allowed to be included`)}}))}includeSelfRegisteredWCFromUrl(t,e,i){if(this.checkWCUrl(e)){this.containerService.getContainerManager()._registerWebcomponent||(this.containerService.getContainerManager()._registerWebcomponent=(t,e)=>{window.customElements.define(this.generateWCId(t),e)}),window.Luigi||(window.Luigi={},window.Luigi._registerWebcomponent||(window.Luigi._registerWebcomponent=(t,e)=>{this.containerService.getContainerManager()._registerWebcomponent(t,e)}));const n=document.createElement(\"script\");n.setAttribute(\"src\",e),\"module\"===t.webcomponent.type&&n.setAttribute(\"type\",\"module\"),n.setAttribute(\"defer\",\"true\"),n.addEventListener(\"load\",(()=>{i()})),document.body.appendChild(n)}else console.warn(`View URL '${e}' not allowed to be included`)}checkWCUrl(t){return!0}renderWebComponent(t,e,i,n,s,o){const a=this.processViewUrl(t,{context:i}),r=n?.webcomponent?.tagName||this.generateWCId(a),c=document.createElement(\"div\");e.appendChild(c),e._luigi_node=n,window.customElements.get(r)?this.attachWC(r,c,e,i,a,s,o):window.luigiWCFn?window.luigiWCFn(a,r,c,(()=>{this.attachWC(r,c,e,i,a,s,o)})):n?.webcomponent?.selfRegistered?this.includeSelfRegisteredWCFromUrl(n,a,(()=>{this.attachWC(r,c,e,i,a,s,o)})):this.registerWCFromUrl(a,r).then((()=>{this.attachWC(r,c,e,i,a,s,o)})).catch((t=>{console.warn(\"ERROR =>\",t),this.containerService.dispatch(Q.RUNTIME_ERROR_HANDLING_REQUEST,this.thisComponent,t)}))}createCompoundContainerAsync(t,e,i){return new Promise(((n,s)=>{if(t.viewUrl)try{const s=i?.webcomponent?.tagName||this.generateWCId(t.viewUrl);i?.webcomponent?.selfRegistered?this.includeSelfRegisteredWCFromUrl(i,t.viewUrl,(()=>{const i=document.createElement(s);i.setAttribute(\"lui_web_component\",\"true\"),this.initWC(i,s,i,t.viewUrl,e,\"_root\"),n(i)})):this.registerWCFromUrl(t.viewUrl,s).then((()=>{const i=document.createElement(s);i.setAttribute(\"lui_web_component\",\"true\"),this.initWC(i,s,i,t.viewUrl,e,\"_root\"),n(i)})).catch((t=>{console.warn(\"Error: \",t),this.containerService.dispatch(Q.RUNTIME_ERROR_HANDLING_REQUEST,this.thisComponent,t)}))}catch(t){s(t)}else n(t.createCompoundContainer())}))}renderWebComponentCompound(t,e,i){let n;return t.webcomponent&&t.viewUrl?(n=new V,n.viewUrl=this.processViewUrl(t.viewUrl,{context:i}),n.createCompoundItemContainer=t=>{const e=document.createElement(\"div\");return t?.slot&&e.setAttribute(\"slot\",t.slot),e}):t.compound?.renderer&&(n=q(t.compound.renderer)),n=n||new V,new Promise((s=>{this.createCompoundContainerAsync(n,i,t).then((o=>{e._luigi_mfe_webcomponent=o,e._luigi_node=t;const a={};o.eventBus={listeners:a,onPublishEvent:(t,e,i)=>{const n=a[e+\".\"+t.type]||[];n.push(...a[\"*.\"+t.type]||[]),n.forEach((e=>{const i=e.wcElement||o.querySelector(\"[nodeId=\"+e.wcElementId+\"]\");i?i.dispatchEvent(new CustomEvent(e.action,{detail:e.converter?e.converter(t.detail):t.detail})):console.debug(\"Could not find event target\",e)}))}},t.compound?.children?.forEach(((t,e)=>{const s={...i,...t.context},r=n.createCompoundItemContainer(t.layoutConfig);r.eventBus=o.eventBus,n.attachCompoundItem(o,r);const c=t.id||\"gen_\"+e;this.renderWebComponent(t.viewUrl,r,s,t,c,!0),K(a,t,c)})),e.appendChild(o),K(a,t.compound,\"_root\",o),s(o)})).catch((t=>{console.warn(\"Error: \",t),this.containerService.dispatch(Q.RUNTIME_ERROR_HANDLING_REQUEST,this.thisComponent,t)}))}))}resolveAlert(t,e){this.alertResolvers[t]?(this.alertResolvers[t](void 0===e||e),this.alertResolvers[t]=void 0):console.log(\"Promise is not in the list.\")}notifyConfirmationModalClosed(t){this.modalResolver?(t?this.modalResolver.resolve():this.modalResolver.reject(),this.modalResolver=void 0):console.log(\"Modal promise is not listed.\")}}const J=new class{isFunction(t){return t&&\"[object Function]\"==={}.toString.call(t)}isObject(t){return!(!t||\"object\"!=typeof t||Array.isArray(t))}checkWebcomponentValue(t){return\"string\"==typeof t?JSON.parse(t):\"boolean\"==typeof t||\"object\"==typeof t?t:void console.warn(\"Webcomponent value has a wrong type.\")}resolveContext(t){return t?\"string\"==typeof t?JSON.parse(t):t:{}}};function Y(t){let e,i=(!t[4]||\"false\"===t[4])&&Z(t);return{c(){i&&i.c(),e=E(\"\")},m(t,n){i&&i.m(t,n),d(t,e,n)},p(t,n){t[4]&&\"false\"!==t[4]?i&&(i.d(1),i=null):i?i.p(t,n):(i=Z(t),i.c(),i.m(e.parentNode,e))},d(t){t&&u(e),i&&i.d(t)}}}function Z(t){let e,i,n,s,o,a;return{c(){e=h(\"style\"),e.textContent=\"main.lui-isolated,\\n .lui-isolated iframe {\\n width: 100%;\\n height: 100%;\\n border: none;\\n }\\n\\n main.lui-isolated {\\n line-height: 0;\\n }\",i=E(\" \"),n=h(\"iframe\"),c(n.src,s=t[3])||m(n,\"src\",s),m(n,\"title\",t[1]),m(n,\"allow\",o=G(t[0])),m(n,\"sandbox\",a=t[2]?t[2].join(\" \"):void 0)},m(s,o){d(s,e,o),d(s,i,o),d(s,n,o),t[28](n)},p(t,e){8&e[0]&&!c(n.src,s=t[3])&&m(n,\"src\",s),2&e[0]&&m(n,\"title\",t[1]),1&e[0]&&o!==(o=G(t[0]))&&m(n,\"allow\",o),4&e[0]&&a!==(a=t[2]?t[2].join(\" \"):void 0)&&m(n,\"sandbox\",a)},d(s){s&&(u(e),u(i),u(n)),t[28](null)}}}function tt(e){let i,n,s=e[5]&&Y(e);return{c(){i=h(\"main\"),s&&s.c(),m(i,\"class\",n=e[4]?void 0:\"lui-isolated\")},m(t,n){d(t,i,n),s&&s.m(i,null),e[29](i)},p(t,e){t[5]?s?s.p(t,e):(s=Y(t),s.c(),s.m(i,null)):s&&(s.d(1),s=null),16&e[0]&&n!==(n=t[4]?void 0:\"lui-isolated\")&&m(i,\"class\",n)},i:t,o:t,d(t){t&&u(i),s&&s.d(),e[29](null)}}}function et(t,e,i){let{activeFeatureToggleList:n}=e,{allowRules:s}=e,{anchor:o}=e,{authData:a}=e,{clientPermissions:r}=e,{context:c}=e,{deferInit:l}=e,{dirtyStatus:d}=e,{documentTitle:u}=e,{hasBack:h}=e,{label:E}=e,{locale:m}=e,{noShadow:p}=e,{nodeParams:T}=e,{pathParams:C}=e,{sandboxRules:$}=e,{searchParams:f}=e,{skipCookieCheck:R}=e,{skipInitCheck:A}=e,{theme:w}=e,{userSettings:b}=e,{viewurl:I}=e,{webcomponent:O}=e;const U={};let v,N,y=!1;const L=new z,P=t=>{if(!y){t.sendCustomMessage=(e,i)=>{B.sendCustomMessage(e,t.getNoShadow()?t:v,!!O,U,i)},t.updateContext=(e,n)=>{if(i(8,c=e),O)(t.getNoShadow()?t:v)._luigi_mfe_webcomponent.context=e;else{const i={...n||{},activeFeatureToggleList:t.activeFeatureToggleList||[],currentLocale:t.locale,currentTheme:t.theme,userSettings:t.userSettings||null,cssVariables:t.cssVariables||{},anchor:t.anchor||\"\",drawer:t.drawer||!1,modal:t.modal||!1,viewStackSize:t.viewStackSize||0,isNavigateBack:t.isNavigateBack||!1};B.updateContext(e,i,U,T,C,f)}},t.closeAlert=(e,i)=>{t.notifyAlertClosed(e,i)},t.notifyAlertClosed=(e,i)=>{t.isConnected&&(O?L.resolveAlert(e,i):B.notifyAlertClosed(e,i,U))},t.notifyConfirmationModalClosed=e=>{t.isConnected&&(O?L.notifyConfirmationModalClosed(!!e):B.notifyConfirmationModalClosed(!!e,U))},W.registerContainer(t),L.thisComponent=t;const e=J.resolveContext(c);if(t.updateViewUrl=(t,e)=>{t?.length&&B.updateViewUrl(t,J.resolveContext(c),e,U)},O&&\"false\"!=O){if(t.getNoShadow())t.innerHTML=\"\";else{i(7,v.innerHTML=\"\",v);t.attachShadow({mode:\"open\"}).append(v)}const n=J.checkWebcomponentValue(O);L.renderWebComponent(I,t.getNoShadow()?t:v,e,\"object\"==typeof n?{webcomponent:n}:{})}else if(!t.getNoShadow()){t.innerHTML=\"\";t.attachShadow({mode:\"open\"}).append(v)}A?(t.initialized=!0,setTimeout((()=>{L.dispatchLuigiEvent(Q.INITIALIZED,{})}))):O&&(t.getNoShadow()?t:v).addEventListener(\"wc_ready\",(()=>{(t.getNoShadow()?t:v)._luigi_mfe_webcomponent?.deferLuigiClientWCInit||(t.initialized=!0,L.dispatchLuigiEvent(Q.INITIALIZED,{}))})),i(5,y=!0),t.containerInitialized=!0}};var D;return g((async()=>{i(27,N=v.parentNode),i(27,N.iframeHandle=U,N),i(27,N.init=()=>{P(N)},N),!l&&I&&P(N)})),D=async()=>{},_().$$.on_destroy.push(D),t.$$set=t=>{\"activeFeatureToggleList\"in t&&i(9,n=t.activeFeatureToggleList),\"allowRules\"in t&&i(0,s=t.allowRules),\"anchor\"in t&&i(10,o=t.anchor),\"authData\"in t&&i(11,a=t.authData),\"clientPermissions\"in t&&i(12,r=t.clientPermissions),\"context\"in t&&i(8,c=t.context),\"deferInit\"in t&&i(13,l=t.deferInit),\"dirtyStatus\"in t&&i(14,d=t.dirtyStatus),\"documentTitle\"in t&&i(15,u=t.documentTitle),\"hasBack\"in t&&i(16,h=t.hasBack),\"label\"in t&&i(1,E=t.label),\"locale\"in t&&i(17,m=t.locale),\"noShadow\"in t&&i(18,p=t.noShadow),\"nodeParams\"in t&&i(19,T=t.nodeParams),\"pathParams\"in t&&i(20,C=t.pathParams),\"sandboxRules\"in t&&i(2,$=t.sandboxRules),\"searchParams\"in t&&i(21,f=t.searchParams),\"skipCookieCheck\"in t&&i(22,R=t.skipCookieCheck),\"skipInitCheck\"in t&&i(23,A=t.skipInitCheck),\"theme\"in t&&i(24,w=t.theme),\"userSettings\"in t&&i(25,b=t.userSettings),\"viewurl\"in t&&i(3,I=t.viewurl),\"webcomponent\"in t&&i(4,O=t.webcomponent)},t.$$.update=()=>{134225960&t.$$.dirty[0]&&!y&&I&&!l&&N&&P(N)},[s,E,$,I,O,y,U,v,c,n,o,a,r,l,d,u,h,m,p,T,C,f,R,A,w,b,()=>n&&s&&o&&a&&r&&d&&u&&h&&m&&p&&T&&C&&$&&f&&R&&A&&w&&b,N,function(t){S[t?\"unshift\":\"push\"]((()=>{U.iframe=t,i(6,U)}))},function(t){S[t?\"unshift\":\"push\"]((()=>{v=t,i(7,v)}))}]}class it extends k{constructor(t){super(),y(this,t,et,tt,o,{activeFeatureToggleList:9,allowRules:0,anchor:10,authData:11,clientPermissions:12,context:8,deferInit:13,dirtyStatus:14,documentTitle:15,hasBack:16,label:1,locale:17,noShadow:18,nodeParams:19,pathParams:20,sandboxRules:2,searchParams:21,skipCookieCheck:22,skipInitCheck:23,theme:24,userSettings:25,viewurl:3,webcomponent:4,unwarn:26},null,[-1,-1])}get activeFeatureToggleList(){return this.$$.ctx[9]}set activeFeatureToggleList(t){this.$$set({activeFeatureToggleList:t}),I()}get allowRules(){return this.$$.ctx[0]}set allowRules(t){this.$$set({allowRules:t}),I()}get anchor(){return this.$$.ctx[10]}set anchor(t){this.$$set({anchor:t}),I()}get authData(){return this.$$.ctx[11]}set authData(t){this.$$set({authData:t}),I()}get clientPermissions(){return this.$$.ctx[12]}set clientPermissions(t){this.$$set({clientPermissions:t}),I()}get context(){return this.$$.ctx[8]}set context(t){this.$$set({context:t}),I()}get deferInit(){return this.$$.ctx[13]}set deferInit(t){this.$$set({deferInit:t}),I()}get dirtyStatus(){return this.$$.ctx[14]}set dirtyStatus(t){this.$$set({dirtyStatus:t}),I()}get documentTitle(){return this.$$.ctx[15]}set documentTitle(t){this.$$set({documentTitle:t}),I()}get hasBack(){return this.$$.ctx[16]}set hasBack(t){this.$$set({hasBack:t}),I()}get label(){return this.$$.ctx[1]}set label(t){this.$$set({label:t}),I()}get locale(){return this.$$.ctx[17]}set locale(t){this.$$set({locale:t}),I()}get noShadow(){return this.$$.ctx[18]}set noShadow(t){this.$$set({noShadow:t}),I()}get nodeParams(){return this.$$.ctx[19]}set nodeParams(t){this.$$set({nodeParams:t}),I()}get pathParams(){return this.$$.ctx[20]}set pathParams(t){this.$$set({pathParams:t}),I()}get sandboxRules(){return this.$$.ctx[2]}set sandboxRules(t){this.$$set({sandboxRules:t}),I()}get searchParams(){return this.$$.ctx[21]}set searchParams(t){this.$$set({searchParams:t}),I()}get skipCookieCheck(){return this.$$.ctx[22]}set skipCookieCheck(t){this.$$set({skipCookieCheck:t}),I()}get skipInitCheck(){return this.$$.ctx[23]}set skipInitCheck(t){this.$$set({skipInitCheck:t}),I()}get theme(){return this.$$.ctx[24]}set theme(t){this.$$set({theme:t}),I()}get userSettings(){return this.$$.ctx[25]}set userSettings(t){this.$$set({userSettings:t}),I()}get viewurl(){return this.$$.ctx[3]}set viewurl(t){this.$$set({viewurl:t}),I()}get webcomponent(){return this.$$.ctx[4]}set webcomponent(t){this.$$set({webcomponent:t}),I()}get unwarn(){return this.$$.ctx[26]}}function nt(t){l(t,\"svelte-1buc46y\",\"main.svelte-1buc46y{width:100%;height:100%;border:none}\")}function st(e){let i;return{c(){i=h(\"main\"),m(i,\"class\",\"svelte-1buc46y\")},m(t,n){d(t,i,n),e[21](i)},p:t,i:t,o:t,d(t){t&&u(i),e[21](null)}}}function ot(t,e,i){let n,s,{activeFeatureToggleList:o}=e,{anchor:a}=e,{clientPermissions:r}=e,{compoundConfig:c}=e,{context:l}=e,{deferInit:d}=e,{dirtyStatus:u}=e,{documentTitle:h}=e,{hasBack:E}=e,{locale:m}=e,{noShadow:p}=e,{nodeParams:_}=e,{pathParams:T}=e,{searchParams:C}=e,{skipInitCheck:$}=e,{theme:f}=e,{userSettings:R}=e,{viewurl:A}=e,{webcomponent:w}=e,b=!1;const I=new H,O=new z,U=t=>{if(!c||b)return;t.updateContext=(e,s)=>{const o=t.getNoShadow()?t:n;o._luigi_mfe_webcomponent.context=e,i(1,l=e);const a=o._luigi_mfe_webcomponent;if(a){const t=a.querySelectorAll(\"[lui_web_component]\");t?.forEach((t=>{const i=t.context||{};t.context=Object.assign(i,e)}))}};const e=J.resolveContext(l);i(2,d=!1),t.notifyAlertClosed=(e,i)=>{t.isConnected&&O.resolveAlert(e,i)},t.notifyConfirmationModalClosed=e=>{t.isConnected&&O.notifyConfirmationModalClosed(!!e)};const o={compound:c,viewUrl:A,webcomponent:J.checkWebcomponentValue(w)||!0};if(t.getNoShadow())t.innerHTML=\"\";else{i(0,n.innerHTML=\"\",n);t.attachShadow({mode:\"open\"}).append(n)}O.renderWebComponentCompound(o,t.getNoShadow()?t:n,e).then((e=>{s=e,$||!o.viewUrl?(t.initialized=!0,setTimeout((()=>{O.dispatchLuigiEvent(Q.INITIALIZED,{})}))):s.LuigiClient&&!s.deferLuigiClientWCInit&&(t.initialized=!0,O.dispatchLuigiEvent(Q.INITIALIZED,{}))})),b=!0,t.containerInitialized=!0};return g((async()=>{const t=n.getRootNode()===document?n.parentNode:n.getRootNode().host;t.init=()=>{U(t)},d||U(t),I.registerContainer(t),O.thisComponent=t})),t.$$set=t=>{\"activeFeatureToggleList\"in t&&i(3,o=t.activeFeatureToggleList),\"anchor\"in t&&i(4,a=t.anchor),\"clientPermissions\"in t&&i(5,r=t.clientPermissions),\"compoundConfig\"in t&&i(6,c=t.compoundConfig),\"context\"in t&&i(1,l=t.context),\"deferInit\"in t&&i(2,d=t.deferInit),\"dirtyStatus\"in t&&i(7,u=t.dirtyStatus),\"documentTitle\"in t&&i(8,h=t.documentTitle),\"hasBack\"in t&&i(9,E=t.hasBack),\"locale\"in t&&i(10,m=t.locale),\"noShadow\"in t&&i(11,p=t.noShadow),\"nodeParams\"in t&&i(12,_=t.nodeParams),\"pathParams\"in t&&i(13,T=t.pathParams),\"searchParams\"in t&&i(14,C=t.searchParams),\"skipInitCheck\"in t&&i(15,$=t.skipInitCheck),\"theme\"in t&&i(16,f=t.theme),\"userSettings\"in t&&i(17,R=t.userSettings),\"viewurl\"in t&&i(18,A=t.viewurl),\"webcomponent\"in t&&i(19,w=t.webcomponent)},[n,l,d,o,a,r,c,u,h,E,m,p,_,T,C,$,f,R,A,w,()=>o&&a&&r&&u&&h&&E&&m&&p&&_&&T&&C&&$&&f&&R,function(t){S[t?\"unshift\":\"push\"]((()=>{n=t,i(0,n)}))}]}D(it,{activeFeatureToggleList:{type:\"Array\",reflect:!1,attribute:\"active-feature-toggle-list\"},allowRules:{type:\"Array\",reflect:!1,attribute:\"allow-rules\"},anchor:{type:\"String\",reflect:!1,attribute:\"anchor\"},authData:{type:\"Object\",reflect:!1,attribute:\"auth-data\"},clientPermissions:{type:\"Object\",reflect:!1,attribute:\"client-permissions\"},context:{type:\"String\",reflect:!1,attribute:\"context\"},deferInit:{type:\"Boolean\",attribute:\"defer-init\"},dirtyStatus:{type:\"Boolean\",reflect:!1,attribute:\"dirty-status\"},documentTitle:{type:\"String\",reflect:!1,attribute:\"document-title\"},hasBack:{type:\"Boolean\",reflect:!1,attribute:\"has-back\"},label:{type:\"String\",reflect:!1,attribute:\"label\"},locale:{type:\"String\",reflect:!1,attribute:\"locale\"},noShadow:{type:\"Boolean\",attribute:\"no-shadow\"},nodeParams:{type:\"Object\",reflect:!1,attribute:\"node-params\"},pathParams:{type:\"Object\",reflect:!1,attribute:\"path-params\"},sandboxRules:{type:\"Array\",reflect:!1,attribute:\"sandbox-rules\"},searchParams:{type:\"Object\",reflect:!1,attribute:\"search-params\"},skipCookieCheck:{type:\"String\",reflect:!1,attribute:\"skip-cookie-check\"},skipInitCheck:{type:\"Boolean\",reflect:!1,attribute:\"skip-init-check\"},theme:{type:\"String\",reflect:!1,attribute:\"theme\"},userSettings:{type:\"Object\",reflect:!1,attribute:\"user-settings\"},viewurl:{type:\"String\",reflect:!1,attribute:\"viewurl\"},webcomponent:{type:\"String\",reflect:!1,attribute:\"webcomponent\"}},[],[\"unwarn\"],!1,(t=>{let e=t=>()=>console.warn(t+\" can't be called on luigi-container before its micro frontend is attached to the DOM.\");return class extends t{sendCustomMessage=e(\"sendCustomMessage\");updateContext=e(\"updateContext\");updateViewUrl=e(\"updateViewUrl\");closeAlert=e(\"closeAlert\");notifyAlertClosed=e(\"notifyAlertClosed\");notifyConfirmationModalClosed=e(\"notifyConfirmationModalClosed\");attributeChangedCallback(t,e,i){try{super.attributeChangedCallback(t,e,i)}catch(t){console.error(\"Error in super.attributeChangedCallback\",t)}this.containerInitialized&&(\"context\"===t&&this.updateContext(JSON.parse(i)),\"auth-data\"===t&&B.updateAuthData(this.iframeHandle,JSON.parse(i)))}getNoShadow(){return this.hasAttribute(\"no-shadow\")||this.noShadow}}}));class at extends k{constructor(t){super(),y(this,t,ot,st,o,{activeFeatureToggleList:3,anchor:4,clientPermissions:5,compoundConfig:6,context:1,deferInit:2,dirtyStatus:7,documentTitle:8,hasBack:9,locale:10,noShadow:11,nodeParams:12,pathParams:13,searchParams:14,skipInitCheck:15,theme:16,userSettings:17,viewurl:18,webcomponent:19,unwarn:20},nt)}get activeFeatureToggleList(){return this.$$.ctx[3]}set activeFeatureToggleList(t){this.$$set({activeFeatureToggleList:t}),I()}get anchor(){return this.$$.ctx[4]}set anchor(t){this.$$set({anchor:t}),I()}get clientPermissions(){return this.$$.ctx[5]}set clientPermissions(t){this.$$set({clientPermissions:t}),I()}get compoundConfig(){return this.$$.ctx[6]}set compoundConfig(t){this.$$set({compoundConfig:t}),I()}get context(){return this.$$.ctx[1]}set context(t){this.$$set({context:t}),I()}get deferInit(){return this.$$.ctx[2]}set deferInit(t){this.$$set({deferInit:t}),I()}get dirtyStatus(){return this.$$.ctx[7]}set dirtyStatus(t){this.$$set({dirtyStatus:t}),I()}get documentTitle(){return this.$$.ctx[8]}set documentTitle(t){this.$$set({documentTitle:t}),I()}get hasBack(){return this.$$.ctx[9]}set hasBack(t){this.$$set({hasBack:t}),I()}get locale(){return this.$$.ctx[10]}set locale(t){this.$$set({locale:t}),I()}get noShadow(){return this.$$.ctx[11]}set noShadow(t){this.$$set({noShadow:t}),I()}get nodeParams(){return this.$$.ctx[12]}set nodeParams(t){this.$$set({nodeParams:t}),I()}get pathParams(){return this.$$.ctx[13]}set pathParams(t){this.$$set({pathParams:t}),I()}get searchParams(){return this.$$.ctx[14]}set searchParams(t){this.$$set({searchParams:t}),I()}get skipInitCheck(){return this.$$.ctx[15]}set skipInitCheck(t){this.$$set({skipInitCheck:t}),I()}get theme(){return this.$$.ctx[16]}set theme(t){this.$$set({theme:t}),I()}get userSettings(){return this.$$.ctx[17]}set userSettings(t){this.$$set({userSettings:t}),I()}get viewurl(){return this.$$.ctx[18]}set viewurl(t){this.$$set({viewurl:t}),I()}get webcomponent(){return this.$$.ctx[19]}set webcomponent(t){this.$$set({webcomponent:t}),I()}get unwarn(){return this.$$.ctx[20]}}D(at,{activeFeatureToggleList:{type:\"Array\",reflect:!1,attribute:\"active-feature-toggle-list\"},anchor:{type:\"String\",reflect:!1,attribute:\"anchor\"},clientPermissions:{type:\"Object\",reflect:!1,attribute:\"client-permissions\"},compoundConfig:{type:\"Object\",reflect:!1,attribute:\"compound-config\"},context:{type:\"String\",reflect:!1,attribute:\"context\"},deferInit:{type:\"Boolean\",attribute:\"defer-init\"},dirtyStatus:{type:\"Boolean\",reflect:!1,attribute:\"dirty-status\"},documentTitle:{type:\"String\",reflect:!1,attribute:\"document-title\"},hasBack:{type:\"Boolean\",reflect:!1,attribute:\"has-back\"},locale:{type:\"String\",reflect:!1,attribute:\"locale\"},noShadow:{type:\"Boolean\",attribute:\"no-shadow\",reflect:!1},nodeParams:{type:\"Object\",reflect:!1,attribute:\"node-params\"},pathParams:{type:\"Object\",reflect:!1,attribute:\"path-params\"},searchParams:{type:\"Object\",reflect:!1,attribute:\"search-params\"},skipInitCheck:{type:\"Boolean\",reflect:!1,attribute:\"skip-init-check\"},theme:{type:\"String\",reflect:!1,attribute:\"theme\"},userSettings:{type:\"Object\",reflect:!1,attribute:\"user-settings\"},viewurl:{type:\"String\",reflect:!1,attribute:\"viewurl\"},webcomponent:{type:\"String\",reflect:!1,attribute:\"webcomponent\"}},[],[\"unwarn\"],!1,(t=>{let e=t=>()=>console.warn(t+\" can't be called on luigi-container before its micro frontend is attached to the DOM.\");return class extends t{updateContext=e(\"updateContext\");notifyAlertClosed=e(\"notifyAlertClosed\");notifyConfirmationModalClosed=e(\"notifyConfirmationModalClosed\");attributeChangedCallback(t,e,i){try{super.attributeChangedCallback(t,e,i)}catch(t){console.warn(\"Error in attributeChangedCallback\",t)}this.containerInitialized&&\"context\"===t&&this.updateContext(JSON.parse(i))}getNoShadow(){return this.hasAttribute(\"no-shadow\")||this.noShadow}}})),customElements.get(\"luigi-container\")||customElements.define(\"luigi-container\",it.element),customElements.get(\"luigi-compound-container\")||customElements.define(\"luigi-compound-container\",at.element);export{at as LuigiCompoundContainer,it as LuigiContainer,Q as LuigiEvents,Q as default};\n//# sourceMappingURL=bundle.js.map\n","type ServiceFactory<T> = (...args: any[]) => T;\n\ninterface ServiceEntry<T> {\n factory: ServiceFactory<T>;\n singleton: boolean;\n instance?: T;\n}\n\n/**\n * Manages the registration and retrieval of services within the application.\n *\n * The `ServiceRegistry` allows services to be registered with a unique identifier and a factory function.\n * Services can be registered as singletons (default) or as transient instances.\n *\n * - Use `register` to add a service to the registry.\n * - Use `get` to retrieve an instance of a registered service.\n *\n * @example\n * ```typescript\n * registry.register('myService', () => new MyService(), true);\n * const service = registry.get<T>('myService');\n * ```\n */\nclass ServiceRegistry {\n private services = new Map<any, ServiceEntry<any>>();\n\n /**\n * Registers a service with the service registry.\n *\n * @template T - The type of the service.\n * @param name - The unique identifier for the service.\n * @param factory - A factory function that creates an instance of the service.\n * @param singleton - If true, the service will be treated as a singleton. Defaults to true.\n */\n register<T>(param: new (...args: any[]) => T, factory: ServiceFactory<T>, singleton = true): void {\n this.services.set(param, { factory, singleton });\n }\n\n /**\n * Retrieves an instance of the requested service by its identifier.\n *\n * If the service is registered as a singleton, returns the existing instance or creates one if it doesn't exist.\n * If the service is not a singleton, returns a new instance each time.\n *\n * @typeParam T - The type of the service to retrieve.\n * @param name - The identifier of the service to retrieve.\n * @returns The instance of the requested service.\n * @throws {Error} If the service is not registered.\n */\n get<T>(param: new (...args: any[]) => T): T {\n const entry = this.services.get(param);\n\n if (!entry) {\n throw new Error(`Service '${param}' is not registered.`);\n }\n\n if (entry.singleton) {\n if (!entry.instance) {\n entry.instance = entry.factory();\n }\n return entry.instance;\n }\n return entry.factory();\n }\n}\n\nexport const serviceRegistry = new ServiceRegistry();\n","import { GenericHelpers } from '../utilities/helpers/generic-helpers';\n\nexport class ViewUrlDecoratorSvc {\n decorators: any[];\n\n constructor() {\n this.decorators = [];\n }\n\n hasDecorators() {\n return this.decorators.length > 0;\n }\n\n add(decorator: any) {\n this.decorators = this.decorators.filter((d) => d.uid !== decorator.uid).concat(decorator);\n }\n\n applyDecorators(url: string, decode: boolean) {\n if (!url) {\n return url;\n }\n\n const urlObj = new URL(GenericHelpers.prependOrigin(url));\n // apply query params\n const queryParamDecorators = this.decorators.filter((d) => d.type === 'queryString');\n for (let i = 0; i < queryParamDecorators.length; i++) {\n const decorator = queryParamDecorators[i];\n if (urlObj.searchParams.has(decorator.key)) {\n urlObj.searchParams.delete(decorator.key);\n }\n const value = decorator.valueFn();\n urlObj.searchParams.append(decorator.key, value);\n }\n if (decode) {\n urlObj.search = decodeURIComponent(urlObj.search);\n }\n return urlObj.href;\n }\n}\n","import Events, { LuigiCompoundContainer, LuigiContainer } from '@luigi-project/container';\nimport type { Luigi } from '../core-api/luigi';\nimport { NavigationService, type ModalSettings } from '../services/navigation.service';\nimport { RoutingService } from '../services/routing.service';\nimport { serviceRegistry } from '../services/service-registry';\nimport { ViewUrlDecoratorSvc } from '../services/viewurl-decorator';\nimport { RoutingHelpers } from '../utilities/helpers/routing-helpers';\nimport { ModalService, type ModalPromiseObject } from '../services/modal.service';\n\nconst createContainer = async (node: any, luigi: Luigi): Promise<HTMLElement> => {\n const userSettingGroups = await luigi.readUserSettings();\n const hasUserSettings = node.userSettingsGroup && typeof userSettingGroups === 'object' && userSettingGroups !== null;\n const userSettings = hasUserSettings ? userSettingGroups[node.userSettingsGroup] : null;\n\n if (node.webcomponent && !RoutingHelpers.checkWCUrl(node.viewUrl, luigi)) {\n console.warn(`View URL '${node.viewUrl}' not allowed to be included`);\n return document.createElement('div');\n }\n\n if (node.compound) {\n const lcc: LuigiCompoundContainer = document.createElement('luigi-compound-container') as LuigiCompoundContainer;\n\n lcc.setAttribute('lui_container', 'true');\n lcc.viewurl = serviceRegistry.get(ViewUrlDecoratorSvc).applyDecorators(node.viewUrl, node.decodeViewUrl);\n lcc.webcomponent = node.webcomponent;\n lcc.compoundConfig = node.compound;\n lcc.context = node.context;\n lcc.clientPermissions = node.clientPermissions;\n lcc.nodeParams = node.nodeParams;\n lcc.pathParams = node.pathParams;\n (lcc as any).userSettingsGroup = node.userSettingsGroup;\n lcc.userSettings = userSettings;\n lcc.searchParams = node.searchParams;\n lcc.activeFeatureToggleList = luigi.featureToggles().getActiveFeatureToggleList();\n lcc.locale = luigi.i18n().getCurrentLocale();\n lcc.theme = luigi.theming().getCurrentTheme();\n (lcc as any).viewGroup = node.viewGroup;\n luigi.getEngine()._comm.addListeners(lcc, luigi);\n return lcc;\n } else {\n const lc: LuigiContainer = document.createElement('luigi-container') as LuigiContainer;\n\n lc.setAttribute('lui_container', 'true');\n lc.viewurl = serviceRegistry.get(ViewUrlDecoratorSvc).applyDecorators(node.viewUrl, node.decodeViewUrl);\n lc.webcomponent = node.webcomponent;\n lc.context = node.context;\n lc.clientPermissions = node.clientPermissions;\n (lc as any).cssVariables = await luigi.theming().getCSSVariables();\n lc.nodeParams = node.nodeParams;\n lc.pathParams = node.pathParams;\n (lc as any).userSettingsGroup = node.userSettingsGroup;\n lc.userSettings = userSettings;\n lc.searchParams = node.searchParams;\n lc.activeFeatureToggleList = luigi.featureToggles().getActiveFeatureToggleList();\n lc.locale = luigi.i18n().getCurrentLocale();\n lc.theme = luigi.theming().getCurrentTheme();\n (lc as any).viewGroup = node.viewGroup;\n setSandboxRules(lc, luigi);\n setAllowRules(lc, luigi);\n luigi.getEngine()._comm.addListeners(lc, luigi);\n return lc;\n }\n};\n\nconst setSandboxRules = (container: LuigiContainer, luigi: Luigi): void => {\n const customSandboxRules: string[] = luigi.getConfigValue('settings.customSandboxRules');\n\n if (!customSandboxRules?.length) {\n return;\n }\n\n const luigiDefaultSandboxRules: string[] = [\n 'allow-forms', // Allows the resource to submit forms. If this keyword is not used, form submission is blocked.\n 'allow-modals', // Lets the resource open modal windows.\n // 'allow-orientation-lock', // Lets the resource lock the screen orientation.\n // 'allow-pointer-lock', // Lets the resource use the Pointer Lock API.\n 'allow-popups', // Allows popups (such as window.open(), _blank as target attribute, or showModalDialog()). If this keyword is not used, the popup will silently fail to open.\n 'allow-popups-to-escape-sandbox', // Lets the sandboxed document open new windows without those windows inheriting the sandboxing. For example, this can safely sandbox an advertisement without forcing the same restrictions upon the page the ad links to.\n // 'allow-presentation', // Lets the resource start a presentation session.\n 'allow-same-origin', // If this token is not used, the resource is treated as being from a special origin that always fails the same-origin policy.\n 'allow-scripts' // Lets the resource run scripts (but not create popup windows).\n // 'allow-storage-access-by-user-activation', // Lets the resource request access to the parent's storage capabilities with the Storage Access API.\n // 'allow-top-navigation', // Lets the resource navigate the top-level browsing context (the one named _top).\n // 'allow-top-navigation-by-user-activation', // Lets the resource navigate the top-level browsing context, but only if initiated by a user gesture.\n // 'allow-downloads-without-user-activation' // Allows for downloads to occur without a gesture from the user.\n ];\n const activeSandboxRules: string[] = customSandboxRules\n ? [...new Set([...luigiDefaultSandboxRules, ...customSandboxRules])]\n : luigiDefaultSandboxRules;\n\n container.sandboxRules = activeSandboxRules;\n};\n\nconst setAllowRules = (container: LuigiContainer, luigi: Luigi): void => {\n const allowRules: string[] = luigi.getConfigValue('settings.allowRules');\n\n if (!allowRules?.length) {\n return;\n }\n\n allowRules.forEach((rule: string, index: number) => {\n allowRules[index] = rule + (rule.indexOf(';') != -1 ? '' : ';');\n });\n\n container.allowRules = allowRules;\n};\n\nexport const UIModule = {\n navService: undefined as unknown as NavigationService,\n routingService: undefined as unknown as RoutingService,\n luigi: undefined as unknown as Luigi,\n init: (luigi: Luigi) => {\n console.log('Init UI...');\n UIModule.navService = serviceRegistry.get(NavigationService);\n UIModule.routingService = serviceRegistry.get(RoutingService);\n UIModule.luigi = luigi;\n luigi.getEngine()._connector?.renderMainLayout();\n },\n update: (scopes?: string[]) => {\n const croute = UIModule.routingService.getCurrentRoute();\n if (!croute) {\n return;\n }\n const noScopes = !scopes || scopes.length === 0;\n\n /*\n Available scopes:\n\n navigation\n navigation.nodes\n navigation.profile\n navigation.contextSwitcher\n navigation.viewgroupdata\n navigation.productSwitcher\n settings\n settings.theming\n settings.footer\n settings.header\n */\n\n if (\n noScopes ||\n scopes.includes('settings.header') ||\n scopes.includes('settings') ||\n scopes.includes('navigation') ||\n scopes.includes('navigation.profile') ||\n scopes.includes('navigation.contextSwitcher') ||\n scopes.includes('navigation.productSwitcher')\n ) {\n UIModule.luigi.getEngine()._connector?.renderTopNav(UIModule.navService.getTopNavData(croute.path));\n }\n if (\n noScopes ||\n scopes.includes('navigation') ||\n scopes.includes('navigation.nodes') ||\n scopes.includes('navigation.viewgroupdata') ||\n scopes.includes('settings') ||\n scopes.includes('settings.footer')\n ) {\n UIModule.luigi.getEngine()._connector?.renderLeftNav(UIModule.navService.getLeftNavData(croute.path));\n UIModule.luigi.getEngine()._connector?.renderTabNav(UIModule.navService.getTabNavData(croute.path));\n }\n if (\n noScopes ||\n scopes.includes('navigation') ||\n scopes.includes('navigation.nodes') ||\n scopes.includes('navigation.viewgroupdata') ||\n scopes.includes('settings.theming')\n ) {\n UIModule.updateMainContent(croute.node, UIModule.luigi);\n }\n },\n updateMainContent: async (currentNode: any, luigi: Luigi) => {\n const userSettingGroups = await luigi.readUserSettings();\n const hasUserSettings =\n currentNode.userSettingsGroup && typeof userSettingGroups === 'object' && userSettingGroups !== null;\n const userSettings = hasUserSettings ? userSettingGroups[currentNode.userSettingsGroup] : null;\n const containerWrapper = luigi.getEngine()._connector?.getContainerWrapper();\n luigi.getEngine()._connector?.hideLoadingIndicator(containerWrapper);\n\n if (currentNode && containerWrapper) {\n let viewGroupContainer: any;\n\n [...containerWrapper.childNodes].forEach((element: any) => {\n if (element.tagName?.indexOf('LUIGI-') === 0) {\n if (element.viewGroup) {\n if (currentNode.viewGroup === element.viewGroup) {\n viewGroupContainer = element;\n } else {\n element.style.display = 'none';\n }\n } else {\n element.remove();\n }\n }\n });\n\n if (viewGroupContainer) {\n viewGroupContainer.style.display = 'block';\n viewGroupContainer.viewurl = serviceRegistry\n .get(ViewUrlDecoratorSvc)\n .applyDecorators(currentNode.viewUrl, currentNode.decodeViewUrl);\n viewGroupContainer.nodeParams = currentNode.nodeParams;\n viewGroupContainer.pathParams = currentNode.pathParams;\n viewGroupContainer.clientPermissions = currentNode.clientPermissions;\n viewGroupContainer.searchParams = RoutingHelpers.prepareSearchParamsForClient(currentNode, luigi);\n viewGroupContainer.locale = luigi.i18n().getCurrentLocale();\n viewGroupContainer.theme = luigi.theming().getCurrentTheme();\n viewGroupContainer.activeFeatureToggleList = luigi.featureToggles().getActiveFeatureToggleList();\n viewGroupContainer.userSettingsGroup = currentNode.userSettingsGroup;\n viewGroupContainer.userSettings = userSettings;\n\n setSandboxRules(viewGroupContainer, luigi);\n setAllowRules(viewGroupContainer, luigi);\n\n //IMPORTANT!!! This needs to be at the end\n viewGroupContainer.updateContext(currentNode.context || {});\n } else {\n const container = await createContainer(currentNode, luigi);\n containerWrapper?.appendChild(container);\n const connector = luigi.getEngine()._connector;\n if (currentNode.loadingIndicator?.enabled !== false) {\n connector?.showLoadingIndicator(containerWrapper);\n }\n }\n }\n },\n openModal: async (luigi: Luigi, node: any, modalSettings: ModalSettings, onCloseCallback?: () => void) => {\n const lc = await createContainer(node, luigi);\n const routingService = serviceRegistry.get(RoutingService);\n const modalService = serviceRegistry.get(ModalService);\n\n let resolved = false;\n let resolveFn: (() => void) | undefined;\n let onCloseRequestHandler: (() => void) | undefined;\n\n const onCloseRequest = () => {\n return new Promise<void>((resolve) => {\n resolveFn = () => {\n if (resolved) return;\n resolved = true;\n resolve();\n modalService.removeLastModalFromStack();\n };\n\n onCloseRequestHandler = () => {\n resolveFn && resolveFn();\n if (luigi.getConfigValue('routing.showModalPathInUrl') && modalService.getModalStackLength() === 0) {\n routingService.removeModalDataFromUrl(true);\n }\n };\n\n lc.addEventListener(Events.CLOSE_CURRENT_MODAL_REQUEST, onCloseRequestHandler);\n });\n };\n\n const closePromise = onCloseRequest();\n\n const modalPromiseObj: ModalPromiseObject = {\n closePromise,\n resolveFn,\n onCloseRequestHandler,\n onInternalClose: () => {\n try {\n modalPromiseObj.resolveFn && modalPromiseObj.resolveFn();\n } catch (e) {\n console.warn('onInternalClose failed', e);\n }\n },\n modalsettings: modalSettings\n };\n\n modalService.registerModal(modalPromiseObj);\n\n luigi.getEngine()._connector?.renderModal(\n lc,\n modalSettings,\n () => {\n onCloseCallback?.();\n modalService.removeLastModalFromStack();\n if (luigi.getConfigValue('routing.showModalPathInUrl') && modalService.getModalStackLength() === 0) {\n routingService.removeModalDataFromUrl(true);\n }\n },\n () => closePromise\n );\n\n const connector = luigi.getEngine()._connector;\n if (node.loadingIndicator?.enabled !== false) {\n connector?.showLoadingIndicator(lc.parentElement as HTMLElement);\n }\n },\n updateModalSettings: (modalSettings: ModalSettings, addHistoryEntry: boolean, luigi: Luigi) => {\n const modalService = serviceRegistry.get(ModalService);\n if (modalService.getModalStackLength() === 0) {\n return;\n }\n modalService.updateFirstModalSettings(modalSettings);\n const routingService = serviceRegistry.get(RoutingService);\n\n const modalPath = RoutingHelpers.getModalPathFromPath(luigi);\n if (modalPath) {\n routingService.updateModalDataInUrl(modalPath, modalService.getModalSettings(), addHistoryEntry);\n }\n luigi.getEngine()._connector?.updateModalSettings(modalService.getModalSettings());\n },\n openDrawer: async (luigi: Luigi, node: any, modalSettings: ModalSettings, onCloseCallback?: () => void) => {\n const lc = await createContainer(node, luigi);\n luigi.getEngine()._connector?.renderDrawer(lc, modalSettings, onCloseCallback);\n const connector = luigi.getEngine()._connector;\n if (node.loadingIndicator?.enabled !== false) {\n connector?.showLoadingIndicator(lc.parentElement as HTMLElement);\n }\n }\n};\n","import type { LuigiCompoundContainer, LuigiContainer } from '@luigi-project/container';\nimport type { FeatureToggles } from '../core-api/feature-toggles';\nimport type { Luigi } from '../core-api/luigi';\nimport { UIModule } from '../modules/ui-module';\nimport { RoutingHelpers } from '../utilities/helpers/routing-helpers';\nimport type { ModalSettings, Node } from './navigation.service';\nimport { NavigationService } from './navigation.service';\nimport { serviceRegistry } from './service-registry';\nimport { ModalService } from './modal.service';\n\nexport interface Route {\n raw: string;\n node?: Node;\n path: string;\n nodeParams?: Record<string, string>;\n}\n\nexport class RoutingService {\n navigationService?: NavigationService;\n previousNode: Node | undefined;\n currentRoute?: Route;\n modalSettings?: ModalSettings;\n\n constructor(private luigi: Luigi) {}\n\n private getNavigationService(): NavigationService {\n if (!this.navigationService) {\n this.navigationService = serviceRegistry.get(NavigationService);\n }\n\n return this.navigationService;\n }\n\n /**\n * If the current route matches any of the defined patterns, it will be skipped.\n * @returns {boolean} true if the current route matches any of the patterns, false otherwise\n */\n shouldSkipRoutingForUrlPatterns(): boolean {\n const defaultPattern: RegExp[] = [/access_token=/, /id_token=/];\n const patterns: any[] = this.luigi.getConfigValue('routing.skipRoutingForUrlPatterns') || defaultPattern;\n\n return patterns.filter((pattern) => location.href.match(pattern)).length !== 0;\n }\n\n /**\n * Initializes the route change handler for the application.\n *\n * Depending on the Luigi configuration, this method sets up a listener for hash-based or path-based routing changes.\n * When the URL changes, it:\n * - Parses the current path and query parameters.\n * - Filters node-specific parameters.\n * - Checks if a redirect is necessary and navigates if so.\n * - Retrieves and updates the current navigation node.\n * - Notifies the navigation service of the node change.\n * - Updates the top, left, and tab navigation UIs.\n * - Updates the main content area based on the current node.\n *\n */\n enableRouting(): void {\n const luigiConfig = this.luigi.getConfig();\n console.log('Init Routing...', luigiConfig.routing);\n\n if (luigiConfig.routing?.useHashRouting) {\n window.addEventListener('hashchange', (ev) => {\n this.handleRouteChange(RoutingHelpers.getCurrentPath(true));\n });\n this.handleRouteChange(RoutingHelpers.getCurrentPath(true));\n } else {\n window.addEventListener('popstate', (ev) => {\n this.handleRouteChange(RoutingHelpers.getCurrentPath());\n });\n this.handleRouteChange(RoutingHelpers.getCurrentPath());\n }\n }\n\n async handleRouteChange(routeInfo: { path: string; query: string }): Promise<void> {\n const path = routeInfo.path;\n const query = routeInfo.query;\n const fullPath = path + (query ? '?' + query : '');\n const urlSearchParams = new URLSearchParams(query);\n const paramsObj: Record<string, string> = {};\n\n if (this.shouldSkipRoutingForUrlPatterns()) {\n return;\n }\n\n this.setFeatureToggle(fullPath);\n await this.shouldShowModalPathInUrl(routeInfo);\n\n urlSearchParams.forEach((value, key) => {\n paramsObj[key] = value;\n });\n const pathData = this.getNavigationService().getPathData(path);\n const nodeParams = RoutingHelpers.filterNodeParams(paramsObj, this.luigi);\n const redirect = this.getNavigationService().shouldRedirect(path, pathData);\n\n if (redirect) {\n this.luigi.navigation().navigate(redirect);\n return;\n }\n\n this.currentRoute = {\n raw: window.location.href,\n path,\n nodeParams\n };\n\n this.luigi.getEngine()._connector?.renderTopNav(this.getNavigationService().getTopNavData(path, pathData));\n this.luigi.getEngine()._connector?.renderLeftNav(this.getNavigationService().getLeftNavData(path, pathData));\n this.luigi.getEngine()._connector?.renderTabNav(this.getNavigationService().getTabNavData(path, pathData));\n\n const currentNode = pathData?.selectedNode ?? this.getNavigationService().getCurrentNode(path);\n\n if (currentNode) {\n this.currentRoute.node = currentNode;\n currentNode.nodeParams = nodeParams || {};\n currentNode.pathParams = pathData?.pathParams || {};\n currentNode.searchParams = RoutingHelpers.prepareSearchParamsForClient(currentNode, this.luigi);\n\n this.getNavigationService().onNodeChange(this.previousNode, currentNode);\n this.previousNode = currentNode;\n UIModule.updateMainContent(currentNode, this.luigi);\n }\n }\n\n getCurrentRoute(): Route | undefined {\n return this.currentRoute;\n }\n\n /**\n * If `showModalPathInUrl` is provided, bookmarkable modal path will be triggered.\n */\n async shouldShowModalPathInUrl(routeInfo: { path: string; query: string }): Promise<void> {\n if (this.luigi.getConfigValue('routing.showModalPathInUrl')) {\n await this.handleBookmarkableModalPath(routeInfo);\n }\n }\n\n /**\n * Handles opening a modal based on the current bookmarkable path.\n *\n * This method checks if there is an additional modal path present in the current Luigi path.\n * If a modal path exists, it retrieves the corresponding modal parameters and node data,\n * then opens the modal using the navigation service.\n *\n * @returns {Promise<void>} A promise that resolves when the modal handling is complete.\n */\n async handleBookmarkableModalPath(routeInfo: { path: string; query: string }): Promise<void> {\n const navService = serviceRegistry.get(NavigationService);\n const modalService = serviceRegistry.get(ModalService);\n const urlSearchParams = new URLSearchParams(routeInfo?.query || '');\n const modalViewParamName = RoutingHelpers.getModalViewParamName(this.luigi);\n const modalPath = urlSearchParams.get(modalViewParamName);\n\n if (!modalPath) {\n modalService.closeModals();\n return;\n } else {\n const modalSettings = urlSearchParams.get(`${modalViewParamName}Params`);\n try {\n const modalSettingsObj = JSON.parse(modalSettings || '{}');\n const { nodeObject } = await navService.extractDataFromPath(modalPath);\n const modalContainer: LuigiContainer | LuigiCompoundContainer | null =\n document.querySelector('.lui-modal luigi-container');\n if (modalContainer) {\n this.luigi.getEngine()._connector?.updateModalSettings(modalSettingsObj);\n } else {\n this.luigi.navigation().openAsModal(modalPath, modalSettingsObj || nodeObject.openNodeInModal);\n }\n } catch (e) {\n console.error('Error parsing modal settings from URL parameters', e);\n }\n }\n }\n\n /**\n * Append modal data to url\n * @param {string} modalPath path of the view which is displayed in the modal\n * @param {Object} modalParams query parameter\n */\n appendModalDataToUrl(modalPath: string, modalParams: ModalSettings): void {\n // global setting for persistence in url .. default false\n const queryParamSeparator = RoutingHelpers.getHashQueryParamSeparator();\n const params = RoutingHelpers.getQueryParams(this.luigi);\n const modalParamName = RoutingHelpers.getModalViewParamName(this.luigi);\n const prevModalPath = params[modalParamName];\n const url = new URL(location.href);\n const hashRoutingActive = this.luigi.getConfigValue('routing.useHashRouting');\n let historyState = history.state;\n let pathWithoutModalData;\n let urlWithoutModalData;\n if (hashRoutingActive) {\n let [path, searchParams] = url.hash.split('?');\n pathWithoutModalData = path;\n urlWithoutModalData = RoutingHelpers.getURLWithoutModalData(searchParams, modalParamName);\n if (urlWithoutModalData) {\n pathWithoutModalData += '?' + urlWithoutModalData;\n }\n } else {\n pathWithoutModalData = url.pathname;\n urlWithoutModalData = RoutingHelpers.getURLWithoutModalData(url.search, modalParamName);\n if (urlWithoutModalData) {\n pathWithoutModalData += '?' + RoutingHelpers.getURLWithoutModalData(url.search, modalParamName);\n }\n }\n historyState = RoutingHelpers.handleHistoryState(historyState, pathWithoutModalData);\n if (prevModalPath !== modalPath) {\n params[modalParamName] = modalPath;\n if (modalParams && Object.keys(modalParams).length) {\n params[`${modalParamName}Params`] = JSON.stringify(modalParams);\n }\n if (hashRoutingActive) {\n const queryParamIndex = location.hash.indexOf(queryParamSeparator);\n if (queryParamIndex !== -1) {\n url.hash = url.hash.slice(0, queryParamIndex);\n }\n url.hash = `${url.hash}${queryParamSeparator}${RoutingHelpers.encodeParams(params)}`;\n } else {\n url.search = `?${RoutingHelpers.encodeParams(params)}`;\n }\n history.pushState(historyState, '', url.href);\n } else {\n const cleanUrl = new URL(url);\n if (hashRoutingActive) {\n let path = cleanUrl.hash.split('?')[0];\n cleanUrl.hash = path;\n if (urlWithoutModalData) {\n cleanUrl.hash += '?' + urlWithoutModalData;\n }\n } else {\n cleanUrl.search = urlWithoutModalData;\n }\n history.replaceState({}, '', cleanUrl.href);\n history.pushState(historyState, '', url.href);\n }\n }\n\n /**\n * Remove modal data from url\n * @param isClosedInternal flag if the modal is closed via close button or internal back navigation instead of changing browser URL manually or browser back button\n */\n removeModalDataFromUrl(isClosedInternal: boolean): void {\n const params = RoutingHelpers.getQueryParams(this.luigi);\n const modalParamName = RoutingHelpers.getModalViewParamName(this.luigi);\n let url = new URL(location.href);\n const hashRoutingActive = this.luigi.getConfigValue('routing.useHashRouting');\n if (hashRoutingActive) {\n let modalParamsObj: any = {};\n if (params[modalParamName]) {\n modalParamsObj[modalParamName] = params[modalParamName];\n }\n if (params[`${modalParamName}Params`]) {\n modalParamsObj[`${modalParamName}Params`] = params[`${modalParamName}Params`];\n }\n let prevModalPath = RoutingHelpers.encodeParams(modalParamsObj);\n if (url.hash.includes(`?${prevModalPath}`)) {\n url.hash = url.hash.replace(`?${prevModalPath}`, '');\n } else if (url.hash.includes(`&${prevModalPath}`)) {\n url.hash = url.hash.replace(`&${prevModalPath}`, '');\n }\n } else {\n let searchParams = new URLSearchParams(url.search.slice(1));\n searchParams.delete(modalParamName);\n searchParams.delete(`${modalParamName}Params`);\n let finalUrl = '';\n Array.from(searchParams.keys()).forEach((searchParamKey) => {\n finalUrl += (finalUrl === '' ? '?' : '&') + searchParamKey + '=' + searchParams.get(searchParamKey);\n });\n url.search = finalUrl;\n }\n // only if close modal [X] is pressed or closed via api\n if (history.state && history.state.modalHistoryLength >= 0 && isClosedInternal) {\n const modalHistoryLength = history.state.modalHistoryLength;\n const path = history.state.pathBeforeHistory;\n let isModalHistoryHigherThanHistoryLength = false;\n window.addEventListener(\n 'popstate',\n (e) => {\n if (isModalHistoryHigherThanHistoryLength) {\n //replace the url with saved path and get rid of modal data in url\n history.replaceState({}, '', path);\n //reset history.length\n history.pushState({}, '', path);\n //apply history back is working\n history.back();\n } else {\n history.pushState({}, '', path);\n history.back();\n }\n },\n { once: true }\n );\n\n if (history.state.historygap === history.length - history.state.modalHistoryLength) {\n history.go(-history.state.modalHistoryLength);\n } else {\n if (history.state.modalHistoryLength > history.length) {\n const historyMaxBack = history.length - 1;\n isModalHistoryHigherThanHistoryLength = true;\n history.go(-historyMaxBack);\n //flag to prevent to run handleRouteChange when url has modalData in path\n //otherwise modal will be opened again\n window.Luigi.preventLoadingModalData = true;\n } else {\n const modalHistoryLength = history.state.modalHistoryLength;\n history.go(-modalHistoryLength);\n }\n }\n } else {\n history.pushState({}, '', url.href);\n }\n }\n\n /**\n * Set feature toggles if `queryStringParam` is provided at config file\n * @param {string} path used for retrieving and appending the path parameters\n */\n setFeatureToggle(path: string): void {\n const featureToggleProperty = this.luigi.getConfigValue('settings.featureToggles.queryStringParam');\n const featureToggles: FeatureToggles = this.luigi.featureToggles();\n\n if (featureToggleProperty && typeof path === 'string') {\n RoutingHelpers.setFeatureToggles(featureToggleProperty, path, featureToggles);\n }\n }\n\n /**\n * Updates the current browser URL with modal-related routing information.\n *\n * Depending on the routing configuration (hash vs. standard), this method\n * injects or updates two query parameters:\n * - <modalParamName>: the modal's path identifier (modalPath)\n * - <modalParamName>Params: a JSON-stringified object of additional modal parameters (modalParams)\n *\n * Behavior:\n * - Determines the parameter base name via RoutingHelpers.getModalViewParamName.\n * - Merges existing query parameters obtained through RoutingHelpers.getQueryParams, overwriting any previous modal values.\n * - If hash routing is enabled (routing.useHashRouting = true):\n * - Strips any existing query segment after the hash before appending the new encoded parameters.\n * - Rebuilds the hash in the form: #<hashBase><separator><encodedParams>.\n * - If hash routing is disabled:\n * - Replaces the entire search string (?...) with the newly encoded parameters.\n * - Serializes modalParams only when it is a non-empty object; otherwise omits the \"*Params\" companion parameter.\n * - Uses history.pushState when addHistoryEntry is true, otherwise history.replaceState to avoid adding a new history entry.\n *\n * @param modalPath A string identifying the modal view or route segment to encode into the URL.\n * @param modalParams A record of additional parameters for the modal; only included if non-empty. Serialized via JSON.stringify.\n * @param addHistoryEntry If true, a new history entry is pushed (allowing back navigation); if false, the current entry is replaced.\n\n */\n updateModalDataInUrl(modalPath: string, modalParams: ModalSettings, addHistoryEntry: boolean): void {\n let queryParamSeparator = RoutingHelpers.getHashQueryParamSeparator();\n const params = RoutingHelpers.getQueryParams(this.luigi);\n const modalParamName = RoutingHelpers.getModalViewParamName(this.luigi);\n\n params[modalParamName] = modalPath;\n if (modalParams && Object.keys(modalParams).length) {\n params[`${modalParamName}Params`] = JSON.stringify(modalParams);\n }\n const url = new URL(location.href);\n const hashRoutingActive = this.luigi.getConfigValue('routing.useHashRouting');\n if (hashRoutingActive) {\n const queryParamIndex = location.hash.indexOf(queryParamSeparator);\n if (queryParamIndex !== -1) {\n url.hash = url.hash.slice(0, queryParamIndex);\n }\n url.hash = `${url.hash}${queryParamSeparator}${RoutingHelpers.encodeParams(params)}`;\n } else {\n url.search = `?${RoutingHelpers.encodeParams(params)}`;\n }\n\n if (!addHistoryEntry) {\n history.replaceState((window as any).state, '', url.href);\n } else {\n history.pushState((window as any).state, '', url.href);\n }\n }\n}\n","import { ModalService } from '../services/modal.service';\nimport type { ModalSettings } from '../services/navigation.service';\nimport { NavigationService } from '../services/navigation.service';\nimport { RoutingService } from '../services/routing.service';\nimport { serviceRegistry } from '../services/service-registry';\nimport type { Luigi } from './luigi';\n\nexport class Navigation {\n luigi: Luigi;\n hashRouting: boolean = false;\n navService: NavigationService;\n routingService: RoutingService;\n modalService: ModalService;\n\n constructor(luigi: Luigi) {\n this.luigi = luigi;\n this.hashRouting = luigi.getConfig().routing?.useHashRouting;\n this.navService = serviceRegistry.get(NavigationService);\n this.routingService = serviceRegistry.get(RoutingService);\n this.modalService = serviceRegistry.get(ModalService);\n }\n\n navigate = (\n path: string,\n preserveView?: string,\n modalSettings?: ModalSettings,\n callbackFn?: (val?: unknown) => void\n ) => {\n const normalizedPath = path.replace(/\\/\\/+/g, '/');\n const preventContextUpdate = false; //TODO just added for popState eventDetails\n const navSync = true; //TODO just added for popState eventDetails\n\n if (modalSettings) {\n this.openAsModal(path, modalSettings, callbackFn);\n } else {\n this.modalService.closeModals();\n if (this.hashRouting) {\n location.hash = normalizedPath;\n } else {\n window.history.pushState({ path: normalizedPath }, '', normalizedPath);\n const eventDetail = {\n detail: {\n preventContextUpdate,\n withoutSync: !navSync\n }\n };\n const event = new CustomEvent('popstate', eventDetail);\n\n window.dispatchEvent(event);\n }\n }\n };\n\n openAsModal = async (path: string, modalSettings: ModalSettings, onCloseCallback?: () => void) => {\n if (!modalSettings.keepPrevious) {\n await this.modalService.closeModals();\n }\n const normalizedPath = path.replace(/\\/\\/+/g, '/');\n const node = this.navService.getCurrentNode(normalizedPath);\n const settings = modalSettings || {};\n if (!settings.title) {\n settings.title = node.label;\n }\n // Append modal data to URL only if configured and if no other modals are open\n if (this.luigi.getConfigValue('routing.showModalPathInUrl') && this.modalService.getModalStackLength() === 0) {\n this.routingService.appendModalDataToUrl(normalizedPath, settings);\n }\n this.luigi.getEngine()._ui.openModal(this.luigi, node, settings, onCloseCallback);\n };\n\n openAsDrawer = (path: string, modalSettings: ModalSettings, onCloseCallback?: () => void) => {\n const normalizedPath = path.replace(/\\/\\/+/g, '/');\n const node = this.navService.getCurrentNode(normalizedPath);\n const settings = modalSettings || {};\n if (!settings.title) {\n settings.title = node.label;\n }\n this.luigi.getEngine()._ui.openDrawer(this.luigi, node, settings, onCloseCallback);\n };\n}\n","import { GenericHelpers } from '../utilities/helpers/generic-helpers';\nimport { RoutingHelpers } from '../utilities/helpers/routing-helpers';\nimport type { Luigi } from './luigi';\n\nexport class Routing {\n luigi: Luigi;\n\n constructor(luigi: Luigi) {\n this.luigi = luigi;\n }\n\n /**\n * Adds or updates search parameters in the current URL.\n *\n * Depending on the routing configuration, this method will either update the hash fragment\n * or the standard search parameters of the URL. It also manages browser history based on the\n * `keepBrowserHistory` flag.\n *\n * @param params - An object containing key-value pairs to be added as search parameters.\n * @param keepBrowserHistory - If `true`, a new entry is added to the browser's history; otherwise, the current entry is replaced. Defaults to `false`.\n */\n addSearchParams(params: object, keepBrowserHistory: boolean = false): void {\n if (!GenericHelpers.isObject(params)) {\n console.log('Params argument must be an object');\n return;\n }\n const url = new URL(location.href);\n if (this.luigi.getConfigValue('routing.useHashRouting')) {\n url.hash = RoutingHelpers.addParamsOnHashRouting(params, url.hash);\n } else {\n RoutingHelpers.modifySearchParams(params, url.searchParams);\n }\n\n this.handleBrowserHistory(keepBrowserHistory, url);\n this.luigi.configChanged();\n }\n\n /**\n * Get search parameter from URL as an object.\n * @memberof Routing\n * @returns {Object}\n * @example\n * Luigi.routing().getSearchParams();\n */\n getSearchParams(): object {\n const queryParams: Record<string, string> = {};\n const DENYLIST = ['__proto__', 'constructor', 'prototype'];\n\n const url = new URL(location.href);\n let entries;\n\n if (this.luigi.getConfigValue('routing.useHashRouting')) {\n const hashQuery = url.hash.split('?')[1];\n entries = hashQuery ? new URLSearchParams(hashQuery).entries() : [];\n } else {\n entries = url.searchParams.entries();\n }\n\n for (const [key, value] of entries) {\n if (DENYLIST.some((denied) => key === denied)) {\n console.warn(`Blocked because of potentially dangerous query param: ${key}`);\n continue;\n }\n queryParams[key] = value;\n }\n return queryParams;\n }\n\n /**\n * Updates the browser's history stack with the provided URL.\n *\n * Depending on the `keepBrowserHistory` flag, this method either pushes a new entry\n * onto the browser's history stack or replaces the current entry. The URL is sanitized\n * before being used. If the sanitized URL is invalid, a warning is logged and no action is taken.\n *\n * @param keepBrowserHistory - If `true`, a new history entry is pushed; if `false`, the current entry is replaced.\n * @param url - The URL object to be used for updating the browser history.\n */\n handleBrowserHistory(keepBrowserHistory: boolean, url: URL): void {\n const href = this.sanitizeUrl(url.href);\n if (!href) {\n console.warn('invalid url: ' + href);\n return;\n }\n if (keepBrowserHistory) {\n window.history.pushState({}, '', href);\n } else {\n window.history.replaceState({}, '', href);\n }\n }\n\n /**\n * Sanitizes a given URL by ensuring it shares the same origin as the current page.\n *\n * @param url - The URL to be sanitized.\n * @returns The original URL if it has the same origin as the current location; otherwise, returns `undefined`.\n */\n sanitizeUrl(url: string): string | undefined {\n return new URL(location.href).origin === new URL(url).origin ? url : undefined;\n }\n\n addNodeParams(params: Record<string, any>, keepBrowserHistory: boolean): void {\n if (!GenericHelpers.isObject(params)) {\n console.log('Params argument must be an object');\n return;\n }\n\n const paramPrefix = RoutingHelpers.getContentViewParamPrefix(this.luigi);\n const url = new URL(location.href);\n if (this.luigi.getConfigValue('routing.useHashRouting')) {\n url.hash = RoutingHelpers.addParamsOnHashRouting(params, url.hash, paramPrefix);\n } else {\n RoutingHelpers.modifySearchParams(params, url.searchParams, paramPrefix);\n }\n\n this.handleBrowserHistory(keepBrowserHistory, url);\n if (this.luigi.getConfigValue('routing.useHashRouting')) {\n window.dispatchEvent(new HashChangeEvent('hashchange'));\n } else {\n this.luigi.configChanged();\n }\n }\n}\n","import { serviceRegistry } from '../services/service-registry';\nimport { ViewUrlDecoratorSvc } from '../services/viewurl-decorator';\nimport { GenericHelpers } from '../utilities/helpers/generic-helpers';\nimport type { Luigi } from './luigi';\n\ndeclare global {\n interface Window {\n Luigi: any;\n __luigiThemeVars?: string[];\n }\n}\n\nexport class Theming {\n #luigi: Luigi;\n #currentTheme: string = '';\n\n constructor(luigi: Luigi) {\n this.#luigi = luigi;\n }\n\n /**\n * Retrieves the available themes\n * @memberof Theming\n * @returns {promise} resolves an array of theming objects\n * @example\n * Luigi\n * .theming()\n * .getAvailableThemes()\n * .then((themes) => {\n * // Logic to generate theme selector\n * });\n */\n async getAvailableThemes() {\n return await this.#luigi.getConfigValueAsync('settings.theming.themes');\n }\n\n /**\n * Sets the current theme id\n * @memberof Theming\n * @param {string} id of a theme object\n * @example\n * Luigi.theming().setCurrentTheme('light')\n */\n setCurrentTheme(id: string) {\n this.#currentTheme = id;\n // clear cache\n this.#luigi.__cssVars = undefined;\n }\n\n /**\n * Retrieves a theme object by name.\n * @memberof Theming\n * @param {string} id a theme id\n * @returns {promise} resolves a theme object\n * @example\n * Luigi\n * .theming()\n * .getThemeObject('light')\n * .then((id => {\n * // Logic\n * }))\n */\n async getThemeObject(id: string): Promise<any> {\n const themes = (await this.getAvailableThemes()) as any[];\n return themes?.find((t) => t.id === id);\n }\n\n /**\n * Retrieves the current active theme. Falls back to **defaultTheme** if none explicitly specified before.\n * @memberof Theming\n * @returns {string} theme id\n * @example\n * Luigi.theming().getCurrentTheme()\n */\n getCurrentTheme() {\n if (!this.isThemingAvailable()) {\n return false;\n }\n if (this.#currentTheme) {\n return this.#currentTheme;\n }\n const theming = this.#luigi.getConfigValue('settings.theming');\n if (!theming.defaultTheme) {\n console.error(\n '[Theming] getCurrentTheme() error. No theme set and no defaultTheme found in configuration',\n theming\n );\n }\n return theming.defaultTheme;\n }\n /**\n * The general status about the Theming configuration.\n * @memberof Theming\n * @returns {boolean} `true` if **settings.theming** configuration object is defined\n * @example\n * Luigi.theming().isThemingAvailable()\n */\n isThemingAvailable() /* istanbul ignore next */ {\n return !!this.#luigi.getConfigValue('settings.theming');\n }\n\n /**\n * Returns CSS variables with key value from Luigi if `@luigi-project/core/luigi_theme-vars.js` is included in the `index.html` and `settings.theming.variables==='fiori'` is defined in the {@link general-settings.md settings} section.\n * It's also possible to define your own variables file which can be declared in `settings.theming.variables.file` in the {@link general-settings.md settings} section.\n * The variables should be defined in a JSON file which starts with a `root` key.\n * When you configure you own file, you can also implement exception handling by using the function `settings.theming.variables.errorHandling` which gets the error object as argument.\n * @memberof Theming\n * @returns {Object} CSS variables with their value.\n * @example Luigi.theming().getCSSVariables();\n */\n async getCSSVariables() {\n if (!window.Luigi.__cssVars) {\n const varFile = this.#luigi.getConfigValue('settings.theming.variables.file');\n if (varFile) {\n try {\n const resp = await fetch(varFile);\n window.Luigi.__cssVars = (await resp.json()).root;\n Object.keys(window.Luigi.__cssVars).forEach((key) => {\n const livePropVal = getComputedStyle(document.documentElement).getPropertyValue('--' + key);\n if (livePropVal) {\n window.Luigi.__cssVars[key] = livePropVal;\n }\n });\n } catch (error) {\n if (GenericHelpers.isFunction(this.#luigi.getConfigValue('settings.theming.variables.errorHandling'))) {\n this.#luigi.getConfigValue('settings.theming.variables.errorHandling')(error);\n } else {\n console.error('CSS variables file error: ', error);\n }\n }\n } else if (this.#luigi.getConfigValue('settings.theming.variables') === 'fiori' && window.__luigiThemeVars) {\n window.Luigi.__cssVars = {};\n window.__luigiThemeVars.forEach((key) => {\n window.Luigi.__cssVars[key] = getComputedStyle(document.documentElement).getPropertyValue('--' + key);\n });\n } else {\n window.Luigi.__cssVars = {}; // TODO: maybe allow also inline\n }\n }\n return window.Luigi.__cssVars;\n }\n\n /**\n * Initialize Theming Core API\n * @memberof Theming\n * @private\n */\n _init() /* istanbul ignore next */ {\n const viewUrlDecoratorService = serviceRegistry.get(ViewUrlDecoratorSvc);\n const setupViewUrlDecorator = () => {\n /**\n * Registers the viewUrl decorator\n * @memberof Theming\n * @private\n */\n const theming = this.#luigi.getConfigValue('settings.theming');\n if (theming && theming.nodeViewURLDecorator && theming.nodeViewURLDecorator.queryStringParameter) {\n viewUrlDecoratorService.add({\n type: 'queryString',\n uid: 'theming',\n key: theming.nodeViewURLDecorator.queryStringParameter.keyName,\n valueFn: () => {\n const value = this.getCurrentTheme();\n const configValueFn = theming.nodeViewURLDecorator.queryStringParameter.value;\n return configValueFn ? configValueFn(value) : value;\n }\n });\n }\n\n if (theming && theming.useFioriScrollbars === true) {\n document.body.classList.add('fioriScrollbars');\n }\n };\n setupViewUrlDecorator();\n }\n}\n","export class DirtyStatusService {\n unsavedChanges: {\n isDirty?: boolean;\n persistUrl?: string | null;\n dirtySet?: Set<any>;\n };\n /**\n * Initializes the `unsavedChanges` property with default values.\n * Sets `isDirty` to `false` and `persistUrl` to `null`, indicating that there are no unsaved changes initially.\n */\n constructor() {\n this.unsavedChanges = {\n isDirty: false,\n persistUrl: null\n };\n }\n\n /**\n * Updates the dirty status of a given source and manages the set of unsaved changes.\n *\n * If the dirty set does not exist or is not a `Set`, it initializes a new `Set` and adds the source to it.\n * The current URL is persisted in the `unsavedChanges` object.\n * If `isDirty` is `true`, the source is added to the dirty set; otherwise, it is removed.\n *\n * @param isDirty - Indicates whether the source has unsaved changes.\n * @param source - The source object to be marked as dirty or clean.\n */\n updateDirtyStatus(isDirty: boolean, source: any): void {\n if (!this.unsavedChanges.dirtySet || !(this.unsavedChanges.dirtySet instanceof Set)) {\n const dirtySet = new Set();\n\n dirtySet.add(source);\n this.unsavedChanges = {\n dirtySet: dirtySet\n };\n }\n\n this.unsavedChanges.persistUrl = window.location.href;\n\n if (isDirty) {\n this.unsavedChanges.dirtySet?.add(source);\n } else {\n this.unsavedChanges.dirtySet?.delete(source);\n }\n }\n\n /**\n * Clears the dirty state for a given source or all sources.\n *\n * If a source is provided, removes it from the set of unsaved changes.\n * If no source is provided, clears all unsaved changes.\n *\n * @param source - The source to clear from the dirty set. If omitted, all sources are cleared.\n */\n clearDirtyState(source?: any): void {\n if (this.unsavedChanges && this.unsavedChanges.dirtySet) {\n if (source) {\n this.unsavedChanges.dirtySet.delete(source);\n } else {\n this.unsavedChanges.dirtySet.clear();\n }\n }\n }\n\n /**\n * Determines whether there are unsaved changes.\n *\n * Checks if the `dirtySet` exists and contains any items, indicating unsaved changes.\n * If `dirtySet` is not present, falls back to the `isDirty` flag.\n *\n * @returns {boolean} `true` if there are unsaved changes, otherwise `false`.\n */\n readDirtyStatus(): boolean {\n return this.unsavedChanges.dirtySet ? this.unsavedChanges.dirtySet.size > 0 : !!this.unsavedChanges.isDirty;\n }\n}\n","import type { LuigiCompoundContainer, LuigiContainer } from '@luigi-project/container';\nimport type { Luigi } from '../core-api/luigi';\nimport { serviceRegistry } from '../services/service-registry';\nimport { DirtyStatusService } from '../services/dirty-status.service';\nimport { writable } from '../utilities/store';\n\nexport interface AlertSettings {\n text?: string;\n type?: string;\n links?: Record<string, Link>;\n closeAfter?: number;\n id?: string;\n}\n\nexport interface AlertHandler {\n openFromClient: boolean;\n close(): void;\n link(linkKey: string): boolean;\n}\n\nexport interface ProcessedAlertSettings {\n settings: AlertSettings;\n}\n\nexport interface Link {\n elemId: string;\n url?: string;\n dismissKey?: string;\n}\n\nexport interface ProcessedTextAndLinks {\n sanitizedText: string;\n links: Link[];\n}\n\nexport interface ConfirmationModalSettings {\n icon?: string;\n type?: string;\n header?: string;\n body?: string;\n buttonConfirm?: string;\n buttonDismiss?: string;\n}\n\nexport interface ConfirmationModalHandler {\n confirm(): void;\n dismiss(): void;\n}\n\nexport interface UserSettings {\n [key: string]: number | string | boolean;\n}\n\nlet dirtyStatusService: DirtyStatusService;\n\nexport const UXModule = {\n luigi: undefined as Luigi | undefined,\n documentTitle: undefined as any,\n init: (luigi: Luigi) => {\n console.log('ux init...');\n UXModule.luigi = luigi;\n UXModule.documentTitle = writable(undefined);\n dirtyStatusService = serviceRegistry.get(DirtyStatusService);\n },\n processAlert: (\n alertSettings: AlertSettings,\n openFromClient: boolean,\n containerElement: LuigiContainer | LuigiCompoundContainer\n ) => {\n if (!UXModule.luigi) {\n throw new Error('Luigi is not initialized.');\n }\n\n const alertHandler = {\n openFromClient,\n close: () => {\n if (alertSettings.id) {\n containerElement.notifyAlertClosed(alertSettings.id);\n }\n },\n link: (linkKey: string) => {\n if (alertSettings.links) {\n const link = alertSettings.links[linkKey];\n if (link) {\n link.url && UXModule.luigi?.navigation().navigate(link.url);\n if (link.dismissKey && alertSettings.id) {\n containerElement.notifyAlertClosed(alertSettings.id, link.dismissKey);\n return true;\n }\n }\n }\n return false;\n }\n };\n UXModule.luigi.getEngine()._connector?.renderAlert(alertSettings, alertHandler);\n },\n\n handleConfirmationModalRequest: (\n confirmationModalSettings: ConfirmationModalSettings,\n containerElement: LuigiContainer | LuigiCompoundContainer\n ) => {\n if (!UXModule.luigi) {\n throw new Error('Luigi is not initialized.');\n }\n\n if (confirmationModalSettings) {\n confirmationModalSettings = {\n ...confirmationModalSettings,\n ...{\n header: UXModule.luigi\n .i18n()\n .getTranslation(confirmationModalSettings.header || 'luigi.confirmationModal.header'),\n body: UXModule.luigi.i18n().getTranslation(confirmationModalSettings.body || 'luigi.confirmationModal.body'),\n buttonDismiss: UXModule.luigi\n .i18n()\n .getTranslation(confirmationModalSettings.buttonDismiss || 'luigi.button.dismiss'),\n buttonConfirm: UXModule.luigi\n .i18n()\n .getTranslation(confirmationModalSettings.buttonConfirm || 'luigi.button.confirm')\n }\n };\n }\n\n UXModule.luigi.getEngine()._connector?.renderConfirmationModal(confirmationModalSettings, {\n confirm() {\n containerElement.notifyConfirmationModalClosed(true);\n },\n dismiss() {\n containerElement.notifyConfirmationModalClosed(false);\n }\n });\n },\n\n handleDirtyStatusRequest: (isDirty: boolean, source: any) => {\n if (!UXModule.luigi) {\n throw new Error('Luigi is not initialized.');\n }\n dirtyStatusService.updateDirtyStatus(isDirty, source);\n }\n};\n","import { GenericHelpers } from './generic-helpers';\n\nclass UserSettingsHelperClass {\n processUserSettingGroups(userSettings: any, storedSettings: any): any[] {\n const userSettingGroups: any[] = [];\n const userSettingGroupsFromConfig = userSettings?.userSettingGroups;\n const userSettingGroupsFromOldConfig = storedSettings?.userSettings?.userSettingGroups;\n // regarding backwards compatibility\n const userSettingsSchema = userSettingGroupsFromConfig\n ? userSettingGroupsFromConfig\n : userSettingGroupsFromOldConfig;\n\n if (GenericHelpers.isObject(userSettingsSchema)) {\n for (const item in userSettingsSchema) {\n const innerObj: any = {};\n\n innerObj[item] = userSettingsSchema[item];\n userSettingGroups.push(innerObj);\n }\n\n return userSettingGroups;\n }\n\n return userSettingGroups;\n }\n\n getUserSettingsIframesInDom(): HTMLElement[] {\n const iframeCtn = document.querySelector('.iframeUserSettingsCtn');\n\n return (iframeCtn ? [...iframeCtn.children] : []) as HTMLElement[]; // convert htmlcollection to array because of foreach issue\n }\n\n hideUserSettingsIframe(): void {\n this.getUserSettingsIframesInDom().forEach((iframe: HTMLElement) => {\n iframe.style.display = 'none';\n });\n }\n\n findActiveCustomUserSettingsIframe(eventSource: any): any {\n const customUserSettingsIframes = document.querySelectorAll('[userSettingsGroup]');\n\n for (let i = 0; i < customUserSettingsIframes.length; i++) {\n if ((customUserSettingsIframes[i] as any).contentWindow === eventSource) {\n return customUserSettingsIframes[i];\n }\n }\n\n return null;\n }\n}\n\nexport const UserSettingsHelper = new UserSettingsHelperClass();\n","import { type AlertSettings, type ConfirmationModalSettings, type UserSettings } from '../modules/ux-module';\nimport { DirtyStatusService } from '../services/dirty-status.service';\nimport { serviceRegistry } from '../services/service-registry';\nimport { GenericHelpers } from '../utilities/helpers/generic-helpers';\nimport { UserSettingsHelper } from '../utilities/helpers/usersetting-dialog-helpers';\nimport { get } from '../utilities/store';\nimport type { Luigi } from './luigi';\n\nexport class UX {\n luigi: Luigi;\n dirtyStatusService = serviceRegistry.get(DirtyStatusService);\n private appLoadingIndicatorSelector = '[luigi-app-loading-indicator]';\n\n constructor(luigi: Luigi) {\n this.luigi = luigi;\n }\n\n showAlert = (alertSettings: AlertSettings) => {\n return new Promise((resolve) => {\n if (!alertSettings.id) {\n //TODO closeAlert will eine id als string\n alertSettings.id = GenericHelpers.getRandomId().toString();\n }\n const handler = {\n openFromClient: false,\n close: () => {\n resolve(true);\n },\n link: (linkKey: string) => {\n if (alertSettings.links) {\n const link = alertSettings.links[linkKey];\n if (link) {\n link.url && this.luigi?.navigation().navigate(link.url);\n if (link.dismissKey) {\n resolve(link.dismissKey);\n return true;\n }\n }\n }\n return false;\n }\n };\n this.luigi.getEngine()._connector?.renderAlert(alertSettings, handler);\n });\n };\n\n showConfirmationModal = (settings: ConfirmationModalSettings) => {\n if (settings) {\n settings = {\n ...settings,\n ...{\n header: this.luigi.i18n().getTranslation(settings.header || 'luigi.confirmationModal.header'),\n body: this.luigi.i18n().getTranslation(settings.body || 'luigi.confirmationModal.body'),\n buttonDismiss: this.luigi.i18n().getTranslation(settings.buttonDismiss || 'luigi.button.dismiss'),\n buttonConfirm: this.luigi.i18n().getTranslation(settings.buttonConfirm || 'luigi.button.confirm')\n }\n };\n }\n\n return new Promise((resolve, reject) => {\n this.luigi.getEngine()._connector?.renderConfirmationModal(settings, {\n confirm() {\n resolve(true);\n },\n dismiss() {\n reject();\n }\n });\n });\n };\n\n processUserSettingGroups = (): any[] => {\n const userSettings = this.luigi.getConfigValue('userSettings');\n const storedSettings = this.luigi.getConfigValue('settings');\n\n return UserSettingsHelper.processUserSettingGroups(userSettings, storedSettings);\n };\n\n openUserSettings = (settings: UserSettings) => {\n this.luigi.getEngine()._connector?.openUserSettings(settings);\n };\n\n closeUserSettings = () => {\n this.luigi.getEngine()._connector?.closeUserSettings();\n };\n\n setDocumentTitle = (documentTitle: string) => {\n this.luigi.getEngine()._ux?.documentTitle?.set(documentTitle);\n this.luigi.getEngine()._connector?.setDocumentTitle(documentTitle);\n };\n\n getDocumentTitle = (): string => {\n return get(this.luigi.getEngine()._ux?.documentTitle) || window.document.title || '';\n };\n\n hideAppLoadingIndicator = () => {\n const appLoadingIndicator = document.querySelector(this.appLoadingIndicatorSelector);\n\n if (!appLoadingIndicator) {\n return;\n }\n\n appLoadingIndicator.classList.add('hidden');\n\n setTimeout(() => {\n appLoadingIndicator.parentNode?.removeChild(appLoadingIndicator);\n }, 500);\n };\n\n showLoadingIndicator = (containerWrapper: HTMLElement) =>\n this.luigi.getEngine()._connector?.showLoadingIndicator(containerWrapper);\n\n hideLoadingIndicator = (containerWrapper: HTMLElement) =>\n this.luigi.getEngine()._connector?.hideLoadingIndicator(containerWrapper);\n\n addBackdrop = () => this.luigi.getEngine()._connector?.addBackdrop();\n\n removeBackdrop = () => this.luigi.getEngine()._connector?.removeBackdrop();\n\n getDirtyStatus = (): boolean => this.dirtyStatusService.readDirtyStatus();\n}\n","import type { LuigiEngine } from '../luigi-engine';\nimport { i18nService } from '../services/i18n.service';\nimport { AsyncHelpers } from '../utilities/helpers/async-helpers';\nimport { GenericHelpers } from '../utilities/helpers/generic-helpers';\nimport { FeatureToggles } from './feature-toggles';\nimport { Navigation } from './navigation';\nimport { Routing } from './routing';\nimport { Theming } from './theming';\nimport { UX } from './ux';\nimport { LuigiAuth, LuigiAuthClass } from './auth';\nimport { LuigiStore, writable } from '../utilities/store';\n\nexport class Luigi {\n config: any;\n _store: any;\n _featureToggles?: FeatureToggles;\n _i18n!: i18nService;\n _theming?: Theming;\n _routing?: Routing;\n __cssVars?: any;\n preventLoadingModalData?: boolean;\n initialized = false;\n configReadyCallback = function () {};\n\n private USER_SETTINGS_KEY = 'luigi.preferences.userSettings';\n\n constructor(private engine: LuigiEngine) {\n this._store = this.createConfigStore();\n }\n\n getEngine(): LuigiEngine {\n return this.engine;\n }\n\n // NOTE: using arrow style functions to have \"code completion\" in browser dev tools\n setConfig = (cfg: any) => {\n this.config = cfg;\n this.setConfigCallback(this.getConfigReadyCallback());\n this.engine.init();\n this.initialized = true;\n this.luigiAfterInit();\n };\n\n getConfig = (): any => {\n return this.config;\n };\n\n configChanged = (...scopes: string[]): void => {\n this.getEngine()._ui.update(scopes);\n };\n\n /**\n * Gets value of the given property on Luigi config object. Target can be a value or a synchronous function.\n * @param {string} property the object traversal path\n * @example\n * Luigi.getConfigValue('auth.use')\n * Luigi.getConfigValue('settings.sideNavFooterText')\n */\n getConfigValue(property: string): any {\n return GenericHelpers.getConfigValueFromObject(this.getConfig(), property);\n }\n\n /**\n * Gets value of the given property on the Luigi config object.\n * If the value is a Function it is called (with the given parameters) and the result of that call is the value.\n * If the value is not a Promise it is wrapped to a Promise so that the returned value is definitely a Promise.\n * @memberof Configuration\n * @param {string} property the object traversal path\n * @param {*} parameters optional parameters that are used if the target is a function\n * @example\n * Luigi.getConfigValueAsync('navigation.nodes')\n * Luigi.getConfigValueAsync('navigation.profile.items')\n * Luigi.getConfigValueAsync('navigation.contextSwitcher.options')\n */\n getConfigValueAsync(property: string, ...parameters: any[]): Promise<any> {\n return AsyncHelpers.getConfigValueFromObjectAsync(this.getConfig(), property, parameters);\n }\n\n /**\n * Reads the user settings object.\n * You can choose a custom storage to read the user settings by implementing the `userSettings.readUserSettings` function in the settings section of the Luigi configuration.\n * By default, the user settings will be read from the **localStorage**\n * @returns {Promise} a promise when a custom `readUserSettings` function in the settings.userSettings section of the Luigi configuration is implemented. It resolves a stored user settings object. If the promise is rejected the user settings dialog will also closed if the error object has a `closeDialog` property, e.g `reject({ closeDialog: true, message: 'some error' })`. In addition a custom error message can be logged to the browser console.\n * @example\n * Luigi.readUserSettings();\n */\n async readUserSettings() {\n const userSettingsConfig = await this.getConfigValueAsync('userSettings');\n const userSettings = userSettingsConfig\n ? userSettingsConfig\n : await this.getConfigValueAsync('settings.userSettings');\n\n if (userSettings && GenericHelpers.isFunction(userSettings.readUserSettings)) {\n return userSettings.readUserSettings();\n }\n\n const localStorageValue = localStorage.getItem(this.USER_SETTINGS_KEY);\n\n return localStorageValue && JSON.parse(localStorageValue);\n }\n\n /**\n * Stores the user settings object.\n * You can choose a custom storage to write the user settings by implementing the `userSetting.storeUserSettings` function in the settings section of the Luigi configuration\n * By default, the user settings will be written from the **localStorage**\n * @param {Object} userSettingsObj to store in the storage.\n * @param {Object} previousUserSettingsObj the previous object from storage.\n * @returns {Promise} a promise when a custom `storeUserSettings` function in the settings.userSettings section of the Luigi configuration is implemented. If it is resolved the user settings dialog will be closed. If the promise is rejected the user settings dialog will also closed if the error object has a `closeDialog` property, e.g `reject({ closeDialog: true, message: 'some error' })`. In addition a custom error message can be logged to the browser console.\n * @example\n * Luigi.storeUserSettings(userSettingsobject, previousUserSettingsObj);\n */\n async storeUserSettings(\n userSettingsObj: Record<string, any>,\n previousUserSettingsObj: Record<string, any>\n ): Promise<any> {\n const userSettingsConfig = await this.getConfigValueAsync('userSettings');\n const userSettings = userSettingsConfig\n ? userSettingsConfig\n : await this.getConfigValueAsync('settings.userSettings');\n if (userSettings && GenericHelpers.isFunction(userSettings.storeUserSettings)) {\n return userSettings.storeUserSettings(userSettingsObj, previousUserSettingsObj);\n } else {\n localStorage.setItem(this.USER_SETTINGS_KEY, JSON.stringify(userSettingsObj));\n }\n this.configChanged();\n }\n\n i18n = (): i18nService => {\n if (!this._i18n) {\n this._i18n = new i18nService(this);\n }\n\n return this._i18n;\n };\n\n navigation = (): Navigation => {\n return new Navigation(this);\n };\n\n ux = (): UX => {\n return new UX(this);\n };\n\n featureToggles = (): FeatureToggles => {\n if (!this._featureToggles) {\n this._featureToggles = new FeatureToggles();\n }\n return this._featureToggles as FeatureToggles;\n };\n\n routing = (): Routing => {\n if (!this._routing) {\n this._routing = new Routing(this);\n }\n return this._routing as Routing;\n };\n\n theming = (): Theming => {\n if (!this._theming) {\n this._theming = new Theming(this);\n }\n return this._theming as Theming;\n };\n\n auth = (): LuigiAuthClass => {\n return LuigiAuth;\n };\n\n private luigiAfterInit(): void {\n const shouldHideAppLoadingIndicator: boolean = GenericHelpers.getConfigBooleanValue(\n this.getConfig(),\n 'settings.appLoadingIndicator.hideAutomatically'\n );\n\n if (shouldHideAppLoadingIndicator) {\n // Timeout needed, otherwise loading indicator might not be present yet and when displayed will not be hidden\n setTimeout(() => {\n this.ux().hideAppLoadingIndicator();\n }, 0);\n }\n }\n\n private createConfigStore(): any {\n const luigiStore: LuigiStore = writable({});\n const scopeSubscribers: Record<any, any> = {};\n let unSubscriptions: any[] = [];\n\n return {\n subscribe: (fn: (value: any) => () => {}) => {\n // subscribe fn returns unsubscription fn\n unSubscriptions.push(luigiStore.subscribe(fn));\n },\n reset: (fn: (value: any) => void) => {\n luigiStore.update(fn);\n },\n subscribeToScope: (fn: (value: any) => void, scope: any) => {\n let subscribers = scopeSubscribers[scope];\n\n if (!subscribers) {\n subscribers = new Set();\n scopeSubscribers[scope] = subscribers;\n }\n\n subscribers.add(fn);\n },\n fire: (scope: any, data: any) => {\n const subscribers = scopeSubscribers[scope];\n\n if (subscribers) {\n [...subscribers].forEach((fn) => {\n fn(data);\n });\n }\n },\n clear: () => {\n unSubscriptions.forEach((sub) => {\n sub();\n });\n unSubscriptions = [];\n }\n };\n }\n\n private getConfigReadyCallback(): Promise<void> {\n return new Promise((resolve) => {\n this.i18n()._init();\n resolve();\n });\n }\n\n private setConfigCallback(configReadyCallback: any): void {\n this.configReadyCallback = configReadyCallback;\n }\n}\n","export default false;\n","// Store the references to globals in case someone tries to monkey patch these, causing the below\n// to de-opt (this occurs often when using popular extensions).\nexport var is_array = Array.isArray;\nexport var array_from = Array.from;\nexport var object_keys = Object.keys;\nexport var define_property = Object.defineProperty;\nexport var get_descriptor = Object.getOwnPropertyDescriptor;\nexport var get_descriptors = Object.getOwnPropertyDescriptors;\nexport var object_prototype = Object.prototype;\nexport var array_prototype = Array.prototype;\nexport var get_prototype_of = Object.getPrototypeOf;\n\n/**\n * @param {any} thing\n * @returns {thing is Function}\n */\nexport function is_function(thing) {\n\treturn typeof thing === 'function';\n}\n\nexport const noop = () => {};\n\n// Adapted from https://github.com/then/is-promise/blob/master/index.js\n// Distributed under MIT License https://github.com/then/is-promise/blob/master/LICENSE\n\n/**\n * @template [T=any]\n * @param {any} value\n * @returns {value is PromiseLike<T>}\n */\nexport function is_promise(value) {\n\treturn typeof value?.then === 'function';\n}\n\n/** @param {Function} fn */\nexport function run(fn) {\n\treturn fn();\n}\n\n/** @param {Array<() => void>} arr */\nexport function run_all(arr) {\n\tfor (var i = 0; i < arr.length; i++) {\n\t\tarr[i]();\n\t}\n}\n\n/**\n * @template V\n * @param {V} value\n * @param {V | (() => V)} fallback\n * @param {boolean} [lazy]\n * @returns {V}\n */\nexport function fallback(value, fallback, lazy = false) {\n\treturn value === undefined\n\t\t? lazy\n\t\t\t? /** @type {() => V} */ (fallback)()\n\t\t\t: /** @type {V} */ (fallback)\n\t\t: value;\n}\n","export const DERIVED = 1 << 1;\nexport const EFFECT = 1 << 2;\nexport const RENDER_EFFECT = 1 << 3;\nexport const BLOCK_EFFECT = 1 << 4;\nexport const BRANCH_EFFECT = 1 << 5;\nexport const ROOT_EFFECT = 1 << 6;\nexport const UNOWNED = 1 << 7;\nexport const DISCONNECTED = 1 << 8;\nexport const CLEAN = 1 << 9;\nexport const DIRTY = 1 << 10;\nexport const MAYBE_DIRTY = 1 << 11;\nexport const INERT = 1 << 12;\nexport const DESTROYED = 1 << 13;\nexport const EFFECT_RAN = 1 << 14;\n/** 'Transparent' effects do not create a transition boundary */\nexport const EFFECT_TRANSPARENT = 1 << 15;\n/** Svelte 4 legacy mode props need to be handled with deriveds and be recognized elsewhere, hence the dedicated flag */\nexport const LEGACY_DERIVED_PROP = 1 << 16;\nexport const INSPECT_EFFECT = 1 << 17;\nexport const HEAD_EFFECT = 1 << 18;\nexport const EFFECT_HAS_DERIVED = 1 << 19;\n\nexport const STATE_SYMBOL = Symbol('$state');\nexport const STATE_SYMBOL_METADATA = Symbol('$state metadata');\nexport const LOADING_ATTR_SYMBOL = Symbol('');\n","/** @import { Equals } from '#client' */\n/** @type {Equals} */\nexport function equals(value) {\n\treturn value === this.v;\n}\n\n/**\n * @param {unknown} a\n * @param {unknown} b\n * @returns {boolean}\n */\nexport function safe_not_equal(a, b) {\n\treturn a != a\n\t\t? b == b\n\t\t: a !== b || (a !== null && typeof a === 'object') || typeof a === 'function';\n}\n\n/** @type {Equals} */\nexport function safe_equals(value) {\n\treturn !safe_not_equal(value, this.v);\n}\n","/* This file is generated by scripts/process-messages/index.js. Do not edit! */\n\nimport { DEV } from 'esm-env';\n\n/**\n * Using `bind:value` together with a checkbox input is not allowed. Use `bind:checked` instead\n * @returns {never}\n */\nexport function bind_invalid_checkbox_value() {\n\tif (DEV) {\n\t\tconst error = new Error(`bind_invalid_checkbox_value\\nUsing \\`bind:value\\` together with a checkbox input is not allowed. Use \\`bind:checked\\` instead`);\n\n\t\terror.name = 'Svelte error';\n\t\tthrow error;\n\t} else {\n\t\t// TODO print a link to the documentation\n\t\tthrow new Error(\"bind_invalid_checkbox_value\");\n\t}\n}\n\n/**\n * Component %component% has an export named `%key%` that a consumer component is trying to access using `bind:%key%`, which is disallowed. Instead, use `bind:this` (e.g. `<%name% bind:this={component} />`) and then access the property on the bound component instance (e.g. `component.%key%`)\n * @param {string} component\n * @param {string} key\n * @param {string} name\n * @returns {never}\n */\nexport function bind_invalid_export(component, key, name) {\n\tif (DEV) {\n\t\tconst error = new Error(`bind_invalid_export\\nComponent ${component} has an export named \\`${key}\\` that a consumer component is trying to access using \\`bind:${key}\\`, which is disallowed. Instead, use \\`bind:this\\` (e.g. \\`<${name} bind:this={component} />\\`) and then access the property on the bound component instance (e.g. \\`component.${key}\\`)`);\n\n\t\terror.name = 'Svelte error';\n\t\tthrow error;\n\t} else {\n\t\t// TODO print a link to the documentation\n\t\tthrow new Error(\"bind_invalid_export\");\n\t}\n}\n\n/**\n * A component is attempting to bind to a non-bindable property `%key%` belonging to %component% (i.e. `<%name% bind:%key%={...}>`). To mark a property as bindable: `let { %key% = $bindable() } = $props()`\n * @param {string} key\n * @param {string} component\n * @param {string} name\n * @returns {never}\n */\nexport function bind_not_bindable(key, component, name) {\n\tif (DEV) {\n\t\tconst error = new Error(`bind_not_bindable\\nA component is attempting to bind to a non-bindable property \\`${key}\\` belonging to ${component} (i.e. \\`<${name} bind:${key}={...}>\\`). To mark a property as bindable: \\`let { ${key} = $bindable() } = $props()\\``);\n\n\t\terror.name = 'Svelte error';\n\t\tthrow error;\n\t} else {\n\t\t// TODO print a link to the documentation\n\t\tthrow new Error(\"bind_not_bindable\");\n\t}\n}\n\n/**\n * %parent% called `%method%` on an instance of %component%, which is no longer valid in Svelte 5. See https://svelte-5-preview.vercel.app/docs/breaking-changes#components-are-no-longer-classes for more information\n * @param {string} parent\n * @param {string} method\n * @param {string} component\n * @returns {never}\n */\nexport function component_api_changed(parent, method, component) {\n\tif (DEV) {\n\t\tconst error = new Error(`component_api_changed\\n${parent} called \\`${method}\\` on an instance of ${component}, which is no longer valid in Svelte 5. See https://svelte-5-preview.vercel.app/docs/breaking-changes#components-are-no-longer-classes for more information`);\n\n\t\terror.name = 'Svelte error';\n\t\tthrow error;\n\t} else {\n\t\t// TODO print a link to the documentation\n\t\tthrow new Error(\"component_api_changed\");\n\t}\n}\n\n/**\n * Attempted to instantiate %component% with `new %name%`, which is no longer valid in Svelte 5. If this component is not under your control, set the `compatibility.componentApi` compiler option to `4` to keep it working. See https://svelte-5-preview.vercel.app/docs/breaking-changes#components-are-no-longer-classes for more information\n * @param {string} component\n * @param {string} name\n * @returns {never}\n */\nexport function component_api_invalid_new(component, name) {\n\tif (DEV) {\n\t\tconst error = new Error(`component_api_invalid_new\\nAttempted to instantiate ${component} with \\`new ${name}\\`, which is no longer valid in Svelte 5. If this component is not under your control, set the \\`compatibility.componentApi\\` compiler option to \\`4\\` to keep it working. See https://svelte-5-preview.vercel.app/docs/breaking-changes#components-are-no-longer-classes for more information`);\n\n\t\terror.name = 'Svelte error';\n\t\tthrow error;\n\t} else {\n\t\t// TODO print a link to the documentation\n\t\tthrow new Error(\"component_api_invalid_new\");\n\t}\n}\n\n/**\n * A derived value cannot reference itself recursively\n * @returns {never}\n */\nexport function derived_references_self() {\n\tif (DEV) {\n\t\tconst error = new Error(`derived_references_self\\nA derived value cannot reference itself recursively`);\n\n\t\terror.name = 'Svelte error';\n\t\tthrow error;\n\t} else {\n\t\t// TODO print a link to the documentation\n\t\tthrow new Error(\"derived_references_self\");\n\t}\n}\n\n/**\n * Keyed each block has duplicate key `%value%` at indexes %a% and %b%\n * @param {string} a\n * @param {string} b\n * @param {string | undefined | null} [value]\n * @returns {never}\n */\nexport function each_key_duplicate(a, b, value) {\n\tif (DEV) {\n\t\tconst error = new Error(`each_key_duplicate\\n${value ? `Keyed each block has duplicate key \\`${value}\\` at indexes ${a} and ${b}` : `Keyed each block has duplicate key at indexes ${a} and ${b}`}`);\n\n\t\terror.name = 'Svelte error';\n\t\tthrow error;\n\t} else {\n\t\t// TODO print a link to the documentation\n\t\tthrow new Error(\"each_key_duplicate\");\n\t}\n}\n\n/**\n * `%rune%` cannot be used inside an effect cleanup function\n * @param {string} rune\n * @returns {never}\n */\nexport function effect_in_teardown(rune) {\n\tif (DEV) {\n\t\tconst error = new Error(`effect_in_teardown\\n\\`${rune}\\` cannot be used inside an effect cleanup function`);\n\n\t\terror.name = 'Svelte error';\n\t\tthrow error;\n\t} else {\n\t\t// TODO print a link to the documentation\n\t\tthrow new Error(\"effect_in_teardown\");\n\t}\n}\n\n/**\n * Effect cannot be created inside a `$derived` value that was not itself created inside an effect\n * @returns {never}\n */\nexport function effect_in_unowned_derived() {\n\tif (DEV) {\n\t\tconst error = new Error(`effect_in_unowned_derived\\nEffect cannot be created inside a \\`$derived\\` value that was not itself created inside an effect`);\n\n\t\terror.name = 'Svelte error';\n\t\tthrow error;\n\t} else {\n\t\t// TODO print a link to the documentation\n\t\tthrow new Error(\"effect_in_unowned_derived\");\n\t}\n}\n\n/**\n * `%rune%` can only be used inside an effect (e.g. during component initialisation)\n * @param {string} rune\n * @returns {never}\n */\nexport function effect_orphan(rune) {\n\tif (DEV) {\n\t\tconst error = new Error(`effect_orphan\\n\\`${rune}\\` can only be used inside an effect (e.g. during component initialisation)`);\n\n\t\terror.name = 'Svelte error';\n\t\tthrow error;\n\t} else {\n\t\t// TODO print a link to the documentation\n\t\tthrow new Error(\"effect_orphan\");\n\t}\n}\n\n/**\n * Maximum update depth exceeded. This can happen when a reactive block or effect repeatedly sets a new value. Svelte limits the number of nested updates to prevent infinite loops\n * @returns {never}\n */\nexport function effect_update_depth_exceeded() {\n\tif (DEV) {\n\t\tconst error = new Error(`effect_update_depth_exceeded\\nMaximum update depth exceeded. This can happen when a reactive block or effect repeatedly sets a new value. Svelte limits the number of nested updates to prevent infinite loops`);\n\n\t\terror.name = 'Svelte error';\n\t\tthrow error;\n\t} else {\n\t\t// TODO print a link to the documentation\n\t\tthrow new Error(\"effect_update_depth_exceeded\");\n\t}\n}\n\n/**\n * Failed to hydrate the application\n * @returns {never}\n */\nexport function hydration_failed() {\n\tif (DEV) {\n\t\tconst error = new Error(`hydration_failed\\nFailed to hydrate the application`);\n\n\t\terror.name = 'Svelte error';\n\t\tthrow error;\n\t} else {\n\t\t// TODO print a link to the documentation\n\t\tthrow new Error(\"hydration_failed\");\n\t}\n}\n\n/**\n * Could not `{@render}` snippet due to the expression being `null` or `undefined`. Consider using optional chaining `{@render snippet?.()}`\n * @returns {never}\n */\nexport function invalid_snippet() {\n\tif (DEV) {\n\t\tconst error = new Error(`invalid_snippet\\nCould not \\`{@render}\\` snippet due to the expression being \\`null\\` or \\`undefined\\`. Consider using optional chaining \\`{@render snippet?.()}\\``);\n\n\t\terror.name = 'Svelte error';\n\t\tthrow error;\n\t} else {\n\t\t// TODO print a link to the documentation\n\t\tthrow new Error(\"invalid_snippet\");\n\t}\n}\n\n/**\n * `%name%(...)` cannot be used in runes mode\n * @param {string} name\n * @returns {never}\n */\nexport function lifecycle_legacy_only(name) {\n\tif (DEV) {\n\t\tconst error = new Error(`lifecycle_legacy_only\\n\\`${name}(...)\\` cannot be used in runes mode`);\n\n\t\terror.name = 'Svelte error';\n\t\tthrow error;\n\t} else {\n\t\t// TODO print a link to the documentation\n\t\tthrow new Error(\"lifecycle_legacy_only\");\n\t}\n}\n\n/**\n * Cannot do `bind:%key%={undefined}` when `%key%` has a fallback value\n * @param {string} key\n * @returns {never}\n */\nexport function props_invalid_value(key) {\n\tif (DEV) {\n\t\tconst error = new Error(`props_invalid_value\\nCannot do \\`bind:${key}={undefined}\\` when \\`${key}\\` has a fallback value`);\n\n\t\terror.name = 'Svelte error';\n\t\tthrow error;\n\t} else {\n\t\t// TODO print a link to the documentation\n\t\tthrow new Error(\"props_invalid_value\");\n\t}\n}\n\n/**\n * Rest element properties of `$props()` such as `%property%` are readonly\n * @param {string} property\n * @returns {never}\n */\nexport function props_rest_readonly(property) {\n\tif (DEV) {\n\t\tconst error = new Error(`props_rest_readonly\\nRest element properties of \\`$props()\\` such as \\`${property}\\` are readonly`);\n\n\t\terror.name = 'Svelte error';\n\t\tthrow error;\n\t} else {\n\t\t// TODO print a link to the documentation\n\t\tthrow new Error(\"props_rest_readonly\");\n\t}\n}\n\n/**\n * The `%rune%` rune is only available inside `.svelte` and `.svelte.js/ts` files\n * @param {string} rune\n * @returns {never}\n */\nexport function rune_outside_svelte(rune) {\n\tif (DEV) {\n\t\tconst error = new Error(`rune_outside_svelte\\nThe \\`${rune}\\` rune is only available inside \\`.svelte\\` and \\`.svelte.js/ts\\` files`);\n\n\t\terror.name = 'Svelte error';\n\t\tthrow error;\n\t} else {\n\t\t// TODO print a link to the documentation\n\t\tthrow new Error(\"rune_outside_svelte\");\n\t}\n}\n\n/**\n * Property descriptors defined on `$state` objects must contain `value` and always be `enumerable`, `configurable` and `writable`.\n * @returns {never}\n */\nexport function state_descriptors_fixed() {\n\tif (DEV) {\n\t\tconst error = new Error(`state_descriptors_fixed\\nProperty descriptors defined on \\`$state\\` objects must contain \\`value\\` and always be \\`enumerable\\`, \\`configurable\\` and \\`writable\\`.`);\n\n\t\terror.name = 'Svelte error';\n\t\tthrow error;\n\t} else {\n\t\t// TODO print a link to the documentation\n\t\tthrow new Error(\"state_descriptors_fixed\");\n\t}\n}\n\n/**\n * Cannot set prototype of `$state` object\n * @returns {never}\n */\nexport function state_prototype_fixed() {\n\tif (DEV) {\n\t\tconst error = new Error(`state_prototype_fixed\\nCannot set prototype of \\`$state\\` object`);\n\n\t\terror.name = 'Svelte error';\n\t\tthrow error;\n\t} else {\n\t\t// TODO print a link to the documentation\n\t\tthrow new Error(\"state_prototype_fixed\");\n\t}\n}\n\n/**\n * Reading state that was created inside the same derived is forbidden. Consider using `untrack` to read locally created state\n * @returns {never}\n */\nexport function state_unsafe_local_read() {\n\tif (DEV) {\n\t\tconst error = new Error(`state_unsafe_local_read\\nReading state that was created inside the same derived is forbidden. Consider using \\`untrack\\` to read locally created state`);\n\n\t\terror.name = 'Svelte error';\n\t\tthrow error;\n\t} else {\n\t\t// TODO print a link to the documentation\n\t\tthrow new Error(\"state_unsafe_local_read\");\n\t}\n}\n\n/**\n * Updating state inside a derived or a template expression is forbidden. If the value should not be reactive, declare it without `$state`\n * @returns {never}\n */\nexport function state_unsafe_mutation() {\n\tif (DEV) {\n\t\tconst error = new Error(`state_unsafe_mutation\\nUpdating state inside a derived or a template expression is forbidden. If the value should not be reactive, declare it without \\`$state\\``);\n\n\t\terror.name = 'Svelte error';\n\t\tthrow error;\n\t} else {\n\t\t// TODO print a link to the documentation\n\t\tthrow new Error(\"state_unsafe_mutation\");\n\t}\n}","/** @import { Derived, Effect, Reaction, Source, Value } from '#client' */\nimport { DEV } from 'esm-env';\nimport {\n\tcomponent_context,\n\tactive_reaction,\n\tnew_deps,\n\tactive_effect,\n\tuntracked_writes,\n\tget,\n\tis_runes,\n\tschedule_effect,\n\tset_untracked_writes,\n\tset_signal_status,\n\tuntrack,\n\tincrement_version,\n\tupdate_effect,\n\tderived_sources,\n\tset_derived_sources,\n\tcheck_dirtiness,\n\tset_is_flushing_effect,\n\tis_flushing_effect\n} from '../runtime.js';\nimport { equals, safe_equals } from './equality.js';\nimport {\n\tCLEAN,\n\tDERIVED,\n\tDIRTY,\n\tBRANCH_EFFECT,\n\tINSPECT_EFFECT,\n\tUNOWNED,\n\tMAYBE_DIRTY,\n\tBLOCK_EFFECT\n} from '../constants.js';\nimport * as e from '../errors.js';\n\nexport let inspect_effects = new Set();\n\n/**\n * @param {Set<any>} v\n */\nexport function set_inspect_effects(v) {\n\tinspect_effects = v;\n}\n\n/**\n * @template V\n * @param {V} v\n * @returns {Source<V>}\n */\nexport function source(v) {\n\treturn {\n\t\tf: 0, // TODO ideally we could skip this altogether, but it causes type errors\n\t\tv,\n\t\treactions: null,\n\t\tequals,\n\t\tversion: 0\n\t};\n}\n\n/**\n * @template V\n * @param {V} v\n */\nexport function state(v) {\n\treturn push_derived_source(source(v));\n}\n\n/**\n * @template V\n * @param {V} initial_value\n * @param {boolean} [immutable]\n * @returns {Source<V>}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function mutable_source(initial_value, immutable = false) {\n\tconst s = source(initial_value);\n\tif (!immutable) {\n\t\ts.equals = safe_equals;\n\t}\n\n\t// bind the signal to the component context, in case we need to\n\t// track updates to trigger beforeUpdate/afterUpdate callbacks\n\tif (component_context !== null && component_context.l !== null) {\n\t\t(component_context.l.s ??= []).push(s);\n\t}\n\n\treturn s;\n}\n\n/**\n * @template V\n * @param {V} v\n * @param {boolean} [immutable]\n * @returns {Source<V>}\n */\nexport function mutable_state(v, immutable = false) {\n\treturn push_derived_source(mutable_source(v, immutable));\n}\n\n/**\n * @template V\n * @param {Source<V>} source\n */\n/*#__NO_SIDE_EFFECTS__*/\nfunction push_derived_source(source) {\n\tif (active_reaction !== null && (active_reaction.f & DERIVED) !== 0) {\n\t\tif (derived_sources === null) {\n\t\t\tset_derived_sources([source]);\n\t\t} else {\n\t\t\tderived_sources.push(source);\n\t\t}\n\t}\n\n\treturn source;\n}\n\n/**\n * @template V\n * @param {Value<V>} source\n * @param {V} value\n */\nexport function mutate(source, value) {\n\tset(\n\t\tsource,\n\t\tuntrack(() => get(source))\n\t);\n\treturn value;\n}\n\n/**\n * @template V\n * @param {Source<V>} source\n * @param {V} value\n * @returns {V}\n */\nexport function set(source, value) {\n\tif (\n\t\tactive_reaction !== null &&\n\t\tis_runes() &&\n\t\t(active_reaction.f & (DERIVED | BLOCK_EFFECT)) !== 0 &&\n\t\t// If the source was created locally within the current derived, then\n\t\t// we allow the mutation.\n\t\t(derived_sources === null || !derived_sources.includes(source))\n\t) {\n\t\te.state_unsafe_mutation();\n\t}\n\n\treturn internal_set(source, value);\n}\n\n/**\n * @template V\n * @param {Source<V>} source\n * @param {V} value\n * @returns {V}\n */\nexport function internal_set(source, value) {\n\tif (!source.equals(value)) {\n\t\tsource.v = value;\n\t\tsource.version = increment_version();\n\n\t\tmark_reactions(source, DIRTY);\n\n\t\t// If the current signal is running for the first time, it won't have any\n\t\t// reactions as we only allocate and assign the reactions after the signal\n\t\t// has fully executed. So in the case of ensuring it registers the reaction\n\t\t// properly for itself, we need to ensure the current effect actually gets\n\t\t// scheduled. i.e: `$effect(() => x++)`\n\t\tif (\n\t\t\tis_runes() &&\n\t\t\tactive_effect !== null &&\n\t\t\t(active_effect.f & CLEAN) !== 0 &&\n\t\t\t(active_effect.f & BRANCH_EFFECT) === 0\n\t\t) {\n\t\t\tif (new_deps !== null && new_deps.includes(source)) {\n\t\t\t\tset_signal_status(active_effect, DIRTY);\n\t\t\t\tschedule_effect(active_effect);\n\t\t\t} else {\n\t\t\t\tif (untracked_writes === null) {\n\t\t\t\t\tset_untracked_writes([source]);\n\t\t\t\t} else {\n\t\t\t\t\tuntracked_writes.push(source);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (DEV && inspect_effects.size > 0) {\n\t\t\tconst inspects = Array.from(inspect_effects);\n\t\t\tvar previously_flushing_effect = is_flushing_effect;\n\t\t\tset_is_flushing_effect(true);\n\t\t\ttry {\n\t\t\t\tfor (const effect of inspects) {\n\t\t\t\t\t// Mark clean inspect-effects as maybe dirty and then check their dirtiness\n\t\t\t\t\t// instead of just updating the effects - this way we avoid overfiring.\n\t\t\t\t\tif ((effect.f & CLEAN) !== 0) {\n\t\t\t\t\t\tset_signal_status(effect, MAYBE_DIRTY);\n\t\t\t\t\t}\n\t\t\t\t\tif (check_dirtiness(effect)) {\n\t\t\t\t\t\tupdate_effect(effect);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\tset_is_flushing_effect(previously_flushing_effect);\n\t\t\t}\n\t\t\tinspect_effects.clear();\n\t\t}\n\t}\n\n\treturn value;\n}\n\n/**\n * @param {Value} signal\n * @param {number} status should be DIRTY or MAYBE_DIRTY\n * @returns {void}\n */\nfunction mark_reactions(signal, status) {\n\tvar reactions = signal.reactions;\n\tif (reactions === null) return;\n\n\tvar runes = is_runes();\n\tvar length = reactions.length;\n\n\tfor (var i = 0; i < length; i++) {\n\t\tvar reaction = reactions[i];\n\t\tvar flags = reaction.f;\n\n\t\t// Skip any effects that are already dirty\n\t\tif ((flags & DIRTY) !== 0) continue;\n\n\t\t// In legacy mode, skip the current effect to prevent infinite loops\n\t\tif (!runes && reaction === active_effect) continue;\n\n\t\t// Inspect effects need to run immediately, so that the stack trace makes sense\n\t\tif (DEV && (flags & INSPECT_EFFECT) !== 0) {\n\t\t\tinspect_effects.add(reaction);\n\t\t\tcontinue;\n\t\t}\n\n\t\tset_signal_status(reaction, status);\n\n\t\t// If the signal a) was previously clean or b) is an unowned derived, then mark it\n\t\tif ((flags & (CLEAN | UNOWNED)) !== 0) {\n\t\t\tif ((flags & DERIVED) !== 0) {\n\t\t\t\tmark_reactions(/** @type {Derived} */ (reaction), MAYBE_DIRTY);\n\t\t\t} else {\n\t\t\t\tschedule_effect(/** @type {Effect} */ (reaction));\n\t\t\t}\n\t\t}\n\t}\n}\n","/** @import { TemplateNode } from '#client' */\nimport { hydrate_node, hydrating, set_hydrate_node } from './hydration.js';\nimport { DEV } from 'esm-env';\nimport { init_array_prototype_warnings } from '../dev/equality.js';\nimport { get_descriptor } from '../../shared/utils.js';\n\n// export these for reference in the compiled code, making global name deduplication unnecessary\n/** @type {Window} */\nexport var $window;\n\n/** @type {Document} */\nexport var $document;\n\n/** @type {() => Node | null} */\nvar first_child_getter;\n/** @type {() => Node | null} */\nvar next_sibling_getter;\n\n/**\n * Initialize these lazily to avoid issues when using the runtime in a server context\n * where these globals are not available while avoiding a separate server entry point\n */\nexport function init_operations() {\n\tif ($window !== undefined) {\n\t\treturn;\n\t}\n\n\t$window = window;\n\t$document = document;\n\n\tvar element_prototype = Element.prototype;\n\tvar node_prototype = Node.prototype;\n\n\t// @ts-ignore\n\tfirst_child_getter = get_descriptor(node_prototype, 'firstChild').get;\n\t// @ts-ignore\n\tnext_sibling_getter = get_descriptor(node_prototype, 'nextSibling').get;\n\n\t// the following assignments improve perf of lookups on DOM nodes\n\t// @ts-expect-error\n\telement_prototype.__click = undefined;\n\t// @ts-expect-error\n\telement_prototype.__className = '';\n\t// @ts-expect-error\n\telement_prototype.__attributes = null;\n\t// @ts-expect-error\n\telement_prototype.__styles = null;\n\t// @ts-expect-error\n\telement_prototype.__e = undefined;\n\n\t// @ts-expect-error\n\tText.prototype.__t = undefined;\n\n\tif (DEV) {\n\t\t// @ts-expect-error\n\t\telement_prototype.__svelte_meta = null;\n\n\t\tinit_array_prototype_warnings();\n\t}\n}\n\n/**\n * @param {string} value\n * @returns {Text}\n */\nexport function create_text(value = '') {\n\treturn document.createTextNode(value);\n}\n\n/**\n * @template {Node} N\n * @param {N} node\n * @returns {Node | null}\n */\n/*@__NO_SIDE_EFFECTS__*/\nexport function get_first_child(node) {\n\treturn first_child_getter.call(node);\n}\n\n/**\n * @template {Node} N\n * @param {N} node\n * @returns {Node | null}\n */\n/*@__NO_SIDE_EFFECTS__*/\nexport function get_next_sibling(node) {\n\treturn next_sibling_getter.call(node);\n}\n\n/**\n * Don't mark this as side-effect-free, hydration needs to walk all nodes\n * @template {Node} N\n * @param {N} node\n * @param {boolean} is_text\n * @returns {Node | null}\n */\nexport function child(node, is_text) {\n\tif (!hydrating) {\n\t\treturn get_first_child(node);\n\t}\n\n\tvar child = /** @type {TemplateNode} */ (get_first_child(hydrate_node));\n\n\t// Child can be null if we have an element with a single child, like `<p>{text}</p>`, where `text` is empty\n\tif (child === null) {\n\t\tchild = hydrate_node.appendChild(create_text());\n\t} else if (is_text && child.nodeType !== 3) {\n\t\tvar text = create_text();\n\t\tchild?.before(text);\n\t\tset_hydrate_node(text);\n\t\treturn text;\n\t}\n\n\tset_hydrate_node(child);\n\treturn child;\n}\n\n/**\n * Don't mark this as side-effect-free, hydration needs to walk all nodes\n * @param {DocumentFragment | TemplateNode[]} fragment\n * @param {boolean} is_text\n * @returns {Node | null}\n */\nexport function first_child(fragment, is_text) {\n\tif (!hydrating) {\n\t\t// when not hydrating, `fragment` is a `DocumentFragment` (the result of calling `open_frag`)\n\t\tvar first = /** @type {DocumentFragment} */ (get_first_child(/** @type {Node} */ (fragment)));\n\n\t\t// TODO prevent user comments with the empty string when preserveComments is true\n\t\tif (first instanceof Comment && first.data === '') return get_next_sibling(first);\n\n\t\treturn first;\n\t}\n\n\t// if an {expression} is empty during SSR, there might be no\n\t// text node to hydrate — we must therefore create one\n\tif (is_text && hydrate_node?.nodeType !== 3) {\n\t\tvar text = create_text();\n\n\t\thydrate_node?.before(text);\n\t\tset_hydrate_node(text);\n\t\treturn text;\n\t}\n\n\treturn hydrate_node;\n}\n\n/**\n * Don't mark this as side-effect-free, hydration needs to walk all nodes\n * @param {TemplateNode} node\n * @param {number} count\n * @param {boolean} is_text\n * @returns {Node | null}\n */\nexport function sibling(node, count = 1, is_text = false) {\n\tlet next_sibling = hydrating ? hydrate_node : node;\n\n\twhile (count--) {\n\t\tnext_sibling = /** @type {TemplateNode} */ (get_next_sibling(next_sibling));\n\t}\n\n\tif (!hydrating) {\n\t\treturn next_sibling;\n\t}\n\n\tvar type = next_sibling.nodeType;\n\n\t// if a sibling {expression} is empty during SSR, there might be no\n\t// text node to hydrate — we must therefore create one\n\tif (is_text && type !== 3) {\n\t\tvar text = create_text();\n\t\tnext_sibling?.before(text);\n\t\tset_hydrate_node(text);\n\t\treturn text;\n\t}\n\n\tset_hydrate_node(next_sibling);\n\treturn /** @type {TemplateNode} */ (next_sibling);\n}\n\n/**\n * @template {Node} N\n * @param {N} node\n * @returns {void}\n */\nexport function clear_text_content(node) {\n\tnode.textContent = '';\n}\n","/** @import { Derived, Effect } from '#client' */\nimport { DEV } from 'esm-env';\nimport {\n\tCLEAN,\n\tDERIVED,\n\tDESTROYED,\n\tDIRTY,\n\tEFFECT_HAS_DERIVED,\n\tMAYBE_DIRTY,\n\tUNOWNED\n} from '../constants.js';\nimport {\n\tactive_reaction,\n\tactive_effect,\n\tremove_reactions,\n\tset_signal_status,\n\tskip_reaction,\n\tupdate_reaction,\n\tincrement_version,\n\tset_active_effect,\n\tcomponent_context\n} from '../runtime.js';\nimport { equals, safe_equals } from './equality.js';\nimport * as e from '../errors.js';\nimport { destroy_effect } from './effects.js';\nimport { inspect_effects, set_inspect_effects } from './sources.js';\n\n/**\n * @template V\n * @param {() => V} fn\n * @returns {Derived<V>}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function derived(fn) {\n\tvar flags = DERIVED | DIRTY;\n\n\tif (active_effect === null) {\n\t\tflags |= UNOWNED;\n\t} else {\n\t\t// Since deriveds are evaluated lazily, any effects created inside them are\n\t\t// created too late to ensure that the parent effect is added to the tree\n\t\tactive_effect.f |= EFFECT_HAS_DERIVED;\n\t}\n\n\t/** @type {Derived<V>} */\n\tconst signal = {\n\t\tchildren: null,\n\t\tctx: component_context,\n\t\tdeps: null,\n\t\tequals,\n\t\tf: flags,\n\t\tfn,\n\t\treactions: null,\n\t\tv: /** @type {V} */ (null),\n\t\tversion: 0,\n\t\tparent: active_effect\n\t};\n\n\tif (active_reaction !== null && (active_reaction.f & DERIVED) !== 0) {\n\t\tvar derived = /** @type {Derived} */ (active_reaction);\n\t\t(derived.children ??= []).push(signal);\n\t}\n\n\treturn signal;\n}\n\n/**\n * @template V\n * @param {() => V} fn\n * @returns {Derived<V>}\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function derived_safe_equal(fn) {\n\tconst signal = derived(fn);\n\tsignal.equals = safe_equals;\n\treturn signal;\n}\n\n/**\n * @param {Derived} derived\n * @returns {void}\n */\nfunction destroy_derived_children(derived) {\n\tvar children = derived.children;\n\n\tif (children !== null) {\n\t\tderived.children = null;\n\n\t\tfor (var i = 0; i < children.length; i += 1) {\n\t\t\tvar child = children[i];\n\t\t\tif ((child.f & DERIVED) !== 0) {\n\t\t\t\tdestroy_derived(/** @type {Derived} */ (child));\n\t\t\t} else {\n\t\t\t\tdestroy_effect(/** @type {Effect} */ (child));\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * The currently updating deriveds, used to detect infinite recursion\n * in dev mode and provide a nicer error than 'too much recursion'\n * @type {Derived[]}\n */\nlet stack = [];\n\n/**\n * @template T\n * @param {Derived} derived\n * @returns {T}\n */\nexport function execute_derived(derived) {\n\tvar value;\n\tvar prev_active_effect = active_effect;\n\n\tset_active_effect(derived.parent);\n\n\tif (DEV) {\n\t\tlet prev_inspect_effects = inspect_effects;\n\t\tset_inspect_effects(new Set());\n\t\ttry {\n\t\t\tif (stack.includes(derived)) {\n\t\t\t\te.derived_references_self();\n\t\t\t}\n\n\t\t\tstack.push(derived);\n\n\t\t\tdestroy_derived_children(derived);\n\t\t\tvalue = update_reaction(derived);\n\t\t} finally {\n\t\t\tset_active_effect(prev_active_effect);\n\t\t\tset_inspect_effects(prev_inspect_effects);\n\t\t\tstack.pop();\n\t\t}\n\t} else {\n\t\ttry {\n\t\t\tdestroy_derived_children(derived);\n\t\t\tvalue = update_reaction(derived);\n\t\t} finally {\n\t\t\tset_active_effect(prev_active_effect);\n\t\t}\n\t}\n\n\treturn value;\n}\n\n/**\n * @param {Derived} derived\n * @returns {void}\n */\nexport function update_derived(derived) {\n\tvar value = execute_derived(derived);\n\tvar status =\n\t\t(skip_reaction || (derived.f & UNOWNED) !== 0) && derived.deps !== null ? MAYBE_DIRTY : CLEAN;\n\n\tset_signal_status(derived, status);\n\n\tif (!derived.equals(value)) {\n\t\tderived.v = value;\n\t\tderived.version = increment_version();\n\t}\n}\n\n/**\n * @param {Derived} signal\n * @returns {void}\n */\nexport function destroy_derived(signal) {\n\tdestroy_derived_children(signal);\n\tremove_reactions(signal, 0);\n\tset_signal_status(signal, DESTROYED);\n\n\t// TODO we need to ensure we remove the derived from any parent derives\n\tsignal.v = signal.children = signal.deps = signal.ctx = signal.reactions = null;\n}\n","/** @import { ComponentContext, ComponentContextLegacy, Derived, Effect, Reaction, TemplateNode, TransitionManager } from '#client' */\nimport {\n\tcheck_dirtiness,\n\tcomponent_context,\n\tactive_effect,\n\tactive_reaction,\n\tdev_current_component_function,\n\tupdate_effect,\n\tget,\n\tis_destroying_effect,\n\tis_flushing_effect,\n\tremove_reactions,\n\tschedule_effect,\n\tset_active_reaction,\n\tset_is_destroying_effect,\n\tset_is_flushing_effect,\n\tset_signal_status,\n\tuntrack\n} from '../runtime.js';\nimport {\n\tDIRTY,\n\tBRANCH_EFFECT,\n\tRENDER_EFFECT,\n\tEFFECT,\n\tDESTROYED,\n\tINERT,\n\tEFFECT_RAN,\n\tBLOCK_EFFECT,\n\tROOT_EFFECT,\n\tEFFECT_TRANSPARENT,\n\tDERIVED,\n\tUNOWNED,\n\tCLEAN,\n\tINSPECT_EFFECT,\n\tHEAD_EFFECT,\n\tMAYBE_DIRTY,\n\tEFFECT_HAS_DERIVED\n} from '../constants.js';\nimport { set } from './sources.js';\nimport * as e from '../errors.js';\nimport { DEV } from 'esm-env';\nimport { define_property } from '../../shared/utils.js';\nimport { get_next_sibling } from '../dom/operations.js';\nimport { destroy_derived } from './deriveds.js';\n\n/**\n * @param {'$effect' | '$effect.pre' | '$inspect'} rune\n */\nexport function validate_effect(rune) {\n\tif (active_effect === null && active_reaction === null) {\n\t\te.effect_orphan(rune);\n\t}\n\n\tif (active_reaction !== null && (active_reaction.f & UNOWNED) !== 0) {\n\t\te.effect_in_unowned_derived();\n\t}\n\n\tif (is_destroying_effect) {\n\t\te.effect_in_teardown(rune);\n\t}\n}\n\n/**\n * @param {Effect} effect\n * @param {Effect} parent_effect\n */\nfunction push_effect(effect, parent_effect) {\n\tvar parent_last = parent_effect.last;\n\tif (parent_last === null) {\n\t\tparent_effect.last = parent_effect.first = effect;\n\t} else {\n\t\tparent_last.next = effect;\n\t\teffect.prev = parent_last;\n\t\tparent_effect.last = effect;\n\t}\n}\n\n/**\n * @param {number} type\n * @param {null | (() => void | (() => void))} fn\n * @param {boolean} sync\n * @param {boolean} push\n * @returns {Effect}\n */\nfunction create_effect(type, fn, sync, push = true) {\n\tvar is_root = (type & ROOT_EFFECT) !== 0;\n\tvar parent_effect = active_effect;\n\n\tif (DEV) {\n\t\t// Ensure the parent is never an inspect effect\n\t\twhile (parent_effect !== null && (parent_effect.f & INSPECT_EFFECT) !== 0) {\n\t\t\tparent_effect = parent_effect.parent;\n\t\t}\n\t}\n\n\t/** @type {Effect} */\n\tvar effect = {\n\t\tctx: component_context,\n\t\tdeps: null,\n\t\tderiveds: null,\n\t\tnodes_start: null,\n\t\tnodes_end: null,\n\t\tf: type | DIRTY,\n\t\tfirst: null,\n\t\tfn,\n\t\tlast: null,\n\t\tnext: null,\n\t\tparent: is_root ? null : parent_effect,\n\t\tprev: null,\n\t\tteardown: null,\n\t\ttransitions: null,\n\t\tversion: 0\n\t};\n\n\tif (DEV) {\n\t\teffect.component_function = dev_current_component_function;\n\t}\n\n\tif (sync) {\n\t\tvar previously_flushing_effect = is_flushing_effect;\n\n\t\ttry {\n\t\t\tset_is_flushing_effect(true);\n\t\t\tupdate_effect(effect);\n\t\t\teffect.f |= EFFECT_RAN;\n\t\t} catch (e) {\n\t\t\tdestroy_effect(effect);\n\t\t\tthrow e;\n\t\t} finally {\n\t\t\tset_is_flushing_effect(previously_flushing_effect);\n\t\t}\n\t} else if (fn !== null) {\n\t\tschedule_effect(effect);\n\t}\n\n\t// if an effect has no dependencies, no DOM and no teardown function,\n\t// don't bother adding it to the effect tree\n\tvar inert =\n\t\tsync &&\n\t\teffect.deps === null &&\n\t\teffect.first === null &&\n\t\teffect.nodes_start === null &&\n\t\teffect.teardown === null &&\n\t\t(effect.f & EFFECT_HAS_DERIVED) === 0;\n\n\tif (!inert && !is_root && push) {\n\t\tif (parent_effect !== null) {\n\t\t\tpush_effect(effect, parent_effect);\n\t\t}\n\n\t\t// if we're in a derived, add the effect there too\n\t\tif (active_reaction !== null && (active_reaction.f & DERIVED) !== 0) {\n\t\t\tvar derived = /** @type {Derived} */ (active_reaction);\n\t\t\t(derived.children ??= []).push(effect);\n\t\t}\n\t}\n\n\treturn effect;\n}\n\n/**\n * Internal representation of `$effect.tracking()`\n * @returns {boolean}\n */\nexport function effect_tracking() {\n\tif (active_reaction === null) {\n\t\treturn false;\n\t}\n\n\treturn (active_reaction.f & UNOWNED) === 0;\n}\n\n/**\n * @param {() => void} fn\n */\nexport function teardown(fn) {\n\tconst effect = create_effect(RENDER_EFFECT, null, false);\n\tset_signal_status(effect, CLEAN);\n\teffect.teardown = fn;\n\treturn effect;\n}\n\n/**\n * Internal representation of `$effect(...)`\n * @param {() => void | (() => void)} fn\n */\nexport function user_effect(fn) {\n\tvalidate_effect('$effect');\n\n\t// Non-nested `$effect(...)` in a component should be deferred\n\t// until the component is mounted\n\tvar defer =\n\t\tactive_effect !== null &&\n\t\t(active_effect.f & BRANCH_EFFECT) !== 0 &&\n\t\tcomponent_context !== null &&\n\t\t!component_context.m;\n\n\tif (DEV) {\n\t\tdefine_property(fn, 'name', {\n\t\t\tvalue: '$effect'\n\t\t});\n\t}\n\n\tif (defer) {\n\t\tvar context = /** @type {ComponentContext} */ (component_context);\n\t\t(context.e ??= []).push({\n\t\t\tfn,\n\t\t\teffect: active_effect,\n\t\t\treaction: active_reaction\n\t\t});\n\t} else {\n\t\tvar signal = effect(fn);\n\t\treturn signal;\n\t}\n}\n\n/**\n * Internal representation of `$effect.pre(...)`\n * @param {() => void | (() => void)} fn\n * @returns {Effect}\n */\nexport function user_pre_effect(fn) {\n\tvalidate_effect('$effect.pre');\n\tif (DEV) {\n\t\tdefine_property(fn, 'name', {\n\t\t\tvalue: '$effect.pre'\n\t\t});\n\t}\n\treturn render_effect(fn);\n}\n\n/** @param {() => void | (() => void)} fn */\nexport function inspect_effect(fn) {\n\treturn create_effect(INSPECT_EFFECT, fn, true);\n}\n\n/**\n * Internal representation of `$effect.root(...)`\n * @param {() => void | (() => void)} fn\n * @returns {() => void}\n */\nexport function effect_root(fn) {\n\tconst effect = create_effect(ROOT_EFFECT, fn, true);\n\treturn () => {\n\t\tdestroy_effect(effect);\n\t};\n}\n\n/**\n * @param {() => void | (() => void)} fn\n * @returns {Effect}\n */\nexport function effect(fn) {\n\treturn create_effect(EFFECT, fn, false);\n}\n\n/**\n * Internal representation of `$: ..`\n * @param {() => any} deps\n * @param {() => void | (() => void)} fn\n */\nexport function legacy_pre_effect(deps, fn) {\n\tvar context = /** @type {ComponentContextLegacy} */ (component_context);\n\n\t/** @type {{ effect: null | Effect, ran: boolean }} */\n\tvar token = { effect: null, ran: false };\n\tcontext.l.r1.push(token);\n\n\ttoken.effect = render_effect(() => {\n\t\tdeps();\n\n\t\t// If this legacy pre effect has already run before the end of the reset, then\n\t\t// bail out to emulate the same behavior.\n\t\tif (token.ran) return;\n\n\t\ttoken.ran = true;\n\t\tset(context.l.r2, true);\n\t\tuntrack(fn);\n\t});\n}\n\nexport function legacy_pre_effect_reset() {\n\tvar context = /** @type {ComponentContextLegacy} */ (component_context);\n\n\trender_effect(() => {\n\t\tif (!get(context.l.r2)) return;\n\n\t\t// Run dirty `$:` statements\n\t\tfor (var token of context.l.r1) {\n\t\t\tvar effect = token.effect;\n\n\t\t\t// If the effect is CLEAN, then make it MAYBE_DIRTY. This ensures we traverse through\n\t\t\t// the effects dependencies and correctly ensure each dependency is up-to-date.\n\t\t\tif ((effect.f & CLEAN) !== 0) {\n\t\t\t\tset_signal_status(effect, MAYBE_DIRTY);\n\t\t\t}\n\n\t\t\tif (check_dirtiness(effect)) {\n\t\t\t\tupdate_effect(effect);\n\t\t\t}\n\n\t\t\ttoken.ran = false;\n\t\t}\n\n\t\tcontext.l.r2.v = false; // set directly to avoid rerunning this effect\n\t});\n}\n\n/**\n * @param {() => void | (() => void)} fn\n * @returns {Effect}\n */\nexport function render_effect(fn) {\n\treturn create_effect(RENDER_EFFECT, fn, true);\n}\n\n/**\n * @param {() => void | (() => void)} fn\n * @returns {Effect}\n */\nexport function template_effect(fn) {\n\tif (DEV) {\n\t\tdefine_property(fn, 'name', {\n\t\t\tvalue: '{expression}'\n\t\t});\n\t}\n\treturn block(fn);\n}\n\n/**\n * @param {(() => void)} fn\n * @param {number} flags\n */\nexport function block(fn, flags = 0) {\n\treturn create_effect(RENDER_EFFECT | BLOCK_EFFECT | flags, fn, true);\n}\n\n/**\n * @param {(() => void)} fn\n * @param {boolean} [push]\n */\nexport function branch(fn, push = true) {\n\treturn create_effect(RENDER_EFFECT | BRANCH_EFFECT, fn, true, push);\n}\n\n/**\n * @param {Effect} effect\n */\nexport function execute_effect_teardown(effect) {\n\tvar teardown = effect.teardown;\n\tif (teardown !== null) {\n\t\tconst previously_destroying_effect = is_destroying_effect;\n\t\tconst previous_reaction = active_reaction;\n\t\tset_is_destroying_effect(true);\n\t\tset_active_reaction(null);\n\t\ttry {\n\t\t\tteardown.call(null);\n\t\t} finally {\n\t\t\tset_is_destroying_effect(previously_destroying_effect);\n\t\t\tset_active_reaction(previous_reaction);\n\t\t}\n\t}\n}\n\n/**\n * @param {Effect} signal\n * @returns {void}\n */\nexport function destroy_effect_deriveds(signal) {\n\tvar deriveds = signal.deriveds;\n\n\tif (deriveds !== null) {\n\t\tsignal.deriveds = null;\n\n\t\tfor (var i = 0; i < deriveds.length; i += 1) {\n\t\t\tdestroy_derived(deriveds[i]);\n\t\t}\n\t}\n}\n\n/**\n * @param {Effect} signal\n * @param {boolean} remove_dom\n * @returns {void}\n */\nexport function destroy_effect_children(signal, remove_dom = false) {\n\tvar effect = signal.first;\n\tsignal.first = signal.last = null;\n\n\twhile (effect !== null) {\n\t\tvar next = effect.next;\n\t\tdestroy_effect(effect, remove_dom);\n\t\teffect = next;\n\t}\n}\n\n/**\n * @param {Effect} signal\n * @returns {void}\n */\nexport function destroy_block_effect_children(signal) {\n\tvar effect = signal.first;\n\n\twhile (effect !== null) {\n\t\tvar next = effect.next;\n\t\tif ((effect.f & BRANCH_EFFECT) === 0) {\n\t\t\tdestroy_effect(effect);\n\t\t}\n\t\teffect = next;\n\t}\n}\n\n/**\n * @param {Effect} effect\n * @param {boolean} [remove_dom]\n * @returns {void}\n */\nexport function destroy_effect(effect, remove_dom = true) {\n\tvar removed = false;\n\n\tif ((remove_dom || (effect.f & HEAD_EFFECT) !== 0) && effect.nodes_start !== null) {\n\t\t/** @type {TemplateNode | null} */\n\t\tvar node = effect.nodes_start;\n\t\tvar end = effect.nodes_end;\n\n\t\twhile (node !== null) {\n\t\t\t/** @type {TemplateNode | null} */\n\t\t\tvar next = node === end ? null : /** @type {TemplateNode} */ (get_next_sibling(node));\n\n\t\t\tnode.remove();\n\t\t\tnode = next;\n\t\t}\n\n\t\tremoved = true;\n\t}\n\n\tdestroy_effect_deriveds(effect);\n\tdestroy_effect_children(effect, remove_dom && !removed);\n\tremove_reactions(effect, 0);\n\tset_signal_status(effect, DESTROYED);\n\n\tvar transitions = effect.transitions;\n\n\tif (transitions !== null) {\n\t\tfor (const transition of transitions) {\n\t\t\ttransition.stop();\n\t\t}\n\t}\n\n\texecute_effect_teardown(effect);\n\n\tvar parent = effect.parent;\n\n\t// If the parent doesn't have any children, then skip this work altogether\n\tif (parent !== null && parent.first !== null) {\n\t\tunlink_effect(effect);\n\t}\n\n\tif (DEV) {\n\t\teffect.component_function = null;\n\t}\n\n\t// `first` and `child` are nulled out in destroy_effect_children\n\teffect.next =\n\t\teffect.prev =\n\t\teffect.teardown =\n\t\teffect.ctx =\n\t\teffect.deps =\n\t\teffect.parent =\n\t\teffect.fn =\n\t\teffect.nodes_start =\n\t\teffect.nodes_end =\n\t\t\tnull;\n}\n\n/**\n * Detach an effect from the effect tree, freeing up memory and\n * reducing the amount of work that happens on subsequent traversals\n * @param {Effect} effect\n */\nexport function unlink_effect(effect) {\n\tvar parent = effect.parent;\n\tvar prev = effect.prev;\n\tvar next = effect.next;\n\n\tif (prev !== null) prev.next = next;\n\tif (next !== null) next.prev = prev;\n\n\tif (parent !== null) {\n\t\tif (parent.first === effect) parent.first = next;\n\t\tif (parent.last === effect) parent.last = prev;\n\t}\n}\n\n/**\n * When a block effect is removed, we don't immediately destroy it or yank it\n * out of the DOM, because it might have transitions. Instead, we 'pause' it.\n * It stays around (in memory, and in the DOM) until outro transitions have\n * completed, and if the state change is reversed then we _resume_ it.\n * A paused effect does not update, and the DOM subtree becomes inert.\n * @param {Effect} effect\n * @param {() => void} [callback]\n */\nexport function pause_effect(effect, callback) {\n\t/** @type {TransitionManager[]} */\n\tvar transitions = [];\n\n\tpause_children(effect, transitions, true);\n\n\trun_out_transitions(transitions, () => {\n\t\tdestroy_effect(effect);\n\t\tif (callback) callback();\n\t});\n}\n\n/**\n * @param {TransitionManager[]} transitions\n * @param {() => void} fn\n */\nexport function run_out_transitions(transitions, fn) {\n\tvar remaining = transitions.length;\n\tif (remaining > 0) {\n\t\tvar check = () => --remaining || fn();\n\t\tfor (var transition of transitions) {\n\t\t\ttransition.out(check);\n\t\t}\n\t} else {\n\t\tfn();\n\t}\n}\n\n/**\n * @param {Effect} effect\n * @param {TransitionManager[]} transitions\n * @param {boolean} local\n */\nexport function pause_children(effect, transitions, local) {\n\tif ((effect.f & INERT) !== 0) return;\n\teffect.f ^= INERT;\n\n\tif (effect.transitions !== null) {\n\t\tfor (const transition of effect.transitions) {\n\t\t\tif (transition.is_global || local) {\n\t\t\t\ttransitions.push(transition);\n\t\t\t}\n\t\t}\n\t}\n\n\tvar child = effect.first;\n\n\twhile (child !== null) {\n\t\tvar sibling = child.next;\n\t\tvar transparent = (child.f & EFFECT_TRANSPARENT) !== 0 || (child.f & BRANCH_EFFECT) !== 0;\n\t\t// TODO we don't need to call pause_children recursively with a linked list in place\n\t\t// it's slightly more involved though as we have to account for `transparent` changing\n\t\t// through the tree.\n\t\tpause_children(child, transitions, transparent ? local : false);\n\t\tchild = sibling;\n\t}\n}\n\n/**\n * The opposite of `pause_effect`. We call this if (for example)\n * `x` becomes falsy then truthy: `{#if x}...{/if}`\n * @param {Effect} effect\n */\nexport function resume_effect(effect) {\n\tresume_children(effect, true);\n}\n\n/**\n * @param {Effect} effect\n * @param {boolean} local\n */\nfunction resume_children(effect, local) {\n\tif ((effect.f & INERT) === 0) return;\n\teffect.f ^= INERT;\n\n\t// If a dependency of this effect changed while it was paused,\n\t// apply the change now\n\tif (check_dirtiness(effect)) {\n\t\tupdate_effect(effect);\n\t}\n\n\tvar child = effect.first;\n\n\twhile (child !== null) {\n\t\tvar sibling = child.next;\n\t\tvar transparent = (child.f & EFFECT_TRANSPARENT) !== 0 || (child.f & BRANCH_EFFECT) !== 0;\n\t\t// TODO we don't need to call resume_children recursively with a linked list in place\n\t\t// it's slightly more involved though as we have to account for `transparent` changing\n\t\t// through the tree.\n\t\tresume_children(child, transparent ? local : false);\n\t\tchild = sibling;\n\t}\n\n\tif (effect.transitions !== null) {\n\t\tfor (const transition of effect.transitions) {\n\t\t\tif (transition.is_global || local) {\n\t\t\t\ttransition.in();\n\t\t\t}\n\t\t}\n\t}\n}\n","/** @import { ComponentContext, Derived, Effect, Reaction, Signal, Source, Value } from '#client' */\nimport { DEV } from 'esm-env';\nimport { define_property, get_descriptors, get_prototype_of } from '../shared/utils.js';\nimport {\n\tdestroy_block_effect_children,\n\tdestroy_effect_children,\n\tdestroy_effect_deriveds,\n\teffect,\n\texecute_effect_teardown,\n\tunlink_effect\n} from './reactivity/effects.js';\nimport {\n\tEFFECT,\n\tRENDER_EFFECT,\n\tDIRTY,\n\tMAYBE_DIRTY,\n\tCLEAN,\n\tDERIVED,\n\tUNOWNED,\n\tDESTROYED,\n\tINERT,\n\tBRANCH_EFFECT,\n\tSTATE_SYMBOL,\n\tBLOCK_EFFECT,\n\tROOT_EFFECT,\n\tLEGACY_DERIVED_PROP,\n\tDISCONNECTED\n} from './constants.js';\nimport { flush_tasks } from './dom/task.js';\nimport { add_owner } from './dev/ownership.js';\nimport { mutate, set, source } from './reactivity/sources.js';\nimport { destroy_derived, execute_derived, update_derived } from './reactivity/deriveds.js';\nimport * as e from './errors.js';\nimport { lifecycle_outside_component } from '../shared/errors.js';\nimport { FILENAME } from '../../constants.js';\n\nconst FLUSH_MICROTASK = 0;\nconst FLUSH_SYNC = 1;\n\n// Used for DEV time error handling\n/** @param {WeakSet<Error>} value */\nconst handled_errors = new WeakSet();\n// Used for controlling the flush of effects.\nlet scheduler_mode = FLUSH_MICROTASK;\n// Used for handling scheduling\nlet is_micro_task_queued = false;\n\nexport let is_flushing_effect = false;\nexport let is_destroying_effect = false;\n\n/** @param {boolean} value */\nexport function set_is_flushing_effect(value) {\n\tis_flushing_effect = value;\n}\n\n/** @param {boolean} value */\nexport function set_is_destroying_effect(value) {\n\tis_destroying_effect = value;\n}\n\n// Handle effect queues\n\n/** @type {Effect[]} */\nlet queued_root_effects = [];\n\nlet flush_count = 0;\n/** @type {Effect[]} Stack of effects, dev only */\nlet dev_effect_stack = [];\n// Handle signal reactivity tree dependencies and reactions\n\n/** @type {null | Reaction} */\nexport let active_reaction = null;\n\n/** @param {null | Reaction} reaction */\nexport function set_active_reaction(reaction) {\n\tactive_reaction = reaction;\n}\n\n/** @type {null | Effect} */\nexport let active_effect = null;\n\n/** @param {null | Effect} effect */\nexport function set_active_effect(effect) {\n\tactive_effect = effect;\n}\n\n/**\n * When sources are created within a derived, we record them so that we can safely allow\n * local mutations to these sources without the side-effect error being invoked unnecessarily.\n * @type {null | Source[]}\n */\nexport let derived_sources = null;\n\n/**\n * @param {Source[] | null} sources\n */\nexport function set_derived_sources(sources) {\n\tderived_sources = sources;\n}\n\n/**\n * The dependencies of the reaction that is currently being executed. In many cases,\n * the dependencies are unchanged between runs, and so this will be `null` unless\n * and until a new dependency is accessed — we track this via `skipped_deps`\n * @type {null | Value[]}\n */\nexport let new_deps = null;\n\nlet skipped_deps = 0;\n\n/**\n * Tracks writes that the effect it's executed in doesn't listen to yet,\n * so that the dependency can be added to the effect later on if it then reads it\n * @type {null | Source[]}\n */\nexport let untracked_writes = null;\n\n/** @param {null | Source[]} value */\nexport function set_untracked_writes(value) {\n\tuntracked_writes = value;\n}\n\n/** @type {number} Used by sources and deriveds for handling updates to unowned deriveds */\nlet current_version = 0;\n\n// If we are working with a get() chain that has no active container,\n// to prevent memory leaks, we skip adding the reaction.\nexport let skip_reaction = false;\n// Handle collecting all signals which are read during a specific time frame\nexport let is_signals_recorded = false;\nlet captured_signals = new Set();\n\n// Handling runtime component context\n/** @type {ComponentContext | null} */\nexport let component_context = null;\n\n/** @param {ComponentContext | null} context */\nexport function set_component_context(context) {\n\tcomponent_context = context;\n}\n\n/**\n * The current component function. Different from current component context:\n * ```html\n * <!-- App.svelte -->\n * <Foo>\n * <Bar /> <!-- context == Foo.svelte, function == App.svelte -->\n * </Foo>\n * ```\n * @type {ComponentContext['function']}\n */\nexport let dev_current_component_function = null;\n\n/** @param {ComponentContext['function']} fn */\nexport function set_dev_current_component_function(fn) {\n\tdev_current_component_function = fn;\n}\n\nexport function increment_version() {\n\treturn ++current_version;\n}\n\n/** @returns {boolean} */\nexport function is_runes() {\n\treturn component_context !== null && component_context.l === null;\n}\n\n/**\n * Determines whether a derived or effect is dirty.\n * If it is MAYBE_DIRTY, will set the status to CLEAN\n * @param {Reaction} reaction\n * @returns {boolean}\n */\nexport function check_dirtiness(reaction) {\n\tvar flags = reaction.f;\n\n\tif ((flags & DIRTY) !== 0) {\n\t\treturn true;\n\t}\n\n\tif ((flags & MAYBE_DIRTY) !== 0) {\n\t\tvar dependencies = reaction.deps;\n\t\tvar is_unowned = (flags & UNOWNED) !== 0;\n\n\t\tif (dependencies !== null) {\n\t\t\tvar i;\n\n\t\t\tif ((flags & DISCONNECTED) !== 0) {\n\t\t\t\tfor (i = 0; i < dependencies.length; i++) {\n\t\t\t\t\t(dependencies[i].reactions ??= []).push(reaction);\n\t\t\t\t}\n\n\t\t\t\treaction.f ^= DISCONNECTED;\n\t\t\t}\n\n\t\t\tfor (i = 0; i < dependencies.length; i++) {\n\t\t\t\tvar dependency = dependencies[i];\n\n\t\t\t\tif (check_dirtiness(/** @type {Derived} */ (dependency))) {\n\t\t\t\t\tupdate_derived(/** @type {Derived} */ (dependency));\n\t\t\t\t}\n\n\t\t\t\t// If we are working with an unowned signal as part of an effect (due to !skip_reaction)\n\t\t\t\t// and the version hasn't changed, we still need to check that this reaction\n\t\t\t\t// is linked to the dependency source – otherwise future updates will not be caught.\n\t\t\t\tif (\n\t\t\t\t\tis_unowned &&\n\t\t\t\t\tactive_effect !== null &&\n\t\t\t\t\t!skip_reaction &&\n\t\t\t\t\t!dependency?.reactions?.includes(reaction)\n\t\t\t\t) {\n\t\t\t\t\t(dependency.reactions ??= []).push(reaction);\n\t\t\t\t}\n\n\t\t\t\tif (dependency.version > reaction.version) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Unowned signals should never be marked as clean.\n\t\tif (!is_unowned) {\n\t\t\tset_signal_status(reaction, CLEAN);\n\t\t}\n\t}\n\n\treturn false;\n}\n\n/**\n * @param {Error} error\n * @param {Effect} effect\n * @param {ComponentContext | null} component_context\n */\nfunction handle_error(error, effect, component_context) {\n\t// Given we don't yet have error boundaries, we will just always throw.\n\tif (!DEV || handled_errors.has(error) || component_context === null) {\n\t\tthrow error;\n\t}\n\n\tconst component_stack = [];\n\n\tconst effect_name = effect.fn?.name;\n\n\tif (effect_name) {\n\t\tcomponent_stack.push(effect_name);\n\t}\n\n\t/** @type {ComponentContext | null} */\n\tlet current_context = component_context;\n\n\twhile (current_context !== null) {\n\t\tif (DEV) {\n\t\t\t/** @type {string} */\n\t\t\tvar filename = current_context.function?.[FILENAME];\n\n\t\t\tif (filename) {\n\t\t\t\tconst file = filename.split('/').pop();\n\t\t\t\tcomponent_stack.push(file);\n\t\t\t}\n\t\t}\n\n\t\tcurrent_context = current_context.p;\n\t}\n\n\tconst indent = /Firefox/.test(navigator.userAgent) ? ' ' : '\\t';\n\tdefine_property(error, 'message', {\n\t\tvalue: error.message + `\\n${component_stack.map((name) => `\\n${indent}in ${name}`).join('')}\\n`\n\t});\n\n\tconst stack = error.stack;\n\n\t// Filter out internal files from callstack\n\tif (stack) {\n\t\tconst lines = stack.split('\\n');\n\t\tconst new_lines = [];\n\t\tfor (let i = 0; i < lines.length; i++) {\n\t\t\tconst line = lines[i];\n\t\t\tif (line.includes('svelte/src/internal')) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tnew_lines.push(line);\n\t\t}\n\t\tdefine_property(error, 'stack', {\n\t\t\tvalue: error.stack + new_lines.join('\\n')\n\t\t});\n\t}\n\n\thandled_errors.add(error);\n\tthrow error;\n}\n\n/**\n * @template V\n * @param {Reaction} reaction\n * @returns {V}\n */\nexport function update_reaction(reaction) {\n\tvar previous_deps = new_deps;\n\tvar previous_skipped_deps = skipped_deps;\n\tvar previous_untracked_writes = untracked_writes;\n\tvar previous_reaction = active_reaction;\n\tvar previous_skip_reaction = skip_reaction;\n\tvar prev_derived_sources = derived_sources;\n\tvar previous_component_context = component_context;\n\tvar flags = reaction.f;\n\n\tnew_deps = /** @type {null | Value[]} */ (null);\n\tskipped_deps = 0;\n\tuntracked_writes = null;\n\tactive_reaction = (flags & (BRANCH_EFFECT | ROOT_EFFECT)) === 0 ? reaction : null;\n\tskip_reaction = !is_flushing_effect && (flags & UNOWNED) !== 0;\n\tderived_sources = null;\n\tcomponent_context = reaction.ctx;\n\n\ttry {\n\t\tvar result = /** @type {Function} */ (0, reaction.fn)();\n\t\tvar deps = reaction.deps;\n\n\t\tif (new_deps !== null) {\n\t\t\tvar i;\n\n\t\t\tremove_reactions(reaction, skipped_deps);\n\n\t\t\tif (deps !== null && skipped_deps > 0) {\n\t\t\t\tdeps.length = skipped_deps + new_deps.length;\n\t\t\t\tfor (i = 0; i < new_deps.length; i++) {\n\t\t\t\t\tdeps[skipped_deps + i] = new_deps[i];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treaction.deps = deps = new_deps;\n\t\t\t}\n\n\t\t\tif (!skip_reaction) {\n\t\t\t\tfor (i = skipped_deps; i < deps.length; i++) {\n\t\t\t\t\t(deps[i].reactions ??= []).push(reaction);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (deps !== null && skipped_deps < deps.length) {\n\t\t\tremove_reactions(reaction, skipped_deps);\n\t\t\tdeps.length = skipped_deps;\n\t\t}\n\n\t\treturn result;\n\t} finally {\n\t\tnew_deps = previous_deps;\n\t\tskipped_deps = previous_skipped_deps;\n\t\tuntracked_writes = previous_untracked_writes;\n\t\tactive_reaction = previous_reaction;\n\t\tskip_reaction = previous_skip_reaction;\n\t\tderived_sources = prev_derived_sources;\n\t\tcomponent_context = previous_component_context;\n\t}\n}\n\n/**\n * @template V\n * @param {Reaction} signal\n * @param {Value<V>} dependency\n * @returns {void}\n */\nfunction remove_reaction(signal, dependency) {\n\tlet reactions = dependency.reactions;\n\tif (reactions !== null) {\n\t\tvar index = reactions.indexOf(signal);\n\t\tif (index !== -1) {\n\t\t\tvar new_length = reactions.length - 1;\n\t\t\tif (new_length === 0) {\n\t\t\t\treactions = dependency.reactions = null;\n\t\t\t} else {\n\t\t\t\t// Swap with last element and then remove.\n\t\t\t\treactions[index] = reactions[new_length];\n\t\t\t\treactions.pop();\n\t\t\t}\n\t\t}\n\t}\n\t// If the derived has no reactions, then we can disconnect it from the graph,\n\t// allowing it to either reconnect in the future, or be GC'd by the VM.\n\tif (\n\t\treactions === null &&\n\t\t(dependency.f & DERIVED) !== 0 &&\n\t\t// Destroying a child effect while updating a parent effect can cause a dependency to appear\n\t\t// to be unused, when in fact it is used by the currently-updating parent. Checking `new_deps`\n\t\t// allows us to skip the expensive work of disconnecting and immediately reconnecting it\n\t\t(new_deps === null || !new_deps.includes(dependency))\n\t) {\n\t\tset_signal_status(dependency, MAYBE_DIRTY);\n\t\t// If we are working with a derived that is owned by an effect, then mark it as being\n\t\t// disconnected.\n\t\tif ((dependency.f & (UNOWNED | DISCONNECTED)) === 0) {\n\t\t\tdependency.f ^= DISCONNECTED;\n\t\t}\n\t\tremove_reactions(/** @type {Derived} **/ (dependency), 0);\n\t}\n}\n\n/**\n * @param {Reaction} signal\n * @param {number} start_index\n * @returns {void}\n */\nexport function remove_reactions(signal, start_index) {\n\tvar dependencies = signal.deps;\n\tif (dependencies === null) return;\n\n\tfor (var i = start_index; i < dependencies.length; i++) {\n\t\tremove_reaction(signal, dependencies[i]);\n\t}\n}\n\n/**\n * @param {Effect} effect\n * @returns {void}\n */\nexport function update_effect(effect) {\n\tvar flags = effect.f;\n\n\tif ((flags & DESTROYED) !== 0) {\n\t\treturn;\n\t}\n\n\tset_signal_status(effect, CLEAN);\n\n\tvar previous_effect = active_effect;\n\tvar previous_component_context = component_context;\n\n\tactive_effect = effect;\n\n\tif (DEV) {\n\t\tvar previous_component_fn = dev_current_component_function;\n\t\tdev_current_component_function = effect.component_function;\n\t}\n\n\ttry {\n\t\tdestroy_effect_deriveds(effect);\n\t\tif ((flags & BLOCK_EFFECT) !== 0) {\n\t\t\tdestroy_block_effect_children(effect);\n\t\t} else {\n\t\t\tdestroy_effect_children(effect);\n\t\t}\n\n\t\texecute_effect_teardown(effect);\n\t\tvar teardown = update_reaction(effect);\n\t\teffect.teardown = typeof teardown === 'function' ? teardown : null;\n\t\teffect.version = current_version;\n\n\t\tif (DEV) {\n\t\t\tdev_effect_stack.push(effect);\n\t\t}\n\t} catch (error) {\n\t\thandle_error(/** @type {Error} */ (error), effect, previous_component_context);\n\t} finally {\n\t\tactive_effect = previous_effect;\n\n\t\tif (DEV) {\n\t\t\tdev_current_component_function = previous_component_fn;\n\t\t}\n\t}\n}\n\nfunction infinite_loop_guard() {\n\tif (flush_count > 1000) {\n\t\tflush_count = 0;\n\t\tif (DEV) {\n\t\t\ttry {\n\t\t\t\te.effect_update_depth_exceeded();\n\t\t\t} catch (error) {\n\t\t\t\t// stack is garbage, ignore. Instead add a console.error message.\n\t\t\t\tdefine_property(error, 'stack', {\n\t\t\t\t\tvalue: ''\n\t\t\t\t});\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.error(\n\t\t\t\t\t'Last ten effects were: ',\n\t\t\t\t\tdev_effect_stack.slice(-10).map((d) => d.fn)\n\t\t\t\t);\n\t\t\t\tdev_effect_stack = [];\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t} else {\n\t\t\te.effect_update_depth_exceeded();\n\t\t}\n\t}\n\tflush_count++;\n}\n\n/**\n * @param {Array<Effect>} root_effects\n * @returns {void}\n */\nfunction flush_queued_root_effects(root_effects) {\n\tvar length = root_effects.length;\n\tif (length === 0) {\n\t\treturn;\n\t}\n\tinfinite_loop_guard();\n\n\tvar previously_flushing_effect = is_flushing_effect;\n\tis_flushing_effect = true;\n\n\ttry {\n\t\tfor (var i = 0; i < length; i++) {\n\t\t\tvar effect = root_effects[i];\n\n\t\t\tif ((effect.f & CLEAN) === 0) {\n\t\t\t\teffect.f ^= CLEAN;\n\t\t\t}\n\n\t\t\t/** @type {Effect[]} */\n\t\t\tvar collected_effects = [];\n\n\t\t\tprocess_effects(effect, collected_effects);\n\t\t\tflush_queued_effects(collected_effects);\n\t\t}\n\t} finally {\n\t\tis_flushing_effect = previously_flushing_effect;\n\t}\n}\n\n/**\n * @param {Array<Effect>} effects\n * @returns {void}\n */\nfunction flush_queued_effects(effects) {\n\tvar length = effects.length;\n\tif (length === 0) return;\n\n\tfor (var i = 0; i < length; i++) {\n\t\tvar effect = effects[i];\n\n\t\tif ((effect.f & (DESTROYED | INERT)) === 0 && check_dirtiness(effect)) {\n\t\t\tupdate_effect(effect);\n\n\t\t\t// Effects with no dependencies or teardown do not get added to the effect tree.\n\t\t\t// Deferred effects (e.g. `$effect(...)`) _are_ added to the tree because we\n\t\t\t// don't know if we need to keep them until they are executed. Doing the check\n\t\t\t// here (rather than in `update_effect`) allows us to skip the work for\n\t\t\t// immediate effects.\n\t\t\tif (effect.deps === null && effect.first === null && effect.nodes_start === null) {\n\t\t\t\tif (effect.teardown === null) {\n\t\t\t\t\t// remove this effect from the graph\n\t\t\t\t\tunlink_effect(effect);\n\t\t\t\t} else {\n\t\t\t\t\t// keep the effect in the graph, but free up some memory\n\t\t\t\t\teffect.fn = null;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction process_deferred() {\n\tis_micro_task_queued = false;\n\tif (flush_count > 1001) {\n\t\treturn;\n\t}\n\tconst previous_queued_root_effects = queued_root_effects;\n\tqueued_root_effects = [];\n\tflush_queued_root_effects(previous_queued_root_effects);\n\tif (!is_micro_task_queued) {\n\t\tflush_count = 0;\n\t\tif (DEV) {\n\t\t\tdev_effect_stack = [];\n\t\t}\n\t}\n}\n\n/**\n * @param {Effect} signal\n * @returns {void}\n */\nexport function schedule_effect(signal) {\n\tif (scheduler_mode === FLUSH_MICROTASK) {\n\t\tif (!is_micro_task_queued) {\n\t\t\tis_micro_task_queued = true;\n\t\t\tqueueMicrotask(process_deferred);\n\t\t}\n\t}\n\n\tvar effect = signal;\n\n\twhile (effect.parent !== null) {\n\t\teffect = effect.parent;\n\t\tvar flags = effect.f;\n\n\t\tif ((flags & (ROOT_EFFECT | BRANCH_EFFECT)) !== 0) {\n\t\t\tif ((flags & CLEAN) === 0) return;\n\t\t\teffect.f ^= CLEAN;\n\t\t}\n\t}\n\n\tqueued_root_effects.push(effect);\n}\n\n/**\n *\n * This function both runs render effects and collects user effects in topological order\n * from the starting effect passed in. Effects will be collected when they match the filtered\n * bitwise flag passed in only. The collected effects array will be populated with all the user\n * effects to be flushed.\n *\n * @param {Effect} effect\n * @param {Effect[]} collected_effects\n * @returns {void}\n */\nfunction process_effects(effect, collected_effects) {\n\tvar current_effect = effect.first;\n\tvar effects = [];\n\n\tmain_loop: while (current_effect !== null) {\n\t\tvar flags = current_effect.f;\n\t\tvar is_branch = (flags & BRANCH_EFFECT) !== 0;\n\t\tvar is_skippable_branch = is_branch && (flags & CLEAN) !== 0;\n\n\t\tif (!is_skippable_branch && (flags & INERT) === 0) {\n\t\t\tif ((flags & RENDER_EFFECT) !== 0) {\n\t\t\t\tif (is_branch) {\n\t\t\t\t\tcurrent_effect.f ^= CLEAN;\n\t\t\t\t} else if (check_dirtiness(current_effect)) {\n\t\t\t\t\tupdate_effect(current_effect);\n\t\t\t\t}\n\n\t\t\t\tvar child = current_effect.first;\n\n\t\t\t\tif (child !== null) {\n\t\t\t\t\tcurrent_effect = child;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t} else if ((flags & EFFECT) !== 0) {\n\t\t\t\teffects.push(current_effect);\n\t\t\t}\n\t\t}\n\n\t\tvar sibling = current_effect.next;\n\n\t\tif (sibling === null) {\n\t\t\tlet parent = current_effect.parent;\n\n\t\t\twhile (parent !== null) {\n\t\t\t\tif (effect === parent) {\n\t\t\t\t\tbreak main_loop;\n\t\t\t\t}\n\t\t\t\tvar parent_sibling = parent.next;\n\t\t\t\tif (parent_sibling !== null) {\n\t\t\t\t\tcurrent_effect = parent_sibling;\n\t\t\t\t\tcontinue main_loop;\n\t\t\t\t}\n\t\t\t\tparent = parent.parent;\n\t\t\t}\n\t\t}\n\n\t\tcurrent_effect = sibling;\n\t}\n\n\t// We might be dealing with many effects here, far more than can be spread into\n\t// an array push call (callstack overflow). So let's deal with each effect in a loop.\n\tfor (var i = 0; i < effects.length; i++) {\n\t\tchild = effects[i];\n\t\tcollected_effects.push(child);\n\t\tprocess_effects(child, collected_effects);\n\t}\n}\n\n/**\n * Internal version of `flushSync` with the option to not flush previous effects.\n * Returns the result of the passed function, if given.\n * @param {() => any} [fn]\n * @returns {any}\n */\nexport function flush_sync(fn) {\n\tvar previous_scheduler_mode = scheduler_mode;\n\tvar previous_queued_root_effects = queued_root_effects;\n\n\ttry {\n\t\tinfinite_loop_guard();\n\n\t\t/** @type {Effect[]} */\n\t\tconst root_effects = [];\n\n\t\tscheduler_mode = FLUSH_SYNC;\n\t\tqueued_root_effects = root_effects;\n\t\tis_micro_task_queued = false;\n\n\t\tflush_queued_root_effects(previous_queued_root_effects);\n\n\t\tvar result = fn?.();\n\n\t\tflush_tasks();\n\t\tif (queued_root_effects.length > 0 || root_effects.length > 0) {\n\t\t\tflush_sync();\n\t\t}\n\n\t\tflush_count = 0;\n\t\tif (DEV) {\n\t\t\tdev_effect_stack = [];\n\t\t}\n\n\t\treturn result;\n\t} finally {\n\t\tscheduler_mode = previous_scheduler_mode;\n\t\tqueued_root_effects = previous_queued_root_effects;\n\t}\n}\n\n/**\n * Returns a promise that resolves once any pending state changes have been applied.\n * @returns {Promise<void>}\n */\nexport async function tick() {\n\tawait Promise.resolve();\n\t// By calling flush_sync we guarantee that any pending state changes are applied after one tick.\n\t// TODO look into whether we can make flushing subsequent updates synchronously in the future.\n\tflush_sync();\n}\n\n/**\n * @template V\n * @param {Value<V>} signal\n * @returns {V}\n */\nexport function get(signal) {\n\tvar flags = signal.f;\n\tvar is_derived = (flags & DERIVED) !== 0;\n\n\t// If the derived is destroyed, just execute it again without retaining\n\t// its memoisation properties as the derived is stale\n\tif (is_derived && (flags & DESTROYED) !== 0) {\n\t\tvar value = execute_derived(/** @type {Derived} */ (signal));\n\t\t// Ensure the derived remains destroyed\n\t\tdestroy_derived(/** @type {Derived} */ (signal));\n\t\treturn value;\n\t}\n\n\tif (is_signals_recorded) {\n\t\tcaptured_signals.add(signal);\n\t}\n\n\t// Register the dependency on the current reaction signal.\n\tif (active_reaction !== null) {\n\t\tif (derived_sources !== null && derived_sources.includes(signal)) {\n\t\t\te.state_unsafe_local_read();\n\t\t}\n\t\tvar deps = active_reaction.deps;\n\n\t\t// If the signal is accessing the same dependencies in the same\n\t\t// order as it did last time, increment `skipped_deps`\n\t\t// rather than updating `new_deps`, which creates GC cost\n\t\tif (new_deps === null && deps !== null && deps[skipped_deps] === signal) {\n\t\t\tskipped_deps++;\n\t\t} else if (new_deps === null) {\n\t\t\tnew_deps = [signal];\n\t\t} else {\n\t\t\tnew_deps.push(signal);\n\t\t}\n\n\t\tif (\n\t\t\tuntracked_writes !== null &&\n\t\t\tactive_effect !== null &&\n\t\t\t(active_effect.f & CLEAN) !== 0 &&\n\t\t\t(active_effect.f & BRANCH_EFFECT) === 0 &&\n\t\t\tuntracked_writes.includes(signal)\n\t\t) {\n\t\t\tset_signal_status(active_effect, DIRTY);\n\t\t\tschedule_effect(active_effect);\n\t\t}\n\t} else if (is_derived && /** @type {Derived} */ (signal).deps === null) {\n\t\tvar derived = /** @type {Derived} */ (signal);\n\t\tvar parent = derived.parent;\n\n\t\tif (parent !== null && !parent.deriveds?.includes(derived)) {\n\t\t\t(parent.deriveds ??= []).push(derived);\n\t\t}\n\t}\n\n\tif (is_derived) {\n\t\tderived = /** @type {Derived} */ (signal);\n\n\t\tif (check_dirtiness(derived)) {\n\t\t\tupdate_derived(derived);\n\t\t}\n\t}\n\n\treturn signal.v;\n}\n\n/**\n * Like `get`, but checks for `undefined`. Used for `var` declarations because they can be accessed before being declared\n * @template V\n * @param {Value<V> | undefined} signal\n * @returns {V | undefined}\n */\nexport function safe_get(signal) {\n\treturn signal && get(signal);\n}\n\n/**\n * Invokes a function and captures all signals that are read during the invocation,\n * then invalidates them.\n * @param {() => any} fn\n */\nexport function invalidate_inner_signals(fn) {\n\tvar previous_is_signals_recorded = is_signals_recorded;\n\tvar previous_captured_signals = captured_signals;\n\tis_signals_recorded = true;\n\tcaptured_signals = new Set();\n\tvar captured = captured_signals;\n\tvar signal;\n\ttry {\n\t\tuntrack(fn);\n\t} finally {\n\t\tis_signals_recorded = previous_is_signals_recorded;\n\t\tif (is_signals_recorded) {\n\t\t\tfor (signal of captured_signals) {\n\t\t\t\tprevious_captured_signals.add(signal);\n\t\t\t}\n\t\t}\n\t\tcaptured_signals = previous_captured_signals;\n\t}\n\tfor (signal of captured) {\n\t\t// Go one level up because derived signals created as part of props in legacy mode\n\t\tif ((signal.f & LEGACY_DERIVED_PROP) !== 0) {\n\t\t\tfor (const dep of /** @type {Derived} */ (signal).deps || []) {\n\t\t\t\tif ((dep.f & DERIVED) === 0) {\n\t\t\t\t\tmutate(dep, null /* doesnt matter */);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tmutate(signal, null /* doesnt matter */);\n\t\t}\n\t}\n}\n\n/**\n * Use `untrack` to prevent something from being treated as an `$effect`/`$derived` dependency.\n *\n * https://svelte-5-preview.vercel.app/docs/functions#untrack\n * @template T\n * @param {() => T} fn\n * @returns {T}\n */\nexport function untrack(fn) {\n\tconst previous_reaction = active_reaction;\n\ttry {\n\t\tactive_reaction = null;\n\t\treturn fn();\n\t} finally {\n\t\tactive_reaction = previous_reaction;\n\t}\n}\n\nconst STATUS_MASK = ~(DIRTY | MAYBE_DIRTY | CLEAN);\n\n/**\n * @param {Signal} signal\n * @param {number} status\n * @returns {void}\n */\nexport function set_signal_status(signal, status) {\n\tsignal.f = (signal.f & STATUS_MASK) | status;\n}\n\n/**\n * Retrieves the context that belongs to the closest parent component with the specified `key`.\n * Must be called during component initialisation.\n *\n * @template T\n * @param {any} key\n * @returns {T}\n */\nexport function getContext(key) {\n\tconst context_map = get_or_init_context_map('getContext');\n\tconst result = /** @type {T} */ (context_map.get(key));\n\n\tif (DEV) {\n\t\tconst fn = /** @type {ComponentContext} */ (component_context).function;\n\t\tif (fn) {\n\t\t\tadd_owner(result, fn, true);\n\t\t}\n\t}\n\n\treturn result;\n}\n\n/**\n * Associates an arbitrary `context` object with the current component and the specified `key`\n * and returns that object. The context is then available to children of the component\n * (including slotted content) with `getContext`.\n *\n * Like lifecycle functions, this must be called during component initialisation.\n *\n * @template T\n * @param {any} key\n * @param {T} context\n * @returns {T}\n */\nexport function setContext(key, context) {\n\tconst context_map = get_or_init_context_map('setContext');\n\tcontext_map.set(key, context);\n\treturn context;\n}\n\n/**\n * Checks whether a given `key` has been set in the context of a parent component.\n * Must be called during component initialisation.\n *\n * @param {any} key\n * @returns {boolean}\n */\nexport function hasContext(key) {\n\tconst context_map = get_or_init_context_map('hasContext');\n\treturn context_map.has(key);\n}\n\n/**\n * Retrieves the whole context map that belongs to the closest parent component.\n * Must be called during component initialisation. Useful, for example, if you\n * programmatically create a component and want to pass the existing context to it.\n *\n * @template {Map<any, any>} [T=Map<any, any>]\n * @returns {T}\n */\nexport function getAllContexts() {\n\tconst context_map = get_or_init_context_map('getAllContexts');\n\n\tif (DEV) {\n\t\tconst fn = component_context?.function;\n\t\tif (fn) {\n\t\t\tfor (const value of context_map.values()) {\n\t\t\t\tadd_owner(value, fn, true);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn /** @type {T} */ (context_map);\n}\n\n/**\n * @param {string} name\n * @returns {Map<unknown, unknown>}\n */\nfunction get_or_init_context_map(name) {\n\tif (component_context === null) {\n\t\tlifecycle_outside_component(name);\n\t}\n\n\treturn (component_context.c ??= new Map(get_parent_context(component_context) || undefined));\n}\n\n/**\n * @param {ComponentContext} component_context\n * @returns {Map<unknown, unknown> | null}\n */\nfunction get_parent_context(component_context) {\n\tlet parent = component_context.p;\n\twhile (parent !== null) {\n\t\tconst context_map = parent.c;\n\t\tif (context_map !== null) {\n\t\t\treturn context_map;\n\t\t}\n\t\tparent = parent.p;\n\t}\n\treturn null;\n}\n\n/**\n * @param {Value<number>} signal\n * @param {1 | -1} [d]\n * @returns {number}\n */\nexport function update(signal, d = 1) {\n\tvar value = +get(signal);\n\tset(signal, value + d);\n\treturn value;\n}\n\n/**\n * @param {Value<number>} signal\n * @param {1 | -1} [d]\n * @returns {number}\n */\nexport function update_pre(signal, d = 1) {\n\treturn set(signal, +get(signal) + d);\n}\n\n/**\n * @param {Record<string, unknown>} obj\n * @param {string[]} keys\n * @returns {Record<string, unknown>}\n */\nexport function exclude_from_object(obj, keys) {\n\t/** @type {Record<string, unknown>} */\n\tvar result = {};\n\n\tfor (var key in obj) {\n\t\tif (!keys.includes(key)) {\n\t\t\tresult[key] = obj[key];\n\t\t}\n\t}\n\n\treturn result;\n}\n\n/**\n * @param {Record<string, unknown>} props\n * @param {any} runes\n * @param {Function} [fn]\n * @returns {void}\n */\nexport function push(props, runes = false, fn) {\n\tcomponent_context = {\n\t\tp: component_context,\n\t\tc: null,\n\t\te: null,\n\t\tm: false,\n\t\ts: props,\n\t\tx: null,\n\t\tl: null\n\t};\n\n\tif (!runes) {\n\t\tcomponent_context.l = {\n\t\t\ts: null,\n\t\t\tu: null,\n\t\t\tr1: [],\n\t\t\tr2: source(false)\n\t\t};\n\t}\n\n\tif (DEV) {\n\t\t// component function\n\t\tcomponent_context.function = fn;\n\t\tdev_current_component_function = fn;\n\t}\n}\n\n/**\n * @template {Record<string, any>} T\n * @param {T} [component]\n * @returns {T}\n */\nexport function pop(component) {\n\tconst context_stack_item = component_context;\n\tif (context_stack_item !== null) {\n\t\tif (component !== undefined) {\n\t\t\tcontext_stack_item.x = component;\n\t\t}\n\t\tconst component_effects = context_stack_item.e;\n\t\tif (component_effects !== null) {\n\t\t\tvar previous_effect = active_effect;\n\t\t\tvar previous_reaction = active_reaction;\n\t\t\tcontext_stack_item.e = null;\n\t\t\ttry {\n\t\t\t\tfor (var i = 0; i < component_effects.length; i++) {\n\t\t\t\t\tvar component_effect = component_effects[i];\n\t\t\t\t\tset_active_effect(component_effect.effect);\n\t\t\t\t\tset_active_reaction(component_effect.reaction);\n\t\t\t\t\teffect(component_effect.fn);\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\tset_active_effect(previous_effect);\n\t\t\t\tset_active_reaction(previous_reaction);\n\t\t\t}\n\t\t}\n\t\tcomponent_context = context_stack_item.p;\n\t\tif (DEV) {\n\t\t\tdev_current_component_function = context_stack_item.p?.function ?? null;\n\t\t}\n\t\tcontext_stack_item.m = true;\n\t}\n\t// Micro-optimization: Don't set .a above to the empty object\n\t// so it can be garbage-collected when the return here is unused\n\treturn component || /** @type {T} */ ({});\n}\n\n/**\n * Possibly traverse an object and read all its properties so that they're all reactive in case this is `$state`.\n * Does only check first level of an object for performance reasons (heuristic should be good for 99% of all cases).\n * @param {any} value\n * @returns {void}\n */\nexport function deep_read_state(value) {\n\tif (typeof value !== 'object' || !value || value instanceof EventTarget) {\n\t\treturn;\n\t}\n\n\tif (STATE_SYMBOL in value) {\n\t\tdeep_read(value);\n\t} else if (!Array.isArray(value)) {\n\t\tfor (let key in value) {\n\t\t\tconst prop = value[key];\n\t\t\tif (typeof prop === 'object' && prop && STATE_SYMBOL in prop) {\n\t\t\t\tdeep_read(prop);\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * Deeply traverse an object and read all its properties\n * so that they're all reactive in case this is `$state`\n * @param {any} value\n * @param {Set<any>} visited\n * @returns {void}\n */\nexport function deep_read(value, visited = new Set()) {\n\tif (\n\t\ttypeof value === 'object' &&\n\t\tvalue !== null &&\n\t\t// We don't want to traverse DOM elements\n\t\t!(value instanceof EventTarget) &&\n\t\t!visited.has(value)\n\t) {\n\t\tvisited.add(value);\n\t\t// When working with a possible SvelteDate, this\n\t\t// will ensure we capture changes to it.\n\t\tif (value instanceof Date) {\n\t\t\tvalue.getTime();\n\t\t}\n\t\tfor (let key in value) {\n\t\t\ttry {\n\t\t\t\tdeep_read(value[key], visited);\n\t\t\t} catch (e) {\n\t\t\t\t// continue\n\t\t\t}\n\t\t}\n\t\tconst proto = get_prototype_of(value);\n\t\tif (\n\t\t\tproto !== Object.prototype &&\n\t\t\tproto !== Array.prototype &&\n\t\t\tproto !== Map.prototype &&\n\t\t\tproto !== Set.prototype &&\n\t\t\tproto !== Date.prototype\n\t\t) {\n\t\t\tconst descriptors = get_descriptors(proto);\n\t\t\tfor (let key in descriptors) {\n\t\t\t\tconst get = descriptors[key].get;\n\t\t\t\tif (get) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tget.call(value);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t// continue\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nif (DEV) {\n\t/**\n\t * @param {string} rune\n\t */\n\tfunction throw_rune_error(rune) {\n\t\tif (!(rune in globalThis)) {\n\t\t\t// TODO if people start adjusting the \"this can contain runes\" config through v-p-s more, adjust this message\n\t\t\t/** @type {any} */\n\t\t\tlet value; // let's hope noone modifies this global, but belts and braces\n\t\t\tObject.defineProperty(globalThis, rune, {\n\t\t\t\tconfigurable: true,\n\t\t\t\t// eslint-disable-next-line getter-return\n\t\t\t\tget: () => {\n\t\t\t\t\tif (value !== undefined) {\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\n\t\t\t\t\te.rune_outside_svelte(rune);\n\t\t\t\t},\n\t\t\t\tset: (v) => {\n\t\t\t\t\tvalue = v;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tthrow_rune_error('$state');\n\tthrow_rune_error('$effect');\n\tthrow_rune_error('$derived');\n\tthrow_rune_error('$inspect');\n\tthrow_rune_error('$props');\n\tthrow_rune_error('$bindable');\n}\n","/** @import { Location } from 'locate-character' */\nimport { teardown } from '../../reactivity/effects.js';\nimport { define_property, is_array } from '../../../shared/utils.js';\nimport { hydrating } from '../hydration.js';\nimport { queue_micro_task } from '../task.js';\nimport { FILENAME } from '../../../../constants.js';\nimport * as w from '../../warnings.js';\nimport {\n\tactive_effect,\n\tactive_reaction,\n\tset_active_effect,\n\tset_active_reaction\n} from '../../runtime.js';\n\n/** @type {Set<string>} */\nexport const all_registered_events = new Set();\n\n/** @type {Set<(events: Array<string>) => void>} */\nexport const root_event_handles = new Set();\n\n/**\n * SSR adds onload and onerror attributes to catch those events before the hydration.\n * This function detects those cases, removes the attributes and replays the events.\n * @param {HTMLElement} dom\n */\nexport function replay_events(dom) {\n\tif (!hydrating) return;\n\n\tif (dom.onload) {\n\t\tdom.removeAttribute('onload');\n\t}\n\tif (dom.onerror) {\n\t\tdom.removeAttribute('onerror');\n\t}\n\t// @ts-expect-error\n\tconst event = dom.__e;\n\tif (event !== undefined) {\n\t\t// @ts-expect-error\n\t\tdom.__e = undefined;\n\t\tqueueMicrotask(() => {\n\t\t\tif (dom.isConnected) {\n\t\t\t\tdom.dispatchEvent(event);\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * @param {string} event_name\n * @param {EventTarget} dom\n * @param {EventListener} handler\n * @param {AddEventListenerOptions} options\n */\nexport function create_event(event_name, dom, handler, options) {\n\t/**\n\t * @this {EventTarget}\n\t */\n\tfunction target_handler(/** @type {Event} */ event) {\n\t\tif (!options.capture) {\n\t\t\t// Only call in the bubble phase, else delegated events would be called before the capturing events\n\t\t\thandle_event_propagation.call(dom, event);\n\t\t}\n\t\tif (!event.cancelBubble) {\n\t\t\tvar previous_reaction = active_reaction;\n\t\t\tvar previous_effect = active_effect;\n\n\t\t\tset_active_reaction(null);\n\t\t\tset_active_effect(null);\n\t\t\ttry {\n\t\t\t\treturn handler.call(this, event);\n\t\t\t} finally {\n\t\t\t\tset_active_reaction(previous_reaction);\n\t\t\t\tset_active_effect(previous_effect);\n\t\t\t}\n\t\t}\n\t}\n\n\t// Chrome has a bug where pointer events don't work when attached to a DOM element that has been cloned\n\t// with cloneNode() and the DOM element is disconnected from the document. To ensure the event works, we\n\t// defer the attachment till after it's been appended to the document. TODO: remove this once Chrome fixes\n\t// this bug. The same applies to wheel events and touch events.\n\tif (\n\t\tevent_name.startsWith('pointer') ||\n\t\tevent_name.startsWith('touch') ||\n\t\tevent_name === 'wheel'\n\t) {\n\t\tqueue_micro_task(() => {\n\t\t\tdom.addEventListener(event_name, target_handler, options);\n\t\t});\n\t} else {\n\t\tdom.addEventListener(event_name, target_handler, options);\n\t}\n\n\treturn target_handler;\n}\n\n/**\n * Attaches an event handler to an element and returns a function that removes the handler. Using this\n * rather than `addEventListener` will preserve the correct order relative to handlers added declaratively\n * (with attributes like `onclick`), which use event delegation for performance reasons\n *\n * @param {EventTarget} element\n * @param {string} type\n * @param {EventListener} handler\n * @param {AddEventListenerOptions} [options]\n */\nexport function on(element, type, handler, options = {}) {\n\tvar target_handler = create_event(type, element, handler, options);\n\n\treturn () => {\n\t\telement.removeEventListener(type, target_handler, options);\n\t};\n}\n\n/**\n * @param {string} event_name\n * @param {Element} dom\n * @param {EventListener} handler\n * @param {boolean} capture\n * @param {boolean} [passive]\n * @returns {void}\n */\nexport function event(event_name, dom, handler, capture, passive) {\n\tvar options = { capture, passive };\n\tvar target_handler = create_event(event_name, dom, handler, options);\n\n\t// @ts-ignore\n\tif (dom === document.body || dom === window || dom === document) {\n\t\tteardown(() => {\n\t\t\tdom.removeEventListener(event_name, target_handler, options);\n\t\t});\n\t}\n}\n\n/**\n * @param {Array<string>} events\n * @returns {void}\n */\nexport function delegate(events) {\n\tfor (var i = 0; i < events.length; i++) {\n\t\tall_registered_events.add(events[i]);\n\t}\n\n\tfor (var fn of root_event_handles) {\n\t\tfn(events);\n\t}\n}\n\n/**\n * @this {EventTarget}\n * @param {Event} event\n * @returns {void}\n */\nexport function handle_event_propagation(event) {\n\tvar handler_element = this;\n\tvar owner_document = /** @type {Node} */ (handler_element).ownerDocument;\n\tvar event_name = event.type;\n\tvar path = event.composedPath?.() || [];\n\tvar current_target = /** @type {null | Element} */ (path[0] || event.target);\n\n\t// composedPath contains list of nodes the event has propagated through.\n\t// We check __root to skip all nodes below it in case this is a\n\t// parent of the __root node, which indicates that there's nested\n\t// mounted apps. In this case we don't want to trigger events multiple times.\n\tvar path_idx = 0;\n\n\t// @ts-expect-error is added below\n\tvar handled_at = event.__root;\n\n\tif (handled_at) {\n\t\tvar at_idx = path.indexOf(handled_at);\n\t\tif (\n\t\t\tat_idx !== -1 &&\n\t\t\t(handler_element === document || handler_element === /** @type {any} */ (window))\n\t\t) {\n\t\t\t// This is the fallback document listener or a window listener, but the event was already handled\n\t\t\t// -> ignore, but set handle_at to document/window so that we're resetting the event\n\t\t\t// chain in case someone manually dispatches the same event object again.\n\t\t\t// @ts-expect-error\n\t\t\tevent.__root = handler_element;\n\t\t\treturn;\n\t\t}\n\n\t\t// We're deliberately not skipping if the index is higher, because\n\t\t// someone could create an event programmatically and emit it multiple times,\n\t\t// in which case we want to handle the whole propagation chain properly each time.\n\t\t// (this will only be a false negative if the event is dispatched multiple times and\n\t\t// the fallback document listener isn't reached in between, but that's super rare)\n\t\tvar handler_idx = path.indexOf(handler_element);\n\t\tif (handler_idx === -1) {\n\t\t\t// handle_idx can theoretically be -1 (happened in some JSDOM testing scenarios with an event listener on the window object)\n\t\t\t// so guard against that, too, and assume that everything was handled at this point.\n\t\t\treturn;\n\t\t}\n\n\t\tif (at_idx <= handler_idx) {\n\t\t\tpath_idx = at_idx;\n\t\t}\n\t}\n\n\tcurrent_target = /** @type {Element} */ (path[path_idx] || event.target);\n\t// there can only be one delegated event per element, and we either already handled the current target,\n\t// or this is the very first target in the chain which has a non-delegated listener, in which case it's safe\n\t// to handle a possible delegated event on it later (through the root delegation listener for example).\n\tif (current_target === handler_element) return;\n\n\t// Proxy currentTarget to correct target\n\tdefine_property(event, 'currentTarget', {\n\t\tconfigurable: true,\n\t\tget() {\n\t\t\treturn current_target || owner_document;\n\t\t}\n\t});\n\n\t// This started because of Chromium issue https://chromestatus.com/feature/5128696823545856,\n\t// where removal or moving of of the DOM can cause sync `blur` events to fire, which can cause logic\n\t// to run inside the current `active_reaction`, which isn't what we want at all. However, on reflection,\n\t// it's probably best that all event handled by Svelte have this behaviour, as we don't really want\n\t// an event handler to run in the context of another reaction or effect.\n\tvar previous_reaction = active_reaction;\n\tvar previous_effect = active_effect;\n\tset_active_reaction(null);\n\tset_active_effect(null);\n\n\ttry {\n\t\t/**\n\t\t * @type {unknown}\n\t\t */\n\t\tvar throw_error;\n\t\t/**\n\t\t * @type {unknown[]}\n\t\t */\n\t\tvar other_errors = [];\n\n\t\twhile (current_target !== null) {\n\t\t\t/** @type {null | Element} */\n\t\t\tvar parent_element =\n\t\t\t\tcurrent_target.assignedSlot ||\n\t\t\t\tcurrent_target.parentNode ||\n\t\t\t\t/** @type {any} */ (current_target).host ||\n\t\t\t\tnull;\n\n\t\t\ttry {\n\t\t\t\t// @ts-expect-error\n\t\t\t\tvar delegated = current_target['__' + event_name];\n\n\t\t\t\tif (delegated !== undefined && !(/** @type {any} */ (current_target).disabled)) {\n\t\t\t\t\tif (is_array(delegated)) {\n\t\t\t\t\t\tvar [fn, ...data] = delegated;\n\t\t\t\t\t\tfn.apply(current_target, [event, ...data]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdelegated.call(current_target, event);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tif (throw_error) {\n\t\t\t\t\tother_errors.push(error);\n\t\t\t\t} else {\n\t\t\t\t\tthrow_error = error;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (event.cancelBubble || parent_element === handler_element || parent_element === null) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcurrent_target = parent_element;\n\t\t}\n\n\t\tif (throw_error) {\n\t\t\tfor (let error of other_errors) {\n\t\t\t\t// Throw the rest of the errors, one-by-one on a microtask\n\t\t\t\tqueueMicrotask(() => {\n\t\t\t\t\tthrow error;\n\t\t\t\t});\n\t\t\t}\n\t\t\tthrow throw_error;\n\t\t}\n\t} finally {\n\t\t// @ts-expect-error is used above\n\t\tevent.__root = handler_element;\n\t\t// @ts-ignore remove proxy on currentTarget\n\t\tdelete event.currentTarget;\n\t\tset_active_reaction(previous_reaction);\n\t\tset_active_effect(previous_effect);\n\t}\n}\n\n/**\n * In dev, warn if an event handler is not a function, as it means the\n * user probably called the handler or forgot to add a `() =>`\n * @param {() => (event: Event, ...args: any) => void} thunk\n * @param {EventTarget} element\n * @param {[Event, ...any]} args\n * @param {any} component\n * @param {[number, number]} [loc]\n * @param {boolean} [remove_parens]\n */\nexport function apply(\n\tthunk,\n\telement,\n\targs,\n\tcomponent,\n\tloc,\n\thas_side_effects = false,\n\tremove_parens = false\n) {\n\tlet handler;\n\tlet error;\n\n\ttry {\n\t\thandler = thunk();\n\t} catch (e) {\n\t\terror = e;\n\t}\n\n\tif (typeof handler === 'function') {\n\t\thandler.apply(element, args);\n\t} else if (has_side_effects || handler != null || error) {\n\t\tconst filename = component?.[FILENAME];\n\t\tconst location = loc ? ` at ${filename}:${loc[0]}:${loc[1]}` : ` in ${filename}`;\n\n\t\tconst event_name = args[0].type;\n\t\tconst description = `\\`${event_name}\\` handler${location}`;\n\t\tconst suggestion = remove_parens ? 'remove the trailing `()`' : 'add a leading `() =>`';\n\n\t\tw.event_handler_invalid(description, suggestion);\n\n\t\tif (error) {\n\t\t\tthrow error;\n\t\t}\n\t}\n}\n","const regex_return_characters = /\\r/g;\n\n/**\n * @param {string} str\n * @returns {string}\n */\nexport function hash(str) {\n\tstr = str.replace(regex_return_characters, '');\n\tlet hash = 5381;\n\tlet i = str.length;\n\n\twhile (i--) hash = ((hash << 5) - hash) ^ str.charCodeAt(i);\n\treturn (hash >>> 0).toString(36);\n}\n\nconst VOID_ELEMENT_NAMES = [\n\t'area',\n\t'base',\n\t'br',\n\t'col',\n\t'command',\n\t'embed',\n\t'hr',\n\t'img',\n\t'input',\n\t'keygen',\n\t'link',\n\t'meta',\n\t'param',\n\t'source',\n\t'track',\n\t'wbr'\n];\n\n/**\n * Returns `true` if `name` is of a void element\n * @param {string} name\n */\nexport function is_void(name) {\n\treturn VOID_ELEMENT_NAMES.includes(name) || name.toLowerCase() === '!doctype';\n}\n\nconst RESERVED_WORDS = [\n\t'arguments',\n\t'await',\n\t'break',\n\t'case',\n\t'catch',\n\t'class',\n\t'const',\n\t'continue',\n\t'debugger',\n\t'default',\n\t'delete',\n\t'do',\n\t'else',\n\t'enum',\n\t'eval',\n\t'export',\n\t'extends',\n\t'false',\n\t'finally',\n\t'for',\n\t'function',\n\t'if',\n\t'implements',\n\t'import',\n\t'in',\n\t'instanceof',\n\t'interface',\n\t'let',\n\t'new',\n\t'null',\n\t'package',\n\t'private',\n\t'protected',\n\t'public',\n\t'return',\n\t'static',\n\t'super',\n\t'switch',\n\t'this',\n\t'throw',\n\t'true',\n\t'try',\n\t'typeof',\n\t'var',\n\t'void',\n\t'while',\n\t'with',\n\t'yield'\n];\n\n/**\n * Returns `true` if `word` is a reserved JavaScript keyword\n * @param {string} word\n */\nexport function is_reserved(word) {\n\treturn RESERVED_WORDS.includes(word);\n}\n\n/**\n * @param {string} name\n */\nexport function is_capture_event(name) {\n\treturn name.endsWith('capture') && name !== 'gotpointercapture' && name !== 'lostpointercapture';\n}\n\n/** List of Element events that will be delegated */\nconst DELEGATED_EVENTS = [\n\t'beforeinput',\n\t'click',\n\t'change',\n\t'dblclick',\n\t'contextmenu',\n\t'focusin',\n\t'focusout',\n\t'input',\n\t'keydown',\n\t'keyup',\n\t'mousedown',\n\t'mousemove',\n\t'mouseout',\n\t'mouseover',\n\t'mouseup',\n\t'pointerdown',\n\t'pointermove',\n\t'pointerout',\n\t'pointerover',\n\t'pointerup',\n\t'touchend',\n\t'touchmove',\n\t'touchstart'\n];\n\n/**\n * Returns `true` if `event_name` is a delegated event\n * @param {string} event_name\n */\nexport function is_delegated(event_name) {\n\treturn DELEGATED_EVENTS.includes(event_name);\n}\n\n/**\n * Attributes that are boolean, i.e. they are present or not present.\n */\nconst DOM_BOOLEAN_ATTRIBUTES = [\n\t'allowfullscreen',\n\t'async',\n\t'autofocus',\n\t'autoplay',\n\t'checked',\n\t'controls',\n\t'default',\n\t'disabled',\n\t'formnovalidate',\n\t'hidden',\n\t'indeterminate',\n\t'ismap',\n\t'loop',\n\t'multiple',\n\t'muted',\n\t'nomodule',\n\t'novalidate',\n\t'open',\n\t'playsinline',\n\t'readonly',\n\t'required',\n\t'reversed',\n\t'seamless',\n\t'selected',\n\t'webkitdirectory'\n];\n\n/**\n * Returns `true` if `name` is a boolean attribute\n * @param {string} name\n */\nexport function is_boolean_attribute(name) {\n\treturn DOM_BOOLEAN_ATTRIBUTES.includes(name);\n}\n\n/**\n * @type {Record<string, string>}\n * List of attribute names that should be aliased to their property names\n * because they behave differently between setting them as an attribute and\n * setting them as a property.\n */\nconst ATTRIBUTE_ALIASES = {\n\t// no `class: 'className'` because we handle that separately\n\tformnovalidate: 'formNoValidate',\n\tismap: 'isMap',\n\tnomodule: 'noModule',\n\tplaysinline: 'playsInline',\n\treadonly: 'readOnly'\n};\n\n/**\n * @param {string} name\n */\nexport function normalize_attribute(name) {\n\tname = name.toLowerCase();\n\treturn ATTRIBUTE_ALIASES[name] ?? name;\n}\n\nconst DOM_PROPERTIES = [\n\t...DOM_BOOLEAN_ATTRIBUTES,\n\t'formNoValidate',\n\t'isMap',\n\t'noModule',\n\t'playsInline',\n\t'readOnly',\n\t'value',\n\t'inert',\n\t'volume'\n];\n\n/**\n * @param {string} name\n */\nexport function is_dom_property(name) {\n\treturn DOM_PROPERTIES.includes(name);\n}\n\n/**\n * Subset of delegated events which should be passive by default.\n * These two are already passive via browser defaults on window, document and body.\n * But since\n * - we're delegating them\n * - they happen often\n * - they apply to mobile which is generally less performant\n * we're marking them as passive by default for other elements, too.\n */\nconst PASSIVE_EVENTS = ['touchstart', 'touchmove'];\n\n/**\n * Returns `true` if `name` is a passive event\n * @param {string} name\n */\nexport function is_passive_event(name) {\n\treturn PASSIVE_EVENTS.includes(name);\n}\n\nconst CONTENT_EDITABLE_BINDINGS = ['textContent', 'innerHTML', 'innerText'];\n\n/** @param {string} name */\nexport function is_content_editable_binding(name) {\n\treturn CONTENT_EDITABLE_BINDINGS.includes(name);\n}\n\nconst LOAD_ERROR_ELEMENTS = [\n\t'body',\n\t'embed',\n\t'iframe',\n\t'img',\n\t'link',\n\t'object',\n\t'script',\n\t'style',\n\t'track'\n];\n\n/**\n * Returns `true` if the element emits `load` and `error` events\n * @param {string} name\n */\nexport function is_load_error_element(name) {\n\treturn LOAD_ERROR_ELEMENTS.includes(name);\n}\n\nconst SVG_ELEMENTS = [\n\t'altGlyph',\n\t'altGlyphDef',\n\t'altGlyphItem',\n\t'animate',\n\t'animateColor',\n\t'animateMotion',\n\t'animateTransform',\n\t'circle',\n\t'clipPath',\n\t'color-profile',\n\t'cursor',\n\t'defs',\n\t'desc',\n\t'discard',\n\t'ellipse',\n\t'feBlend',\n\t'feColorMatrix',\n\t'feComponentTransfer',\n\t'feComposite',\n\t'feConvolveMatrix',\n\t'feDiffuseLighting',\n\t'feDisplacementMap',\n\t'feDistantLight',\n\t'feDropShadow',\n\t'feFlood',\n\t'feFuncA',\n\t'feFuncB',\n\t'feFuncG',\n\t'feFuncR',\n\t'feGaussianBlur',\n\t'feImage',\n\t'feMerge',\n\t'feMergeNode',\n\t'feMorphology',\n\t'feOffset',\n\t'fePointLight',\n\t'feSpecularLighting',\n\t'feSpotLight',\n\t'feTile',\n\t'feTurbulence',\n\t'filter',\n\t'font',\n\t'font-face',\n\t'font-face-format',\n\t'font-face-name',\n\t'font-face-src',\n\t'font-face-uri',\n\t'foreignObject',\n\t'g',\n\t'glyph',\n\t'glyphRef',\n\t'hatch',\n\t'hatchpath',\n\t'hkern',\n\t'image',\n\t'line',\n\t'linearGradient',\n\t'marker',\n\t'mask',\n\t'mesh',\n\t'meshgradient',\n\t'meshpatch',\n\t'meshrow',\n\t'metadata',\n\t'missing-glyph',\n\t'mpath',\n\t'path',\n\t'pattern',\n\t'polygon',\n\t'polyline',\n\t'radialGradient',\n\t'rect',\n\t'set',\n\t'solidcolor',\n\t'stop',\n\t'svg',\n\t'switch',\n\t'symbol',\n\t'text',\n\t'textPath',\n\t'tref',\n\t'tspan',\n\t'unknown',\n\t'use',\n\t'view',\n\t'vkern'\n];\n\n/** @param {string} name */\nexport function is_svg(name) {\n\treturn SVG_ELEMENTS.includes(name);\n}\n\nconst MATHML_ELEMENTS = [\n\t'annotation',\n\t'annotation-xml',\n\t'maction',\n\t'math',\n\t'merror',\n\t'mfrac',\n\t'mi',\n\t'mmultiscripts',\n\t'mn',\n\t'mo',\n\t'mover',\n\t'mpadded',\n\t'mphantom',\n\t'mprescripts',\n\t'mroot',\n\t'mrow',\n\t'ms',\n\t'mspace',\n\t'msqrt',\n\t'mstyle',\n\t'msub',\n\t'msubsup',\n\t'msup',\n\t'mtable',\n\t'mtd',\n\t'mtext',\n\t'mtr',\n\t'munder',\n\t'munderover',\n\t'semantics'\n];\n\n/** @param {string} name */\nexport function is_mathml(name) {\n\treturn MATHML_ELEMENTS.includes(name);\n}\n\nconst RUNES = /** @type {const} */ ([\n\t'$state',\n\t'$state.raw',\n\t'$state.snapshot',\n\t'$props',\n\t'$bindable',\n\t'$derived',\n\t'$derived.by',\n\t'$effect',\n\t'$effect.pre',\n\t'$effect.tracking',\n\t'$effect.root',\n\t'$inspect',\n\t'$inspect().with',\n\t'$host'\n]);\n\n/**\n * @param {string} name\n * @returns {name is RUNES[number]}\n */\nexport function is_rune(name) {\n\treturn RUNES.includes(/** @type {RUNES[number]} */ (name));\n}\n","/** @import { ComponentContext, Effect, TemplateNode } from '#client' */\n/** @import { Component, ComponentType, SvelteComponent, MountOptions } from '../../index.js' */\nimport { DEV } from 'esm-env';\nimport {\n\tclear_text_content,\n\tcreate_text,\n\tget_first_child,\n\tget_next_sibling,\n\tinit_operations\n} from './dom/operations.js';\nimport { HYDRATION_END, HYDRATION_ERROR, HYDRATION_START } from '../../constants.js';\nimport { push, pop, component_context, active_effect } from './runtime.js';\nimport { effect_root, branch } from './reactivity/effects.js';\nimport {\n\thydrate_next,\n\thydrate_node,\n\thydrating,\n\tset_hydrate_node,\n\tset_hydrating\n} from './dom/hydration.js';\nimport { array_from } from '../shared/utils.js';\nimport {\n\tall_registered_events,\n\thandle_event_propagation,\n\troot_event_handles\n} from './dom/elements/events.js';\nimport { reset_head_anchor } from './dom/blocks/svelte-head.js';\nimport * as w from './warnings.js';\nimport * as e from './errors.js';\nimport { assign_nodes } from './dom/template.js';\nimport { is_passive_event } from '../../utils.js';\n\n/**\n * This is normally true — block effects should run their intro transitions —\n * but is false during hydration (unless `options.intro` is `true`) and\n * when creating the children of a `<svelte:element>` that just changed tag\n */\nexport let should_intro = true;\n\n/** @param {boolean} value */\nexport function set_should_intro(value) {\n\tshould_intro = value;\n}\n\n/**\n * @param {Element} text\n * @param {string} value\n * @returns {void}\n */\nexport function set_text(text, value) {\n\t// For objects, we apply string coercion (which might make things like $state array references in the template reactive) before diffing\n\tvar str = value == null ? '' : typeof value === 'object' ? value + '' : value;\n\t// @ts-expect-error\n\tif (str !== (text.__t ??= text.nodeValue)) {\n\t\t// @ts-expect-error\n\t\ttext.__t = str;\n\t\ttext.nodeValue = str == null ? '' : str + '';\n\t}\n}\n\n/**\n * Mounts a component to the given target and returns the exports and potentially the props (if compiled with `accessors: true`) of the component.\n * Transitions will play during the initial render unless the `intro` option is set to `false`.\n *\n * @template {Record<string, any>} Props\n * @template {Record<string, any>} Exports\n * @param {ComponentType<SvelteComponent<Props>> | Component<Props, Exports, any>} component\n * @param {MountOptions<Props>} options\n * @returns {Exports}\n */\nexport function mount(component, options) {\n\treturn _mount(component, options);\n}\n\n/**\n * Hydrates a component on the given target and returns the exports and potentially the props (if compiled with `accessors: true`) of the component\n *\n * @template {Record<string, any>} Props\n * @template {Record<string, any>} Exports\n * @param {ComponentType<SvelteComponent<Props>> | Component<Props, Exports, any>} component\n * @param {{} extends Props ? {\n * \t\ttarget: Document | Element | ShadowRoot;\n * \t\tprops?: Props;\n * \t\tevents?: Record<string, (e: any) => any>;\n * \tcontext?: Map<any, any>;\n * \t\tintro?: boolean;\n * \t\trecover?: boolean;\n * \t} : {\n * \t\ttarget: Document | Element | ShadowRoot;\n * \t\tprops: Props;\n * \t\tevents?: Record<string, (e: any) => any>;\n * \tcontext?: Map<any, any>;\n * \t\tintro?: boolean;\n * \t\trecover?: boolean;\n * \t}} options\n * @returns {Exports}\n */\nexport function hydrate(component, options) {\n\tinit_operations();\n\toptions.intro = options.intro ?? false;\n\tconst target = options.target;\n\tconst was_hydrating = hydrating;\n\tconst previous_hydrate_node = hydrate_node;\n\n\ttry {\n\t\tvar anchor = /** @type {TemplateNode} */ (get_first_child(target));\n\t\twhile (\n\t\t\tanchor &&\n\t\t\t(anchor.nodeType !== 8 || /** @type {Comment} */ (anchor).data !== HYDRATION_START)\n\t\t) {\n\t\t\tanchor = /** @type {TemplateNode} */ (get_next_sibling(anchor));\n\t\t}\n\n\t\tif (!anchor) {\n\t\t\tthrow HYDRATION_ERROR;\n\t\t}\n\n\t\tset_hydrating(true);\n\t\tset_hydrate_node(/** @type {Comment} */ (anchor));\n\t\thydrate_next();\n\n\t\tconst instance = _mount(component, { ...options, anchor });\n\n\t\tif (\n\t\t\thydrate_node === null ||\n\t\t\thydrate_node.nodeType !== 8 ||\n\t\t\t/** @type {Comment} */ (hydrate_node).data !== HYDRATION_END\n\t\t) {\n\t\t\tw.hydration_mismatch();\n\t\t\tthrow HYDRATION_ERROR;\n\t\t}\n\n\t\tset_hydrating(false);\n\n\t\treturn /** @type {Exports} */ (instance);\n\t} catch (error) {\n\t\tif (error === HYDRATION_ERROR) {\n\t\t\tif (options.recover === false) {\n\t\t\t\te.hydration_failed();\n\t\t\t}\n\n\t\t\t// If an error occured above, the operations might not yet have been initialised.\n\t\t\tinit_operations();\n\t\t\tclear_text_content(target);\n\n\t\t\tset_hydrating(false);\n\t\t\treturn mount(component, options);\n\t\t}\n\n\t\tthrow error;\n\t} finally {\n\t\tset_hydrating(was_hydrating);\n\t\tset_hydrate_node(previous_hydrate_node);\n\t\treset_head_anchor();\n\t}\n}\n\n/** @type {Map<string, number>} */\nconst document_listeners = new Map();\n\n/**\n * @template {Record<string, any>} Exports\n * @param {ComponentType<SvelteComponent<any>> | Component<any>} Component\n * @param {MountOptions} options\n * @returns {Exports}\n */\nfunction _mount(Component, { target, anchor, props = {}, events, context, intro = true }) {\n\tinit_operations();\n\n\tvar registered_events = new Set();\n\n\t/** @param {Array<string>} events */\n\tvar event_handle = (events) => {\n\t\tfor (var i = 0; i < events.length; i++) {\n\t\t\tvar event_name = events[i];\n\n\t\t\tif (registered_events.has(event_name)) continue;\n\t\t\tregistered_events.add(event_name);\n\n\t\t\tvar passive = is_passive_event(event_name);\n\n\t\t\t// Add the event listener to both the container and the document.\n\t\t\t// The container listener ensures we catch events from within in case\n\t\t\t// the outer content stops propagation of the event.\n\t\t\ttarget.addEventListener(event_name, handle_event_propagation, { passive });\n\n\t\t\tvar n = document_listeners.get(event_name);\n\n\t\t\tif (n === undefined) {\n\t\t\t\t// The document listener ensures we catch events that originate from elements that were\n\t\t\t\t// manually moved outside of the container (e.g. via manual portals).\n\t\t\t\tdocument.addEventListener(event_name, handle_event_propagation, { passive });\n\t\t\t\tdocument_listeners.set(event_name, 1);\n\t\t\t} else {\n\t\t\t\tdocument_listeners.set(event_name, n + 1);\n\t\t\t}\n\t\t}\n\t};\n\n\tevent_handle(array_from(all_registered_events));\n\troot_event_handles.add(event_handle);\n\n\t/** @type {Exports} */\n\t// @ts-expect-error will be defined because the render effect runs synchronously\n\tvar component = undefined;\n\n\tvar unmount = effect_root(() => {\n\t\tvar anchor_node = anchor ?? target.appendChild(create_text());\n\n\t\tbranch(() => {\n\t\t\tif (context) {\n\t\t\t\tpush({});\n\t\t\t\tvar ctx = /** @type {ComponentContext} */ (component_context);\n\t\t\t\tctx.c = context;\n\t\t\t}\n\n\t\t\tif (events) {\n\t\t\t\t// We can't spread the object or else we'd lose the state proxy stuff, if it is one\n\t\t\t\t/** @type {any} */ (props).$$events = events;\n\t\t\t}\n\n\t\t\tif (hydrating) {\n\t\t\t\tassign_nodes(/** @type {TemplateNode} */ (anchor_node), null);\n\t\t\t}\n\n\t\t\tshould_intro = intro;\n\t\t\t// @ts-expect-error the public typings are not what the actual function looks like\n\t\t\tcomponent = Component(anchor_node, props) || {};\n\t\t\tshould_intro = true;\n\n\t\t\tif (hydrating) {\n\t\t\t\t/** @type {Effect} */ (active_effect).nodes_end = hydrate_node;\n\t\t\t}\n\n\t\t\tif (context) {\n\t\t\t\tpop();\n\t\t\t}\n\t\t});\n\n\t\treturn () => {\n\t\t\tfor (var event_name of registered_events) {\n\t\t\t\ttarget.removeEventListener(event_name, handle_event_propagation);\n\n\t\t\t\tvar n = /** @type {number} */ (document_listeners.get(event_name));\n\n\t\t\t\tif (--n === 0) {\n\t\t\t\t\tdocument.removeEventListener(event_name, handle_event_propagation);\n\t\t\t\t\tdocument_listeners.delete(event_name);\n\t\t\t\t} else {\n\t\t\t\t\tdocument_listeners.set(event_name, n);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\troot_event_handles.delete(event_handle);\n\t\t\tmounted_components.delete(component);\n\t\t\tif (anchor_node !== anchor) {\n\t\t\t\tanchor_node.parentNode?.removeChild(anchor_node);\n\t\t\t}\n\t\t};\n\t});\n\n\tmounted_components.set(component, unmount);\n\treturn component;\n}\n\n/**\n * References of the components that were mounted or hydrated.\n * Uses a `WeakMap` to avoid memory leaks.\n */\nlet mounted_components = new WeakMap();\n\n/**\n * Unmounts a component that was previously mounted using `mount` or `hydrate`.\n * @param {Record<string, any>} component\n */\nexport function unmount(component) {\n\tconst fn = mounted_components.get(component);\n\n\tif (fn) {\n\t\tfn();\n\t} else if (DEV) {\n\t\tw.lifecycle_double_unmount();\n\t}\n}\n","// generated during release, do not modify\n\n/**\n * The current version, as set in package.json.\n *\n * https://svelte.dev/docs/svelte-compiler#svelte-version\n * @type {string}\n */\nexport const VERSION = '5.1.2';\nexport const PUBLIC_VERSION = '5';\n","import { PUBLIC_VERSION } from '../version.js';\n\nif (typeof window !== 'undefined')\n\t// @ts-ignore\n\t(window.__svelte ||= { v: new Set() }).v.add(PUBLIC_VERSION);\n","import { NavigationService, type ExternalLink, type Node, type PageErrorHandler } from '../services/navigation.service';\nimport type { Luigi } from '../core-api/luigi';\nimport { RoutingHelpers } from '../utilities/helpers/routing-helpers';\nimport { serviceRegistry } from '../services/service-registry';\nimport { RoutingService } from '../services/routing.service';\n\nexport const RoutingModule = {\n init: (luigi: Luigi) => {\n const routingService = serviceRegistry.get(RoutingService);\n routingService.enableRouting();\n },\n\n handlePageErrorHandler: (pageErrorHandler: PageErrorHandler, node: Node, luigi: Luigi) => {\n if (pageErrorHandler && pageErrorHandler.timeout) {\n setTimeout(() => {\n // TODO: check showLoadingIndicator also needed (loading indicator not implemented yet)\n // if (node.loadingIndicator...)\n if (pageErrorHandler.viewUrl) {\n node.viewUrl = pageErrorHandler.viewUrl;\n luigi.getEngine()._ui.updateMainContent(node, luigi);\n } else {\n if (pageErrorHandler.errorFn) {\n pageErrorHandler.errorFn(node);\n } else {\n console.warn('Something went wrong with a client! You will be redirected to another page.');\n const path = pageErrorHandler.redirectPath || '/';\n luigi.navigation().navigate(path);\n }\n }\n }, pageErrorHandler.timeout);\n }\n },\n\n handleExternalLinkNavigation: (externalLink: ExternalLink) => {\n if (externalLink.url) {\n const sameWindow = externalLink.sameWindow || false;\n if (sameWindow) {\n window.location.href = externalLink.url;\n } else {\n const newWindow = window.open(externalLink.url, '_blank', 'noopener noreferrer');\n if (newWindow) {\n newWindow.opener = null;\n newWindow.focus();\n }\n }\n }\n },\n\n /**\n * Adds search parameters to the URL based on client permissions defined in the current navigation node.\n *\n * Only parameters explicitly allowed (with `write: true` permission) in the current node's `clientPermissions.urlParameters`\n * are added to the URL. Parameters without permission will trigger a warning in the console and will not be added.\n *\n * @param searchParams - An object containing key-value pairs of search parameters to be added to the URL.\n * @param keepBrowserHistory - If `true`, the browser history will be preserved when updating the URL.\n * @param luigi - The Luigi core instance used to interact with the routing API.\n */\n addSearchParamsFromClient(searchParams: Record<string, any>, keepBrowserHistory: boolean, luigi: Luigi): void {\n const navService = serviceRegistry.get(NavigationService);\n const pathObj = RoutingHelpers.getCurrentPath();\n const currentNode = navService.getCurrentNode(pathObj.path);\n const localSearchParams = { ...searchParams };\n\n if (currentNode?.clientPermissions?.urlParameters) {\n const filteredObj: Record<string, any> = {};\n Object.keys(currentNode.clientPermissions.urlParameters).forEach((key) => {\n if (key in localSearchParams && currentNode.clientPermissions.urlParameters[key].write === true) {\n filteredObj[key] = localSearchParams[key];\n delete localSearchParams[key];\n }\n });\n for (const key in localSearchParams) {\n console.warn(`No permission to add the search param \"${key}\" to the url`);\n }\n if (Object.keys(filteredObj).length > 0) {\n luigi.routing().addSearchParams(filteredObj, keepBrowserHistory);\n }\n }\n }\n};\n","import Events from '@luigi-project/container';\nimport { UXModule } from './ux-module';\nimport type { Luigi } from '../core-api/luigi';\nimport { RoutingModule } from './routing-module';\nimport { UIModule } from './ui-module';\n\nexport const CommunicationModule = {\n luigi: {} as Luigi,\n init: (luigi: Luigi) => {\n console.log('Init communication...');\n CommunicationModule.luigi = luigi;\n },\n addListeners: (containerElement: any, luigi: Luigi) => {\n containerElement.addEventListener(Events.INITIALIZED, (event: any) => {\n UXModule.luigi?.ux().hideLoadingIndicator(containerElement.parentNode);\n });\n containerElement.addEventListener(Events.NAVIGATION_REQUEST, (event: any) => {\n luigi.navigation().navigate(event.detail.link, event.detail.preserveView, event.detail.modal, event.callbackFn);\n });\n containerElement.addEventListener(Events.ALERT_REQUEST, (event: any) => {\n UXModule.processAlert(event.payload, true, containerElement);\n });\n containerElement.addEventListener(Events.SHOW_CONFIRMATION_MODAL_REQUEST, (event: any) => {\n UXModule.handleConfirmationModalRequest(event.payload, containerElement);\n });\n containerElement.addEventListener(Events.SET_DOCUMENT_TITLE_REQUEST, (event: any) => {\n CommunicationModule.luigi.getEngine()._connector?.setDocumentTitle(event.detail.title);\n });\n containerElement.addEventListener(Events.SHOW_LOADING_INDICATOR_REQUEST, (event: any) => {\n CommunicationModule.luigi.getEngine()._connector?.showLoadingIndicator(containerElement.parentNode);\n });\n containerElement.addEventListener(Events.HIDE_LOADING_INDICATOR_REQUEST, (event: any) => {\n CommunicationModule.luigi.getEngine()._connector?.hideLoadingIndicator(containerElement.parentNode);\n });\n containerElement.addEventListener(Events.ADD_BACKDROP_REQUEST, (event: any) => {\n CommunicationModule.luigi.getEngine()._connector?.addBackdrop();\n });\n containerElement.addEventListener(Events.REMOVE_BACKDROP_REQUEST, (event: any) => {\n CommunicationModule.luigi.getEngine()._connector?.removeBackdrop();\n });\n containerElement.addEventListener(Events.SET_DIRTY_STATUS_REQUEST, (event: any) => {\n UXModule.handleDirtyStatusRequest(event.detail?.data?.dirty, event.detail?.source);\n });\n containerElement.addEventListener(Events.ADD_NODE_PARAMS_REQUEST, (event: any) => {\n luigi.routing().addNodeParams(event.payload.data, event.payload.keepBrowserHistory);\n });\n containerElement.addEventListener(Events.OPEN_USER_SETTINGS_REQUEST, (event: any) => {\n CommunicationModule.luigi.getEngine()._connector?.openUserSettings(event.detail);\n });\n containerElement.addEventListener(Events.CLOSE_USER_SETTINGS_REQUEST, (event: any) => {\n CommunicationModule.luigi.getEngine()._connector?.closeUserSettings();\n });\n containerElement.addEventListener(Events.ADD_SEARCH_PARAMS_REQUEST, (event: any) => {\n RoutingModule.addSearchParamsFromClient(event.detail.data, event.detail.keepBrowserHistory, luigi);\n });\n containerElement.addEventListener(Events.UPDATE_MODAL_SETTINGS_REQUEST, (event: any) => {\n UIModule.updateModalSettings(event.payload.updatedModalSettings, event.payload.addHistoryEntry, luigi);\n });\n containerElement.addEventListener(Events.SET_CURRENT_LOCALE_REQUEST, (event: any) => {\n luigi.i18n().setCurrentLocale(event.detail?.data?.data?.currentLocale, containerElement);\n });\n }\n};\n","import type { Node } from './navigation.service';\n\nexport class NodeDataManagementService {\n dataManagement: Map<any, any>;\n navPath!: string;\n\n constructor() {\n this.dataManagement = new Map();\n }\n\n /**\n * Stores node as key and value as value\n * @param {Node} node\n * @param {any} value\n */\n setChildren(node: Node, value: any): void {\n this.dataManagement.set(node, value);\n this.navPath = '';\n }\n\n /**\n * Returns the map entry which belongs to the node, stored as key\n * @param {Node} node\n * @returns {any} map entry\n */\n getChildren(node: Node): any {\n return node ? this.dataManagement.get(node) : {};\n }\n\n /**\n * Checks if there is an entry of given node\n * @param {Node} node\n * @returns {boolean} true or false\n */\n hasChildren(node: Node): boolean {\n const data = this.getChildren(node);\n\n return !!(data && Object.prototype.hasOwnProperty.call(data, 'children'));\n }\n\n /**\n * Stores root node as object with key '_luigiRootNode'\n * @param {Node} node\n */\n setRootNode(node: Node): void {\n this.dataManagement.set('_luigiRootNode', { node });\n }\n\n /**\n * Returns the root node\n * @returns {Node} root node\n */\n getRootNode(): Node {\n return this.dataManagement.get('_luigiRootNode');\n }\n\n /**\n * Checks if root node exists\n * @returns {boolean} true or false\n */\n hasRootNode(): boolean {\n return !!this.getRootNode();\n }\n\n /*\n Clears the map and remove all key/values from map\n */\n deleteCache(): void {\n this.dataManagement.clear();\n }\n\n /**\n * Deletes node from cache and its children recursively\n * @param {Node} node\n */\n deleteNodesRecursively(node: Node): void {\n if (this.hasChildren(node)) {\n const children = this.getChildren(node).children;\n\n for (let i = 0; i < children.length; i++) {\n this.deleteNodesRecursively(children[i]);\n }\n }\n\n this.dataManagement.delete(node);\n }\n}\n","import { mount } from 'svelte';\nimport App from './App.svelte';\nimport { CommunicationModule } from './modules/communicaton-module';\nimport { RoutingModule } from './modules/routing-module';\nimport { UIModule } from './modules/ui-module';\nimport { UXModule } from './modules/ux-module';\nimport { DirtyStatusService } from './services/dirty-status.service';\nimport { NavigationService } from './services/navigation.service';\nimport { NodeDataManagementService } from './services/node-data-management.service';\nimport { RoutingService } from './services/routing.service';\nimport { serviceRegistry } from './services/service-registry';\nimport { ViewUrlDecoratorSvc } from './services/viewurl-decorator';\nimport type { LuigiConnector } from './types/connector';\nimport { AuthLayerSvc } from './services/auth-layer.service';\nimport { ModalService } from './services/modal.service';\n\nexport class LuigiEngine {\n config: any;\n\n _connector: LuigiConnector | undefined;\n _app: any;\n _ui = UIModule;\n _comm = CommunicationModule;\n _ux = UXModule;\n _routing = RoutingModule;\n\n bootstrap(connector: LuigiConnector): void {\n this._app = mount(App, {\n target: document.body\n });\n this._connector = connector;\n }\n\n init(): void {\n const luigi = (window as any).Luigi;\n AuthLayerSvc.init().then(() => {\n serviceRegistry.register(DirtyStatusService, () => new DirtyStatusService());\n serviceRegistry.register(NavigationService, () => new NavigationService(luigi));\n serviceRegistry.register(NodeDataManagementService, () => new NodeDataManagementService());\n serviceRegistry.register(RoutingService, () => new RoutingService(luigi));\n serviceRegistry.register(ViewUrlDecoratorSvc, () => new ViewUrlDecoratorSvc());\n serviceRegistry.register(ModalService, () => new ModalService(luigi));\n luigi.theming()._init();\n UIModule.init(luigi);\n RoutingModule.init(luigi);\n CommunicationModule.init(luigi);\n UXModule.init(luigi);\n });\n }\n}\n","// import './app.scss';\nimport { Luigi } from './core-api/luigi';\nimport { LuigiEngine } from './luigi-engine';\n\n(window as any).Luigi = new Luigi(new LuigiEngine());\n"],"names":["defaultLuigiInternalTranslationTable","defaultLuigiTranslationTable","EscapingHelpers","text","result","elements","i","openTag_1","openTag_2","openTag_3","openTag_4","closeTag_1","closeTag_2","closeTag_3","closeTag_4","param","str","links","uniqueID","initialValue","acc","key","content","elemId","escapedText","processedData","keyForRegex","pattern","GenericHelpers","promiseToCheck","functionToCheck","stringToCheck","objectToCheck","element","selector","onlyVisible","items","item","path","hasLeadingSlash","object","property","propIndex","nextValue","propertyPath","configuredValue","i18nService","luigi","locale","containerElement","_a","_b","listener","listenerId","interpolations","findTranslation","containers","obj","splitted","value","AsyncHelpers","resolve","fn","args","parameters","FeatureToggles","featureToggleName","fromUrlQuery","ft","ModalService","toClose","onInternalClose","e","modalObj","settings","topModal","LuigiStore","subscriber","get","store","writable","ConfigHelpersClass","errorMsg","throwError","error","ConfigHelpers","AuthStoreSvcClass","values","sType","data","AuthStoreSvc","AuthLayerSvcClass","uInfo","loggedIn","idpProviderName","idpProviderSettings","uaError","AuthHelpers","resolved","err","authData","startAuth","LuigiAuth","userInfo","res","logoutCallback","redirectUrl","customLogoutFn","profileLogoutFn","message","idpProvider","customIdpInstance","requiredFnName","AuthLayerSvc","LuigiAuthClass","eventName","providerInstanceSettings","redirect","AuthHelpersClass","storedAuthData","errorDescription","NavigationHelpers","raw","linkSegment","pathSegment","pathParams","route","nodesInPath","match","index","nodeToCheckPermission","featureToggles","activeFeatureToggles","node","translation","ttText","nodeToCheckPermissionFor","parentNode","currentContext","anon","permissionCheckerFn","appSwitcherData","pathData","appSwitcherItems","title","el1","el2","ccrit","pathToLeftNavParent","segment","objs","parts","p","RoutingHelpers","params","hash","paramPrefix","localhash","hashValue","givenQueryParamsString","searchParams","paramKey","entry","paramName","prefix","paramsMap","sanitizedMap","paramPair","currentNode","filteredObj","hashRouting","pathRaw","query","queryParamIndex","paramsString","modalParamsStr","searchParamsString","modalParamName","historyState","dataObj","queryArr","url","validUrls","el","featureToggleProperty","featureTogglesFromUrl","featureToggleList","paramMap","contains","foundKey","key2","TOP_NAV_DEFAULTS","NavigationService","cfg","pathSegments","rootNodes","_c","nodeContext","mergedContext","substitutedContext","urlPathElement","nodes","segmentsLength","n","dynamicSegmentsLength","selectedNode","catMap","catId","catLabel","catNode","pData","children","childToKeepFound","tabNavUnset","categoryById","subCatEntries","converted","superCatId","potentialSuperCat","_d","_e","_f","subitem","navItems","basePath","nip","pathDataTruncatedChildren","lastElement","parentPath","fullPath","_g","_h","_i","_j","_k","_l","_m","_n","_o","_p","_q","_r","_s","_t","_u","_v","_w","_x","_y","_z","_A","_B","profileItems","appSwitcher","headerTitle","logoutLabel","itemClick","profileSettings","uifRes","headerSettings","showMainAppEntry","mainAppEntry","prevNode","nextNode","invokedFunction","navNodes","context","rootNode","badgeItem","child","t","s","o","a","r","c","l","h","d","u","E","m","_","g","T","S","C","$","f","R","A","w","b","I","O","U","v","N","y","L","P","D","__publicField","k","x","M","Q","H","W","B","G","V","j","q","F","K","X","z","J","Y","Z","tt","et","it","nt","st","ot","at","ServiceRegistry","factory","singleton","serviceRegistry","ViewUrlDecoratorSvc","decorator","decode","urlObj","queryParamDecorators","createContainer","userSettingGroups","userSettings","lcc","lc","setSandboxRules","setAllowRules","container","customSandboxRules","luigiDefaultSandboxRules","activeSandboxRules","allowRules","rule","UIModule","RoutingService","scopes","croute","noScopes","containerWrapper","viewGroupContainer","connector","modalSettings","onCloseCallback","routingService","modalService","resolveFn","onCloseRequestHandler","closePromise","Events","modalPromiseObj","addHistoryEntry","modalPath","defaultPattern","luigiConfig","ev","routeInfo","urlSearchParams","paramsObj","nodeParams","navService","modalViewParamName","modalSettingsObj","nodeObject","modalParams","queryParamSeparator","prevModalPath","hashRoutingActive","pathWithoutModalData","urlWithoutModalData","cleanUrl","isClosedInternal","modalParamsObj","finalUrl","searchParamKey","isModalHistoryHigherThanHistoryLength","historyMaxBack","modalHistoryLength","Navigation","preserveView","callbackFn","normalizedPath","preventContextUpdate","eventDetail","event","Routing","keepBrowserHistory","queryParams","DENYLIST","entries","hashQuery","denied","href","_luigi","_currentTheme","Theming","__privateAdd","__privateSet","__privateGet","id","themes","theming","varFile","resp","livePropVal","viewUrlDecoratorService","configValueFn","DirtyStatusService","isDirty","source","dirtySet","dirtyStatusService","UXModule","alertSettings","openFromClient","alertHandler","linkKey","link","confirmationModalSettings","UserSettingsHelperClass","storedSettings","userSettingGroupsFromConfig","userSettingGroupsFromOldConfig","userSettingsSchema","innerObj","iframeCtn","iframe","eventSource","customUserSettingsIframes","UserSettingsHelper","UX","handler","reject","documentTitle","appLoadingIndicator","Luigi","engine","userSettingsConfig","localStorageValue","userSettingsObj","previousUserSettingsObj","luigiStore","scopeSubscribers","unSubscriptions","scope","subscribers","sub","configReadyCallback","DEV","is_array","array_from","define_property","get_descriptor","DERIVED","EFFECT","RENDER_EFFECT","BLOCK_EFFECT","BRANCH_EFFECT","ROOT_EFFECT","UNOWNED","DISCONNECTED","CLEAN","DIRTY","MAYBE_DIRTY","INERT","DESTROYED","EFFECT_RAN","HEAD_EFFECT","EFFECT_HAS_DERIVED","equals","effect_update_depth_exceeded","$window","next_sibling_getter","init_operations","element_prototype","node_prototype","create_text","get_next_sibling","destroy_derived_children","derived","destroy_derived","destroy_effect","execute_derived","prev_active_effect","active_effect","set_active_effect","update_reaction","update_derived","status","skip_reaction","set_signal_status","increment_version","signal","remove_reactions","push_effect","effect","parent_effect","parent_last","create_effect","type","sync","push","is_root","component_context","previously_flushing_effect","is_flushing_effect","set_is_flushing_effect","update_effect","schedule_effect","inert","active_reaction","effect_root","branch","execute_effect_teardown","teardown","previous_reaction","set_active_reaction","destroy_effect_deriveds","deriveds","destroy_effect_children","remove_dom","next","destroy_block_effect_children","removed","end","transitions","transition","parent","unlink_effect","prev","is_micro_task_queued","queued_root_effects","flush_count","reaction","new_deps","skipped_deps","current_version","check_dirtiness","flags","dependencies","is_unowned","dependency","handle_error","previous_deps","previous_skipped_deps","previous_skip_reaction","previous_component_context","deps","remove_reaction","reactions","new_length","start_index","previous_effect","infinite_loop_guard","e.effect_update_depth_exceeded","flush_queued_root_effects","root_effects","length","collected_effects","process_effects","flush_queued_effects","effects","process_deferred","previous_queued_root_effects","current_effect","main_loop","is_branch","is_skippable_branch","sibling","parent_sibling","STATUS_MASK","props","runes","pop","component","context_stack_item","component_effects","component_effect","all_registered_events","root_event_handles","handle_event_propagation","handler_element","owner_document","event_name","current_target","path_idx","handled_at","at_idx","handler_idx","throw_error","other_errors","parent_element","delegated","PASSIVE_EVENTS","is_passive_event","name","mount","options","_mount","document_listeners","Component","target","anchor","events","intro","registered_events","event_handle","passive","unmount","anchor_node","ctx","mounted_components","PUBLIC_VERSION","RoutingModule","pageErrorHandler","externalLink","newWindow","pathObj","localSearchParams","CommunicationModule","NodeDataManagementService","LuigiEngine","App"],"mappings":"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","x_google_ignoreList":[17,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44]}
|