\n);\n\nconst enhance = pureEnhance('CornerEmbellishments', {\n hocs: [\n withLanguage,\n ],\n hooks: [\n withBreakpointsHook,\n withProps(stylesheet),\n ],\n});\n\nexport default enhance(PureCornerEmbellishments);","import React from 'react';\nimport {\n withProps,\n} from '@team-griffin/rehook';\nimport stylesheet, { Styles } from './Wash.stylesheet';\nimport pureEnhance from '@ux/pure-enhance';\nimport { Theme } from '@ux/theme-utils';\nimport { Colorway } from 'domain/constants/colorway';\nimport { Layout } from 'domain/constants/layout';\nimport { withBreakpointsHook, BreakpointProps } from '@ux/responsive';\n\ninterface OuterProps {\n theme: Theme,\n colorway: Colorway,\n layout: Layout,\n hasTiles: boolean,\n duoLayout: boolean,\n}\nexport interface InnerProps extends OuterProps, BreakpointProps {\n styles: Styles,\n}\n\nexport const PureWash = ({\n styles,\n}: InnerProps) => (\n
\n);\n\nexport const enhance = pureEnhance
(\n 'Wash',\n {\n hooks: [\n withBreakpointsHook,\n withProps(stylesheet),\n ],\n },\n);\n\nexport default enhance(PureWash);\n","import { useStyles } from '@team-griffin/stylr';\nimport { UnsafeColorway as Colorway } from 'domain/constants/colorway';\nimport {\n modifier,\n percentage,\n} from '@ux/style-utils';\nimport rgba from 'presentation/utils/rgba';\nimport { Alignment } from 'domain/constants/alignment';\nimport * as r from 'ramda';\nimport { InnerProps } from './Wash';\nimport { Color } from '@ux/theme-utils';\nimport { CSSProperties } from 'react';\n\nexport interface Styles {\n root: CSSProperties,\n}\nexport default (props: InnerProps) => {\n const {\n theme,\n colorway,\n } = props;\n\n const {\n palette,\n } = theme;\n\n const wash = (clr: Color|string) => r.ifElse(\n r.propEq('colorway', Colorway.LIGHT),\n r.always(rgba(clr, 0.9)),\n r.always(rgba(clr, 0.75)),\n )(props);\n\n const gradient = (clr: Color|string) => `\n linear-gradient(\n to right,\n ${rgba(clr, 0.9)} 40%,\n ${rgba(clr, 0.8)} 50%,\n ${rgba(clr, 0)} 65%\n )`;\n\n /*\n Creates a gradient or semi opaque wash\n Use the wash on mobile, and gradient on tablet and above, unless:\n - we're center aligned text\n - we're a duo layout\n - we have tiles and are on desktop view\n */\n const generateBackground = r.pipe(\n (clr: Color|string) => r.cond([\n // eslint-disable-next-line max-len\n [ r.pathEq([ 'layout', 'alignment' ], Alignment.CENTER), () => wash(clr) ],\n [ r.propEq('duoLayout', true), () => wash(clr) ],\n [ r.both(\n r.propEq('hasTiles', true),\n r.propEq('isMinLg'),\n ), () => wash(clr) ],\n [ r.propEq('isMinMd', true), () => gradient(clr) ],\n [ r.T, () => wash(clr) ],\n ])(props),\n );\n\n return useStyles({\n default: {\n root: {\n position: 'absolute',\n top: 0,\n width: percentage(100),\n height: percentage(100),\n },\n },\n\n [modifier('colorway', Colorway.LIGHT)]: {\n root: {\n background: generateBackground('#ffffff'),\n },\n },\n\n [modifier('colorway', Colorway.NEUTRAL)]: {\n root: {\n background: generateBackground(palette.grey10),\n },\n },\n\n [modifier('colorway', Colorway.DARK)]: {\n root: {\n background: generateBackground('#000000'),\n },\n },\n\n [modifier('colorway', Colorway.PRIMARY)]: {\n root: {\n background: generateBackground(palette.primary),\n },\n },\n\n [modifier('colorway', Colorway.PRIMARY_GRADIENT)]: {\n root: {\n background: generateBackground(palette.primary),\n },\n },\n\n [modifier('colorway', Colorway.HIGHLIGHT)]: {\n root: {\n background: generateBackground(palette.highlight),\n },\n },\n\n }, {\n colorway,\n });\n\n};\n","import React, { Fragment } from 'react';\nimport {\n withProps,\n} from '@team-griffin/rehook';\nimport { withBreakpointsHook, BreakpointProps } from '@ux/responsive';\nimport stylesheet, { Styles } 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 getBreakpoints from 'presentation/utils/getBreakpoints';\nimport * as r from 'ramda';\nimport pureEnhance from '@ux/pure-enhance';\nimport { Layout } from 'domain/constants/layout';\nimport { Colorway } from 'domain/constants/colorway';\nimport { Theme } from '@ux/theme-utils';\nimport { ResponsiveSet } from 'core/ribbons/primitives';\n\ninterface 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 theme: Theme,\n}\ninterface InnerProps extends OuterProps, BreakpointProps {\n styles: Styles,\n activeBackground: Background,\n backgroundType: string,\n currentLanguage: string,\n}\n\ndeclare const layer: ImageLayer;\ndeclare const i: number;\n\nexport const PureBackground = ({\n styles,\n activeBackground,\n backgroundType,\n layout,\n duoLayout,\n hasTiles,\n colorway,\n theme,\n currentLanguage,\n}: InnerProps) => {\n return (\n \n \n \n
\n
\n \n \n \n \n \n \n \n \n );\n};\n\n//we need this because of the withProps that uses findResponsiveItem\ninterface MiddleProps extends OuterProps, BreakpointProps {}\nexport const enhance = pureEnhance(\n 'Background',\n {\n hocs: [\n withLanguage,\n ],\n hooks: [\n withBreakpointsHook,\n withProps((ownerProps: MiddleProps) => ({\n ...r.pipe(\n (ownerProps: MiddleProps) => findResponsiveItem(\n getBreakpoints(ownerProps),\n ownerProps.background\n ), r.defaultTo({}),\n (activeBackground) => ({\n activeBackground,\n backgroundType: r.ifElse(\n Array.isArray,\n r.always('image'),\n r.always('video'),\n )(activeBackground),\n })\n )(ownerProps),\n })),\n withProps(stylesheet),\n ],\n }\n);\n\n\nexport default enhance(PureBackground);\n","import { useStyles } from '@team-griffin/stylr';\nimport { percentage } from '@ux/style-utils';\nimport { CSSProperties } from 'react';\n\nexport interface Styles {\n videoWrapper: CSSProperties,\n video: CSSProperties,\n fallbackVideoImage: CSSProperties,\n}\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: percentage(100),\n height: percentage(100),\n },\n fallbackVideoImage: {\n minHeight: percentage(100),\n minWidth: percentage(100),\n position: 'absolute',\n top: 0,\n },\n },\n }, []);\n};\n","import React, { Fragment, ReactNode } from 'react';\nimport pureEnhance from '@ux/pure-enhance';\nimport { withProps, defaultProps } from '@team-griffin/rehook';\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 { withBreakpointsHook, BreakpointProps } from '@ux/responsive';\nimport stylesheet, { Styles } from './Body.stylesheet';\nimport { isNotNilOrEmpty } from '@team-griffin/capra';\nimport * as r from 'ramda';\nimport { Theme } from '@ux/theme-utils';\nimport { Layout } from 'domain/constants/layout';\nimport { Colorway } from 'domain/constants/colorway';\nimport { CTA } from 'core/ribbons/cta';\n\n\nexport interface OuterProps {\n theme: Theme,\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}\nexport interface DefaultProps extends OuterProps {\n hBaseline: number,\n}\nexport interface InnerProps extends DefaultProps, BreakpointProps {\n styles: Styles,\n hasPrecursor: boolean,\n hasTitle: boolean,\n hasBodyText: boolean,\n hasCta: boolean,\n hasFooterText: boolean,\n}\n\ndeclare const cta: CTA;\ndeclare const i: number;\n\nconst PureBody = ({\n theme,\n styles,\n hBaseline,\n hasPrecursor,\n hasTitle,\n hasBodyText,\n hasCta,\n hasFooterText,\n text,\n additionalText,\n footerText,\n ctas,\n colorway,\n layout,\n ribbonId,\n isMinSm,\n}: InnerProps) => (\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\nconst enhance = pureEnhance('BillboardBody', {\n hooks: [\n defaultProps({\n hBaseline: 1,\n }),\n withProps((ownerProps: DefaultProps) => ({\n hasBodyText: r.pathSatisfies(\n isNotNilOrEmpty,\n [ 'text', 'body' ],\n ownerProps,\n ),\n hasCta: r.propSatisfies(\n isNotNilOrEmpty,\n 'ctas',\n )(ownerProps),\n hasPrecursor: r.pathSatisfies(\n isNotNilOrEmpty,\n [ 'text', 'precursor' ],\n ownerProps,\n ),\n hasTitle: r.pathSatisfies(\n isNotNilOrEmpty,\n [ 'text', 'title' ],\n ownerProps,\n ),\n hasFooterText: r.propSatisfies(\n isNotNilOrEmpty,\n 'footerText',\n )(ownerProps),\n })),\n withBreakpointsHook,\n withProps(stylesheet),\n ],\n});\n\nexport default enhance(PureBody);","import { useStyles } from '@team-griffin/stylr';\nimport { getTitleColor, getBodyColor } from 'presentation/utils/colorway';\nimport { gu2px } 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 * as r from 'ramda';\nimport { InnerProps } from './Body';\nimport { CSSProperties } from 'react';\n\n\nexport interface Styles {\n root: CSSProperties,\n precursor: CSSProperties,\n title: CSSProperties,\n subtitle: CSSProperties,\n ctas: CSSProperties,\n cta: CSSProperties,\n footerText: CSSProperties,\n}\nexport default ({\n theme,\n colorway,\n theme: {\n spacing,\n typography,\n },\n layout: {\n alignment,\n },\n isMinSm,\n}: InnerProps) => 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, r.negate(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 pureEnhance from '@ux/pure-enhance';\nimport PaddingBox from '@ux/padding-box';\nimport { Button, Kind, Against } from '@ux/button';\nimport Message from '@ux/message';\nimport { Colorway } from 'domain/constants/colorway';\nimport { withProps } from '@team-griffin/rehook';\nimport stylesheet, { Styles } from './Scroll.stylesheet';\nimport * as r from 'ramda';\nimport { Theme } from '@ux/theme-utils';\nimport { Layout } from 'domain/constants/layout';\n\ninterface OuterProps {\n theme: Theme,\n colorway: Colorway,\n onScrollClick: (evt: any) => any,\n layout: Layout,\n}\nexport interface InnerProps extends OuterProps {\n styles: Styles,\n scrollAgainst: Against,\n}\nexport const PureBillboardScroll = ({\n theme,\n onScrollClick,\n scrollAgainst,\n styles,\n}: InnerProps) => (\n \n \n \n);\n\nconst enhance = pureEnhance(\n 'BillboardScroll',\n {\n hooks: [\n withProps((ownerProps: OuterProps) => ({\n scrollAgainst: r.when(\n r.equals(Colorway.PRIMARY_GRADIENT),\n r.always(Colorway.PRIMARY),\n )(ownerProps.colorway),\n })),\n withProps(stylesheet),\n ],\n }\n);\n\nexport default enhance(PureBillboardScroll);\n","import { useStyles } from '@team-griffin/stylr';\nimport { gu2px } from '@ux/theme-utils';\nimport { Alignment } from 'domain/constants/alignment';\nimport { modifier } from '@ux/style-utils';\nimport { InnerProps } from './Scroll';\nimport { CSSProperties } from 'react';\n\nexport interface Styles {\n scroller: CSSProperties,\n}\nexport default ({\n theme: {\n spacing,\n },\n layout: {\n alignment,\n },\n}: InnerProps) => 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}, [\n { alignment },\n]);\n","import * as r from 'ramda';\nimport { 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) => r.pipe(\n // add the extra gu of spacing between the two items\n r.add(gu2px(1, spacing)),\n // account for the additional padding at either side\n r.divide(r.__, 2),\n // remove the accounted for spacing\n r.subtract(r.__, gu2px(1, spacing)),\n)(width);\n\n\nexport const getActiveAnchor = (anchor: AnchorArray, breakpoints: BreakpointProps) => {\n\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 { withProps } from '@team-griffin/rehook';\nimport { Container, Row, Column, Justify } from '@ux/grid';\nimport pureEnhance from '@ux/pure-enhance';\nimport Background, { BackgroundArray } from '../Background';\nimport Body, { OuterProps as BodyProps } from '../Body';\nimport Scroll from '../Scroll';\nimport { Alignment } from 'domain/constants/alignment';\nimport stylesheet, { Styles } from './Generic.stylesheet';\n\ninterface OuterProps extends BodyProps {\n showScroll: boolean,\n background: BackgroundArray,\n onScrollClick: (evt: any) => any,\n}\nexport interface InnerProps extends OuterProps, BreakpointProps {\n styles: Styles,\n justify: Justify,\n}\n\nimport * as r from 'ramda';\nimport { withBreakpointsHook, BreakpointProps } from '@ux/responsive';\n\nexport const PureBillboardGeneric = ({\n styles,\n theme,\n layout,\n colorway,\n hBaseline,\n ctas,\n text,\n additionalText,\n footerText,\n justify,\n onScrollClick,\n showScroll,\n ribbonId,\n background,\n}: InnerProps) => (\n \n \n \n \n \n \n \n \n
\n \n
\n \n \n \n \n \n \n);\n\nconst enhance = pureEnhance('BillboardGeneric', [\n withBreakpointsHook,\n withProps((ownerProps: OuterProps) => ({\n justify: r.ifElse(\n r.pathEq([ 'layout', 'alignment' ], Alignment.CENTER),\n r.always(Justify.CENTER),\n r.always(null),\n )(ownerProps),\n })),\n withProps(stylesheet),\n]);\n\nexport default enhance(PureBillboardGeneric);\n","import { useStyles } from '@team-griffin/stylr';\nimport getBreakpoints from 'presentation/utils/getBreakpoints';\nimport { getActiveAnchor } from '../styles';\nimport { InnerProps } from './Generic';\nimport { CSSProperties } from 'react';\n\nexport interface Styles {\n content: CSSProperties,\n}\n\nexport default (props: InnerProps) => {\n const {\n layout,\n } = props;\n\n const {\n anchor,\n } = layout;\n\n\n const breakpointProps = getBreakpoints(props);\n const activeAnchor = getActiveAnchor(anchor, breakpointProps);\n\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 pureEnhance from '@ux/pure-enhance';\nimport Background, { BackgroundArray } from '../Background';\nimport Body, { OuterProps as BodyProps } from '../Body';\nimport Scroll from '../Scroll';\nimport stylesheet, { Styles } from './Duo.stylesheet';\nimport { withBreakpointsHook, BreakpointProps } from '@ux/responsive';\nimport { withProps } from '@team-griffin/rehook';\nimport { Theme } from '@ux/theme-utils';\nimport { Colorway } from 'domain/constants/colorway';\nimport { Layout } from 'domain/constants/layout';\n\ninterface OuterProps extends BodyProps {\n theme: Theme,\n layout: Layout,\n colorway: Colorway,\n hBaseline: number,\n showScroll: boolean,\n duoLayout: boolean,\n background: BackgroundArray,\n onScrollClick: (evt: any) => any,\n}\n\nexport interface InnerProps extends OuterProps, BreakpointProps {\n styles: Styles,\n}\n\nexport const PureBillboardDuo = ({\n styles,\n theme,\n layout,\n colorway,\n hBaseline,\n ctas,\n text,\n additionalText,\n footerText,\n onScrollClick,\n showScroll,\n ribbonId,\n background,\n}: InnerProps) => (\n \n \n \n \n
\n \n \n \n
\n \n \n \n);\n\nconst enhance = pureEnhance
('BillboardDuo', [\n withBreakpointsHook,\n withProps(stylesheet),\n]);\n\nexport default enhance(PureBillboardDuo);\n","import { useStyles } from '@team-griffin/stylr';\nimport getBreakpoints from 'presentation/utils/getBreakpoints';\nimport { getActiveAnchor, halfContainerWidth } from '../styles';\nimport { breakpoints } from '@ux/responsive';\nimport cssSides, { Side } from '@team-griffin/css-sides';\nimport { gu2px } from '@ux/theme-utils';\nimport * as r from 'ramda';\nimport { percentage } from '@ux/style-utils';\nimport { InnerProps } from './Duo';\nimport { CSSProperties } from 'react';\n\nexport interface Styles {\n content: CSSProperties,\n duoLayout: CSSProperties,\n}\nexport default (props: InnerProps) => {\n const {\n isMinSm,\n isMinMd,\n isMinLg,\n isMinXl,\n layout,\n duoLayout,\n theme,\n } = props;\n\n const {\n anchor,\n } = layout;\n\n const startDuoLayout = r.pathOr(false, [ 'layout', 'startDuoLayout' ], props);\n // @todo this prop isn't set properly due to how ribbon raid loops and creates duo\n // const endDuoLayout = r.pathOr(false, [ 'layout', 'endDuoLayout' ], props);\n\n const breakpointProps = getBreakpoints(props);\n const activeAnchor = getActiveAnchor(anchor, breakpointProps);\n\n return useStyles({\n default: {\n content: {\n flex: 1,\n flexBasis: 'auto',\n justifyContent: activeAnchor,\n display: 'flex',\n flexDirection: 'column',\n },\n duoLayout: {\n ...cssSides('padding', Side.X, gu2px(1, theme.spacing)),\n ...cssSides('margin', Side.X, 'auto'),\n width: percentage(100),\n maxWidth: percentage(100),\n },\n },\n\n isMinSm: {\n duoLayout: {\n maxWidth: breakpoints.sm - gu2px(1, theme.spacing),\n },\n },\n\n isDuoLayoutMd: {\n duoLayout: {\n maxWidth: halfContainerWidth(breakpoints.md, theme.spacing),\n marginLeft: 0,\n },\n },\n isDuoLayoutLg: {\n duoLayout: {\n maxWidth: halfContainerWidth(breakpoints.lg, theme.spacing),\n },\n },\n isDuoLayoutXl: {\n duoLayout: {\n maxWidth: halfContainerWidth(breakpoints.xl, theme.spacing),\n },\n },\n startDuoLayout: {\n duoLayout: {\n marginRight: 0,\n marginLeft: 'auto',\n },\n },\n }, [\n { anchor },\n { isMinSm },\n { isDuoLayoutMd: duoLayout && isMinMd },\n { isDuoLayoutLg: duoLayout && isMinLg },\n { isDuoLayoutXl: duoLayout && isMinXl },\n { startDuoLayout },\n ]);\n};\n","export enum Side {\n START = 'START',\n END = 'END',\n}\n\nexport enum Layout {\n DUO = 'DUO',\n TILES = 'TILES',\n}\n\nexport default null;","import React from 'react';\nimport {\n branch,\n} from 'recompose';\nimport PaddingBox from '@ux/padding-box';\nimport {\n Heading02,\n BodyCopy01,\n} from '@ux/typography';\nimport { withProps } from '@team-griffin/rehook';\nimport Shortcode, { ShortcodeProps } from 'components/Shortcode';\nimport stylesheet, { Styles } from './Tile.stylesheet';\nimport Glyph from '@ux/glyphs';\nimport { gu2px, Theme } from '@ux/theme-utils';\nimport callToAction from 'presentation/hocs/callToAction';\nimport pureEnhance from '@ux/pure-enhance';\nimport { withBreakpointsHook, BreakpointProps } from '@ux/responsive';\nimport * as r from 'ramda';\nimport withUrlComponent, { UrlComponentType } from 'presentation/hooks/withUrlComponent';\nimport { withHover } from '@team-griffin/stylr';\nimport { Colorway } from 'domain/constants/colorway';\nimport { Layout } from 'domain/constants/layout';\n\nexport interface TileProps {\n colorway: Colorway,\n type: string,\n text: {\n body?: ShortcodeProps,\n title?: ShortcodeProps,\n },\n action: {\n url: string,\n linkAttribution?: string,\n },\n}\ninterface OuterProps extends TileProps {\n theme: Theme,\n hBaseline: number,\n layout: Layout,\n leftTile: boolean,\n rightTile: boolean,\n}\nexport interface InnerProps extends OuterProps, BreakpointProps {\n styles: Styles,\n hover: boolean,\n Component: UrlComponentType,\n}\n\nexport const PureTile = ({\n styles,\n theme,\n colorway,\n text,\n hBaseline,\n action,\n Component,\n}: InnerProps) => {\n const {\n title,\n body,\n } = text;\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\nexport const enhance = pureEnhance('Tile', {\n hocs: [\n callToAction,\n branch(\n r.path([ 'action', 'url' ]),\n //@ts-ignore\n withHover\n ),\n ],\n hooks: [\n withBreakpointsHook,\n withUrlComponent,\n withProps(stylesheet),\n ],\n});\n\nexport default enhance(PureTile);","import { useStyles } from '@team-griffin/stylr';\nimport { gu2px } from '@ux/theme-utils';\nimport { getTitleColor, getBodyColor, getBackgroundColor } from 'presentation/utils/colorway';\nimport { modifier, percentage } from '@ux/style-utils';\nimport { Alignment } from 'domain/constants/alignment';\nimport cssSides, { Side } from '@team-griffin/css-sides';\nimport { breakpoints } from '@ux/responsive';\nimport { Side as TilesSide } from './constants';\nimport { halfContainerWidth } from './styles';\nimport ribbonPadding from 'presentation/utils/ribbonPadding';\nimport { InnerProps } from './Tile';\nimport { CSSProperties } from 'react';\n\nexport interface Styles {\n root: CSSProperties,\n container: CSSProperties,\n title: CSSProperties,\n subtitle: CSSProperties,\n box: CSSProperties,\n wrapperText: CSSProperties,\n wrapperIcon: CSSProperties,\n icon: CSSProperties,\n}\nexport default ({\n theme,\n colorway,\n hover,\n layout,\n isMinSm,\n isMinMd,\n isMinLg,\n isMinXl,\n leftTile,\n rightTile,\n}: InnerProps) => {\n const {\n alignment,\n tilesSide,\n } = layout;\n\n const {\n spacing,\n } = theme;\n\n return useStyles({\n default: {\n root: {\n flex: 1,\n flexBasis: 'auto',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: isMinLg ? 'center' : 'flex-start',\n backgroundColor: getBackgroundColor(theme, colorway),\n textAlign: 'left',\n textDecoration: 'none',\n height: percentage(100),\n ...ribbonPadding({\n spacing,\n isMinSm,\n isMinLg,\n layout: {\n shrinkLeading: isMinLg && rightTile,\n shrinkTrailing: isMinLg && leftTile,\n },\n }),\n },\n container: {\n ...cssSides('padding', Side.X, gu2px(1, spacing)),\n ...cssSides('margin', Side.X, 'auto'),\n position: 'relative',\n width: percentage(100),\n maxWidth: percentage(100),\n },\n title: {\n color: getTitleColor(theme, colorway),\n paddingRight: gu2px(3, spacing),\n },\n subtitle: {\n color: getBodyColor(theme, colorway),\n marginTop: gu2px(2, spacing),\n },\n box: {\n display: 'flex',\n },\n wrapperText: {\n flex: 1,\n flexBasis: 'auto',\n paddingRight: gu2px(2, spacing),\n },\n wrapperIcon: {\n minWidth: gu2px(3, spacing),\n position: 'relative',\n paddingTop: gu2px(0.5, spacing),\n },\n icon: {\n color: getTitleColor(theme, colorway),\n opacity: 1,\n width: gu2px(3, spacing),\n position: 'absolute',\n right: 0,\n },\n },\n hover: {\n root: {\n textDecoration: 'none',\n },\n icon: {\n opacity: 1,\n marginRight: 0,\n animation: 'arrowAnimation 0.3s',\n animationTimingFunction: 'ease-in-out',\n animationDirection: 'normal',\n animationFillMode: 'forwards',\n },\n },\n\n [modifier('alignment', Alignment.CENTER)]: {\n root: {\n textAlign: 'center',\n },\n },\n\n isMinSm: {\n container: {\n maxWidth: breakpoints.sm - gu2px(1, spacing),\n },\n },\n\n isMinMd: {\n container: {\n // theu're side by side so need an additional 1GU removing\n maxWidth: halfContainerWidth(breakpoints.md, spacing),\n },\n },\n\n isMinLg: {\n container: {\n maxWidth: halfContainerWidth(breakpoints.lg, spacing),\n },\n },\n isMinXl: {\n container: {\n maxWidth: halfContainerWidth(breakpoints.xl, spacing),\n },\n },\n leftTileMedium: {\n container: {\n marginRight: 0,\n },\n },\n rightTileMedium: {\n container: {\n marginLeft: 0,\n },\n },\n leftTileLarge: {\n container: {\n marginRight: 'auto',\n marginLeft: 0,\n },\n },\n\n tilesStartLarge: {\n container: {\n marginLeft: 'auto',\n marginRight: 0,\n },\n },\n }, [\n { alignment },\n { hover },\n { alignment },\n { isMinSm },\n { isMinMd },\n { isMinLg },\n { isMinXl },\n { leftTileMedium: leftTile && isMinMd },\n { rightTileMedium: rightTile && isMinMd },\n { leftTileLarge: leftTile && isMinLg },\n { tilesStartLarge: isMinLg && tilesSide === TilesSide.START },\n ]);\n};\n","import React from 'react';\nimport {\n withProps,\n} from '@team-griffin/rehook';\nimport { withBreakpointsHook, BreakpointProps } from '@ux/responsive';\nimport Tile, { TileProps } from './Tile';\nimport stylesheet, { Styles } from './Tiles.stylesheet';\nimport { gu2px, Theme } from '@ux/theme-utils';\nimport { Layout } from 'domain/constants/layout';\nimport pureEnhance from '@ux/pure-enhance';\n\ninterface OuterProps {\n theme: Theme,\n tiles: TileProps[],\n hBaseline: number,\n layout: Layout,\n}\nexport interface InnerProps extends OuterProps, BreakpointProps {\n styles: Styles,\n}\nconst tileAnimation = (spacing: number) => `@keyframes arrowAnimation {\n from {\n right: ${gu2px(3, spacing)}px;\n opacity: 0.1;\n }\n to {\n right: ${gu2px(0, spacing)}px;\n opacity: 1;\n }\n}`;\n\ndeclare const i: number;\ndeclare const tile: TileProps;\n\nexport const PureTiles = ({\n theme,\n tiles,\n styles,\n hBaseline,\n layout,\n}: InnerProps) => (\n \n);\n\n\nexport const enhance = pureEnhance(\n 'Tiles',\n {\n hooks: [\n withBreakpointsHook,\n withProps(stylesheet),\n ],\n },\n\n);\n\nexport default enhance(PureTiles);\n","import { useStyles } from '@team-griffin/stylr';\nimport { percentage } from '@ux/style-utils';\nimport { InnerProps } from './Tiles';\nimport { CSSProperties } from 'react';\n\nexport interface Styles {\n root: CSSProperties,\n tile: CSSProperties,\n}\nexport default ({\n isMinMd,\n isMinLg,\n}: InnerProps) => {\n return useStyles({\n default: {\n tile: {\n flex: 1,\n flexBasis: 'auto',\n // Safari is not filling 100% height of flex parent\n // in nested flex containers\n WebkitFlexBasis: 0,\n position: 'relative',\n },\n },\n\n isMinMd: {\n root: {\n flexDirection: 'row',\n display: 'flex',\n },\n tile: {\n width: percentage(50),\n },\n },\n isMinLg: {\n root: {\n flexDirection: 'column',\n height: percentage(100),\n },\n tile: {\n width: percentage(100),\n },\n },\n }, [\n { isMinMd },\n { isMinLg },\n ]);\n};\n","import React, { Fragment } from 'react';\nimport { Container, Row, Column, Direction, Justify } from '@ux/grid';\nimport pureEnhance from '@ux/pure-enhance';\nimport Background, { BackgroundArray } from '../Background';\nimport Body, { OuterProps as BodyProps } from '../Body';\nimport Scroll from '../Scroll';\nimport Tiles from '../Tiles';\nimport PaddingBox, { Side } from '@ux/padding-box';\nimport { withBreakpointsHook, BreakpointProps } from '@ux/responsive';\nimport { withProps } from '@team-griffin/rehook';\nimport { Side as TilesSide } from '../constants';\nimport stylesheet, { Styles } from './WithTiles.stylesheet';\nimport * as r from 'ramda';\nimport { TileProps } from '../Tile';\nimport { isNotNilOrEmpty } from 'crosscutting/ramda';\n\ninterface OuterProps extends BodyProps {\n showScroll: boolean,\n background: BackgroundArray,\n onScrollClick: (evt: any) => any,\n justify: Justify,\n tiles: TileProps[],\n}\nexport interface InnerProps extends OuterProps, BreakpointProps {\n styles: Styles,\n direction: Direction,\n hasFooterText: boolean,\n}\nexport const PureBillboardTiles = ({\n styles,\n theme,\n layout,\n colorway,\n hBaseline,\n ctas,\n text,\n additionalText,\n footerText,\n tiles,\n onScrollClick,\n justify,\n showScroll,\n ribbonId,\n hasFooterText,\n background,\n direction,\n isMinLg,\n}: InnerProps) => (\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
\n \n
\n \n {footerText}\n \n \n
\n \n \n \n
\n \n \n \n \n);\n\nconst enhance = pureEnhance('BillboardTiles', [\n withBreakpointsHook,\n withProps((ownerProps: OuterProps) => ({\n direction: r.ifElse(\n r.pathEq([ 'layout', 'tilesSide' ], TilesSide.END),\n r.always(Direction.ROW),\n r.always(Direction.ROW_REVERSE),\n )(ownerProps),\n hasFooterText: r.propSatisfies(\n isNotNilOrEmpty,\n 'footerText',\n )(ownerProps),\n })),\n withProps(stylesheet),\n]);\n\nexport default enhance(PureBillboardTiles);\n","import { useStyles } from '@team-griffin/stylr';\nimport { getActiveAnchor, halfContainerWidth } from '../styles';\nimport { breakpoints } from '@ux/responsive';\nimport cssSides, { Side } from '@team-griffin/css-sides';\nimport { gu2px } from '@ux/theme-utils';\nimport ribbonPadding from 'presentation/utils/ribbonPadding';\nimport { Side as TilesSide } from '../constants';\nimport { percentage } from '@ux/style-utils';\nimport { InnerProps } from './WithTiles';\nimport { CSSProperties } from 'react';\n\nexport interface Styles {\n content: CSSProperties,\n body: CSSProperties,\n container: CSSProperties,\n row: CSSProperties,\n}\n\nexport default ({\n layout,\n theme,\n isMinSm,\n isMinMd,\n isMinLg,\n isMinXl,\n}: InnerProps) => {\n const {\n spacing,\n } = theme;\n\n const {\n anchor,\n tilesSide,\n } = layout;\n\n const activeAnchor = getActiveAnchor(anchor, {\n isMinSm,\n isMinMd,\n isMinLg,\n isMinXl,\n });\n\n return useStyles({\n default: {\n content: {\n flex: 1,\n flexBasis: 'auto',\n justifyContent: activeAnchor,\n display: 'flex',\n flexDirection: 'column',\n ...ribbonPadding({\n spacing,\n isMinSm,\n isMinLg,\n }),\n },\n body: {\n flex: 1,\n flexBasis: 'auto',\n },\n },\n\n isMinLg: {\n container: {\n ...cssSides('padding', Side.X, gu2px(1, spacing)),\n display: 'flex',\n flex: 1,\n flexBasis: 'auto',\n // Safari is not filling 100% height of flex parent\n // in nested flex containers\n webkitFlexBasis: 0,\n width: percentage(100),\n maxWidth: percentage(100),\n },\n row: {\n width: percentage(100),\n },\n content: {\n marginLeft: 'auto',\n maxWidth: halfContainerWidth(breakpoints.lg, spacing),\n height: percentage(100),\n },\n },\n\n isMinXl: {\n content: {\n maxWidth: halfContainerWidth(breakpoints.xl, spacing),\n },\n },\n\n lgStartTile: {\n content: {\n marginLeft: 0,\n marginRight: 'auto',\n },\n },\n }, [\n { isMinSm },\n { isMinLg },\n { isMinXl },\n { lgStartTile: tilesSide === TilesSide.START && isMinLg },\n ]);\n};\n","import React, { Fragment, ReactNode } from 'react';\nimport pureEnhance from '@ux/pure-enhance';\nimport {\n withProps,\n defaultProps,\n withHandlers,\n withState,\n} from '@team-griffin/rehook';\nimport Ribbon from '../Ribbon';\nimport findResponsiveItem from 'presentation/utils/findResponsiveItem';\nimport getBreakpoints from 'presentation/utils/getBreakpoints';\nimport visibilitySet from 'presentation/hocs/visibilitySet';\nimport { Fit, RibbonProps } from 'domain/constants/ribbons';\nimport { scroller, Element } from 'react-scroll';\nimport { ulid } from 'ulid';\nimport CornerEmbellishments, { cornerEmbellishments } from './CornerEmbellishments';\nimport BillboardGeneric from './layouts/Generic';\nimport BillboardDuo from './layouts/Duo';\nimport BillboardTiles from './layouts/WithTiles';\nimport errorBoundary from 'presentation/hocs/errorBoundary';\nimport { OuterProps as BodyProps } from './Body';\nimport * as r from 'ramda';\nimport { withBreakpointsHook, BreakpointProps } from '@ux/responsive';\nimport { CTA } from 'core/ribbons/cta';\n\nexport interface OuterProps extends BodyProps, RibbonProps {\n cornerEmbellishments?: cornerEmbellishments,\n}\ninterface DefaultProps extends OuterProps {\n ctas: CTA[],\n additionalText: string|ReactNode,\n footerText: string|ReactNode,\n duo: boolean,\n duoLayout: boolean,\n}\ninterface MiddleProps extends DefaultProps, BreakpointProps {}\ninterface InnerProps extends MiddleProps {\n bottomScrollName: string,\n hasTiles: boolean,\n}\n\nconst hasTwoTiles = r.pipe(r.length, r.equals(2));\n\nconst shouldShowScroll = (props: MiddleProps) => r.ifElse(\n r.propEq('isMinSm', true),\n r.pipe(\n r.path([ 'layout', 'fit' ]),\n (fit) => findResponsiveItem(\n getBreakpoints(props),\n fit,\n ),\n r.either(\n r.equals(Fit.FULLSCREEN),\n r.equals(Fit.FILL),\n ),\n ),\n r.always(false),\n)(props);\n\n\nconst BillboardLayout = r.cond([\n [ r.prop('hasTiles'), (props) => ],\n [ r.prop('duoLayout'), (props) => ],\n [ r.T, (props) => ],\n]);\n\nexport const PureBillboard = ({\n id,\n theme,\n layout,\n loading,\n colorway,\n name,\n bottomScrollName,\n hasTiles,\n duoLayout,\n cornerEmbellishments,\n ...props\n}: InnerProps) => (\n \n \n \n \n \n \n \n);\n\n\nexport const enhance = pureEnhance(\n 'Billboard',\n {\n hocs: [\n errorBoundary,\n visibilitySet,\n ],\n hooks: [\n defaultProps({\n ctas: [],\n additionalText: null,\n footerText: null,\n duo: false,\n }),\n withState('bottomScrollName', 'setBottomScrollName', () => {\n return ulid();\n }),\n withHandlers({\n onScrollClick: ({ bottomScrollName }: { bottomScrollName: string }) => () => {\n scroller.scrollTo(bottomScrollName, {\n duration: 500,\n delay: 100,\n smooth: true,\n });\n },\n }),\n withBreakpointsHook,\n withProps((ownerProps: MiddleProps) => ({\n showScroll: shouldShowScroll(ownerProps),\n hasTiles: r.both(\n r.propSatisfies(hasTwoTiles, 'tiles'),\n r.propEq('duo', false),\n )(ownerProps),\n })),\n ],\n },\n);\n\nexport default enhance(PureBillboard);\n","import Billboard, { OuterProps } from './Billboard';\nimport { Side } from './constants';\n\nexport {\n Side,\n OuterProps as BillboardProps,\n};\nexport default Billboard;"],"sourceRoot":""}