{"version":3,"file":"CookieConsent.cjs","sources":["../../../../src/components/cookie-consent/CookieConsent.tsx"],"sourcesContent":["import React, { useEffect, useId } from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { Button } from \"../button/Button.js\";\nimport { Flex } from \"../flex/index.js\";\nimport { Link } from \"../link/index.js\";\nimport {\n    Modal,\n    ModalActions,\n    ModalBody,\n    ModalContainer,\n    ModalHeader,\n    ModalOverlay,\n    ModalTitle,\n} from \"../modal/Modal.js\";\nimport { useModal } from \"../modal/useModal.js\";\nimport { useInternalState } from \"./CookieConsentContext.js\";\nimport { setConsentCookie } from \"./cookieConsentUtils.js\";\nimport type { Consent, ConsentState, CookieConsentProps } from \"./types.js\";\n\nexport const CookieConsent = ({\n    blocking,\n    onAccept,\n    aboutPage = \"https://www.fremtind.no/informasjonskapsler\",\n    aboutPageLinkText = \"Les mer om hvilke informasjons­kapsler vi lagrer her\",\n    ...rest\n}: CookieConsentProps): JSX.Element | null => {\n    const {\n        currentConsent,\n        cookieName,\n        cookieDomain,\n        cookiePath,\n        isOpen,\n        setIsOpen,\n        updateCurrentConsents,\n    } = useInternalState();\n\n    const [instance, modalConfig] = useModal({\n        id: `jkl-cookie-modal-${useId()}`,\n        // The optional `role` attribute of the dialog element, either `dialog`\n        // (default) or `alertdialog` to make it a modal (preventing closing on\n        // click outside of ESC key).\n        role: blocking ? \"alertdialog\" : \"dialog\",\n        // The required dialog title, mandatory in the document\n        // to provide context to assistive technology.\n        title: \"Informasjonskapsler\",\n    });\n    useEffect(() => {\n        if (isOpen) {\n            instance?.show();\n        } else {\n            instance?.hide();\n        }\n    }, [instance, isOpen]);\n\n    useEffect(() => {\n        const onHide = () => setIsOpen(false);\n        instance?.on(\"hide\", onHide);\n        return () => {\n            instance?.off(\"hide\", onHide);\n        };\n    }, [instance, setIsOpen]);\n\n    if (typeof document === \"undefined\") {\n        return null;\n    }\n\n    // Cookies are disabled in the browser\n    if (typeof navigator !== \"undefined\" && !navigator.cookieEnabled) {\n        onAccept?.({\n            functional: \"denied\",\n            statistics: \"denied\",\n            marketing: \"denied\",\n        });\n\n        return null;\n    }\n\n    const updateCookies = (state: ConsentState) => {\n        const updatedConsent: Consent = {\n            ...currentConsent,\n            functional: state,\n            statistics: state,\n            marketing: \"denied\",\n        };\n\n        setConsentCookie({\n            consent: updatedConsent,\n            name: cookieName,\n            domain: cookieDomain,\n            path: cookiePath,\n        });\n\n        onAccept?.(updatedConsent);\n\n        updateCurrentConsents();\n\n        instance?.hide();\n    };\n\n    return ReactDOM.createPortal(\n        <ModalContainer\n            {...modalConfig.container}\n            {...rest}\n            data-cookie-consent-open={isOpen}\n        >\n            <ModalOverlay {...modalConfig.overlay} />\n            <Modal {...modalConfig.modal}>\n                <ModalHeader>\n                    <ModalTitle {...modalConfig.title}>\n                        Får vi bruke valgfrie informasjons&shy;kapsler?\n                    </ModalTitle>\n                </ModalHeader>\n                <ModalBody>\n                    <Flex direction=\"column\" gap=\"m\">\n                        <p>\n                            Fremtind ønsker å samle anonym statistikk for å\n                            forstå hvordan nettsidene våre brukes. Det hjelper\n                            oss til å gjøre innhold og løsninger bedre og mer\n                            brukervennlige.\n                        </p>\n                        <p>\n                            <Link href={aboutPage} target=\"_blank\">\n                                {aboutPageLinkText}\n                            </Link>\n                            .\n                        </p>\n                    </Flex>\n                </ModalBody>\n                <ModalActions>\n                    <Button\n                        variant=\"secondary\"\n                        data-testid=\"jkl-cookie-consent-godta\"\n                        type=\"button\"\n                        onClick={() => updateCookies(\"accepted\")}\n                    >\n                        Ja, det er greit\n                    </Button>\n                    <Button\n                        variant=\"secondary\"\n                        data-testid=\"jkl-cookie-consent-nekt\"\n                        type=\"button\"\n                        onClick={() => updateCookies(\"denied\")}\n                    >\n                        Nei takk\n                    </Button>\n                </ModalActions>\n            </Modal>\n        </ModalContainer>,\n        document.body,\n    );\n};\n"],"names":["blocking","onAccept","aboutPage","aboutPageLinkText","rest","currentConsent","cookieName","cookieDomain","cookiePath","isOpen","setIsOpen","updateCurrentConsents","useInternalState","instance","modalConfig","useModal","id","useId","role","title","useEffect","show","hide","onHide","on","off","document","navigator","cookieEnabled","functional","statistics","marketing","updateCookies","state","updatedConsent","setConsentCookie","consent","name","domain","path","ReactDOM","createPortal","jsxs","ModalContainer","container","children","jsx","ModalOverlay","overlay","Modal","modal","ModalHeader","ModalTitle","ModalBody","Flex","direction","gap","Link","href","target","ModalActions","Button","variant","type","onClick","body"],"mappings":"oaAmB6B,EACzBA,SAAAA,EACAC,SAAAA,EACAC,UAAAA,EAAY,8CACZC,kBAAAA,EAAoB,0DACjBC,MAEH,MACIC,eAAAA,EACAC,WAAAA,EACAC,aAAAA,EACAC,WAAAA,EACAC,OAAAA,EACAC,UAAAA,EACAC,sBAAAA,GACAC,sBAEGC,EAAUC,GAAeC,WAAS,CACrCC,GAAI,oBAAoBC,EAAAA,UAIxBC,KAAMlB,EAAW,cAAgB,SAGjCmB,MAAO,wBAkBX,GAhBAC,EAAAA,UAAU,KACFX,EACAI,GAAUQ,OAEVR,GAAUS,QAEf,CAACT,EAAUJ,IAEdW,EAAAA,UAAU,KACN,MAAMG,EAAS,IAAMb,GAAU,GAC/B,OAAAG,GAAUW,GAAG,OAAQD,GACd,KACHV,GAAUY,IAAI,OAAQF,KAE3B,CAACV,EAAUH,WAEHgB,SAAa,IACpB,OAAO,KAIX,UAAWC,UAAc,MAAgBA,UAAUC,cAC/C,OAAA3B,IAAW,CACP4B,WAAY,SACZC,WAAY,SACZC,UAAW,WAGR,KAGX,MAAMC,EAAiBC,IACnB,MAAMC,EAA0B,IACzB7B,EACHwB,WAAYI,EACZH,WAAYG,EACZF,UAAW,UAGfI,mBAAiB,CACbC,QAASF,EACTG,KAAM/B,EACNgC,OAAQ/B,EACRgC,KAAM/B,IAGVP,IAAWiC,GAEXvB,IAEAE,GAAUS,QAGd,OAAOkB,EAASC,aACZC,EAAAA,KAACC,EAAAA,eAAA,IACO7B,EAAY8B,aACZxC,EACJ,2BAA0BK,EAE1BoC,SAAA,CAAAC,EAAAA,IAACC,EAAAA,aAAA,IAAiBjC,EAAYkC,UAC9BN,EAAAA,KAACO,EAAAA,MAAA,IAAUnC,EAAYoC,MACnBL,SAAA,CAAAC,EAAAA,IAACK,EAAAA,aACGN,SAAAC,EAAAA,IAACM,EAAAA,WAAA,IAAetC,EAAYK,MAAO0B,iEAItCQ,EAAAA,UAAA,CACGR,SAAAH,OAACY,EAAAA,MAAKC,UAAU,SAASC,IAAI,IACzBX,SAAA,CAAAC,EAAAA,IAAC,KAAED,SAAA,gLAMF,IAAA,CACGA,SAAA,CAAAC,MAACW,EAAAA,KAAA,CAAKC,KAAMxD,EAAWyD,OAAO,SACzBd,SAAA1C,IACE,mBAKlByD,EAAAA,aAAA,CACGf,SAAA,CAAAC,EAAAA,IAACe,EAAAA,OAAA,CACGC,QAAQ,YACR,cAAY,2BACZC,KAAK,SACLC,QAAS,IAAMhC,EAAc,YAChCa,SAAA,qBAGDC,EAAAA,IAACe,EAAAA,OAAA,CACGC,QAAQ,YACR,cAAY,0BACZC,KAAK,SACLC,QAAS,IAAMhC,EAAc,UAChCa,SAAA,sBAMbnB,SAASuC"}