{"version":3,"sources":["webpack:///./presentation/components/ribbons/message-strip/MessageStrip.tsx","webpack:///./presentation/components/ribbons/message-strip/MessageStrip.stylesheet.ts","webpack:///./presentation/components/ribbons/message-strip/index.ts","webpack:///./presentation/utils/ribbonPadding.ts","webpack:///../node_modules/@ux/text-button/dist/es/text-button.js","webpack:///./presentation/hocs/errorBoundary.tsx","webpack:///../node_modules/@ux/typography/dist/es/typography.js","webpack:///./presentation/hocs/withRibbonImpression.ts","webpack:///./presentation/utils/ribbonWidth.ts","webpack:///./presentation/hocs/deepLink.tsx","webpack:///./presentation/components/ribbons/Ribbon/Ribbon.tsx","webpack:///./presentation/components/ribbons/Ribbon/ConnectedRibbon.ts","webpack:///./presentation/components/ribbons/Ribbon/index.ts","webpack:///./presentation/components/Shortcode/PendingShortcode.tsx","webpack:///./presentation/components/Shortcode/Alt.tsx","webpack:///./presentation/components/Shortcode/Bold.tsx","webpack:///./presentation/components/Shortcode/Italic.tsx","webpack:///./presentation/components/Shortcode/Link.tsx","webpack:///./presentation/components/Shortcode/Text.tsx","webpack:///./presentation/components/Shortcode/Tooltip.tsx","webpack:///./presentation/components/Shortcode/Shortcode.tsx","webpack:///./presentation/components/Shortcode/index.ts","webpack:///./presentation/hocs/visibilitySet.tsx","webpack:///./domain/constants/alignment.ts","webpack:///./crosscutting/ramda.ts","webpack:///./presentation/components/common/CallToAction.tsx","webpack:///./domain/constants/callToAction.ts","webpack:///./presentation/hocs/callToAction.js"],"names":["enhance","pureEnhance","hocs","errorBoundary","visibilitySet","hooks","withBreakpointsHook","defaultProps","hBaseline","withProps","ownerProps","hasTitle","r","isNotNilOrEmpty","hasSubtitle","hasCta","ctas","theme","colorway","isMinSm","layout","spacing","alignment","useStyles","default","root","display","textAlign","width","percentage","container","flexWrap","alignItems","justifyContent","marginTop","gu2px","content","title","color","getTitleColor","subtitle","getBodyColor","cta","marginRight","noTitle","modifier","Alignment","CENTER","flexDirection","id","styles","loading","text","name","Ribbon","flush","type","style","depth","Shortcode","against","code","key","i","CallToAction","getAgainst","ribbonId","index","block","MessageStrip","isMinLg","shrinkLeading","shrinkTrailing","getPaddingSize","shrinkSide","isFlush","leading","Flush","LEADING","trailing","TRAILING","paddingTop","paddingBottom","Size","Against","ContentType","_defineProperty","obj","value","Object","defineProperty","enumerable","configurable","writable","disabled","caps","size","MD","contentType","DEFAULT","_ref","_useStyles","hover","active","palette","typography","fill","LIGHT","secondary","NEUTRAL","DARK","tertiary","PRIMARY","primaryContrast","PRIMARY_FADED","HIGHLIGHT","highlightContrast","HIGHLIGHT_FADED","highlight","assign","A","fontFamily","lineHeight","backgroundColor","outline","cursor","textDecoration","transition","inner","opacity","borderBottomStyle","textTransform","SM","fontSize","LG","INHERIT","PHONE_NUMBER","borderBottomWidth","TextButton","_a","children","domProps","s","e","t","p","prototype","hasOwnProperty","call","indexOf","getOwnPropertySymbols","length","__rest","createElement","stylesheet","isMinMd","getBackgroundColor","ribbonPadding","cssSides","Side","X","WrappedComponent","ErrorBoundary","props","compose","withState","lifecycle","componentDidCatch","this","setHasErrored","mergeStyles","createHeading","component","headingSize","Number","concat","Y","fontWeight","Heading01","Heading02","Heading03","Heading04","Heading05","Heading06","stylesheet$1","_ref$theme","gu","marginBottom","SubHeading01","SubHeading02","stylesheet$2","PreHeading01","PreHeading02","BodyCopy01","hooksA","pipe","mapProps","selector","useMemo","getRibbonAnalytics","analytics","useSelector","dispatch","useDispatch","actions","bindActionCreators","sendImpression","withHandlers","onImpression","ribbonName","ribbonType","hooksB","isFullyInViewport","stopWatcher","useEffect","mapPropsHoc","branch","Watch","deepLink","withRouter","componentDidMount","location","hash","scrollWhenReady","animationComplete","setTimeout","scroller","scrollTo","duration","delay","smooth","mapFit","fit","Fit","FULLSCREEN","minHeight","FILL","flex","flexBasis","AUTO","height","isFinite","targetRef","useRef","duoLayout","activeFit","findResponsiveItem","getBreakpoints","padding","duoLayoutFlex","duoRibbonWidth","position","ribbon","Colorway","PRIMARY_GRADIENT","backgroundImage","primary","primaryGradient","ref","withRibbonImpression","randomWidth","Math","floor","random","puree","lines","elements","RecursiveShortcode","rest","fontStyle","getUsfConfig","wlSelectors","getAppConfig","mapStateToProps","connect","attributes","externalRoutes","to","goto","analyticskey","TextButtonSize","escapeShortCodes","nl2br","string","split","map","reduce","prev","cur","newline","isFalse","formatText","ReactTooltip","lazy","eventToggle","label","fallback","tagName","useDefaultStyles","maxWidth","Glyph","Sup","List","OrderedList","ListItem","TickListItem","ProductPrice","PhoneNumber","element","genericShortcodeHandler","shortcodeName","Component","String","Element","nuller","Text","Italic","Bold","Alt","Link","Tooltip","glyph","PendingShortcode","BaseComponent","isNotEmpty","isNotNil","mapIndexed","rA","arr","fn","callToAction","kind","addingStatus","handleClick","status","Status","PENDING","SUCCESS","FAILURE","buttonProps","onClick","Behavior","formatPricingTier","tier","paymentInterval","term","behavior","state","buttonId","getExternalRoutes","getRibbon","product","ribbonList","createRibbonName","getAddingStatus","addToBasket","applyVoucher","setVisibility","openReduxModal","signals","open","productClicked","promotionClicked","productAddToBasket","stateProps","dispatchProps","ownProps","window","useWindow","handleAnalytics","ctaType","list","productId","promotion","handleAddToBasketClick","postAction","pricingTier","productData","skuId","defaultSkuId","price","selectors","getPrice","includeTax","category","categoryName","handleNavigateClick","handleApplyVoucherClick","voucherCode","handleConfigureClick","query","URLSearchParams","append","q","toString","href","handleSetVisibilityClick","handlePlayVideoClick","videoId","provider","route","params","ADD_TO_BASKET","APPLY_VOUCHER","CONFIGURE","PLAY_VIDEO","SET_VISIBILITY","NAVIGATION","linkAttribution"],"mappings":"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","file":"pex-static/16/34.b8b2d9967bec863b326a.chunk.js","sourcesContent":["import React from 'react';\nimport {\n withProps,\n defaultProps,\n} from '@team-griffin/rehook';\nimport { Container } from '@ux/grid';\nimport PaddingBox from '@ux/padding-box';\nimport { Heading04, BodyCopy01 } from '@ux/typography';\nimport Shortcode, { ShortcodeProps } from 'components/Shortcode';\nimport Ribbon from 'components/ribbons/Ribbon';\nimport CallToAction from 'components/common/CallToAction';\nimport { BreakpointProps, withBreakpointsHook } from '@ux/responsive';\nimport { isNotNilOrEmpty } from 'crosscutting/ramda';\nimport visibilitySet from 'presentation/hocs/visibilitySet';\nimport errorBoundary from 'presentation/hocs/errorBoundary';\nimport { getAgainst } from 'presentation/utils/colorway';\nimport stylesheet, { Styles } from './MessageStrip.stylesheet';\nimport * as r from 'ramda';\nimport { RibbonProps } from 'domain/constants/ribbons';\nimport { CTA } from 'core/ribbons/cta';\nimport pureEnhance from '@ux/pure-enhance';\n\ninterface OuterProps extends RibbonProps {\n text: {\n title: ShortcodeProps,\n subtitle: ShortcodeProps,\n },\n ctas: CTA[],\n}\n\ninterface DefaultProps extends OuterProps {\n baseline: number,\n}\nexport interface InnerProps extends DefaultProps, BreakpointProps {\n styles: Styles,\n hasTitle: boolean,\n hasSubtitle: boolean,\n hasCta: boolean,\n}\ndeclare const i: number;\ndeclare const cta: CTA;\n\nexport const PureMessageStrip = ({\n id,\n styles,\n theme,\n loading,\n layout,\n text,\n ctas,\n colorway,\n name,\n isMinSm,\n hasTitle,\n hasSubtitle,\n hasCta,\n hBaseline,\n}: InnerProps) => {\n const { title, subtitle } = r.defaultTo({\n title: null,\n subtitle: null,\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 \n
\n \n
\n \n
\n \n \n \n \n );\n};\n\nexport const enhance = pureEnhance(\n 'MessageStrip',\n {\n hocs: [\n errorBoundary,\n visibilitySet,\n ],\n hooks: [\n withBreakpointsHook,\n defaultProps({\n hBaseline: 1,\n }),\n withProps((ownerProps: DefaultProps) => ({\n // eslint-disable-next-line max-len\n hasTitle: r.pathSatisfies(isNotNilOrEmpty, [ 'text', 'title' ], ownerProps),\n hasSubtitle: r.pathSatisfies(isNotNilOrEmpty, [ 'text', 'subtitle' ], ownerProps),\n hasCta: isNotNilOrEmpty(ownerProps.ctas),\n })),\n withProps(stylesheet),\n ],\n },\n);\n\nexport default enhance(PureMessageStrip);\n","import { useStyles } from '@team-griffin/stylr';\nimport { modifier, percentage } from '@ux/style-utils';\nimport { getTitleColor, getBodyColor } from 'presentation/utils/colorway';\nimport { gu2px } from '@ux/theme-utils';\nimport { Alignment } from 'domain/constants/alignment';\nimport * as r from 'ramda';\nimport { InnerProps } from './MessageStrip';\nimport { CSSProperties } from 'react';\n\nexport interface Styles {\n root: CSSProperties,\n container: CSSProperties,\n content: CSSProperties,\n title: CSSProperties,\n subtitle: CSSProperties,\n cta: CSSProperties,\n ctas: CSSProperties,\n}\nexport default ({\n theme,\n colorway,\n isMinSm,\n layout,\n hasTitle,\n}: InnerProps) => {\n const {\n spacing,\n } = theme;\n\n const {\n alignment,\n } = layout;\n\n return useStyles({\n default: {\n root: {\n display: 'block',\n textAlign: 'left',\n width: percentage(100),\n },\n container: {\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: percentage(100),\n // offset margin so content and title can be on same\n // line but wrap if needed and maintain margin between\n marginTop: r.negate(gu2px(3, spacing)),\n },\n content: {\n marginTop: gu2px(3, spacing),\n },\n title: {\n color: getTitleColor(theme, colorway),\n },\n subtitle: {\n color: getBodyColor(theme, colorway),\n },\n ctas: {\n marginTop: gu2px(2, spacing),\n width: percentage(100),\n },\n cta: {\n marginTop: gu2px(1, spacing),\n },\n },\n\n isMinSm: {\n ctas: {\n width: 'auto',\n },\n content: {\n marginRight: gu2px(3, spacing),\n },\n },\n\n noTitle: {\n subtitle: {\n marginTop: 0,\n },\n },\n\n [modifier('alignment', Alignment.CENTER)]: {\n root: {\n textAlign: 'center',\n },\n container: {\n alignItems: 'center',\n flexDirection: 'column',\n },\n content: {\n marginRight: 0,\n },\n },\n }, [\n { isMinSm },\n { alignment },\n { noTitle: !hasTitle },\n ]);\n};\n","import MessageStrip from './MessageStrip';\n\nexport default MessageStrip;\n","import { Flush } from 'domain/constants/ribbons';\nimport { gu2px } from '@ux/theme-utils';\nimport * as r from 'ramda';\nimport { Layout } from 'domain/constants/layout';\n\nexport default ({\n spacing,\n isMinSm,\n isMinLg,\n layout,\n flush,\n}: {\n spacing: number,\n isMinSm: boolean,\n isMinLg: boolean,\n layout?: Layout,\n flush?: Flush|boolean,\n}) => {\n\n if (r.equals(flush, true)) {\n // Component will handle all padding, used on full bleed image ribbons\n return {};\n }\n\n const {\n //@ts-ignore\n shrinkLeading,\n //@ts-ignore\n shrinkTrailing,\n } = r.defaultTo({}, layout);\n\n /*\n shrinkSide:\n shrink[Leading/Trailing] prop is true then return a reduced padding\n depending on screen size\n isFlush:\n leading or trailing edge has been designated as flush, no padding\n */\n const getPaddingSize = (shrinkSide: string, isFlush: boolean) => {\n\n if (isFlush) {\n return 0;\n }\n\n return r.cond([\n [ r.propEq(shrinkSide, true), () => r.ifElse(\n r.equals(true),\n r.always(1),\n r.always(0.5),\n )(isMinSm) ],\n [ r.propEq('isMinLg', true), r.always(6) ],\n [ r.propEq('isMinSm', true), r.always(5) ],\n [ r.T, r.always(4) ],\n ])({\n isMinLg,\n isMinSm,\n shrinkLeading,\n shrinkTrailing,\n });\n };\n\n const leading = getPaddingSize('shrinkLeading', flush === Flush.LEADING);\n const trailing = getPaddingSize('shrinkTrailing', flush === Flush.TRAILING);\n\n return {\n paddingTop: gu2px(leading, spacing),\n paddingBottom: gu2px(trailing, spacing),\n };\n};\n","import React from 'react';\nimport { defaultProps, withProps, mapProps } from '@team-griffin/rehook';\nimport pureEnhance from '@ux/pure-enhance';\nimport { DynamicLink } from '@ux/dynamic-link';\nimport { useStyles, withInteraction } from '@team-griffin/stylr';\nimport cssSides, { Side } from '@team-griffin/css-sides';\nimport longhand from '@team-griffin/css-longhand';\nimport px2em from '@ux/px2em';\nimport { content } from '@ux/type-size';\nimport { percentage, modifier } from '@ux/style-utils';\nimport { cond, equals, always, T, omit } from 'ramda';\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n\r\nfunction __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\r\n t[p[i]] = s[p[i]];\r\n return t;\r\n}\n\nvar Size;\n\n(function (Size) {\n Size[\"SM\"] = \"SM\";\n Size[\"MD\"] = \"MD\";\n Size[\"LG\"] = \"LG\";\n Size[\"INHERIT\"] = \"INHERIT\";\n})(Size || (Size = {}));\n\nvar Against;\n\n(function (Against) {\n Against[\"LIGHT\"] = \"LIGHT\";\n Against[\"NEUTRAL\"] = \"NEUTRAL\";\n Against[\"DARK\"] = \"DARK\";\n Against[\"PRIMARY\"] = \"PRIMARY\";\n Against[\"PRIMARY_FADED\"] = \"PRIMARY_FADED\";\n Against[\"HIGHLIGHT\"] = \"HIGHLIGHT\";\n Against[\"HIGHLIGHT_FADED\"] = \"HIGHLIGHT_FADED\";\n})(Against || (Against = {}));\n\nvar ContentType;\n\n(function (ContentType) {\n ContentType[\"DEFAULT\"] = \"DEFAULT\";\n ContentType[\"PHONE_NUMBER\"] = \"PHONE_NUMBER\";\n})(ContentType || (ContentType = {}));\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nvar stylesheet = function stylesheet(_ref) {\n var _useStyles;\n\n var theme = _ref.theme,\n against = _ref.against,\n block = _ref.block,\n disabled = _ref.disabled,\n size = _ref.size,\n caps = _ref.caps,\n contentType = _ref.contentType,\n hover = _ref.hover,\n active = _ref.active;\n var palette = theme.palette,\n typography = theme.typography;\n var fill = cond([[equals(Against.LIGHT), always(palette.secondary)], [equals(Against.NEUTRAL), always(palette.secondary)], [equals(Against.DARK), always(palette.tertiary)], [equals(Against.PRIMARY), always(palette.primaryContrast)], [equals(Against.PRIMARY_FADED), always(palette.secondary)], [equals(Against.HIGHLIGHT), always(palette.highlightContrast)], [equals(Against.HIGHLIGHT_FADED), always(palette.highlight)], [T, always(palette.secondary)]])(against);\n return useStyles((_useStyles = {\n default: {\n root: Object.assign({}, content(theme.typography), longhand('border', {\n color: 'transparent',\n style: 'solid',\n width: 0\n }), cssSides('margin', Side.A, 0), cssSides('padding', Side.A, 0), {\n fontFamily: typography.content,\n lineHeight: 1.1,\n paddingBottom: 1,\n color: fill,\n textAlign: 'left',\n backgroundColor: 'transparent',\n outline: 0,\n cursor: equals(disabled, true) ? 'not-allowed' : 'pointer',\n textDecoration: 'none',\n transition: 'opacity 0.2s ease-in-out, border 0.1s ease-in-out'\n }),\n\n /*\r\n we apply the border on the inner text span as we need to ensure\r\n that if the text wraps over 2 lines, both lines have a dotted border.\r\n If there is any padding on this inner element it breaks the underline\r\n when in a css column.\r\n */\n inner: Object.assign({}, longhand('borderBottom', {\n style: 'dotted',\n color: fill,\n width: 1\n }))\n },\n hover: {\n root: {\n opacity: 0.75\n },\n inner: {\n borderBottomStyle: 'solid',\n opacity: 0.75\n }\n },\n active: {\n inner: {\n borderBottomStyle: 'solid',\n opacity: 0.75\n }\n },\n caps: {\n root: {\n textTransform: 'uppercase'\n }\n },\n block: {\n root: {\n display: 'block',\n width: percentage(100)\n }\n }\n }, _defineProperty(_useStyles, modifier('size', Size.SM), {\n root: {\n fontSize: px2em(12)\n }\n }), _defineProperty(_useStyles, modifier('size', Size.MD), {\n root: {\n fontSize: px2em(14)\n }\n }), _defineProperty(_useStyles, modifier('size', Size.LG), {\n root: {\n fontSize: px2em(16)\n }\n }), _defineProperty(_useStyles, modifier('size', Size.INHERIT), {\n root: {\n fontSize: 'inherit',\n lineHeight: 'inherit'\n }\n }), _defineProperty(_useStyles, modifier('contentType', ContentType.PHONE_NUMBER), {\n inner: {\n borderBottomWidth: 0\n }\n }), _defineProperty(_useStyles, \"disabled\", {\n root: {\n opacity: 0.3\n }\n }), _useStyles), [{\n hover: hover\n }, {\n active: active\n }, {\n caps: caps\n }, {\n block: block\n }, {\n disabled: disabled\n }, {\n size: size\n }, {\n contentType: contentType\n }, {\n against: against\n }]);\n};\n\nvar PureTextButton = function PureTextButton(_a) {\n var styles = _a.styles,\n children = _a.children,\n domProps = __rest(_a, [\"styles\", \"children\"]);\n\n return React.createElement(DynamicLink, Object.assign({\n style: styles.root\n }, domProps), React.createElement(\"span\", {\n style: styles.inner\n }, children));\n};\nvar enhance = pureEnhance('TextButton', {\n hooks: [defaultProps({\n disabled: false,\n block: false,\n caps: false,\n size: Size.MD,\n contentType: ContentType.DEFAULT\n }), withProps(stylesheet), mapProps(omit(['theme', 'against', 'hover', 'active', 'focus', 'hocus', 'caps', 'block', 'size', 'contentType']))]\n});\nvar TextButton = withInteraction(enhance(PureTextButton)); // eslint-disable-next-line no-underscore-dangle\n\nexport default TextButton;\nexport { Against, ContentType, Size };\n","import React, { CSSProperties } from 'react';\nimport {\n compose,\n lifecycle,\n withState,\n withProps,\n} from 'recompose';\nimport Message from '@ux/message';\nimport { Container } from '@ux/grid';\nimport * as r from 'ramda';\nimport cssSides, { Side } from '@team-griffin/css-sides';\nimport {\n getBackgroundColor,\n getTitleColor,\n} from 'presentation/utils/colorway';\nimport { gu2px, Theme } from '@ux/theme-utils';\nimport ribbonPadding from 'presentation/utils/ribbonPadding';\nimport { useStyles } from '@team-griffin/stylr';\nimport { Colorway } from 'domain/constants/colorway';\nimport { Layout } from 'domain/constants/layout';\nimport { Flush } from 'domain/constants/ribbons';\nimport { BreakpointProps } from '@ux/responsive';\ninterface OuterProps extends BreakpointProps {\n theme: Theme,\n colorway: Colorway,\n layout: Layout,\n flush?: Flush|boolean,\n}\n\ninterface InnerProps extends OuterProps {\n styles: {\n root: CSSProperties,\n }\n hasErrored: boolean,\n}\nconst stylesheet = ({\n theme,\n colorway,\n isMinSm,\n isMinMd,\n isMinLg,\n layout,\n flush,\n}: InnerProps) => {\n const {\n spacing,\n } = theme;\n\n return useStyles({\n default: {\n root: {\n backgroundColor: getBackgroundColor(theme, colorway),\n color: getTitleColor(theme, colorway),\n ...ribbonPadding({\n spacing,\n isMinSm,\n isMinLg,\n layout,\n flush,\n }),\n ...cssSides('Side', Side.X, gu2px(3, spacing)),\n textAlign: 'center',\n },\n },\n isMinSm: {\n root: {\n ...cssSides('Side', Side.X, gu2px(4, spacing)),\n },\n },\n }, [\n { colorway },\n { isMinSm },\n { isMinMd },\n ]);\n};\n\nexport default (WrappedComponent: any) => {\n const ErrorBoundary = r.ifElse(\n r.propEq('hasErrored', true),\n ({ styles }) => (\n
\n \n \n \n
\n ),\n (props: InnerProps) => (\n \n ),\n );\n\n return compose(\n withState('hasErrored', 'setHasErrored', false),\n lifecycle({\n componentDidCatch: function() {\n //@ts-ignore\n this.props.setHasErrored(true);\n },\n }),\n withProps(stylesheet),\n )(ErrorBoundary);\n};\n","import { headingXl, headingXxl, display, headingL, headingM, headingS, headingXs, headingXxs, content } from '@ux/type-size';\nimport reactCSS from 'reactcss';\nimport cssSides, { Side } from '@team-griffin/css-sides';\nimport { createElement } from 'react';\nimport { defaultProps, mapProps } from '@team-griffin/rehook';\nimport pureEnhance from '@ux/pure-enhance';\nimport { withStylesHook } from '@ux/style-utils';\nimport { withBreakpoints } from '@ux/responsive';\nimport { pipe, converge, assoc, mergeDeepRight, path, propOr, identity, dissoc, is, defaultTo } from 'ramda';\nimport { gu2px } from '@ux/theme-utils';\n\nvar mergeStyles = pipe(converge(assoc('style'), [converge(mergeDeepRight, [path(['styles', 'root']), propOr({}, 'style')]), identity]), dissoc('styles'));\n\nvar createHeading = function createHeading(name, component, headingSize, stylesheet) {\n return pureEnhance(name, {\n hocs: [withBreakpoints],\n hooks: [defaultProps({\n component: component\n }), withStylesHook(function (props) {\n return stylesheet(Object.assign({}, props, {\n headingSize: headingSize\n }));\n }), mapProps(pipe(mergeStyles, function (props) {\n // if a `depth` prop is provided, make the `` element\n if (is(Number, props.depth)) {\n return assoc('component', \"h\".concat(props.depth), props);\n }\n\n return props;\n }))]\n })(function (_ref) {\n var style = _ref.style,\n children = _ref.children,\n component = _ref.component;\n return createElement(component, {\n style: style\n }, children);\n });\n};\n\nvar stylesheet = function stylesheet(_ref) {\n var typography = _ref.theme.typography,\n isMinSm = _ref.isMinSm,\n isMinLg = _ref.isMinLg,\n headingSize = _ref.headingSize;\n return reactCSS({\n default: {\n root: Object.assign({}, headingSize[0](typography), cssSides('margin', Side.Y, 0), {\n fontWeight: 'normal',\n fontFamily: typography.display\n })\n },\n isMinSm: {\n root: Object.assign({}, headingSize[1](typography))\n },\n isMinLg: {\n root: Object.assign({}, headingSize[2](typography))\n }\n }, [{\n isMinSm: isMinSm\n }, {\n isMinLg: isMinLg\n }]);\n};\n/* eslint-disable max-len */\n\n\nvar Heading01 = createHeading('Heading01', 'h1', [headingXl, headingXxl, display], stylesheet);\nvar Heading02 = createHeading('Heading02', 'h1', [headingL, headingXl, headingXxl], stylesheet);\nvar Heading03 = createHeading('Heading03', 'h1', [headingM, headingL, headingXl], stylesheet);\nvar Heading04 = createHeading('Heading04', 'h1', [headingS, headingM, headingL], stylesheet);\nvar Heading05 = createHeading('Heading05', 'h1', [headingXs, headingS, headingM], stylesheet);\nvar Heading06 = createHeading('Heading06', 'h1', [headingXxs, headingXs, headingS], stylesheet);\n\nvar stylesheet$1 = function stylesheet(_ref) {\n var _ref$theme = _ref.theme,\n typography = _ref$theme.typography,\n spacing = _ref$theme.spacing,\n gu = _ref.gu,\n isMinSm = _ref.isMinSm,\n isMinLg = _ref.isMinLg,\n headingSize = _ref.headingSize;\n return reactCSS({\n default: {\n root: Object.assign({}, headingSize[0](typography), {\n marginTop: gu2px(defaultTo(2, gu), spacing),\n marginBottom: 0,\n fontWeight: 'normal',\n fontFamily: typography.display\n })\n },\n isMinSm: {\n root: Object.assign({}, headingSize[1](typography))\n },\n isMinLg: {\n root: Object.assign({}, headingSize[2](typography))\n }\n }, [{\n isMinSm: isMinSm\n }, {\n isMinLg: isMinLg\n }]);\n};\n/* eslint-disable max-len */\n\n\nvar SubHeading01 = createHeading('SubHeading01', 'h2', [headingXs, headingS, headingM], stylesheet$1);\nvar SubHeading02 = createHeading('SubHeading02', 'h3', [headingXxs, headingXxs, headingXs], function (props) {\n return stylesheet$1(mergeDeepRight(props, {\n gu: 1\n }));\n});\n\nvar stylesheet$2 = function stylesheet(_ref) {\n var _ref$theme = _ref.theme,\n typography = _ref$theme.typography,\n spacing = _ref$theme.spacing,\n isMinSm = _ref.isMinSm,\n isMinLg = _ref.isMinLg,\n headingSize = _ref.headingSize;\n return reactCSS({\n default: {\n root: Object.assign({}, headingSize[0](typography), {\n marginTop: 0,\n marginBottom: gu2px(1, spacing),\n fontWeight: 'normal',\n fontFamily: typography.display\n })\n },\n isMinSm: {\n root: Object.assign({}, headingSize[1](typography))\n },\n isMinLg: {\n root: Object.assign({}, headingSize[2](typography))\n }\n }, [{\n isMinSm: isMinSm\n }, {\n isMinLg: isMinLg\n }]);\n};\n/* eslint-disable max-len */\n\n\nvar PreHeading01 = createHeading('PreHeading01', 'div', [headingXxs, headingXs, headingS], stylesheet$2);\nvar PreHeading02 = createHeading('PreHeading02', 'div', [headingXxs, headingXxs, headingXs], stylesheet$2);\n\nvar stylesheet$3 = function stylesheet(_ref) {\n var _ref$theme = _ref.theme,\n typography = _ref$theme.typography,\n spacing = _ref$theme.spacing,\n isMinSm = _ref.isMinSm,\n isMinLg = _ref.isMinLg,\n headingSize = _ref.headingSize;\n return reactCSS({\n default: {\n root: Object.assign({}, headingSize[0](typography), {\n marginTop: gu2px(1, spacing),\n marginBottom: 0,\n fontWeight: 'normal',\n fontFamily: typography.content\n })\n },\n isMinSm: {\n root: Object.assign({}, headingSize[1](typography))\n },\n isMinLg: {\n root: Object.assign({}, headingSize[2](typography))\n }\n }, [{\n isMinSm: isMinSm\n }, {\n isMinLg: isMinLg\n }]);\n};\n/* eslint-disable max-len */\n\n\nvar BodyCopy01 = createHeading('BodyCopy01', 'p', [content, content, content], stylesheet$3);\n\nvar index = null;\n\nexport default index;\nexport { BodyCopy01, Heading01, Heading02, Heading03, Heading04, Heading05, Heading06, PreHeading01, PreHeading02, SubHeading01, SubHeading02 };\n","import { useMemo, useEffect } from 'react';\nimport { branch, mapProps as mapPropsHoc } from 'recompose';\nimport pureEnhance from '@ux/pure-enhance';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { bindActionCreators } from 'redux';\nimport { pipe, withProps, mapProps, withHandlers } from '@team-griffin/rehook';\nimport { Watch } from 'scrollmonitor-react';\nimport * as r from 'ramda';\nimport { sendImpression } from 'application/signals/ribbons';\nimport { getRibbonAnalytics } from 'domain/selectors/ribbons';\nimport { Type } from 'domain/constants/ribbons';\n\nconst hooksA = pipe(\n mapProps((props: any) => {\n const { id } = props;\n const selector = useMemo(() => getRibbonAnalytics(id), [ id ]);\n const analytics = useSelector(selector);\n const dispatch = useDispatch();\n const actions = bindActionCreators({ sendImpression }, dispatch);\n\n return r.mergeDeepLeft(props, {\n analytics,\n actions,\n });\n }),\n withHandlers({\n onImpression: ({\n name,\n type,\n analytics,\n actions: {\n sendImpression,\n },\n }: {\n name: string,\n type: Type,\n analytics: any,\n actions: {\n sendImpression: Function,\n }\n }) => () => sendImpression({\n ...analytics,\n ribbonName: name,\n ribbonType: type,\n }),\n }),\n);\n\nconst hooksB = pipe(\n withProps(({\n isFullyInViewport,\n stopWatcher,\n onImpression,\n analytics,\n }: {\n isFullyInViewport: boolean,\n stopWatcher: () => void,\n onImpression: (a: any) => void,\n analytics: any,\n }) => {\n useEffect(() => {\n if (isFullyInViewport) {\n stopWatcher();\n onImpression(analytics);\n }\n }, [ isFullyInViewport ]);\n }),\n);\n\nexport default pureEnhance('RibbonImpression', {\n hocs: [\n mapPropsHoc(hooksA),\n branch(\n r.propSatisfies(r.complement(r.isNil), 'analytics'),\n Watch,\n ),\n mapPropsHoc(hooksB),\n ],\n});\n","export const duoRibbonWidth = ({\n isMinMd,\n duoLayout,\n}: {\n isMinMd: boolean,\n duoLayout?: boolean,\n}) => {\n if (!isMinMd || duoLayout == null) {\n return {};\n }\n\n const flexSize = (isMinMd && duoLayout) ? 50 : 100;\n return {\n flex: `${flexSize}%`,\n };\n};\n\nexport default null;","import React, { Fragment } from 'react';\nimport {\n compose,\n lifecycle,\n} from 'recompose';\nimport { withRouter } from 'react-router';\nimport { Element, scroller } from 'react-scroll';\n\nconst deepLink = compose(\n withRouter,\n lifecycle({\n componentDidMount: function() {\n //Adding some ts-ignores here so it doesn't throw not recognizing\n //this.props\n\n //@ts-ignore\n if (this.props.location.hash === `#${this.props.name}`) {\n const scrollWhenReady = () => {\n // we can't scroll to eagerly or we'll end up in the wrong place\n //@ts-ignore\n if (this.props.loading || !this.props.animationComplete) {\n return setTimeout(scrollWhenReady, 100);\n }\n //@ts-ignore\n scroller.scrollTo(this.props.name, {\n duration: 500,\n delay: 100,\n smooth: true,\n });\n };\n setTimeout(scrollWhenReady, 100);\n }\n },\n }),\n (WrappedComponent: any) => {\n return (props: any) => (\n \n \n \n \n );\n },\n);\n\nexport default deepLink;\n","import React, { useRef, useLayoutEffect, CSSProperties, ReactNode, Ref } from 'react';\nimport { withProps } from '@team-griffin/rehook';\nimport pureEnhance from '@ux/pure-enhance';\nimport { withBreakpointsHook, BreakpointProps } from '@ux/responsive';\nimport findResponsiveItem from 'presentation/utils/findResponsiveItem';\nimport getBreakpoints from 'presentation/utils/getBreakpoints';\nimport ribbonPadding from 'presentation/utils/ribbonPadding';\nimport { duoRibbonWidth } from 'presentation/utils/ribbonWidth';\nimport { percentage, modifier } from '@ux/style-utils';\nimport deepLink from 'presentation/hocs/deepLink';\nimport { getBackgroundColor } from 'presentation/utils/colorway';\nimport { useStyles } from '@team-griffin/stylr';\nimport { Colorway } from 'domain/constants/colorway';\nimport { Fit, Flush, RibbonProps } from 'domain/constants/ribbons';\nimport * as r from 'ramda';\n\nexport {\n Flush,\n};\n\ninterface OuterProps extends RibbonProps {\n children?: ReactNode,\n}\ninterface WithHandlerProps extends OuterProps {\n setAnimationComplete: Function,\n setRibbonHeight: Function,\n setHeight: Function,\n onAnimationEnd: (props: {\n newHeight: number;\n }) => void,\n}\n\ninterface InnerProps extends WithHandlerProps, BreakpointProps {\n rendered: boolean,\n targetRef: Ref,\n duration: number,\n styles: {\n root: CSSProperties,\n inner: CSSProperties,\n ribbon: CSSProperties,\n }\n}\n\nconst mapFit = (fit: Fit) => r.cond([\n [ r.equals(Fit.FULLSCREEN), r.always({\n minHeight: '100vh',\n }) ],\n [ r.equals(Fit.FILL), r.always({\n flex: 1,\n flexBasis: 'auto',\n }) ],\n [ r.equals(Fit.AUTO), r.always({\n height: 'auto',\n }) ],\n [ isFinite, r.always({\n minHeight: fit,\n }) ],\n [ r.T, r.always({\n height: 'auto',\n }) ],\n])(fit);\n\nconst stylesheet = ({\n theme,\n colorway,\n loading,\n layout,\n flush,\n ...props\n}: InnerProps) => {\n const {\n palette,\n spacing,\n } = theme;\n const {\n //@ts-ignore\n fit,\n } = r.defaultTo({}, layout);\n\n const {\n isMinSm,\n isMinMd,\n isMinLg,\n duoLayout,\n } = props;\n\n const activeFit = findResponsiveItem(\n getBreakpoints(props),\n fit,\n );\n\n const padding = ribbonPadding({\n spacing,\n isMinSm,\n isMinLg,\n layout,\n flush,\n });\n\n const duoLayoutFlex = duoRibbonWidth({\n isMinMd,\n duoLayout,\n });\n\n return useStyles({\n default: {\n root: {\n backgroundColor: getBackgroundColor(theme, colorway),\n position: 'relative',\n display: 'flex',\n flexDirection: 'column',\n width: percentage(100),\n ...mapFit(activeFit),\n ...padding,\n ...duoLayoutFlex,\n },\n inner: {\n flex: 1,\n flexBasis: 'auto',\n display: 'flex',\n height: 'auto',\n },\n ribbon: {\n display: 'flex',\n flexDirection: 'column',\n width: percentage(100),\n },\n },\n\n [modifier('colorway', Colorway.PRIMARY_GRADIENT)]: {\n root: {\n backgroundImage: `linear-gradient(to right, ${palette.primary}, ${palette.primaryGradient})`,\n },\n },\n }, [\n { loading },\n { colorway },\n { isMinSm },\n { isMinMd },\n { isMinLg },\n ]);\n};\n\nexport const PureRibbon = ({\n styles,\n targetRef,\n children,\n}: InnerProps) => (\n
\n
\n \n {children}\n
\n \n
\n);\n\nexport const enhance = pureEnhance('Ribbon', {\n hocs: [\n deepLink,\n ],\n hooks: [\n withProps(() => {\n const targetRef = useRef({});\n\n if (process.env.NODE_ENV !== 'production') {\n useLayoutEffect(() => {\n // when backstop runs on ribbons, this lets us filter out a lot of false\n // positives and a lot of race condition fails by only initialising\n // the snapshot once loading has finished + a delay to wait for fonts etc to load\n // eslint-disable-next-line\n setTimeout(() => {\n // eslint-disable-next-line\n console.log('BACKSTOP_RIBBON_READY');\n }, 3000);\n }, [ targetRef.current ]);\n }\n\n return {\n targetRef,\n };\n }),\n withBreakpointsHook,\n withProps(stylesheet),\n ],\n});\n\nexport default enhance(PureRibbon);\n","import pureEnhance from '@ux/pure-enhance';\nimport withRibbonImpression from 'presentation/hocs/withRibbonImpression';\n\nimport Ribbon from './Ribbon';\n\nconst enhance = pureEnhance('ConnectedRibbon', {\n hocs: [ withRibbonImpression ],\n});\n\nexport default enhance(Ribbon);\n","import Ribbon from './ConnectedRibbon';\nimport { Flush } from './Ribbon';\n\nexport { Flush };\n\nexport default Ribbon;\n","import React from 'react';\nimport { puree, GetInnerProps } from '@ux/pure-enhance';\nimport Shimmer from '@ux/shimmer';\nimport { ShortcodeProps } from './';\nimport { Colorway } from '@ux/theme-utils';\n\nexport interface OuterProps {\n against?: Colorway,\n code: ShortcodeProps,\n}\n\n// random % width for shimmer betwen 50% and 95%\nconst randomWidth = () => Math.floor((Math.random() * (95 - 50)) + 50);\n\nconst enhance = puree('PendingShortcode')();\n\ntype InnerProps = GetInnerProps;\n\nconst PurePendingShortcode = ({\n code,\n against,\n}: InnerProps) => (\n \n \n \n);\n\nexport default enhance(PurePendingShortcode);\n","import React from 'react';\nimport * as r from 'ramda';\nimport pureEnhance from '@ux/pure-enhance';\nimport { RecursiveShortcodeProps } from './Shortcode';\n\nexport default pureEnhance(\n 'Alt',\n)(({\n RecursiveShortcode,\n elements,\n theme,\n against,\n ...rest\n}) => (\n \n \n \n));\n","import React from 'react';\nimport { RecursiveShortcodeProps } from './Shortcode';\nimport pureEnhance from '@ux/pure-enhance';\n\nexport default pureEnhance(\n 'Bold',\n)(({ elements, RecursiveShortcode, ...rest }) => (\n \n \n \n));\n","import React from 'react';\nimport pureEnhance from '@ux/pure-enhance';\nimport { RecursiveShortcodeProps } from './Shortcode';\n\nexport default pureEnhance(\n 'Bold',\n)(({ elements, RecursiveShortcode, ...rest }) => (\n \n \n \n));","import React from 'react';\nimport { withProps } from '@team-griffin/rehook';\nimport TextButton, {\n Size as TextButtonSize,\n} from '@ux/text-button';\nimport { connect } from '@ux/fabric';\nimport { selectors as wlSelectors } from '@ux/whitelabel';\nimport pureEnhance from '@ux/pure-enhance';\nimport * as r from 'ramda';\nimport { RecursiveShortcodeProps } from './Shortcode';\n\nconst getUsfConfig = wlSelectors.getAppConfig('usf');\n\nconst mapStateToProps = r.pipe(\n getUsfConfig,\n r.pathOr([], [ 'externalRoutes' ]),\n r.objOf('externalRoutes'),\n);\n\nexport default pureEnhance(\n 'Link', [\n //@ts-ignore (apparently incompatible states)\n withProps(connect(mapStateToProps)),\n ])(({\n RecursiveShortcode,\n elements,\n contentType,\n attributes,\n theme,\n against,\n externalRoutes,\n ...rest\n}) => (\n \n \n \n));\n","import React, { Fragment } from 'react';\nimport { isFalse } from '@team-griffin/capra';\nimport * as r from 'ramda';\nimport pureEnhance from '@ux/pure-enhance';\n\nconst escapeShortCodes = r.pipe(\n r.replace('[!', '['),\n r.replace('!/]', '/]'),\n r.replace('[/!', '[/'),\n);\n\nconst nl2br = (string: string) => string.split('\\n')\n .map(r.identity)\n //@ts-ignore typescript cant figure typing out\n // eslint-disable-next-line react/no-array-index-key\n .reduce((prev, cur, i) => [ prev, (
), cur ]);\n\nconst formatText = (text: string, newline: boolean|Element) => r.pipe(\n escapeShortCodes,\n // unless newline is false, run through nl2br\n r.unless(\n r.always(isFalse(newline)),\n nl2br,\n ),\n)(text);\n\ninterface Props {\n text: string,\n nl2br: Element,\n}\nexport default pureEnhance(\n 'Text',\n)(({ text, nl2br }) => (\n \n {formatText(text, nl2br)}\n \n));\n","import React, { lazy, Suspense } from 'react';\nimport { withProps } from '@team-griffin/rehook';\nimport TextButton, { Size as TextButtonSize } from '@ux/text-button';\nimport { withBreakpointsHook } from '@ux/responsive';\nimport { gu2px } from '@ux/theme-utils';\nimport pureEnhance from '@ux/pure-enhance';\nimport { RecursiveShortcodeProps } from './Shortcode';\n\n/*\n React-Tooltip is a heavy dependency therefore we asynchronously load it in\n and gracefully decorate the functionality in once it has loaded\n*/\nconst ReactTooltip = lazy(() => import(\n /* webpackChunkName: \"react-tooltip-lite\" */\n 'react-tooltip-lite'\n));\n\nexport default pureEnhance(\n 'TooltipShortcode', [\n withBreakpointsHook,\n withProps(({\n theme,\n isMinLg,\n }: RecursiveShortcodeProps) => {\n return {\n eventToggle: isMinLg ? void 0 : 'onClick',\n padding: `${gu2px(2, theme.spacing)}px`, // requires String; gross\n };\n }),\n ],\n)(({\n RecursiveShortcode,\n theme,\n against,\n padding,\n eventToggle,\n attributes,\n elements,\n}) => {\n const CallToAction = (\n \n {attributes.label}\n \n );\n\n return (\n \n {/*@ts-ignore children doesnt exist */}\n \n \n \n )}\n >\n {CallToAction}\n \n \n );\n});\n","import React, { Fragment, Suspense, lazy, ReactNode } from 'react';\nimport pureEnhance from '@ux/pure-enhance';\nimport PendingShortcode from './PendingShortcode';\nimport { getAgainst } from 'presentation/utils/colorway';\nimport { nuller } from '@team-griffin/capra';\nimport { Theme } from '@ux/theme-utils';\nimport { Layout } from 'domain/constants/layout';\nimport { Styles } from './stylesheets';\nimport { BreakpointProps } from '@ux/responsive';\nimport { ShortcodeProps } from '.';\nimport * as r from 'ramda';\nimport { Against } from '@ux/button';\n\n/*\n These shortcodes should not be lazy loaded in as they are already in the\n main bundle and it causes a unnecessary shimmer which makes the page feel\n less responsive\n*/\nimport Alt from './Alt';\nimport Bold from './Bold';\nimport Italic from './Italic';\nimport Link from './Link';\nimport Text from './Text';\nimport Tooltip from './Tooltip';\n\nconst Glyph = lazy(() => import(\n /* webpackChunkName: \"shortcode-glyph\" */\n './Glyph'\n));\n\nconst Sup = lazy(() => import(\n /* webpackChunkName: \"shortcode-sup\" */\n './Sup'\n));\n\nconst List = lazy(() => import(\n /* webpackChunkName: \"shortcode-list\" */\n './List'\n));\n\nconst OrderedList = lazy(() => import(\n /* webpackChunkName: \"shortcode-ordered-list\" */\n './OrderedList'\n));\n\nconst ListItem = lazy(() => import(\n /* webpackChunkName: \"shortcode-list-item\" */\n './ListItem'\n));\n\nconst TickListItem = lazy(() => import(\n /* webpackChunkName: \"shortcode-tick-list-item\" */\n './TickListItem'\n));\n\nconst ProductPrice = lazy(() => import(\n /* webpackChunkName: \"shortcode-product-price\" */\n './ProductPrice'\n));\n\nconst PhoneNumber = lazy(() => import(\n /* webpackChunkName: \"shortcode-phone-number\" */\n './PhoneNumber'\n));\n\ndeclare const i: number;\ndeclare const element: ShortcodeProps;\n\nexport interface RecursiveShortcodeProps extends BreakpointProps{\n elements: ShortcodeProps[],\n layout?: Layout,\n RecursiveShortcode: React.LazyExoticComponent,\n theme?: Theme,\n against?: Against,\n styles?: Styles,\n attributes?: {\n use?: string,\n number?: number,\n analyticskey?: string,\n goto?: string,\n label?: ReactNode,\n prices?: string,\n inctax?: string,\n }\n nl2br?: boolean,\n rest: {\n [key: string]: any,\n }\n [key: string]: any,\n}\nconst RecursiveShortcode = ({ elements, ...rest }: RecursiveShortcodeProps) => (\n \n \n \n \n \n);\n\nexport interface ShortcodeOuterProps {\n theme?: Theme,\n against?: Against,\n RecursiveShortcode: React.LazyExoticComponent,\n code: RecursiveShortcodeProps,\n}\n\nfunction genericShortcodeHandler(\n shortcodeName: string,\n Component: React.LazyExoticComponent | React.ComponentType,\n) {\n return [\n r.both(\n r.propEq('type', 'element'),\n r.propEq('name', shortcodeName),\n ),\n (props: ShortcodeOuterProps) => (\n \n ),\n ];\n}\n\nconst Shortcode = ({ code, ...rest }: ShortcodeOuterProps) => {\n const props = r.pipe(\n r.ifElse(\n () => r.is(String, code),\n r.assoc('code', code),\n r.mergeDeepLeft(code),\n ),\n r.over(\n r.lensProp('against'),\n (colorway) => getAgainst(colorway),\n ),\n r.assoc('RecursiveShortcode', RecursiveShortcode),\n r.over(\n r.lensProp('attributes'),\n r.defaultTo({}),\n ),\n )(rest);\n\n // @ts-ignore\n const Element = r.cond([\n [\n r.isNil,\n nuller,\n ],\n [\n r.propIs(String, 'code'),\n () => (\n //@ts-ignore\n \n ),\n ],\n [\n r.propEq('type', 'text'),\n () => (\n \n ),\n ],\n genericShortcodeHandler('i', Italic),\n genericShortcodeHandler('b', Bold),\n genericShortcodeHandler('alt', Alt),\n genericShortcodeHandler('sup', Sup),\n genericShortcodeHandler('glyph', Glyph),\n genericShortcodeHandler('tel', PhoneNumber),\n genericShortcodeHandler('link', Link),\n genericShortcodeHandler('productprice', ProductPrice),\n genericShortcodeHandler('tooltip', Tooltip),\n [\n r.both(\n r.propEq('type', 'element'),\n r.propEq('name', 'list'),\n ),\n () => r.ifElse(\n r.propEq('style', 'number'),\n () => (\n \n ),\n () => (\n \n ),\n )(props.attributes),\n ],\n [\n r.both(\n r.propEq('type', 'element'),\n r.propEq('name', 'li'),\n ),\n () => r.ifElse(\n r.propEq('style', 'glyph'),\n () => (\n \n ),\n () => (\n \n ),\n )(props.attributes),\n ],\n //@ts-ignore\n genericShortcodeHandler('root', RecursiveShortcode),\n [\n r.T,\n nuller,\n ],\n ]);\n\n return (\n \n );\n};\n\nconst ShortcodeWrapper = (props: ShortcodeOuterProps) => (\n \n )}\n >\n \n \n);\n\nconst enhance = pureEnhance('Shortcode');\n\nexport default enhance(ShortcodeWrapper);\n","import Shortcode, { RecursiveShortcodeProps } from './Shortcode';\n\n//TODO: help.. please.\nexport type ShortcodeProps = RecursiveShortcodeProps;\n\n\nexport default Shortcode;\n","import React from 'react';\nimport * as r from 'ramda';\n\nexport default (BaseComponent: any) => r.ifElse(\n r.prop('visible'),\n (props) => ,\n (props) => (\n
\n \n
\n ),\n);\n","export enum Alignment {\n STARTING = 'STARTING',\n CENTER = 'CENTER',\n}\n\nexport default null;\n","import * as rA from 'ramda-adjunct';\nimport * as r from 'ramda';\nimport {\n curry2,\n isNotNilOrEmpty,\n} from '@team-griffin/capra';\n\nconst {\n isNotEmpty,\n isNotNil,\n mapIndexed,\n} = rA;\n\nexport {\n curry2,\n isNotNilOrEmpty,\n isNotEmpty,\n isNotNil,\n mapIndexed,\n};\n\nexport const headOr = r.curryN(2, (fallback: any, arr: any[]) => r.pipe(\n r.defaultTo([]),\n r.head,\n r.defaultTo(fallback),\n)(arr));\n\nexport const getFirstKey = r.pipe(\n r.keys,\n r.head,\n) as (data: any)=>string;\n\nexport const getFirstValue = r.pipe(\n //@ts-ignore\n r.values,\n r.head,\n);\n\nexport const mapKeys = r.curryN(2, (fn: any, obj: any) => r.pipe(\n r.defaultTo({}),\n r.mapObjIndexed(\n r.converge(\n r.unapply(r.identity),\n [\n r.pipe(\n r.nthArg(1),\n fn,\n ),\n r.identity,\n ]\n ),\n ),\n r.values,\n r.fromPairs,\n)(obj));\n","import React from 'react';\nimport {\n defaultProps,\n} from '@team-griffin/rehook';\nimport Button, {\n Against,\n Status,\n Size,\n} from '@ux/reactive-button';\nimport callToAction from 'presentation/hocs/callToAction';\nimport * as r from 'ramda';\nimport pureEnhance from '@ux/pure-enhance';\nimport { Theme } from '@ux/theme-utils';\nimport { CTA } from 'core/ribbons/cta';\nimport { Product } from '@ux/product';\n\ninterface OuterProps extends CTA {\n product?: Product,\n theme: Theme,\n against?: Against,\n block?: boolean,\n size?: Size,\n ribbonId: string,\n index: number,\n glyph?: string,\n}\ninterface DefaultProps extends OuterProps {\n against: Against,\n}\ninterface InnerProps extends DefaultProps {\n addingStatus: Status,\n handleClick: (props: any) => () => void,\n}\n\nconst PureCallToAction = ({\n kind,\n against,\n label,\n addingStatus,\n handleClick,\n ...props\n}: InnerProps) => {\n const status = r.cond([\n [ r.equals('REQUESTED'), r.always(Status.PENDING) ],\n [ r.equals('SUCCESS'), r.always(Status.SUCCESS) ],\n [ r.equals('FAILED'), r.always(Status.FAILURE) ],\n [ r.T, r.always(Status.DEFAULT) ],\n ])(addingStatus);\n\n const goto = r.pathOr(null, [ 'behavior', 'goto' ], props);\n\n const buttonProps = r.omit([\n 'colorway',\n 'actions',\n 'buttonId',\n 'ribbonId',\n 'index',\n 'behavior',\n 'handlePlayVideoClick',\n 'handleSetVisibilityClick',\n 'handleConfigureClick',\n 'handleApplyVoucherClick',\n 'handleAddToBasketClick',\n 'handleNavigateClick',\n 'handleAnalytics',\n 'ribbonList',\n ], props);\n\n return (\n \n {label}\n \n );\n};\n\nexport const enhance = pureEnhance(\n 'CallToAction',\n {\n hocs: [\n callToAction,\n ],\n hooks: [\n defaultProps({\n against: Against.LIGHT,\n }),\n ],\n },\n);\n\nexport default enhance(PureCallToAction);\n","export enum Behavior {\n NAVIGATION = 'navigation',\n ADD_TO_BASKET = 'addToBasket',\n APPLY_VOUCHER = 'APPLY_VOUCHER',\n CONFIGURE = 'configure',\n SET_VISIBILITY = 'changeActiveVisibilitySet',\n PLAY_VIDEO = 'playVideo',\n}\n\nexport default null;\n","import {\n compose,\n defaultProps,\n withProps,\n withHandlers,\n} from 'recompose';\nimport { connect } from 'react-redux';\nimport { bindActionCreators } from 'redux';\nimport { useWindow } from '@ux/hooks';\nimport { addToBasket, applyVoucher } from 'application/signals/basket';\nimport { setVisibility } from 'application/signals/ribbons';\nimport {\n productClicked,\n promotionClicked,\n productAddToBasket,\n} from 'application/signals/cta';\nimport { getAddingStatus } from 'domain/selectors/basket';\nimport { getExternalRoutes } from 'domain/selectors/common';\nimport { createRibbonName } from 'domain/transformers/ribbons';\nimport { getRibbon } from 'domain/selectors/ribbons';\nimport { Behavior } from 'domain/constants/callToAction';\nimport { signals } from '@team-griffin/redux-modal-router';\nimport { selectors } from '@ux/product';\n\nconst formatPricingTier = (tier) => {\n if (tier == null) {\n return;\n }\n if (tier.paymentInterval == null || tier.term == null) {\n return;\n }\n return `${tier.paymentInterval}:${tier.term}`;\n};\n\nconst mapStateToProps = (state, props) => {\n const buttonId = `${props.ribbonId}-cta-${props.index}`;\n const externalRoutes = getExternalRoutes(state);\n const ribbon = getRibbon(props.ribbonId)(state);\n const ribbonType = ribbon?.type;\n const ribbonName = ribbon?.props?.name;\n const product = props?.product;\n\n const ribbonList = createRibbonName(ribbonType, ribbonName);\n return {\n externalRoutes,\n addingStatus: getAddingStatus(buttonId)(state),\n buttonId,\n ribbonList,\n product,\n };\n};\n\nconst mapDispatchToProps = (dispatch) => bindActionCreators({\n addToBasket,\n applyVoucher,\n setVisibility,\n openReduxModal: signals.open,\n productClicked,\n promotionClicked,\n productAddToBasket,\n}, dispatch);\n\nconst mergeProps = (stateProps, dispatchProps, ownProps) => {\n return {\n ...stateProps,\n ...ownProps,\n actions: {\n ...dispatchProps,\n ...ownProps.actions,\n },\n };\n};\n\nexport default compose(\n defaultProps({\n behavior: {},\n }),\n connect(\n mapStateToProps,\n mapDispatchToProps,\n mergeProps,\n ),\n withProps(() => ({\n window: useWindow(),\n })),\n withHandlers({\n handleAnalytics: (props) => () => {\n const ctaType = props?.behavior?.type;\n const type = props?.behavior?.analytics?.type;\n const list = props.ribbonList;\n const product = props.product;\n\n if (type === 'PRODUCT') {\n const productId = props?.behavior?.analytics?.productId;\n props.actions.productClicked({\n productId,\n list,\n });\n } else if (type === 'PROMOTION') {\n const promotion = props?.behavior?.analytics?.promotion;\n props.actions.promotionClicked({ promotion });\n } else if (ctaType === 'addToBasket') {\n props.actions.productAddToBasket({\n list,\n product,\n });\n }\n },\n }),\n withHandlers({\n handleAddToBasketClick: (props) => () => {\n const {\n buttonId,\n product,\n actions: {\n addToBasket,\n },\n behavior: {\n productId,\n postAction,\n pricingTier,\n },\n handleAnalytics,\n } = props;\n const productData = {\n skuId: product ? product.defaultSkuId : null,\n name: product ? product.name : null,\n price: product ? selectors.getPrice({ product, includeTax: false }) : null,\n category: product ? product.categoryName : null,\n };\n addToBasket(\n buttonId,\n productId,\n postAction,\n formatPricingTier(pricingTier),\n 1, //quantity\n productData,\n );\n\n handleAnalytics();\n },\n handleNavigateClick: ({ handleAnalytics }) => () => {\n handleAnalytics();\n },\n handleApplyVoucherClick: ({\n buttonId,\n actions: {\n applyVoucher,\n },\n behavior: {\n voucherCode,\n postAction,\n },\n }) => () => {\n applyVoucher(buttonId, voucherCode, postAction);\n },\n handleConfigureClick: ({\n window,\n behavior: {\n productId,\n pricingTier,\n },\n }) => {\n return () => {\n const tier = formatPricingTier(pricingTier);\n const query = new URLSearchParams();\n query.append('productId', productId);\n if (tier) {\n query.append('pricingTier', tier);\n }\n const q = query.toString();\n window.location.href = `/configure?${q}`;\n };\n },\n handleSetVisibilityClick: ({\n actions: {\n setVisibility,\n },\n behavior,\n }) => () => {\n setVisibility(behavior.visibilitySet);\n },\n handlePlayVideoClick: ({\n actions: {\n openReduxModal,\n },\n behavior: {\n videoId,\n provider,\n },\n }) => () => {\n openReduxModal({\n route: 'PLAY_VIDEO',\n params: {\n videoId,\n provider,\n },\n });\n },\n }),\n withProps((ownerProps) => ({\n handleClick: (() => {\n switch (ownerProps.behavior?.type) {\n case Behavior.ADD_TO_BASKET: \n return ownerProps.handleAddToBasketClick;\n case Behavior.APPLY_VOUCHER:\n return ownerProps.handleApplyVoucherClick;\n case Behavior.CONFIGURE:\n return ownerProps.handleConfigureClick;\n case Behavior.PLAY_VIDEO:\n return ownerProps.handlePlayVideoClick;\n case Behavior.SET_VISIBILITY:\n return ownerProps.handleSetVisibilityClick;\n case Behavior.NAVIGATION:\n return ownerProps.handleNavigateClick;\n default:\n return () => null;\n }\n })(),\n // add an analytics prefixed `id` to the cta if required\n id: (() => {\n const behavior = ownerProps.behavior;\n const id = ownerProps.id;\n if(behavior?.analytics?.linkAttribution) {\n return `usf-cta-${behavior.analytics.linkAttribution}`\n } else {\n return id;\n }\n })(),\n })),\n);"],"sourceRoot":""}