{"version":3,"file":"main.mjs","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","_a","_b","dataLayer","params","_c","coercedParams","normalizedLoginStatus","pageLoadedObj","cleanCampaignQueryParams","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","_d","visibleText","findUsefulLabel","currentElement","parents","isInputElement","isExternalLink","isClickOpeningNewWindow","teaser","isMarkedDownload","isUnmarkedDownload","isCustomNavigation","registerGlobalClickTracker","unregisterGlobalClickTracker","version","scanForElementsToTrack"],"mappings":"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","x_google_ignoreList":[0,2]}