{"version":3,"file":"static/chunks/5289.ba61be088641e97c.js","mappings":"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","sources":["webpack://_N_E/./core--client--components/src/components/atoms/ButtonLink/ButtonLink.tsx","webpack://_N_E/./core--client--components/src/components/atoms/ContentfulImage/ContentfulImage.tsx","webpack://_N_E/./core--client--components/src/components/atoms/Heading/Heading.tsx","webpack://_N_E/./core--client--components/src/components/atoms/Typography/TextClasses.ts","webpack://_N_E/./core--client--components/src/components/molecules/Quote/Quote.tsx","webpack://_N_E/./core--client--components/src/lib/utils/youtubeParser.tsx","webpack://_N_E/./core--client--components/src/lib/dataSource/contentful/containers/RichTextContainer/RichTextContainer.tsx","webpack://_N_E/./core--client--components/src/lib/utils/stringReplace/common.ts","webpack://_N_E/./src/components/atoms/Divider/Divider.tsx","webpack://_N_E/./src/components/molecules/CardArticle/CardArticle.tsx","webpack://_N_E/./src/components/organisms/ArticlesDisplay/ArticlesDisplay.tsx","webpack://_N_E/./src/components/molecules/ArticleHeadline/ArticleHeadline.tsx","webpack://_N_E/./src/components/molecules/ArticleShare/ArticleShare.tsx","webpack://_N_E/./src/components/molecules/BreadCrumb/BreadCrumb.tsx","webpack://_N_E/./src/components/templates/ArticleTemplate/Blocks/ImageBlock.tsx","webpack://_N_E/./src/components/templates/ArticleTemplate/ArticleTemplate.tsx","webpack://_N_E/./src/lib/analytics/handlers/eventLogHandler.ts","webpack://_N_E/./src/lib/analytics/handlers/klaviyoEventHandler.ts","webpack://_N_E/./src/lib/analytics/commonEmitter.ts","webpack://_N_E/./src/lib/analytics/eventEmitter.ts","webpack://_N_E/./src/lib/analytics/handlers/abstractAnalyticsHandler.ts","webpack://_N_E/./src/lib/analytics/handlers/googleTagManagerHandler.ts","webpack://_N_E/./src/lib/utils/analytics/share.ts","webpack://_N_E/./src/lib/utils/getBaseUrl/getBaseUrl.ts","webpack://_N_E/./src/lib/utils/helpers/dateHelpers/dates.ts","webpack://_N_E/./src/lib/utils/helpers/stringHelpers/capitalizeFirstLetter.ts","webpack://_N_E/./node_modules/clsx/dist/clsx.mjs","webpack://_N_E/<anon>"],"sourcesContent":["import Link, { LinkProps } from 'next/link';\nimport React, { HTMLProps, Ref } from 'react';\n\n/**\n * IButtonLink Interface for the ButtonLink component\n *\n * @interface\n */\nexport interface IButtonLink {\n  /**\n   * The version of the button to display either light or dark\n   *\n   * @memberof IButtonLink\n   * @member {'light' | 'dark'} variant\n   */\n  variant: 'light' | 'dark' | 'lightBlue' | 'pink';\n  /**\n   * Whether the button is disabled\n   *\n   * @memberof IButtonLink\n   * @default false\n   * @member {boolean} [disabled]\n   */\n  disabled?: boolean;\n  /**\n   * The target of the link\n   *\n   * @memberof IButtonLink\n   * @member {string} [target]\n   */\n  target?: string;\n  /**\n   * The children of the button\n   *\n   * @memberof IButtonLink\n   * @member {string} children\n   */\n  children: string;\n  /**\n   * The color scheme used for the button link\n   *\n   * @memberof IButtonLink\n   * @member {'primary' | 'secondary' | 'tertiary'} [color]\n   */\n  color?: 'primary' | 'secondary' | 'tertiary';\n  /**\n   * The ref of the button link\n   *\n   * @memberof IButtonLink\n   * @member {Ref<HTMLAnchorElement>} [ref]\n   */\n  ref?: Ref<HTMLAnchorElement>;\n}\n\n/**\n * Button Link Props\n *\n * @type {ButtonLinkProps} Type That combines the IButtonLink interface with the\n *   HTMLProps<HTMLAnchorElement> & LinkProps from NextJS\n */\nexport type ButtonLinkProps = IButtonLink &\n  LinkProps &\n  HTMLProps<HTMLAnchorElement>;\n\n/**\n * Button Base Font Properties This is the base font properties for the button.\n *\n * @constant\n */\nconst baseFont =\n  'font-petco text-base font-bold border-b-[3px] pb-1.5 border-b-solid focus:ring-invisible transition-colors duration-200 ease-in-out';\n\n/**\n * Variant Classes Map This map is used to map the variant prop to the\n * appropriate tailwind classes.\n *\n * @constant\n */\nconst variantClasses = {\n  primary: {\n    light:\n      'text-secondaryBase-400 border-base-300 hover:text-base-300 hover:border-base-300',\n    dark: 'text-neutral-100 border-neutral-100 hover:text-base-300 hover:border-base-300',\n    lightBlue:\n      'text-mkNavy-400 border-mkLightBlue-400 hover:text-mkNavy-400 hover:border-mkNavy-400',\n    pink: 'text-mkNavy-400 border-mkPink-400 hover:text-mkNavy-400 hover:border-mkNavy-400',\n  },\n  secondary: {\n    light:\n      'text-secondaryBase-400 border-mkPink-400 hover:text-secondaryBase-400 hover:border-secondaryBase-400',\n    dark: 'text-mkPink-400 border-mkPink-400 hover:text-neutral-100 hover:border-neutral-100',\n    lightBlue:\n      'text-mkNavy-400 border-mkLightBlue-400 hover:text-mkNavy-400 hover:border-mkNavy-400',\n    pink: 'text-mkNavy-400 border-mkPink-400 hover:text-mkNavy-400 hover:border-mkNavy-400',\n  },\n  tertiary: {\n    light:\n      'text-secondaryBase-400 border-mkLightBlue-400 hover:text-secondaryBase-400 hover:border-secondaryBase-400',\n    dark: 'text-mkLightBlue-400 border-mkLightBlue-400 hover:text-neutral-100 hover:border-neutral-100',\n    lightBlue:\n      'text-mkNavy-400 border-mkLightBlue-400 hover:text-mkNavy-400 hover:border-mkNavy-400',\n    pink: 'text-mkNavy-400 border-mkPink-400 hover:text-mkNavy-400 hover:border-mkNavy-400',\n  },\n};\n\n/**\n * Wrapper Focus Styles This is the focus styles for the button.\n *\n * @constant\n */\nconst wrapperFocusStyles =\n  'focus-visible:ring-1 focus-visible:ring-focus-400 focus-visible:rounded focus-visible:ring-offset-4 focus-visible:outline-0 focus-visible:outline-transparent';\n\n/**\n * Link Disabled Styles This is the disabled styles for the button.\n *\n * @constant\n */\nconst disabledStyles = {\n  light: 'text-neutral-500 border-neutral-500 cursor-not-allowed',\n  dark: 'text-neutral-300 border-neutral-300 cursor-not-allowed',\n  lightBlue:\n    'text-neutral-400 border-neutral-400 hover:text-neutral-400 hover:border-neutral-400 cursor-not-allowed',\n  pink: 'text-neutral-400 border-neutral-400 hover:text-neutral-400 hover:border-neutral-400 cursor-not-allowed',\n};\n\nconst removeFocusStyles =\n  'focus:outline-none focus:ring-0 focus-visible:ring-0 focus-visible:outline-none';\n\n/**\n * ButtonLink - A button used to navigate to a different page.\n *\n * @param {IButtonLink} props - The props for the ButtonLink component\n * @returns {React.FC<ButtonLinkProps>} Button Link Component\n */\nconst ButtonLink: React.FC<ButtonLinkProps> = ({\n  variant,\n  href,\n  as,\n  disabled = false,\n  children,\n  replace,\n  scroll,\n  shallow,\n  passHref,\n  className = '',\n  color = 'primary',\n  ...rest\n}: ButtonLinkProps) => {\n  const variantStyles = disabled\n    ? disabledStyles[variant]\n    : variantClasses[color][variant];\n  const cls = `${baseFont} ${variantStyles} ${wrapperFocusStyles}`;\n  const dataTestId = `button-link-${variant}-${disabled}`;\n\n  return (\n    <div\n      className={`${className} ${removeFocusStyles}`}\n      data-testid={dataTestId}\n    >\n      <Link\n        href={href}\n        as={as}\n        passHref={passHref}\n        replace={replace}\n        scroll={scroll}\n        shallow={shallow}\n        className={`${cls} ${removeFocusStyles}`}\n        {...rest}\n      >\n        {children}\n      </Link>\n    </div>\n  );\n};\n\nexport default ButtonLink;\n","import contentFulImageLoader from '@/component-library-lib/loaders/contentfulImageLoader';\nimport Image, { ImageProps } from \"next/legacy/image\";\n\n/**\n * ContentfulImage An image from the CDN\n *\n * @param {ImageProps} props - The props for the ContentfulImage component\n * @returns {React.FC<ImageProps>} Component\n */\nconst ContentfulImage: React.FC<ImageProps> = (props: ImageProps) => {\n  return (\n    <Image\n      data-testid=\"contentful-image\"\n      {...props}\n      alt={props.alt || 'contentful image'}\n      loader={contentFulImageLoader}\n    />\n  );\n};\n\nexport default ContentfulImage;\n","import { headingFontClasses } from '@/component-library/atoms/Typography/TextClasses';\n\n/**\n * IHeading Interface for Heading component\n *\n * @interface\n */\nexport interface IHeading extends React.HTMLAttributes<HTMLHeadingElement> {\n  /** The size of the heading. Can be 'h1', 'h2', 'h3', 'h4', 'h5', or 'h6'. */\n  size: 'display1' | 'display2' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n  /**\n   * The font of the heading to display. Can be 'petco' or 'amasis'\n   *\n   * @default 'petco'\n   */\n  font?: 'petco' | 'amasis';\n  /** The content of the heading. */\n  children: string | React.ReactNode;\n}\n\n/**\n * Heading Type Types of headings allowed\n *\n * @type {'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6'}\n */\ntype HeadingType = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n\n/**\n * Heading - The heading is used to encapsulate H1-H6 tags. It allows for the\n * size to be changed and the text to be passed in as a child.\n *\n * @param {IHeading} props - The props for the Heading component\n * @returns {React.FC<IHeading>} Heading Component\n */\nconst Heading: React.FC<IHeading> = ({\n  size,\n  font = 'petco',\n  children,\n  className,\n  ...rest\n}: IHeading) => {\n  let HeadingTag: HeadingType;\n  // Set the Heading Tag based on the size prop passed in.\n  if (size === 'display1' || size === 'display2') {\n    HeadingTag = 'h1';\n  } else {\n    HeadingTag = size;\n  }\n  const headingFontClass = headingFontClasses[font];\n  const fontTypeClass = font === 'petco' ? 'font-petco' : 'font-amasis';\n  const tagClasses = `text-${size} ${fontTypeClass} ${headingFontClass} ${className}`;\n  return (\n    <HeadingTag className={tagClasses} data-testid={size} {...rest}>\n      {children}\n    </HeadingTag>\n  );\n};\n\nexport default Heading;\n","/**\n * Heading Font Classes\n * Used to set particular classes for particular fonts\n * @constant\n */\nexport const headingFontClasses = {\n  petco: 'font-bold',\n  amasis: '',\n};\n\n/**\n * Body Size Classes\n * Used to the set the classes for the body size\n * @constant\n */\nexport const bodySizeClasses = {\n  body1: 'text-[22px] leading-[32px]',\n  body2: 'text-[20px] leading-[28px]',\n  body3: 'text-[18px] leading-[26px]',\n  body4: 'text-[16px] leading-[24px]',\n  body5: 'text-[14px] leading-[22px]',\n  overline: 'text-[12px] leading-[20px]',\n};\n\n/**\n * Body Styling Classes\n * Used to the set the classes for the body styling\n * @constant\n */\nexport const bodyStylingClasses = {\n  regular: '',\n  bold: 'font-bold',\n  italic: 'italic',\n  boldItalic: 'font-bold italic',\n  link: 'text-base-400 underline',\n};\n","import Icon from '@/component-library/atoms/Icon/Icon';\n\n/**\n * IQuote This is the interface for the Quote component.\n *\n * @interface\n */\nexport interface IQuote {\n  /** Quote text */\n  text: string;\n  /**\n   * Optional Classes for component\n   *\n   * @default ''\n   */\n  classes?: string;\n}\n\n/**\n * Quote\n *\n * A component to display a quote\n *\n * @param {IQuote} props - The props for the Quote component\n * @returns {React.FC<IQuote>} Quote Component\n */\nconst Quote: React.FC<IQuote> = ({ text, classes = '' }) => {\n  return (\n    <div\n      data-testid=\"quote\"\n      className={`flex flex-col items-center ${classes}`}\n    >\n      <Icon icon=\"quote\" size={42} colorType=\"base\" colorShade={300}></Icon>\n      <span>\n        <h2 className=\"font-amasis font-light line-clamp-3 mt-[16px] md:mt-[24px] text-center text-h2 \">\n          {text}\n        </h2>\n      </span>\n    </div>\n  );\n};\n\nexport default Quote;\n","import React from 'react';\n\n/**\n * Extracts the videoId from a YouTube URL and returns an iframe element for\n * embedding the video.\n *\n * @param {string} url - The YouTube URL from which to extract the videoId.\n * @returns {React.ReactNode} - The iframe element for embedding the video, or\n *   null if the videoId is invalid or not found.\n */\nconst youtubeParser = (url: string): React.ReactElement | null => {\n  // Extract videoId from the URL\n  const match =\n    /^.*((youtu.be\\/)|(v\\/)|(\\/u\\/\\w\\/)|(embed\\/)|(watch\\?))\\??v?=?([v]?[a-zA-Z0-9_-]{11}).*/.exec(\n      url\n    );\n\n  const videoId = match && match[7].length === 11 ? match[7] : null;\n  if (videoId) {\n    return (\n      <iframe\n        className=\"aspect-video w-full mb-5 rounded-3xl\"\n        title={`https://youtube.com/embed/${videoId}`}\n        src={`https://youtube.com/embed/${videoId}`}\n        allow=\"accelerometer; encrypted-media; gyroscope; picture-in-picture\"\n        allowFullScreen\n      />\n    );\n  } else {\n    return null;\n  }\n};\n\nexport default youtubeParser;\n","import { InferContentfulResponse } from '@/component-library-lib/dataSource/contentful/helpers';\nimport { Topics } from '@/component-library-lib/dataSource/contentful/models/topics';\nimport { documentToReactComponents } from '@contentful/rich-text-react-renderer';\n\nimport { anchorTarget } from '@/component-library-lib/utils/anchorTarget';\nimport { addHttps } from '@/component-library-lib/utils/stringReplace/common';\nimport youtubeParser from '@/component-library-lib/utils/youtubeParser';\nimport AnimateItem from '@/component-library/atoms/AnimateItem/AnimateItem';\nimport ContentfulImage from '@/component-library/atoms/ContentfulImage/ContentfulImage';\nimport Heading from '@/component-library/atoms/Heading/Heading';\nimport Quote from '@/component-library/molecules/Quote/Quote';\nimport { Block, BLOCKS, Inline, INLINES } from '@contentful/rich-text-types';\nimport clsx from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n/**\n * RichTextContainerProps\n *\n * @typedef RichTextContainerProps\n */\ntype RichTextContainerProps = InferContentfulResponse<Topics['RichText']> & {\n  /** The optional className */\n  className?: string;\n};\n\n/**\n * @param {RichTextContainerProps} props - RichTextContainerProps\n * @returns {React.ReactNode} - RichTextContainer\n */\nexport const RichTextContainer = (props: RichTextContainerProps) => {\n  const columTablet = props.fields.columnsTablet\n    ? `sm:col-span-${props.fields.columnsTablet} sm:col-start-${\n        (6 - props.fields.columnsTablet) / 2 + 1\n      }`\n    : '';\n  const columDesktop = props.fields.columnsDesktop\n    ? `md:col-span-${props.fields.columnsDesktop} md:col-start-${\n        (12 - props.fields.columnsDesktop) / 2 + 1\n      }`\n    : '';\n\n  return (\n    <div\n      data-testid=\"rich-text-container\"\n      className={clsx(\n        props.fields.useContainer && 'page-max-w',\n        props.fields.columnsTablet && 'sm:grid sm:grid-cols-6 sm:gap-6',\n        props.fields.columnsDesktop && 'md:grid md:grid-cols-12 md:gap-8'\n      )}\n    >\n      <div\n        data-testid=\"rich-text-columns\"\n        className={twMerge(\n          'prose-blockquote:border-0 font-petco leading-6 prose-li:p-0 prose-li:m-0 prose-li:marker:text-neutral-800 pt-16 pb-16 sm:pb-20 prose prose-h1:mb-6 prose-h2:mb-5 prose-h2:mt-0 prose-h3:mb-4 max-w-none',\n          props.className,\n          props.fields.customClasses,\n          columTablet,\n          columDesktop\n        )}\n      >\n        {documentToReactComponents(props.fields.content, {\n          renderNode: {\n            /**\n             * @param {object} _ - Node Data\n             * @param {React.ReactNode} children - Node Children Tree\n             * @returns {React.ReactNode} - ReactNode\n             */\n            [BLOCKS.HEADING_1]: (_, children) => (\n              <Heading size=\"h1\" className=\"text-mkNavy-400\">\n                {children}\n              </Heading>\n            ),\n\n            /**\n             * @param {object} _ - Node Data\n             * @param {React.ReactNode} children - Node Children Tree\n             * @returns {React.ReactNode} - ReactNode\n             */\n            [BLOCKS.HEADING_2]: (_, children) => (\n              <Heading size=\"h2\" className=\"text-mkNavy-400\">\n                {children}\n              </Heading>\n            ),\n\n            /**\n             * @param {object} _ - Node Data\n             * @param {React.ReactNode} children - Node Children Tree\n             * @returns {React.ReactNode} - ReactNode\n             */\n            [BLOCKS.HEADING_3]: (_, children) => (\n              <Heading size=\"h3\" className=\"text-mkNavy-400\">\n                {children}\n              </Heading>\n            ),\n\n            /**\n             * @param {object} _ - Node Data\n             * @param {React.ReactNode} children - Node Children Tree\n             * @returns {React.ReactNode} - ReactNode\n             */\n            [BLOCKS.HEADING_4]: (_, children) => (\n              <Heading size=\"h4\" className=\"text-mkNavy-400\">\n                {children}\n              </Heading>\n            ),\n\n            /**\n             * @param {object} _ - Node Data\n             * @param {React.ReactNode} children - Node Children Tree\n             * @returns {React.ReactNode} - ReactNode\n             */\n            [BLOCKS.HEADING_5]: (_, children) => (\n              <Heading size=\"h5\" className=\"text-mkNavy-400\">\n                {children}\n              </Heading>\n            ),\n\n            /**\n             * @param {object} _ - Node Data\n             * @param {React.ReactNode} children - Node Children Tree\n             * @returns {React.ReactNode} - ReactNode\n             */\n            [BLOCKS.HEADING_6]: (_, children) => (\n              <Heading size=\"h6\" className=\"text-mkNavy-400\">\n                {children}\n              </Heading>\n            ),\n\n            /**\n             * @param {object} _ - Node Data\n             * @param {React.ReactNode} children - Node Children Tree\n             * @returns {React.ReactNode} - ReactNode\n             */\n            [BLOCKS.LIST_ITEM]: (_, children) => (\n              <li className=\"[&>p]:m-0\">{children}</li>\n            ),\n\n            /**\n             * @param {object} _ - Node Data\n             * @param {React.ReactNode} children - Node Children Tree\n             * @returns {React.ReactNode} - ReactNode\n             */\n            [BLOCKS.QUOTE]: (_, children) => (\n              <AnimateItem\n                delay={0}\n                className=\"sm:grid sm:grid-cols-6 sm:gap-6 md:grid-cols-8 md:gap-8\"\n              >\n                <Quote\n                  text={children as string}\n                  classes=\"mx-auto [&>span>h2>p]:m-0 [&>span>h2.font-light]:font-normal sm:col-span-4 sm:col-start-2 md:col-span-6 md:col-start-2\"\n                />\n              </AnimateItem>\n            ),\n\n            /**\n             * @param {Block | Inline} node - The node\n             * @returns {React.ReactElement} - Image Component\n             */\n            [BLOCKS.EMBEDDED_ASSET]: (node) => (\n              <AnimateItem delay={0}>\n                <div className=\"flex items-center justify-center my-8 md:my-12\">\n                  <ContentfulImage\n                    className=\"rounded-3xl\"\n                    width={node.data.target.fields.file.details.image.width}\n                    height={node.data.target.fields.file.details.image.height}\n                    alt={node.data.target.fields.title}\n                    src={addHttps(node.data.target.fields.file.url)}\n                  />\n                </div>\n              </AnimateItem>\n            ),\n            /**\n             * @param {object} node - Node Data\n             * @param {object} node.data - Node Data\n             * @param {React.ReactNode} children - Node Children Tree\n             * @returns {React.ReactNode | void} - ReactNode\n             */\n            [INLINES.HYPERLINK]: ({ data }, children) => {\n              // Only process youtube links\n              if (\n                data.uri &&\n                (data.uri.includes('youtube.com') ||\n                  data.uri.includes('youtu.be'))\n              ) {\n                return youtubeParser(data.uri);\n              } else {\n                return anchorTarget(data.uri, children);\n              }\n            },\n            /**\n             * @param {object} _ - Node Data\n             * @param {React.ReactNode} children - Node Children\n             * @returns {React.ReactNode} - ReactNode\n             */\n            [BLOCKS.PARAGRAPH]: (_, children) => {\n              const textStyle = {\n                fontSize: props.fields.contentTextSize ?? 'inherit',\n                textAlign: props.fields.contentTextAlignment ?? undefined,\n                color: props.fields.contentColor ?? 'inherit',\n              };\n              return <p style={textStyle}>{children}</p>;\n            },\n          },\n        })}\n      </div>\n    </div>\n  );\n};\n","/**\n * Function to handle the case where the URL starts with \"//\" or is missing the\n * https from the string and adds \"https:\" to the beginning.\n *\n * @param {string} url The url to check for missing https\n * @returns {string} The url with https\n */\nexport function addHttps(url?: string): string {\n  if (!url) return '';\n\n  if (url.startsWith('//')) {\n    url = 'https:' + url;\n  } else if (!url.startsWith('https://') && !url.startsWith('http://')) {\n    url = 'https://' + url;\n  }\n  return url;\n}\n","/** The colors that can be used for the divider */\nexport type DividerColor = 'darkGrey' | 'lightGrey' | 'white';\n\n/**\n * IDivider Interface for the Divider component\n *\n * @interface IDivider\n */\nexport interface IDivider {\n  /**\n   * The color of divider to display.\n   *\n   * @memberof IDivider\n   * @member {DividerColor} type\n   */\n  type: DividerColor;\n  /**\n   * The optional classes to be applied to the component.\n   *\n   * @memberof IDivider\n   * @default ''\n   * @member {string} [classes]\n   */\n  classes?: string;\n}\n\n/**\n * Divider Class Map The class map for the divider component.\n *\n * @constant\n */\nconst dividerClassMap = {\n  darkGrey: 'border-neutral-600 bg-neutral-600',\n  lightGrey: 'border-neutral-300 bg-neutral-300',\n  white: 'border-neutral-100 bg-neutral-100',\n};\n\n/**\n * Divider - Divider Element for separating content.\n *\n * @param {IDivider} props - The props for the Divider component\n * @returns {React.FC<IDivider>} Divider Component\n */\nconst Divider: React.FC<IDivider> = ({ type, classes = '' }: IDivider) => {\n  const dividerClasses = `border-top-[.5px] w-full ${dividerClassMap[type]} ${classes}`;\n  return <hr data-testid=\"divider\" className={dividerClasses} />;\n};\n\nexport default Divider;\n","import Paragraph from '@/components/atoms/Paragraph/Paragraph';\n\nimport Image, { ImageLoader } from 'next/legacy/image';\nimport Link from 'next/link';\n\n/**\n * ICardArticle Interface for the Card Article Component\n *\n * @interface ICardArticle\n */\nexport interface ICardArticle {\n  /**\n   * Title of the Article for the Card\n   *\n   * @memberof ICardArticle\n   * @member {string} title\n   */\n  title: string;\n  /**\n   * The Excerpt of the Article to Display\n   *\n   * @memberof ICardArticle\n   * @member {string} excerpt\n   */\n  excerpt: string;\n  /**\n   * The Image of the Article to display\n   *\n   * @memberof ICardArticle\n   * @member {string} image\n   */\n  image: string;\n  /**\n   * The optional classes for the component\n   *\n   * @memberof ICardArticle\n   * @default ''\n   * @member {string} [classes]\n   */\n  classes?: string;\n  /**\n   * The optional imageClasses for the component\n   *\n   * @memberof ICardArticle\n   * @default ''\n   * @member {string} [imageClasses]\n   */\n  imageClasses?: string;\n  /**\n   * Url of the article to link to\n   *\n   * @memberof ICardArticle\n   * @member {string} url\n   */\n  url: string;\n  /**\n   * The optional target for the url\n   *\n   * @memberof ICardArticle\n   * @default '_self'\n   * @member {'_blank' | '_self' | '_parent' | '_top'} [target]\n   */\n  target?: '_blank' | '_self' | '_parent' | '_top';\n  /**\n   * The loader function for the image\n   *\n   * @memberof ICardArticle\n   * @member {ImageLoader} [loader]\n   */\n  loader?: ImageLoader;\n}\n\n/**\n * Card Article The Card Article Component that links to an url and displays an\n * image, title and excerpt\n *\n * @param {ICardArticle} props - The props for the Card Article Component\n * @returns {React.FC<ICardArticle>} Card Article Component\n */\nconst CardArticle: React.FC<ICardArticle> = ({\n  title,\n  excerpt,\n  image,\n  classes = '',\n  url,\n  imageClasses = '',\n  target = '_self',\n  loader,\n}: ICardArticle) => {\n  return (\n    <div\n      data-testid=\"card-article\"\n      className={`w-full cursor-pointer [&:has(:focus-visible)]:ring-1 [&:has(:focus-visible)]:ring-focus-400 sm:rounded-[20px] md:rounded-3xl ${classes}`}\n    >\n      <Link\n        href={url}\n        className=\"w-full focus:ring-0 focus:ring-offset-0 focus-visible:ring-offset-0 focus-visible:ring-0 focus-visible:border-none focus-visible:outline-none\"\n        target={target}\n      >\n        <div\n          className={`h-[218px] sm:h-[140px] md:h-72 relative rounded-2xl sm:rounded-[20px] md:rounded-3xl flex overflow-hidden ${imageClasses}`}\n        >\n          <Image\n            data-testid=\"card-article-image\"\n            src={image}\n            layout=\"fill\"\n            alt={`Image of ${title}`}\n            objectFit=\"cover\"\n            className=\"scale-100 hover:scale-[102%] transition-transform duration-100\"\n            loader={loader}\n            sizes=\"(max-width: 739px) 100vw, (max-width: 1199px) 33vw, 450px\"\n          />\n        </div>\n        <div className=\"w-full mt-4 md:mt-6\">\n          <span className=\"font-bold font-petco text-h5 text-mkNavy-400 line-clamp-2\">\n            {title}\n          </span>\n          <Paragraph size=\"body4\" className=\"mt-3 font-petco line-clamp-2\">\n            {excerpt}\n          </Paragraph>\n        </div>\n      </Link>\n    </div>\n  );\n};\n\nexport default CardArticle;\n","import contentFulImageLoader from '@/component-library-lib/loaders/contentfulImageLoader';\nimport AnimateItem from '@/component-library/atoms/AnimateItem/AnimateItem';\nimport ButtonLink, {\n  IButtonLink,\n} from '@/component-library/atoms/ButtonLink/ButtonLink';\nimport Heading from '@/components/atoms/Heading/Heading';\nimport CardArticle, {\n  ICardArticle,\n} from '@/components/molecules/CardArticle/CardArticle';\n\n/**\n * IButtonLinkWithHref Interface for a Button link with a href\n *\n * @augments IButtonLink\n * @interface IButtonLinkWithHref\n */\nexport interface IButtonLinkWithHref extends IButtonLink {\n  /**\n   * The button link url\n   *\n   * @memberof IButtonLinkWithHref\n   * @member {string} href\n   */\n  href: string;\n}\n\n/**\n * IArticlesDisplay Interface for ArticlesDisplay component\n *\n * @interface IArticlesDisplay\n */\nexport interface IArticlesDisplay {\n  /**\n   * The title of the articles display.\n   *\n   * @memberof IArticlesDisplay\n   * @member {string} title\n   */\n  title: string;\n  /**\n   * An array of card articles to display.\n   *\n   * @memberof IArticlesDisplay\n   * @member {ICardArticle[]} articles\n   */\n  articles: ICardArticle[];\n  /**\n   * The optional button link.\n   *\n   * @memberof IArticlesDisplay\n   * @member {IButtonLinkWithHref} [buttonLink]\n   */\n  buttonLink?: IButtonLinkWithHref;\n  /**\n   * The optional classes to be applied to the component.\n   *\n   * @memberof IArticlesDisplay\n   * @default ''\n   * @member {string} [classes]\n   */\n  classes?: string;\n  /**\n   * The optional imageClasses to be applied to the image inside a card.\n   *\n   * @memberof IArticlesDisplay\n   * @default ''\n   * @member {string} [imageClasses]\n   */\n  imageClasses?: string;\n}\n\n/**\n * ArticlesDisplay Organism for displaying articles\n *\n * @param {IArticlesDisplay} props - The props for the ArticlesDisplay component\n * @returns {React.FC<IArticlesDisplay>} ArticlesDisplay Component\n */\nconst ArticlesDisplay: React.FC<IArticlesDisplay> = ({\n  title,\n  articles,\n  buttonLink,\n  classes = '',\n  imageClasses = '',\n}: IArticlesDisplay) => {\n  return (\n    <div\n      data-testid=\"articles-display\"\n      className={`max-w-[1360px] mx-auto ${classes}`}\n    >\n      <AnimateItem from={{ translateY: 20 }}>\n        <div className=\"flex flex-col justify-between mb-8 space-y-4 sm:flex-row sm:space-y-0 sm:items-center md:mb-12\">\n          <Heading size=\"h3\" font=\"petco\" className=\"text-secondaryBase-400 \">\n            {title}\n          </Heading>\n          {buttonLink && <ButtonLink {...buttonLink} />}\n        </div>\n      </AnimateItem>\n      {articles && (\n        <div className=\"grid sm:grid-cols-3 grid-cols-1 md:gap-x-8 gap-6\">\n          {articles.map((article, index) => (\n            <div className=\"flex items-center justify-stretch\" key={index}>\n              <CardArticle\n                {...article}\n                imageClasses={imageClasses}\n                loader={contentFulImageLoader}\n              />\n            </div>\n          ))}\n        </div>\n      )}\n    </div>\n  );\n};\n\nexport default ArticlesDisplay;\n","import Paragraph from '@/components/atoms/Paragraph/Paragraph';\nimport Link from 'next/link';\n\n/**\n * IArticleHeadline\n *\n * @interface IArticleHeadline\n */\nexport interface IArticleHeadline {\n  /**\n   * The title of the article\n   *\n   * @memberof IArticleHeadline\n   * @member {string} title\n   */\n  title: string;\n  /**\n   * Author Name\n   *\n   * @memberof IArticleHeadline\n   * @member {string} [author]\n   */\n  author?: string;\n  /**\n   * Link to Author Page\n   *\n   * @memberof IArticleHeadline\n   * @member {string} [authorLink]\n   */\n  authorLink?: string;\n  /**\n   * The word to put before the author's name\n   *\n   * @memberof IArticleHeadline\n   * @member {string} authorPrefix\n   */\n  authorPrefix: string;\n  /**\n   * The optional Sub Title of the Article\n   *\n   * @memberof IArticleHeadline\n   * @member {string} [subTitle]\n   */\n  subTitle?: string;\n  /**\n   * Date of the Article Publication\n   *\n   * @memberof IArticleHeadline\n   * @member {string} date\n   */\n  date: string;\n  /**\n   * The optional Classes to be able to pass to the component for styling\n   *\n   * @memberof IArticleHeadline\n   * @default ''\n   * @member {string} [classes]\n   */\n  classes?: string;\n}\n\n/**\n * ArticleHeadline Article Headline Component to display on top of articles\n *\n * @param {IArticleHeadline} props - The props for the ArticleHeadline component\n * @returns {React.FC<IArticleHeadline>} Component\n */\nconst ArticleHeadline: React.FC<IArticleHeadline> = ({\n  title,\n  subTitle,\n  author,\n  authorLink,\n  authorPrefix,\n  date,\n  classes = '',\n}: IArticleHeadline) => {\n  return (\n    <div data-testid=\"article-headline\" className={`text-center ${classes}`}>\n      <div className=\"my-6\">\n        <h1 className=\"font-bold text-secondaryBase-400 text-h3\">{title}</h1>\n        {subTitle && (\n          <Paragraph size=\"body3\" className=\"mt-2 md:mt-4 !leading-7\">\n            {subTitle}\n          </Paragraph>\n        )}\n      </div>\n\n      <Paragraph size=\"body4\">\n        {author && (\n          <>\n            {authorPrefix}{' '}\n            <Link\n              href={authorLink ? `/author/${authorLink}` : '#'}\n              className=\"underline hover:text-base-300\"\n            >\n              {author}\n            </Link>{' '}\n            |{' '}\n          </>\n        )}\n        {date}\n      </Paragraph>\n    </div>\n  );\n};\n\nexport default ArticleHeadline;\n","import Heading from '@/components/atoms/Heading/Heading';\nimport Icon, { IconType } from '@/components/atoms/Icon/Icon';\nimport { ShareMethods, shareEventHandler } from '@/lib/utils/analytics/share';\nimport getBasePath from '@/lib/utils/getBasePath/getBasePath';\nimport getBaseUrl from '@/lib/utils/getBaseUrl/getBaseUrl';\n\n/**\n * ShareLinkList\n *\n * @type {ShareLinkList}\n */\ntype ShareLinkList = {\n  /** The url of the share link */\n  baseUrl?: string;\n  /** The icon of the share link */\n  icon: IconType;\n  /** The label for aria */\n  label: string;\n  /** The name of the share link */\n  name: string;\n  /** The type of link */\n  type: 'link' | 'copy';\n};\n\n/** Share Links */\nconst shareLinks: ShareLinkList[] = [\n  {\n    baseUrl: 'https://www.facebook.com/sharer.php?display=page&u=',\n    icon: 'facebook',\n    label: 'Share article on Facebook',\n    name: 'Facebook',\n    type: 'link',\n  },\n  {\n    baseUrl: 'https://twitter.com/intent/tweet?url=',\n    icon: 'twitter',\n    label: 'Share article on Twitter',\n    name: 'Twitter',\n    type: 'link',\n  },\n  {\n    baseUrl: 'https://nextdoor.com/news_feed/?open_composer=true&body=',\n    icon: 'nextdoor',\n    label: 'Share article on Nextdoor',\n    name: 'Nextdoor',\n    type: 'link',\n  },\n  {\n    icon: 'link',\n    label: 'Copy article link',\n    name: 'Link',\n    type: 'copy',\n  },\n  {\n    baseUrl: 'mailto:?subject=Petco Love Lost - Article&body=',\n    icon: 'envelope',\n    label: 'Email article',\n    name: 'Email',\n    type: 'link',\n  },\n];\n\n/**\n * IArticleShare\n *\n * @interface IArticleShare\n */\nexport interface IArticleShare {\n  /**\n   * Text of the headline\n   *\n   * @memberof IArticleShare\n   * @default 'Share'\n   * @member {string} [text]\n   */\n  text?: string;\n  /**\n   * The url to link to\n   *\n   * @memberof IArticleShare\n   * @member {string} url\n   */\n  url: string;\n  /**\n   * The optional classes added to the component\n   *\n   * @memberof IArticleShare\n   * @default ''\n   * @member {string} [classes]\n   */\n  classes?: string;\n}\n\n/**\n * ArticleShare A group of buttons used to share articles\n *\n * @param {IArticleShare} props - The props for the ArticleShare component\n * @returns {React.FC<IArticleShare>} Component\n */\nconst ArticleShare: React.FC<IArticleShare> = ({\n  text = 'Share',\n  url,\n  classes = '',\n}: IArticleShare) => {\n  /**\n   * @param {string} baseUrl - The base platform url to link to\n   * @param {string} type - The type of link\n   * @param {string} name - The name of the link\n   * @returns {void}\n   */\n  const linkHandler = (baseUrl: string, type: string, name: string) => () => {\n    /** Send Share Event */\n    shareEventHandler({\n      method: name as ShareMethods,\n      contentType: 'Article',\n    });\n    /**\n     * The app base url to use for the share link\n     *\n     * @constant {string} baseUrl\n     */\n    const currentUrl = `${getBaseUrl()}${getBasePath()}`;\n\n    if (type === 'link') {\n      const encodedUrl = encodeURIComponent(`${currentUrl}${url}`);\n      window.open(`${baseUrl}${encodedUrl}`, '_blank');\n    }\n    if (type === 'copy') {\n      navigator.clipboard.writeText(`${currentUrl}${url}`);\n    }\n  };\n  return (\n    <div\n      data-testid=\"article-share\"\n      className={`w-full flex flex-col space-y-4 justify-center text-center ${classes}`}\n    >\n      <Heading size=\"h6\">{text}</Heading>\n      <div className=\"w-full flex flex-row space-x-6 justify-center\">\n        {shareLinks.map((shareLink, index) => (\n          <button\n            key={index}\n            aria-label={shareLink.label}\n            onClick={linkHandler(\n              shareLink.baseUrl ? shareLink.baseUrl : '',\n              shareLink.type,\n              shareLink.name\n            )}\n            data-testid={`article-share-${shareLink.name}`}\n            className=\"text-base-400 hover:text-base-300\"\n          >\n            <Icon icon={shareLink.icon} size={24} />\n          </button>\n        ))}\n      </div>\n    </div>\n  );\n};\n\nexport default ArticleShare;\n","import { bodySizeClasses } from '@/components/atoms/Typography/TextClasses';\nimport Link from 'next/link';\nimport React from 'react';\n\n/**\n * IBreadCrumbItem Interface for the Bread Crumb Item\n *\n * @interface IBreadCrumbItem\n */\nexport interface IBreadCrumbItem {\n  /**\n   * The name of the bread crumb item.\n   *\n   * @memberof IBreadCrumbItem\n   * @member {string} name\n   */\n  name: string;\n  /**\n   * The path of the bread crumb item.\n   *\n   * @memberof IBreadCrumbItem\n   * @member {string} path\n   */\n  path: string;\n}\n\n/**\n * IBreadCrumb Interface for the Bread Crumb Component\n *\n * @interface IBreadCrumb\n */\nexport interface IBreadCrumb {\n  /**\n   * The items to display.\n   *\n   * @memberof IBreadCrumb\n   * @member {IBreadCrumbItem[]} items\n   */\n  items: IBreadCrumbItem[];\n  /**\n   * The optional classes\n   *\n   * @memberof IBreadCrumb\n   * @default ''\n   * @member {string} [classes]\n   */\n  classes?: string;\n  /**\n   * The optional number of characters to limit the name to\n   *\n   * @memberof IBreadCrumb\n   * @default ''\n   * @member {number} [charactersLimit]\n   */\n  charactersLimit?: number;\n}\n\n/**\n * Bread Crumb Bread Crumbs for displaying out a series of links.\n *\n * @param {IBreadCrumb} props - The props for the Bread Crumb Component\n * @returns {React.FC<IBreadCrumb>} Bread Crumb Component\n */\nconst BreadCrumb: React.FC<IBreadCrumb> = ({\n  items,\n  classes = '',\n  charactersLimit = 10,\n}: IBreadCrumb) => {\n  // Styling Classes\n  const baseClasses = `${bodySizeClasses.overline} text-neutral-700`;\n  const linkClasses =\n    'hover:text-base-300 hover:underline focus-visible:ring-1 focus-visible:ring-focus-400';\n  const lastClasses = `font-bold`;\n\n  /**\n   * Function to truncate text to a number of characters\n   *\n   * @param {string} text - The text to truncate\n   * @returns {string} The truncated text\n   */\n  const truncateText = (text: string) => {\n    return text.slice(0, charactersLimit) + '...';\n  };\n\n  return (\n    <div\n      data-testid=\"bread-crumb\"\n      className={`flex items-center whitespace-nowrap ${classes}`}\n    >\n      {items.map((item, index, totalItems) => {\n        const isLast = index === totalItems.length - 1;\n        return (\n          <React.Fragment key={item.name}>\n            <div className=\"mr-2\">\n              {!isLast ? (\n                <Link\n                  href={item.path}\n                  className={`${baseClasses} ${linkClasses}`}\n                >\n                  {item.name}\n                </Link>\n              ) : (\n                <div className={`${baseClasses} ${lastClasses}`}>\n                  {truncateText(item.name)}\n                </div>\n              )}\n            </div>\n            {!isLast && <div className={`${baseClasses} mr-2`}>/</div>}\n          </React.Fragment>\n        );\n      })}\n    </div>\n  );\n};\n\nexport default BreadCrumb;\n","import contentFulImageLoader from '@/component-library-lib/loaders/contentfulImageLoader';\nimport Image, { ImageProps } from 'next/legacy/image';\nimport React from 'react';\n\n/**\n * IImageBlock\n *\n * Used to define the props of an image block\n *\n * @interface\n */\nexport interface IImageBlock {\n  /** The block props */\n  props: ImageProps;\n}\n\n/**\n * Image Block\n *\n * @param {IImageBlock} params - The params for an image block\n * @returns {React.FC<IImageBlock>} Component\n */\nexport const ImageBlock: React.FC<IImageBlock> = ({ props }) => {\n  return (\n    <div className=\"relative w-full h-0 my-8 md:my-12 pb-[75%] last:mb-0 first:mt-0 \">\n      <Image\n        data-testid=\"image-block\"\n        layout=\"fill\"\n        objectFit=\"cover\"\n        loader={contentFulImageLoader}\n        {...props}\n        alt={props.alt}\n        className=\"rounded-[20px] sm:rounded-3xl\"\n        sizes=\"(max-width: 1199px) 100vw, 700px\"\n      />\n    </div>\n  );\n};\n","import contentFulImageLoader from '@/component-library-lib/loaders/contentfulImageLoader';\nimport Divider from '@/components/atoms/Divider/Divider';\nimport FullWidthCalloutBody from '@/components/atoms/FullWidthCalloutBody';\nimport ArticleHeadline from '@/components/molecules/ArticleHeadline/ArticleHeadline';\nimport ArticleShare from '@/components/molecules/ArticleShare/ArticleShare';\nimport BreadCrumb from '@/components/molecules/BreadCrumb/BreadCrumb';\nimport { ICardArticle } from '@/components/molecules/CardArticle/CardArticle';\nimport ArticlesDisplay from '@/components/organisms/ArticlesDisplay/ArticlesDisplay';\nimport FullWidthCalloutImage from '@/components/organisms/FullWidthCalloutImage/FullWidthCalloutImage';\nimport PageWrapper from '@/components/organisms/PageWrapper/PageWrapper';\nimport {\n  IImageBlock,\n  ImageBlock,\n} from '@/components/templates/ArticleTemplate/Blocks/ImageBlock';\nimport { RichTextContainer } from '@/component-library-lib/dataSource/contentful/containers/RichTextContainer/RichTextContainer';\nimport { addHttps } from '@/lib/utils/stringReplace/addHttps';\nimport { ArticleProps } from '@/pages/articles/[slug]';\n\nimport { IHeading } from '@/components/atoms/Heading/Heading';\nimport { IParagraph } from '@/components/atoms/Paragraph/Paragraph';\nimport { IQuote } from '@/components/molecules/Quote/Quote';\nimport { IBulletListBlock } from '@/components/templates/ArticleTemplate/Blocks/BulletListBlock';\nimport { IHeadingBlock } from '@/components/templates/ArticleTemplate/Blocks/HeadingBlock';\nimport { INumberedListBlock } from '@/components/templates/ArticleTemplate/Blocks/NumberedListBlock';\nimport { IParagraphBlock } from '@/components/templates/ArticleTemplate/Blocks/ParagraphBlock';\nimport { IQuoteBlock } from '@/components/templates/ArticleTemplate/Blocks/QuoteBlock';\nimport { ContainerProps } from '@/lib/dataSource/contentful/containers';\nimport { useEventContext } from '@/lib/hooks/analytics/useEventContext';\nimport { ImageProps } from 'next/legacy/image';\n\n/**\n * Article Template Block Type\n *\n * @typedef {string}\n */\nexport type ValidArticleContentBlocks =\n  | 'image'\n  | 'heading'\n  | 'paragraph'\n  | 'bulletList'\n  | 'numberedList'\n  | 'quote';\n\n/** Article Template Block Props Type */\nexport type ValidArticleContentBlockProps =\n  | ImageProps\n  | IList\n  | IParagraph\n  | IQuote\n  | Omit<IHeading, 'size'>;\n\n/**\n * IList\n *\n * Used to define the props of a List block for the Article Template\n *\n * @interface\n */\nexport interface IList {\n  /** Bullet list items */\n  children: string[];\n}\n\n/**\n * IArticleTemplateBlock\n *\n * Used to define the props of an Article Template Block\n *\n * @interface\n */\nexport interface IArticleTemplateBlock {\n  /** The block props */\n  props: ValidArticleContentBlockProps;\n}\n\n/** The type of the block renderer */\nexport type TBlockRenderer = {\n  [Property in ValidArticleContentBlocks]:\n    | React.FC<IBulletListBlock>\n    | React.FC<IHeadingBlock>\n    | React.FC<IImageBlock>\n    | React.FC<INumberedListBlock>\n    | React.FC<IParagraphBlock>\n    | React.FC<IQuoteBlock>;\n};\n\n/**\n * IArticleBlock\n *\n * Used to define the Article Template Blocks\n *\n * @interface\n */\nexport interface IArticleBlock {\n  /** Type of block */\n  block: ValidArticleContentBlocks;\n  /** Block props */\n  props: ValidArticleContentBlockProps;\n}\n\n/**\n * IArticleTemplateContent\n *\n * Used to define the text content for the Article Template\n *\n * @interface\n */\nexport interface IArticleTemplateContent {\n  /** Heading for the ArticleTemplate */\n  articleHeadline: {\n    /** The word to put before the author's name */\n    authorPrefix: string;\n  };\n  /** The articles display content */\n  articlesDisplay: {\n    /** The articles display title */\n    title: string;\n  };\n  /** The article share content */\n  articleShare: {\n    /** Text of the headline */\n    text: string;\n  };\n  /** The bread crumb content */\n  breadCrumb: {\n    /** The bread home */\n    home: string;\n    /** The bread crumb all articles */\n    allArticles: string;\n  };\n  /** The full width callout content */\n  fullWidthCalloutImage: {\n    /** The full width callout overline text */\n    overline: string;\n    /** The full width callout title */\n    title: string;\n    /** The full width callout body */\n    body: string | React.ReactNode;\n    /** The full width callout sign up button text */\n    signUpButtonText: string;\n  };\n}\n\n/**\n * IArticleHeadline\n *\n * Used to define the Article Template Headline\n *\n * @interface\n */\nexport interface IArticleHeadline {\n  /** The article's title */\n  title: string;\n  /** The article's author */\n  author?: string;\n  /** The article's author link */\n  authorLink?: string;\n  /** The article's publication date */\n  date: string;\n  /** The optional article's sub title */\n  subTitle?: string;\n}\n\n/**\n * IArticleTemplate\n *\n * Used to define the Article Template props\n *\n * @interface\n */\nexport interface IArticleTemplate {\n  /** The articles to display */\n  articles?: ArticleProps['fields']['acrossArticleCards'];\n  /** The url to link to */\n  articleUrl: string;\n  /** The blocks to be rendered in the article */\n  copy: ArticleProps['fields']['copy'];\n  /** Text Content */\n  content: IArticleTemplateContent;\n  /** The article's headline */\n  headline: IArticleHeadline;\n  /** The article's featured image */\n  featuredImage?: ArticleProps['fields']['featuredImage'];\n  /** Whether the featured image should be hidden */\n  hideFeaturedImage?: ArticleProps['fields']['hideFeaturedImage'];\n}\n\n/**\n * ArticleTemplate - A template for the Article Page\n *\n * @param {IArticleTemplate} props - The props for the ArticleTemplate component\n * @returns {React.FC<IArticleTemplate>} Component\n */\nconst ArticleTemplate: React.FC<IArticleTemplate> = ({\n  articles,\n  articleUrl,\n  copy,\n  content,\n  headline,\n  featuredImage,\n  hideFeaturedImage,\n}) => {\n  const { setInitiatingComponent } = useEventContext();\n  const formattedFeaturedImage = featuredImage\n    ? {\n        src: addHttps(featuredImage.fields.file?.url),\n        alt: featuredImage.fields.title,\n      }\n    : null;\n\n  const copyObject = {\n    fields: {\n      content: copy,\n    },\n  } as ContainerProps['richText'];\n\n  const acrossArticleCards = articles\n    ? articles.map(\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        (article: any) =>\n          article && {\n            title: article.fields.headline,\n            excerpt: article.fields.excerpt,\n            image: addHttps(article?.fields.featuredImage?.fields.file?.url),\n            url: `/articles/${article?.fields.slugs}`,\n            loader: contentFulImageLoader,\n          }\n      )\n    : [];\n\n  return (\n    <div data-testid=\"article-template\">\n      <div className=\"flex justify-center items-center mt-6\">\n        <BreadCrumb\n          items={[\n            {\n              name: content.breadCrumb.home,\n              path: '/',\n            },\n            {\n              name: content.breadCrumb.allArticles,\n              path: '/articles',\n            },\n            {\n              name: headline.title,\n              path: articleUrl,\n            },\n          ]}\n        />\n      </div>\n      <PageWrapper classes=\"px-6 sm:px-8 md:px-10 whitespace-pre-line font-petco article-wrapper\">\n        <div className=\"md:max-w-[680px] md:mx-auto\">\n          <ArticleHeadline\n            title={headline.title}\n            subTitle={headline.subTitle}\n            author={headline?.author}\n            authorLink={headline?.authorLink}\n            date={headline.date}\n            authorPrefix={content.articleHeadline.authorPrefix}\n            classes=\"col-start-1 col-span-4 mb-8 md:mb-12 sm:col-span-6 md:col-start-3 md:col-span-8\"\n          />\n\n          {!hideFeaturedImage && formattedFeaturedImage && (\n            <div data-testid=\"featured-image-container\">\n              <ImageBlock props={formattedFeaturedImage} />\n            </div>\n          )}\n\n          <RichTextContainer {...copyObject} />\n\n          <ArticleShare\n            classes=\"col-start-1 col-span-4 sm:col-start-2 sm:col-span-4 md:col-start-4 md:col-span-6 mt-12 md:mt-20\"\n            text={content.articleShare.text}\n            url={articleUrl}\n          />\n        </div>\n\n        <div className=\"max-w-[1440px]\">\n          <Divider type=\"lightGrey\" classes={`my-7 md:my-[60px]`} />\n          {acrossArticleCards.length > 0 && (\n            <ArticlesDisplay\n              articles={acrossArticleCards as ICardArticle[]}\n              title=\"Related articles\"\n              classes={`mb-7 md:mb-[60px]`}\n            />\n          )}\n        </div>\n      </PageWrapper>\n\n      <FullWidthCalloutImage\n        overline={content.fullWidthCalloutImage.overline}\n        title={content.fullWidthCalloutImage.title}\n        body={<FullWidthCalloutBody />}\n        imageUrl={\n          process.env.NEXT_PUBLIC_CDN_BASE_URL +\n          '/assets/lost/brandywine-valley-spca-dogs-chasing.jpg'\n        }\n        button1={{\n          size: 'md',\n          variant: 'dark',\n          color: 'secondary',\n          type: 'button',\n          children: content.fullWidthCalloutImage.signUpButtonText,\n          /** Sets the component name for tracking */\n          onClick: () => {\n            setInitiatingComponent('Sign Up Button / All Pages');\n          },\n          href: '/create-account/start/',\n          rel: 'nofollow',\n        }}\n        classes=\"mb-12 md:mb-20\"\n      />\n    </div>\n  );\n};\n\nexport default ArticleTemplate;\n","import AbstractAnalyticsHandler, { IEvent } from './abstractAnalyticsHandler';\n/**\n * EventLogHandler\n *\n * This will console log all the event data\n *\n * YOU WILL NEED TO UPDATE THE next.config.js TO ALLOW CONSOLE LOGS\n *\n * @augments AbstractAnalyticsHandler\n * @class\n */\nexport default class EventLogHandler extends AbstractAnalyticsHandler {\n  /**\n   * @memberof EventLogHandler\n   * @param {IEvent} data - The data to be sent with the event\n   */\n  send(data: IEvent) {\n    const analyticFeature = this.getAnalyticsFeature();\n\n    /**\n     * The data object to be sent to the console\n     *\n     * @memberof EventLogHandler\n     * @member {object} dataObject\n     */\n    const dataObject: {\n      /** The data associated with the event */\n      data: object;\n      /** The feature flags that are enabled */\n      feature: string;\n    } = {\n      data: data.data,\n      feature: analyticFeature,\n    };\n\n    console.log('EventLogHandler:', dataObject);\n  }\n}\n","import getBasePath from '@/lib/utils/getBasePath/getBasePath';\nimport axios from 'axios';\nimport AbstractAnalyticsHandler, { IEvent } from './abstractAnalyticsHandler';\n\n/**\n * KlaviyoEventHandler\n *\n * @augments AbstractAnalyticsHandler\n */\nexport default class KlaviyoEventHandler extends AbstractAnalyticsHandler {\n  /** @param {IEvent} data - The data to be sent with the event */\n  async send(data: IEvent) {\n    const eventData = {\n      data: {\n        type: 'event',\n        attributes: {\n          properties: data.data.attributes,\n          time: new Date(),\n          metric: {\n            data: {\n              type: 'metric',\n              attributes: {\n                name: data.name,\n              },\n            },\n          },\n          profile: {\n            data: {\n              type: 'profile',\n              attributes: data.data.profile,\n            },\n          },\n        },\n      },\n    };\n    axios.post(`${getBasePath()}/api/klaviyo/events`, eventData);\n  }\n}\n","import { googleTagManagerBrand } from '../constants/constants/analytics';\nimport EventEmitter from './eventEmitter';\nimport EventLogHandler from './handlers/eventLogHandler';\nimport GoogleTagManagerHandler from './handlers/googleTagManagerHandler';\nimport KlaviyoEventHandler from './handlers/klaviyoEventHandler';\n\n/** Instances of each handler class */\nconst logEventHandler = new EventLogHandler(googleTagManagerBrand);\nconst gtmEventHandler = new GoogleTagManagerHandler(googleTagManagerBrand);\nconst klaviyoEventHandler = new KlaviyoEventHandler(googleTagManagerBrand);\n\n/** Instances of each emitter */\nexport const logEventEmitter = new EventEmitter([logEventHandler]);\nexport const gtmEventEmitter = new EventEmitter([gtmEventHandler]);\n\n/** DefaultEventEmitter to contain all handlers */\nexport const defaultEventEmitter = new EventEmitter([\n  logEventHandler,\n  gtmEventHandler,\n]);\n\n/** KlaviyoEventEmitter to contain Klaviyo related handlers */\nexport const klaviyoEventEmitter = new EventEmitter([\n  logEventHandler,\n  klaviyoEventHandler,\n]);\n","import AbstractAnalyticsHandler, {\n  IEvent,\n} from './handlers/abstractAnalyticsHandler';\n\n/**\n * EventEmitter\n *\n * This will be used to dispatch each event to the appropriate handler\n *\n * @class\n */\nexport default class EventEmitter {\n  /**\n   * The handlers to be used for each event\n   *\n   * @memberof EventEmitter\n   * @member {AbstractAnalyticsHandler[]} handlers\n   */\n  private handlers: AbstractAnalyticsHandler[];\n\n  /** @param {AbstractAnalyticsHandler[]} handlers - Instances of handlerClasses */\n  constructor(handlers: AbstractAnalyticsHandler[]) {\n    this.handlers = handlers;\n  }\n\n  /**\n   * The event handler\n   *\n   * @param {IEvent} data - Information about the event\n   */\n  handleEvent(data: IEvent) {\n    this.handlers.forEach((handler) => {\n      handler.send(data);\n    });\n  }\n}\n","import { notApplicableString } from '@/lib/constants/constants/analytics';\nimport { analyticsFeatureKey } from '@/lib/utils/featureFlags/optimizely/featureFlagOverride';\nimport CookieStorage from '@/lib/utils/storage/cookie-storage';\n\n/** @typedef validTypes - Valid types for event data */\ntype ValidTypes = string | number | boolean | object | null | undefined;\n\n/** @typedef eventData - How to pass the data within the event */\ntype EventData = { [key: string]: ValidTypes };\n\n/**\n * Describes the base event structure\n *\n * @interface IEvent\n */\nexport interface IEvent {\n  /**\n   * The name of the event\n   *\n   * @memberof IEvent\n   * @member {string} name\n   */\n  name: string;\n  /**\n   * The data associated with the event\n   *\n   * @memberof IEvent\n   * @member {EventData} data - The data associated with the event\n   */\n  data: EventData;\n}\n\n/**\n * Provides an abstract class for analytics handlers\n *\n * @abstract\n * @class\n * @name analyticsHandler\n */\nexport default abstract class AbstractAnalyticsHandler {\n  /**\n   * The source platform of the event data\n   *\n   * @memberof AbstractAnalyticsHandler\n   * @member {string} brand\n   */\n  brand: string;\n\n  /**\n   * @memberof AbstractAnalyticsHandler\n   * @param {string} brand - The source platform of the event data\n   */\n  constructor(brand: string) {\n    this.brand = brand;\n  }\n\n  /**\n   * @memberof AbstractAnalyticsHandler\n   * @returns {string} - The analytic feature that is enabled\n   * @protected\n   */\n  protected getAnalyticsFeature(): string {\n    const cookies = new CookieStorage();\n    const optimizelyDecision = cookies.get(analyticsFeatureKey) as {\n      /** The analytic feature that is enabled */\n      analytic: string;\n    };\n    let feature: string = notApplicableString;\n    if (optimizelyDecision && optimizelyDecision.analytic) {\n      // Split the string into an array\n      feature = optimizelyDecision.analytic;\n    }\n    return feature;\n  }\n\n  /**\n   * @memberof AbstractAnalyticsHandler\n   * @abstract\n   * @param {IEvent} data - The data to be sent with the event\n   */\n  abstract send(data: IEvent): void;\n}\n","import AbstractAnalyticsHandler, { IEvent } from './abstractAnalyticsHandler';\n\n/**\n * GoogleTagManagerHandler\n *\n * @augments AbstractAnalyticsHandler\n */\nexport default class GoogleTagManagerHandler extends AbstractAnalyticsHandler {\n  /** @param {IEvent} data - The data to be sent with the event */\n  send(data: IEvent) {\n    const feature = this.getAnalyticsFeature();\n    /** The data object to be sent to Google Tag Manager */\n    const dataObject: { [key: string]: string | string[] } = {\n      brand: this.brand,\n      ...data.data,\n      feature,\n    };\n    gtag('event', data.name, dataObject);\n  }\n}\n","import { defaultEventEmitter } from '@/lib/analytics/commonEmitter';\nimport { notApplicableString } from '@/lib/constants/constants/analytics';\nimport { PetStatus } from '@/lib/constants/types/analytics';\nimport { InferredSpecies } from '@/lib/constants/types/pets';\nimport { UserReadAllPetsItemDto } from '@petcolove/lost--client--api-sdk/dist/concrete/sdks/services/users/pets/dto';\nimport capitalizeFirstLetter from '../helpers/stringHelpers/capitalizeFirstLetter';\n\n/** The acceptable types of sharing methods */\nexport type ShareMethods =\n  | 'Facebook'\n  | 'Nextdoor'\n  | 'Print Flyer'\n  | 'Email'\n  | 'Twitter'\n  | 'Link';\n\n/** The acceptable types of content to share */\ntype ShareContent = 'Article' | 'Lost Pet Listing' | 'Found Pet Listing';\n\n/** Share Event Handler Data */\nexport interface IShareEventData {\n  /** The method of sharing */\n  method: ShareMethods;\n  /** The type of content that is being shared */\n  contentType: ShareContent;\n  /** If pet listing the id of the pet */\n  petId?: number;\n  /** If lost pet listing the name of the pet being shared */\n  petName?: string;\n  /** If a pet listing what is the pet status */\n  petStatus?: Omit<PetStatus, 'Safe at Home'>;\n  /** If pet listing did the pet originate from a shelter or user */\n  listingSource?: 'Shelter Pet Listing' | 'Consumer Pet Listing';\n  /** If pet listing the species of the pet */\n  petSpecies?: InferredSpecies;\n  /** If pet listing the location id of the pet */\n  locationId?: string;\n}\n\n/**\n * Determine the correct species for the pet\n *\n * @param {string} species - The species of the pet\n * @returns {InferredSpecies | undefined} The species of the pet\n */\nexport const petSpecies = (species?: string): InferredSpecies | undefined => {\n  if (species) {\n    if (species.toLowerCase() === 'dog') {\n      return 'Dog';\n    } else if (species.toLowerCase() === 'cat') {\n      return 'Cat';\n    }\n  }\n  return undefined;\n};\n\n/**\n * Send the add pet event to google analytics\n *\n * @param {IShareEventData} data - The data to send\n */\nexport const shareEventHandler = ({\n  method,\n  contentType,\n  petId,\n  petName,\n  petStatus,\n  listingSource,\n  petSpecies,\n  locationId,\n}: IShareEventData) => {\n  /**\n   * Account for found pet names being updated to Unknown Name\n   *\n   * @returns {string} - The pet name or NA if not found\n   */\n  const unknownPetName = () => {\n    if (!petName || petName === 'Unknown Name') {\n      return 'NA';\n    }\n    return petName;\n  };\n\n  /** Create the event data object */\n  const eventData = {\n    name: 'share',\n    data: {\n      method,\n      content_type: contentType,\n      items: [\n        {\n          pet_id: petId || notApplicableString,\n          pet_name: unknownPetName(),\n          pet_status: petStatus || notApplicableString,\n          listing_source: listingSource || notApplicableString,\n          species: petSpecies || notApplicableString,\n          location_id: locationId || notApplicableString,\n        },\n      ],\n    },\n  };\n  defaultEventEmitter.handleEvent(eventData);\n};\n\n/** The share event data */\ntype IShareEventDataFromPetListing = Omit<IShareEventData, 'method'>;\n\n/**\n * Build the data for the share event\n *\n * @param {UserReadAllPetsItemDto} petListing - Pet listing data\n * @returns {IShareEventDataFromPetListing} - The Share event data\n */\nexport const getShareEventDataFromPetListing = (\n  petListing?: UserReadAllPetsItemDto\n): IShareEventDataFromPetListing => {\n  const petStatus = petListing?.type === 'lostUserPet' ? 'Lost' : 'Found';\n  const petSpecies =\n    (capitalizeFirstLetter(petListing?.species || '') as InferredSpecies) ||\n    undefined;\n\n  const contentType =\n    petListing?.type === 'lostUserPet'\n      ? 'Lost Pet Listing'\n      : 'Found Pet Listing';\n\n  const listingSource =\n    petListing?.type === 'foundOrgPet'\n      ? 'Shelter Pet Listing'\n      : 'Consumer Pet Listing';\n\n  const eventData: IShareEventDataFromPetListing = {\n    contentType,\n    petId: petListing?.id,\n    petName: petListing?.name || undefined,\n    petSpecies,\n    petStatus,\n    listingSource,\n    locationId: petListing?.location?.postalCode,\n  };\n\n  return eventData;\n};\n","/**\n * Return the base URL for the application. Will look for the\n * NEXT_PUBLIC_BASE_URL environment variable and then for STORYBOOK_BASE_URL. If\n * none exist, will fallback to '/'\n *\n * @returns {string} The base URL.\n */\nexport default function getBaseUrl(): string {\n  return (\n    process.env.NEXT_PUBLIC_BASE_URL || process.env.STORYBOOK_BASE_URL || '/'\n  );\n}\n","// Today's date\nexport const today = new Date();\n// Tomorrow's Date\nexport const tomorrow = new Date(today.getTime() + 86400000);\n\n/**\n * Get a date object that is X minutes from now\n *\n * @param {number} minutes - Time in minutes\n * @returns {Date} A date object that is X minutes from now\n */\nexport const getDateXMinutesFromNow = (minutes: number) => {\n  return new Date(new Date().getTime() + minutes * 60 * 1000);\n};\n\n/**\n * Check if a date is valid\n *\n * @param {string} date - The date to check\n * @returns {boolean} - True if the date is valid, false otherwise\n */\nexport const isDateValid = (date: string) => {\n  return !isNaN(new Date(date).getTime());\n};\n","/**\n * Capitalize the first letter of a string\n *\n * @param {string | null} str - The string to capitalize\n * @returns {string} The capitalized string\n */\nexport default function capitalizeFirstLetter(str?: string | null): string {\n  /** Check if the string is empty */\n  if (!str) {\n    return '';\n  }\n\n  /** Capitalize the first letter and concatenate it with the rest of the string */\n  return str[0].toUpperCase() + str.slice(1);\n}\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;"],"names":["variantClasses","primary","light","dark","lightBlue","pink","secondary","tertiary","disabledStyles","removeFocusStyles","__webpack_exports__","Z","variant","href","as","disabled","children","replace","scroll","shallow","passHref","className","color","rest","param","variantStyles","cls","wrapperFocusStyles","concat","react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__","jsx","div","Link","Image","props","alt","loader","contentFulImageLoader","HeadingTag","size","font","headingFontClass","headingFontClasses","tagClasses","fontTypeClass","petco","amasis","bodySizeClasses","body1","body2","body3","body4","body5","overline","text","classes","jsxs","Icon","icon","colorType","colorShade","span","h2","utils_youtubeParser","match","exec","url","videoId","length","jsx_runtime","iframe","title","src","allow","allowFullScreen","RichTextContainer","columTablet","fields","columnsTablet","columDesktop","columnsDesktop","clsx","useContainer","twMerge","customClasses","documentToReactComponents","content","renderNode","BLOCKS","HEADING_1","_","Heading","HEADING_2","HEADING_3","HEADING_4","HEADING_5","HEADING_6","LIST_ITEM","li","QUOTE","AnimateItem","delay","Quote","EMBEDDED_ASSET","ContentfulImage","width","node","data","target","file","details","image","height","addHttps","INLINES","HYPERLINK","uri","includes","youtubeParser","anchorTarget","PARAGRAPH","textStyle","fontSize","contentTextSize","textAlign","contentTextAlignment","undefined","contentColor","p","style","startsWith","dividerClassMap","darkGrey","lightGrey","white","type","dividerClasses","hr","CardArticle_CardArticle","excerpt","imageClasses","layout","objectFit","sizes","Paragraph","ArticlesDisplay_ArticlesDisplay","articles","buttonLink","from","translateY","ButtonLink","map","article","index","CardArticle","ArticleHeadline_ArticleHeadline","subTitle","author","authorLink","authorPrefix","date","h1","Fragment","shareLinks","baseUrl","label","name","ArticleShare_ArticleShare","linkHandler","shareEventHandler","method","contentType","currentUrl","getBasePath","getBaseUrl","encodedUrl","encodeURIComponent","window","open","navigator","clipboard","writeText","shareLink","button","aria-label","onClick","BreadCrumb_BreadCrumb","items","charactersLimit","baseClasses","truncateText","slice","item","totalItems","isLast","React","lastClasses","path","linkClasses","ImageBlock","ArticleTemplate_ArticleTemplate","featuredImage","articleUrl","copy","headline","hideFeaturedImage","setInitiatingComponent","useEventContext","formattedFeaturedImage","acrossArticleCards","slugs","BreadCrumb","breadCrumb","home","allArticles","PageWrapper","ArticleHeadline","articleHeadline","ArticleShare","articleShare","Divider","ArticlesDisplay","FullWidthCalloutImage","fullWidthCalloutImage","body","FullWidthCalloutBody","imageUrl","process","button1","signUpButtonText","rel","EventLogHandler","AbstractAnalyticsHandler","send","getAnalyticsFeature","KlaviyoEventHandler","eventData","attributes","properties","time","Date","metric","profile","axios","logEventHandler","googleTagManagerBrand","gtmEventHandler","GoogleTagManagerHandler","klaviyoEventHandler","EventEmitter","defaultEventEmitter","handleEvent","handlers","forEach","handler","constructor","cookies","CookieStorage","optimizelyDecision","get","analyticsFeatureKey","feature","notApplicableString","analytic","brand","dataObject","gtag","petSpecies","species","toLowerCase","petId","petName","petStatus","listingSource","locationId","content_type","pet_id","pet_name","pet_status","listing_source","location_id","getShareEventDataFromPetListing","petListing","_helpers_stringHelpers_capitalizeFirstLetter__WEBPACK_IMPORTED_MODULE_2__","id","location","postalCode","today","tomorrow","getTime","getDateXMinutesFromNow","minutes","isDateValid","isNaN","capitalizeFirstLetter","str","toUpperCase","e","t","f","n","o","arguments","r","Array","isArray"],"sourceRoot":""}