with backgroundImage\n **/\n const [renderAsDiv, setRenderAsDiv] = useState(false)\n useEffect(() => {\n setRenderAsDiv(\n (alignX || alignY || contain || cover) && !objectFitSupport(),\n )\n }, [])\n\n if (renderAsDiv) {\n if (onLoad) {\n // Trigger the onLoad - could create a dummy image instead that triggers it after the image is actually loaded.\n onLoad()\n }\n return (\n
![]()
\n )\n }\n\n return (\n

\n )\n}\n\nImgElement.defaultProps = {\n contain: false,\n}\n\nexport default ImgElement\n","// @flow\nimport React, { PureComponent } from 'react'\nimport Measure from 'react-measure'\nimport styled from 'styled-components'\n\nimport type { ImageViewModel } from '../../types/ImageViewModel'\nimport type { Bounds, Rect } from './types'\n\nimport processImage, { imageDimensionMap, withImgix } from './imgix-support'\nimport ImgElement from './ImgElement'\n\nconst Container = styled.div`\n position: relative;\n width: 100%;\n ${({ fillContainer }) =>\n fillContainer &&\n `\n position: absolute;\n height: 100%;\n top: 0;\n left: 0;\n `} ${({ aspect }) =>\n aspect &&\n `\n padding-bottom: ${aspect * 100}%;\n `};\n ${({ zoomOnHover }) =>\n zoomOnHover &&\n `\n overflow: hidden\n `}\n`\n\ntype Props = ImageViewModel & {\n onResize?: (bounds: Bounds) => void,\n className?: string,\n zoomOnHover?: boolean,\n}\n\ntype State = {\n animatedIn: boolean,\n ready: boolean,\n elementWidth: number,\n elementHeight: number,\n}\n\n/**\n * Image handles fetching the correct Imgix image, and rendering it onto the page.\n * By default it will load an image that fillContainers the width of it's container, while keeping the original image aspect ratio\n */\nclass Image extends PureComponent
{\n static displayName = 'Image'\n static defaultProps = {\n maxAspectRatio: 2,\n width: 1,\n height: 1,\n }\n\n static generateAspectRatio(\n width: number = 1,\n height: number = 1,\n maxAspectRatio: number = 1,\n aspectRatio?: number,\n ) {\n if (aspectRatio) {\n return aspectRatio\n }\n return Math.min(maxAspectRatio, height / width)\n }\n\n static generateImgixProps(props: Props) {\n return {\n fit: props.contain ? 'clip' : 'crop',\n crop: !props.contain\n ? props.focalPoint\n ? 'focalpoint'\n : props.crop\n : undefined,\n auto: ['compress', 'format'],\n 'fp-x': props.focalPoint ? props.focalPoint.x : undefined,\n 'fp-y': props.focalPoint ? props.focalPoint.y : undefined,\n ...props.imgixParams,\n }\n }\n\n static generateSource(\n src: string,\n width: number,\n height: number,\n imgixProps?: Object,\n ) {\n if (width > 0 && height > 0) {\n return processImage(src, {\n ...imgixProps,\n ...imageDimensionMap(width, height),\n })\n }\n\n return null\n }\n\n static generateBlurredSource(\n src: string,\n width: number = 1,\n height: number = 1,\n imgixProps: Object = {},\n ) {\n return processImage(src, {\n ...imgixProps,\n w: Math.ceil(64),\n h: Math.ceil((height / width) * 64),\n dpr: 1,\n q: 50,\n blur: 64,\n })\n }\n\n state = {\n ready: false,\n animatedIn: false,\n elementWidth: 0,\n elementHeight: 0,\n }\n\n timeout = null\n\n componentWillUnmount() {\n if (this.timeout) clearTimeout(this.timeout)\n }\n\n handleLoad = () => {\n if (this.props.fadeIn) {\n this.setState({ ready: true })\n this.timeout = setTimeout(() => {\n this.timeout = null\n this.setState({ animatedIn: true })\n }, 1000)\n } else {\n this.setState({ ready: true, animatedIn: true })\n }\n }\n\n handleTransitionEnd = () => {\n if (this.state.ready) {\n this.setState({ animatedIn: true })\n }\n }\n\n handleError = () => {\n this.setState({ ready: true, animatedIn: true })\n }\n\n handleMeasure = (contentRect: Rect) => {\n this.setState({\n elementWidth: Math.ceil(contentRect.bounds.width),\n elementHeight: Math.ceil(contentRect.bounds.height),\n })\n\n if (this.props.onResize) this.props.onResize(contentRect.bounds)\n }\n\n render() {\n const {\n src,\n fadeIn,\n disableBlur,\n maxAspectRatio,\n fillContainer,\n contain,\n cover,\n alignX,\n alignY,\n width,\n height,\n alt,\n className,\n zoomOnHover,\n aspectRatio,\n } = this.props\n\n const { ready, animatedIn, elementWidth, elementHeight } = this.state\n const imgixProps = Image.generateImgixProps(this.props)\n const currentSrc = Image.generateSource(\n src,\n elementWidth,\n elementHeight,\n imgixProps,\n )\n\n const aspect = !fillContainer\n ? Image.generateAspectRatio(width, height, maxAspectRatio, aspectRatio)\n : null\n\n return (\n \n {({ measureRef }) => {\n return (\n \n {!disableBlur && fadeIn && !animatedIn ? (\n \n ) : null}\n {currentSrc || (!fadeIn && !disableBlur) ? (\n \n ) : null}\n \n )\n }}\n \n )\n }\n}\n\nexport default withImgix(Image)\n","// @flow\nimport * as React from 'react'\nimport styled from 'styled-components'\nimport Heading from '../../../Heading/Heading'\nimport { mediaOnly } from '../../../../styles/media'\nimport { AreaConsumer } from '../../../AreaContext/AreaContext'\n\ntype Props = {\n children?: React.Node,\n level: 1 | 2 | 3 | 4 | 5,\n}\n\nconst SectionHeader = styled(Heading)`\n margin-top: ${p => (p.area === 'accordion' ? 40 : 80)}px;\n\n ${mediaOnly.xs`\n margin-top: ${p => (p.area === 'accordion' ? 20 : 40)}px;\n `};\n`\n\nfunction HeaderRenderer({ children, level }: Props) {\n /* Abuse the fact that we have 5 levels of headers, to render special blocks. */\n if (level === 1) {\n return (\n \n {area => (\n \n {children}\n \n )}\n \n )\n }\n if (level === 2) {\n return (\n \n {area => (\n \n {children}\n \n )}\n \n )\n }\n\n return (\n \n {area => (\n \n {children}\n \n )}\n \n )\n}\n\nHeaderRenderer.displayName = 'HeaderRenderer'\nHeaderRenderer.defaultProps = {}\n\nexport default HeaderRenderer\n","// @flow\nimport * as React from 'react'\nimport styled from 'styled-components'\n\nimport type { LinkViewModel } from '../../../../types/LinkViewModel'\nimport type { LinkTargetTypes } from '../../../../types/enums/LinkTargetTypes'\n\nimport CtaLink from '../../../CtaLink/CtaLink'\nimport { Link, isExternalLink } from '../../../Link/Link'\n\ntype LinkProps = LinkViewModel & {\n children?: React.Node,\n}\n\ntype Props = LinkViewModel & {\n children?: React.Node,\n isCtaLink?: boolean,\n}\n\nconst CtaLinkWrapper = styled.div`\n margin-bottom: 1rem;\n`\n\nconst MarkdownCtaLink = (props: LinkProps) => (\n \n \n \n)\n\nconst MarkdownNormalLink = (props: LinkProps) => {\n return (\n \n {props.children}\n \n )\n}\n\ntype LinkMetaInfo = { href?: string, target?: LinkTargetTypes }\n\nconst getMetaInfoFromHref = (value: string = ''): LinkMetaInfo => {\n let href = value\n let target: LinkTargetTypes = isExternalLink(href) ? '_blank' : '_self'\n\n const hrefSplit = href.split('|')\n\n if (hrefSplit.length > 1) {\n const _target = hrefSplit.splice(1, hrefSplit.length - 1).join('')\n\n switch (_target) {\n case 'blank':\n target = '_blank'\n break\n case 'self':\n target = '_self'\n break\n case 'parent':\n target = '_parent'\n break\n case 'top':\n target = '_top'\n break\n default:\n break\n }\n\n href = hrefSplit.join('|')\n }\n\n return {\n target,\n href,\n }\n}\n\nconst LinkRenderer = (props: Props) => {\n const { isCtaLink, ...rest } = props\n const meta = getMetaInfoFromHref(props.href)\n const linkProps = { ...rest, ...meta }\n\n return isCtaLink ? (\n \n ) : (\n \n )\n}\n\nLinkRenderer.displayName = 'LinkRenderer'\nLinkRenderer.defaultProps = {}\n\nexport default LinkRenderer\n","// @flow\nimport * as React from 'react'\nimport styled from 'styled-components'\nimport Paragraph from '../../../Paragraph/Paragraph'\nimport { getLineHeight } from '../../../../styles/style-helpers'\nimport LinkRenderer from '../LinkRenderer/LinkRenderer'\nimport { color } from '../../../../styles/theme'\n\ntype Props = {\n children?: React.Node,\n}\n\nconst StyledParagraph = styled(Paragraph)`\n line-height: ${getLineHeight('normal')};\n & > a {\n color: inherit;\n }\n`\n\nconst isImageRendere = item =>\n item.type && item.type.displayName === 'ImageRenderer'\nconst isLinkRendere = item =>\n item.type && item.type.displayName === 'LinkRenderer'\n\nfunction ParagraphRenderer({ children }: Props) {\n const childs = React.Children.toArray(children).reduce((acc, val, index) => {\n if (isImageRendere(val)) {\n // Images are always rendered in their own \"paragraph\"\n acc.push(val)\n } else {\n // All other children are added to the list\n if (!acc.length || !Array.isArray(acc[acc.length - 1])) {\n acc.push([])\n }\n acc[acc.length - 1].push(val)\n }\n return acc\n }, [])\n\n return (\n \n {childs.map((child, index) => {\n if (!Array.isArray(child) && isImageRendere(child)) {\n return child\n }\n\n if (child.every(isLinkRendere)) {\n return child.map((link, key) => (\n \n ))\n }\n return (\n \n {child}\n \n )\n })}\n \n )\n}\n\nParagraphRenderer.displayName = 'ParagraphRenderer'\nParagraphRenderer.defaultProps = {}\n\nexport default ParagraphRenderer\n","// @flow\nimport * as React from 'react'\nimport styled from 'styled-components'\nimport qs from 'qs'\nimport Image from '../../../Image/Image'\nimport { mediaOnly } from '../../../../styles/media'\n\ntype Props = {\n src: string,\n title?: string,\n alt?: string,\n}\n\ntype State = {}\n\nconst Wrapper = styled.span`\n display: block;\n margin: 80px 0;\n max-width: ${p => p.maxWidth};\n\n ${mediaOnly.xs`\n margin: 40px 0;\n `};\n`\n\nconst imageSizes = {\n default: {\n maxWidth: '1440px',\n },\n main: {\n maxWidth: '880px',\n },\n}\n\nclass ImageRenderer extends React.PureComponent {\n static displayName = 'ImageRenderer'\n static defaultProps = {}\n\n render() {\n const { src, alt } = this.props\n\n if (!src) return null\n const [imgSrc, attr] = src.split('?', 2)\n const attrs = qs.parse(attr)\n const width = parseInt(attrs.width, 10)\n const height = parseInt(attrs.height, 10)\n const noSizes = !width || !height\n\n return (\n 0 && !noSizes ? `${width}px` : '100%'}>\n \n \n )\n }\n}\n\nexport default ImageRenderer\n","// @flow\nimport * as React from 'react'\nimport styled from 'styled-components'\nimport { rem } from 'polished'\n\nimport { color } from '../../styles/theme'\n\ntype Props = {\n children?: React.Node,\n ordered?: boolean,\n}\n\nconst Base = styled.ul`\n color: inherit;\n //color: ${({ theme }) => theme.text};\n font-size: ${({ theme }) => rem(theme.bodyFontSize)};\n font-weight: ${({ theme }) => theme.bodyFontWeight};\n line-height: 1.5;\n padding: 0 0 0 1.5rem;\n margin-bottom: 2.5rem;\n list-style: none;\n\n > li {\n margin-bottom: 0.5rem;\n list-style-type: none;\n position: relative;\n }\n\n li > ul,\n li > ol {\n margin: 0.5rem 0 0;\n }\n`\n//TODO\nconst UnorderedList = styled(Base)`\n ${({ theme }) =>\n theme.name === 'kids' || theme.name === 'lgbt'\n ? `\n li::before {\n content: ''; /* The unicode for • character */\n position: absolute;\n border: 3px solid ${color.yellow};\n border-radius: 50%;\n width: ${rem(12)};\n height: ${rem(12)};\n left: ${rem(-20)};\n top: ${rem(6)};\n }`\n : `li::before {\n content: '\\\\2022'; /* The unicode for • character */\n position: absolute;\n left: -1em;\n font-size: 1em;\n }`}\n`\n\nconst OrderedList = styled(Base.withComponent('ol'))`\n counter-reset: section;\n li::before {\n counter-increment: section;\n content: counter(section) '.';\n font-weight: 500;\n position: absolute;\n left: -1em;\n font-size: 1rem;\n }\n`\n\nfunction List({ children, ordered, ...props }: Props) {\n const Comp = ordered ? OrderedList : UnorderedList\n return {children}\n}\n\nList.displayName = 'List'\nList.defaultProps = {}\n\nexport default List\n","// @flow\nimport * as React from 'react'\nimport List from '../../../List/List'\nimport { MaxWidth } from '../../markdown-styles'\n\ntype Props = {\n children?: React.Node,\n ordered: boolean,\n}\n\nconst ArticleList = MaxWidth.withComponent(List)\n\nfunction ListRenderer({ children, ordered }: Props) {\n return {children}\n}\n\nListRenderer.displayName = 'ListRenderer'\nListRenderer.defaultProps = {\n ordered: false,\n}\n\nexport default ListRenderer\n","// @flow\nimport styled from 'styled-components'\n\nexport const MaxWidth = styled.div`\n max-width: 550px;\n`\n","// @flow\nimport * as React from 'react'\n\ntype Props = {\n children?: React.Node,\n}\n\n// this renderer resolved a bug in Internet Explorer 11.\n// if supportsStringRender === true, it forces the returned string to be\n// wrapper in a React Fragment to prevent the IE bug from happening\n\n// detect IE8 and above, and Edge\n// source: https://stackoverflow.com/questions/31757852/how-can-i-detect-internet-explorer-ie-and-microsoft-edge-using-javascript\nconst isIE = () =>\n typeof window !== 'undefined' &&\n (document.documentMode || /Edge/.test(navigator.userAgent))\n\nvar supportsStringRender =\n !isIE() && parseInt((React.version || '16').slice(0, 2), 10) >= 16\n\nfunction TextRenderer(props: Props) {\n return supportsStringRender\n ? props.children\n : React.createElement('span', null, props.children)\n}\n\nTextRenderer.displayName = 'TextRenderer'\nTextRenderer.defaultProps = {}\n\nexport default TextRenderer\n","// @flow\nimport * as React from 'react'\nimport ReactMarkdown from 'react-markdown'\n\nimport type { MarkdownViewModel } from '../../types/MarkdownViewModel'\n\nimport HeaderRenderer from './renderers/HeaderRenderer/HeaderRenderer'\nimport ParagraphRenderer from './renderers/ParagraphRenderer/ParagraphRenderer'\nimport LinkRenderer from './renderers/LinkRenderer/LinkRenderer'\nimport ImageRenderer from './renderers/ImageRenderer/ImageRenderer'\nimport ListRenderer from './renderers/ListRenderer/ListRenderer'\nimport TextRenderer from './renderers/TextRenderer/TextRenderer'\n\nimport styled, { css, ThemeContext } from 'styled-components'\nimport { mediaOnly } from '../../styles/media'\nimport { clearMargin } from '../../styles/style-helpers'\n\ntype Props = MarkdownViewModel & { invert?: boolean }\n\nconst RENDERERS = {\n ...ReactMarkdown.renderers,\n heading: HeaderRenderer,\n paragraph: ParagraphRenderer,\n link: LinkRenderer,\n image: ImageRenderer,\n list: ListRenderer,\n text: TextRenderer,\n}\n\nconst normalStyle = css`\n margin: 80px 0;\n ${mediaOnly.xs`\n margin: 40px 0;\n `};\n`\n\nconst fullWidthStyle = css`\n & p {\n max-width: 100%;\n }\n`\n\nconst StyledMarkdown = styled(ReactMarkdown)`\n word-break: break-word;\n ${p => (p.noMargin ? clearMargin() : normalStyle)};\n ${p => (p.fullWidth ? fullWidthStyle : null)};\n color: ${({ theme, invert }) => (invert ? theme.textInvert : theme.text)};\n`\n\nfunction Markdown({\n source,\n noMargin,\n fullWidth,\n className,\n id,\n invert,\n}: Props) {\n const theme = React.useContext(ThemeContext)\n\n return (\n \n )\n}\n\nMarkdown.displayName = 'Markdown'\nMarkdown.defaultProps = {}\n\nexport default Markdown\n","// @flow\nimport * as React from 'react'\nimport styled from 'styled-components'\nimport BaseButton from '../Button/BaseButton'\nimport type { LinkViewModel } from '../../types/LinkViewModel'\nimport { secondaryFontFamily } from '../../styles/theme'\nimport type { ButtonState } from '../Button/BaseButton'\nimport { getFontSize } from '../../styles/style-helpers'\nimport { durations } from '../../styles/animations'\n\ntype Props = LinkViewModel & {\n children?: React.Node,\n /** Always render as anchor tag, don't fall back to button */\n isAnchor?: boolean,\n disabled?: boolean,\n size: 'small' | 'normal',\n invert?: boolean,\n}\n\ntype AlignProps = {\n align: 'left' | 'right',\n}\n\ntype State = {}\n\nconst Base = styled(BaseButton)`\n && {\n display: inline-block;\n font-size: ${(props: Props) => getFontSize(props.size)};\n font-family: ${secondaryFontFamily};\n text-decoration: underline;\n line-height: 1.25;\n text-align: left;\n max-width: 100%;\n transform: translateX(-0.5rem);\n }\n`\n\nconst Container = styled.div`\n position: relative;\n padding: 0.5rem;\n color: ${({ theme, invert }) => (invert ? theme.textInvert : theme.primary)};\n :hover {\n color: ${({ theme }) => theme.accent};\n }\n`\n\nconst Label = styled.span`\n transition: color ${durations.fast} ease-out;\n margin-left: ${(p: AlignProps) => (p.align === 'left' ? '22px' : null)};\n margin-right: ${(p: AlignProps) => (p.align === 'right' ? '22px' : null)};\n`\n\nclass CtaLink extends React.Component {\n static displayName = 'CtaLink'\n static defaultProps = {\n size: 'normal',\n }\n\n renderInner = ({ hovering }: ButtonState) => {\n const { children, label, invert } = this.props\n return (\n \n \n \n )\n }\n\n render() {\n const { children, ...rest } = this.props\n return {this.renderInner}\n }\n}\n\nexport default CtaLink\n","// @flow\nimport * as React from 'react'\nimport { ConfigContext } from '../../App/AppShell'\n\n/* eslint-disable no-param-reassign */\nexport const imageDimensionMap = (\n width: number,\n height: number,\n): { w: number, h: number } => {\n const aspect = height / width\n const normalizedWidth = Math.ceil(width)\n const normalizedHeight = Math.ceil(aspect * normalizedWidth)\n\n return {\n w: normalizedWidth,\n h: normalizedHeight,\n }\n}\n\nfunction imageQuality(dpr: number = 1) {\n return dpr >= 3 ? 30 : dpr === 2 ? 40 : undefined\n}\n\nfunction constructUrl(src, params) {\n const preparedParams = Object.keys(params)\n .filter(k => typeof params[k] !== 'undefined')\n .map(k => `${k}=${encodeURIComponent(params[k])}`)\n .join('&')\n\n return `${src}?${preparedParams}`\n}\n\n/**\n * Construct a URL for an image with an Imgix proxy, expanding image options\n * per the [API reference docs](https://www.imgix.com/docs/reference).\n * @param {String} src src of raw image\n * @param {Object} options map of image API options, in long or short form per expansion rules\n * @return {String} URL of image src transformed by Imgix\n */\nfunction processImage(src: string, options: Object = {}): string {\n if (!src) {\n return ''\n }\n if (!src.includes('imgix.net')) return src\n\n return constructUrl(src, {\n auto: 'format',\n dpr: global.devicePixelRatio || 1,\n q: imageQuality(global.devicePixelRatio),\n ...options,\n })\n}\n\nexport default processImage\n\nexport function withImgix(Component: React.ComponentType) {\n class InjectedComponent extends React.Component {\n render() {\n // todo: maybe check if already has protocol and domain\n if (process.env.NODE_ENV === 'development') {\n return \n }\n\n return (\n \n {config => (\n \n )}\n \n )\n }\n }\n\n return InjectedComponent\n}\n","// @flow\nimport type { ImageRatio } from './types'\n\nconst supports = {}\n\n/**\n * Detect if objectFit is supported on the client\n * @type {boolean}\n */\nexport function objectFitSupport(): boolean {\n if (!supports.objectFit) {\n supports.objectFit = global.document\n ? global.document.body.style.objectFit !== undefined\n : true\n }\n\n return supports.objectFit\n}\n\nexport default {\n objectFitSupport,\n}\n\nexport function generateSrc(\n url: string,\n width: number,\n ratio?: ImageRatio = 'original',\n) {\n if (url && !url.includes('/static/')) {\n const pos = url.lastIndexOf('/')\n return `${url.substr(0, pos)}/${ratio}/${width}/${url.substr(pos + 1)}`\n }\n\n return `${url}?w=${width}&ratio=${ratio || ''}`\n}\n","// @flow\nimport createHyphenation from 'hyphen'\nimport patterns from 'hyphen/patterns/da'\n\nexport const defaultMinWordLength = 15\n\n/**\n * Use the hyphenate function, to split long words with break characters.\n */\nexport const hyphenate = createHyphenation(patterns, {\n async: false,\n minWordLength: defaultMinWordLength,\n})\n\n/**\n * Use the hyphenateHTML function, to split long words within HTML text.\n */\nexport const hyphenateHTML = createHyphenation(patterns, {\n async: false,\n minWordLength: defaultMinWordLength,\n html: true,\n})\n","// @flow\nimport React from 'react'\nimport { hyphenate } from '../../utils/hyphenation'\n\ntype HyphenatedTextProps = {\n text?: string,\n minWordLength?: number,\n}\n\nexport function HyphenatedText({ text, minWordLength }: HyphenatedTextProps) {\n return React.useMemo(\n () => (\n <>\n {text\n ? hyphenate(text, minWordLength ? { minWordLength } : undefined)\n : null}\n >\n ),\n [text, minWordLength],\n )\n}\n","// @flow\nimport * as React from 'react'\nimport { RouteContext } from '../../App/Router'\n\nexport type AccordionContextType = {\n handleToggle: (id: string) => void,\n selected: Array,\n}\nexport const AccordionContext = React.createContext({\n handleToggle: () => {},\n selected: [],\n})\n\ntype Props = {\n children: React.Node,\n initial?: string,\n}\n\ntype State = {\n selected: Array,\n}\n\nclass AccordionContainer extends React.Component {\n static displayName = 'AccordionContainer'\n static contextType = RouteContext\n\n static hasId = (id: string, children: React.Node) => {\n return !!React.Children.toArray(children).find(child => {\n return child.props.id === id\n })\n }\n\n static hashToId = (hash: string) =>\n hash && hash.length > 1 ? hash.substring(1) : undefined\n\n currentHash: string = ''\n\n constructor(props: Props) {\n super(props)\n\n this.state = {\n selected: props.initial ? [props.initial] : [],\n }\n }\n\n componentDidMount(): void {\n const { hash } = this.context.location\n this.currentHash = hash\n\n const id = AccordionContainer.hashToId(hash)\n if (id && AccordionContainer.hasId(id, this.props.children)) {\n // eslint-disable-next-line react/no-did-update-set-state\n this.setState({ selected: [...this.state.selected, id] })\n }\n }\n\n componentDidUpdate(prevProps: Props): void {\n if (\n this.context.location.hash &&\n this.context.location.hash !== this.currentHash\n ) {\n const id = AccordionContainer.hashToId(this.context.location.hash)\n this.currentHash = this.context.location.hash\n\n if (\n id &&\n AccordionContainer.hasId(id, this.props.children) &&\n !this.state.selected.includes(id)\n ) {\n // eslint-disable-next-line react/no-did-update-set-state\n this.setState({ selected: [...this.state.selected, id] })\n }\n }\n }\n\n handleToggle = (id: string) => {\n if (!id) return\n const { selected } = this.state\n if (selected.includes(id)) {\n this.setState({\n selected: this.state.selected.filter(value => value !== id),\n })\n } else {\n this.setState({ selected: [...this.state.selected, id] })\n }\n }\n\n render() {\n return (\n \n \n {this.props.children}\n
\n \n )\n }\n}\n\nexport default AccordionContainer\n","module.exports = require(\"./hyphen.js\");\n","(function (root, factory) {\n if (typeof define === \"function\" && define.amd) {\n // AMD. Register as an anonymous module.\n define([], factory);\n } else if (typeof module === \"object\" && module.exports) {\n // Node. Does not work with strict CommonJS, but\n // only CommonJS-like environments that support module.exports,\n // like Node.\n module.exports = factory();\n } else {\n // Browser globals (root is window)\n root.hyphenationPatternsDa = factory();\n }\n})(this, function () {\n var patterns = [],\n hyphenation = [];\n\n // title: Hyphenation patterns for Danish\n // copyright: Copyright (C) 1994 Frank Jensen\n // notice: This file is part of the hyph-utf8 package.\n // See http://www.hyphenation.org/tex for more information.\n // language:\n // name: Danish\n // tag: da\n // version: 2011-01-11\n // authors:\n // -\n // name: Frank Jensen\n // contact: frank.jensen (at) hugin.com\n // licence:\n // - This file is available under any of these licences:\n // -\n // name: LPPL\n // version: 1.3\n // or_later: true\n // url: http://www.latex-project.org/lppl/lppl-1-3.html\n // -\n // name: MIT\n // url: https://opensource.org/licenses/MIT\n // text: >\n // Permission is hereby granted, free of charge, to any person\n // obtaining a copy of this software and associated documentation\n // files (the \"Software\"), to deal in the Software without\n // restriction, including without limitation the rights to use,\n // copy, modify, merge, publish, distribute, sublicense, and/or sell\n // copies of the Software, and to permit persons to whom the\n // Software is furnished to do so, subject to the following\n // conditions:\n //\n // The above copyright notice and this permission notice shall be\n // included in all copies or substantial portions of the Software.\n //\n // THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n // OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n // WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n // OTHER DEALINGS IN THE SOFTWARE.\n // changes:\n // - 2011-01-11 - remove support for OT1 encoding\n //\n var patterns = [\n \".ae3\",\n \".an3k\",\n \".an1s\",\n \".be5la\",\n \".be1t\",\n \".bi4tr\",\n \".der3i\",\n \".diagno5\",\n \".her3\",\n \".hoved3\",\n \".ne4t5\",\n \".om1\",\n \".ove4\",\n \".po1\",\n \".til3\",\n \".yd5r\",\n \"ab5le\",\n \"3abst\",\n \"a3c\",\n \"ade5la\",\n \"5adg\",\n \"a1e\",\n \"5afg\",\n \"5a4f1l\",\n \"af3r\",\n \"af4ri\",\n \"5afs\",\n \"a4gef\",\n \"a4gi\",\n \"ag5in\",\n \"ag5si\",\n \"3agti\",\n \"a4gy\",\n \"a3h\",\n \"ais5t\",\n \"a3j\",\n \"a5ka\",\n \"a3ke\",\n \"a5kr\",\n \"aku5\",\n \"a3la\",\n \"a1le\",\n \"a1li\",\n \"al3k\",\n \"4alkv\",\n \"a1lo\",\n \"al5si\",\n \"a3lu\",\n \"a1ly\",\n \"am4pa\",\n \"3analy\",\n \"an4k5r\",\n \"a3nu\",\n \"3anv\",\n \"a5o\",\n \"a5pe\",\n \"a3pi\",\n \"a5po\",\n \"a1ra\",\n \"ar5af\",\n \"1arb\",\n \"a1re\",\n \"5arg\",\n \"a1ri\",\n \"a3ro\",\n \"a3sa\",\n \"a3sc\",\n \"a1si\",\n \"a3sk\",\n \"a3so\",\n \"3a3sp\",\n \"a3ste\",\n \"a3sti\",\n \"a1ta1\",\n \"a1te\",\n \"a1ti\",\n \"a4t5in\",\n \"a1to\",\n \"ato5v\",\n \"a5tr\",\n \"a1tu\",\n \"a5va\",\n \"a1ve\",\n \"a5z\",\n \"1ba\",\n \"ba4ti\",\n \"4bd\",\n \"1be\",\n \"be1k\",\n \"be3ro\",\n \"be5ru\",\n \"be1s4\",\n \"be1tr\",\n \"1bi\",\n \"bi5sk\",\n \"b1j\",\n \"4b1n\",\n \"1bo\",\n \"bo4gr\",\n \"bo3ra\",\n \"bo5re\",\n \"1br4\",\n \"4bs\",\n \"bs5k\",\n \"b3so\",\n \"b1st\",\n \"b5t\",\n \"3bu\",\n \"bu4s5tr\",\n \"b5w\",\n \"1by\",\n \"by5s\",\n \"4c1c\",\n \"1ce\",\n \"ce5ro\",\n \"3ch\",\n \"4ch.\",\n \"ci4o\",\n \"ck3\",\n \"5cy\",\n \"3da\",\n \"4d3af\",\n \"d5anta\",\n \"da4s\",\n \"d1b\",\n \"d1d4\",\n \"1de\",\n \"de5d\",\n \"4de4lem\",\n \"der5eri\",\n \"de4rig\",\n \"de5sk\",\n \"d1f\",\n \"d1g\",\n \"d3h\",\n \"1di\",\n \"di1e\",\n \"di5l\",\n \"d3j\",\n \"d1k\",\n \"d1l\",\n \"d1m\",\n \"4d1n\",\n \"3do\",\n \"4dop\",\n \"d5ov\",\n \"d1p\",\n \"4drett\",\n \"5d4reve\",\n \"3drif\",\n \"3driv\",\n \"d5ros\",\n \"d5ru\",\n \"ds5an\",\n \"ds5in\",\n \"d1ski\",\n \"d4sm\",\n \"d4su\",\n \"dsu5l\",\n \"ds5vi\",\n \"d3ta\",\n \"d1te\",\n \"dt5o\",\n \"d5tr\",\n \"dt5u\",\n \"1du\",\n \"dub5\",\n \"d1v\",\n \"3dy\",\n \"e5ad\",\n \"e3af\",\n \"e5ag\",\n \"e3ak\",\n \"e1al\",\n \"ea4la\",\n \"e3an\",\n \"e5ap\",\n \"e3at\",\n \"e3bl\",\n \"ebs3\",\n \"e1ci\",\n \"ed5ar\",\n \"edde4\",\n \"eddel5\",\n \"e4do\",\n \"ed5ra\",\n \"ed3re\",\n \"ed3rin\",\n \"ed4str\",\n \"e3e\",\n \"3eff\",\n \"e3fr\",\n \"3eft\",\n \"e3gu\",\n \"e1h\",\n \"e3in\",\n \"ei5s\",\n \"e3je\",\n \"e4j5el\",\n \"e1ka\",\n \"e3ke\",\n \"e3kl\",\n \"4e1ko\",\n \"e5kr\",\n \"ek5sa\",\n \"3eksem\",\n \"3eksp\",\n \"e3ku\",\n \"e1kv\",\n \"e5ky\",\n \"e3lad\",\n \"el3ak\",\n \"el3ar\",\n \"e1las\",\n \"e3le\",\n \"e4lek\",\n \"3elem\",\n \"e1li\",\n \"5elim\",\n \"e3lo\",\n \"el5sa\",\n \"e5lu\",\n \"e3ly\",\n \"e4mad\",\n \"em4p5le\",\n \"em1s\",\n \"en5ak\",\n \"e4nan\",\n \"4enn\",\n \"e4no\",\n \"en3so\",\n \"e5nu\",\n \"e5ol\",\n \"e3op\",\n \"e1or\",\n \"e3ov\",\n \"epi3\",\n \"e1pr\",\n \"e3ra\",\n \"er3af\",\n \"e4rag\",\n \"e4rak\",\n \"e1re\",\n \"e4ref\",\n \"er5ege\",\n \"5erhv\",\n \"e1ri\",\n \"e4rib\",\n \"er1k\",\n \"ero5d\",\n \"er5ov\",\n \"er3s\",\n \"er5tr\",\n \"e3rum\",\n \"er5un\",\n \"e5ry\",\n \"e1ta\",\n \"e1te\",\n \"etek4s\",\n \"e1ti\",\n \"e3tj\",\n \"e1to\",\n \"e3tr\",\n \"e3tu\",\n \"e1ty\",\n \"e3um\",\n \"e3un\",\n \"3eur\",\n \"e1va\",\n \"e3ve\",\n \"e4v3erf\",\n \"e1vi\",\n \"e5x\",\n \"1fa\",\n \"fa4ce\",\n \"fags3\",\n \"f1b\",\n \"f1d\",\n \"1fe\",\n \"fej4\",\n \"fejl1\",\n \"f1f\",\n \"f1g\",\n \"f1h\",\n \"1fi\",\n \"f1k\",\n \"3fl\",\n \"1fo\",\n \"for1en\",\n \"fo4ri\",\n \"f1p\",\n \"f1s4\",\n \"4ft\",\n \"f3ta\",\n \"f1te\",\n \"f1ti\",\n \"f5to\",\n \"f5tvi\",\n \"1fu\",\n \"f1v\",\n \"3fy\",\n \"1ga\",\n \"g3art\",\n \"g1b\",\n \"g1d\",\n \"1ge\",\n \"4g5enden\",\n \"ger3in\",\n \"ge3s\",\n \"g3f\",\n \"g1g\",\n \"g1h\",\n \"1gi\",\n \"gi4b\",\n \"gi3st\",\n \"5gj\",\n \"g3k\",\n \"g1l\",\n \"g1m\",\n \"3go\",\n \"4g5om\",\n \"g5ov\",\n \"g3p\",\n \"1gr\",\n \"gs1a\",\n \"gsde4len\",\n \"g4se\",\n \"gsha4\",\n \"g5sla\",\n \"gs3or\",\n \"gs1p\",\n \"g5s4tide\",\n \"g4str\",\n \"gs1v\",\n \"g3ta\",\n \"g1te\",\n \"g1ti\",\n \"g5to\",\n \"g3tr\",\n \"gt4s\",\n \"g3ud\",\n \"gun5\",\n \"g3v\",\n \"1gy\",\n \"g5yd\",\n \"4ha.\",\n \"heds3\",\n \"he5s\",\n \"4het\",\n \"hi4e\",\n \"hi4n5\",\n \"hi3s\",\n \"ho5ko\",\n \"ho5ve\",\n \"4h3t\",\n \"hun4\",\n \"hund3\",\n \"hvo4\",\n \"i1a\",\n \"i3b\",\n \"i4ble\",\n \"i1c\",\n \"i3dr\",\n \"ids5k\",\n \"i1el\",\n \"i1en\",\n \"i3er\",\n \"i3et.\",\n \"if3r\",\n \"i3gu\",\n \"i3h\",\n \"i5i\",\n \"i5j\",\n \"i1ka\",\n \"i1ke\",\n \"ik1l\",\n \"i5ko\",\n \"ik3re\",\n \"ik5ri\",\n \"iks5t\",\n \"ik4tu\",\n \"i3ku\",\n \"ik3v\",\n \"i3lag\",\n \"il3eg\",\n \"il5ej\",\n \"il5el\",\n \"i3li\",\n \"i4l5id\",\n \"il3k\",\n \"i1lo\",\n \"il5u\",\n \"i3mu\",\n \"ind3t\",\n \"5inf\",\n \"ings1\",\n \"in3s\",\n \"in4sv\",\n \"inter1\",\n \"i3nu\",\n \"i3od\",\n \"i3og\",\n \"i5ok\",\n \"i3ol\",\n \"ion4\",\n \"ions1\",\n \"i5o5r\",\n \"i3ot\",\n \"i5pi\",\n \"i3pli\",\n \"i5pr\",\n \"i3re\",\n \"i3ri\",\n \"ir5t\",\n \"i3sc\",\n \"i3si\",\n \"i4sm\",\n \"is3p\",\n \"i1ster\",\n \"i3sti\",\n \"i5sua\",\n \"i1ta\",\n \"i1te\",\n \"i1ti\",\n \"i3to\",\n \"i3tr\",\n \"it5re.\",\n \"i1tu\",\n \"i3ty\",\n \"i1u\",\n \"i1va\",\n \"i1ve\",\n \"i1vi\",\n \"j3ag\",\n \"jde4rer\",\n \"jds1\",\n \"jek4to\",\n \"4j5en.\",\n \"j5k\",\n \"j3le\",\n \"j3li\",\n \"jlmeld5\",\n \"jlmel4di\",\n \"j3r\",\n \"jre5\",\n \"ju3s\",\n \"5kap\",\n \"k5au\",\n \"5kav\",\n \"k5b\",\n \"kel5s\",\n \"ke3sk\",\n \"ke5st\",\n \"ke4t5a\",\n \"k3h\",\n \"ki3e\",\n \"ki3st\",\n \"k1k\",\n \"k5lak\",\n \"k1le\",\n \"3klu\",\n \"k4ny\",\n \"5kod\",\n \"1kon\",\n \"ko3ra\",\n \"3kort\",\n \"ko3v\",\n \"1kra\",\n \"5kry\",\n \"ks3an\",\n \"k1si\",\n \"ks3k\",\n \"ks1p\",\n \"k3ste\",\n \"k5stu\",\n \"ks5v\",\n \"k1t\",\n \"k4tar\",\n \"k4terh\",\n \"kti4e\",\n \"kt5re\",\n \"kt5s\",\n \"3kur\",\n \"1kus\",\n \"3kut\",\n \"k4vo\",\n \"k4vu\",\n \"5lab\",\n \"lad3r\",\n \"5lagd\",\n \"la4g3r\",\n \"5lam\",\n \"1lat\",\n \"l1b\",\n \"ldiagnos5\",\n \"l3dr\",\n \"ld3st\",\n \"1le.\",\n \"5led\",\n \"4lele\",\n \"le4mo\",\n \"3len\",\n \"1ler\",\n \"1les\",\n \"4leu\",\n \"l1f\",\n \"lfin4\",\n \"lfind5\",\n \"l1go1\",\n \"l3h\",\n \"li4ga\",\n \"4l5ins\",\n \"4l3int\",\n \"li5o\",\n \"l3j\",\n \"l1ke\",\n \"l1ko\",\n \"l3ky\",\n \"l1l\",\n \"l5mu\",\n \"lo4du\",\n \"l3op\",\n \"4l5or\",\n \"3lov\",\n \"4l3p\",\n \"l4ps\",\n \"l3r\",\n \"4ls\",\n \"lses1\",\n \"ls5in\",\n \"l5sj\",\n \"l1ta\",\n \"l4taf\",\n \"l1te\",\n \"l4t5erf\",\n \"l3ti\",\n \"lt3o\",\n \"l3tr\",\n \"l3tu\",\n \"lu5l\",\n \"l3ve\",\n \"l3vi\",\n \"1ma\",\n \"m1b\",\n \"m3d\",\n \"1me\",\n \"4m5ej\",\n \"m3f\",\n \"m1g\",\n \"m3h\",\n \"1mi\",\n \"mi3k\",\n \"m5ing\",\n \"mi4o\",\n \"mi5sty\",\n \"m3k\",\n \"m1l\",\n \"m1m\",\n \"mmen5\",\n \"m1n\",\n \"3mo\",\n \"mo4da\",\n \"4mop\",\n \"4m5ov\",\n \"m1pe\",\n \"m3pi\",\n \"m3pl\",\n \"m1po\",\n \"m3pr\",\n \"m1r\",\n \"mse5s\",\n \"ms5in\",\n \"m5sk\",\n \"ms3p\",\n \"m3ste\",\n \"ms5v\",\n \"m3ta\",\n \"m3te\",\n \"m3ti\",\n \"m3tr\",\n \"m1ud\",\n \"1mul\",\n \"mu1li\",\n \"3my\",\n \"3na\",\n \"4nak\",\n \"1nal\",\n \"n1b\",\n \"n1c\",\n \"4nd\",\n \"n3dr\",\n \"nd5si\",\n \"nd5sk\",\n \"nd5sp\",\n \"1ne\",\n \"ne5a\",\n \"ne4da\",\n \"nemen4\",\n \"nement5e\",\n \"neo4\",\n \"n3erk\",\n \"n5erl\",\n \"ne5sl\",\n \"ne5st\",\n \"n1f\",\n \"n4go\",\n \"4n1h\",\n \"1ni\",\n \"4nim\",\n \"ni5o\",\n \"ni3st\",\n \"n1ke\",\n \"n1ko\",\n \"n3kr\",\n \"n3ku\",\n \"n5kv\",\n \"4n1l\",\n \"n1m\",\n \"n1n\",\n \"1no\",\n \"n3ord\",\n \"n5p\",\n \"n3r\",\n \"4ns\",\n \"n3si\",\n \"n1sku\",\n \"ns3po\",\n \"n1sta\",\n \"n5sti\",\n \"n1ta\",\n \"nta4le\",\n \"n1te\",\n \"n1ti\",\n \"ntiali4\",\n \"n3to\",\n \"n1tr\",\n \"nt4s5t\",\n \"nt4su\",\n \"n3tu\",\n \"n3ty\",\n \"4n1v\",\n \"3ny\",\n \"n3z\",\n \"o3a\",\n \"o4as\",\n \"ob3li\",\n \"o1c\",\n \"o4din\",\n \"od5ri\",\n \"od5s\",\n \"od5un\",\n \"o1e\",\n \"of5r\",\n \"o4gek\",\n \"o4gel\",\n \"o4g5o\",\n \"og5re\",\n \"og5sk\",\n \"o5h\",\n \"o5in\",\n \"oi6s5e\",\n \"o1j\",\n \"o3ka\",\n \"o1ke\",\n \"o3ku\",\n \"o3la\",\n \"o3le\",\n \"o1li\",\n \"o1lo\",\n \"o3lu\",\n \"o5ly\",\n \"1omr\",\n \"on3k\",\n \"ook5\",\n \"o3or\",\n \"o5ov\",\n \"o3pi\",\n \"op3l\",\n \"op3r\",\n \"op3s\",\n \"3opta\",\n \"4or.\",\n \"or1an\",\n \"3ordn\",\n \"ord5s\",\n \"o3re.\",\n \"o3reg\",\n \"o3rek\",\n \"o3rer\",\n \"o3re3s\",\n \"o3ret\",\n \"o3ri\",\n \"3orient\",\n \"or5im\",\n \"o4r5in\",\n \"or3k\",\n \"or5o\",\n \"or3sl\",\n \"or3st\",\n \"o3si\",\n \"o3so\",\n \"o3t\",\n \"o1te\",\n \"o5un\",\n \"ov4s\",\n \"3pa\",\n \"pa5gh\",\n \"p5anl\",\n \"p3d\",\n \"4pec\",\n \"3pen\",\n \"1per\",\n \"pe1ra\",\n \"pe5s\",\n \"pe3u\",\n \"p3f\",\n \"4p5h\",\n \"1pla\",\n \"p4lan\",\n \"4ple.\",\n \"4pler\",\n \"4ples\",\n \"p3m\",\n \"p3n\",\n \"5pok\",\n \"4po3re\",\n \"3pot\",\n \"4p5p4\",\n \"p4ro\",\n \"1proc\",\n \"p3sk\",\n \"p5so\",\n \"ps4p\",\n \"p3st\",\n \"p1t\",\n \"1pu\",\n \"pu5b\",\n \"p5ule\",\n \"p5v\",\n \"5py3\",\n \"qu4\",\n \"4raf\",\n \"ra5is\",\n \"4rarb\",\n \"r1b\",\n \"r4d5ar\",\n \"r3dr\",\n \"rd4s3\",\n \"4reks\",\n \"1rel\",\n \"re5la\",\n \"r5enss\",\n \"5rese\",\n \"re5spo\",\n \"4ress\",\n \"re3st\",\n \"re5s4u\",\n \"5rett\",\n \"r1f\",\n \"r1gu\",\n \"r1h\",\n \"ri1e\",\n \"ri5la\",\n \"4rimo\",\n \"r4ing\",\n \"ringse4\",\n \"ringso4r\",\n \"4rinp\",\n \"4rint\",\n \"r3ka\",\n \"r1ke\",\n \"r1ki\",\n \"rk3so\",\n \"r3ku\",\n \"r1l\",\n \"rmo4\",\n \"r5mu\",\n \"r1n\",\n \"ro1b\",\n \"ro3p\",\n \"r3or\",\n \"r3p\",\n \"r1r\",\n \"rre5s\",\n \"rro4n5\",\n \"r1sa\",\n \"r1si\",\n \"r5skr\",\n \"r4sk5v\",\n \"rs4n\",\n \"r3sp\",\n \"r5stu\",\n \"r5su\",\n \"r3sv\",\n \"r5tal\",\n \"r1te\",\n \"r4teli\",\n \"r1ti\",\n \"r3to\",\n \"r4t5or\",\n \"rt5rat\",\n \"rt3re\",\n \"r5tri\",\n \"r5tro\",\n \"rt3s\",\n \"r5ty\",\n \"r3ud\",\n \"run4da\",\n \"5rut\",\n \"r3va\",\n \"r1ve\",\n \"r3vi\",\n \"ry4s\",\n \"s3af\",\n \"1sam\",\n \"sa4ma\",\n \"s3ap\",\n \"s1ar\",\n \"1sat\",\n \"4s1b\",\n \"s1d\",\n \"sdy4\",\n \"1se\",\n \"s4ed\",\n \"5s4er\",\n \"se4se\",\n \"s1f\",\n \"4s1g4\",\n \"4s3h\",\n \"si4bl\",\n \"1sig\",\n \"s5int\",\n \"5sis\",\n \"5sit\",\n \"5siu\",\n \"s5ju\",\n \"4sk.\",\n \"1skab\",\n \"1ske\",\n \"s3kl\",\n \"sk5s4\",\n \"5sky\",\n \"s1le\",\n \"s1li\",\n \"slo3\",\n \"5slu\",\n \"s5ly\",\n \"s1m\",\n \"s4my\",\n \"4snin\",\n \"s4nit\",\n \"so5k\",\n \"5sol\",\n \"5som.\",\n \"3somm\",\n \"s5oms\",\n \"5somt\",\n \"3son\",\n \"4s1op\",\n \"sp4\",\n \"3spec\",\n \"4sper\",\n \"3s4pi\",\n \"s1pl\",\n \"3sprog.\",\n \"s5r4\",\n \"s1s4\",\n \"4st.\",\n \"5s4tam\",\n \"1stan\",\n \"st5as\",\n \"3stat\",\n \"1stav\",\n \"1ste.\",\n \"1sted\",\n \"3stel\",\n \"5stemo\",\n \"1sten\",\n \"5step\",\n \"3ster.\",\n \"3stes\",\n \"5stet\",\n \"5stj\",\n \"3sto\",\n \"st5om\",\n \"1str\",\n \"s1ud\",\n \"3sul\",\n \"s3un\",\n \"3sur\",\n \"s3ve\",\n \"3s4y\",\n \"1sy1s\",\n \"5ta.\",\n \"1tag\",\n \"tands3\",\n \"4tanv\",\n \"4tb\",\n \"tede4l\",\n \"teds5\",\n \"3teg\",\n \"5tekn\",\n \"teo1\",\n \"5term\",\n \"te5ro\",\n \"4t1f\",\n \"6t3g\",\n \"t1h\",\n \"tialis5t\",\n \"3tid\",\n \"ti4en\",\n \"ti3st\",\n \"4t3k\",\n \"4t1l\",\n \"tli4s5\",\n \"t1m\",\n \"t1n\",\n \"to5ra\",\n \"to1re\",\n \"to1ri\",\n \"tor4m\",\n \"4t3p\",\n \"t4ra\",\n \"4tres\",\n \"tro5v\",\n \"1try\",\n \"4ts\",\n \"t3si\",\n \"ts4pa\",\n \"ts5pr\",\n \"t3st\",\n \"ts5ul\",\n \"4t1t\",\n \"t5uds\",\n \"5tur\",\n \"t5ve\",\n \"1typ\",\n \"u1a\",\n \"5udl\",\n \"ud5r\",\n \"ud3s\",\n \"3udv\",\n \"u1e\",\n \"ue4t5\",\n \"uge4ri\",\n \"ugs3\",\n \"u5gu\",\n \"u3i\",\n \"u5kl\",\n \"uk4ta\",\n \"uk4tr\",\n \"u1la\",\n \"u1le\",\n \"u5ly\",\n \"u5pe\",\n \"up5l\",\n \"u5q\",\n \"u3ra\",\n \"u3re\",\n \"u4r3eg\",\n \"u1rer\",\n \"u3ro\",\n \"us5a\",\n \"u3si\",\n \"u5ska\",\n \"u5so\",\n \"us5v\",\n \"u1te\",\n \"u1ti\",\n \"u1to\",\n \"ut5r\",\n \"ut5s4\",\n \"5u5v\",\n \"va5d\",\n \"3varm\",\n \"1ved\",\n \"ve4l5e\",\n \"ve4reg\",\n \"ve3s\",\n \"5vet\",\n \"v5h\",\n \"vi4l3in\",\n \"1vis\",\n \"v5j\",\n \"v5k\",\n \"vl4\",\n \"v3le\",\n \"v5li\",\n \"vls1\",\n \"1vo\",\n \"4v5om\",\n \"v5p\",\n \"v5re\",\n \"v3st\",\n \"v5su\",\n \"v5t\",\n \"3vu\",\n \"y3a\",\n \"y5dr\",\n \"y3e\",\n \"y3ke\",\n \"y5ki\",\n \"yk3li\",\n \"y3ko\",\n \"yk4s5\",\n \"y3kv\",\n \"y5li\",\n \"y5lo\",\n \"y5mu\",\n \"yns5\",\n \"y5o\",\n \"y1pe\",\n \"y3pi\",\n \"y3re\",\n \"yr3ek\",\n \"y3ri\",\n \"y3si\",\n \"y3ti\",\n \"y5t3r\",\n \"y5ve\",\n \"zi5o\",\n \".så3\",\n \".ær5i\",\n \".øv3r\",\n \"a3tø\",\n \"a5væ\",\n \"brød3\",\n \"5bæ\",\n \"5drøv\",\n \"dstå4\",\n \"3dæ\",\n \"3dø\",\n \"e3læ\",\n \"e3lø\",\n \"e3rø\",\n \"er5øn\",\n \"e5tæ\",\n \"e5tø\",\n \"e1væ\",\n \"e3æ\",\n \"e5å\",\n \"3fæ\",\n \"3fø\",\n \"fø4r5en\",\n \"giø4\",\n \"g4sø\",\n \"g5så\",\n \"3gæ\",\n \"3gø1\",\n \"3gå\",\n \"i5tæ\",\n \"i3ø\",\n \"3kø\",\n \"3kå\",\n \"lingeniø4\",\n \"l3væ\",\n \"5løs\",\n \"m5tå\",\n \"1mæ\",\n \"3mø\",\n \"3må\",\n \"n3kæ\",\n \"n5tæ\",\n \"3næ\",\n \"4n5æb\",\n \"5nø\",\n \"o5læ\",\n \"or3ø\",\n \"o5å\",\n \"5præ\",\n \"5pæd\",\n \"på3\",\n \"r5kæ\",\n \"r5tæ\",\n \"r5tø\",\n \"r3væ\",\n \"r5æl\",\n \"4røn\",\n \"5rør\",\n \"3råd\",\n \"r5år\",\n \"s4kå\",\n \"3slå\",\n \"s4næ\",\n \"5stø\",\n \"1stå\",\n \"1sæ\",\n \"4s5æn\",\n \"1sø\",\n \"s5øk\",\n \"så4r5\",\n \"ti4ø\",\n \"3træk.\",\n \"t4sø\",\n \"t5så\",\n \"t3væ\",\n \"u3læ\",\n \"3værd\",\n \"1værk\",\n \"5vå\",\n \"y5væ\",\n \"æb3l\",\n \"æ3c\",\n \"æ3e\",\n \"æg5a\",\n \"æ4gek\",\n \"æ4g5r\",\n \"ægs5\",\n \"æ5i\",\n \"æ5kv\",\n \"ælle4\",\n \"æn1dr\",\n \"æ5o\",\n \"æ1re\",\n \"ær4g5r\",\n \"æ3ri\",\n \"ær4ma\",\n \"ær4mo\",\n \"ær5s\",\n \"æ5si\",\n \"æ3so\",\n \"æ3ste\",\n \"æ3ve\",\n \"øde5\",\n \"ø3e\",\n \"ø1je\",\n \"ø3ke\",\n \"ø3le\",\n \"øms5\",\n \"øn3st\",\n \"øn4t3\",\n \"ø1re\",\n \"ø3ri\",\n \"ørne3\",\n \"ør5o\",\n \"ø1ve\",\n \"å1d\",\n \"å1e\",\n \"å5h\",\n \"å3l\",\n \"å3re\",\n \"års5t\",\n \"å5sk\",\n \"å3t\",\n \"\"\n ];\n\n return {\n patterns: patterns,\n exceptions: hyphenation\n };\n});\n","/** Text hyphenation in Javascript.\n * Copyright (C) 2021 Yevhen Tiurin (yevhentiurin@gmail.com)\n * https://github.com/ytiurin/hyphen\n *\n * Released under the ISC license\n * https://github.com/ytiurin/hyphen/blob/master/LICENSE\n */\n(function (root, factory) {\n if (typeof define === \"function\" && define.amd) {\n // AMD. Register as an anonymous module.\n define([], factory);\n } else if (typeof module === \"object\" && module.exports) {\n // Node. Does not work with strict CommonJS, but\n // only CommonJS-like environments that support module.exports,\n // like Node.\n module.exports = factory();\n } else {\n // Browser globals (root is window)\n root.createHyphenator = factory();\n }\n})(this, function () {\n var SETTING_DEFAULT_ASYNC = false,\n SETTING_DEFAULT_DEBUG = false,\n SETTING_DEFAULT_HTML = false,\n SETTING_DEFAULT_HYPH_CHAR = \"\\u00AD\",\n SETTING_DEFAULT_MIN_WORD_LENGTH = 5,\n SETTING_NAME_ASYNC = \"async\",\n SETTING_NAME_DEBUG = \"debug\",\n SETTING_NAME_HTML = \"html\",\n SETTING_NAME_HYPH_CHAR = \"hyphenChar\",\n SETTING_NAME_MIN_WORD_LENGTH = \"minWordLength\";\n\n var _global =\n typeof global === \"object\"\n ? global\n : typeof window === \"object\"\n ? window\n : typeof self === \"object\"\n ? self\n : typeof this === \"object\"\n ? this\n : {};\n\n function cloneObj(source) {\n var target = {};\n for (var key in source) {\n target[key] = source[key];\n }\n return target;\n }\n\n function keyOrDefault(object, key, defaultValue) {\n if (key in object) {\n return object[key];\n }\n return defaultValue;\n }\n\n function exceptionsFromDefinition(patternsDefinition, hyphenChar) {\n return patternsDefinition.exceptions.reduce(function (\n exceptions,\n exception\n ) {\n exceptions[exception.replace(/\\-/g, \"\")] = exception.replace(\n /\\-/g,\n hyphenChar\n );\n return exceptions;\n },\n {});\n }\n\n function createHyphenator(patternsDefinition, options) {\n options = options || {};\n var //\n asyncMode = keyOrDefault(\n options,\n SETTING_NAME_ASYNC,\n SETTING_DEFAULT_ASYNC\n ),\n caches = {},\n debug = keyOrDefault(options, SETTING_NAME_DEBUG, SETTING_DEFAULT_DEBUG),\n exceptions = {},\n hyphenChar = keyOrDefault(\n options,\n SETTING_NAME_HYPH_CHAR,\n SETTING_DEFAULT_HYPH_CHAR\n ),\n patterns = createPatternTree(\n patternsDefinition.patterns.filter(function (p) {\n return p !== \" \" && p !== \"\";\n })\n )[0],\n minWordLength =\n keyOrDefault(\n options,\n SETTING_NAME_MIN_WORD_LENGTH,\n SETTING_DEFAULT_MIN_WORD_LENGTH\n ) >> 0,\n skipHTML = keyOrDefault(options, SETTING_NAME_HTML, SETTING_DEFAULT_HTML);\n\n // Prepare cache\n var cacheKey = hyphenChar + minWordLength;\n exceptions[cacheKey] = exceptionsFromDefinition(\n patternsDefinition,\n hyphenChar\n );\n caches[cacheKey] = cloneObj(exceptions[cacheKey]);\n\n if (asyncMode && !(\"Promise\" in _global)) {\n throw new Error(\n \"Failed to create hyphenator: Could not find global Promise object, needed for hyphenator to work in async mode\"\n );\n }\n\n return function (text, options) {\n options = options || {};\n\n var localDebug = keyOrDefault(options, SETTING_NAME_DEBUG, debug),\n localHyphenChar = keyOrDefault(\n options,\n SETTING_NAME_HYPH_CHAR,\n hyphenChar\n ),\n localMinWordLength =\n keyOrDefault(options, SETTING_NAME_MIN_WORD_LENGTH, minWordLength) >>\n 0,\n cacheKey = localHyphenChar + localMinWordLength;\n\n if (!exceptions[cacheKey]) {\n exceptions[cacheKey] = exceptionsFromDefinition(\n patternsDefinition,\n localHyphenChar\n );\n }\n\n if (!caches[cacheKey]) {\n caches[cacheKey] = cloneObj(exceptions[cacheKey]);\n }\n\n return start(\n text,\n patterns,\n caches[cacheKey],\n localDebug,\n localHyphenChar,\n skipHTML,\n localMinWordLength,\n asyncMode\n );\n };\n }\n var NUMS = [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\"];\n\n function createIterator(str) {\n var i = 0;\n\n function next() {\n return str[i++];\n }\n\n return next;\n }\n\n function createPatternTree(patterns) {\n var pattern,\n symb,\n maxPatternLength = 0,\n patternTree = [{}],\n nextPattern = createIterator(patterns);\n\n while ((pattern = nextPattern())) {\n var ptr = patternTree,\n symb,\n weights = [],\n patternLength = 0,\n prevSymbIsNumber = false,\n nextSymbol = createIterator(pattern.split(\"\"));\n\n while ((symb = nextSymbol())) {\n if (NUMS.indexOf(symb) > -1) {\n weights.push(parseInt(symb));\n\n prevSymbIsNumber = true;\n } else {\n if (!prevSymbIsNumber && symb !== \".\") {\n weights.push(0);\n }\n\n if (symb !== \".\") {\n patternLength++;\n }\n\n ptr[0][symb] = ptr[0][symb] || [{}];\n ptr = ptr[0][symb];\n\n prevSymbIsNumber = false;\n }\n }\n\n while (weights[weights.length - 1] === 0) {\n weights.pop();\n }\n\n ptr[1] = weights;\n ptr[2] = pattern;\n\n if (maxPatternLength < patternLength) {\n maxPatternLength = patternLength;\n }\n }\n\n return [patternTree[0], maxPatternLength];\n }\n function createTextChunkReader(text, hyphenChar, skipHTML, minWordLength) {\n function readNextTextChunk() {\n var nextTextChunk = \"\";\n\n shouldHyphenate = void 0;\n\n chunkReader: while (nextCharIndex <= text.length) {\n var //\n nextChar = text.charAt(nextCharIndex++),\n charIsLetter =\n !!nextChar && !/\\s|[\\!-\\@\\[-\\`\\{-\\~\\u2013-\\u203C]/.test(nextChar),\n charIsAngleOpen = nextChar === \"<\",\n charIsAngleClose = nextChar === \">\",\n charIsHyphen = nextChar === hyphenChar;\n\n do {\n if (state === STATE_READ_TAG) {\n if (charIsAngleClose) {\n state = STATE_RETURN_UNTOUCHED;\n }\n break;\n }\n\n if (charIsHyphen) {\n shouldHyphenate = SHOULD_SKIP;\n state = STATE_READ_WORD;\n break;\n }\n\n if (charIsLetter) {\n state = STATE_READ_WORD;\n break;\n }\n\n if (state === STATE_READ_WORD) {\n state = STATE_RETURN_WORD;\n shouldHyphenate =\n shouldHyphenate ||\n (nextTextChunk.length >= minWordLength && SHOULD_HYPHENATE);\n break;\n }\n\n shouldHyphenate = SHOULD_SKIP;\n state = STATE_RETURN_UNTOUCHED;\n } while (0);\n\n if (\n charIsAngleOpen &&\n state !== STATE_RETURN_WORD &&\n skipHTML &&\n !isSpacelike(text.charAt(nextCharIndex))\n ) {\n shouldHyphenate = SHOULD_SKIP;\n state = STATE_READ_TAG;\n }\n\n switch (state) {\n case STATE_READ_TAG:\n nextTextChunk += nextChar;\n break;\n\n case STATE_READ_WORD:\n nextTextChunk += nextChar;\n break;\n\n case STATE_RETURN_UNTOUCHED:\n nextTextChunk += nextChar;\n break chunkReader;\n\n case STATE_RETURN_WORD:\n nextCharIndex--;\n break chunkReader;\n }\n }\n return nextTextChunk || void 0;\n }\n\n function shouldNextHyphenate() {\n return shouldHyphenate === SHOULD_HYPHENATE;\n }\n\n var isSpacelike = RegExp.prototype.test.bind(/\\s/);\n\n var //\n nextCharIndex = 0,\n SHOULD_HYPHENATE = 1,\n SHOULD_SKIP = 2,\n shouldHyphenate,\n STATE_READ_TAG = 1,\n STATE_READ_WORD = 2,\n STATE_RETURN_UNTOUCHED = 3,\n STATE_RETURN_WORD = 4,\n state;\n\n return [readNextTextChunk, shouldNextHyphenate];\n }\n function createCharIterator(str) {\n var i = 0;\n\n function nextChar() {\n return str[i++];\n }\n\n function isLastLetter() {\n return str.length === i + 1;\n }\n\n return [nextChar, isLastLetter];\n }\n\n function createStringSlicer(str) {\n var i = 0,\n slice = str;\n\n function next() {\n slice = str.slice(i++);\n\n if (slice.length < 3) {\n return;\n }\n\n return slice;\n }\n\n function isFirstCharacter() {\n return i === 2;\n }\n\n return [next, isFirstCharacter];\n }\n\n function hyphenateWord(text, patternTree, debug, hyphenChar) {\n var //\n levels = new Array(text.length + 1),\n loweredText = (\".\" + text.toLocaleLowerCase() + \".\").split(\"\"),\n p = [],\n wordSlice,\n letter,\n treePtr,\n nextPtr,\n patternLevels,\n patternEntityIndex = -1,\n slicer,\n nextSlice,\n isFirstCharacter,\n charIterator,\n nextLetter,\n isLastLetter;\n\n for (var i = levels.length; i--; ) levels[i] = 0;\n\n slicer = createStringSlicer(loweredText);\n nextSlice = slicer[0];\n isFirstCharacter = slicer[1];\n\n while ((wordSlice = nextSlice())) {\n patternEntityIndex++;\n if (isFirstCharacter()) {\n patternEntityIndex--;\n }\n\n treePtr = patternTree;\n\n charIterator = createCharIterator(wordSlice);\n nextLetter = charIterator[0];\n isLastLetter = charIterator[1];\n\n while ((letter = nextLetter())) {\n if (treePtr[letter] === undefined) {\n break;\n }\n\n nextPtr = treePtr[letter];\n treePtr = nextPtr[0];\n patternLevels = nextPtr[1];\n\n if (isLastLetter()) {\n // ignore patterns for last letter\n continue;\n }\n\n if (patternLevels === undefined) {\n continue;\n }\n\n for (var k = 0; k < patternLevels.length; k++)\n levels[patternEntityIndex + k] = Math.max(\n patternLevels[k],\n levels[patternEntityIndex + k]\n );\n }\n }\n\n levels[0] = levels[1] = levels[levels.length - 1] = levels[\n levels.length - 2\n ] = 0;\n\n var //\n hyphenatedText = \"\",\n leveledText = \"\",\n debugHyphenatedText = \"\";\n\n for (var i = 0; i < levels.length; i++) {\n hyphenatedText +=\n (levels[i] % 2 === 1 ? hyphenChar : \"\") + text.charAt(i);\n\n if (debug) {\n debugHyphenatedText +=\n (levels[i] % 2 === 1 ? \"-\" : \"\") + text.charAt(i);\n leveledText += (levels[i] > 0 ? levels[i] : \"\") + text.charAt(i);\n }\n }\n\n if (debug)\n console.log.apply(\n console,\n [text, \"->\"]\n .concat(p)\n .concat([\"->\"])\n .concat(levels)\n .concat([\"->\", leveledText])\n .concat([\"->\", debugHyphenatedText])\n );\n\n return hyphenatedText;\n }\n function start(\n text,\n patterns,\n cache,\n debug,\n hyphenChar,\n skipHTML,\n minWordLength,\n isAsync\n ) {\n function done() {\n allTime = new Date() - allTime;\n resolveNewText(newText);\n\n if (debug) {\n console.log(\n \"----------------\\nHyphenation stats: \" +\n processedN +\n \" text chunks processed, \" +\n hyphenatedN +\n \" words hyphenated\"\n );\n console.log(\"Work time: \" + workTime / 1000);\n console.log(\"Wait time: \" + (allTime - workTime) / 1000);\n console.log(\"All time: \" + allTime / 1000);\n }\n }\n\n var //\n cacheKey,\n newText = \"\",\n textChunk,\n reader = createTextChunkReader(text, hyphenChar, skipHTML, minWordLength),\n readNextTextChunk = reader[0],\n shouldNextHyphenate = reader[1],\n processedN = 0,\n hyphenatedN = 0;\n\n var //\n allTime = new Date(),\n workTime = 0;\n\n var resolveNewText = function () {};\n\n function nextTick() {\n var loopStart = new Date();\n\n while (\n (!isAsync || new Date() - loopStart < 10) &&\n (textChunk = readNextTextChunk())\n ) {\n cacheKey = textChunk.length ? \"$\" + textChunk : \"\";\n\n if (shouldNextHyphenate()) {\n if (cache[cacheKey] === undefined) {\n cache[cacheKey] = hyphenateWord(\n textChunk,\n patterns,\n debug,\n hyphenChar\n );\n }\n\n if (textChunk !== cache[cacheKey]) {\n hyphenatedN++;\n }\n\n textChunk = cache[cacheKey];\n }\n\n newText += textChunk;\n processedN++;\n }\n\n workTime += new Date() - loopStart;\n\n if (!textChunk) {\n done();\n } else {\n setTimeout(nextTick);\n }\n }\n\n if (isAsync) {\n setTimeout(nextTick);\n return new Promise(function (resolve) {\n resolveNewText = resolve;\n });\n } else {\n nextTick();\n return newText;\n }\n }\n\n return createHyphenator;\n});\n","// @flow\nimport * as React from 'react'\n\nconst ArrowDownIcon = ({ style, ...rest }: Object) => (\n \n)\n\nexport default ArrowDownIcon\n","import { useEffect } from 'react';\n\nvar clientHydrated = false;\n/**\n * Returns false when serverside rendering and during the first render pass (hydration) in the client.\n * Use this to modify behavior of components when they can be certain they are running client side.\n * Like check a media query during the initial render.\n * */\n\nfunction useClientHydrated() {\n useEffect(function () {\n if (!clientHydrated) clientHydrated = true;\n }, []);\n return clientHydrated;\n}\n\nexport default useClientHydrated;\n","// @flow\n\nimport * as React from 'react'\nimport { rem } from 'polished'\nimport { color, effects } from '../../styles/theme'\nimport styled from 'styled-components'\nimport { breakpoints, mediaOnly, mediaQuery } from '../../styles/media'\nimport ArrowDownIcon from '../../icons/ArrowDownIcon'\nimport { durations } from '../../styles/animations'\nimport MediaQuery from '../MediaQuery/MediaQuery'\nimport { getFontSize } from '../../styles/style-helpers'\n\nconst AccordionTitle = styled.div`\n margin: 0;\n font-size: ${getFontSize('large')};\n user-select: none;\n font-weight: ${({ theme }) =>\n theme.name === 'kids' || theme.name === 'lgbt' ? 700 : 500};\n flex: 1 1 auto;\n transform-origin: left;\n color: ${({ theme, invert }) => (invert ? theme.textInvert : theme.primary)};\n\n &:hover {\n color: ${color.accent};\n }\n`\n\nconst IconContainer = styled.div`\n color: ${({ expanded, theme, invert }) =>\n expanded ? color.accent : invert ? theme.textInvert : theme.primary};\n transition: ${durations.slow} ease-in-out;\n\n svg {\n transition: ${durations.fast} ease-in-out;\n transform: ${({ expanded }) =>\n expanded ? 'rotateX(180deg)' : 'rotateX(0deg)'};\n margin-right: ${rem(24)};\n\n ${mediaOnly.xs`\n margin-right: ${rem(8)};\n `};\n }\n`\n\nconst OutLine = styled.div`\n content: '';\n position: absolute;\n height: 100%;\n bottom: 0;\n left: 0;\n right: 0;\n ${mediaQuery.sm`\n left: 0;\n right: 0;\n `};\n`\n\nconst ShadowBackdrop = styled.div`\n transition: box-shadow 0.2s;\n content: '';\n position: absolute;\n outline-offset: 1px;\n height: 100%;\n bottom: 0;\n left: 0;\n right: 0;\n ${mediaQuery.sm`\n left: 0;\n right: 0;\n `};\n`\n\nconst TitleWrapper = styled.h4`\n position: relative;\n padding: ${rem(30)} 0;\n margin-bottom: ${({ expanded }) => (expanded ? rem(8) : 0)};\n display: flex;\n justify-content: space-between;\n outline: none;\n transition: color ${durations.slow} ease-in-out;\n border-top: 1px solid;\n\n ${({ isArticle }) =>\n `border-top-color: ${isArticle ? '#e6e6e6' : '#E3E3E3'};`}\n\n ${/* sc-selector */ IconContainer} {\n color: ${({ theme }) => theme.primary};\n }\n\n &:hover {\n color: ${color.accent};\n\n ${/* sc-selector */ ShadowBackdrop} {\n box-shadow: ${p => (p.showShadow ? effects().cardShadow : null)};\n }\n\n ${/* sc-selector */ IconContainer} {\n color: ${({ theme }) => theme.primary};\n }\n }\n\n &:focus {\n outline: 1px dashed currentColor;\n }\n\n :focus:not([data-focus-visible-added]) {\n outline: none;\n }\n\n .js-focus-visible & :focus:not([data-focus-visible-added]) {\n ${/* sc-selector */ ShadowBackdrop} {\n outline: none;\n }\n }\n`\n\ntype Props = {\n id: string,\n titleId: string,\n controlsId: string,\n children?: React.Node,\n title?: string,\n expanded: boolean,\n isArticle?: boolean,\n isResting?: boolean,\n isLast?: boolean,\n iconStyle?: Object,\n titleStyle?: Object,\n titleInnerStyle?: Object,\n hoverShadow?: boolean,\n animateTitle?: boolean,\n onToggle?: (id: string) => void,\n theme?: string,\n invert?: boolean,\n}\n\nclass AccordionItemTitle extends React.PureComponent {\n static displayName = 'AccordionItemTitle'\n static defaultProps = { expanded: false, isLast: false }\n\n handlePreventDoubleClick = (event: SyntheticMouseEvent) => {\n if (event.detail > 1) {\n event.preventDefault()\n }\n }\n\n handleClick = () => {\n const { id, onToggle } = this.props\n if (onToggle) onToggle(id)\n }\n\n handleKeyPress = (evt: SyntheticKeyboardEvent) => {\n if (evt.charCode === 13 || evt.charCode === 32) {\n evt.preventDefault()\n this.handleClick()\n }\n }\n\n render() {\n const {\n titleId,\n controlsId,\n expanded,\n title,\n children,\n isResting,\n isArticle,\n iconStyle,\n titleStyle,\n hoverShadow,\n invert,\n } = this.props\n\n const iconStyling = iconStyle || {}\n const titleStyling = titleStyle || {}\n const activeTheme = this.props.theme\n\n if (hoverShadow && !titleStyling.paddingLeft) {\n titleStyling.paddingLeft = rem(24)\n }\n\n return (\n \n {isDesktop => (\n \n {hoverShadow ? : }\n \n {children || title}\n \n \n \n \n \n )}\n \n )\n }\n}\n\nexport default AccordionItemTitle\n","// @flow\nimport * as React from 'react'\nimport styled from 'styled-components'\nimport { rem } from 'polished'\nimport { effects } from '../../styles/theme'\nimport CtaLink from '../CtaLink/CtaLink'\nimport { mediaOnly, mediaQuery } from '../../styles/media'\nimport { animated, Transition } from 'react-spring/renderprops.cjs'\nimport { presets } from '../../styles/animations'\nimport type { LinkViewModel } from '../../types/LinkViewModel'\n\ntype Props = {\n id: string,\n labeledById: string,\n expanded: boolean,\n isResting: boolean,\n itemBodyStyle: Object,\n isArticle?: boolean,\n cta?: LinkViewModel,\n children: React.Node,\n hoverShadow?: boolean,\n onResting?: () => void,\n onStart?: () => void,\n invert?: boolean,\n isMenu?: boolean,\n}\n\nconst Container = styled(animated.div)`\n color: ${({ theme }) => theme.text};\n overflow: hidden;\n border-bottom: 1px solid transparent;\n ${({ expanded }) =>\n !expanded\n ? `border-bottom-color: #E3E3E3;`\n : 'border-bottom-color: transparent'};\n\n ${mediaQuery.sm`\n overflow: unset;\n `}\n\n p {\n font-weight: 300;\n }\n`\n\nconst Wrapper = styled.div`\n background-color: ${({ theme, isMenu }) =>\n isMenu ? theme.accordionBodyStyle : 'transparent'};\n\n //border-top: ${({ theme }) =>\n effects(theme).borderPositive}; //TODO: Check if it has side-effects\n`\n\nconst FooterLink = styled.div`\n display: flex;\n justify-content: flex-end;\n padding-bottom: ${rem(30)};\n\n ${mediaOnly.xs`\n padding-right: 0;\n margin-right: -12px;\n `};\n`\n\nfunction AccordionItemBody(props: Props) {\n const {\n expanded,\n isResting,\n id,\n labeledById,\n children,\n cta,\n itemBodyStyle,\n hoverShadow,\n invert,\n isMenu,\n } = props\n\n const itemBodyStyling = { ...itemBodyStyle } || {}\n\n if (hoverShadow && itemBodyStyling.paddingLeft === undefined) {\n itemBodyStyling.paddingLeft = rem(24)\n }\n\n if (hoverShadow && itemBodyStyling.paddingRight === undefined) {\n itemBodyStyling.paddingRight = rem(24)\n }\n\n return (\n \n \n {() => style => (\n \n isResting ? 'auto' : height,\n ),\n ...itemBodyStyling,\n }}\n >\n {children}\n {cta && (\n \n \n \n )}\n \n )}\n \n \n )\n}\nAccordionItemBody.displayName = 'AccordionItemBody'\n\n// $FlowFixMe\nexport default React.memo(AccordionItemBody)\n","// @flow\nimport * as React from 'react'\nimport consecutive from 'consecutive'\n\nimport type { LinkViewModel } from '../../types/LinkViewModel'\nimport { AccordionContext } from './AccordionContainer'\n\nimport AccordionItemTitle from './AccordionItemTitle'\nimport AccordionItemBody from './AccordionItemBody'\nimport styled from 'styled-components'\nimport { color } from '../../styles/theme'\n\nexport type Props = {\n id?: string,\n disabled: boolean,\n title?: string,\n isArticle?: boolean,\n isLast?: boolean,\n cta?: LinkViewModel,\n children: React.Node,\n iconStyle?: Object,\n titleStyle?: Object,\n titleInnerStyle?: Object,\n itemBodyStyle?: Object,\n hoverShadow?: boolean,\n animateTitle?: boolean,\n invert?: boolean,\n isMenu?: boolean,\n isOnFooter?: boolean,\n prefix?: string,\n}\n\ntype State = {\n isResting: boolean,\n expanded: boolean,\n}\n\nlet nextUuid = consecutive()\nexport function resetNextUuid() {\n nextUuid = consecutive()\n}\n\nconst Wrapper = styled.div`\n > :first-child {\n border-top: 0;\n }\n\n > :last-child {\n ${({ isArticle, theme, isOnFooter }) =>\n `border-bottom: ${\n isOnFooter\n ? 0\n : theme.name === 'lgbt' && !isArticle\n ? `1px solid ${color.grey}`\n : isArticle\n ? '1px solid #e6e6e6'\n : '1px solid #E3E3E3'\n };`}\n }\n`\n\nclass AccordionItem extends React.Component {\n static contextType = AccordionContext\n static defaultProps = {\n disabled: false,\n expanded: false,\n }\n\n state = {\n isResting: true,\n expanded: false,\n }\n\n uuid = nextUuid()\n\n handleAnimating = () => {\n this.setState({\n isResting: false,\n })\n }\n\n handleResting = () => {\n this.setState({\n isResting: true,\n })\n }\n\n render() {\n const {\n children,\n title,\n cta,\n isArticle,\n isLast,\n iconStyle,\n titleStyle,\n titleInnerStyle,\n itemBodyStyle,\n hoverShadow,\n animateTitle,\n invert,\n isMenu,\n isOnFooter,\n prefix,\n } = this.props\n const idPrefix = prefix ? prefix : ''\n const keyGen = consecutive()\n const id = this.props.id || `accordion-${this.uuid}-${keyGen()}`\n const titleId = `${idPrefix}__acc__item-${id}-${keyGen()}`\n const bodyId = `${idPrefix}__acc__body-${id}-${keyGen()}`\n const expanded = this.context.selected.includes(id)\n\n return (\n \n \n \n {children}\n \n \n )\n }\n}\n\nexport default AccordionItem\n","import { useRef, useCallback, createElement, useContext, useState, useEffect, createContext } from 'react';\nimport useClientHydrated from '@charlietango/use-client-hydrated';\n\nvar Context = /*#__PURE__*/createContext(undefined);\n// Client side fallback \"id\" for cases where the application is not surrounded with an \nvar fallbackId = 0;\n\nvar localGenerateId = function localGenerateId() {\n return (++fallbackId).toString();\n};\n\nvar resetLocalId = function resetLocalId() {\n return fallbackId = 0;\n};\nvar IdProvider = function IdProvider(props) {\n var ref = useRef(0);\n var generateId = useCallback(function () {\n return (++ref.current).toString();\n }, []);\n return /*#__PURE__*/createElement(Context.Provider, {\n value: generateId\n }, props.children);\n};\n/**\n * Return a deterministic Id for this Hook. Optionally add prefix to the id\n * @param prefix\n */\n\nvar useId = function useId(prefix) {\n var clientHydrated = useClientHydrated();\n var generateId = useContext(Context); // Prefer generating the id from the IdProvider context, but fallback to the localGenerateId method\n\n var _useState = useState(generateId ? generateId() : clientHydrated ? localGenerateId() : undefined),\n id = _useState[0],\n setId = _useState[1];\n\n useEffect(function () {\n // If the Provider is not included, we fallback to generating an id as a client effect.\n if (!id) {\n setId(localGenerateId());\n } // eslint-disable-next-line react-hooks/exhaustive-deps\n\n }, []); // If the id isn't set yet, return undefined.\n\n if (!id) return undefined;\n return prefix ? prefix + \"_\" + id : id;\n};\n\nexport default useId;\nexport { IdProvider, resetLocalId };\n","// @flow\nimport * as React from 'react'\nimport styled from 'styled-components'\nimport { rem } from 'polished'\n\nimport type { QuoteViewModel } from '../../types/QuoteViewModel'\n\nimport { mediaOnly } from '../../styles/media'\nimport { getLineHeight, getFontSize } from '../../styles/style-helpers'\n\ntype Props = QuoteViewModel & {\n children?: React.Node,\n size?: 'normal' | 'small',\n isArticleContent?: boolean,\n isAccordionContent?: boolean,\n invert?: boolean,\n}\n\nconst BlockquoteWrapper = styled.blockquote`\n padding: 0;\n margin: 0;\n`\n\nconst QuoteParagraph = styled.p`\n margin: 0;\n padding: 0;\n font-weight: bold;\n font-size: ${p => (p.size === 'small' ? rem(24) : rem(28))};\n color: ${({ theme, invert }) => (invert ? theme.textInvert : theme.text)};\n line-height: ${p =>\n p.size === 'small' ? getLineHeight('small') : getLineHeight('normal')};\n position: relative;\n\n &::after {\n color: ${({ theme }) => theme.quote};\n content: ',,';\n position: absolute;\n display: block;\n font-weight: bold;\n font-size: ${rem(61)};\n line-height: 1;\n font-family: sans-serif;\n right: 0;\n bottom: -${rem(30)};\n }\n\n &::before {\n color: ${({ theme }) => theme.quote};\n content: '“';\n position: absolute;\n display: block;\n font-weight: bold;\n font-size: ${rem(61)};\n line-height: 1;\n font-family: sans-serif;\n margin-left: -${rem(50)};\n\n ${({ isAccordionContent }) =>\n isAccordionContent\n ? `\n max-height: ${rem(35)};\n position: relative;\n top: 0;\n left: 0;\n margin-left: 0;\n overflow: hidden;\n `\n : null}\n\n ${mediaOnly.xs`\n max-height: ${rem(35)};\n position: relative;\n top: 0;\n left: 0;\n margin-left: 0;\n overflow: hidden;\n `};\n\n ${mediaOnly.sm`\n max-height: ${rem(35)};\n position: relative;\n top: 0;\n left: 0;\n margin-left: 0;\n overflow: hidden;\n `};\n }\n\n ${mediaOnly.xs`\n font-size: ${p => (p.size === 'small' ? rem(18) : rem(22))};\n line-height: ${p => (p.size === 'small' ? '1.5' : '1.36')};\n `};\n\n ${mediaOnly.sm`\n font-size: ${p => (p.size === 'small' ? rem(18) : rem(22))};\n line-height: ${p => (p.size === 'small' ? '1.5' : '1.36')};\n `};\n`\n\n// @TODO - font-weight needs to be 300 here, is not supported yet\nconst Cite = styled.cite`\n margin-top: ${rem(24)};\n text-align: left;\n font-style: normal;\n display: block;\n font-size: ${getFontSize('small')};\n color: ${({ theme }) => theme.text};\n`\n\nfunction Blockquote({\n children,\n quote,\n cite,\n size,\n isAccordionContent,\n invert,\n}: Props) {\n return (\n \n \n {quote || children}\n \n {cite && {cite}}\n \n )\n}\n\nBlockquote.displayName = 'Blockquote'\nBlockquote.defaultProps = {\n size: 'normal',\n}\n\nexport default Blockquote\n","// @flow\nimport * as React from 'react'\nimport styled from 'styled-components'\nimport { rem } from 'polished'\nimport { getFontSize, getLineHeight } from '../../styles/style-helpers'\nimport { effects } from '../../styles/theme'\nimport { mediaQuery } from '../../styles/media'\n\nimport type { TableViewModel } from '../../types/TableViewModel'\n\ntype Props = TableViewModel & { invert?: boolean }\n\nconst BottomnSpacer = styled.div`\n padding-bottom: ${rem(32)};\n`\n\nconst TableContainer = styled.table`\n border-collapse: collapse;\n width: 100%;\n padding-bottom: ${rem(16)};\n color: ${({ theme, invert }) => (invert ? theme.textInvert : theme.text)};\n\n tbody tr {\n border-top: ${({ theme, invert }) =>\n invert\n ? effects(theme).borderPositiveInvert\n : effects(theme).borderPositive};\n line-height: ${rem(48)};\n\n :first-of-type {\n border-top: ${({ heading, theme, invert }) =>\n heading === 'column'\n ? invert\n ? effects(theme).borderPositiveInvert\n : effects(theme).borderPositive\n : 'none'};\n\n & > :first-child {\n padding-left: 0;\n }\n\n & > :last-child {\n padding-right: 0;\n }\n\n th {\n line-height: ${getLineHeight('small')};\n padding-right: ${rem(22)};\n padding-bottom: ${rem(16)};\n vertical-align: top;\n }\n }\n\n :not(:first-of-type) {\n th {\n line-height: ${getLineHeight('small')};\n padding: ${rem(16)} ${rem(22)} ${rem(16)} 0 ;\n vertical-align: top;\n }\n\n & > :first-child {\n padding-left: 0;\n }\n }\n\n :last-of-type {\n border-bottom: ${({ theme, invert }) =>\n invert\n ? effects(theme).borderPositiveInvert\n : effects(theme).borderPositive};\n }\n\n td {\n padding: ${rem(16)} ${rem(22)} ${rem(16)} 0;\n line-height: ${getLineHeight('small')};\n }\n\n & > :first-child {\n padding-left: 0;\n }\n\n & > :last-child {\n padding-right: 0;\n }\n }\n\n td,\n th {\n font-size: ${getFontSize('small')};\n text-align: left;\n color: ${({ theme, invert }) => (invert ? theme.textInvert : theme.text)};+\n ${mediaQuery.lg`\n min-width: ${rem(150)};\n `}\n }\n`\n\nconst TableTitle = styled.caption`\n text-align: left;\n font-size: ${getFontSize('normal')};\n line-height: ${getLineHeight('small')};\n font-weight: 900;\n margin-bottom: ${rem(16)};\n color: ${({ theme, invert }) => (invert ? theme.textInvert : theme.text)};\n`\n\nfunction Table({ title, rows, heading, invert }: Props) {\n if (!rows || !rows.length) return null\n\n const renderTable = () => {\n return rows.map((row, rowKey) => (\n \n {row.map((col, colKey) => {\n const ColTag = getColumnTag(rowKey, colKey)\n return {col}\n })}\n
\n ))\n }\n\n const getColumnTag = (rowKey: number, colKey: number) => {\n let ColTag = 'td'\n\n if (heading === 'row') {\n ColTag = rowKey === 0 ? 'th' : 'td'\n }\n\n if (heading === 'column') {\n ColTag = colKey === 0 ? 'th' : 'td'\n }\n\n if (heading === 'both') {\n ColTag = rowKey !== 0 ? (colKey === 0 ? 'th' : 'td') : 'th'\n }\n\n return ColTag\n }\n\n return (\n <>\n \n {title ? {title} : null}\n\n {renderTable()}\n \n \n >\n )\n}\n\nTable.displayName = 'Table'\nTable.defaultProps = {}\n\nexport default Table\n"],"sourceRoot":""}