\n );\n};\n\nPureWash.displayName = 'Wash';\n\nexport default PureWash;\n","import React, { ComponentClass } from 'react';\nimport { useBreakpoints } from '@ux/responsive';\nimport useStylesheet from './Background.stylesheet';\nimport Layer, { Layer as ImageLayer } from 'presentation/components/common/Layer';\nimport Wash from './Wash';\nimport withLanguage from 'presentation/hocs/withLanguage';\nimport urlLanguageParse from 'presentation/utils/urlLanguageParse';\nimport findResponsiveItem from 'presentation/utils/findResponsiveItem';\nimport { Layout } from 'domain/constants/layout';\nimport { Colorway } from 'domain/constants/colorway';\nimport { ResponsiveSet } from 'core/ribbons/primitives';\n\nexport interface Background {\n fallback: {\n url: string,\n },\n mp4?: string,\n webm?: string,\n}\nexport type BackgroundArray = ResponsiveSet
;\n\ninterface OuterProps {\n layout: Layout,\n background: BackgroundArray,\n duoLayout?: boolean,\n hasTiles?: boolean,\n colorway: Colorway,\n hideGradient?: boolean,\n}\ninterface InnerProps extends OuterProps {\n currentLanguage: string,\n}\n\ndeclare const layer: ImageLayer;\ndeclare const i: number;\n\nexport const PureBackground = ({\n layout,\n duoLayout,\n hasTiles,\n colorway,\n currentLanguage,\n background,\n hideGradient = false,\n}: InnerProps) => {\n const { styles } = useStylesheet();\n const activeBackground = findResponsiveItem(\n useBreakpoints(),\n background,\n );\n const backgroundType = Array.isArray(activeBackground) ? 'image' : 'video';\n return (\n \n \n \n
\n
\n \n \n \n \n \n \n {!hideGradient && (\n \n )}\n \n );\n};\n\nPureBackground.displayName = 'Background';\n\nexport default withLanguage(PureBackground) as ComponentClass;\n","import { useStyles } from '@team-griffin/stylr';\n\nexport default () => {\n return useStyles({\n default: {\n videoWrapper: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n overflow: 'hidden',\n },\n video: {\n objectFit: 'cover',\n objectPosition: 'center center',\n width: '100%',\n height: '100%',\n },\n fallbackVideoImage: {\n minHeight: '100%',\n minWidth: '100%',\n position: 'absolute',\n top: 0,\n },\n },\n }, []);\n};\n","import React, { Fragment, ReactNode } from 'react';\nimport { PreHeading01, Heading01, SubHeading01 } from '@ux/typography';\nimport PaddingBox, { Side } from '@ux/padding-box';\nimport CallToAction from 'components/common/CallToAction';\nimport { Size as ButtonSize } from '@ux/button';\nimport Shortcode, { ShortcodeProps } from 'components/Shortcode';\nimport { getAgainst } from 'presentation/utils/colorway';\nimport { useBreakpoints } from '@ux/responsive';\nimport useStylesheet from './Body.stylesheet';\nimport { useTheme } from '@ux/theme-utils';\nimport { Layout } from 'domain/constants/layout';\nimport { Colorway } from 'domain/constants/colorway';\nimport { CTA } from 'core/ribbons/cta';\nimport { isNilOrEmpty } from 'presentation/utils/generalUtils';\n\nexport interface OuterProps {\n hBaseline?: number,\n text: {\n precursor?: ShortcodeProps,\n title?: ShortcodeProps,\n body?: ShortcodeProps,\n },\n additionalText?: string|ReactNode,\n footerText?: string|ReactNode,\n ctas: CTA[],\n colorway: Colorway,\n layout: Layout,\n ribbonId: string,\n}\n\ndeclare const cta: CTA;\ndeclare const i: number;\n\nconst PureBody = ({\n hBaseline = 1,\n text,\n additionalText,\n footerText,\n ctas,\n colorway,\n layout,\n ribbonId,\n}: OuterProps) => {\n const {\n isMinSm,\n } = useBreakpoints();\n const {\n theme,\n } = useTheme();\n const {\n body,\n precursor,\n title,\n } = text;\n const hasBodyText = !isNilOrEmpty(body);\n const hasCta = !isNilOrEmpty(ctas);\n const hasPrecursor = !isNilOrEmpty(precursor);\n const hasTitle = !isNilOrEmpty(title);\n const hasFooterText = !isNilOrEmpty(footerText);\n const {\n styles,\n } = useStylesheet({\n isMinSm,\n theme,\n layout,\n colorway,\n });\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {additionalText}\n \n \n \n \n \n \n \n
\n \n \n \n \n {footerText}\n \n \n \n );\n};\n\nPureBody.displayName = 'BillboardBody';\n\nexport default PureBody;","import { useStyles } from '@team-griffin/stylr';\nimport { getTitleColor, getBodyColor } from 'presentation/utils/colorway';\nimport { gu2px, Theme } from '@ux/theme-utils';\nimport cssSides, { Side } from '@team-griffin/css-sides';\nimport { modifier } from '@ux/style-utils';\nimport { Alignment } from 'domain/constants/alignment';\nimport { smallprint } from '@ux/type-size';\nimport { Colorway } from '@ux/bookends/dist/es/constants';\nimport { Layout } from 'domain/constants/layout';\n\nexport default ({\n theme,\n colorway,\n theme: {\n spacing,\n typography,\n },\n layout: {\n alignment,\n },\n isMinSm,\n}: {\n theme: Theme,\n colorway: Colorway,\n layout: Layout,\n isMinSm: Boolean,\n}) => useStyles({\n default: {\n root: {\n position: 'relative',\n },\n precursor: {\n color: getTitleColor(theme, colorway),\n },\n title: {\n color: getTitleColor(theme, colorway),\n },\n subtitle: {\n color: getBodyColor(theme, colorway),\n marginTop: gu2px(2, spacing),\n },\n ctas: {\n display: 'flex',\n flexDirection: 'column',\n marginTop: gu2px(2, spacing),\n overflow: 'hidden',\n },\n cta: {\n marginTop: gu2px(1, spacing),\n },\n footerText: {\n marginTop: gu2px(1, spacing),\n ...smallprint(typography),\n color: getBodyColor(theme, colorway),\n opacity: 0.9,\n },\n },\n\n isMinSm: {\n ctas: {\n flexDirection: 'row',\n ...cssSides('margin', Side.X, 0 - gu2px(0.5, spacing)),\n },\n cta: {\n marginBottom: 0,\n ...cssSides('margin', Side.X, gu2px(0.5, spacing)),\n },\n },\n\n [modifier('alignment', Alignment.CENTER)]: {\n root: {\n textAlign: 'center',\n },\n footerText: {\n textAlign: 'center',\n },\n ctas: {\n justifyContent: 'center',\n },\n },\n}, [\n { isMinSm },\n { alignment },\n]);","import React from 'react';\nimport PaddingBox from '@ux/padding-box';\nimport { Button, Kind } from '@ux/button';\nimport Message from '@ux/message';\nimport { Colorway } from 'domain/constants/colorway';\nimport useStylesheet from './Scroll.stylesheet';\nimport { Layout } from 'domain/constants/layout';\n\ninterface OuterProps {\n colorway: Colorway,\n onScrollClick: (evt: any) => any,\n layout: Layout,\n}\n\nexport const PureBillboardScroll = ({\n onScrollClick,\n layout,\n colorway,\n}: OuterProps) => {\n const {\n styles,\n } = useStylesheet({ layout });\n const scrollAgainst = colorway === Colorway.PRIMARY_GRADIENT ? Colorway.PRIMARY : colorway;\n return (\n \n \n \n );\n};\n\nPureBillboardScroll.displayName = 'BillboardScroll';\n\nexport default PureBillboardScroll;\n","import { useStyles } from '@team-griffin/stylr';\nimport { gu2px, useTheme } from '@ux/theme-utils';\nimport { Alignment } from 'domain/constants/alignment';\nimport { modifier } from '@ux/style-utils';\nimport { Layout } from 'domain/constants/layout';\n\nexport default ({\n layout: {\n alignment,\n },\n}: {\n layout: Layout,\n}) => {\n const {\n theme,\n } = useTheme();\n const {\n spacing,\n } = theme;\n return useStyles({\n default: {\n scroller: {\n paddingTop: gu2px(2, spacing),\n },\n },\n [modifier('alignment', Alignment.CENTER)]: {\n scroller: {\n textAlign: 'center',\n },\n },\n }, [\n { alignment },\n ]);\n};","import { gu2px } from '@ux/theme-utils';\nimport flexAnchors, { AnchorArray } from 'presentation/utils/flexAnchors';\nimport findResponsiveItem from 'presentation/utils/findResponsiveItem';\nimport { Anchor } from 'domain/constants/anchor';\nimport { BreakpointProps } from '@ux/responsive';\n\n/**\n * Two layouts: Tiles and Duo, require separate containers to site\n * next to each other, bleed to the far edge, but still maintain the\n * site width rules of a single container. This function returns half\n * the width of the container size\n */\nexport const halfContainerWidth = (width: number, spacing: number) => {\n const space = gu2px(1, spacing);\n // add the extra gu of spacing between the two items\n const withSpacing = width + space;\n // account for the additional padding at either side\n const divided = withSpacing/2;\n // remove the accounted for spacing\n return divided - space;\n};\n\n\nexport const getActiveAnchor = (anchor: AnchorArray, breakpoints: BreakpointProps) => {\n const getActive = (from: AnchorArray) => findResponsiveItem(\n breakpoints,\n from,\n );\n\n const activeAnchor = getActive(\n flexAnchors([ Anchor.TOP, null, null ], anchor),\n );\n\n return activeAnchor;\n};\n\nexport default null;","import React, { Fragment } from 'react';\nimport { Container, Row, Column, Justify } from '@ux/grid';\nimport Background, { BackgroundArray } from '../Background';\nimport Body, { OuterProps as BodyProps } from '../Body';\nimport Scroll from '../Scroll';\nimport { Alignment } from 'domain/constants/alignment';\nimport useStylesheet from './Generic.stylesheet';\nimport { useBreakpoints } from '@ux/responsive';\n\ninterface OuterProps extends BodyProps {\n showScroll: boolean,\n background: BackgroundArray,\n onScrollClick: (evt: any) => any,\n hideGradient?: boolean,\n}\n\nexport const PureBillboardGeneric = ({\n layout,\n colorway,\n hBaseline,\n ctas,\n text,\n additionalText,\n footerText,\n onScrollClick,\n showScroll,\n ribbonId,\n background,\n hideGradient,\n}: OuterProps) => {\n const breakpoints = useBreakpoints();\n const {\n styles,\n } = useStylesheet({\n layout,\n ...breakpoints,\n });\n const justify = layout.alignment === Alignment.CENTER ? Justify.CENTER : null;\n return (\n \n \n \n \n \n \n \n \n
\n \n
\n \n \n \n \n \n \n );\n};\n\nPureBillboardGeneric.displayName = 'BillboardGeneric';\n\nexport default PureBillboardGeneric;\n","import { useStyles } from '@team-griffin/stylr';\nimport getBreakpoints from 'presentation/utils/getBreakpoints';\nimport { getActiveAnchor } from '../styles';\nimport { Layout } from 'domain/constants/layout';\nimport { BreakpointProps } from '@ux/responsive';\n\nexport default (props: {\n layout: Layout,\n} & BreakpointProps) => {\n const {\n layout,\n } = props;\n const {\n anchor,\n } = layout;\n const breakpointProps = getBreakpoints(props);\n const activeAnchor = getActiveAnchor(anchor, breakpointProps);\n return useStyles({\n default: {\n content: {\n flex: 1,\n flexBasis: 'auto',\n justifyContent: activeAnchor,\n display: 'flex',\n flexDirection: 'column',\n },\n },\n }, []);\n};\n","import React, { Fragment } from 'react';\nimport { Container } from '@ux/grid';\nimport Background, { BackgroundArray } from '../Background';\nimport Body, { OuterProps as BodyProps } from '../Body';\nimport Scroll from '../Scroll';\nimport useStylesheet from './Duo.stylesheet';\nimport { Colorway } from 'domain/constants/colorway';\nimport { Layout } from 'domain/constants/layout';\n\ninterface OuterProps extends BodyProps {\n layout: Layout,\n colorway: Colorway,\n hBaseline?: number,\n showScroll: boolean,\n duoLayout: boolean,\n background: BackgroundArray,\n onScrollClick: (evt: any) => any,\n hideGradient?: boolean,\n}\n\nexport const PureBillboardDuo = ({\n layout,\n colorway,\n hBaseline = 1,\n ctas,\n text,\n additionalText,\n footerText,\n onScrollClick,\n showScroll,\n ribbonId,\n background,\n duoLayout,\n hideGradient,\n}: OuterProps) => {\n const {\n styles,\n } = useStylesheet({\n layout,\n duoLayout,\n });\n return (\n \n \n \n \n