{"version":3,"sources":["webpack:///./presentation/components/ribbons/salesboard/ItemHeader.tsx","webpack:///./presentation/components/ribbons/salesboard/ItemHeader.stylesheet.ts","webpack:///./presentation/components/ribbons/salesboard/ItemDetails.tsx","webpack:///./presentation/components/ribbons/salesboard/ItemDetails.stylesheet.ts","webpack:///./presentation/components/ribbons/salesboard/ItemPrice.tsx","webpack:///./presentation/components/ribbons/salesboard/ItemPrice.stylesheet.ts","webpack:///./presentation/components/ribbons/salesboard/ItemFeature.tsx","webpack:///./presentation/components/ribbons/salesboard/ItemFeature.stylesheet.ts","webpack:///./presentation/components/ribbons/salesboard/ItemFeatures.tsx","webpack:///./presentation/components/ribbons/salesboard/ItemFeatures.stylesheet.ts","webpack:///./presentation/components/ribbons/salesboard/Item.tsx","webpack:///./presentation/components/ribbons/salesboard/Item.stylesheet.ts","webpack:///./presentation/components/ribbons/salesboard/PaginationItem.tsx","webpack:///./presentation/components/ribbons/salesboard/Pagination.tsx","webpack:///./presentation/components/ribbons/salesboard/Navigation.tsx","webpack:///./presentation/utils/debounce.js","webpack:///./presentation/components/ribbons/salesboard/constants.ts","webpack:///../node_modules/ramda/es/min.js","webpack:///./presentation/components/ribbons/salesboard/Salesboard.tsx","webpack:///./presentation/utils/isTouchDevice.js","webpack:///./presentation/components/ribbons/salesboard/Salesboard.stylesheet.ts","webpack:///./presentation/components/ribbons/salesboard/index.ts","webpack:///./presentation/components/common/Saving.js","webpack:///./presentation/components/common/ProductPrice/LegalText.tsx","webpack:///./presentation/components/common/ProductPrice/utils.ts","webpack:///./presentation/components/common/ProductPrice/ProductPrice.tsx","webpack:///./presentation/components/common/ProductPrice/ProductPrice.stylesheet.ts","webpack:///./presentation/components/common/ProductPrice/ConnectedProductPrice.ts","webpack:///./presentation/components/common/ProductPrice/index.ts","webpack:///./presentation/components/common/ProductPrice/constants.ts","webpack:///../node_modules/ramda/es/inc.js","webpack:///../node_modules/react-animate-height/lib/AnimateHeight.js","webpack:///../node_modules/ramda/es/dec.js"],"names":["enhance","pureEnhance","hocs","withLanguage","hooks","withBreakpointsHook","withProps","ownerProps","hasBanner","r","isNotNilOrEmpty","imageUrl","illustration","bannerUrl","createImageUrl","theme","isMinLg","colorway","spacing","palette","typography","useStyles","default","root","position","width","gu2px","endorse","backgroundColor","primary","color","primaryContrast","display","alignItems","height","maxHeight","cssSides","Side","Y","endorseText","headingXxs","X","textOverflow","overflow","whiteSpace","left","right","lineHeight","bannerAspect","justifyContent","percentage","padding","paddingTop","grey12","bannerImage","minHeight","minWidth","top","transform","modifier","Colorway","PRIMARY","grey02","PRIMARY_GRADIENT","HIGHLIGHT","styles","isEndorsed","currentLanguage","style","loading","alt","createImageAlt","src","urlLanguageParse","title","text","grey04","hBaseline","depth","defaultProps","ctas","ctaProps","kind","Kind","body","flexDirection","cta","marginTop","product","pricingStrategy","isMinSm","id","index","ProductPrice","showLegalCaveat","hasLength","CallToAction","ribbonId","block","glyph","data-selector","label","first","last","A","longhand","opacify","grey06","borderTopWidth","paddingBottom","feature","Shortcode","code","against","isZero","isLastVisibleItem","f","v","i","arr","length","isLast","features","maxFeatureLimit","visibleFeatureLimit","visibleFeatures","moreFeatures","openFeatures","ifElseBool","toggleHeight","toggleIcon","hasMoreFeatures","list","listStyle","toggleBox","boxShadow","marginBottom","toggle","borderWidth","cursor","textAlign","outline","borderTopColor","toggleOpen","onShowMoreClick","ItemFeature","key","duration","side","type","onClick","icon","size","getTagline","getName","prodSelectors","borderless","LIGHT","NEUTRAL","name","dispatch","tagline","hasFeaturedProduct","flex","flexBasis","legalText","smallprint","getBodyColor","opacity","borderBottomColor","productId","showMoreFeatures","descRef","data-value","ref","visible","visibleItems","activeIndex","active","curvature","transition","borderRadius","Curvature","WEAK","STRONG","unsafeColorway","grey09","secondary","DARK","aria-hidden","withHandlers","onPaginationClick","itemCount","PaginationItem","role","onButtonClick","onNavigationClick","direction","button","func","wait","immediate","timeout","args","context","timestamp","result","later","Date","now","setTimeout","apply","debounced","this","arguments","callNow","clear","clearTimeout","VisibleItems","XS","SM","MD","LG","XL","_curry2","a","b","getFeaturesLengths","getMaxFeatureLimit","sizes","Math","max","visibilitySet","errorBoundary","withState","initialScrollOffset","setShowMoreFeatures","products","showPagination","showNavigation","prefixes","split","window","DocumentTouch","document","query","matchMedia","matches","mq","join","isTouchDevice","activeVisibleFeatureLimit","findResponsiveItem","getBreakpoints","supportNull","isNotNull","clickZone","bottom","marginLeft","pageNavControls","props","scroller","scrollerRef","useState","onScroll","debounce","isMinMd","currentVisible","Array","from","acc","el","getBoundingClientRect","children","setActiveIndex","scrollToNode","idx","scrollTo","node","offset","scrollLeft","behavior","useEffect","nodes","useRef","layout","getNodes","Ribbon","byRow","sliderRef","Item","item","Pagination","Navigation","PureSalesboard","current","Salesboard","isPercentage","isFixed","Saving","value","intlNamespace","values","saving","currency","compose","setDisplayName","withBreakpoints","fontWeight","highlight","verticalAlign","fixed","textDecoration","BadgeKind","component","createStructuredSelector","interval","term","LegalText","getInterval","selectors","getDisplayPeriod","rA","hasSavingValue","Object","hasBadge","shouldShowSetupFee","viewModes","excludeViewModes","mapProps","showFee","proposition","hasProposition","hasSaving","showSetupFee","renewalPeriod","priceLayout","intro","getTitleColor","content","badge","price","getContrastColor","marginRight","setupFee","fee","renewal","legalCaveat","Layout","COMPACT","priceWrapper","pricing","badgeAndNoProposition","upFront","hasDiscount","discountPerc","Boolean","parseInt","amount","period","bespoke","shouldIncludeTax","mapStateToProps","includeTax","connect","displayInterval","viewMode","productPrice","ConnectedProductPrice","inc","defineProperty","exports","_typeof","Symbol","iterator","obj","constructor","prototype","_extends","assign","target","source","hasOwnProperty","call","_createClass","defineProperties","descriptor","enumerable","configurable","writable","Constructor","protoProps","staticProps","_react2","_interopRequireDefault","_propTypes2","_classnames2","__esModule","_defineProperty","ANIMATION_STATE_CLASSES","animating","animatingUp","animatingDown","animatingToHeightZero","animatingToHeightAuto","animatingToHeightSpecific","static","staticHeightZero","staticHeightAuto","staticHeightSpecific","PROPS_TO_OMIT","omit","_len","keys","_key","res","objectKeys","indexOf","cancelAnimationFrames","requestAnimationFrameIDs","forEach","cancelAnimationFrame","isNumber","n","isNaN","parseFloat","isFinite","search","substr","runCallback","callback","params","AnimateHeight","_React$Component","instance","TypeError","_classCallCheck","_this","self","ReferenceError","_possibleConstructorReturn","__proto__","getPrototypeOf","animationFrameIDs","animationStateClasses","getStaticStateClasses","state","shouldUseTransitions","subClass","superClass","create","setPrototypeOf","_inherits","contentElement","hideContent","prevProps","prevState","_this2","_props","delay","onAnimationEnd","onAnimationStart","_cx","showContent","contentHeight","offsetHeight","totalDuration","newHeight","timeoutState","isCurrentHeightAuto","timeoutAnimationStateClasses","setState","timeoutID","animationClassesTimeoutID","requestAnimationFrame","startAnimationHelper","_cx2","_cx3","_this3","_props2","animateOpacity","applyInlineTransitions","className","contentClassName","easing","_state","componentStyle","WebkitTransition","contentStyle","componentClasses","createElement","undefined","concat","Component","propTypes","bool","object","any","isRequired","string","number","propName","componentName","dec"],"mappings":"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","file":"pex-static/12/45.9af416fec42f4f77129a.chunk.js","sourcesContent":["import React, { ReactNode } from 'react';\nimport {\n withProps,\n} from '@team-griffin/rehook';\nimport { Display } from '@ux/typeface';\nimport { isNotNilOrEmpty } from '@team-griffin/capra';\nimport { BreakpointProps, withBreakpointsHook } from '@ux/responsive';\nimport createImageUrl from 'presentation/utils/createImageUrl';\nimport stylesheet, { Styles } from './ItemHeader.stylesheet';\nimport * as r from 'ramda';\nimport createImageAlt from 'presentation/utils/createImageAlt';\nimport urlLanguageParse from 'presentation/utils/urlLanguageParse';\nimport withLanguage from 'presentation/hocs/withLanguage';\nimport { Theme } from '@ux/theme-utils';\nimport pureEnhance from '@ux/pure-enhance';\nimport { Colorway } from 'domain/constants/colorway';\n\ninterface OuterProps {\n theme: Theme,\n imageUrl: string,\n illustration: string,\n endorse: ReactNode,\n isEndorsed: boolean,\n colorway: Colorway,\n}\ninterface MiddleProps extends OuterProps {\n currentLanguage: string,\n}\nexport interface InnerProps extends MiddleProps, BreakpointProps {\n styles: Styles,\n hasBanner: boolean,\n bannerUrl: string,\n}\nconst PureSalesboardItemHeader = ({\n theme,\n styles,\n endorse,\n hasBanner,\n bannerUrl,\n isEndorsed,\n currentLanguage,\n}: InnerProps) => (\n
\n \n
\n \n
\n
\n \n
\n {/*\n //@ts-ignore */}\n \n {endorse}\n \n
\n
\n
\n);\n\nconst enhance = pureEnhance(\n 'SalesboardItemHeader', {\n hocs: [\n withLanguage,\n ],\n hooks: [\n withBreakpointsHook,\n withProps((ownerProps: MiddleProps) => ({\n hasBanner: r.or(\n isNotNilOrEmpty(ownerProps.imageUrl),\n isNotNilOrEmpty(ownerProps.illustration),\n ),\n bannerUrl: createImageUrl(\n {\n illustration: ownerProps.illustration,\n imageUrl: ownerProps.imageUrl,\n },\n ownerProps.theme,\n r.prop('currentLanguage')(ownerProps),\n ),\n })),\n withProps(stylesheet),\n ],\n },\n);\n\nexport default enhance(PureSalesboardItemHeader);\n","import { useStyles } from '@team-griffin/stylr';\nimport cssSides, { Side } from '@team-griffin/css-sides';\nimport { headingXxs } from '@ux/type-size';\nimport { gu2px } from '@ux/theme-utils';\nimport { percentage, modifier } from '@ux/style-utils';\nimport { Colorway } from 'domain/constants/colorway';\nimport { InnerProps } from './ItemHeader';\nimport { CSSProperties } from 'react';\n\nexport interface Styles {\n root: CSSProperties,\n illustration: CSSProperties,\n endorse: CSSProperties,\n endorseText: CSSProperties,\n bannerAspect: CSSProperties,\n asyncWrapper: CSSProperties,\n asyncWrapperLoaded: CSSProperties,\n bannerImage: CSSProperties,\n}\nexport default ({\n isMinLg,\n colorway,\n theme: {\n spacing,\n palette,\n typography,\n },\n}: InnerProps) => {\n\n return useStyles({\n default: {\n root: {\n position: 'relative',\n },\n illustration: {\n width: gu2px(10, spacing),\n },\n endorse: {\n backgroundColor: palette.primary,\n color: palette.primaryContrast,\n display: 'flex',\n alignItems: 'center',\n height: gu2px(4, spacing),\n maxHeight: gu2px(4, spacing),\n position: 'relative',\n ...cssSides('padding', Side.Y, gu2px(1, spacing)),\n },\n endorseText: {\n ...headingXxs(typography),\n ...cssSides('padding', Side.X, gu2px(3, spacing)),\n position: 'absolute',\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n left: 0,\n right: 0,\n lineHeight: 1, // to keep it centered\n },\n bannerAspect: {\n display: 'flex',\n justifyContent: 'flex-content',\n position: 'relative',\n width: percentage(100),\n height: 0,\n padding: 0,\n overflow: 'hidden',\n paddingTop: percentage(56.25),\n backgroundColor: palette.grey12,\n },\n bannerImage: {\n position: 'absolute',\n minHeight: percentage(100),\n minWidth: percentage(100),\n top: percentage(50),\n transform: 'translateY(-50%)',\n width: percentage(100),\n },\n },\n\n isMinLg: {\n endorseText: {\n ...cssSides('padding', Side.X, gu2px(4, spacing)),\n },\n },\n\n [modifier('colorway', Colorway.PRIMARY)]: {\n endorse: {\n backgroundColor: palette.grey02,\n color: '#fff',\n },\n },\n\n [modifier('colorway', Colorway.PRIMARY_GRADIENT)]: {\n endorse: {\n backgroundColor: palette.grey02,\n color: '#fff',\n },\n },\n\n [modifier('colorway', Colorway.HIGHLIGHT)]: {\n endorse: {\n backgroundColor: palette.grey02,\n color: '#fff',\n },\n },\n }, [\n { isMinLg },\n { colorway },\n ]);\n};\n","import React from 'react';\nimport {\n withProps,\n} from '@team-griffin/rehook';\nimport stylesheet, { Styles } from './ItemDetails.stylesheet';\nimport { Heading03, BodyCopy01 } from '@ux/typography';\nimport { Theme } from '@ux/theme-utils';\nimport { ShortcodeProps } from 'presentation/components/Shortcode';\nimport pureEnhance from '@ux/pure-enhance';\n\ninterface OuterProps {\n theme: Theme,\n hBaseline: number,\n title: ShortcodeProps | string,\n text: ShortcodeProps | string,\n}\nexport interface InnerProps extends OuterProps {\n styles: Styles,\n}\nconst PureSalesboardItemDetails = ({\n theme,\n styles,\n hBaseline,\n title,\n text,\n}: InnerProps) => (\n
\n \n {title}\n \n \n {text}\n \n
\n);\n\nconst enhance = pureEnhance(\n 'SalesboardItemDetails', [\n withProps(stylesheet),\n ],\n);\n\nexport default enhance(PureSalesboardItemDetails);\n","import { useStyles } from '@team-griffin/stylr';\nimport { InnerProps } from './ItemDetails';\nimport { CSSProperties } from 'react';\n\nexport interface Styles {\n title: CSSProperties,\n text: CSSProperties,\n}\nexport default ({\n theme: {\n palette,\n },\n}: InnerProps) => useStyles({\n default: {\n title: {\n color: palette.grey02,\n },\n text: {\n color: palette.grey04,\n },\n },\n});\n","import React from 'react';\nimport {\n defaultProps,\n withProps,\n} from '@team-griffin/rehook';\nimport pureEnhance from '@ux/pure-enhance';\nimport Message from '@ux/message';\nimport CallToAction from 'components/common/CallToAction';\nimport { Kind } from '@ux/button';\nimport ProductPrice from 'components/common/ProductPrice';\nimport stylesheet, { Styles } from './ItemPrice.stylesheet';\nimport { BreakpointProps, withBreakpointsHook } from '@ux/responsive';\nimport { hasLength } from '@team-griffin/capra';\nimport * as r from 'ramda';\nimport { CTA } from 'core/ribbons/cta';\nimport { Theme } from '@ux/theme-utils';\nimport { Product } from '@ux/product';\n\nexport type PricingStrategy = {\n proposition?: string,\n paymentIntervalDisplay: number,\n viewMode: number,\n pricingTier: {\n paymentInterval: number,\n term: number,\n }\n};\n\ninterface OuterProps {\n ctas?: CTA[],\n theme: Theme,\n index: number,\n id: string|number,\n product: Product,\n pricingStrategy: PricingStrategy,\n}\ninterface DefaultProps extends OuterProps {\n ctas: CTA[],\n}\nexport interface InnerProps extends OuterProps, BreakpointProps {\n styles: Styles,\n ctaProps: CTA,\n}\n\nconst PureSalesboardItemPrice = ({\n theme,\n styles,\n ctas,\n ctaProps,\n product,\n pricingStrategy,\n isMinSm,\n id,\n index,\n}: InnerProps) => (\n
\n
\n \n
\n \n
\n \n )}\n {...ctaProps}\n />\n
\n
\n
\n);\n\nconst enhance = pureEnhance(\n 'SalesboardItemPrice', [\n defaultProps({\n ctas: [],\n }),\n withProps((ownerProps: DefaultProps) => ({\n //@ts-ignore\n ctaProps: r.mergeRight(ownerProps.ctas[0], {\n kind: Kind.PRIMARY,\n }),\n })),\n withBreakpointsHook,\n withProps(stylesheet),\n ],\n);\n\nexport default enhance(PureSalesboardItemPrice);\n","import { useStyles } from '@team-griffin/stylr';\nimport { gu2px } from '@ux/theme-utils';\nimport { InnerProps } from './ItemPrice';\nimport { CSSProperties } from 'react';\n\nexport interface Styles {\n body: CSSProperties,\n cta: CSSProperties,\n}\n\nexport default ({\n theme: {\n spacing,\n },\n isMinLg,\n}: InnerProps) => useStyles({\n default: {\n body: {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n },\n cta: {\n marginTop: gu2px(3, spacing),\n },\n },\n}, [\n { isMinLg },\n]);\n","import React from 'react';\nimport {\n withProps,\n} from '@team-griffin/rehook';\nimport Shortcode, { ShortcodeProps } from 'components/Shortcode';\nimport { withBreakpointsHook, BreakpointProps } from '@ux/responsive';\nimport stylesheet, { Styles } from './ItemFeature.stylesheet';\nimport pureEnhance from '@ux/pure-enhance';\nimport { Theme } from '@ux/theme-utils';\nimport { Colorway } from 'domain/constants/colorway';\n\nexport type FeatureProps = {\n text: ShortcodeProps,\n};\ninterface OuterProps {\n theme: Theme,\n colorway: Colorway,\n feature: FeatureProps,\n first?: boolean,\n last?: boolean,\n}\nexport interface InnerProps extends OuterProps, BreakpointProps {\n styles: Styles,\n}\nconst PureSalesboardItemFeature = ({\n theme,\n styles,\n colorway,\n feature,\n}: InnerProps) => (\n
  • \n \n
  • \n);\n\nconst enhance = pureEnhance(\n 'SalesboardItemFeature', [\n withBreakpointsHook,\n withProps(stylesheet),\n ],\n);\n\nexport default enhance(PureSalesboardItemFeature);\n","import { useStyles } from '@team-griffin/stylr';\nimport cssSides, { Side } from '@team-griffin/css-sides';\nimport { gu2px } from '@ux/theme-utils';\nimport { opacify } from '@ux/style-utils';\nimport longhand from '@team-griffin/css-longhand';\nimport { InnerProps } from './ItemFeature';\nimport { CSSProperties } from 'react';\n\nexport interface Styles {\n root: CSSProperties,\n}\nexport default ({\n theme: {\n spacing,\n palette,\n },\n first,\n last,\n}: InnerProps) => useStyles({\n default: {\n root: {\n ...cssSides('padding', Side.Y, gu2px(2, spacing)),\n ...cssSides('margin', Side.A, 0),\n ...longhand('borderTop', {\n style: 'solid',\n width: 1,\n color: opacify(palette.grey06, 0.2),\n }),\n },\n },\n\n first: {\n root: {\n paddingTop: 0,\n borderTopWidth: 0,\n },\n },\n\n last: {\n root: {\n paddingBottom: 0,\n },\n },\n}, [\n { first },\n { last },\n]);\n","import React, { Fragment } from 'react';\nimport {\n withProps,\n} from '@team-griffin/rehook';\nimport pureEnhance from '@ux/pure-enhance';\nimport ItemFeature, { FeatureProps } from './ItemFeature';\nimport AnimateHeight from 'react-animate-height';\nimport PaddingBox, { Side } from '@ux/padding-box';\nimport Glyph from '@ux/glyphs';\nimport { withBreakpointsHook, BreakpointProps } from '@ux/responsive';\nimport stylesheet, { Styles } from './ItemFeatures.stylesheet';\nimport { ifElseBool } from '@team-griffin/capra';\nimport * as r from 'ramda';\nimport { Theme } from '@ux/theme-utils';\nimport { Colorway } from 'domain/constants/colorway';\n\ninterface OuterProps {\n theme: Theme,\n colorway: Colorway,\n features: FeatureProps[],\n visibleFeatureLimit: number,\n maxFeatureLimit: number,\n hasMoreFeatures: boolean,\n showMoreFeatures: boolean,\n isEndorsed: boolean,\n onShowMoreClick: (evt: any) => void,\n}\n\nexport interface InnerProps extends OuterProps, BreakpointProps {\n toggleHeight: string|number,\n toggleIcon: 'string',\n styles: Styles,\n visibleFeatures: FeatureProps[],\n moreFeatures: FeatureProps[],\n}\nconst isLast = (index: number, arr: any[]) => r.equals(index, r.dec(arr.length));\nconst isZero = (index: number) => r.equals(0, index);\n// we have no hidden features, and item is last in array\nconst isLastVisibleItem = (f: boolean, v: any[], i: number) => !f && isLast(i, v);\n\ndeclare const i: number;\ndeclare const feature: FeatureProps;\n\nconst PureSalesboardItemFeatures = ({\n theme,\n styles,\n colorway,\n visibleFeatures,\n moreFeatures,\n hasMoreFeatures,\n toggleHeight,\n toggleIcon,\n onShowMoreClick,\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\nconst enhance = pureEnhance(\n 'SalesboardItemFeatures', [\n withProps((ownerProps: OuterProps) => {\n // pad the array so it is the same length as the longest product\n const features = r.pipe(\n r.concat(\n r.__,\n r.times(\n // add the `-` padded items\n r.always({\n text: '\\u2014',\n }),\n r.max(0, ownerProps.maxFeatureLimit - ownerProps.features.length)\n ),\n ),\n //@ts-ignore\n // split into 2 arrays of visible items and hidden items\n r.splitAt(ownerProps.visibleFeatureLimit),\n // `null` visibleFeatureLimit is a valid option, it means \"display all\"\n // r.splitAt(null) returns an empty array at 0 index: [[], [...]]\n // so if we reverse here if it's null it means\n // visible always = arr[0] and hidden always = arr[1]\n (arr: any) => r.ifElse(\n r.isNil,\n r.always(r.reverse(arr)),\n r.always(arr),\n )(ownerProps.visibleFeatureLimit),\n // @ts-ignore\n )(ownerProps.features);\n\n const visibleFeatures = features[0];\n const moreFeatures = features[1];\n\n // if showMoreFeatures toggle has been activated,\n // or we have a `null` visibleFeatureLimit\n // we want to open up the animated height area\n const openFeatures = r.either(\n r.propEq('showMoreFeatures', true),\n r.propEq('visibleFeatureLimit', null),\n )(ownerProps);\n\n const toggles = ifElseBool(\n r.always({\n toggleHeight: 'auto' as string | number,\n toggleIcon: 'chevronUp',\n }),\n r.always({\n toggleHeight: 0,\n toggleIcon: 'chevronDown',\n }),\n )(openFeatures);\n\n return {\n visibleFeatures,\n moreFeatures,\n ...toggles,\n };\n }),\n withBreakpointsHook,\n withProps(stylesheet),\n ],\n);\n\nexport default enhance(PureSalesboardItemFeatures);\n","import { useStyles } from '@team-griffin/stylr';\nimport cssSides, { Side } from '@team-griffin/css-sides';\nimport longhand from '@team-griffin/css-longhand';\nimport { Colorway } from 'domain/constants/colorway';\nimport { opacify, percentage } from '@ux/style-utils';\nimport { gu2px } from '@ux/theme-utils';\nimport * as r from 'ramda';\nimport { CSSProperties } from 'react';\nimport { InnerProps } from './ItemFeatures';\n\nexport interface Styles {\n root: CSSProperties,\n list: CSSProperties,\n toggleBox: CSSProperties,\n toggle: CSSProperties,\n toggleIcon: CSSProperties,\n}\nexport default ({\n theme: {\n spacing,\n palette,\n },\n isMinLg,\n toggleHeight,\n isEndorsed,\n hasMoreFeatures,\n colorway,\n}: InnerProps) => useStyles({\n default: {\n root: {\n ...longhand('borderTop', {\n width: gu2px(0.5, spacing),\n style: 'solid',\n color: opacify(palette.grey06, 0.2),\n }),\n },\n list: {\n ...cssSides('margin', Side.A, 0),\n ...cssSides('padding', Side.A, 0),\n listStyle: 'none',\n },\n toggleBox: {\n boxShadow: `0 ${r.negate(gu2px(0.5, spacing))}px 0 ${opacify(palette.grey06, 0.2)}`,\n position: 'relative',\n // offset 3GU padding + 2GU item padding + 1GU peak\n top: r.negate(gu2px(6, spacing)),\n marginBottom: r.negate(gu2px(6, spacing)),\n },\n toggle: {\n borderWidth: 0,\n display: 'block',\n width: percentage(100),\n cursor: 'pointer',\n ...cssSides('padding', Side.X, 0),\n ...cssSides('padding', Side.Y, gu2px(2, spacing)),\n backgroundColor: '#fff',\n color: palette.primary,\n textAlign: 'center',\n outline: 0,\n },\n toggleIcon: {\n width: gu2px(3, spacing),\n color: palette.primary,\n },\n },\n\n isEndorsed: {\n root: {\n borderTopColor: r.cond([\n [\n //@ts-ignore\n r.includes(r.__, [\n Colorway.PRIMARY,\n Colorway.PRIMARY_GRADIENT,\n Colorway.HIGHLIGHT,\n ]),\n r.always(palette.grey02),\n ],\n [ r.T, r.always(palette.primary) ],\n ])(colorway),\n },\n },\n\n isMinLg: {\n toggleBox: {\n // offset 4GU padding + 2GU item padding + 1GU peak\n top: r.negate(gu2px(7, spacing)),\n marginBottom: r.negate(gu2px(7, spacing)),\n },\n },\n\n toggleOpen: {\n list: {\n // compensate for negative margin of toggle box\n marginBottom: gu2px(4, spacing),\n },\n },\n}, [\n { isEndorsed },\n { isMinLg },\n { toggleOpen: toggleHeight === 'auto' && hasMoreFeatures },\n]);\n","import React, { ReactNode } from 'react';\nimport {\n withProps,\n defaultProps,\n} from '@team-griffin/rehook';\nimport Panel from '@ux/panel';\nimport Header from './ItemHeader';\nimport Details from './ItemDetails';\nimport Price, { PricingStrategy } from './ItemPrice';\nimport { Colorway } from 'domain/constants/colorway';\nimport PaddingBox from '@ux/padding-box';\nimport { LegalText } from 'components/common/ProductPrice';\nimport Features from './ItemFeatures';\nimport { hasLength } from '@team-griffin/capra';\nimport stylesheet, { Styles } from './Item.stylesheet';\nimport * as r from 'ramda';\nimport { dispatch } from 'ramda-adjunct';\nimport { withBreakpointsHook, BreakpointProps } from '@ux/responsive';\nimport { selectors as prodSelectors, Product } from '@ux/product';\nimport { Theme } from '@ux/theme-utils';\nimport { FeatureProps } from './ItemFeature';\nimport { CTA } from 'core/ribbons/cta';\nimport pureEnhance from '@ux/pure-enhance';\n\ninterface OuterProps {\n theme: Theme,\n colorway: Colorway,\n product?: Product,\n features: FeatureProps[],\n hBaseline: number,\n illustration: string,\n imageUrl: string,\n ctas: CTA[],\n pricingStrategy: PricingStrategy,\n endorse: ReactNode,\n productId: string,\n index: number,\n id: string,\n visibleFeatureLimit: number,\n maxFeatureLimit: number,\n hasMoreFeatures: boolean,\n showMoreFeatures: boolean,\n onShowMoreClick: (evt: any) => void,\n descRef: string,\n hasFeaturedProduct?: boolean,\n}\ninterface DefaultProps extends OuterProps {\n product: Product,\n}\nexport interface InnerProps extends DefaultProps, BreakpointProps {\n styles: Styles,\n isEndorsed: boolean,\n name: string,\n tagline: string,\n borderless: boolean,\n}\nconst {\n getTagline,\n getName,\n} = prodSelectors;\n\nconst PureSalesboardItem = ({\n theme,\n colorway,\n styles,\n features,\n endorse,\n hBaseline,\n illustration,\n imageUrl,\n product,\n ctas,\n pricingStrategy,\n isEndorsed,\n productId,\n visibleFeatureLimit,\n maxFeatureLimit,\n hasMoreFeatures,\n showMoreFeatures,\n descRef,\n id,\n index,\n onShowMoreClick,\n borderless,\n name,\n tagline,\n}: InnerProps) => (\n \n \n \n
    \n \n \n \n \n
    \n \n \n
    \n \n
    \n \n);\n\nconst enhance = pureEnhance(\n 'SalesboardItem', [\n defaultProps({\n product: {},\n }),\n withProps((ownerProps: DefaultProps) => ({\n isEndorsed: r.propSatisfies(hasLength, 'endorse', ownerProps),\n //@ts-ignore\n borderless: r.pipe(\n // @ts-ignore\n r.includes(\n // @ts-ignore\n r.__,\n [\n // @ts-ignore\n Colorway.LIGHT,\n // @ts-ignore\n Colorway.NEUTRAL,\n ]\n ),\n r.not, // if it's not light/neutral, remove the border\n //@ts-ignore\n )(ownerProps.colorway),\n name: dispatch([\n r.path([ 'text', 'productName' ]),\n getName,\n ])(ownerProps),\n tagline: dispatch([\n r.path([ 'text', 'tagline' ]),\n getTagline,\n ])(ownerProps),\n })),\n withBreakpointsHook,\n withProps(stylesheet),\n ]\n);\n\nexport default enhance(PureSalesboardItem);\n","import { useStyles } from '@team-griffin/stylr';\nimport { gu2px } from '@ux/theme-utils';\nimport { Colorway } from 'domain/constants/colorway';\nimport { smallprint } from '@ux/type-size';\nimport cssSides, { Side } from '@team-griffin/css-sides';\nimport { percentage } from '@ux/style-utils';\nimport { getBodyColor } from 'presentation/utils/colorway';\nimport * as r from 'ramda';\nimport { InnerProps } from './Item';\nimport { CSSProperties } from 'react';\n\nexport interface Styles {\n root: CSSProperties,\n body: CSSProperties,\n legalText: CSSProperties,\n}\nexport default ({\n isMinLg,\n colorway,\n isEndorsed,\n theme,\n hasFeaturedProduct,\n theme: {\n spacing,\n typography,\n palette,\n },\n}: InnerProps) => useStyles({\n default: {\n root: {\n flex: 1,\n flexBasis: 'auto',\n },\n body: {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'space-between',\n height: percentage(100),\n },\n legalText: {\n ...smallprint(typography),\n ...cssSides('margin', Side.X, gu2px(3, spacing)),\n marginTop: gu2px(1, spacing),\n color: getBodyColor(theme, colorway),\n opacity: 0.9,\n },\n },\n hasFeaturedProduct: {\n root: {\n marginTop: gu2px(4, spacing),\n },\n },\n isEndorsed: {\n root: {\n marginTop: 0,\n },\n body: {\n borderBottomColor: r.cond([\n [\n //@ts-ignore\n r.includes(r.__, [\n Colorway.PRIMARY,\n Colorway.PRIMARY_GRADIENT,\n Colorway.HIGHLIGHT,\n ]),\n r.always(palette.grey02),\n ],\n [ r.T, r.always(palette.primary) ],\n ])(colorway),\n },\n },\n isMinLg: {\n legalText: {\n ...cssSides('margin', Side.X, gu2px(4, spacing)),\n },\n },\n}, [\n { isMinLg },\n { hasFeaturedProduct },\n { isEndorsed },\n]);\n","import React, { CSSProperties } from 'react';\nimport {\n withProps,\n} from '@team-griffin/rehook';\nimport { Colorway } from 'domain/constants/colorway';\nimport { opacify } from '@ux/style-utils';\nimport { gu2px, Curvature, Theme } from '@ux/theme-utils';\nimport cssSides, { Side } from '@team-griffin/css-sides';\nimport * as r from 'ramda';\nimport {\n useStyles,\n} from '@team-griffin/stylr';\nimport pureEnhance from '@ux/pure-enhance';\ninterface Styles {\n root: CSSProperties,\n}\n\ninterface OuterProps {\n theme: Theme,\n colorway: Colorway,\n activeIndex: number,\n index: number,\n onClick: (evt: any) => void,\n visibleItems: number,\n role: string,\n}\ninterface InnerProps extends OuterProps {\n styles: Styles,\n active: boolean,\n}\nconst stylesheet = ({\n theme: {\n spacing,\n palette,\n curvature,\n },\n colorway,\n active,\n}: InnerProps) => useStyles({\n default: {\n root: {\n display: 'block',\n height: gu2px(0.5, spacing),\n width: gu2px(3, spacing),\n ...cssSides('margin', Side.X, gu2px(0.5, spacing)),\n backgroundColor: opacify(palette.grey06, 0.5),\n transition: 'background-color 0.2s ease-in-out, height 0.2s ease-in-out',\n borderRadius: r.cond([\n [ r.equals(Curvature.WEAK), r.always(2) ],\n [ r.equals(Curvature.STRONG), r.always(gu2px(2, spacing)) ],\n [ r.T, r.always(0) ],\n ])(curvature),\n },\n },\n unsafeColorway: {\n root: {\n backgroundColor: opacify(palette.grey09, 0.5),\n },\n },\n active: {\n root: {\n backgroundColor: palette.secondary,\n height: gu2px(1, spacing),\n },\n },\n}, [\n {\n unsafeColorway: r.contains(colorway, [\n Colorway.PRIMARY,\n Colorway.DARK,\n Colorway.PRIMARY_GRADIENT,\n Colorway.HIGHLIGHT,\n ]),\n },\n { active },\n]);\n\nconst PureSalesboardPaginationItem = ({\n styles,\n onClick,\n}: InnerProps) => (\n \n);\n\nconst enhance = pureEnhance(\n 'SalesboardPaginationItem', [\n withProps((ownerProps: OuterProps) => {\n const visible = r.dec(ownerProps.visibleItems); // others are 0 indexed\n const activeIndex = ownerProps.activeIndex;\n const index = ownerProps.index;\n\n // it's active if if it's the current index,\n // or it's between the activeIndex and the visibleLimit added together\n const active = r.or(\n index === activeIndex,\n r.and(index >= activeIndex, index <= activeIndex + visible),\n );\n return {\n active,\n };\n }),\n withProps(stylesheet),\n ],\n);\n\nexport default enhance(PureSalesboardPaginationItem);\n","import React, { CSSProperties } from 'react';\nimport {\n withHandlers,\n withProps,\n} from '@team-griffin/rehook';\nimport pureEnhance from '@ux/pure-enhance';\nimport PaginationItem from './PaginationItem';\nimport { withBreakpointsHook, BreakpointProps } from '@ux/responsive';\nimport { gu2px, Theme } from '@ux/theme-utils';\nimport * as r from 'ramda';\nimport { useStyles } from '@team-griffin/stylr';\nimport { Colorway } from 'domain/constants/colorway';\n\ninterface OuterProps {\n theme: Theme,\n itemCount: number,\n activeIndex: number,\n colorway: Colorway,\n visibleItems: number,\n}\n\ninterface InnerProps extends OuterProps, BreakpointProps {\n styles: {\n root: CSSProperties,\n },\n onPaginationClick: (evt: any) => void,\n}\n\nconst stylesheet = ({\n theme: {\n spacing,\n },\n}: InnerProps) => useStyles({\n default: {\n root: {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n height: gu2px(1, spacing),\n },\n },\n});\n\ndeclare const i: number;\n\nconst PureSalesboardPagination = ({\n styles,\n itemCount,\n theme,\n activeIndex,\n visibleItems,\n colorway,\n onPaginationClick,\n}: InnerProps) => (\n
    \n \n onPaginationClick(i)}\n activeIndex={activeIndex}\n visibleItems={visibleItems}\n index={i}\n />\n \n
    \n);\n\nconst enhance = pureEnhance(\n 'SalesboardPagination', [\n withBreakpointsHook,\n withHandlers({\n onPaginationClick: ({\n isMinLg,\n }: {\n isMinLg: boolean,\n }) => (index: number) => {\n // only on desktop\n if (!isMinLg) {\n return false;\n }\n // @TODO make this work\n return index;\n },\n }),\n withProps(stylesheet),\n ]\n);\n\nexport default enhance(PureSalesboardPagination);\n","import React, { CSSProperties } from 'react';\nimport {\n withHandlers,\n withProps,\n} from '@team-griffin/rehook';\nimport Glyph from '@ux/glyphs';\nimport { gu2px, Theme } from '@ux/theme-utils';\nimport cssSides, { Side } from '@team-griffin/css-sides';\nimport { useStyles } from '@team-griffin/stylr';\nimport pureEnhance from '@ux/pure-enhance';\nimport { getBodyColor } from 'presentation/utils/colorway';\nimport { Colorway } from 'domain/constants/colorway';\n\ninterface OuterProps {\n theme: Theme,\n colorway: Colorway,\n onNavigationClick: (direction: string) => void,\n}\ninterface InnerProps extends OuterProps {\n styles: {\n root: CSSProperties,\n button: CSSProperties,\n },\n onButtonClick: (direction: string) => void,\n}\nconst stylesheet = ({\n theme,\n theme: {\n palette,\n spacing,\n },\n colorway,\n}: InnerProps) => useStyles({\n default: {\n root: {\n display: 'flex',\n justifyContent: 'space-between',\n },\n button: {\n backgroundColor: 'transparent',\n color: palette.grey02,\n outline: 0,\n borderWidth: 0,\n height: gu2px(6, spacing),\n cursor: 'pointer',\n ...cssSides('padding', Side.X, gu2px(3, spacing)),\n ...cssSides('padding', Side.Y, 0),\n },\n icon: {\n width: gu2px(3, spacing),\n color: getBodyColor(theme, colorway),\n },\n },\n});\n\nconst PureSalesboardNavigation = ({\n styles,\n onButtonClick,\n}: InnerProps) => (\n
    \n onButtonClick('prev')}\n >\n \n \n onButtonClick('next')}\n >\n \n \n
    \n);\n\nconst enhance = pureEnhance(\n 'SalesboardNavigation', [\n withHandlers({\n onButtonClick: ({\n onNavigationClick,\n }: {\n onNavigationClick: (direction: string) => void,\n }) => (direction: string) => onNavigationClick(direction),\n }),\n withProps(stylesheet),\n ],\n);\n\nexport default enhance(PureSalesboardNavigation);\n","// from: https://github.com/component/debounce\n/* eslint-disable */\nexport default (func, wait, immediate) => {\n var timeout, args, context, timestamp, result;\n if (null == wait) wait = 100\n\n function later() {\n var last = Date.now() - timestamp\n\n if (last < wait && last >= 0) {\n timeout = setTimeout(later, wait - last)\n } else {\n timeout = null\n if (!immediate) {\n result = func.apply(context, args)\n context = args = null\n }\n }\n }\n\n var debounced = function(){\n context = this\n args = arguments\n timestamp = Date.now()\n var callNow = immediate && !timeout\n if (!timeout) timeout = setTimeout(later, wait)\n if (callNow) {\n result = func.apply(context, args)\n context = args = null\n }\n\n return result\n }\n\n debounced.clear = function() {\n if (timeout) {\n clearTimeout(timeout)\n timeout = null\n }\n }\n\n return debounced;\n}","export const VisibleItems = {\n XS: 1,\n SM: 2,\n MD: 3,\n LG: 4,\n XL: 6,\n};\n\nexport default null;","import _curry2 from \"./internal/_curry2.js\";\n/**\n * Returns the smaller of its two arguments.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Relation\n * @sig Ord a => a -> a -> a\n * @param {*} a\n * @param {*} b\n * @return {*}\n * @see R.minBy, R.max\n * @example\n *\n * R.min(789, 123); //=> 123\n * R.min('a', 'b'); //=> 'a'\n */\n\nvar min =\n/*#__PURE__*/\n_curry2(function min(a, b) {\n return b < a ? b : a;\n});\n\nexport default min;","import React, { useRef, useState, useEffect, ReactNode } from 'react';\nimport {\n withState,\n withHandlers,\n defaultProps,\n withProps,\n} from '@team-griffin/rehook';\nimport Ribbon from 'components/ribbons/Ribbon';\nimport PaddingBox from '@ux/padding-box';\nimport Slider from '@ux/slider';\nimport { Container } from '@ux/grid';\nimport Item from './Item';\nimport Pagination from './Pagination';\nimport Navigation from './Navigation';\nimport Equalizer from 'react-equalizer';\nimport { BreakpointProps, withBreakpointsHook } from '@ux/responsive';\nimport findResponsiveItem from 'presentation/utils/findResponsiveItem';\nimport errorBoundary from 'presentation/hocs/errorBoundary';\nimport visibilitySet from 'presentation/hocs/visibilitySet';\nimport getBreakpoints from 'presentation/utils/getBreakpoints';\nimport debounce from 'presentation/utils/debounce';\nimport isTouchDevice from 'presentation/utils/isTouchDevice';\nimport stylesheet, { Styles } from './Salesboard.stylesheet';\nimport { isNotNull } from 'ramda-adjunct';\nimport { gu2px } from '@ux/theme-utils';\nimport { VisibleItems } from './constants';\nimport * as r from 'ramda';\nimport { hasLength } from '@team-griffin/capra';\nimport { RibbonProps } from 'domain/constants/ribbons';\nimport { Product } from '@ux/product';\nimport pureEnhance from '@ux/pure-enhance';\nimport { FeatureProps } from './ItemFeature';\nimport { CTA } from 'core/ribbons/cta';\nimport { PricingStrategy } from './ItemPrice';\n\ninterface OuterProps extends RibbonProps {\n initialScrollOffset?: number,\n products?: Product[],\n hBaseline?: number,\n visibleFeatureLimit: number,\n}\n\ninterface WithHandlerProps extends OuterProps {\n activeIndex: number,\n setActiveIndex: (evt: number) => void,\n showMoreFeatures: boolean,\n setShowMoreFeatures: (evt: boolean) => void,\n onShowMoreClick: (evt: any) => void,\n}\ninterface DefaultProps extends WithHandlerProps {\n initialScrollOffset: number,\n products: Product[],\n hBaseline: number,\n}\nexport interface MiddleProps extends DefaultProps, BreakpointProps {}\nexport interface InnerProps extends MiddleProps {\n styles: Styles,\n hasFeaturedProduct: boolean,\n showPagination: boolean,\n showNavigation: boolean,\n maxFeatureLimit: number,\n activeVisibleFeatureLimit: number,\n hasMoreFeatures: boolean,\n visibleItems: number,\n onNavigationClick: (evt: string) => void,\n nodes: any[],\n scrollerRef: string,\n onScroll: () => void,\n getNodes: () => any[],\n}\n\ndeclare const i: number;\ndeclare const item: {\n features: FeatureProps[],\n illustration: string,\n imageUrl: string,\n ctas: CTA[],\n pricingStrategy: PricingStrategy,\n endorse: ReactNode,\n productId: string,\n};\n\nconst PureSalesboard = ({\n theme,\n layout,\n name,\n styles,\n products,\n hasFeaturedProduct,\n colorway,\n loading,\n hBaseline,\n id,\n activeVisibleFeatureLimit,\n maxFeatureLimit,\n onShowMoreClick,\n visibleItems,\n activeIndex,\n hasMoreFeatures,\n showPagination,\n showNavigation,\n showMoreFeatures,\n nodes,\n getNodes,\n onNavigationClick,\n scrollerRef,\n onScroll,\n}: InnerProps) => (\n \n
    \n getNodes()}\n >\n {/*\n // @ts-ignore */}\n \n \n \n \n \n \n \n \n onNavigationClick('next')}\n />\n \n \n \n \n \n \n \n \n \n \n \n \n
    \n \n);\n\n\nconst getFeaturesLengths = r.pipe(\n r.prop('products'),\n //@ts-ignore\n r.pluck('features'),\n r.map(r.length),\n);\n\nconst getMaxFeatureLimit = r.pipe(\n getFeaturesLengths,\n (sizes: number[]) => Math.max(...sizes),\n);\n\nconst Salesboard = (props: InnerProps) => {\n const [ scroller, scrollerRef ] = useState(null);\n\n const onScroll = debounce(() => {\n // we only run the active index setter via scroll when on smaller screens\n if (!props.isMinMd) {\n const currentVisible = r.pipe(\n Array.from,\n //@ts-ignore\n r.reduce((acc, el) => r.append(el.getBoundingClientRect().left, acc), []),\n r.findIndex(r.both(r.gt(r.__, 0), r.lt(r.__, 100))), // within 100px of the edge\n )(scroller.children);\n\n if (currentVisible > -1) {\n props.setActiveIndex(currentVisible);\n }\n }\n }, 100);\n\n // take an index and scroll to that node, used for desktop/button nav\n const scrollToNode = (idx: number) => {\n if (!scroller || !scroller.scrollTo || !scroller.children) {\n return;\n }\n\n // check index is with bounds\n const index = r.ifElse(\n r.lt(r.__, 0),\n r.always(0),\n r.min(props.products.length - props.visibleItems),\n )(idx);\n\n const node = scroller.children[index];\n\n if (!node) {\n return;\n }\n\n const offset = node.getBoundingClientRect();\n\n scroller.scrollTo({\n left: scroller.scrollLeft + offset.left - gu2px(1, props.theme.spacing),\n top: offset.top,\n behavior: 'smooth',\n });\n props.setActiveIndex(index);\n };\n\n const onNavigationClick = (direction: string) => {\n if (direction === 'next') {\n scrollToNode(r.inc(props.activeIndex));\n }\n\n if (direction === 'prev') {\n scrollToNode(r.dec(props.activeIndex));\n }\n };\n\n // on first load, scroll to the correct node\n useEffect(\n () => {\n scrollToNode(props.initialScrollOffset);\n },\n [ scroller ],\n );\n\n const nodes = r.times(() => {\n return useRef();\n }, 12);\n\n function getNodes() {\n return r.pipe(\n // Remove any non nodes\n r.reject((node: any) => node.current == null),\n r.map((node) => node.current),\n r.values,\n )(nodes);\n }\n\n // eslint-disable-next-line new-cap\n return PureSalesboard({\n ...props,\n nodes,\n getNodes,\n //@ts-ignore\n scrollerRef,\n onScroll,\n onNavigationClick,\n });\n};\n\nconst enhance = pureEnhance(\n 'Salesboard', {\n hocs: [\n visibilitySet,\n errorBoundary,\n ],\n hooks: [\n withState(\n 'activeIndex',\n 'setActiveIndex',\n ({ initialScrollOffset }: any) => initialScrollOffset,\n ),\n withState('showMoreFeatures', 'setShowMoreFeatures', false),\n withHandlers(({\n onShowMoreClick: ({\n setShowMoreFeatures,\n showMoreFeatures,\n }: any) => () => setShowMoreFeatures(r.not(showMoreFeatures)),\n })),\n defaultProps({\n initialScrollOffset: 0,\n products: [],\n hBaseline: 1,\n }),\n withBreakpointsHook,\n withProps((ownerProps: MiddleProps) => {\n const visibleItems = r.cond([\n [ r.prop('isMinXl'), r.always(VisibleItems.XL) ],\n [ r.prop('isMinLg'), r.always(VisibleItems.LG) ],\n [ r.prop('isMinMd'), r.always(VisibleItems.MD) ],\n [ r.prop('isMinSm'), r.always(VisibleItems.SM) ],\n [ r.T, r.always(VisibleItems.XS) ],\n ])(ownerProps);\n // we have more items than fit on the screen\n const showPagination = r.gt(ownerProps.products.length, visibleItems);\n // only show arrow nav if we're not a touch device\n const showNavigation = !isTouchDevice() && showPagination;\n //@ts-ignore (more than 0 arguments)\n const maxFeatureLimit = getMaxFeatureLimit(ownerProps);\n const activeVisibleFeatureLimit = findResponsiveItem(\n getBreakpoints(ownerProps),\n ownerProps.visibleFeatureLimit,\n {\n supportNull: true,\n },\n );\n\n const hasMoreFeatures = r.and(\n isNotNull(activeVisibleFeatureLimit),\n r.lt(activeVisibleFeatureLimit, maxFeatureLimit),\n );\n const hasFeaturedProduct = r.any(\n r.propSatisfies(hasLength, 'endorse'),\n )(ownerProps.products);\n return {\n hasFeaturedProduct,\n showPagination,\n showNavigation,\n maxFeatureLimit,\n activeVisibleFeatureLimit,\n hasMoreFeatures,\n visibleItems,\n };\n }),\n withProps(stylesheet),\n ],\n },\n\n\n);\n\nexport default enhance(Salesboard);\n","export default () => {\n const prefixes = ' -webkit- -moz- -o- -ms- '.split(' ');\n const mq = (query) => {\n return window.matchMedia(query).matches;\n };\n\n if (('ontouchstart' in window) ||\n (window.DocumentTouch && document instanceof window.DocumentTouch)) {\n return true;\n }\n\n // include the 'heartz' as a way to have a non matching MQ to help terminate the join\n // https://git.io/vznFH\n const query = [ '(', prefixes.join('touch-enabled),('), 'heartz', ')' ].join('');\n return mq(query);\n};","import { useStyles } from '@team-griffin/stylr';\nimport { gu2px } from '@ux/theme-utils';\nimport { percentage } from '@ux/style-utils';\nimport * as r from 'ramda';\nimport { InnerProps } from './Salesboard';\nimport { CSSProperties } from 'react';\n\nexport interface Styles {\n root: CSSProperties,\n clickZone: CSSProperties,\n pageNavControls: CSSProperties,\n}\n\nexport default ({\n theme: {\n spacing,\n },\n isMinSm,\n showNavigation,\n}: InnerProps) => {\n\n return useStyles({\n default: {\n root: {\n position: 'relative',\n overflow: 'hidden',\n },\n clickZone: {\n position: 'absolute',\n // arbitrary number high enough to fill the void off screen\n width: percentage(20),\n left: percentage(100),\n top: 0,\n bottom: 0,\n // 4gu clickable target\n marginLeft: r.negate(gu2px(4, spacing)),\n },\n pageNavControls: {\n marginTop: gu2px(1, spacing),\n },\n },\n isMinSm: {\n pageNavControls: {\n marginTop: gu2px(2, spacing),\n },\n },\n\n showNavigation: {\n pageNavControls: {\n display: 'flex',\n width: percentage(100),\n justifyContent: 'space-between',\n alignItems: 'center',\n },\n },\n }, {\n isMinSm,\n showNavigation,\n });\n};\n","import Salesboard from './Salesboard';\n\nexport default Salesboard;\n","import React from 'react';\nimport {\n compose,\n setDisplayName,\n defaultProps,\n withProps,\n} from 'recompose';\n// import { fastCompare } from '@ux/perf';\nimport {\n FormattedNumber, FormattedMessage,\n} from 'react-intl';\nimport Message from '@ux/message';\nimport Badge, { Kind as BadgeKind } from '@ux/badge';\nimport { Display } from '@ux/typeface';\nimport { withBreakpoints } from '@ux/responsive';\nimport { gu2px } from '@ux/theme-utils';\nimport * as r from 'ramda';\nimport { Heading06 } from '@ux/typography';\nimport { useStyles } from '@team-griffin/stylr';\n\nconst stylesheet = ({\n theme,\n}) => {\n const {\n spacing,\n palette,\n } = theme;\n\n return useStyles({\n default: {\n root: {\n marginLeft: r.negate(gu2px(1, spacing)),\n },\n percentage: {\n fontWeight: 'normal',\n color: palette.highlight,\n verticalAlign: 'middle',\n },\n fixed: {\n fontWeight: 'normal',\n color: palette.highlight,\n verticalAlign: 'middle',\n textDecoration: 'line-through',\n },\n },\n }, []);\n};\n\nconst isPercentage = r.propEq('type', 'percentage');\nconst isFixed = r.propEq('type', 'fixed');\n\nconst Saving = r.cond([\n [ isPercentage, ({\n value,\n intlNamespace,\n }) => (\n {`${value}%`}),\n }}\n />\n ) ],\n [ isFixed, ({\n value,\n currency,\n intlNamespace,\n }) => (\n \n ),\n }}\n />\n ) ],\n [ r.T, r.always(null) ],\n]);\n\nexport const PureSaving = ({\n styles,\n theme,\n type,\n value,\n currency,\n intlNamespace,\n}) => (\n \n \n \n \n \n \n \n \n);\n\nexport const enhance = compose(\n setDisplayName('Saving'),\n // fastCompare,\n defaultProps({\n intlNamespace: 'usf',\n }),\n withBreakpoints,\n withProps(stylesheet),\n);\n\nexport default enhance(PureSaving);\n","import { withProps } from '@team-griffin/rehook';\nimport { createStructuredSelector } from 'reselect';\nimport * as r from 'ramda';\nimport { LegalText } from '@ux/product';\nimport pureEnhance from '@ux/pure-enhance';\n\nconst enhance = pureEnhance('LegalText', [\n withProps(createStructuredSelector({\n interval: r.path([ 'pricingStrategy', 'pricingTier', 'paymentInterval' ]),\n term: r.path([ 'pricingStrategy', 'pricingTier', 'term' ]),\n })),\n]);\n\nexport default enhance(LegalText);\n","import * as r from 'ramda';\nimport * as rA from 'ramda-adjunct';\nimport { selectors } from '@ux/product';\n\nconst { getInterval } = selectors;\n\nexport const getDisplayPeriod = rA.dispatch([\n r.path([ 'pricingStrategy', 'paymentIntervalDisplay' ]),\n getInterval,\n]);\n\nexport default null;\n","import React from 'react';\nimport {\n mapProps,\n withProps,\n} from '@team-griffin/rehook';\nimport { FormattedMessage } from 'react-intl';\nimport { Display } from '@ux/typeface';\nimport Saving from 'components/common/Saving';\nimport {\n Heading04,\n Heading06,\n SubHeading02,\n} from '@ux/typography';\nimport stylesheet, { Styles } from './ProductPrice.stylesheet';\nimport { BreakpointProps, withBreakpointsHook } from '@ux/responsive';\nimport * as r from 'ramda';\nimport {\n isNotNilOrEmpty,\n} from '@team-griffin/capra';\nimport LegalText from './LegalText';\nimport Shortcode from 'components/Shortcode';\nimport Badge, { Kind as BadgeKind } from '@ux/badge';\nimport Prices from '@ux/prices';\nimport { RenewalPeriod, Product } from '@ux/product';\nimport {\n getDisplayPeriod,\n} from './utils';\nimport { RibbonProps } from 'domain/constants/ribbons';\nimport { Layout } from 'components/common/ProductPrice/constants';\nimport pureEnhance from '@ux/pure-enhance';\n\nconst hasSavingValue = r.propSatisfies(\n r.both(\n r.is(Object),\n r.has('value')\n ),\n 'saving',\n);\n\nconst hasBadge = r.anyPass([\n hasSavingValue,\n r.propEq('hasDiscount', true),\n r.propSatisfies(isNotNilOrEmpty, '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: number[], props: DefaultProps) => r.pipe(\n r.path([ 'pricingStrategy', 'viewMode' ]),\n //@ts-ignore\n r.includes(\n r.__,\n viewModes,\n ),\n r.not,\n // @ts-ignore\n)(props);\n\nconst shouldShowSetupFee = r.allPass([\n // check product has a setup fee\n r.propEq('hasUpFrontCost', true),\n // check whether showFee is not false\n r.propEq('showFee', true),\n //check we are in a valid view mode (0)\n (props) => excludeViewModes([ 1, 2 ], props),\n]);\n\n// eslint-disable-next-line no-underscore-dangle\nexport const __test__ = {\n shouldShowSetupFee,\n};\n\ninterface OuterProps extends RibbonProps {\n showFee?: boolean,\n showLegalCaveat?: boolean,\n price: number,\n priceLayout?: Layout,\n viewMode: number,\n currency: string,\n discountPerc: string,\n product: Product,\n pricingStrategy: {\n proposition?: string,\n paymentIntervalDisplay: number,\n viewMode: number,\n pricingTier: {\n paymentInterval: number,\n term: number,\n }\n },\n hasDiscount?: boolean,\n badge?: string,\n upFront?: number,\n legalText?: string,\n saving?: {\n type: string,\n value: number,\n currency: string,\n },\n displayInterval: number,\n interval: number,\n term: number,\n}\n\ninterface DefaultProps extends OuterProps {\n showFee: true,\n showLegalCaveat: true,\n}\n\nexport interface InnerProps extends DefaultProps, BreakpointProps {\n styles: Styles,\n proposition: string,\n hasProposition: boolean,\n hasSaving: boolean,\n showSetupFee: boolean,\n renewalPeriod: number,\n hasBadge: boolean,\n}\nconst PureProductPrice = ({\n theme,\n colorway,\n styles,\n currency,\n price,\n upFront,\n renewalPeriod,\n hasSaving,\n saving,\n badge,\n proposition,\n hasProposition,\n showSetupFee,\n showLegalCaveat,\n legalText,\n product,\n pricingStrategy,\n hasDiscount,\n discountPerc,\n}: InnerProps) => (\n
    \n
    \n \n \n \n \n \n \n \n {badge}\n \n \n \n \n \n \n \n \n \n \n \n
    \n \n \n \n \n \n \n \n \n \n ),\n renewal: (\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);\nconst enhance = pureEnhance(\n 'ProductPrice', {\n hooks: [\n // @ts-ignore\n mapProps(r.mergeRight({\n showFee: true,\n showLegalCaveat: true,\n })),\n withProps((ownerProps: DefaultProps) => ({\n proposition: r.path([ 'pricingStrategy', 'proposition' ], ownerProps),\n hasProposition: r.pathSatisfies(\n isNotNilOrEmpty,\n [ 'pricingStrategy', 'proposition' ],\n ownerProps\n ),\n hasSaving: hasSavingValue(ownerProps),\n showSetupFee: shouldShowSetupFee(ownerProps),\n renewalPeriod: getDisplayPeriod(ownerProps),\n hasBadge: hasBadge(ownerProps),\n })),\n withBreakpointsHook,\n withProps(stylesheet),\n ],\n }\n\n);\n\nexport default enhance(PureProductPrice);\n","import { useStyles } from '@team-griffin/stylr';\nimport { gu2px } from '@ux/theme-utils';\nimport {\n content,\n smallprint,\n} from '@ux/type-size';\nimport {\n percentage,\n modifier,\n} from '@ux/style-utils';\nimport { Layout } from 'components/common/ProductPrice/constants';\nimport { getTitleColor, getContrastColor } from 'presentation/utils/colorway';\nimport { InnerProps } from './ProductPrice';\nimport { CSSProperties } from 'react';\n\nexport interface Styles {\n root: CSSProperties,\n intro: CSSProperties,\n badge: CSSProperties,\n price: CSSProperties,\n setupFee: CSSProperties,\n fee: CSSProperties,\n renewal: CSSProperties,\n legalCaveat: CSSProperties,\n priceWrapper: CSSProperties,\n pricing: CSSProperties,\n}\nexport default ({\n theme,\n isMinSm,\n isMinLg,\n colorway,\n priceLayout,\n hasProposition,\n hasBadge,\n}: InnerProps) => {\n const {\n spacing,\n typography,\n } = theme;\n\n return useStyles({\n default: {\n root: {\n marginTop: gu2px(3, spacing),\n },\n intro: {\n color: getTitleColor(theme, colorway),\n marginTop: gu2px(2, spacing),\n ...content(typography),\n },\n badge: {\n marginLeft: gu2px(-1, spacing),\n },\n price: {\n color: getContrastColor(theme, colorway),\n marginRight: gu2px(1, spacing),\n },\n setupFee: {\n color: getTitleColor(theme, colorway),\n marginTop: gu2px(1, spacing),\n },\n fee: {\n color: getContrastColor(theme, colorway),\n },\n renewal: {\n color: getTitleColor(theme, colorway),\n },\n legalCaveat: {\n ...smallprint(typography),\n marginTop: gu2px(1, spacing),\n opacity: 0.9,\n },\n },\n [modifier('priceLayout', Layout.COMPACT)]: {\n priceWrapper: {\n display: 'flex',\n width: percentage(100),\n alignItems: 'center',\n justifyContent: 'space-between',\n },\n pricing: {\n flex: 1,\n flexBasis: 'auto',\n textAlign: 'right',\n },\n setupFee: {\n textAlign: 'right',\n marginTop: 0,\n },\n },\n badgeAndNoProposition: {\n pricing: {\n marginTop: gu2px(2, spacing),\n },\n },\n }, [\n { isMinSm },\n { isMinLg },\n { priceLayout },\n { badgeAndNoProposition: hasBadge && !hasProposition && priceLayout !== Layout.COMPACT },\n ]);\n};","// @fabric\nimport pureEnhance from '@ux/pure-enhance';\nimport { withProps } from '@team-griffin/rehook';\nimport { createStructuredSelector } from 'reselect';\nimport { connect } from '@ux/fabric';\nimport ProductPrice from './ProductPrice';\nimport { selectors, productPrice } from '@ux/product';\nimport * as r from 'ramda';\n\nconst { shouldIncludeTax } = selectors;\n\nconst mapStateToProps = createStructuredSelector({\n includeTax: shouldIncludeTax,\n});\n\nconst enhance = pureEnhance('ConnectedProductPrice', [\n withProps(connect(mapStateToProps)),\n withProps(createStructuredSelector({\n displayInterval: r.path([ 'pricingStrategy', 'paymentIntervalDisplay' ]),\n viewMode: r.path([ 'pricingStrategy', 'viewMode' ]),\n interval: r.path([ 'pricingStrategy', 'pricingTier', 'paymentInterval' ]),\n term: r.path([ 'pricingStrategy', 'pricingTier', 'term' ]),\n })),\n productPrice(),\n]);\n\nexport default enhance(ProductPrice);\n","import ConnectedProductPrice from './ConnectedProductPrice';\nimport LegalText from './LegalText';\n\nexport {\n LegalText,\n};\n\nexport default ConnectedProductPrice;\n","export enum Layout {\n COMPACT = 'COMPACT',\n DEFAULT = 'DEFAULT',\n}\n\nexport default null;","import add from \"./add.js\";\n/**\n * Increments its argument.\n *\n * @func\n * @memberOf R\n * @since v0.9.0\n * @category Math\n * @sig Number -> Number\n * @param {Number} n\n * @return {Number} n + 1\n * @see R.dec\n * @example\n *\n * R.inc(42); //=> 43\n */\n\nvar inc =\n/*#__PURE__*/\nadd(1);\nexport default inc;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _classnames = require('classnames');\n\nvar _classnames2 = _interopRequireDefault(_classnames);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ANIMATION_STATE_CLASSES = {\n animating: 'rah-animating',\n animatingUp: 'rah-animating--up',\n animatingDown: 'rah-animating--down',\n animatingToHeightZero: 'rah-animating--to-height-zero',\n animatingToHeightAuto: 'rah-animating--to-height-auto',\n animatingToHeightSpecific: 'rah-animating--to-height-specific',\n static: 'rah-static',\n staticHeightZero: 'rah-static--height-zero',\n staticHeightAuto: 'rah-static--height-auto',\n staticHeightSpecific: 'rah-static--height-specific'\n};\n\nvar PROPS_TO_OMIT = ['animateOpacity', 'animationStateClasses', 'applyInlineTransitions', 'children', 'contentClassName', 'delay', 'duration', 'easing', 'height', 'onAnimationEnd', 'onAnimationStart'];\n\nfunction omit(obj) {\n for (var _len = arguments.length, keys = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n keys[_key - 1] = arguments[_key];\n }\n\n if (!keys.length) {\n return obj;\n }\n\n var res = {};\n var objectKeys = Object.keys(obj);\n\n for (var i = 0; i < objectKeys.length; i++) {\n var key = objectKeys[i];\n\n if (keys.indexOf(key) === -1) {\n res[key] = obj[key];\n }\n }\n\n return res;\n}\n\n// Start animation helper using nested requestAnimationFrames\nfunction startAnimationHelper(callback) {\n var requestAnimationFrameIDs = [];\n\n requestAnimationFrameIDs[0] = requestAnimationFrame(function () {\n requestAnimationFrameIDs[1] = requestAnimationFrame(function () {\n callback();\n });\n });\n\n return requestAnimationFrameIDs;\n}\n\nfunction cancelAnimationFrames(requestAnimationFrameIDs) {\n requestAnimationFrameIDs.forEach(function (id) {\n return cancelAnimationFrame(id);\n });\n}\n\nfunction isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n}\n\nfunction isPercentage(height) {\n // Percentage height\n return typeof height === 'string' && height.search('%') === height.length - 1 && isNumber(height.substr(0, height.length - 1));\n}\n\nfunction runCallback(callback, params) {\n if (callback && typeof callback === 'function') {\n callback(params);\n }\n}\n\nvar AnimateHeight = function (_React$Component) {\n _inherits(AnimateHeight, _React$Component);\n\n function AnimateHeight(props) {\n _classCallCheck(this, AnimateHeight);\n\n var _this = _possibleConstructorReturn(this, (AnimateHeight.__proto__ || Object.getPrototypeOf(AnimateHeight)).call(this, props));\n\n _this.animationFrameIDs = [];\n\n var height = 'auto';\n var overflow = 'visible';\n\n if (isNumber(props.height)) {\n // If value is string \"0\" make sure we convert it to number 0\n height = props.height < 0 || props.height === '0' ? 0 : props.height;\n overflow = 'hidden';\n } else if (isPercentage(props.height)) {\n // If value is string \"0%\" make sure we convert it to number 0\n height = props.height === '0%' ? 0 : props.height;\n overflow = 'hidden';\n }\n\n _this.animationStateClasses = _extends({}, ANIMATION_STATE_CLASSES, props.animationStateClasses);\n\n var animationStateClasses = _this.getStaticStateClasses(height);\n\n _this.state = {\n animationStateClasses: animationStateClasses,\n height: height,\n overflow: overflow,\n shouldUseTransitions: false\n };\n return _this;\n }\n\n _createClass(AnimateHeight, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n var height = this.state.height;\n\n // Hide content if height is 0 (to prevent tabbing into it)\n // Check for contentElement is added cause this would fail in tests (react-test-renderer)\n // Read more here: https://github.com/Stanko/react-animate-height/issues/17\n\n if (this.contentElement && this.contentElement.style) {\n this.hideContent(height);\n }\n }\n }, {\n key: 'componentDidUpdate',\n value: function componentDidUpdate(prevProps, prevState) {\n var _this2 = this;\n\n var _props = this.props,\n delay = _props.delay,\n duration = _props.duration,\n height = _props.height,\n onAnimationEnd = _props.onAnimationEnd,\n onAnimationStart = _props.onAnimationStart;\n\n // Check if 'height' prop has changed\n\n if (this.contentElement && height !== prevProps.height) {\n var _cx;\n\n // Remove display: none from the content div\n // if it was hidden to prevent tabbing into it\n this.showContent(prevState.height);\n\n // Cache content height\n this.contentElement.style.overflow = 'hidden';\n var contentHeight = this.contentElement.offsetHeight;\n this.contentElement.style.overflow = '';\n\n // set total animation time\n var totalDuration = duration + delay;\n\n var newHeight = null;\n var timeoutState = {\n height: null, // it will be always set to either 'auto' or specific number\n overflow: 'hidden'\n };\n var isCurrentHeightAuto = prevState.height === 'auto';\n\n if (isNumber(height)) {\n // If value is string \"0\" make sure we convert it to number 0\n newHeight = height < 0 || height === '0' ? 0 : height;\n timeoutState.height = newHeight;\n } else if (isPercentage(height)) {\n // If value is string \"0%\" make sure we convert it to number 0\n newHeight = height === '0%' ? 0 : height;\n timeoutState.height = newHeight;\n } else {\n // If not, animate to content height\n // and then reset to auto\n newHeight = contentHeight; // TODO solve contentHeight = 0\n timeoutState.height = 'auto';\n timeoutState.overflow = null;\n }\n\n if (isCurrentHeightAuto) {\n // This is the height to be animated to\n timeoutState.height = newHeight;\n\n // If previous height was 'auto'\n // set starting height explicitly to be able to use transition\n newHeight = contentHeight;\n }\n\n // Animation classes\n var animationStateClasses = (0, _classnames2.default)((_cx = {}, _defineProperty(_cx, this.animationStateClasses.animating, true), _defineProperty(_cx, this.animationStateClasses.animatingUp, prevProps.height === 'auto' || height < prevProps.height), _defineProperty(_cx, this.animationStateClasses.animatingDown, height === 'auto' || height > prevProps.height), _defineProperty(_cx, this.animationStateClasses.animatingToHeightZero, timeoutState.height === 0), _defineProperty(_cx, this.animationStateClasses.animatingToHeightAuto, timeoutState.height === 'auto'), _defineProperty(_cx, this.animationStateClasses.animatingToHeightSpecific, timeoutState.height > 0), _cx));\n\n // Animation classes to be put after animation is complete\n var timeoutAnimationStateClasses = this.getStaticStateClasses(timeoutState.height);\n\n // Set starting height and animating classes\n // We are safe to call set state as it will not trigger infinite loop\n // because of the \"height !== prevProps.height\" check\n this.setState({ // eslint-disable-line react/no-did-update-set-state\n animationStateClasses: animationStateClasses,\n height: newHeight,\n overflow: 'hidden',\n // When animating from 'auto' we first need to set fixed height\n // that change should be animated\n shouldUseTransitions: !isCurrentHeightAuto\n });\n\n // Clear timeouts\n clearTimeout(this.timeoutID);\n clearTimeout(this.animationClassesTimeoutID);\n\n if (isCurrentHeightAuto) {\n // When animating from 'auto' we use a short timeout to start animation\n // after setting fixed height above\n timeoutState.shouldUseTransitions = true;\n\n cancelAnimationFrames(this.animationFrameIDs);\n this.animationFrameIDs = startAnimationHelper(function () {\n _this2.setState(timeoutState);\n\n // ANIMATION STARTS, run a callback if it exists\n runCallback(onAnimationStart, { newHeight: timeoutState.height });\n });\n\n // Set static classes and remove transitions when animation ends\n this.animationClassesTimeoutID = setTimeout(function () {\n _this2.setState({\n animationStateClasses: timeoutAnimationStateClasses,\n shouldUseTransitions: false\n });\n\n // ANIMATION ENDS\n // Hide content if height is 0 (to prevent tabbing into it)\n _this2.hideContent(timeoutState.height);\n // Run a callback if it exists\n runCallback(onAnimationEnd, { newHeight: timeoutState.height });\n }, totalDuration);\n } else {\n // ANIMATION STARTS, run a callback if it exists\n runCallback(onAnimationStart, { newHeight: newHeight });\n\n // Set end height, classes and remove transitions when animation is complete\n this.timeoutID = setTimeout(function () {\n timeoutState.animationStateClasses = timeoutAnimationStateClasses;\n timeoutState.shouldUseTransitions = false;\n\n _this2.setState(timeoutState);\n\n // ANIMATION ENDS\n // If height is auto, don't hide the content\n // (case when element is empty, therefore height is 0)\n if (height !== 'auto') {\n // Hide content if height is 0 (to prevent tabbing into it)\n _this2.hideContent(newHeight); // TODO solve newHeight = 0\n }\n // Run a callback if it exists\n runCallback(onAnimationEnd, { newHeight: newHeight });\n }, totalDuration);\n }\n }\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n cancelAnimationFrames(this.animationFrameIDs);\n\n clearTimeout(this.timeoutID);\n clearTimeout(this.animationClassesTimeoutID);\n\n this.timeoutID = null;\n this.animationClassesTimeoutID = null;\n this.animationStateClasses = null;\n }\n }, {\n key: 'showContent',\n value: function showContent(height) {\n if (height === 0) {\n this.contentElement.style.display = '';\n }\n }\n }, {\n key: 'hideContent',\n value: function hideContent(newHeight) {\n if (newHeight === 0) {\n this.contentElement.style.display = 'none';\n }\n }\n }, {\n key: 'getStaticStateClasses',\n value: function getStaticStateClasses(height) {\n var _cx2;\n\n return (0, _classnames2.default)((_cx2 = {}, _defineProperty(_cx2, this.animationStateClasses.static, true), _defineProperty(_cx2, this.animationStateClasses.staticHeightZero, height === 0), _defineProperty(_cx2, this.animationStateClasses.staticHeightSpecific, height > 0), _defineProperty(_cx2, this.animationStateClasses.staticHeightAuto, height === 'auto'), _cx2));\n }\n }, {\n key: 'render',\n value: function render() {\n var _cx3,\n _this3 = this;\n\n var _props2 = this.props,\n animateOpacity = _props2.animateOpacity,\n applyInlineTransitions = _props2.applyInlineTransitions,\n children = _props2.children,\n className = _props2.className,\n contentClassName = _props2.contentClassName,\n duration = _props2.duration,\n easing = _props2.easing,\n delay = _props2.delay,\n style = _props2.style;\n var _state = this.state,\n height = _state.height,\n overflow = _state.overflow,\n animationStateClasses = _state.animationStateClasses,\n shouldUseTransitions = _state.shouldUseTransitions;\n\n\n var componentStyle = _extends({}, style, {\n height: height,\n overflow: overflow || style.overflow\n });\n\n if (shouldUseTransitions && applyInlineTransitions) {\n componentStyle.transition = 'height ' + duration + 'ms ' + easing + ' ' + delay + 'ms';\n\n // Include transition passed through styles\n if (style.transition) {\n componentStyle.transition = style.transition + ', ' + componentStyle.transition;\n }\n\n // Add webkit vendor prefix still used by opera, blackberry...\n componentStyle.WebkitTransition = componentStyle.transition;\n }\n\n var contentStyle = {};\n\n if (animateOpacity) {\n contentStyle.transition = 'opacity ' + duration + 'ms ' + easing + ' ' + delay + 'ms';\n // Add webkit vendor prefix still used by opera, blackberry...\n contentStyle.WebkitTransition = contentStyle.transition;\n\n if (height === 0) {\n contentStyle.opacity = 0;\n }\n }\n\n var componentClasses = (0, _classnames2.default)((_cx3 = {}, _defineProperty(_cx3, animationStateClasses, true), _defineProperty(_cx3, className, className), _cx3));\n\n return _react2.default.createElement(\n 'div',\n _extends({}, omit.apply(undefined, [this.props].concat(PROPS_TO_OMIT)), {\n 'aria-hidden': height === 0,\n className: componentClasses,\n style: componentStyle\n }),\n _react2.default.createElement(\n 'div',\n {\n className: contentClassName,\n style: contentStyle,\n ref: function ref(el) {\n return _this3.contentElement = el;\n }\n },\n children\n )\n );\n }\n }]);\n\n return AnimateHeight;\n}(_react2.default.Component);\n\nvar heightPropType = function heightPropType(props, propName, componentName) {\n var value = props[propName];\n\n if (typeof value === 'number' && value >= 0 || isPercentage(value) || value === 'auto') {\n return null;\n }\n\n return new TypeError('value \"' + value + '\" of type \"' + (typeof value === 'undefined' ? 'undefined' : _typeof(value)) + '\" is invalid type for ' + propName + ' in ' + componentName + '. ' + 'It needs to be a positive number, string \"auto\" or percentage string (e.g. \"15%\").');\n};\n\nAnimateHeight.propTypes = {\n animateOpacity: _propTypes2.default.bool,\n animationStateClasses: _propTypes2.default.object,\n applyInlineTransitions: _propTypes2.default.bool,\n children: _propTypes2.default.any.isRequired,\n className: _propTypes2.default.string,\n contentClassName: _propTypes2.default.string,\n duration: _propTypes2.default.number,\n delay: _propTypes2.default.number,\n easing: _propTypes2.default.string,\n height: heightPropType,\n onAnimationEnd: _propTypes2.default.func,\n onAnimationStart: _propTypes2.default.func,\n style: _propTypes2.default.object\n};\n\nAnimateHeight.defaultProps = {\n animateOpacity: false,\n animationStateClasses: ANIMATION_STATE_CLASSES,\n applyInlineTransitions: true,\n duration: 250,\n delay: 0,\n easing: 'ease',\n style: {}\n};\n\nexports.default = AnimateHeight;","import add from \"./add.js\";\n/**\n * Decrements its argument.\n *\n * @func\n * @memberOf R\n * @since v0.9.0\n * @category Math\n * @sig Number -> Number\n * @param {Number} n\n * @return {Number} n - 1\n * @see R.inc\n * @example\n *\n * R.dec(42); //=> 41\n */\n\nvar dec =\n/*#__PURE__*/\nadd(-1);\nexport default dec;"],"sourceRoot":""}