{"version":3,"file":"main.cjs","sources":["../node_modules/superstruct/dist/index.mjs","../src/assert-payload.ts","../node_modules/@swissfederalrailways/dom-component-path/dist/index.js","../src/query-selector.ts","../src/utils.ts","../src/dataLayerApi.ts","../src/get-data-from-entry.ts","../src/closest-data-sit-attribute.ts","../src/impression-tracker.ts","../src/window-facade.ts","../src/closest-element.ts","../src/global-click-tracker.ts","../src/app.ts"],"sourcesContent":["/**\n * A `StructFailure` represents a single specific failure in validation.\n */\n/**\n * `StructError` objects are thrown (or returned) when validation fails.\n *\n * Validation logic is design to exit early for maximum performance. The error\n * represents the first error encountered during validation. For more detail,\n * the `error.failures` property is a generator function that can be run to\n * continue validation and receive all the failures in the data.\n */\nclass StructError extends TypeError {\n    constructor(failure, failures) {\n        let cached;\n        const { message, explanation, ...rest } = failure;\n        const { path } = failure;\n        const msg = path.length === 0 ? message : `At path: ${path.join('.')} -- ${message}`;\n        super(explanation ?? msg);\n        if (explanation != null)\n            this.cause = msg;\n        Object.assign(this, rest);\n        this.name = this.constructor.name;\n        this.failures = () => {\n            return (cached ?? (cached = [failure, ...failures()]));\n        };\n    }\n}\n\n/**\n * Check if a value is an iterator.\n */\nfunction isIterable(x) {\n    return isObject(x) && typeof x[Symbol.iterator] === 'function';\n}\n/**\n * Check if a value is a plain object.\n */\nfunction isObject(x) {\n    return typeof x === 'object' && x != null;\n}\n/**\n * Check if a value is a non-array object.\n */\nfunction isNonArrayObject(x) {\n    return isObject(x) && !Array.isArray(x);\n}\n/**\n * Check if a value is a plain object.\n */\nfunction isPlainObject(x) {\n    if (Object.prototype.toString.call(x) !== '[object Object]') {\n        return false;\n    }\n    const prototype = Object.getPrototypeOf(x);\n    return prototype === null || prototype === Object.prototype;\n}\n/**\n * Return a value as a printable string.\n */\nfunction print(value) {\n    if (typeof value === 'symbol') {\n        return value.toString();\n    }\n    return typeof value === 'string' ? JSON.stringify(value) : `${value}`;\n}\n/**\n * Shifts (removes and returns) the first value from the `input` iterator.\n * Like `Array.prototype.shift()` but for an `Iterator`.\n */\nfunction shiftIterator(input) {\n    const { done, value } = input.next();\n    return done ? undefined : value;\n}\n/**\n * Convert a single validation result to a failure.\n */\nfunction toFailure(result, context, struct, value) {\n    if (result === true) {\n        return;\n    }\n    else if (result === false) {\n        result = {};\n    }\n    else if (typeof result === 'string') {\n        result = { message: result };\n    }\n    const { path, branch } = context;\n    const { type } = struct;\n    const { refinement, message = `Expected a value of type \\`${type}\\`${refinement ? ` with refinement \\`${refinement}\\`` : ''}, but received: \\`${print(value)}\\``, } = result;\n    return {\n        value,\n        type,\n        refinement,\n        key: path[path.length - 1],\n        path,\n        branch,\n        ...result,\n        message,\n    };\n}\n/**\n * Convert a validation result to an iterable of failures.\n */\nfunction* toFailures(result, context, struct, value) {\n    if (!isIterable(result)) {\n        result = [result];\n    }\n    for (const r of result) {\n        const failure = toFailure(r, context, struct, value);\n        if (failure) {\n            yield failure;\n        }\n    }\n}\n/**\n * Check a value against a struct, traversing deeply into nested values, and\n * returning an iterator of failures or success.\n */\nfunction* run(value, struct, options = {}) {\n    const { path = [], branch = [value], coerce = false, mask = false } = options;\n    const ctx = { path, branch, mask };\n    if (coerce) {\n        value = struct.coercer(value, ctx);\n    }\n    let status = 'valid';\n    for (const failure of struct.validator(value, ctx)) {\n        failure.explanation = options.message;\n        status = 'not_valid';\n        yield [failure, undefined];\n    }\n    for (let [k, v, s] of struct.entries(value, ctx)) {\n        const ts = run(v, s, {\n            path: k === undefined ? path : [...path, k],\n            branch: k === undefined ? branch : [...branch, v],\n            coerce,\n            mask,\n            message: options.message,\n        });\n        for (const t of ts) {\n            if (t[0]) {\n                status = t[0].refinement != null ? 'not_refined' : 'not_valid';\n                yield [t[0], undefined];\n            }\n            else if (coerce) {\n                v = t[1];\n                if (k === undefined) {\n                    value = v;\n                }\n                else if (value instanceof Map) {\n                    value.set(k, v);\n                }\n                else if (value instanceof Set) {\n                    value.add(v);\n                }\n                else if (isObject(value)) {\n                    if (v !== undefined || k in value)\n                        value[k] = v;\n                }\n            }\n        }\n    }\n    if (status !== 'not_valid') {\n        for (const failure of struct.refiner(value, ctx)) {\n            failure.explanation = options.message;\n            status = 'not_refined';\n            yield [failure, undefined];\n        }\n    }\n    if (status === 'valid') {\n        yield [undefined, value];\n    }\n}\n\n/**\n * `Struct` objects encapsulate the validation logic for a specific type of\n * values. Once constructed, you use the `assert`, `is` or `validate` helpers to\n * validate unknown input data against the struct.\n */\nclass Struct {\n    constructor(props) {\n        const { type, schema, validator, refiner, coercer = (value) => value, entries = function* () { }, } = props;\n        this.type = type;\n        this.schema = schema;\n        this.entries = entries;\n        this.coercer = coercer;\n        if (validator) {\n            this.validator = (value, context) => {\n                const result = validator(value, context);\n                return toFailures(result, context, this, value);\n            };\n        }\n        else {\n            this.validator = () => [];\n        }\n        if (refiner) {\n            this.refiner = (value, context) => {\n                const result = refiner(value, context);\n                return toFailures(result, context, this, value);\n            };\n        }\n        else {\n            this.refiner = () => [];\n        }\n    }\n    /**\n     * Assert that a value passes the struct's validation, throwing if it doesn't.\n     */\n    assert(value, message) {\n        return assert(value, this, message);\n    }\n    /**\n     * Create a value with the struct's coercion logic, then validate it.\n     */\n    create(value, message) {\n        return create(value, this, message);\n    }\n    /**\n     * Check if a value passes the struct's validation.\n     */\n    is(value) {\n        return is(value, this);\n    }\n    /**\n     * Mask a value, coercing and validating it, but returning only the subset of\n     * properties defined by the struct's schema. Masking applies recursively to\n     * props of `object` structs only.\n     */\n    mask(value, message) {\n        return mask(value, this, message);\n    }\n    /**\n     * Validate a value with the struct's validation logic, returning a tuple\n     * representing the result.\n     *\n     * You may optionally pass `true` for the `coerce` argument to coerce\n     * the value before attempting to validate it. If you do, the result will\n     * contain the coerced result when successful. Also, `mask` will turn on\n     * masking of the unknown `object` props recursively if passed.\n     */\n    validate(value, options = {}) {\n        return validate(value, this, options);\n    }\n}\n/**\n * Assert that a value passes a struct, throwing if it doesn't.\n */\nfunction assert(value, struct, message) {\n    const result = validate(value, struct, { message });\n    if (result[0]) {\n        throw result[0];\n    }\n}\n/**\n * Create a value with the coercion logic of struct and validate it.\n */\nfunction create(value, struct, message) {\n    const result = validate(value, struct, { coerce: true, message });\n    if (result[0]) {\n        throw result[0];\n    }\n    else {\n        return result[1];\n    }\n}\n/**\n * Mask a value, returning only the subset of properties defined by a struct.\n */\nfunction mask(value, struct, message) {\n    const result = validate(value, struct, { coerce: true, mask: true, message });\n    if (result[0]) {\n        throw result[0];\n    }\n    else {\n        return result[1];\n    }\n}\n/**\n * Check if a value passes a struct.\n */\nfunction is(value, struct) {\n    const result = validate(value, struct);\n    return !result[0];\n}\n/**\n * Validate a value against a struct, returning an error if invalid, or the\n * value (with potential coercion) if valid.\n */\nfunction validate(value, struct, options = {}) {\n    const tuples = run(value, struct, options);\n    const tuple = shiftIterator(tuples);\n    if (tuple[0]) {\n        const error = new StructError(tuple[0], function* () {\n            for (const t of tuples) {\n                if (t[0]) {\n                    yield t[0];\n                }\n            }\n        });\n        return [error, undefined];\n    }\n    else {\n        const v = tuple[1];\n        return [undefined, v];\n    }\n}\n\nfunction assign(...Structs) {\n    const isType = Structs[0].type === 'type';\n    const schemas = Structs.map((s) => s.schema);\n    const schema = Object.assign({}, ...schemas);\n    return isType ? type(schema) : object(schema);\n}\n/**\n * Define a new struct type with a custom validation function.\n */\nfunction define(name, validator) {\n    return new Struct({ type: name, schema: null, validator });\n}\n/**\n * Create a new struct based on an existing struct, but the value is allowed to\n * be `undefined`. `log` will be called if the value is not `undefined`.\n */\nfunction deprecated(struct, log) {\n    return new Struct({\n        ...struct,\n        refiner: (value, ctx) => value === undefined || struct.refiner(value, ctx),\n        validator(value, ctx) {\n            if (value === undefined) {\n                return true;\n            }\n            else {\n                log(value, ctx);\n                return struct.validator(value, ctx);\n            }\n        },\n    });\n}\n/**\n * Create a struct with dynamic validation logic.\n *\n * The callback will receive the value currently being validated, and must\n * return a struct object to validate it with. This can be useful to model\n * validation logic that changes based on its input.\n */\nfunction dynamic(fn) {\n    return new Struct({\n        type: 'dynamic',\n        schema: null,\n        *entries(value, ctx) {\n            const struct = fn(value, ctx);\n            yield* struct.entries(value, ctx);\n        },\n        validator(value, ctx) {\n            const struct = fn(value, ctx);\n            return struct.validator(value, ctx);\n        },\n        coercer(value, ctx) {\n            const struct = fn(value, ctx);\n            return struct.coercer(value, ctx);\n        },\n        refiner(value, ctx) {\n            const struct = fn(value, ctx);\n            return struct.refiner(value, ctx);\n        },\n    });\n}\n/**\n * Create a struct with lazily evaluated validation logic.\n *\n * The first time validation is run with the struct, the callback will be called\n * and must return a struct object to use. This is useful for cases where you\n * want to have self-referential structs for nested data structures to avoid a\n * circular definition problem.\n */\nfunction lazy(fn) {\n    let struct;\n    return new Struct({\n        type: 'lazy',\n        schema: null,\n        *entries(value, ctx) {\n            struct ?? (struct = fn());\n            yield* struct.entries(value, ctx);\n        },\n        validator(value, ctx) {\n            struct ?? (struct = fn());\n            return struct.validator(value, ctx);\n        },\n        coercer(value, ctx) {\n            struct ?? (struct = fn());\n            return struct.coercer(value, ctx);\n        },\n        refiner(value, ctx) {\n            struct ?? (struct = fn());\n            return struct.refiner(value, ctx);\n        },\n    });\n}\n/**\n * Create a new struct based on an existing object struct, but excluding\n * specific properties.\n *\n * Like TypeScript's `Omit` utility.\n */\nfunction omit(struct, keys) {\n    const { schema } = struct;\n    const subschema = { ...schema };\n    for (const key of keys) {\n        delete subschema[key];\n    }\n    switch (struct.type) {\n        case 'type':\n            return type(subschema);\n        default:\n            return object(subschema);\n    }\n}\n/**\n * Create a new struct based on an existing object struct, but with all of its\n * properties allowed to be `undefined`.\n *\n * Like TypeScript's `Partial` utility.\n */\nfunction partial(struct) {\n    const isStruct = struct instanceof Struct;\n    const schema = isStruct ? { ...struct.schema } : { ...struct };\n    for (const key in schema) {\n        schema[key] = optional(schema[key]);\n    }\n    if (isStruct && struct.type === 'type') {\n        return type(schema);\n    }\n    return object(schema);\n}\n/**\n * Create a new struct based on an existing object struct, but only including\n * specific properties.\n *\n * Like TypeScript's `Pick` utility.\n */\nfunction pick(struct, keys) {\n    const { schema } = struct;\n    const subschema = {};\n    for (const key of keys) {\n        subschema[key] = schema[key];\n    }\n    switch (struct.type) {\n        case 'type':\n            return type(subschema);\n        default:\n            return object(subschema);\n    }\n}\n/**\n * Define a new struct type with a custom validation function.\n *\n * @deprecated This function has been renamed to `define`.\n */\nfunction struct(name, validator) {\n    console.warn('superstruct@0.11 - The `struct` helper has been renamed to `define`.');\n    return define(name, validator);\n}\n\n/**\n * Ensure that any value passes validation.\n */\nfunction any() {\n    return define('any', () => true);\n}\nfunction array(Element) {\n    return new Struct({\n        type: 'array',\n        schema: Element,\n        *entries(value) {\n            if (Element && Array.isArray(value)) {\n                for (const [i, v] of value.entries()) {\n                    yield [i, v, Element];\n                }\n            }\n        },\n        coercer(value) {\n            return Array.isArray(value) ? value.slice() : value;\n        },\n        validator(value) {\n            return (Array.isArray(value) ||\n                `Expected an array value, but received: ${print(value)}`);\n        },\n    });\n}\n/**\n * Ensure that a value is a bigint.\n */\nfunction bigint() {\n    return define('bigint', (value) => {\n        return typeof value === 'bigint';\n    });\n}\n/**\n * Ensure that a value is a boolean.\n */\nfunction boolean() {\n    return define('boolean', (value) => {\n        return typeof value === 'boolean';\n    });\n}\n/**\n * Ensure that a value is a valid `Date`.\n *\n * Note: this also ensures that the value is *not* an invalid `Date` object,\n * which can occur when parsing a date fails but still returns a `Date`.\n */\nfunction date() {\n    return define('date', (value) => {\n        return ((value instanceof Date && !isNaN(value.getTime())) ||\n            `Expected a valid \\`Date\\` object, but received: ${print(value)}`);\n    });\n}\nfunction enums(values) {\n    const schema = {};\n    const description = values.map((v) => print(v)).join();\n    for (const key of values) {\n        schema[key] = key;\n    }\n    return new Struct({\n        type: 'enums',\n        schema,\n        validator(value) {\n            return (values.includes(value) ||\n                `Expected one of \\`${description}\\`, but received: ${print(value)}`);\n        },\n    });\n}\n/**\n * Ensure that a value is a function.\n */\nfunction func() {\n    return define('func', (value) => {\n        return (typeof value === 'function' ||\n            `Expected a function, but received: ${print(value)}`);\n    });\n}\n/**\n * Ensure that a value is an instance of a specific class.\n */\nfunction instance(Class) {\n    return define('instance', (value) => {\n        return (value instanceof Class ||\n            `Expected a \\`${Class.name}\\` instance, but received: ${print(value)}`);\n    });\n}\n/**\n * Ensure that a value is an integer.\n */\nfunction integer() {\n    return define('integer', (value) => {\n        return ((typeof value === 'number' && !isNaN(value) && Number.isInteger(value)) ||\n            `Expected an integer, but received: ${print(value)}`);\n    });\n}\n/**\n * Ensure that a value matches all of a set of types.\n */\nfunction intersection(Structs) {\n    return new Struct({\n        type: 'intersection',\n        schema: null,\n        *entries(value, ctx) {\n            for (const S of Structs) {\n                yield* S.entries(value, ctx);\n            }\n        },\n        *validator(value, ctx) {\n            for (const S of Structs) {\n                yield* S.validator(value, ctx);\n            }\n        },\n        *refiner(value, ctx) {\n            for (const S of Structs) {\n                yield* S.refiner(value, ctx);\n            }\n        },\n    });\n}\nfunction literal(constant) {\n    const description = print(constant);\n    const t = typeof constant;\n    return new Struct({\n        type: 'literal',\n        schema: t === 'string' || t === 'number' || t === 'boolean' ? constant : null,\n        validator(value) {\n            return (value === constant ||\n                `Expected the literal \\`${description}\\`, but received: ${print(value)}`);\n        },\n    });\n}\nfunction map(Key, Value) {\n    return new Struct({\n        type: 'map',\n        schema: null,\n        *entries(value) {\n            if (Key && Value && value instanceof Map) {\n                for (const [k, v] of value.entries()) {\n                    yield [k, k, Key];\n                    yield [k, v, Value];\n                }\n            }\n        },\n        coercer(value) {\n            return value instanceof Map ? new Map(value) : value;\n        },\n        validator(value) {\n            return (value instanceof Map ||\n                `Expected a \\`Map\\` object, but received: ${print(value)}`);\n        },\n    });\n}\n/**\n * Ensure that no value ever passes validation.\n */\nfunction never() {\n    return define('never', () => false);\n}\n/**\n * Augment an existing struct to allow `null` values.\n */\nfunction nullable(struct) {\n    return new Struct({\n        ...struct,\n        validator: (value, ctx) => value === null || struct.validator(value, ctx),\n        refiner: (value, ctx) => value === null || struct.refiner(value, ctx),\n    });\n}\n/**\n * Ensure that a value is a number.\n */\nfunction number() {\n    return define('number', (value) => {\n        return ((typeof value === 'number' && !isNaN(value)) ||\n            `Expected a number, but received: ${print(value)}`);\n    });\n}\nfunction object(schema) {\n    const knowns = schema ? Object.keys(schema) : [];\n    const Never = never();\n    return new Struct({\n        type: 'object',\n        schema: schema ? schema : null,\n        *entries(value) {\n            if (schema && isObject(value)) {\n                const unknowns = new Set(Object.keys(value));\n                for (const key of knowns) {\n                    unknowns.delete(key);\n                    yield [key, value[key], schema[key]];\n                }\n                for (const key of unknowns) {\n                    yield [key, value[key], Never];\n                }\n            }\n        },\n        validator(value) {\n            return (isNonArrayObject(value) ||\n                `Expected an object, but received: ${print(value)}`);\n        },\n        coercer(value, ctx) {\n            if (!isNonArrayObject(value)) {\n                return value;\n            }\n            const coerced = { ...value };\n            // The `object` struct has special behaviour enabled by the mask flag.\n            // When masking, properties that are not in the schema are deleted from\n            // the coerced object instead of eventually failing validaiton.\n            if (ctx.mask && schema) {\n                for (const key in coerced) {\n                    if (schema[key] === undefined) {\n                        delete coerced[key];\n                    }\n                }\n            }\n            return coerced;\n        },\n    });\n}\n/**\n * Augment a struct to allow `undefined` values.\n */\nfunction optional(struct) {\n    return new Struct({\n        ...struct,\n        validator: (value, ctx) => value === undefined || struct.validator(value, ctx),\n        refiner: (value, ctx) => value === undefined || struct.refiner(value, ctx),\n    });\n}\n/**\n * Ensure that a value is an object with keys and values of specific types, but\n * without ensuring any specific shape of properties.\n *\n * Like TypeScript's `Record` utility.\n */\nfunction record(Key, Value) {\n    return new Struct({\n        type: 'record',\n        schema: null,\n        *entries(value) {\n            if (isObject(value)) {\n                for (const k in value) {\n                    const v = value[k];\n                    yield [k, k, Key];\n                    yield [k, v, Value];\n                }\n            }\n        },\n        validator(value) {\n            return (isNonArrayObject(value) ||\n                `Expected an object, but received: ${print(value)}`);\n        },\n        coercer(value) {\n            return isNonArrayObject(value) ? { ...value } : value;\n        },\n    });\n}\n/**\n * Ensure that a value is a `RegExp`.\n *\n * Note: this does not test the value against the regular expression! For that\n * you need to use the `pattern()` refinement.\n */\nfunction regexp() {\n    return define('regexp', (value) => {\n        return value instanceof RegExp;\n    });\n}\nfunction set(Element) {\n    return new Struct({\n        type: 'set',\n        schema: null,\n        *entries(value) {\n            if (Element && value instanceof Set) {\n                for (const v of value) {\n                    yield [v, v, Element];\n                }\n            }\n        },\n        coercer(value) {\n            return value instanceof Set ? new Set(value) : value;\n        },\n        validator(value) {\n            return (value instanceof Set ||\n                `Expected a \\`Set\\` object, but received: ${print(value)}`);\n        },\n    });\n}\n/**\n * Ensure that a value is a string.\n */\nfunction string() {\n    return define('string', (value) => {\n        return (typeof value === 'string' ||\n            `Expected a string, but received: ${print(value)}`);\n    });\n}\n/**\n * Ensure that a value is a tuple of a specific length, and that each of its\n * elements is of a specific type.\n */\nfunction tuple(Structs) {\n    const Never = never();\n    return new Struct({\n        type: 'tuple',\n        schema: null,\n        *entries(value) {\n            if (Array.isArray(value)) {\n                const length = Math.max(Structs.length, value.length);\n                for (let i = 0; i < length; i++) {\n                    yield [i, value[i], Structs[i] || Never];\n                }\n            }\n        },\n        validator(value) {\n            return (Array.isArray(value) ||\n                `Expected an array, but received: ${print(value)}`);\n        },\n        coercer(value) {\n            return Array.isArray(value) ? value.slice() : value;\n        },\n    });\n}\n/**\n * Ensure that a value has a set of known properties of specific types.\n *\n * Note: Unrecognized properties are allowed and untouched. This is similar to\n * how TypeScript's structural typing works.\n */\nfunction type(schema) {\n    const keys = Object.keys(schema);\n    return new Struct({\n        type: 'type',\n        schema,\n        *entries(value) {\n            if (isObject(value)) {\n                for (const k of keys) {\n                    yield [k, value[k], schema[k]];\n                }\n            }\n        },\n        validator(value) {\n            return (isNonArrayObject(value) ||\n                `Expected an object, but received: ${print(value)}`);\n        },\n        coercer(value) {\n            return isNonArrayObject(value) ? { ...value } : value;\n        },\n    });\n}\n/**\n * Ensure that a value matches one of a set of types.\n */\nfunction union(Structs) {\n    const description = Structs.map((s) => s.type).join(' | ');\n    return new Struct({\n        type: 'union',\n        schema: null,\n        coercer(value, ctx) {\n            for (const S of Structs) {\n                const [error, coerced] = S.validate(value, {\n                    coerce: true,\n                    mask: ctx.mask,\n                });\n                if (!error) {\n                    return coerced;\n                }\n            }\n            return value;\n        },\n        validator(value, ctx) {\n            const failures = [];\n            for (const S of Structs) {\n                const [...tuples] = run(value, S, ctx);\n                const [first] = tuples;\n                if (!first[0]) {\n                    return [];\n                }\n                else {\n                    for (const [failure] of tuples) {\n                        if (failure) {\n                            failures.push(failure);\n                        }\n                    }\n                }\n            }\n            return [\n                `Expected the value to satisfy a union of \\`${description}\\`, but received: ${print(value)}`,\n                ...failures,\n            ];\n        },\n    });\n}\n/**\n * Ensure that any value passes validation, without widening its type to `any`.\n */\nfunction unknown() {\n    return define('unknown', () => true);\n}\n\n/**\n * Augment a `Struct` to add an additional coercion step to its input.\n *\n * This allows you to transform input data before validating it, to increase the\n * likelihood that it passes validation—for example for default values, parsing\n * different formats, etc.\n *\n * Note: You must use `create(value, Struct)` on the value to have the coercion\n * take effect! Using simply `assert()` or `is()` will not use coercion.\n */\nfunction coerce(struct, condition, coercer) {\n    return new Struct({\n        ...struct,\n        coercer: (value, ctx) => {\n            return is(value, condition)\n                ? struct.coercer(coercer(value, ctx), ctx)\n                : struct.coercer(value, ctx);\n        },\n    });\n}\n/**\n * Augment a struct to replace `undefined` values with a default.\n *\n * Note: You must use `create(value, Struct)` on the value to have the coercion\n * take effect! Using simply `assert()` or `is()` will not use coercion.\n */\nfunction defaulted(struct, fallback, options = {}) {\n    return coerce(struct, unknown(), (x) => {\n        const f = typeof fallback === 'function' ? fallback() : fallback;\n        if (x === undefined) {\n            return f;\n        }\n        if (!options.strict && isPlainObject(x) && isPlainObject(f)) {\n            const ret = { ...x };\n            let changed = false;\n            for (const key in f) {\n                if (ret[key] === undefined) {\n                    ret[key] = f[key];\n                    changed = true;\n                }\n            }\n            if (changed) {\n                return ret;\n            }\n        }\n        return x;\n    });\n}\n/**\n * Augment a struct to trim string inputs.\n *\n * Note: You must use `create(value, Struct)` on the value to have the coercion\n * take effect! Using simply `assert()` or `is()` will not use coercion.\n */\nfunction trimmed(struct) {\n    return coerce(struct, string(), (x) => x.trim());\n}\n\n/**\n * Ensure that a string, array, map, or set is empty.\n */\nfunction empty(struct) {\n    return refine(struct, 'empty', (value) => {\n        const size = getSize(value);\n        return (size === 0 ||\n            `Expected an empty ${struct.type} but received one with a size of \\`${size}\\``);\n    });\n}\nfunction getSize(value) {\n    if (value instanceof Map || value instanceof Set) {\n        return value.size;\n    }\n    else {\n        return value.length;\n    }\n}\n/**\n * Ensure that a number or date is below a threshold.\n */\nfunction max(struct, threshold, options = {}) {\n    const { exclusive } = options;\n    return refine(struct, 'max', (value) => {\n        return exclusive\n            ? value < threshold\n            : value <= threshold ||\n                `Expected a ${struct.type} less than ${exclusive ? '' : 'or equal to '}${threshold} but received \\`${value}\\``;\n    });\n}\n/**\n * Ensure that a number or date is above a threshold.\n */\nfunction min(struct, threshold, options = {}) {\n    const { exclusive } = options;\n    return refine(struct, 'min', (value) => {\n        return exclusive\n            ? value > threshold\n            : value >= threshold ||\n                `Expected a ${struct.type} greater than ${exclusive ? '' : 'or equal to '}${threshold} but received \\`${value}\\``;\n    });\n}\n/**\n * Ensure that a string, array, map or set is not empty.\n */\nfunction nonempty(struct) {\n    return refine(struct, 'nonempty', (value) => {\n        const size = getSize(value);\n        return (size > 0 || `Expected a nonempty ${struct.type} but received an empty one`);\n    });\n}\n/**\n * Ensure that a string matches a regular expression.\n */\nfunction pattern(struct, regexp) {\n    return refine(struct, 'pattern', (value) => {\n        return (regexp.test(value) ||\n            `Expected a ${struct.type} matching \\`/${regexp.source}/\\` but received \"${value}\"`);\n    });\n}\n/**\n * Ensure that a string, array, number, date, map, or set has a size (or length, or time) between `min` and `max`.\n */\nfunction size(struct, min, max = min) {\n    const expected = `Expected a ${struct.type}`;\n    const of = min === max ? `of \\`${min}\\`` : `between \\`${min}\\` and \\`${max}\\``;\n    return refine(struct, 'size', (value) => {\n        if (typeof value === 'number' || value instanceof Date) {\n            return ((min <= value && value <= max) ||\n                `${expected} ${of} but received \\`${value}\\``);\n        }\n        else if (value instanceof Map || value instanceof Set) {\n            const { size } = value;\n            return ((min <= size && size <= max) ||\n                `${expected} with a size ${of} but received one with a size of \\`${size}\\``);\n        }\n        else {\n            const { length } = value;\n            return ((min <= length && length <= max) ||\n                `${expected} with a length ${of} but received one with a length of \\`${length}\\``);\n        }\n    });\n}\n/**\n * Augment a `Struct` to add an additional refinement to the validation.\n *\n * The refiner function is guaranteed to receive a value of the struct's type,\n * because the struct's existing validation will already have passed. This\n * allows you to layer additional validation on top of existing structs.\n */\nfunction refine(struct, name, refiner) {\n    return new Struct({\n        ...struct,\n        *refiner(value, ctx) {\n            yield* struct.refiner(value, ctx);\n            const result = refiner(value, ctx);\n            const failures = toFailures(result, ctx, struct, value);\n            for (const failure of failures) {\n                yield { ...failure, refinement: name };\n            }\n        },\n    });\n}\n\nexport { Struct, StructError, any, array, assert, assign, bigint, boolean, coerce, create, date, defaulted, define, deprecated, dynamic, empty, enums, func, instance, integer, intersection, is, lazy, literal, map, mask, max, min, never, nonempty, nullable, number, object, omit, optional, partial, pattern, pick, record, refine, regexp, set, size, string, struct, trimmed, tuple, type, union, unknown, validate };\n//# sourceMappingURL=index.mjs.map\n","import {\n  array,\n  assert,\n  func,\n  literal,\n  number,\n  object,\n  optional,\n  string,\n  define,\n  union,\n  type,\n  boolean,\n  coerce,\n  create,\n} from \"superstruct\";\n\ntype Schema = Record<string, any>;\n\n// Generic helper that coerces then validates and returns the normalized payload.\n// It preserves the original error style for your tests.\nfunction assertCustom(typeName: string, schema: Schema, payload: any) {\n  try {\n    // create() applies coercion (if any) before validating\n    return create(payload, object(schema));\n  } catch (error: any) {\n    throw new Error(\n      `assertion error: invalid ${typeName} payload: ${error.message}`,\n    );\n  }\n}\n\nconst component = union([\n  array(\n    object({\n      name: string(),\n      position: number(),\n    }),\n  ),\n  define(\"Element\", (value) => value instanceof Element),\n]);\n\nconst searchLevel = union([literal(\"primary\"), literal(\"secondary\")]);\n\nconst language = union([\n  literal(\"de\"),\n  literal(\"fr\"),\n  literal(\"it\"),\n  literal(\"en\"),\n]);\n\n// Coercion for loginStatus:\n// - Accept inputs: 0, 1, \"0\", \"1\", null\n// - Normalize to: \"0\" | \"1\" | undefined (undefined only when input is null/undefined)\n// Note: We coerce an optional struct so that null -> undefined happens before optional handling.\nconst LoginStatusNormalized = coerce(\n  optional(union([literal(\"0\"), literal(\"1\")])),\n  union([literal(0), literal(1), literal(\"0\"), literal(\"1\"), literal(null)]),\n  (v) => (v == null ? undefined : v === 1 || v === \"1\" ? \"1\" : \"0\"),\n);\n\nconst userSchema = object({\n  loginType: optional(string()),\n  // Use coercing loginStatus so numbers are accepted and normalized\n  loginStatus: LoginStatusNormalized,\n  language: optional(language),\n  UUID: optional(string()),\n  age: optional(string()),\n  gender: optional(union([literal(\"f\"), literal(\"m\"), literal(\"n\")])),\n  zipcode: optional(string()),\n});\n\nconst searchSchema = {\n  value: string(),\n  results: number(),\n  level: searchLevel,\n};\n\nconst pageLoaded = (payload: any) =>\n  assertCustom(\n    \"pageLoaded\",\n    {\n      pageInstanceID: string(),\n      pageID: optional(string()),\n      pageName: string(),\n      destinationURI: string(),\n      sysEnv: optional(string()),\n      language,\n      primaryCategory: string(),\n      errorCode: optional(string()),\n      errorMessage: optional(string()),\n      user: optional(userSchema),\n      search: optional(object(searchSchema)),\n      referrer: optional(string()),\n    },\n    payload,\n  );\n\nconst searchLoaded = (payload: any) =>\n  assertCustom(\"searchLoaded\", searchSchema, payload);\n\nconst genericSchema = {\n  component,\n  label: string(),\n  location: optional(string()),\n  variant: optional(string()),\n  detail: optional(string()),\n};\n\nconst accordion = (payload?: any) =>\n  assertCustom(\n    \"accordion\",\n    {\n      ...genericSchema,\n      action: union([literal(\"open\"), literal(\"close\")]),\n      headline: optional(string()),\n    },\n    payload,\n  );\n\nconst genericNavigationSchema = {\n  ...genericSchema,\n  destination: string(),\n  callback: optional(func()),\n};\n\nconst genericNavigation = (payload: any) =>\n  assertCustom(\"genericNavigation\", genericNavigationSchema, payload);\n\nconst customNavigation = (payload: any) =>\n  assertCustom(\n    \"customNavigation\",\n    {\n      ...genericNavigationSchema,\n      action: optional(string()),\n      primaryCategory: optional(string()),\n    },\n    payload,\n  );\n\nconst genericClick = (payload: any) =>\n  assertCustom(\"genericClick\", genericSchema, payload);\n\nconst teaserImpression = (payload: any) =>\n  assertCustom(\n    \"teaserImpression\",\n    {\n      ...genericSchema,\n      destination: optional(string()),\n      headline: string(),\n      topic: optional(string()),\n      mustRead: optional(boolean()),\n      isAccessibleExternally: optional(boolean()),\n      targetGroup: optional(array(string())),\n      theme: optional(array(string())),\n      division: optional(array(string())),\n      postType: optional(array(string())),\n      contentRegion: optional(array(string())),\n    },\n    payload,\n  );\n\nconst teaserNavigation = (payload: any) =>\n  assertCustom(\n    \"teaserNavigation\",\n    {\n      ...genericNavigationSchema,\n      headline: string(),\n      location: optional(string()),\n      variant: optional(string()),\n      detail: optional(string()),\n      topic: optional(string()),\n      mustRead: optional(boolean()),\n      isAccessibleExternally: optional(boolean()),\n      targetGroup: optional(array(string())),\n      theme: optional(array(string())),\n      division: optional(array(string())),\n      postType: optional(array(string())),\n      contentRegion: optional(array(string())),\n    },\n    payload,\n  );\n\nconst impression = (payload: any) =>\n  assertCustom(\n    \"impression\",\n    {\n      ...genericSchema,\n      headline: optional(string()),\n      type: string(),\n    },\n    payload,\n  );\n\nconst download = (payload: any) =>\n  assertCustom(\n    \"download\",\n    {\n      ...genericNavigationSchema,\n      filename: string(),\n    },\n    payload,\n  );\n\nconst searchResult = (payload: any) =>\n  assertCustom(\n    \"searchResult\",\n    {\n      ...genericNavigationSchema,\n      value: string(),\n      position: number(),\n      page: optional(number()),\n      level: searchLevel,\n      type: optional(union([literal(\"autosuggest\"), literal(\"most searched\")])),\n    },\n    payload,\n  );\n\nconst loginType = (payload: any) =>\n  assertCustom(\n    \"loginType\",\n    {\n      loginType: string(),\n    },\n    payload,\n  );\n\nconst customEvent = (payload: any) => {\n  const customEventType = type({\n    eventName: string(),\n    primaryCategory: string(),\n  });\n  try {\n    assert(payload, customEventType);\n  } catch (error: any) {\n    throw new Error(\n      `assertion error: invalid customEvent payload: ${error.message}`,\n    );\n  }\n};\n\nexport default {\n  pageLoaded,\n  searchLoaded,\n  accordion,\n  genericNavigation,\n  customNavigation,\n  genericClick,\n  teaserImpression,\n  teaserNavigation,\n  impression,\n  download,\n  searchResult,\n  loginType,\n  customEvent,\n};\n","(()=>{var e=[,function(e,t,r){var n;n=void 0!==r.g?r.g:this,e.exports=function(e){if(e.CSS&&e.CSS.escape)return e.CSS.escape;var t=function(e){if(0==arguments.length)throw new TypeError(\"`CSS.escape` requires an argument.\");for(var t,r=String(e),n=r.length,o=-1,a=\"\",i=r.charCodeAt(0);++o<n;)0!=(t=r.charCodeAt(o))?a+=t>=1&&t<=31||127==t||0==o&&t>=48&&t<=57||1==o&&t>=48&&t<=57&&45==i?\"\\\\\"+t.toString(16)+\" \":0==o&&1==n&&45==t||!(t>=128||45==t||95==t||t>=48&&t<=57||t>=65&&t<=90||t>=97&&t<=122)?\"\\\\\"+r.charAt(o):r.charAt(o):a+=\"�\";return a};return e.CSS||(e.CSS={}),e.CSS.escape=t,t}(n)}],t={};function r(n){var o=t[n];if(void 0!==o)return o.exports;var a=t[n]={exports:{}};return e[n].call(a.exports,a,a.exports,r),a.exports}r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.g=function(){if(\"object\"==typeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(e){if(\"object\"==typeof window)return window}}(),r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})};var n={};(()=>{\"use strict\";r.r(n),r.d(n,{domComponentPath:()=>e}),r(1);const e={get(e){const r=[];for(;e;){var n,a;const{name:i,selector:s}=o(e);r.unshift({name:i,position:t(e,s)+1}),e=null!==(n=e.parentElement)&&void 0!==n?n:null===(a=e.parentNode)||void 0===a?void 0:a.host}return r}};function t(e,t){var r,n;return null!==(r=e.parentNode)&&void 0!==r&&null!==(n=r.children)&&void 0!==n&&n.length?Array.from(e.parentNode.children).filter((e=>e.matches(t))).indexOf(e):0}function o(e){var t;const r=e.dataset.sitComponent;if(r)return{name:`Component: ${r}`,selector:`[data-sit-component=\"${r}\"]`};const n=e.id;if(n)return{name:`ID: ${n}`,selector:\"#\"+CSS.escape(n)};const o=null===(t=e.getAttribute(\"class\"))||void 0===t?void 0:t.replace(/\\s+/g,\" \").trim();if(o)return{name:`Class: ${o}`,selector:\".\"+o.split(\" \").join(\".\")};const a=e.tagName.toLowerCase();return{name:`Tag: ${a}`,selector:a}}})(),module.exports=n})();\n//# sourceMappingURL=index.js.map","function collectAllElementsDeep(root: HTMLElement) {\n  const allElements: HTMLElement[] = [];\n\n  const findAllElements = function (nodes: NodeListOf<HTMLElement>) {\n    for (let i = 0; i < nodes.length; i++) {\n      const el = nodes[i];\n      allElements.push(el);\n      if (el.shadowRoot) {\n        findAllElements(el.shadowRoot.querySelectorAll(\"*\"));\n      }\n    }\n  };\n  if (root.shadowRoot) {\n    findAllElements(root.shadowRoot.querySelectorAll(\"*\"));\n  }\n  findAllElements(root.querySelectorAll(\"*\"));\n  return allElements;\n}\n\nexport function querySelectorDeep(selector: string, rootNode = document.body) {\n  return collectAllElementsDeep(rootNode).find((element) =>\n    element.matches(selector),\n  );\n}\n\nexport function querySelectorAllDeep(\n  selector: string,\n  rootNode = document.body,\n) {\n  return collectAllElementsDeep(rootNode).filter((element) =>\n    element.matches(selector),\n  );\n}\n","import {\n  Category,\n  DataLayerEntry,\n  EventInfo,\n  PageAttributes,\n  UserProfileInfo,\n} from \"./types\";\n\nexport function setPageAttributes(obj: DataLayerEntry, value: PageAttributes) {\n  if (!obj.page) obj.page = {};\n  obj.page.attributes = value;\n}\n\nexport function setUserProfileInfo(\n  obj: DataLayerEntry,\n  value: UserProfileInfo,\n) {\n  if (!obj.user) obj.user = [];\n  if (!obj.user[0].profile) obj.user[0].profile = [];\n  if (!obj.user[0].profile[0].profileInfo)\n    obj.user[0].profile[0].profileInfo = {};\n  obj.user[0].profile[0].profileInfo = {\n    ...obj.user[0].profile[0].profileInfo,\n    ...value,\n  };\n}\n\nexport function setEventInfo(obj: DataLayerEntry, value: EventInfo) {\n  if (!obj.event) obj.event = {};\n  if (!obj.event.eventInfo) obj.event.eventInfo = {};\n  obj.event.eventInfo = { ...obj.event.eventInfo, ...value };\n}\n\nexport function setEventCategory(obj: DataLayerEntry, value: Category) {\n  if (!obj.event) obj.event = {};\n  if (!obj.event.category) obj.event.category = {};\n  obj.event.category = { ...obj.event.category, ...value };\n}\n","import assertPayload from \"./assert-payload\";\nimport { domComponentPath } from \"@swissfederalrailways/dom-component-path\";\nimport { querySelectorDeep } from \"./query-selector\";\nimport {\n  PageLoadedParameters,\n  DataLayerEntry,\n  SearchLoadedParameters,\n  TrackAccordionParameters,\n  ComponentPath,\n  NavigationParameters,\n  CustomEventParameters,\n  UserLoginTypeParameters,\n  TrackSearchResultNavigationParameters,\n  TrackDownloadParameters,\n  TrackImpressionParameters,\n  TrackTeaserNavigationParameters,\n  TrackTeaserImpressionParameters,\n  TrackCustomNavigationParameters,\n  EventParameters,\n} from \"./types\";\nimport {\n  setEventCategory,\n  setEventInfo,\n  setPageAttributes,\n  setUserProfileInfo,\n} from \"./utils\";\n\nexport const REDIRECTION_TIMEOUT = 300;\n\nwindow.digitalDataLayer = window.digitalDataLayer || [];\nlet callbackIsPending = false;\n\nfunction pushToDataLayer(entry: DataLayerEntry) {\n  if (!callbackIsPending) {\n    window.digitalDataLayer.push(entry);\n  }\n  if (entry.event?.eventInfo?.callback) {\n    callbackIsPending = true;\n  }\n}\n\nconst dataLayer = {\n  pageLoaded(params: PageLoadedParameters) {\n    // Coerce + validate in assertPayload; returns normalized values (loginStatus: '0' | '1' | undefined)\n    const coercedParams = assertPayload.pageLoaded(\n      params,\n    ) as PageLoadedParameters;\n\n    const normalizedLoginStatus = coercedParams.user?.loginStatus as\n      | \"0\"\n      | \"1\"\n      | undefined;\n\n    const pageLoadedObj: DataLayerEntry = {\n      pageInstanceID: coercedParams.pageInstanceID,\n      page: {\n        pageInfo: {\n          pageName: coercedParams.pageName,\n          destinationURL: window.location.href,\n          destinationURI: cleanCampaignQueryParams(\n            coercedParams.destinationURI,\n          ),\n          referringURL: coercedParams.referrer ?? document.referrer,\n          language: coercedParams.language,\n          pageID: coercedParams.pageID,\n          sysEnv: coercedParams.sysEnv,\n        },\n        category: {\n          primaryCategory: coercedParams.primaryCategory,\n        },\n      },\n      user: [\n        {\n          profile: [\n            {\n              profileInfo: {\n                loginStatus: normalizedLoginStatus ?? \"0\",\n                language:\n                  normalizedLoginStatus === \"1\"\n                    ? coercedParams.user?.language\n                    : coercedParams.language,\n                loginType: coercedParams.user?.loginType,\n              },\n            },\n          ],\n        },\n      ],\n    };\n    if (coercedParams.search) {\n      pageLoadedObj.search = getSearchDataLayerObject(coercedParams.search);\n    }\n    if (coercedParams.errorCode || coercedParams.errorMessage) {\n      setPageAttributes(pageLoadedObj, {\n        errorCode: coercedParams.errorCode,\n        errorMessage: coercedParams.errorMessage,\n      });\n    }\n    if (normalizedLoginStatus === \"1\") {\n      setUserProfileInfo(pageLoadedObj, {\n        UUID: coercedParams.user!.UUID,\n        age: coercedParams.user!.age,\n        gender: coercedParams.user!.gender,\n        zipcode: coercedParams.user!.zipcode,\n      });\n    }\n    pushToDataLayer(pageLoadedObj);\n  },\n\n  searchLoaded(params: SearchLoadedParameters) {\n    assertPayload.searchLoaded(params);\n    pushToDataLayer({ search: getSearchDataLayerObject(params) });\n  },\n\n  dataLayerReady() {\n    propagateAdditionalPageLoadDetails();\n    pushToDataLayer({\n      event: {\n        eventInfo: {\n          eventName: \"page data layer ready\",\n        },\n      },\n    });\n  },\n\n  trackAccordionAction(params: TrackAccordionParameters) {\n    assertPayload.accordion(params);\n\n    pushToDataLayer({\n      event: {\n        eventInfo: {\n          eventName: \"click\",\n          eventType: \"action\",\n          destination: \"\",\n          componentPath: convertToComponentPath(params.component),\n          label: params.label,\n          action: params.action,\n          headline: params.headline ?? \"\",\n        },\n        category: {\n          primaryCategory: \"accordion\",\n        },\n      },\n    });\n  },\n\n  trackGenericNavigation(params: NavigationParameters) {\n    assertPayload.genericNavigation(params);\n    pushToDataLayer(createGenericNavigationEvent(params));\n  },\n\n  trackGenericClick(params: EventParameters) {\n    assertPayload.genericClick(params);\n    pushToDataLayer({\n      event: {\n        eventInfo: {\n          eventName: \"click\",\n          eventType: \"action\",\n          destination: \"\",\n          componentPath: convertToComponentPath(params.component),\n          label: params.label,\n          location: params.location,\n          variant: params.variant,\n          detail: params.detail,\n        },\n        category: {\n          primaryCategory: \"generic navigation\",\n        },\n      },\n    });\n  },\n\n  trackTeaserImpression(params: TrackTeaserImpressionParameters) {\n    assertPayload.teaserImpression(params);\n    pushToDataLayer({\n      event: {\n        eventInfo: {\n          eventName: \"impression\",\n          eventType: \"\",\n          destination: params.destination,\n          componentPath: convertToComponentPath(params.component),\n          label: params.label,\n          headline: params.headline,\n          componentID: getComponentId(params),\n          location: params.location,\n          variant: params.variant,\n          detail: params.detail,\n          topic: params.topic,\n          mustRead: params.mustRead,\n          isAccessibleExternally: params.isAccessibleExternally,\n          targetGroup: params.targetGroup,\n          theme: params.theme,\n          division: params.division,\n          postType: params.postType,\n          contentRegion: params.contentRegion,\n        },\n        category: {\n          primaryCategory: \"teaser\",\n        },\n      },\n    });\n  },\n\n  trackTeaserNavigation(params: TrackTeaserNavigationParameters) {\n    assertPayload.teaserNavigation(params);\n    const eventObject = createGenericNavigationEvent(params);\n    setEventInfo(eventObject, {\n      componentID: getComponentId(params),\n      headline: params.headline,\n      location: params.location,\n      variant: params.variant,\n      detail: params.detail,\n      topic: params.topic,\n      mustRead: params.mustRead,\n      isAccessibleExternally: params.isAccessibleExternally,\n      targetGroup: params.targetGroup,\n      theme: params.theme,\n      division: params.division,\n      postType: params.postType,\n      contentRegion: params.contentRegion,\n    });\n    setEventCategory(eventObject, { primaryCategory: \"teaser\" });\n    pushToDataLayer(eventObject);\n  },\n\n  trackImpression(params: TrackImpressionParameters) {\n    assertPayload.impression(params);\n\n    pushToDataLayer({\n      event: {\n        eventInfo: {\n          eventName: \"impression\",\n          eventType: \"\",\n          componentPath: convertToComponentPath(params.component),\n          label: params.label,\n          headline: params.headline,\n          // optional fields go INSIDE eventInfo:\n          location: params.location,\n          variant: params.variant,\n          detail: params.detail,\n        },\n        category: {\n          primaryCategory: params.type,\n        },\n      },\n    });\n  },\n\n  trackDownload(params: TrackDownloadParameters) {\n    assertPayload.download(params);\n    const eventObject = createGenericNavigationEvent(params);\n    setEventInfo(eventObject, {\n      eventType: \"download\",\n      value: params.filename,\n    });\n    setEventCategory(eventObject, { primaryCategory: \"download\" });\n    pushToDataLayer(eventObject);\n  },\n\n  trackSearchResultNavigation(params: TrackSearchResultNavigationParameters) {\n    assertPayload.searchResult(params);\n    const eventObject = createGenericNavigationEvent(params);\n    setEventInfo(eventObject, {\n      action: `click on search result${params.type ? ` (${params.type})` : \"\"}`,\n      value: params.value,\n      resultPosition: params.position + 1,\n      resultPageNumber: params.page ? params.page + 1 : 1,\n    });\n    setEventCategory(eventObject, {\n      primaryCategory: `${params.level} search`,\n    });\n    pushToDataLayer(eventObject);\n  },\n\n  trackCustomNavigation(params: TrackCustomNavigationParameters) {\n    assertPayload.customNavigation(params);\n    const eventObject = createGenericNavigationEvent(params);\n    if (params.primaryCategory !== undefined) {\n      setEventCategory(eventObject, {\n        primaryCategory: params.primaryCategory,\n      });\n    }\n    if (params.action !== undefined) {\n      setEventInfo(eventObject, { action: params.action });\n    }\n    pushToDataLayer(eventObject);\n  },\n\n  updateUserLoginType(params: UserLoginTypeParameters) {\n    assertPayload.loginType(params);\n    pushToDataLayer({\n      user: [\n        {\n          profile: [\n            {\n              profileInfo: {\n                loginType: params.loginType,\n              },\n            },\n          ],\n        },\n      ],\n    });\n    pushToDataLayer({\n      event: {\n        eventInfo: {\n          eventName: \"user update\",\n        },\n      },\n    });\n  },\n\n  sendCustomEvent(params: CustomEventParameters) {\n    assertPayload.customEvent(params);\n    const { primaryCategory, ...eventInfoProperties } = params;\n    pushToDataLayer({\n      event: {\n        eventInfo: {\n          ...eventInfoProperties,\n        },\n        category: {\n          primaryCategory: primaryCategory,\n        },\n      },\n    });\n  },\n};\n\nexport default dataLayer;\n\nfunction getSearchDataLayerObject(params: {\n  level: string;\n  value: string;\n  results: number;\n}) {\n  return {\n    name: `${params.level} search`,\n    term: params.value,\n    results: params.results,\n    resultPageNumber: params.results === 0 ? 0 : 1,\n  };\n}\n\nfunction convertToComponentPath(path: Element | ComponentPath) {\n  if (path instanceof Element) {\n    return domComponentPath.get(path);\n  }\n  return path;\n}\n\nfunction getComponentId({\n  headline,\n  label,\n  destination,\n}: {\n  headline: string;\n  label: string;\n  destination: string;\n}) {\n  return `${headline}/${label}/${destination}`;\n}\n\nfunction wrapCallback(callback: () => void) {\n  function redirectCallback() {\n    clearTimeout(timeoutId);\n    callbackIsPending = false;\n    callback();\n  }\n\n  const timeoutId = setTimeout(redirectCallback, REDIRECTION_TIMEOUT);\n\n  return redirectCallback;\n}\n\nfunction createGenericNavigationEvent({\n  callback,\n  component,\n  label,\n  destination,\n  location,\n  variant,\n  detail,\n}: NavigationParameters) {\n  let eventType = destination === \"\" ? \"action\" : \"navigation\";\n  if (destination.startsWith(\"mailto:\")) eventType = \"mail\";\n  if (destination.startsWith(\"tel:\")) eventType = \"call\";\n\n  const eventObject: DataLayerEntry = {\n    event: {\n      eventInfo: {\n        eventName: \"click\",\n        eventType,\n        destination,\n        componentPath: convertToComponentPath(component),\n        label,\n        location,\n        variant,\n        detail,\n      },\n      category: {\n        primaryCategory: \"generic navigation\",\n      },\n    },\n  };\n\n  if (eventType === \"navigation\" && callback) {\n    setEventInfo(eventObject, { callback: wrapCallback(callback) });\n  }\n  return eventObject;\n}\n\nfunction cleanCampaignQueryParams(url: string) {\n  const anchor = document.createElement(\"a\");\n  anchor.href = url;\n  const search = anchor.search;\n\n  if (!search) {\n    return url;\n  }\n\n  const cleanedParams = search\n    .slice(1)\n    .split(\"&\")\n    .filter((param) => !param.startsWith(\"at_\"))\n    .join(\"&\");\n  const ie11LeadingSlashFix =\n    url.startsWith(\"/\") && !anchor.pathname.startsWith(\"/\") ? \"/\" : \"\";\n  if (!cleanedParams) {\n    return `${ie11LeadingSlashFix}${anchor.pathname}`;\n  }\n  return `${ie11LeadingSlashFix}${anchor.pathname}?${cleanedParams}`;\n}\n\nfunction propagateAdditionalPageLoadDetails() {\n  const element = querySelectorDeep(\"[data-sit-search-loaded]\");\n  if (element) {\n    try {\n      const parsedSearchLoaded = JSON.parse(\n        element.dataset.sitSearchLoaded ?? \"\",\n      );\n      dataLayer.searchLoaded(parsedSearchLoaded);\n    } catch (e) {\n      console.error(\"Could not parse given data-sit-search-loaded: \", e);\n    }\n  }\n}\n","export const dataPrefix = \"sit\";\n\nexport const dataAttributes = {\n  downloadLabel: `${dataPrefix}DownloadLabel`,\n  downloadFilename: `${dataPrefix}DownloadFilename`,\n  teaserLabel: `${dataPrefix}TeaserLabel`,\n  teaserHeadline: `${dataPrefix}TeaserHeadline`,\n  teaserTimeout: `${dataPrefix}TeaserTimeout`,\n  teaserImpressed: `${dataPrefix}TeaserImpressed`,\n  impressionType: `${dataPrefix}ImpressionType`,\n  impressionLabel: `${dataPrefix}ImpressionLabel`,\n  impressionHeadline: `${dataPrefix}ImpressionHeadline`,\n  impressionTimeout: `${dataPrefix}ImpressionTimeout`,\n  impressionImpressed: `${dataPrefix}ImpressionImpressed`,\n  searchResultLabel: `${dataPrefix}SearchResultLabel`,\n  searchValue: `${dataPrefix}SearchValue`,\n  searchResult: `${dataPrefix}SearchResult`,\n  searchResultLevel: `${dataPrefix}SearchResultLevel`,\n  searchResultPosition: `${dataPrefix}SearchResultPosition`,\n  searchResultPage: `${dataPrefix}SearchResultPage`,\n  action: `${dataPrefix}Action`,\n  location: `${dataPrefix}Location`,\n  detail: `${dataPrefix}Detail`,\n  variant: `${dataPrefix}Variant`,\n  topic: `${dataPrefix}Topic`, // data-sit-topic\n  mustRead: `${dataPrefix}MustRead`, // data-sit-mustread\n  isAccessibleExternally: `${dataPrefix}IsAccessibleExternally`, // data-sit-isaccessibleexternally\n  targetGroup: `${dataPrefix}TargetGroup`, // data-sit-targetgroup\n  theme: `${dataPrefix}Theme`, // data-sit-theme\n  division: `${dataPrefix}Division`, // data-sit-division\n  postType: `${dataPrefix}PostType`, // data-sit-posttype\n  contentRegion: `${dataPrefix}ContentRegion`, // data-sit-contentregion\n  primaryCategory: `${dataPrefix}PrimaryCategory`,\n  ignoreLabel: `${dataPrefix}IgnoreLabel`,\n};\n\nconst classesToIgnore: string[] = [];\n\nexport function ignoreTextOfElementsWith(...classNames: string[]) {\n  classesToIgnore.push(...classNames);\n}\n\nexport function getHrefFromTarget(target: HTMLElement) {\n  let href = (target as HTMLAnchorElement).href ?? target.dataset.sitHref;\n  if (href === undefined) {\n    return undefined;\n  }\n  if (href === window.location.href + \"#\") {\n    return \"\";\n  }\n  if (\n    !href.startsWith(\"http\") &&\n    !(href.startsWith(\"mailto:\") || href.startsWith(\"tel:\"))\n  ) {\n    href = document.location.origin + href;\n  }\n  if (href.endsWith(\"/\")) {\n    return href.slice(0, -1);\n  }\n  return href;\n}\n\nexport function getDataFromTargetOrThrow(target: HTMLElement, label: string) {\n  const data = target.dataset[label];\n  if (data === undefined) {\n    throwError(toKebabCase(label), data, target);\n  }\n  return data;\n}\n\nexport function tryGetDataFromTarget(target: HTMLElement, label: string) {\n  return target.dataset[label]?.trim();\n}\n\nfunction isIgnoredForLabel(element: HTMLElement) {\n  if (element.dataset?.[dataAttributes.ignoreLabel] !== undefined) {\n    return true;\n  }\n  return classesToIgnore.some((ignoredClass) =>\n    element.classList?.contains(ignoredClass),\n  );\n}\n\nfunction isInvisibleStyleDeclaration(style: CSSStyleDeclaration) {\n  return (\n    style.display === \"none\" ||\n    style.visibility === \"hidden\" ||\n    style.opacity === \"0\"\n  );\n}\n\nfunction isInvisibleContent(element: HTMLElement) {\n  if (element.nodeType !== Node.ELEMENT_NODE) {\n    return true;\n  }\n  const computedStyle = getComputedStyle(element);\n  if (!computedStyle) {\n    return true;\n  }\n  if (isIgnoredForLabel(element)) {\n    return true;\n  }\n  return isInvisibleStyleDeclaration(computedStyle);\n}\n\nfunction isTextNode(element: HTMLElement) {\n  return element.nodeType === Node.TEXT_NODE;\n}\n\nfunction isReferencedByInvisibleSlot(node: Node) {\n  const slot = (node as Element).assignedSlot;\n  if (slot) {\n    const style = getComputedStyle(slot);\n    return isInvisibleStyleDeclaration(style);\n  }\n  return false;\n}\n\nexport function getVisibleInnerText(element: HTMLElement) {\n  if (isReferencedByInvisibleSlot(element)) {\n    return \"\";\n  }\n  if (isTextNode(element)) {\n    return element.textContent;\n  }\n  if (isInvisibleContent(element)) {\n    return \"\";\n  }\n  return findTextInChildren(element, getVisibleInnerText);\n}\n\nexport function getInvisibleInnerText(element: HTMLElement) {\n  if (isTextNode(element)) {\n    return element.textContent;\n  }\n  return findTextInChildren(element, getInvisibleInnerText);\n}\n\nexport function getAriaLabel(element: HTMLElement) {\n  if (isTextNode(element)) {\n    return null;\n  }\n  const ariaLabel = element.getAttribute?.(\"aria-label\");\n  if (ariaLabel) {\n    return ariaLabel;\n  }\n  return findTextInChildren(element, getAriaLabel);\n}\n\nfunction isImageElement(element: any): element is HTMLImageElement {\n  return element.tagName?.toLowerCase() === \"img\";\n}\n\nexport function getAltText(element: HTMLElement) {\n  if (isImageElement(element) && element.alt) {\n    return element.alt;\n  }\n  return findTextInChildren(element, getAltText);\n}\n\nconst ignoredTags = [\"noscript\", \"style\", \"#comment\", \"#document-fragment\"];\n\nfunction isSlotElement(element: any): element is HTMLSlotElement {\n  return typeof element.assignedNodes === \"function\";\n}\n\nfunction findTextInChildren(\n  element: HTMLElement,\n  callback: (el: HTMLElement) => string | null,\n) {\n  let nodes;\n  if (isSlotElement(element)) {\n    nodes = element.assignedNodes();\n  } else {\n    nodes = Array.from(element.childNodes);\n  }\n\n  const elements = nodes.filter(\n    (node) => !ignoredTags.includes(node.nodeName.toLowerCase()),\n  ) as HTMLElement[];\n  return elements\n    .map((element) => element.dataset?.sitReplaceLabelWith ?? callback(element))\n    .join(\" \")\n    .trim()\n    .replace(/\\s+/g, \" \");\n}\n\nfunction throwError(attribute: string, givenValue: any, element: HTMLElement) {\n  let message;\n  if (typeof givenValue === \"string\") {\n    message = `The attribute \\`${attribute}\\` can not be empty on the following teaser: ${element.outerHTML}`;\n  } else {\n    message = `The attribute \\`${attribute}\\` is missing on the teaser: ${element.outerHTML}`;\n  }\n  throw new Error(message);\n}\n\nfunction toKebabCase(camelCase: string) {\n  return camelCase.replace(/([A-Z])/g, (match) => `-${match.toLowerCase()}`);\n}\n","type SitAttribute = `sit${string}`;\n\nexport function isHtmlElement(target: EventTarget): target is HTMLElement {\n  return target instanceof HTMLElement && target.nodeType === 1;\n}\n\nexport function closestDataSitAttribute(\n  composedPath: EventTarget[],\n  sitAttribute: SitAttribute,\n) {\n  if (!composedPath) return undefined;\n  for (const element of composedPath) {\n    if (\n      isHtmlElement(element) &&\n      element.dataset &&\n      element.dataset[sitAttribute]\n    ) {\n      return element.dataset[sitAttribute];\n    }\n  }\n  return undefined;\n}\n","import dataLayerApi from \"./dataLayerApi\";\nimport {\n  dataAttributes,\n  getDataFromTargetOrThrow,\n  getHrefFromTarget,\n  tryGetDataFromTarget,\n} from \"./get-data-from-entry\";\nimport { querySelectorAllDeep } from \"./query-selector\";\nimport { isHtmlElement } from \"./closest-data-sit-attribute\";\n\nexport const THRESHOLD = 300;\n\nexport function parseBoolean(value: string): boolean {\n  const v = value.trim().toLowerCase();\n  return v === \"true\" || v === \"1\";\n}\n\nexport function parseStringArray(value: string): string[] {\n  const trimmed = value.trim();\n  if (!trimmed) return [];\n  try {\n    const parsed = JSON.parse(trimmed);\n    if (Array.isArray(parsed) && parsed.every((x) => typeof x === \"string\")) {\n      return parsed;\n    }\n  } catch {\n    // fall through to CSV\n  }\n  return trimmed\n    .split(\",\")\n    .map((s) => s.trim())\n    .filter(Boolean);\n}\n\nconst teaserObserver = new IntersectionObserver(\n  (entries) => {\n    entries.forEach((entry) => {\n      if (isHtmlElement(entry.target)) {\n        const element = entry.target as HTMLElement;\n\n        if (!entry.isIntersecting) {\n          const timeoutId = element.dataset[dataAttributes.teaserTimeout];\n          if (timeoutId) {\n            clearTimeout(Number(timeoutId));\n          }\n          return;\n        }\n\n        element.dataset[dataAttributes.teaserTimeout] = String(\n          setTimeout(() => {\n            const destination = getHrefFromTarget(element) ?? \"\";\n\n            const label =\n              tryGetDataFromTarget(element, dataAttributes.teaserLabel) ?? \"\";\n\n            const headline = getDataFromTargetOrThrow(\n              element,\n              dataAttributes.teaserHeadline,\n            )!;\n\n            const location =\n              tryGetDataFromTarget(element, dataAttributes.location) ?? \"\";\n\n            const variant =\n              tryGetDataFromTarget(element, dataAttributes.variant) ?? \"\";\n\n            const detail =\n              tryGetDataFromTarget(element, dataAttributes.detail) ?? \"\";\n\n            const topic =\n              tryGetDataFromTarget(element, dataAttributes.topic) ?? \"\";\n            const mustRead = parseBoolean(\n              tryGetDataFromTarget(element, dataAttributes.mustRead) ?? \"\",\n            );\n            const isAccessibleExternally = parseBoolean(\n              tryGetDataFromTarget(\n                element,\n                dataAttributes.isAccessibleExternally,\n              ) ?? \"\",\n            );\n            const targetGroup = parseStringArray(\n              tryGetDataFromTarget(element, dataAttributes.targetGroup) ?? \"\",\n            );\n            const theme = parseStringArray(\n              tryGetDataFromTarget(element, dataAttributes.theme) ?? \"\",\n            );\n            const division = parseStringArray(\n              tryGetDataFromTarget(element, dataAttributes.division) ?? \"\",\n            );\n            const postType = parseStringArray(\n              tryGetDataFromTarget(element, dataAttributes.postType) ?? \"\",\n            );\n            const contentRegion = parseStringArray(\n              tryGetDataFromTarget(element, dataAttributes.contentRegion) ?? \"\",\n            );\n\n            dataLayerApi.trackTeaserImpression({\n              destination,\n              label,\n              headline,\n              component: element,\n              location,\n              variant,\n              detail,\n              topic,\n              mustRead,\n              isAccessibleExternally,\n              targetGroup,\n              theme,\n              division,\n              postType,\n              contentRegion,\n            });\n\n            element.dataset[dataAttributes.teaserImpressed] = \"\";\n            unobserveTeaserElement(element);\n          }, THRESHOLD),\n        );\n      }\n    });\n  },\n  { rootMargin: \"0px 0px -30% 0px\" },\n);\n\nexport function startObservingTeaserElements() {\n  Array.from(\n    querySelectorAllDeep('[data-sit-teaser]:not([data-sit-teaser=\"manual\"])'),\n  ).forEach((element) => observeTeaserElement(element));\n}\n\nexport function unobserveTeaserElement(element: HTMLElement) {\n  teaserObserver.unobserve(element);\n}\n\nexport function observeTeaserElement(element: HTMLElement) {\n  if (element.dataset[dataAttributes.teaserImpressed] === undefined) {\n    teaserObserver.observe(element);\n  }\n}\n\nconst impressionObserver = new IntersectionObserver(\n  (entries) => {\n    entries.forEach((entry) => {\n      if (isHtmlElement(entry.target)) {\n        const element = entry.target;\n        if (!entry.isIntersecting) {\n          const timeoutId = element.dataset[dataAttributes.impressionTimeout];\n          if (timeoutId) {\n            clearTimeout(timeoutId);\n          }\n          return;\n        }\n\n        element.dataset[dataAttributes.impressionTimeout] = String(\n          setTimeout(() => {\n            dataLayerApi.trackImpression({\n              type: getDataFromTargetOrThrow(\n                element,\n                dataAttributes.impressionType,\n              )!,\n              label:\n                tryGetDataFromTarget(element, dataAttributes.impressionLabel) ??\n                \"\",\n              headline:\n                tryGetDataFromTarget(\n                  element,\n                  dataAttributes.impressionHeadline,\n                ) ?? \"\",\n              component: element,\n              location:\n                tryGetDataFromTarget(element, dataAttributes.location) ?? \"\",\n              variant:\n                tryGetDataFromTarget(element, dataAttributes.variant) ?? \"\",\n              detail:\n                tryGetDataFromTarget(element, dataAttributes.detail) ?? \"\",\n            });\n            element.dataset[dataAttributes.teaserImpressed] = \"\";\n            unobserveImpressionElement(element);\n          }, THRESHOLD),\n        );\n      }\n    });\n  },\n  { rootMargin: \"0px 0px 0px 0px\" },\n);\n\nexport function startObservingImpressionElements() {\n  Array.from(querySelectorAllDeep(\"[data-sit-impression]\")).forEach((element) =>\n    observeImpressionElement(element),\n  );\n}\n\nexport function unobserveImpressionElement(element: HTMLElement) {\n  impressionObserver.unobserve(element);\n}\n\nexport function observeImpressionElement(element: HTMLElement) {\n  if (element.dataset[dataAttributes.teaserImpressed] === undefined) {\n    impressionObserver.observe(element);\n  }\n}\n","export default {\n  redirectTo(url: string) {\n    window.location.assign(url);\n  },\n};\n","import { isHtmlElement } from \"./closest-data-sit-attribute\";\n\nexport function closestElement<T extends HTMLElement>(\n  composedPath: EventTarget[],\n  selector: string,\n) {\n  return composedPath\n    .filter(isHtmlElement)\n    .find((element) => element.matches(selector)) as T | undefined;\n}\n","import dataLayerApi from \"./dataLayerApi\";\nimport windowFacade from \"./window-facade\";\nimport {\n  dataAttributes,\n  getAltText,\n  getAriaLabel,\n  getDataFromTargetOrThrow,\n  getHrefFromTarget,\n  getInvisibleInnerText,\n  getVisibleInnerText,\n  tryGetDataFromTarget,\n} from \"./get-data-from-entry\";\nimport { closestElement } from \"./closest-element\";\nimport {\n  closestDataSitAttribute,\n  isHtmlElement,\n} from \"./closest-data-sit-attribute\";\nimport { parseStringArray, parseBoolean } from \"./impression-tracker\";\nimport { SearchLevel } from \"./types\";\n\nconst interactiveTags = [\"a\", \"button\"];\n\nfunction clickHandler(event: MouseEvent) {\n  const composedPath = event.composedPath();\n  const navigationElement = closestElement(\n    composedPath,\n    \"a[href], [data-sit-href], [data-sit-ignore-clicks]\",\n  );\n  const location = closestDataSitAttribute(composedPath, \"sitLocation\");\n  const variant = closestDataSitAttribute(composedPath, \"sitVariant\");\n  const detail = closestDataSitAttribute(composedPath, \"sitDetail\");\n  const elements = composedPath.filter((element) =>\n    isHtmlElement(element),\n  ) as HTMLElement[];\n  if (navigationElement) {\n    if (navigationElement.dataset.sitIgnoreClicks) {\n      return;\n    }\n\n    handleNavigationClick(\n      event,\n      elements,\n      navigationElement,\n      location,\n      variant,\n      detail,\n    );\n  } else {\n    const formWithAction = closestElement<HTMLFormElement>(\n      composedPath,\n      \"form[action]\",\n    );\n    const submitElement = closestElement(\n      composedPath,\n      'button[type=\"submit\"], button:not([type]), input[type=\"submit\"]',\n    );\n    if (formWithAction && submitElement) {\n      handleFormSubmitClick(\n        submitElement,\n        formWithAction.action,\n        location,\n        variant,\n        detail,\n      );\n    } else {\n      handleGenericClick(elements, location, variant, detail);\n    }\n  }\n}\n\nfunction isSelectElement(element: any): element is HTMLSelectElement {\n  return element.tagName?.toLowerCase() === \"select\";\n}\n\nfunction findUsefulLabelInChildren(element: HTMLElement) {\n  if (isSelectElement(element)) {\n    return element.options[element.selectedIndex]?.textContent?.trim();\n  }\n  if (element.dataset?.sitReplaceLabelWith !== undefined) {\n    return element.dataset.sitReplaceLabelWith;\n  }\n\n  const visibleText =\n    getVisibleInnerText(element) ||\n    getAltText(element) ||\n    getAriaLabel(element);\n  if (\n    interactiveTags.includes(element.tagName?.toLowerCase() ?? \"\") &&\n    visibleText === \"\"\n  ) {\n    return getInvisibleInnerText(element);\n  }\n  return visibleText;\n}\n\nfunction findUsefulLabel([currentElement, ...parents]: HTMLElement[]): string {\n  if (currentElement === document.body) {\n    return \"\";\n  }\n  return (\n    findUsefulLabelInChildren(currentElement) || findUsefulLabel(parents) || \"\"\n  );\n}\n\nfunction handleGenericClick(\n  composedPath: HTMLElement[],\n  location?: string,\n  variant?: string,\n  detail?: string,\n) {\n  dataLayerApi.trackGenericClick({\n    component: composedPath[0],\n    label: findUsefulLabel(composedPath),\n    location,\n    variant,\n    detail,\n  });\n}\n\nfunction isInputElement(element: any): element is HTMLInputElement {\n  return element.tagName.toLowerCase() === \"input\";\n}\n\nfunction handleFormSubmitClick(\n  element: HTMLElement,\n  destination: string,\n  location?: string,\n  variant?: string,\n  detail?: string,\n) {\n  dataLayerApi.trackGenericNavigation({\n    destination,\n    component: element,\n    label: isInputElement(element)\n      ? element.value\n      : (findUsefulLabelInChildren(element) ?? \"\"),\n    location,\n    variant,\n    detail,\n  });\n}\n\nfunction handleNavigationClick(\n  event: MouseEvent,\n  composedPath: HTMLElement[],\n  element: HTMLElement,\n  location?: string,\n  variant?: string,\n  detail?: string,\n) {\n  const destination = getHrefFromTarget(element) ?? \"\";\n  const payload = {\n    component: element,\n    destination,\n    location,\n    variant,\n    detail,\n    callback: undefined as (() => void) | undefined,\n  };\n\n  if (\n    !isExternalLink(destination ?? \"\") &&\n    !isClickOpeningNewWindow(element, event) &&\n    !event.defaultPrevented\n  ) {\n    payload.callback = () =>\n      windowFacade.redirectTo(\n        (element as HTMLAnchorElement).href ?? element.dataset.sitHref,\n      );\n    event.preventDefault();\n  }\n\n  const teaser = closestElement(composedPath, \"[data-sit-teaser]\");\n  if (teaser) {\n    dataLayerApi.trackTeaserNavigation({\n      ...payload,\n      label: tryGetDataFromTarget(teaser, dataAttributes.teaserLabel) ?? \"\",\n      headline: getDataFromTargetOrThrow(\n        teaser,\n        dataAttributes.teaserHeadline,\n      )!,\n      topic: tryGetDataFromTarget(teaser, dataAttributes.topic) ?? \"\",\n      mustRead: parseBoolean(\n        tryGetDataFromTarget(teaser, dataAttributes.mustRead) ?? \"\",\n      ),\n      isAccessibleExternally: parseBoolean(\n        tryGetDataFromTarget(teaser, dataAttributes.isAccessibleExternally) ??\n          \"\",\n      ),\n      targetGroup: parseStringArray(\n        tryGetDataFromTarget(teaser, dataAttributes.targetGroup) ?? \"\",\n      ),\n      theme: parseStringArray(\n        tryGetDataFromTarget(teaser, dataAttributes.theme) ?? \"\",\n      ),\n      division: parseStringArray(\n        tryGetDataFromTarget(teaser, dataAttributes.division) ?? \"\",\n      ),\n      postType: parseStringArray(\n        tryGetDataFromTarget(teaser, dataAttributes.postType) ?? \"\",\n      ),\n      contentRegion: parseStringArray(\n        tryGetDataFromTarget(teaser, dataAttributes.contentRegion) ?? \"\",\n      ),\n    });\n    return;\n  }\n\n  if (isMarkedDownload(element)) {\n    dataLayerApi.trackDownload({\n      ...payload,\n      label: getDataFromTargetOrThrow(element, dataAttributes.downloadLabel)!,\n      filename: getDataFromTargetOrThrow(\n        element,\n        dataAttributes.downloadFilename,\n      )!,\n    });\n    return;\n  }\n\n  if (isUnmarkedDownload(destination ?? \"\")) {\n    dataLayerApi.trackDownload({\n      ...payload,\n      label: findUsefulLabelInChildren(element) ?? \"\",\n      filename: (destination ?? \"\").match(/.*\\/(.+?)$/)?.[1] ?? \"\",\n    });\n    return;\n  }\n\n  const searchResult = closestElement(composedPath, \"[data-sit-search-result]\");\n  if (searchResult) {\n    dataLayerApi.trackSearchResultNavigation({\n      ...payload,\n      label: getDataFromTargetOrThrow(\n        searchResult,\n        dataAttributes.searchResultLabel,\n      )!,\n      value: getDataFromTargetOrThrow(\n        searchResult,\n        dataAttributes.searchValue,\n      )!,\n      position: Number(\n        getDataFromTargetOrThrow(\n          searchResult,\n          dataAttributes.searchResultPosition,\n        ),\n      ),\n      page: Number(\n        getDataFromTargetOrThrow(searchResult, dataAttributes.searchResultPage),\n      ),\n      level: getDataFromTargetOrThrow(\n        searchResult,\n        dataAttributes.searchResultLevel,\n      ) as SearchLevel,\n    });\n    return;\n  }\n\n  if (isCustomNavigation(element)) {\n    dataLayerApi.trackCustomNavigation({\n      ...payload,\n      label: findUsefulLabelInChildren(element) ?? \"\",\n      action: tryGetDataFromTarget(element, dataAttributes.action),\n      primaryCategory: tryGetDataFromTarget(\n        element,\n        dataAttributes.primaryCategory,\n      ),\n    });\n    return;\n  }\n\n  dataLayerApi.trackGenericNavigation({\n    ...payload,\n    label: findUsefulLabelInChildren(element) ?? \"\",\n  });\n}\n\nfunction isCustomNavigation(element: HTMLElement) {\n  return (\n    typeof element.dataset[dataAttributes.primaryCategory] === \"string\" ||\n    typeof element.dataset[dataAttributes.action] === \"string\"\n  );\n}\n\nfunction isMarkedDownload(element: HTMLElement) {\n  return element.hasAttribute(\"data-sit-download\");\n}\n\nfunction isUnmarkedDownload(destination: string) {\n  return destination.match(/.*\\/(.+?\\.(?:pdf|docx?|xlsx?))$/);\n}\n\nfunction isExternalLink(url: string) {\n  return url.startsWith(\"mailto:\") || url.startsWith(\"tel:\");\n}\n\nfunction isClickOpeningNewWindow(element: HTMLElement, event: MouseEvent) {\n  return (\n    element.getAttribute(\"target\") === \"_blank\" ||\n    event.ctrlKey ||\n    event.shiftKey ||\n    event.metaKey ||\n    event.altKey ||\n    event.button === 2\n  );\n}\n\nexport function registerGlobalClickTracker() {\n  document.addEventListener(\"click\", clickHandler);\n}\n\nexport function unregisterGlobalClickTracker() {\n  document.removeEventListener(\"click\", clickHandler);\n}\n","import {\n  observeTeaserElement,\n  observeImpressionElement,\n  startObservingImpressionElements,\n  startObservingTeaserElements,\n  unobserveTeaserElement,\n  unobserveImpressionElement,\n} from \"./impression-tracker\";\nimport dataLayerApi from \"./dataLayerApi\";\nimport {\n  registerGlobalClickTracker,\n  unregisterGlobalClickTracker,\n} from \"./global-click-tracker\";\nimport { ignoreTextOfElementsWith } from \"./get-data-from-entry\";\n\nexport const version = __PACKAGE_VERSION__;\n\nexport function scanForElementsToTrack() {\n  startObservingTeaserElements();\n  startObservingImpressionElements();\n  unregisterGlobalClickTracker();\n  registerGlobalClickTracker();\n}\n\nexport {\n  dataLayerApi,\n  observeTeaserElement,\n  unobserveTeaserElement,\n  observeImpressionElement,\n  unobserveImpressionElement,\n  ignoreTextOfElementsWith,\n};\n"],"names":["StructError","failure","failures","cached","message","explanation","rest","path","msg","isIterable","x","isObject","isNonArrayObject","print","value","shiftIterator","input","done","toFailure","result","context","struct","branch","type","refinement","toFailures","r","run","options","coerce","mask","ctx","status","k","v","s","ts","t","Struct","props","schema","validator","refiner","coercer","entries","assert","create","is","validate","tuples","tuple","define","name","array","Element","i","boolean","func","literal","constant","description","never","number","object","knowns","Never","unknowns","key","coerced","optional","string","keys","union","Structs","S","error","first","condition","assertCustom","typeName","payload","component","searchLevel","language","LoginStatusNormalized","userSchema","searchSchema","pageLoaded","searchLoaded","genericSchema","accordion","genericNavigationSchema","genericNavigation","customNavigation","genericClick","teaserImpression","teaserNavigation","impression","download","searchResult","loginType","customEvent","customEventType","assertPayload","e","n","o","a","distModule","collectAllElementsDeep","root","allElements","findAllElements","nodes","el","querySelectorDeep","selector","rootNode","element","querySelectorAllDeep","setPageAttributes","obj","setUserProfileInfo","setEventInfo","setEventCategory","REDIRECTION_TIMEOUT","callbackIsPending","pushToDataLayer","entry","_b","_a","dataLayer","params","coercedParams","normalizedLoginStatus","pageLoadedObj","cleanCampaignQueryParams","_c","getSearchDataLayerObject","propagateAdditionalPageLoadDetails","convertToComponentPath","createGenericNavigationEvent","getComponentId","eventObject","primaryCategory","eventInfoProperties","domComponentPath","headline","label","destination","wrapCallback","callback","redirectCallback","timeoutId","location","variant","detail","eventType","url","anchor","search","cleanedParams","param","ie11LeadingSlashFix","parsedSearchLoaded","dataPrefix","dataAttributes","classesToIgnore","ignoreTextOfElementsWith","classNames","getHrefFromTarget","target","href","getDataFromTargetOrThrow","data","throwError","toKebabCase","tryGetDataFromTarget","isIgnoredForLabel","ignoredClass","isInvisibleStyleDeclaration","style","isInvisibleContent","computedStyle","isTextNode","isReferencedByInvisibleSlot","node","slot","getVisibleInnerText","findTextInChildren","getInvisibleInnerText","getAriaLabel","ariaLabel","isImageElement","getAltText","ignoredTags","isSlotElement","attribute","givenValue","camelCase","match","isHtmlElement","closestDataSitAttribute","composedPath","sitAttribute","THRESHOLD","parseBoolean","parseStringArray","trimmed","parsed","teaserObserver","topic","mustRead","isAccessibleExternally","targetGroup","theme","division","postType","contentRegion","dataLayerApi","unobserveTeaserElement","startObservingTeaserElements","observeTeaserElement","impressionObserver","unobserveImpressionElement","startObservingImpressionElements","observeImpressionElement","windowFacade","closestElement","interactiveTags","clickHandler","event","navigationElement","elements","handleNavigationClick","formWithAction","submitElement","handleFormSubmitClick","handleGenericClick","isSelectElement","findUsefulLabelInChildren","visibleText","_d","findUsefulLabel","currentElement","parents","isInputElement","isExternalLink","isClickOpeningNewWindow","teaser","isMarkedDownload","isUnmarkedDownload","isCustomNavigation","registerGlobalClickTracker","unregisterGlobalClickTracker","version","scanForElementsToTrack"],"mappings":"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","x_google_ignoreList":[0,2]}