{"version":3,"sources":["webpack:///../node_modules/@uds/badge/dist/es/index.js","webpack:///../node_modules/@uds/prices/dist/es/prices.js","webpack:///./presentation/components/common/Price/Price.tsx","webpack:///src/presentation/components/common/Saving.tsx","webpack:///./presentation/components/common/ProductPrice/utils.ts","webpack:///../node_modules/reselect/es/index.js","webpack:///./presentation/components/common/ProductPrice/LegalText.tsx","webpack:///src/presentation/components/common/ProductPrice/ProductPrice.stylesheet.ts","webpack:///./presentation/components/common/ProductPrice/ProductPrice.tsx","webpack:///./presentation/components/common/ProductPrice/index.ts","webpack:///./presentation/components/common/ProductPrice/constants.ts"],"names":["Kind","colors","PRIMARY","HIGHLIGHT","WARNING","ALERT","NEUTRAL","MUTED","PureBadge$1","_ref","children","tag","kind","flush","classNames","badge","headingXxs","badgeWrapper","badgeTag","getClassNames","className","component","Prices","props","shouldUseDecimalDenomination","amount","market","currency","roundedDecimalAmount","Math","round","useDecimalDenomination","usePrices","value","style","priceMap","MONTHLY","YEARLY","Price","pricingStrategy","useMarket","intervalPrice","calculateIntervalPrice","Saving","intlNamespace","type","id","values","saving","PureSaving","root","percentage","fixed","headingType","BadgeKind","getInterval","selectors","defaultEqualityCheck","a","b","areArgumentsShallowlyEqual","equalityCheck","prev","next","length","i","getDependencies","funcs","dependencies","Array","isArray","every","dep","dependencyTypes","map","join","Error","createSelector","memoize","_len","arguments","memoizeOptions","_key","_len2","_key2","recomputations","resultFunc","pop","memoizedResultFunc","apply","undefined","concat","selector","params","push","resetRecomputations","createSelectorCreator","func","lastArgs","lastResult","enhance","pureEnhance","withProps","selectorCreator","objectKeys","Object","keys","key","_len3","_key3","reduce","composition","index","createStructuredSelector","interval","r","term","LegalText","setupFee","pricing","useShouldIncludeTax","prodSelectors","withSavingValue","isObject","isNilOrEmpty","ProductPrice","colorway","Colorways","LIGHT","showLegalCaveat","showFee","legalText","viewMode","product","priceLayout","includeTax","price","upFront","discountPerc","hasUpFrontCost","hasDiscount","useProductPrice","displayInterval","paymentIntervalDisplay","pricingTier","paymentInterval","hasSaving","hasBadge","withBadge","renewalPeriod","givenInterval","productInterval","getDisplayPeriod","showSetupFee","viewModes","includes","excludeViewModes","shouldShowSetupFee","proposition","hasProposition","badgeAndNoProposition","Layout","colorPrice","Colorway","intro","cx","fee","legalCaveat","priceWrapper","Boolean","parseInt","String","Shortcode","against","code","renewal","period","bespoke","displayName"],"mappings":"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","file":"pex-static/34/7.4cebd5f889bebab1150b.chunk.js","sourcesContent":["import { classNames, Heading06 } from '@uds/typography';\nimport { cx } from 'linaria';\nimport './badge.stylesheet_1h9r18g.css';\nimport { jsxs, jsx } from 'react/jsx-runtime';\n\nlet Kind;\n(function (Kind) {\n Kind[\"PRIMARY\"] = \"PRIMARY\";\n Kind[\"HIGHLIGHT\"] = \"HIGHLIGHT\";\n Kind[\"WARNING\"] = \"WARNING\";\n Kind[\"ALERT\"] = \"ALERT\";\n Kind[\"NEUTRAL\"] = \"NEUTRAL\";\n Kind[\"MUTED\"] = \"MUTED\";\n})(Kind || (Kind = {}));\n\nconst badgeWrapper = \"b8lv12d\";\nconst flushed = \"f1jgljld\";\nconst badge = \"b1kjbh2x\";\nconst badgeTag = \"b1im6t4a\";\nconst colors = {\n PRIMARY: \"pi7709t\",\n HIGHLIGHT: \"h13te26t\",\n WARNING: \"wfo8huu\",\n ALERT: \"a1ts93wr\",\n NEUTRAL: \"nh9nguv\",\n MUTED: \"myd1t1i\"\n};\nconst getClassNames = _ref => {\n let {\n kind,\n flush\n } = _ref;\n return {\n badge: cx(badge, classNames.headingXxs, kind != null && colors[kind]),\n badgeWrapper: cx(badgeWrapper, flush && flushed),\n badgeTag\n };\n};\n\nconst PureBadge = _ref => {\n let {\n children,\n tag,\n kind = Kind.PRIMARY,\n flush = false\n } = _ref;\n const classNames = getClassNames({\n kind,\n flush\n });\n return /*#__PURE__*/jsxs(\"div\", {\n className: classNames.badgeWrapper,\n children: [/*#__PURE__*/jsx(\"div\", {\n className: classNames.badge,\n children: children\n }), tag != null && /*#__PURE__*/jsx(\"span\", {\n className: classNames.badgeTag,\n children: /*#__PURE__*/jsx(Heading06, {\n component: \"span\",\n children: tag\n })\n })]\n });\n};\nvar PureBadge$1 = PureBadge;\n\nexport { PureBadge$1 as Badge, Kind, PureBadge$1 as default };\n","import { FormattedNumber } from 'react-intl';\nimport { jsx, Fragment } from 'react/jsx-runtime';\n\nconst usePrices = _ref => {\n let {\n market,\n amount,\n currency\n } = _ref;\n const roundedDecimalAmount = Math.round(amount * 100);\n\n // When rounded amount is 100p display value should be £1.00\n const useDecimalDenomination = market === 'GB' && currency === 'GBP' && amount < 1 && roundedDecimalAmount !== 100;\n return {\n shouldUseDecimalDenomination: useDecimalDenomination,\n amount: useDecimalDenomination ? roundedDecimalAmount : amount\n };\n};\nfunction Prices(props) {\n const {\n shouldUseDecimalDenomination,\n amount\n } = usePrices(props);\n return /*#__PURE__*/jsx(Fragment, {\n children: shouldUseDecimalDenomination ? /*#__PURE__*/jsx(\"span\", {\n children: `${amount}p`\n }) : /*#__PURE__*/jsx(FormattedNumber, {\n value: amount,\n currency: props.currency,\n style: \"currency\"\n })\n });\n}\n\nexport { Prices, Prices as default };\n","import { Prices } from '@uds/prices';\nimport { useMarket } from '@ux/whitelabel';\n\nexport type PricingStrategy = 'MONTHLY' | 'YEARLY';\n\nconst priceMap: Record = {\n MONTHLY: 12,\n YEARLY: 1,\n};\n\nexport const calculateIntervalPrice = (amount: number, pricingStrategy: PricingStrategy) => {\n return amount / priceMap[pricingStrategy];\n};\n\ntype Props = {\n amount: number;\n currency: string;\n pricingStrategy?: PricingStrategy;\n};\n\nexport default function Price({ amount, currency, pricingStrategy = 'YEARLY' }: Readonly): JSX.Element {\n const market = useMarket();\n const intervalPrice = calculateIntervalPrice(amount, pricingStrategy);\n\n return ;\n}\n","import React from 'react';\nimport { FormattedNumber, FormattedMessage } from 'react-intl';\nimport Message from '@uds/message';\nimport Badge, { Kind as BadgeKind } from '@uds/badge';\nimport { cssTheme } from '@uds/theme-utils';\nimport { Heading06 } from '@uds/typography';\nimport { css } from 'linaria';\n\ninterface OuterProps {\n type: string;\n value: number;\n currency: string;\n intlNamespace?: string;\n}\n\nconst Saving = ({ type, value, currency, intlNamespace }: OuterProps) => {\n if (type === 'percentage') {\n return (\n {`${value}%`},\n }}\n />\n );\n }\n\n if (type === 'fixed') {\n return (\n ,\n }}\n />\n );\n }\n\n return null;\n};\n\nconst getClassNames = () => {\n return {\n root: css`\n margin-left: calc(-1 * ${cssTheme.gu1});\n font-family: ${cssTheme.font.display};\n `,\n percentage: css`\n font-weight: normal;\n color: ${cssTheme.palette.highlight};\n vertical-align: middle;\n display: inline;\n `,\n fixed: css`\n font-weight: normal;\n color: ${cssTheme.palette.highlight};\n vertical-align: middle;\n display: inline;\n text-decoration: line-through;\n `,\n };\n};\nexport const PureSaving = ({ type, value, currency, intlNamespace = 'usf' }: OuterProps) => {\n const classNames = getClassNames();\n // No index signature with a parameter of type 'string' was found on type '{ percentage: string; fixed: string; }'.\n const headingType = type === 'percentage' ? classNames['percentage'] : classNames['fixed'];\n return (\n \n \n \n {' '}\n \n \n \n \n );\n};\n\nPureSaving.displayName = 'Saving';\n\nexport default PureSaving;\n","import { Product, selectors } from '@uds/product';\n\nimport { PricingStrategy } from './constants';\n\nconst { getInterval } = selectors;\n\nexport const getDisplayPeriod = ({\n product,\n pricingStrategy,\n}: {\n product: Product;\n pricingStrategy: PricingStrategy;\n}) => {\n const givenInterval = pricingStrategy?.paymentIntervalDisplay;\n const productInterval = getInterval({ product });\n return givenInterval ?? productInterval;\n};\nexport default null;\n","function defaultEqualityCheck(a, b) {\n return a === b;\n}\n\nfunction areArgumentsShallowlyEqual(equalityCheck, prev, next) {\n if (prev === null || next === null || prev.length !== next.length) {\n return false;\n }\n\n // Do this in a for loop (and not a `forEach` or an `every`) so we can determine equality as fast as possible.\n var length = prev.length;\n for (var i = 0; i < length; i++) {\n if (!equalityCheck(prev[i], next[i])) {\n return false;\n }\n }\n\n return true;\n}\n\nexport function defaultMemoize(func) {\n var equalityCheck = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultEqualityCheck;\n\n var lastArgs = null;\n var lastResult = null;\n // we reference arguments instead of spreading them for performance reasons\n return function () {\n if (!areArgumentsShallowlyEqual(equalityCheck, lastArgs, arguments)) {\n // apply arguments instead of spreading for performance.\n lastResult = func.apply(null, arguments);\n }\n\n lastArgs = arguments;\n return lastResult;\n };\n}\n\nfunction getDependencies(funcs) {\n var dependencies = Array.isArray(funcs[0]) ? funcs[0] : funcs;\n\n if (!dependencies.every(function (dep) {\n return typeof dep === 'function';\n })) {\n var dependencyTypes = dependencies.map(function (dep) {\n return typeof dep;\n }).join(', ');\n throw new Error('Selector creators expect all input-selectors to be functions, ' + ('instead received the following types: [' + dependencyTypes + ']'));\n }\n\n return dependencies;\n}\n\nexport function createSelectorCreator(memoize) {\n for (var _len = arguments.length, memoizeOptions = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n memoizeOptions[_key - 1] = arguments[_key];\n }\n\n return function () {\n for (var _len2 = arguments.length, funcs = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n funcs[_key2] = arguments[_key2];\n }\n\n var recomputations = 0;\n var resultFunc = funcs.pop();\n var dependencies = getDependencies(funcs);\n\n var memoizedResultFunc = memoize.apply(undefined, [function () {\n recomputations++;\n // apply arguments instead of spreading for performance.\n return resultFunc.apply(null, arguments);\n }].concat(memoizeOptions));\n\n // If a selector is called with the exact same arguments we don't need to traverse our dependencies again.\n var selector = memoize(function () {\n var params = [];\n var length = dependencies.length;\n\n for (var i = 0; i < length; i++) {\n // apply arguments instead of spreading and mutate a local list of params for performance.\n params.push(dependencies[i].apply(null, arguments));\n }\n\n // apply arguments instead of spreading for performance.\n return memoizedResultFunc.apply(null, params);\n });\n\n selector.resultFunc = resultFunc;\n selector.dependencies = dependencies;\n selector.recomputations = function () {\n return recomputations;\n };\n selector.resetRecomputations = function () {\n return recomputations = 0;\n };\n return selector;\n };\n}\n\nexport var createSelector = createSelectorCreator(defaultMemoize);\n\nexport function createStructuredSelector(selectors) {\n var selectorCreator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : createSelector;\n\n if (typeof selectors !== 'object') {\n throw new Error('createStructuredSelector expects first argument to be an object ' + ('where each property is a selector, instead received a ' + typeof selectors));\n }\n var objectKeys = Object.keys(selectors);\n return selectorCreator(objectKeys.map(function (key) {\n return selectors[key];\n }), function () {\n for (var _len3 = arguments.length, values = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n values[_key3] = arguments[_key3];\n }\n\n return values.reduce(function (composition, value, index) {\n composition[objectKeys[index]] = value;\n return composition;\n }, {});\n });\n}","import { withProps } from '@team-griffin/rehook';\nimport { createStructuredSelector } from 'reselect';\nimport * as r from 'ramda';\nimport { LegalText } from '@uds/product';\nimport pureEnhance from '@ux/pure-enhance';\n\nconst enhance = pureEnhance('LegalText', [\n withProps(\n createStructuredSelector({\n interval: r.path(['pricingStrategy', 'pricingTier', 'paymentInterval']),\n term: r.path(['pricingStrategy', 'pricingTier', 'term']),\n }),\n ),\n]);\n\nexport default enhance(LegalText);\n","import { css, cx } from 'linaria';\nimport { classNames } from '@uds/typography';\nimport { Colorway, cssTheme } from '@uds/theme-utils';\nimport { Layout } from 'components/common/ProductPrice/constants';\nimport { contrastColor } from 'presentation/utils/colorway';\n\nconst intro = css`\n margin-top: ${cssTheme.gu2};\n`;\n\nconst price = css`\n margin-right: ${cssTheme.gu1};\n display: inline;\n`;\n\nconst renewal = css`\n display: inline;\n}`;\n\nconst setupFee = {\n default: css`\n margin-top: ${cssTheme.gu1};\n margin-bottom: ${cssTheme.gu2};\n `,\n compact: css`\n text-align: right;\n margin-top: 0;\n `,\n};\n\nconst root = css`\n margin-top: ${cssTheme.gu3};\n background: transparent; //parents set this\n`;\n\nconst badge = css`\n margin-left: calc(-1 * ${cssTheme.gu1});\n`;\n\nexport const getClassNames = ({ priceLayout }: { priceLayout?: Layout }) => {\n return {\n root,\n badge,\n fee: contrastColor,\n intro: cx(intro, classNames.content),\n price: cx(price, contrastColor),\n renewal,\n setupFee: cx(setupFee.default, priceLayout === Layout.COMPACT && setupFee.compact),\n };\n};\nconst legalCaveat = css`\n margin-top: ${cssTheme.gu1};\n opacity: 0.9;\n`;\n\nconst priceWrapper = css`\n display: flex;\n width: 100%;\n align-items: center;\n justify-content: space-between;\n`;\n\nconst pricing = {\n compact: css`\n flex: 1;\n flex-basis: auto;\n text-align: right;\n `,\n noProposition: css`\n margin-top: ${cssTheme.gu2};\n `,\n};\n\nconst specialColor = css`\n color: ${cssTheme.palette.primary};\n`;\n\nexport default ({\n priceLayout,\n hasProposition,\n colorway,\n hasBadge,\n}: {\n priceLayout?: Layout;\n hasProposition: boolean;\n colorway?: Colorway;\n hasBadge: boolean;\n}) => {\n const badgeAndNoProposition = !hasProposition && priceLayout !== Layout.COMPACT && hasBadge;\n const colorPrice = [Colorway.NEUTRAL, Colorway.LIGHT].includes(colorway as Colorway);\n return {\n root,\n intro: cx(intro, classNames.content),\n fee: cx(colorPrice && specialColor),\n badge,\n price: cx(price, colorPrice && specialColor),\n legalCaveat: cx(legalCaveat, classNames.smallprint),\n renewal,\n priceWrapper: cx(priceLayout === Layout.COMPACT && priceWrapper),\n setupFee: cx(setupFee.default, priceLayout === Layout.COMPACT && setupFee.compact),\n pricing: cx(priceLayout === Layout.COMPACT && pricing.compact, badgeAndNoProposition && pricing.noProposition),\n };\n};\n","import React from 'react';\nimport { FormattedMessage } from 'react-intl';\nimport Saving from 'components/common/Saving';\nimport { Heading04, Heading06 } from '@uds/typography';\nimport Shortcode from 'components/Shortcode';\nimport Badge, { Kind as BadgeKind } from '@uds/badge';\nimport Prices from 'presentation/components/common/Price';\nimport { RenewalPeriod, Product, useProductPrice, selectors as prodSelectors } from '@uds/product';\nimport { Layout, PricingStrategy } from 'components/common/ProductPrice/constants';\nimport { isNilOrEmpty, isObject } from 'presentation/utils/generalUtils';\nimport Colorway, { Colorways } from '@uds/colorway';\n\nimport { getDisplayPeriod } from './utils';\nimport LegalText from './LegalText';\nimport getClassNames from './ProductPrice.stylesheet';\n\nconst { useShouldIncludeTax } = prodSelectors;\n\ntype SavingType = {\n type: string;\n value: number;\n currency: string;\n};\n\nconst withSavingValue = ({ saving }: { saving?: SavingType }) => {\n return isObject(saving) && !isNilOrEmpty(saving.value);\n};\n\nconst withBadge = ({ saving, hasDiscount, badge }: { saving?: SavingType; hasDiscount?: boolean; badge?: string }) => {\n return withSavingValue({ saving }) || hasDiscount === true || !isNilOrEmpty(badge);\n};\n\n// returns true if we are in a viewMode not in given array\n// 0 = retail price with setup cost underneath (default)\n// 1 = no setup cost, price incs. upfront cost\n// 2 = no setup cost, just show retail\nconst excludeViewModes = (viewModes: Array, pricingStrategy: PricingStrategy) => {\n const viewMode = pricingStrategy.viewMode;\n const isViewModeIncluded = (viewModes ?? []).includes(viewMode);\n return !isViewModeIncluded;\n};\n\nconst shouldShowSetupFee = ({\n hasUpFrontCost,\n showFee,\n pricingStrategy,\n}: {\n hasUpFrontCost?: boolean;\n showFee?: boolean;\n pricingStrategy: PricingStrategy;\n}) => {\n return hasUpFrontCost && showFee && excludeViewModes([1, 2], pricingStrategy);\n};\n// eslint-disable-next-line no-underscore-dangle\nexport const __test__ = {\n shouldShowSetupFee,\n};\n\ninterface OuterProps {\n colorway?: Colorways;\n showFee?: boolean;\n showLegalCaveat?: boolean;\n priceLayout?: Layout;\n viewMode?: number;\n product: Product;\n pricingStrategy: PricingStrategy;\n badge?: string;\n legalText?: string;\n saving?: SavingType;\n}\n\nconst ProductPrice = ({\n colorway = Colorways.LIGHT,\n saving,\n badge,\n showLegalCaveat = true,\n showFee = true,\n legalText,\n viewMode,\n product,\n pricingStrategy,\n priceLayout,\n}: OuterProps) => {\n const includeTax = useShouldIncludeTax();\n const { currency, price, upFront, discountPerc, hasUpFrontCost, hasDiscount } = useProductPrice({\n product,\n viewMode,\n displayInterval: pricingStrategy?.paymentIntervalDisplay,\n term: pricingStrategy?.pricingTier?.term,\n interval: pricingStrategy?.pricingTier?.paymentInterval,\n includeTax,\n });\n const hasSaving = withSavingValue({ saving });\n const hasBadge = withBadge({\n saving,\n hasDiscount,\n badge,\n });\n const renewalPeriod = getDisplayPeriod({ product, pricingStrategy });\n const showSetupFee = shouldShowSetupFee({\n pricingStrategy,\n hasUpFrontCost,\n showFee,\n });\n\n const proposition = pricingStrategy?.proposition;\n const hasProposition = !isNilOrEmpty(proposition);\n\n const classNames = getClassNames({\n colorway,\n priceLayout,\n hasProposition,\n hasBadge,\n });\n return (\n \n
\n \n \n {/* @ts-ignore: error after upgrading to ux-configs */}\n \n \n \n \n {badge}\n \n \n {/* @ts-ignore: error after upgrading to ux-configs */}\n \n \n \n \n \n \n \n \n
\n {hasProposition && (\n \n \n \n )}\n \n \n \n \n ),\n renewal: (\n \n \n \n ),\n }}\n />\n \n
\n
\n {showSetupFee && (\n
\n \n \n \n ),\n }}\n />\n
\n )}\n {showLegalCaveat && (\n
\n \n
\n )}\n
\n );\n};\n\nProductPrice.displayName = 'ProductPrice';\n\nexport default ProductPrice;\n","import ProductPrice from './ProductPrice';\nimport LegalText from './LegalText';\n\nexport { LegalText };\n\nexport default ProductPrice;\n","export enum Layout {\n COMPACT = 'COMPACT',\n DEFAULT = 'DEFAULT',\n}\n\nexport type PricingStrategy = {\n proposition?: string;\n paymentIntervalDisplay: number;\n viewMode: number;\n pricingTier: {\n paymentInterval: number;\n term: number;\n };\n};\n\nexport default null;\n"],"sourceRoot":""}