{"version":3,"sources":["Banner.tsx"],"sourcesContent":["import {\n    CSSProperties,\n    ReactNode,\n    useState,\n    EventHandler,\n    MouseEvent,\n    lazy,\n    Suspense,\n    useMemo,\n} from \"react\"\nimport { withCSS } from \"framer\"\nimport { AnimatePresence, motion } from \"framer-motion\"\nimport { ConsentModeName, useConsent, ConsentModes } from \"../hooks/consent.ts\"\nimport { RegionContent } from \"../hooks/region.ts\"\nimport {\n    ButtonsProps,\n    OptionsStyle,\n    PolicyProps,\n    CookieBannerProps,\n} from \"../Cookies.tsx\"\nimport {\n    DEFAULT_FONT_FAMILY,\n    getFlexboxValues,\n    getMultipleShadows,\n    getShadow,\n} from \"./utils.ts\"\n\nconst SPACING = 20\n\nexport type BannerComponentProps = Pick<\n    CookieBannerProps,\n    \"banner\" | \"button\" | \"options\"\n> & {\n    region: RegionContent\n    previewOptions?: boolean\n    consentModes: ConsentModes\n    animateOnMount: boolean\n    onDismiss?: () => void\n    onAcceptAll?: () => void\n    onRejectAll?: () => void\n    onAcceptCurrent?: () => void\n    onToggleConsent?: (mode: ConsentModeName) => void\n}\n\n// if you update the Toggle component inside this project, copy the new URL to here:\nconst Toggle = lazy(\n    () =>\n        import(\n            \"https://framerusercontent.com/modules/QDCSmi7dYWSK5AcRSFyX/iWVjq9atvKQLvxgv6qiM/Blf0sjosZ.js\"\n        )\n)\n\nexport const Banner = withCSS<BannerComponentProps>(\n    function Banner({\n        banner,\n        button,\n        region,\n        options,\n        previewOptions,\n        consentModes,\n        onDismiss,\n        onAcceptAll,\n        onRejectAll,\n        onAcceptCurrent,\n        onToggleConsent,\n        animateOnMount,\n    }: BannerComponentProps) {\n        const maxHeightReduction = banner.insetPerSide\n            ? banner.insetTop + banner.insetBottom\n            : banner.inset * 2\n\n        const linkColor = banner.style.link || button.primary.fill\n\n        const paddingValue = banner.paddingPerSide\n            ? `${banner.paddingTop}px ${banner.paddingRight}px ${banner.paddingBottom}px ${banner.paddingLeft}px`\n            : `${banner.padding}px`\n\n        const bannerShadow = getShadow(banner.style.shadow)\n        const borderShadow = banner.style.border?.width\n            ? `inset 0 0 0 ${banner.style.border.width}px ${banner.style.border.color}`\n            : null\n\n        const bannerStyle = {\n            background: banner.style.fill,\n            boxShadow: getMultipleShadows(bannerShadow, borderShadow),\n            overflow: \"hidden\",\n            borderRadius: banner.style.border.radius,\n        }\n\n        return (\n            <motion.div\n                initial={\n                    animateOnMount && {\n                        x: banner.animation.x,\n                        y: banner.animation.y,\n                        scale: banner.animation.scale,\n                        opacity: 0,\n                    }\n                }\n                animate={{\n                    y: 0,\n                    x: 0,\n                    scale: 1,\n                    opacity: 1,\n                }}\n                exit={{\n                    x: banner.animation.x,\n                    y: banner.animation.y,\n                    scale: banner.animation.scale,\n                    opacity: 0,\n                }}\n                transition={\n                    animateOnMount\n                        ? banner.animation.transition\n                        : { duration: 0 }\n                }\n                style={{\n                    fontFamily: DEFAULT_FONT_FAMILY,\n                    maxHeight: `calc(100vh - ${maxHeightReduction}px)`,\n                    flexDirection: \"column\",\n                    gap: 12,\n                    position: \"relative\",\n                    display: \"flex\",\n                    zIndex: 100,\n                    pointerEvents: \"auto\",\n                }}\n            >\n                <div\n                    style={{\n                        ...bannerStyle,\n                        overflow: \"scroll\",\n                        width: \"100%\",\n                        maxWidth: banner.width,\n                    }}\n                    className={`--framer-cookie-banner-container --framer-cookie-banner-type-${region.type}`}\n                >\n                    {region.type === \"simple\" ? (\n                        <SimpleBanner\n                            banner={banner}\n                            button={button}\n                            linkColor={linkColor}\n                            description={region.description}\n                            policy={region.policy}\n                            onDismiss={onDismiss}\n                        />\n                    ) : region.type === \"medium\" ? (\n                        <AcceptRejectBanner\n                            banner={banner}\n                            button={button}\n                            linkColor={linkColor}\n                            title={region.title}\n                            description={region.description}\n                            policy={region.policy}\n                            onAccept={onAcceptAll}\n                            onReject={onRejectAll}\n                        />\n                    ) : (\n                        <OptionsBanner\n                            banner={banner}\n                            button={button}\n                            options={options}\n                            previewOptions={previewOptions}\n                            linkColor={linkColor}\n                            title={region.title}\n                            description={region.description}\n                            showReject={region.showReject}\n                            policy={region.policy}\n                            onOptionToggle={onToggleConsent}\n                            consent={consentModes}\n                            onAcceptAll={onAcceptAll}\n                            onRejectAll={onRejectAll}\n                            onAcceptCurrent={onAcceptCurrent}\n                        />\n                    )}\n                </div>\n            </motion.div>\n        )\n    },\n    [\n        `.--framer-cookie-banner-container::-webkit-scrollbar { display: none; }`,\n        `.--framer-cookie-banner-container { \n            -ms-overflow-style: none; \n            scrollbar-width: none;  \n        }`,\n    ],\n    \"framer-lib-cookie-banner\"\n)\n\ntype SimpleBannerProps = Pick<BannerComponentProps, \"banner\" | \"button\"> & {\n    linkColor: string\n    description: string\n    policy?: PolicyProps\n    onDismiss: () => void\n}\n\nfunction SimpleBanner({\n    banner,\n    button,\n    description,\n    policy,\n    onDismiss,\n    linkColor,\n}: SimpleBannerProps) {\n    const padding = banner.paddingPerSide\n        ? `${banner.paddingTop}px ${banner.paddingRight}px ${banner.paddingBottom}px ${banner.paddingLeft}px`\n        : `${banner.padding}px`\n\n    return (\n        <div\n            style={{\n                display: \"flex\",\n                flexDirection: \"row\",\n                padding,\n                gap: SPACING,\n            }}\n        >\n            <Description\n                style={{\n                    ...banner.style.fontBody,\n                    flex: 1,\n                    alignItems: \"center\",\n                    color: banner.style.colorBody,\n                }}\n                linkColor={linkColor}\n                description={description}\n                policy={policy}\n            />\n\n            <motion.div\n                style={{\n                    display: \"flex\",\n                    justifyContent: \"center\",\n                    alignItems: \"center\",\n                }}\n            >\n                <Button\n                    onClick={onDismiss}\n                    settings={{ ...button, fluid: false }}\n                    id=\"dismiss\"\n                >\n                    {button.labels.confirm}\n                </Button>\n            </motion.div>\n        </div>\n    )\n}\n\ntype AcceptRejectProps = Pick<BannerComponentProps, \"banner\" | \"button\"> & {\n    title: string\n    description: string\n    linkColor: string\n    policy?: PolicyProps\n    onReject?: () => void\n    onAccept?: () => void\n}\n\nfunction AcceptRejectBanner({\n    banner,\n    button,\n    title,\n    linkColor,\n    description,\n    policy,\n    onAccept,\n    onReject,\n}: AcceptRejectProps) {\n    const padding = banner.paddingPerSide\n        ? `${banner.paddingTop}px ${banner.paddingRight}px ${banner.paddingBottom}px ${banner.paddingLeft}px`\n        : `${banner.padding}px`\n\n    return (\n        <div\n            style={{\n                padding,\n            }}\n        >\n            <div>\n                {title && (\n                    <Headline\n                        style={{\n                            ...banner.style.fontTitle,\n                            color: banner.style.colorTitle,\n                        }}\n                    >\n                        {title}\n                    </Headline>\n                )}\n                <Description\n                    style={{\n                        ...banner.style.fontBody,\n                        color: banner.style.colorBody,\n                    }}\n                    linkColor={linkColor}\n                    description={description}\n                    policy={policy}\n                />\n            </div>\n            <Buttons direction={button.direction}>\n                <Button settings={button} onClick={onReject} id=\"reject\">\n                    {button.labels.reject}\n                </Button>\n                <Button\n                    settings={button}\n                    primary\n                    onClick={onAccept}\n                    id=\"accept\"\n                >\n                    {button.labels.accept}\n                </Button>\n            </Buttons>\n        </div>\n    )\n}\n\ntype OptionsBannerProps = Pick<\n    BannerComponentProps,\n    \"banner\" | \"button\" | \"options\"\n> & {\n    title: string\n    description: string\n    policy?: PolicyProps\n    showReject: boolean\n    linkColor: string\n    consent: ConsentModes\n    previewOptions?: boolean\n    onAcceptCurrent: () => void\n    onAcceptAll: () => void\n    onRejectAll: () => void\n    onOptionToggle: (type: ConsentModeName) => void\n}\n\nfunction OptionsBanner({\n    banner,\n    button,\n    options,\n    previewOptions,\n    title,\n    description,\n    policy,\n    showReject = true,\n    linkColor,\n    consent,\n    onAcceptCurrent,\n    onAcceptAll,\n    onRejectAll,\n    onOptionToggle,\n}: OptionsBannerProps) {\n    const [showOptions, setShowOptions] = useState(false)\n    const optionTheme = { ...options.style, color: banner.style.colorBody }\n    const padding = banner.paddingPerSide\n        ? `${banner.paddingTop}px ${banner.paddingRight}px ${banner.paddingBottom}px ${banner.paddingLeft}px`\n        : `${banner.padding}px`\n\n    // const optionNames = consent && Object.keys(consent)\n\n    const optionNames: Array<ConsentModeName> = [\n        \"necessary\",\n        \"preferences\",\n        \"analytics\",\n        \"marketing\",\n    ]\n\n    const shouldShowOptions = showOptions || previewOptions\n\n    return (\n        <div\n            style={{\n                padding,\n            }}\n        >\n            <div>\n                {title && (\n                    <Headline\n                        style={{\n                            ...banner.style.fontTitle,\n                            color: banner.style.colorTitle,\n                        }}\n                    >\n                        {title}\n                    </Headline>\n                )}\n                <Description\n                    style={{\n                        ...banner.style.fontBody,\n                        color: banner.style.colorBody,\n                    }}\n                    linkColor={linkColor}\n                    description={description}\n                    policy={policy}\n                />\n                <AnimatePresence>\n                    {shouldShowOptions && (\n                        <motion.div\n                            key=\"modal\"\n                            initial={\n                                previewOptions\n                                    ? null\n                                    : { opacity: 0, height: 0 }\n                            }\n                            animate={{ opacity: 1, height: \"auto\" }}\n                            exit={{ opacity: 0, height: 0 }}\n                            style={{\n                                display: \"flex\",\n                                flexDirection: \"column\",\n                                gap: 10,\n                                marginTop: SPACING,\n                                overflow: \"hidden\",\n                            }}\n                        >\n                            {optionNames &&\n                                optionNames.map((option: ConsentModeName) => (\n                                    <Option\n                                        title={options[option].title}\n                                        description={\n                                            options[option].description\n                                        }\n                                        titleColor={banner.style.colorTitle}\n                                        descriptionColor={\n                                            banner.style.colorBody\n                                        }\n                                        showDescription={options.descriptions}\n                                        enabled={consent[option]}\n                                        onClick={() => onOptionToggle(option)}\n                                        theme={optionTheme}\n                                        optional={\n                                            option === \"necessary\"\n                                                ? options[option].optional\n                                                : true\n                                        }\n                                    />\n                                ))}\n                        </motion.div>\n                    )}\n                </AnimatePresence>\n            </div>\n\n            <Buttons direction={button.direction}>\n                {shouldShowOptions ? (\n                    <Button\n                        settings={button}\n                        primary\n                        onClick={onAcceptCurrent}\n                        id=\"accept\"\n                    >\n                        {button.labels.save}\n                    </Button>\n                ) : (\n                    <>\n                        {showReject && (\n                            <Button\n                                settings={button}\n                                onClick={onRejectAll}\n                                id=\"reject\"\n                            >\n                                {button.labels.rejectAll}\n                            </Button>\n                        )}\n                        <Button\n                            settings={button}\n                            onClick={() => {\n                                setShowOptions(true)\n                            }}\n                            id=\"customize\"\n                        >\n                            {button.labels.customize}\n                        </Button>\n                        <Button\n                            settings={button}\n                            primary\n                            onClick={onAcceptAll}\n                            id=\"accept\"\n                        >\n                            {button.labels.acceptAll}\n                        </Button>\n                    </>\n                )}\n            </Buttons>\n        </div>\n    )\n}\n\ntype OptionProps = {\n    title: string\n    titleColor: string\n    description: string\n    descriptionColor: string\n    showDescription: boolean\n    enabled: boolean\n    onClick: () => void\n    theme: OptionsStyle\n    optional?: boolean\n}\n\nfunction Option({\n    title,\n    titleColor,\n    description,\n    descriptionColor,\n    showDescription,\n    enabled,\n    optional,\n    onClick,\n    theme,\n}: OptionProps) {\n    const paddingValue = theme.paddingPerSide\n        ? `${theme.paddingTop}px ${theme.paddingRight}px ${theme.paddingBottom}px ${theme.paddingLeft}px`\n        : `${theme.padding}px`\n\n    const borderShadow = theme.border\n        ? `inset 0 0 0 ${theme.border.width}px ${theme.border.color}`\n        : null\n\n    return (\n        <motion.div\n            style={{\n                boxShadow: borderShadow,\n                background: theme.background,\n                borderRadius: theme.border.radius,\n                padding: paddingValue,\n                cursor: \"pointer\",\n                userSelect: \"none\",\n                pointerEvents: \"all\",\n            }}\n            onClick={onClick}\n            whileHover={{ opacity: 0.5 }}\n        >\n            <div\n                style={{\n                    display: \"flex\",\n                    justifyContent: \"space-between\",\n                }}\n            >\n                <p\n                    style={{\n                        margin: 0,\n                        fontWeight: 600,\n                        fontSize: 12,\n                        color: titleColor,\n                        ...theme.fontTitle,\n                    }}\n                >\n                    {title}\n                </p>\n                {optional ? (\n                    <Suspense>\n                        <Toggle\n                            variant={enabled ? \"On\" : \"Off\"}\n                            background={theme.toggleColor}\n                            backgroundInactive={theme.toggleColorInactive}\n                        />\n                    </Suspense>\n                ) : (\n                    <p\n                        style={{\n                            margin: 0,\n                            fontSize: 12,\n                            color: theme.toggleColor,\n                            ...theme.fontTitle,\n                            fontWeight: 400,\n                        }}\n                    >\n                        Always active\n                    </p>\n                )}\n            </div>\n            {description && (\n                <p\n                    style={{\n                        margin: 0,\n                        marginTop: 10,\n                        fontSize: 12,\n                        lineHeight: 1.5,\n                        color: descriptionColor,\n                        ...theme.fontBody,\n                    }}\n                >\n                    {description}\n                </p>\n            )}\n        </motion.div>\n    )\n}\n\nfunction Headline({\n    children,\n    style,\n}: {\n    children: ReactNode\n    style: CSSProperties\n}) {\n    return (\n        <p\n            style={{\n                fontSize: 14,\n                margin: \"0px 0px 10px 0px\",\n                fontWeight: \"bold\",\n                padding: 0,\n                ...style,\n            }}\n        >\n            {children}\n        </p>\n    )\n}\n\nfunction Description({\n    style,\n    description,\n    policy,\n    linkColor,\n}: {\n    style: CSSProperties\n    description: string\n    policy: PolicyProps\n    linkColor: string\n}) {\n    const shouldShow = description || policy?.link\n\n    if (!shouldShow) return null\n\n    if (!description) {\n        return (\n            <DescriptionParagraph\n                policy={policy}\n                style={style}\n                linkColor={linkColor}\n            />\n        )\n    }\n\n    // @ivan: Support rendering the description in multiple paragraphs.\n    // This is a site speed optimization: it allows to split a single\n    // huge <p> into several smaller ones, which prevents the huge <p>\n    // from becoming an LCP element.\n    const descriptionParagraphs = description?.split(\"\\n\\n\")\n\n    return description.split(\"\\n\\n\").map((line, index) => (\n        <DescriptionParagraph\n            key={index}\n            line={line}\n            // Only render the policy in the last paragraph\n            policy={index === descriptionParagraphs.length - 1 ? policy : null}\n            style={{\n                // Add a spacing between paragraphs\n                marginTop: index > 0 ? 4 : 0,\n                ...style,\n            }}\n            linkColor={linkColor}\n        />\n    ))\n}\n\nfunction DescriptionParagraph({\n    line,\n    policy,\n    style,\n    linkColor,\n}: {\n    line?: string\n    policy?: PolicyProps\n    style: CSSProperties\n    linkColor: string\n}) {\n    return (\n        <p\n            style={{\n                lineHeight: 1.5,\n                margin: 0,\n                padding: 0,\n                fontSize: 14,\n                ...style,\n            }}\n        >\n            {line}\n            {line && policy?.link ? \" \" : null}\n            {policy?.link && (\n                <span>\n                    {policy?.prefix}{\" \"}\n                    <a\n                        href={policy?.link}\n                        target=\"_blank\"\n                        style={{\n                            color: linkColor,\n                            textDecoration: \"none\",\n                        }}\n                    >\n                        {policy?.label}\n                    </a>\n                    .\n                </span>\n            )}\n        </p>\n    )\n}\n\ntype ButtonComponentProps = {\n    children: ReactNode\n    settings: ButtonsProps\n    primary?: boolean\n    onClick?: (e: MouseEvent<HTMLButtonElement>) => void\n    id?: string\n}\n\nfunction Buttons({\n    children,\n    direction,\n}: {\n    children: ReactNode\n    direction: \"row\" | \"column\"\n}) {\n    return (\n        <div\n            style={{\n                display: \"flex\",\n                flexDirection: direction,\n                gap: 10,\n                marginTop: 16,\n            }}\n        >\n            {children}\n        </div>\n    )\n}\n\nconst Button = withCSS(function Button({\n    id,\n    children,\n    primary,\n    settings,\n    onClick,\n}: ButtonComponentProps) {\n    const paddingValue = settings.paddingPerSide\n        ? `${settings.paddingTop}px ${settings.paddingRight}px ${settings.paddingBottom}px ${settings.paddingLeft}px`\n        : `${settings.padding}px`\n\n    const theme = primary ? settings.primary : settings.secondary\n\n    return (\n        <motion.input\n            className=\"__framer-cookie-component-button\"\n            id={`__framer-cookie-component-button-${id}`}\n            onClick={onClick}\n            type=\"button\"\n            value={`${children}`}\n            whileHover={{\n                opacity: settings.hoverOpacity ?? 0.6,\n            }}\n            whileTap={{ opacity: settings.tapOpacity ?? 0.4 }}\n            style={{\n                WebkitAppearance: \"none\",\n                appearance: \"none\",\n                width: settings.fluid ? \"100%\" : \"auto\",\n                height: \"auto\",\n                border: \"none\",\n                padding: paddingValue,\n                borderRadius: settings.borderRadius,\n                boxShadow: getShadow(theme.shadow),\n                background: theme.fill,\n                color: theme.color,\n                fontSize: 14,\n                lineHeight: 1,\n                cursor: \"pointer\",\n                fontWeight: settings.font ? \"unset\" : 600,\n                ...settings.font,\n            }}\n        />\n    )\n}, \".__framer-cookie-component-button:focus:not(:focus-visible){outline-color:transparent}\")\n"],"names":[],"mappings":"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"}