{"version":3,"file":"9818.2f895944d1707ab4b30a.js","mappings":"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","sources":["webpack://gyldendal-uddannelse/./node_modules/prop-types/factoryWithThrowingShims.js","webpack://gyldendal-uddannelse/./node_modules/prop-types/index.js","webpack://gyldendal-uddannelse/./node_modules/prop-types/lib/ReactPropTypesSecret.js","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactComponents/Shared/ResponsiveImage/responsive-image.tsx","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/js/utils/string.ts","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactComponents/Shared/ArrowLink/arrow-link.js","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactComponents/Shared/CustomPrimaryCtaButton/custom-primary-cta-button.js","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactComponents/Shared/Tag/tag.js","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/hooks/useElementSize.ts","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactComponents/TeaserGrid/TeaserTile/teaser-tile.js","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactComponents/Shared/TitleLinkTop/title-link-top.js","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactComponents/TeaserGrid/TeaserGridVideoModal/teaser-grid-video.js","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactComponents/TeaserGrid/teaser-grid.js","webpack://gyldendal-uddannelse/./src/Foundation/Frontend/ReactViews/TeaserGrid/teaser-grid-view.js"],"sourcesContent":["/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n  function shim(props, propName, componentName, location, propFullName, secret) {\n    if (secret === ReactPropTypesSecret) {\n      // It is still safe when called from React.\n      return;\n    }\n    var err = new Error(\n      'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n      'Use PropTypes.checkPropTypes() to call them. ' +\n      'Read more at http://fb.me/use-check-prop-types'\n    );\n    err.name = 'Invariant Violation';\n    throw err;\n  };\n  shim.isRequired = shim;\n  function getShim() {\n    return shim;\n  };\n  // Important!\n  // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n  var ReactPropTypes = {\n    array: shim,\n    bigint: shim,\n    bool: shim,\n    func: shim,\n    number: shim,\n    object: shim,\n    string: shim,\n    symbol: shim,\n\n    any: shim,\n    arrayOf: getShim,\n    element: shim,\n    elementType: shim,\n    instanceOf: getShim,\n    node: shim,\n    objectOf: getShim,\n    oneOf: getShim,\n    oneOfType: getShim,\n    shape: getShim,\n    exact: getShim,\n\n    checkPropTypes: emptyFunctionWithReset,\n    resetWarningCache: emptyFunction\n  };\n\n  ReactPropTypes.PropTypes = ReactPropTypes;\n\n  return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n  var ReactIs = require('react-is');\n\n  // By explicitly using `prop-types` you are opting into new development behavior.\n  // http://fb.me/prop-types-in-prod\n  var throwOnDirectAccess = true;\n  module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n  // By explicitly using `prop-types` you are opting into new production behavior.\n  // http://fb.me/prop-types-in-prod\n  module.exports = require('./factoryWithThrowingShims')();\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","import React from \"react\";\r\n\r\nconst hasExistingQueryParam = (url: string) => url.indexOf(\"?\") > -1;\r\n\r\nconst getQueryParamDelimiter = (url: string) => (hasExistingQueryParam(url) ? \"&\" : \"?\");\r\n\r\nconst generateSrcSet = (srcSetSizes: number[], srcUrl: string) => {\r\n    const generateSrcSetString = (srcSetSize: number) => {\r\n        const parameterDelimiter = getQueryParamDelimiter(srcUrl);\r\n        const srcSetSizeHighDensity = Math.round(srcSetSize * 1.5);\r\n\r\n        return `\r\n            ${srcUrl}${parameterDelimiter}w=${srcSetSize} ${srcSetSize}w,\r\n            ${srcUrl}${parameterDelimiter}w=${srcSetSizeHighDensity} ${srcSetSizeHighDensity}w\r\n        `;\r\n    };\r\n\r\n    return srcSetSizes.map(generateSrcSetString).join(\", \");\r\n};\r\n\r\ninterface ResponsiveImageProps\r\n    extends React.DetailedHTMLProps<React.ImgHTMLAttributes<HTMLImageElement>, HTMLImageElement> {\r\n    srcUrl: string;\r\n    defaultSize: number;\r\n    srcSetSizes: number[];\r\n    role?: string;\r\n}\r\n\r\nconst ResponsiveImage = (props: ResponsiveImageProps) => {\r\n    const { srcUrl, defaultSize, srcSetSizes, role, ...rest } = props;\r\n    const src = `${srcUrl}${getQueryParamDelimiter(srcUrl)}w=${defaultSize}`;\r\n    const srcSet = srcSetSizes ? generateSrcSet(srcSetSizes, srcUrl) : \"\";\r\n\r\n    return <img src={src} srcSet={srcSet} loading=\"lazy\" alt={props.alt} role={role} {...rest} />;\r\n};\r\n\r\nexport default ResponsiveImage;\r\n","export const kebabCase = (string: string) =>\r\n    string\r\n        .replace(/([a-z])([A-Z])/g, \"$1-$2\")\r\n        .replace(/[\\s_]+/g, \"-\")\r\n        .toLowerCase();\r\n","import React from \"react\";\r\nimport classNames from \"classnames\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nconst ArrowLink = props => {\r\n    const rootClasses = classNames(\"arrow-link\", props.ClassName, {\r\n        [`${props.CtaTextColorClass}--text`]: props.CtaTextColorClass\r\n    });\r\n\r\n    return <div className={rootClasses} dangerouslySetInnerHTML={{ __html: props.CtaLink }} />;\r\n};\r\n\r\nArrowLink.propTypes = {\r\n    ClassName: PropTypes.string,\r\n    CtaLink: PropTypes.string,\r\n    CtaTextColorClass: PropTypes.string\r\n};\r\n\r\nexport default ArrowLink;\r\n","import React from \"react\";\r\nimport classNames from \"classnames\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nconst CustomPrimaryCtaButton = props => {\r\n    const rootClasses = classNames(\"custom-primary-cta-button\", props.ClassName, {\r\n        [`${props.CtaBackgroundColorClass}--bg`]: props.CtaBackgroundColorClass,\r\n        [`${props.CtaTextColorClass}--text`]: props.CtaTextColorClass\r\n    });\r\n\r\n    return <div className={rootClasses} dangerouslySetInnerHTML={{ __html: props.CtaLink }} />;\r\n};\r\n\r\nCustomPrimaryCtaButton.propTypes = {\r\n    ClassName: PropTypes.string,\r\n    CtaLink: PropTypes.string,\r\n    CtaTextColorClass: PropTypes.string,\r\n    CtaBackgroundColorClass: PropTypes.string\r\n};\r\n\r\nexport default CustomPrimaryCtaButton;\r\n","import * as React from \"react\";\r\nimport classNames from \"classnames\";\r\n\r\nconst Tag = ({ className, children }) => {\r\n    const rootClasses = classNames(\"tag\", className);\r\n\r\n    return <div className={rootClasses}>{children}</div>;\r\n};\r\n\r\nexport default Tag;\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { useRef, useLayoutEffect, useState, RefObject, useMemo } from \"react\";\r\n\r\ninterface SubscribeToSizeChanges {\r\n    (el: HTMLElement, resizeCallback: (entries: any) => void): () => void;\r\n    observerSingleton?: ResizeObserver;\r\n    callbacks: Map<HTMLElement, (entries: any) => void>;\r\n}\r\n\r\nconst subscribe: SubscribeToSizeChanges = Object.assign(\r\n    (el: HTMLElement, resizeCallback: (entries: any) => void) => {\r\n        subscribe.callbacks.set(el, resizeCallback);\r\n        if (!subscribe.observerSingleton) {\r\n            subscribe.observerSingleton = new ResizeObserver(entries => {\r\n                const callbacksEntries = [...subscribe.callbacks];\r\n                callbacksEntries.forEach(([el, cb]) => cb(entries.filter(({ target }) => target === el)));\r\n            });\r\n        }\r\n        subscribe.observerSingleton.observe(el);\r\n        return () => {\r\n            subscribe.observerSingleton?.unobserve(el);\r\n            subscribe.callbacks.delete(el);\r\n        };\r\n    },\r\n    {\r\n        callbacks: new Map(),\r\n        observerSingleton: undefined\r\n    }\r\n);\r\n\r\nexport const useElementSize = <T extends HTMLElement>(ref?: RefObject<T>) => {\r\n    const elRef = useRef<T>(null);\r\n    const [{ height, width }, setSize] = useState<{\r\n        height?: number;\r\n        width?: number;\r\n    }>(() => ({\r\n        width: undefined, // so they can set default values\r\n        height: undefined // in the consuming component\r\n    }));\r\n\r\n    useLayoutEffect(() => {\r\n        const element = elRef.current || ref?.current;\r\n        if (element) {\r\n            const unsub = subscribe(element, (entries: any) => {\r\n                entries.forEach(({ contentRect: { height, width } }: ResizeObserverEntry) => {\r\n                    setSize({ height, width });\r\n                });\r\n            });\r\n            return () => unsub();\r\n        }\r\n    }, [ref]);\r\n\r\n    return useMemo(() => ({ height, width, ref: elRef }), [height, width]);\r\n};\r\n","import React, { useState } from \"react\";\r\nimport classNames from \"classnames\";\r\nimport ResponsiveImage from \"../../Shared/ResponsiveImage/responsive-image\";\r\nimport TagComponent from \"../../Shared/Tag/tag\";\r\nimport ArrowLink from \"../../Shared/ArrowLink/arrow-link\";\r\nimport CustomPrimaryCtaButton from \"../../Shared/CustomPrimaryCtaButton/custom-primary-cta-button\";\r\nimport PropTypes from \"prop-types\";\r\nimport { useElementSize } from \"../../../hooks/useElementSize\";\r\nimport { kebabCase } from \"js/utils/string\";\r\n\r\nexport const tileType = {\r\n    COL__1: \"col-1\",\r\n    COL__2: \"col-2\",\r\n    COL__4: \"col-4\"\r\n};\r\n\r\nconst tileTypes = {\r\n    [tileType.COL__1]: {\r\n        // Size 423px is needed for desktop, since col-1 can be both 25% and 33% wide\r\n        srcSetSizes: [607, 402, 518, 423],\r\n        sizes: `(max-width: 639px) 607px, (max-width: 867px) 402px, (max-width: 1099px) 518px, 423px`\r\n    },\r\n    [tileType.COL__2]: {\r\n        // Size 867px is needed since template 3 and 4 show col-2 in 100% on this breakpoint\r\n        srcSetSizes: [607, 835, 518, 651],\r\n        sizes: `(max-width: 639px) 607px, (max-width: 867px) 835px, (max-width: 1099px) 518px, 651px`\r\n    },\r\n    [tileType.COL__4]: {\r\n        srcSetSizes: [607, 835, 671, 838],\r\n        sizes: \"(max-width: 639px) 607px, (max-width: 867px) 835px, (max-width: 1099px) 671px, 838px\"\r\n    }\r\n};\r\n\r\nconst TeaserTile = ({\r\n    ImageSrc,\r\n    ImageAltText,\r\n    Tag,\r\n    Title,\r\n    Trumpet,\r\n    RichText,\r\n    CtaUrl,\r\n    CtaTarget,\r\n    CtaLink,\r\n    ShowCtaAsLink,\r\n    UseCtaAsImageLink,\r\n    tileType: tileTypeFromProps,\r\n    VideoUrl,\r\n    setVideoModal,\r\n    parentAnchor,\r\n    VideoAnchorId,\r\n    focused\r\n}) => {\r\n    const [richTextExpanded, setRichTextExpanded] = useState(false);\r\n    const tileType = tileTypeFromProps || tileType.COL__1;\r\n    const baseClass = \"teaser-tile\";\r\n    const deepLinkId = parentAnchor && VideoAnchorId ? `${parentAnchor}+video-${VideoAnchorId}` : \"\";\r\n    const rootClasses = classNames(\r\n        baseClass,\r\n        {\r\n            \"teaser-tile--focused\": focused\r\n        },\r\n        [`${baseClass}--tile-type-${tileType}`]\r\n    );\r\n\r\n    const { height, ref: richTextRef } = useElementSize();\r\n\r\n    const showRichTextExpandButton = height < richTextRef.current?.scrollHeight || richTextExpanded;\r\n\r\n    const innerClasses = classNames(`${baseClass}__inner`, {\r\n        [`${baseClass}__inner--expanded`]: richTextExpanded,\r\n        [`${baseClass}__inner--expand-disabled`]:\r\n            height === richTextRef.current?.scrollHeight && !richTextExpanded\r\n    });\r\n\r\n    return (\r\n        <div className={rootClasses} id={deepLinkId}>\r\n            {ImageSrc && !VideoUrl && (\r\n                <a className={`${baseClass}__image-wrapper`} href={CtaUrl} target={CtaTarget}>\r\n                    <div className={`${baseClass}__image-container`}>\r\n                        <ResponsiveImage\r\n                            srcUrl={ImageSrc}\r\n                            defaultSize={639}\r\n                            srcSetSizes={tileTypes[tileType].srcSetSizes}\r\n                            sizes={tileTypes[tileType].sizes}\r\n                            alt={ImageAltText}\r\n                        />\r\n                    </div>\r\n                </a>\r\n            )}\r\n            {ImageSrc && VideoUrl && (\r\n                <div className={`${baseClass}__image-wrapper ${baseClass}__video-wrapper`}>\r\n                    <div className={`${baseClass}__image-container`}>\r\n                        <a\r\n                            className={`${baseClass}__interactive`}\r\n                            href={`#${deepLinkId}`}\r\n                            onClick={e => {\r\n                                history.pushState(null, null, \"#\" + deepLinkId);\r\n                                e.preventDefault();\r\n                                setVideoModal(true, VideoUrl);\r\n                            }}\r\n                        >\r\n                            <ResponsiveImage\r\n                                srcUrl={ImageSrc}\r\n                                defaultSize={639}\r\n                                srcSetSizes={tileTypes[tileType].srcSetSizes}\r\n                                sizes={tileTypes[tileType].sizes}\r\n                                alt={ImageAltText}\r\n                            />\r\n                        </a>\r\n                    </div>\r\n                </div>\r\n            )}\r\n            <div className={`${baseClass}__content-wrapper`}>\r\n                <div className={`${baseClass}__content-container`}>\r\n                    <div className={innerClasses}>\r\n                        {Tag && <TagComponent className={`${baseClass}__tag`}>{Tag}</TagComponent>}\r\n                        {Trumpet && <p className={`${baseClass}__subtitle`}>{Trumpet}</p>}\r\n                        {Title && (\r\n                            <a className={`${baseClass}__title-link`} href={CtaUrl} target={CtaTarget}>\r\n                                <h3\r\n                                    className={`${baseClass}__title h3-style`}\r\n                                    dangerouslySetInnerHTML={{ __html: Title }}\r\n                                />\r\n                            </a>\r\n                        )}\r\n                        {RichText && (\r\n                            <div className={`${baseClass}__rich-text`} ref={richTextRef}>\r\n                                {!showRichTextExpandButton ? (\r\n                                    <span dangerouslySetInnerHTML={{ __html: RichText }} />\r\n                                ) : (\r\n                                    <button\r\n                                        type=\"button\"\r\n                                        aria-controls={`${kebabCase(Title)}`}\r\n                                        aria-expanded={richTextExpanded}\r\n                                        className={`${baseClass}__rich-text-button`}\r\n                                        onClick={() => setRichTextExpanded(!richTextExpanded)}\r\n                                    >\r\n                                        <span\r\n                                            id={`${kebabCase(Title)}`}\r\n                                            dangerouslySetInnerHTML={{ __html: RichText }}\r\n                                        />\r\n                                    </button>\r\n                                )}\r\n                            </div>\r\n                        )}\r\n                    </div>\r\n                    {CtaLink && !UseCtaAsImageLink && ShowCtaAsLink && (\r\n                        <ArrowLink ClassName=\"teaser-tile__arrow-link\" CtaLink={CtaLink} />\r\n                    )}\r\n                    {CtaLink && !UseCtaAsImageLink && !ShowCtaAsLink && (\r\n                        <CustomPrimaryCtaButton ClassName=\"teaser-tile__button\" CtaLink={CtaLink} />\r\n                    )}\r\n                </div>\r\n            </div>\r\n        </div>\r\n    );\r\n};\r\n\r\nTeaserTile.propTypes = {\r\n    ImageSrc: PropTypes.string,\r\n    ImageAltText: PropTypes.string,\r\n    Tag: PropTypes.string,\r\n    Title: PropTypes.string, // Recommended max: 28 characters\r\n    Trumpet: PropTypes.string, // Recommended max: 30 characters\r\n    RichText: PropTypes.string, // Recommended max: 262 characters\r\n    CtaLink: PropTypes.string,\r\n    CtaUrl: PropTypes.string,\r\n    CtaTarget: PropTypes.string,\r\n    ShowCtaAsLink: PropTypes.bool,\r\n    UseCtaAsImageLink: PropTypes.bool,\r\n    TwentyThreeVideoDomain: PropTypes.string,\r\n    TwentyThreeVideoPlayerId: PropTypes.string,\r\n    parentAnchor: PropTypes.string,\r\n    VideoAnchorId: PropTypes.string,\r\n    focused: PropTypes.bool,\r\n    tileType: PropTypes.oneOf(Object.keys(tileType).map(key => tileType[key]))\r\n};\r\n\r\nexport default TeaserTile;\r\n","// @ts-check\r\nimport * as React from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport classNames from \"classnames\";\r\nimport ArrowLink from \"../ArrowLink/arrow-link\";\r\n\r\nconst TitleLinkTop = ({ ClassName, Title, ViewMoreLink, TextColorClass }) => {\r\n    const baseClass = \"title-link-top\";\r\n    const componentClasses = classNames(baseClass, \"content-module-header\", ClassName);\r\n    const titleClasses = classNames(`${baseClass}__title`, {\r\n        [`${TextColorClass}--text`]: !!TextColorClass\r\n    });\r\n\r\n    const linkClasses = classNames(`${baseClass}__link`, {\r\n        [`${TextColorClass}--text`]: !!TextColorClass\r\n    });\r\n\r\n    const headerTitle = Title && <h2 className={titleClasses} dangerouslySetInnerHTML={{ __html: Title }} />;\r\n    const headerLink = ViewMoreLink && <ArrowLink ClassName={linkClasses} CtaLink={ViewMoreLink} />;\r\n\r\n    return (\r\n        <div className={componentClasses}>\r\n            {headerTitle}\r\n            {headerLink}\r\n        </div>\r\n    );\r\n};\r\n\r\nTitleLinkTop.propTypes = {\r\n    ClassName: PropTypes.string,\r\n    Title: PropTypes.string,\r\n    ViewMoreLink: PropTypes.string,\r\n    TextColorClass: PropTypes.string\r\n};\r\n\r\nexport default TitleLinkTop;\r\n","import React, { Component } from \"react\";\r\nimport Modal from \"../../Modal/modal\";\r\n\r\nclass TeaserGridVideo extends Component {\r\n    constructor(props) {\r\n        super(props);\r\n    }\r\n\r\n    getEmbeddedUrl(refUrl) {\r\n        if (!refUrl || refUrl.length <= 0) {\r\n            return \"\";\r\n        }\r\n\r\n        const regex = /(.*?)\\/secret\\/([0-9]+)\\/(.*$)/gm;\r\n        const match = regex.exec(refUrl);\r\n\r\n        const baseUrl = match[1],\r\n            photoId = match[2],\r\n            videoId = match[3];\r\n\r\n        return `${baseUrl}/v.ihtml/player.html?token=${videoId}&photo_id=${photoId}`;\r\n    }\r\n\r\n    render() {\r\n        const baseClass = \"teaser-grid-video\";\r\n\r\n        return (\r\n            <Modal\r\n                toClose={() => {\r\n                    this.props.setVideoModal(false, \"\");\r\n                }}\r\n                isOpen={this.props.videoModalActive}\r\n                showCloseButton\r\n                size=\"auto\"\r\n            >\r\n                <div\r\n                    className={`${baseClass}__modal-content`}\r\n                    style={{\r\n                        margin: \"auto\"\r\n                    }}\r\n                >\r\n                    <div className={`${baseClass}__video-wrapper`}>\r\n                        <iframe\r\n                            title={this.props.title}\r\n                            src={this.getEmbeddedUrl(this.props.VideoUrl)}\r\n                            allow=\"fullscreen\"\r\n                        />\r\n                    </div>\r\n                </div>\r\n            </Modal>\r\n        );\r\n    }\r\n}\r\n\r\nexport default TeaserGridVideo;\r\n","// @ts-check\r\nimport React, { Component } from \"react\";\r\nimport classNames from \"classnames\";\r\nimport TeaserTile, { tileType } from \"./TeaserTile/teaser-tile\";\r\nimport TitleLinkTop from \"../Shared/TitleLinkTop/title-link-top\";\r\nimport PropTypes from \"prop-types\";\r\nimport TeaserGridVideo from \"./TeaserGridVideoModal/teaser-grid-video\";\r\nimport SpinnerButton from \"../../ReactComponents/Shared/FormInputs/spinner-button\";\r\n\r\nexport const templateType = {\r\n    T1: \"template-1\",\r\n    T2: \"template-2\",\r\n    T3: \"template-3\",\r\n    T4: \"template-4\",\r\n    T5: \"template-5\"\r\n};\r\n\r\nconst templateTypes = {\r\n    [templateType.T1]: { repeats: true, pattern: [tileType.COL__1] },\r\n    [templateType.T2]: { repeats: true, pattern: [tileType.COL__2] },\r\n    [templateType.T3]: {\r\n        repeats: true,\r\n        pattern: [\r\n            tileType.COL__2,\r\n            tileType.COL__1,\r\n            tileType.COL__1,\r\n            tileType.COL__1,\r\n            tileType.COL__1,\r\n            tileType.COL__2\r\n        ]\r\n    },\r\n    [templateType.T4]: {\r\n        repeats: true,\r\n        pattern: [\r\n            tileType.COL__1,\r\n            tileType.COL__1,\r\n            tileType.COL__2,\r\n            tileType.COL__2,\r\n            tileType.COL__1,\r\n            tileType.COL__1\r\n        ]\r\n    },\r\n    [templateType.T5]: { repeats: false, pattern: [tileType.COL__4] }\r\n};\r\n\r\nclass TeaserGrid extends Component {\r\n    constructor(props) {\r\n        super(props);\r\n\r\n        this.state = {\r\n            videoModalActive: false,\r\n            videoModalUrl: \"\",\r\n            pageIndex: 0,\r\n            allChunksLoaded: false,\r\n            isLoadingChunk: false,\r\n            teaserListChunks: [this.props.TeaserList.slice(0, this.props.PageSize)],\r\n            isMounted: false\r\n        };\r\n\r\n        this.setVideoModal.bind(this);\r\n        this.getVideoAnchorId.bind(this);\r\n        this.loadNextChunk.bind(this);\r\n    }\r\n\r\n    setVideoModal(active, url) {\r\n        // If we close modal, remove the hashtag from url\r\n        if (!active && document) history.replaceState({}, document.title, window.location.pathname);\r\n\r\n        this.setState({\r\n            videoModalActive: active,\r\n            videoModalUrl: url\r\n        });\r\n    }\r\n\r\n    loadNextChunk() {\r\n        // request to WebApiLoadMoreUrl with TagFilter\r\n        if (this.props.WebApiLoadMore) {\r\n            this.setState({ isLoadingChunk: true });\r\n\r\n            fetch(this.props.WebApiLoadMoreUrl, {\r\n                method: \"POST\",\r\n                headers: { \"Content-Type\": \"application/json\" },\r\n                body: JSON.stringify({\r\n                    PageSize: this.props.PageSize,\r\n                    TagFilter: this.props.TagFilter,\r\n                    Page: this.state.pageIndex + 1\r\n                })\r\n            })\r\n                .then(res => (res.ok ? res : Promise.reject(res)))\r\n                .then(res => res.json())\r\n                .then(response => {\r\n                    if (response.Success) {\r\n                        const chunks = Object.assign([], this.state.teaserListChunks);\r\n                        chunks.push(response.Payload.Items);\r\n                        this.setState({\r\n                            teaserListChunks: chunks,\r\n                            pageIndex: this.state.pageIndex + 1,\r\n                            isLoadingChunk: false,\r\n                            allChunksLoaded: !response.Payload.HasNext\r\n                        });\r\n                    } else {\r\n                        this.setState({ allChunksLoaded: true });\r\n                    }\r\n                });\r\n        } else {\r\n            const chunks = Object.assign([], this.state.teaserListChunks);\r\n            chunks.push(\r\n                this.props.TeaserList.slice(\r\n                    (this.state.pageIndex + 1) * this.props.PageSize,\r\n                    (this.state.pageIndex + 1) * this.props.PageSize + this.props.PageSize\r\n                )\r\n            );\r\n\r\n            this.setState({\r\n                teaserListChunks: chunks,\r\n                allChunksLoaded: chunks.flatMap(x => x).length >= this.props.TeaserList.length,\r\n                pageIndex: this.state.pageIndex + 1\r\n            });\r\n        }\r\n    }\r\n\r\n    getVideoAnchorId(hash) {\r\n        if (hash) {\r\n            // AnchorId-video+props.TeaserList[i].anchorId\r\n            //                                                                                             This part is matched\r\n            //                                                                                                      |\r\n            //                                                                                               |--------------|\r\n            // http://dev.gu.dk/landingpages/landingpage-demos/ExamplePage%20-%20Anchors#teaser-grid-1+video-TeaserGridItem-1\r\n            const match = /\\+video-(.*?)$/gm.exec(hash);\r\n            if (match) {\r\n                return match[1];\r\n            }\r\n        }\r\n        return null;\r\n    }\r\n\r\n    componentDidMount() {\r\n        this.setState({ isMounted: true });\r\n        const videoAnchorId = this.getVideoAnchorId(document.location.hash);\r\n\r\n        if (videoAnchorId && this.props.TeaserList) {\r\n            const videoToPlay = this.props.TeaserList.filter(\r\n                teaserListItem => teaserListItem.VideoAnchorId == videoAnchorId\r\n            ).map(teaserListItem => teaserListItem.VideoUrl)[0];\r\n\r\n            if (videoToPlay) this.setVideoModal(true, videoToPlay);\r\n        }\r\n    }\r\n\r\n    render() {\r\n        const { pattern, repeats } = templateTypes[this.props.TemplateType] || templateTypes[templateType.T1];\r\n        const getTileType = tileIndex => {\r\n            if (this.props.TeaserList && this.props.TeaserList.length === 1) {\r\n                return tileType.COL__4;\r\n            }\r\n\r\n            return repeats ? pattern[tileIndex % pattern.length] : pattern[tileIndex] || tileType.COL__1;\r\n        };\r\n\r\n        const baseClass = \"teaser-grid\";\r\n        const componentClasses = classNames(\r\n            baseClass,\r\n            `${baseClass}--${this.props.TemplateType}`,\r\n            \"content-module\",\r\n            {\r\n                \"content-module--bg\": !!this.props.BackgroundColorClass,\r\n                [`${this.props.BackgroundColorClass}--bg`]: !!this.props.BackgroundColorClass,\r\n                \"content-module--no-margin-top\": this.props.HasNoMarginTop,\r\n                \"content-module--no-margin-bottom\": this.props.HasNoMarginBottom\r\n            }\r\n        );\r\n\r\n        const gridAnchorId = this.props.AnchorId;\r\n\r\n        return (\r\n            <section className={componentClasses}>\r\n                <TeaserGridVideo\r\n                    setVideoModal={this.setVideoModal.bind(this)}\r\n                    videoModalActive={this.state.videoModalActive}\r\n                    VideoUrl={this.state.videoModalUrl}\r\n                    title={this.props.Title}\r\n                />\r\n\r\n                <div className={`${baseClass}-inner`}>\r\n                    {(this.props.Title || this.props.ViewMoreLink) && (\r\n                        <TitleLinkTop\r\n                            Title={this.props.Title}\r\n                            ViewMoreLink={this.props.ViewMoreLink}\r\n                            TextColorClass={this.props.TextColorClass}\r\n                        />\r\n                    )}\r\n                    {this.props.TeaserList &&\r\n                        this.props.ShowLoadMore &&\r\n                        this.props.PageSize &&\r\n                        this.state.teaserListChunks.map((teaserList, teaserListIndex) => (\r\n                            <div key={teaserListIndex} className={`${baseClass}__items`}>\r\n                                {teaserList.map((item, index) => {\r\n                                    const id =\r\n                                        gridAnchorId && item.videoAnchorId\r\n                                            ? `${gridAnchorId}+video-${item.videoAnchorId}`\r\n                                            : \"\";\r\n\r\n                                    return (\r\n                                        <div key={index} className={`${baseClass}__item`} id={id}>\r\n                                            <TeaserTile\r\n                                                {...item}\r\n                                                focused={\r\n                                                    this.state.isMounted &&\r\n                                                    item.VideoAnchorId != null &&\r\n                                                    item.VideoAnchorId ==\r\n                                                        this.getVideoAnchorId(document.location.hash)\r\n                                                }\r\n                                                parentAnchor={gridAnchorId}\r\n                                                setVideoModal={this.setVideoModal.bind(this)}\r\n                                                tileType={getTileType(index)}\r\n                                            />\r\n                                        </div>\r\n                                    );\r\n                                })}\r\n                            </div>\r\n                        ))}\r\n\r\n                    {this.props.TeaserList && !this.props.ShowLoadMore && (\r\n                        <div className={`${baseClass}__items`}>\r\n                            {this.props.TeaserList.map((item, index) => {\r\n                                const id =\r\n                                    gridAnchorId && item.VideoAnchorId\r\n                                        ? `${gridAnchorId}+video-${item.VideoAnchorId}`\r\n                                        : undefined;\r\n\r\n                                return (\r\n                                    <div key={index} className={`${baseClass}__item`} id={id}>\r\n                                        <TeaserTile\r\n                                            {...item}\r\n                                            focused={\r\n                                                this.state.isMounted &&\r\n                                                item.VideoAnchorId != null &&\r\n                                                item.VideoAnchorId ==\r\n                                                    this.getVideoAnchorId(document.location.hash)\r\n                                            }\r\n                                            parentAnchor={gridAnchorId}\r\n                                            setVideoModal={this.setVideoModal.bind(this)}\r\n                                            tileType={getTileType(index)}\r\n                                        />\r\n                                    </div>\r\n                                );\r\n                            })}\r\n                        </div>\r\n                    )}\r\n\r\n                    {this.props.ShowLoadMore && !this.state.allChunksLoaded && (\r\n                        <div className={`${baseClass}__load-more-button-wrapper`}>\r\n                            <SpinnerButton\r\n                                isLoading={this.state.isLoadingChunk}\r\n                                className=\"button-load-more\"\r\n                                onClick={() => this.loadNextChunk()}\r\n                                label={this.props.LoadMoreLabel}\r\n                            />\r\n                        </div>\r\n                    )}\r\n                </div>\r\n            </section>\r\n        );\r\n    }\r\n}\r\n\r\nTeaserGrid.propTypes = {\r\n    Title: PropTypes.string,\r\n    ViewMoreLink: PropTypes.string,\r\n    TemplateType: PropTypes.oneOf(Object.keys(templateType).map(key => templateType[key])).isRequired,\r\n    TeaserList: PropTypes.arrayOf(\r\n        PropTypes.shape({\r\n            ImageSrc: PropTypes.string,\r\n            ImageAltText: PropTypes.string,\r\n            Tag: PropTypes.string,\r\n            Title: PropTypes.string,\r\n            Trumpet: PropTypes.string,\r\n            RichText: PropTypes.string,\r\n            CtaLink: PropTypes.string,\r\n            CtaUrl: PropTypes.string,\r\n            CtaTarget: PropTypes.string,\r\n            ShowCtaAsLink: PropTypes.bool,\r\n            UseCtaAsImageLink: PropTypes.bool,\r\n            VideoUrl: PropTypes.string,\r\n            parentAnchor: PropTypes.string,\r\n            VideoAnchorId: PropTypes.string\r\n        })\r\n    ),\r\n    BackgroundColorClass: PropTypes.string,\r\n    TextColorClass: PropTypes.string,\r\n    HasNoMarginTop: PropTypes.bool,\r\n    HasNoMarginBottom: PropTypes.bool,\r\n    TwentyThreeVideoDomain: PropTypes.string,\r\n    TwentyThreeVideoPlayerId: PropTypes.string,\r\n    AnchorId: PropTypes.string\r\n};\r\n\r\nexport default TeaserGrid;\r\n","import React from \"react\";\r\nimport TeaserGrid from \"@/ReactComponents/TeaserGrid/teaser-grid\";\r\n\r\nconst TeaserGridView = props => <TeaserGrid {...props} />;\r\n\r\nexport default TeaserGridView;\r\n"],"names":["ReactPropTypesSecret","emptyFunction","emptyFunctionWithReset","resetWarningCache","module","exports","shim","props","propName","componentName","location","propFullName","secret","err","Error","name","getShim","isRequired","ReactPropTypes","array","bigint","bool","func","number","object","string","symbol","any","arrayOf","element","elementType","instanceOf","node","objectOf","oneOf","oneOfType","shape","exact","checkPropTypes","PropTypes","getQueryParamDelimiter","url","indexOf","hasExistingQueryParam","srcUrl","defaultSize","srcSetSizes","role","rest","src","srcSet","map","srcSetSize","parameterDelimiter","srcSetSizeHighDensity","Math","round","join","generateSrcSet","img","loading","alt","kebabCase","replace","toLowerCase","ArrowLink","rootClasses","classNames","ClassName","CtaTextColorClass","div","className","dangerouslySetInnerHTML","__html","CtaLink","propTypes","CustomPrimaryCtaButton","CtaBackgroundColorClass","children","subscribe","Object","assign","el","resizeCallback","callbacks","set","observerSingleton","ResizeObserver","entries","forEach","cb","filter","target","observe","unobserve","delete","Map","undefined","tileType","COL__1","COL__2","COL__4","tileTypes","sizes","TeaserTile","ImageSrc","richTextRef","ImageAltText","Tag","Title","Trumpet","RichText","CtaUrl","CtaTarget","ShowCtaAsLink","UseCtaAsImageLink","tileTypeFromProps","VideoUrl","setVideoModal","parentAnchor","VideoAnchorId","focused","useState","richTextExpanded","setRichTextExpanded","baseClass","deepLinkId","useElementSize","ref","elRef","useRef","width","height","setSize","useLayoutEffect","current","unsub","contentRect","useMemo","showRichTextExpandButton","scrollHeight","innerClasses","id","a","href","ResponsiveImage","onClick","e","history","pushState","preventDefault","TagComponent","p","h3","button","type","aria-controls","aria-expanded","span","TwentyThreeVideoDomain","TwentyThreeVideoPlayerId","keys","key","TitleLinkTop","ViewMoreLink","TextColorClass","componentClasses","titleClasses","linkClasses","headerTitle","h2","headerLink","TeaserGridVideo","getEmbeddedUrl","refUrl","length","match","exec","baseUrl","photoId","videoId","render","Modal","toClose","isOpen","this","videoModalActive","showCloseButton","size","style","margin","iframe","title","allow","Component","templateType","T1","T2","T3","T4","T5","templateTypes","repeats","pattern","TeaserGrid","state","videoModalUrl","pageIndex","allChunksLoaded","isLoadingChunk","teaserListChunks","TeaserList","slice","PageSize","isMounted","bind","getVideoAnchorId","loadNextChunk","active","document","replaceState","window","pathname","setState","WebApiLoadMore","fetch","WebApiLoadMoreUrl","method","headers","body","JSON","stringify","TagFilter","Page","then","res","ok","Promise","reject","json","response","Success","chunks","push","Payload","Items","HasNext","flatMap","x","hash","componentDidMount","videoAnchorId","videoToPlay","teaserListItem","TemplateType","getTileType","tileIndex","BackgroundColorClass","HasNoMarginTop","HasNoMarginBottom","gridAnchorId","AnchorId","section","ShowLoadMore","teaserList","teaserListIndex","item","index","SpinnerButton","isLoading","label","LoadMoreLabel"],"sourceRoot":""}