{"version":3,"sources":["components/CardListInTheBlack/StyledCardList.ts","components/CardListInTheBlack/ItemsWrapper.tsx","components/CardListInTheBlack/validation.ts","components/CardListInTheBlack/index.tsx"],"names":["Header","styled","div","theme","cardListInTheBlack","color","headingColor","ListItem","Grid","Item","showOnPrint","Container","background","CarouselContainer","spacing","ml","xs","grid","gutter","size","md","lg","mr","mq","avoidPageBreakOnPrint","pl","pr","py","PrevNextPosition","css","List","Row","LinkButton","mt","NavLink","link","Text","textBody2","span","svg","action","Link","linkWithoutVisited","button","ctaColor","LinkWrapper","mb","my","hideOnPrint","ItemWrapper","carouselEnabled","children","trackingName","flickityOptions","groupCells","cellAlign","CTA","props","className","field","fallbackTitle","linkTheme","compose","withDataSourceValidation","errorMessage","minLength","allowRenderOnError","validators","url","title","withEditMode","rendering","editMode","fields","data","datasource","params","uid","layoutType","normalized","normalizeJssFields","heading","description","items","headingLevel","validItems","filter","item","hasItems","length","bp","useBreakpoint","canUseDOM","sm","xl","multiColumnSettings","responsiveColumnConfig","col","level","parseInt","toLowerCase","replace","shouldShowCTA","value","href","id","numItems","HeadingWithDescription","headingField","descriptionField","ItemsWrapper","map","index","config","key","ContentCard","showCategoryTag"],"mappings":"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","file":"static/js/CardListInTheBlack.61b786a7.chunk.js","sourcesContent":["import { Text } from '@sitecore-jss/sitecore-jss-react';\r\nimport styled, { css } from 'styled-components';\r\nimport { NavLink } from 'react-router-dom';\r\n\r\nimport {\r\n Grid,\r\n Link,\r\n} from '_utils/components';\r\nimport {\r\n Container as CarouselContainer,\r\n PrevNextPosition,\r\n} from '_utils/components/Carousel/StyledCarousel';\r\nimport {\r\n avoidPageBreakOnPrint,\r\n button,\r\n hideOnPrint,\r\n link,\r\n linkWithoutVisited,\r\n mq,\r\n showOnPrint,\r\n svg,\r\n textBody2\r\n} from '_utils/styles';\r\nimport { spacing } from '_utils/props';\r\n\r\nexport const Header = styled.div`\r\n color: ${({ theme }) => theme.cardListInTheBlack.color};\r\n\r\n h1,\r\n h2,\r\n h3,\r\n h4,\r\n h5 {\r\n color: ${({ theme }) => theme.cardListInTheBlack.headingColor ? theme.cardListInTheBlack.headingColor : null};\r\n }\r\n`;\r\n\r\nexport const ListItem = styled(Grid.Item)`\r\n display: flex;\r\n flex-direction: column;\r\n min-height: 100%;\r\n\r\n &.is-hidden {\r\n display: none;\r\n ${showOnPrint}\r\n }\r\n\r\n @media print {\r\n display: inline-block !important;\r\n margin:0;\r\n width: 33%;\r\n }\r\n`;\r\n\r\nexport const Container = styled(Grid.Container)`\r\n background: ${({ theme }) => theme.cardListInTheBlack.background};\r\n\r\n // if carousel, ensure shadows aren't cut off and apply negative margin to extend full width in < lg breakpoints\r\n ${CarouselContainer} {\r\n ${({ theme }) => spacing({\r\n theme,\r\n ml: {\r\n xs: `-${theme.grid.gutter.size.xs}px`,\r\n md: `-${theme.grid.gutter.size.md}px`,\r\n lg: `-${theme.grid.gutter.size.lg}px`,\r\n },\r\n mr: {\r\n xs: `${theme.grid.gutter.size.xs * 2}px`,\r\n md: `${theme.grid.gutter.size.md * 2}px`,\r\n lg: `${theme.grid.gutter.size.lg * 2}px`,\r\n }\r\n})}\r\n\r\n width: ${({ theme }) => `calc(100% + ${theme.grid.gutter.size.xs * 2}px)`};\r\n\r\n ${mq('md')} {\r\n width: ${({ theme }) => `calc(100% + ${theme.grid.gutter.size.md * 2}px)`};\r\n }\r\n\r\n ${mq('lg')} {\r\n width: ${({ theme }) => `calc(100% + ${theme.grid.gutter.size.lg}px)`};\r\n }\r\n\r\n .flickity-slider {\r\n\r\n ${avoidPageBreakOnPrint}\r\n\r\n @media print {\r\n overflow: hidden;\r\n white-space: pre-wrap;\r\n }\r\n\r\n ${ListItem} {\r\n ${({ theme }) => spacing({\r\n theme,\r\n pl: {\r\n xs: `${theme.grid.gutter.size.xs}px`,\r\n md: 3,\r\n lg: 0,\r\n },\r\n pr: {\r\n xs: 0,\r\n md: 0,\r\n lg: `${theme.grid.gutter.size.lg}px`,\r\n },\r\n py: {\r\n xs: 1,\r\n md: 1,\r\n lg: 1,\r\n },\r\n})}\r\n\r\n ${mq('lg')} {\r\n transform: ${({ theme }) => `translateX(${theme.grid.gutter.size.lg}px)`};\r\n }\r\n }\r\n\r\n /* Corrections to the last card, to allow it to sit on the end edge with shadow overflowing right */\r\n\r\n }\r\n\r\n ${PrevNextPosition} {\r\n &.prev {\r\n ${({ theme }) => css`\r\n left: ${theme.grid.gutter.size.xs}px;\r\n\r\n ${mq('md')} {\r\n left: ${theme.grid.gutter.size.md}px;\r\n }\r\n\r\n ${mq('lg')} {\r\n left: 64px;\r\n }\r\n `}\r\n }\r\n\r\n &.next {\r\n ${({ theme }) => css`\r\n right: ${theme.grid.gutter.size.xs}px;\r\n\r\n ${mq('md')} {\r\n right: ${theme.grid.gutter.size.md}px;\r\n }\r\n\r\n ${mq('lg')} {\r\n right: 52px;\r\n }\r\n `}\r\n }\r\n }\r\n }\r\n`;\r\n\r\nexport const List = styled(Grid.Row)`\r\n list-style: none;\r\n padding: 0;\r\n\r\n /* beat specificity of grid breakpoints */\r\n && {\r\n margin-top: 0;\r\n }\r\n\r\n ${avoidPageBreakOnPrint}\r\n\r\n @media print {\r\n display: block;\r\n width: 100%;\r\n }\r\n`;\r\n\r\nexport const FooterLinkContainer = styled.div`\r\n ${({ theme }) => spacing({ theme, mt: 3 })}\r\n`;\r\n\r\nexport const FooterLink = styled(NavLink)`\r\n ${link};\r\n`;\r\n\r\nexport const FooterLinkLabel = styled(Text)`\r\n ${textBody2}\r\n`;\r\n\r\nexport const ArrowWrapper = styled.span`\r\n ${svg(14, 14)}\r\n margin-left: 6px;\r\n margin-right: 2px;\r\n width: 14px;\r\n\r\n path {\r\n fill: ${({ theme }) => theme.cardListInTheBlack.action};\r\n }\r\n`;\r\n\r\nexport const LinkButton = styled(Link)`\r\n a {\r\n ${linkWithoutVisited}\r\n ${({ theme }) => button('slim', theme.cardListInTheBlack.ctaColor)};\r\n width: 100%;\r\n\r\n svg {\r\n top: 2px;\r\n }\r\n\r\n ${mq('md')} {\r\n width: auto;\r\n }\r\n }\r\n`;\r\n\r\nexport const LinkWrapper = styled.div`\r\n ${({ theme }) => spacing({ theme, mt: 4, mb: 7 })};\r\n\r\n &.hideOnMobile {\r\n display: none;\r\n }\r\n\r\n ${mq('md')} {\r\n &.hideOnMobile {\r\n display: block;\r\n }\r\n\r\n &.showOnMobile {\r\n display: none;\r\n }\r\n\r\n ${({ theme }) => spacing({ theme, my: 0 })};\r\n }\r\n\r\n ${hideOnPrint}\r\n`;\r\n","import React from 'react';\r\nimport { List } from './StyledCardList';\r\nimport { Carousel } from '_utils/components';\r\n\r\nconst ItemWrapper = ({ carouselEnabled, children, trackingName }) => {\r\n return !carouselEnabled ?\r\n \r\n {children}\r\n \r\n :\r\n \r\n {children}\r\n \r\n};\r\n\r\nexport default ItemWrapper;\r\n","import { SitecoreFieldValidator } from '_utils/validationChecks/definitions';\r\n\r\nexport const cardListFieldValidators: SitecoreFieldValidator[] = [\r\n {\r\n field: 'rendering.fields.data.datasource.items',\r\n errorMessage: 'At least one card must be provided',\r\n minLength: 1\r\n },\r\n {\r\n field: 'rendering.fields.data.datasource.items',\r\n errorMessage: 'Some cards do not have valid links',\r\n allowRenderOnError: true,\r\n validators: [\r\n (field) => field?.url\r\n ]\r\n },\r\n {\r\n field: 'rendering.fields.data.datasource.items',\r\n errorMessage: 'Some cards do not have valid titles',\r\n allowRenderOnError: true,\r\n validators: [\r\n (field) => field?.title\r\n ]\r\n }\r\n];\r\n","import { canUseDOM } from 'exenv';\r\nimport { compose } from 'ramda';\r\nimport React from 'react';\r\n\r\nimport {\r\n CoveoNoIndexWrapper,\r\n withDataSourceValidation,\r\n withEditMode,\r\n} from '_containers/BaseComponent';\r\n\r\nimport ContentCard from '_utils/components/ContentCard';\r\nimport HeadingWithDescription from '_utils/components/HeadingWithDescription';\r\n\r\nimport { normalizeJssFields } from '_utils/helpers/jss';\r\nimport { useBreakpoint } from '_utils/hooks/useBreakpoint';\r\n\r\nimport ItemsWrapper from './ItemsWrapper';\r\n\r\nimport {\r\n Container,\r\n Header,\r\n LinkButton,\r\n LinkWrapper,\r\n ListItem,\r\n} from './StyledCardList';\r\n\r\nimport { CardListInTheBlackProps } from './definitions';\r\nimport { cardListFieldValidators } from './validation';\r\n\r\nconst CTA = (props) => {\r\n const { link, className } = props;\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nconst CardListInTheBlack: React.FC = ({ rendering, editMode }) => {\r\n\r\n const fields = rendering?.fields?.data?.datasource || {};\r\n const params = rendering?.params;\r\n const uid = rendering?.uid || null;\r\n\r\n //-Default to Carousel because autopopulated card list should use it, and it doesn't have the option to choose List\r\n const layoutType = params?.layoutType || 'Carousel';\r\n\r\n const normalized = normalizeJssFields(fields);\r\n const heading = normalized?.heading;\r\n const description = normalized?.description;\r\n const items = normalized?.items || [];\r\n const link = normalized?.link;\r\n const trackingName = normalized?.trackingName;\r\n const headingLevel = params?.headingLevel || 'h3';\r\n const validItems = !editMode ? items.filter((item) => item.url) : items;\r\n const hasItems = editMode || (validItems?.length > 0);\r\n\r\n // carousel functionality\r\n // define how many cards required to trigger carousel behaviour\r\n const bp = useBreakpoint();\r\n const numValidItemsToRenderCarousel = {\r\n xs: 2,\r\n sm: 2,\r\n md: 4,\r\n lg: 4,\r\n xl: 4,\r\n };\r\n\r\n const carouselEnabled = !editMode && canUseDOM && layoutType === 'Carousel' && validItems?.length >= numValidItemsToRenderCarousel[bp];\r\n\r\n // nested responsive behaviour\r\n const multiColumnSettings = {\r\n md: {\r\n 1: 4,\r\n 2: 6,\r\n },\r\n lg: {\r\n 1: 12,\r\n 2: 6,\r\n 3: 4\r\n },\r\n xl: {\r\n 1: 12,\r\n 2: 6,\r\n 3: 4\r\n },\r\n };\r\n\r\n const responsiveColumnConfig =\r\n // nested behaviour\r\n !carouselEnabled ?\r\n {\r\n col: {\r\n xs: 12,\r\n md: multiColumnSettings.md[validItems.length < 3 ? validItems.length : 2],\r\n lg: multiColumnSettings.lg[validItems.length < 3 ? validItems.length : 3],\r\n xl: multiColumnSettings.lg[validItems.length < 3 ? validItems.length : 3],\r\n }\r\n }\r\n :\r\n // carousel behaviour\r\n {\r\n col: {\r\n xs: 10,\r\n md: 5,\r\n lg: 4,\r\n xl: 4,\r\n }\r\n }\r\n ;\r\n\r\n const level = parseInt(headingLevel?.toLowerCase().replace('h', '')) || 3;\r\n const shouldShowCTA: boolean = !!(editMode || (link && link?.value?.href));\r\n\r\n return (\r\n \r\n {(editMode || hasItems) &&\r\n \r\n {(heading || description) && (\r\n
\r\n \r\n {shouldShowCTA && }\r\n \r\n
\r\n )}\r\n {hasItems &&\r\n \r\n {validItems.map((item, index) => (\r\n \r\n \r\n \r\n ))}\r\n \r\n }\r\n {shouldShowCTA && }\r\n \r\n }\r\n
\r\n );\r\n};\r\n\r\nexport default\r\n compose(\r\n withDataSourceValidation(cardListFieldValidators),\r\n withEditMode\r\n )(CardListInTheBlack);\r\n"],"sourceRoot":""}