{"version":3,"file":"static/chunks/7078-d2a151b183bf2c1b.js","mappings":"4HAgCO,IAAMA,EAAwC,CACnD,CACEC,KAAM,WACNC,KAAM,WACNC,IAAK,wCACP,EACA,CACEF,KAAM,UACNC,KAAM,UACNC,IAAK,mCACP,EACA,CACEF,KAAM,YACNC,KAAM,YACNC,IAAK,yCACP,EACA,CACEF,KAAM,UACNC,KAAM,UACNC,IAAK,mCACP,EACA,CACEF,KAAM,WACNC,KAAM,WACNC,IAAK,4CACP,EACD,CAmEDC,EAAAC,CAAA,CA5B4C,OAAC,CAC3CC,KAAAA,CAAI,CACJC,QAAAA,EAAU,EAAE,CACZC,YAAAA,EAAcR,CAAkB,CACnB,CAAAS,EACb,MACE,GAAAC,EAAAC,GAAA,EAACC,MAAAA,CAA+BC,UAAW,kBAA0BC,MAAA,CAARP,YAC1DC,EAAYO,GAAG,CAAC,IACf,IAAMC,EAAOC,CAAAA,EAAAA,EAAAA,CAAAA,EAAWC,EAAWhB,IAAI,EAEvC,MACE,GAAAQ,EAAAC,GAAA,EAACC,MAAAA,UACC,GAAAF,EAAAS,IAAA,EAACC,IAAAA,CACCC,KAAMH,EAAWf,GAAG,CACpBmB,OAAO,SACPC,IAAI,aACJV,UAAU,8EAEV,GAAAH,EAAAC,GAAA,EAACK,EAAAA,CAAKV,KAAMA,EAAMkB,MAAM,iBACxB,GAAAd,EAAAC,GAAA,EAACc,OAAAA,CAAKZ,UAAU,mBAAWK,EAAWjB,IAAI,OARpCiB,EAAWjB,IAAI,CAY7B,IAGN,gRCtGO,IAAMyB,6BAA+B,IAG1C,OAAQC,GACN,IAAK,eACH,MAAO,sCACT,KAAK,gBACH,MAAO,uCACT,SACE,MAAO,IACX,CACF,EAQMC,sBAA6C,OAAC,CAClD3B,KAAAA,CAAI,CACJ4B,MAAAA,CAAK,CACK,CAAApB,EACJ,CAAEqB,uBAAAA,CAAsB,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,IAEnC,MACE,GAAArB,EAAAS,IAAA,EAAAT,EAAAsB,QAAA,YACE,GAAAtB,EAAAC,GAAA,EAACc,OAAAA,CACCZ,UAAY,sEAEXZ,IAEH,GAAAS,EAAAC,GAAA,EAACsB,KAAAA,CAAGpB,UAAU,qBACXgB,EAAMd,GAAG,CAAC,GACT,GAAAL,EAAAC,GAAA,EAACuB,KAAAA,CAAmBrB,UAAY,gBAC9B,GAAAH,EAAAC,GAAA,EAACwB,IAAIA,CACHd,KAAMe,EAAKjC,GAAG,CACdU,UAAU,+IACVS,OAAQc,EAAKd,MAAM,CACnBe,QAAS,KACPD,MAAAA,GAAAA,EAAMC,OAAO,CAEXD,CAAAA,iBAAAA,EAAKnC,IAAI,EACTmC,kBAAAA,EAAKnC,IAAI,GAET6B,EACEJ,6BAA6BU,EAAKnC,IAAI,EAG5C,WAECmC,EAAKnC,IAAI,IAjBLmC,EAAKnC,IAAI,OAwB5B,EAQMqC,qBAA4C,OAAC,CACjDrC,KAAAA,CAAI,CACJ4B,MAAAA,CAAK,CACK,CAAApB,EACJ,CAAEqB,uBAAAA,CAAsB,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,IAEnC,MACE,GAAArB,EAAAC,GAAA,EAAC4B,EAAAA,CAAUA,CAAAA,CACTC,GAAG,MACH3B,UAAU,wDAET,OAAC,CAAE4B,KAAAA,CAAI,CAAE,CAAAhC,QACR,GAAAC,EAAAS,IAAA,EAAAT,EAAAsB,QAAA,YACE,GAAAtB,EAAAS,IAAA,EAACoB,EAAAA,CAAUA,CAACG,MAAM,EAEhB7B,UAAY,qJAEXZ,EACD,GAAAS,EAAAC,GAAA,EAACK,EAAAA,CAAIA,CAAAA,CACHd,KAAMuC,EAAO,UAAY,YACzBnC,KAAM,GACNqC,UAAU,OACVC,WAAY,IACZC,GAAI,gBAAqB/B,MAAA,CAALb,QAGxB,GAAAS,EAAAC,GAAA,EAAC4B,EAAAA,CAAUA,CAACO,KAAK,EAACN,GAAG,KAAK3B,UAAU,0BACjCgB,EAAMd,GAAG,CAAC,GACT,GAAAL,EAAAC,GAAA,EAACuB,KAAAA,UACC,GAAAxB,EAAAC,GAAA,EAACwB,IAAIA,CACHd,KAAMe,EAAKjC,GAAG,CACdU,UAAY,yCACZS,OAAQc,EAAKd,MAAM,CACnBe,QAAS,KAELD,CAAAA,iBAAAA,EAAKnC,IAAI,EACTmC,kBAAAA,EAAKnC,IAAI,GAET6B,EACEJ,6BAA6BU,EAAKnC,IAAI,GAG1CmC,MAAAA,GAAAA,EAAMC,OAAO,WAGdD,EAAKnC,IAAI,IAjBLmC,EAAKnC,IAAI,OAsBtB,GAIV,EAmBM8C,kBAAkD,OAAC,CAAElB,MAAAA,CAAK,CAAE,CAAApB,EAChE,MACE,GAAAC,EAAAS,IAAA,EAACP,MAAAA,CAAIC,UAAU,wEACb,GAAAH,EAAAC,GAAA,EAACwB,IAAIA,CACHd,KAAK,iDACLC,OAAO,SACPT,UAAU,gBAEV,GAAAH,EAAAC,GAAA,EAACqC,EAAAA,CAAQA,CAAAA,CACPC,IAAI,qCACJC,IAAI,oBACJC,MAAO,IACPC,OAAQ,OAGZ,GAAA1C,EAAAC,GAAA,EAAC0C,EAAAA,CAASA,CAAAA,CAAC/C,KAAK,WAAWO,UAAU,6BAClCgB,EAAMd,GAAG,CAAC,CAACqB,EAAgBkB,IAC1B,GAAA5C,EAAAS,IAAA,EAACa,EAAAA,QAAQA,CAAAA,WACP,GAAAtB,EAAAC,GAAA,EAACwB,IAAIA,CACHd,KAAMe,EAAKjC,GAAG,CACdU,UAAU,sDACVS,OAAQc,EAAKd,MAAM,UAElBc,EAAKnC,IAAI,GAEXqD,IAAUzB,EAAM0B,MAAM,CAAG,GAAK,QARlBnB,EAAKnC,IAAI,OAclC,CA2GAG,CAAAA,EAAA,QA1EkC,OAAC,CACjCoD,WAAAA,CAAU,CACVC,UAAAA,CAAS,CACTC,UAAAA,CAAS,CACTC,YAAAA,CAAW,CACXC,WAAAA,CAAU,CACVC,mBAAAA,CAAkB,CAClBC,YAAAA,CAAW,CACH,CAAArD,EACF,CAAEsD,SAAAA,CAAQ,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,IAErB,MACE,GAAAtD,EAAAS,IAAA,EAAC8C,SAAAA,CAECpD,UAAW,GAAgBC,MAAA,CAAboD,EAAAA,CAAYA,CAAC,6CAG3B,GAAAxD,EAAAS,IAAA,EAACP,MAAAA,CACCC,UAAU,8FAGV,GAAAH,EAAAC,GAAA,EAAC2B,qBAAAA,CAAsB,GAAGmB,CAAS,GACnC,GAAA/C,EAAAC,GAAA,EAAC2B,qBAAAA,CAAsB,GAAGoB,CAAS,GACnC,GAAAhD,EAAAC,GAAA,EAAC2B,qBAAAA,CAAsB,GAAGqB,CAAW,GACpCI,OAAAA,EACC,GAAArD,EAAAC,GAAA,EAAC2B,qBAAAA,CAAsB,GAAGsB,CAAU,GAEpC,GAAAlD,EAAAC,GAAA,EAAC2B,qBAAAA,CAAsB,GAAGuB,CAAkB,MAIhD,GAAAnD,EAAAS,IAAA,EAACP,MAAAA,CACCC,UAAU,iHAGV,GAAAH,EAAAC,GAAA,EAACC,MAAAA,CAAIC,UAAU,sBACb,GAAAH,EAAAC,GAAA,EAACC,MAAAA,CAAIC,UAAU,qBACb,GAAAH,EAAAC,GAAA,EAACwD,EAAAA,CAAQA,CAAAA,CAACC,QAAQ,iBAGtB,GAAA1D,EAAAC,GAAA,EAACC,MAAAA,CAAIC,UAAU,gCACb,GAAAH,EAAAC,GAAA,EAACiB,sBAAAA,CAAuB,GAAG6B,CAAS,KAEtC,GAAA/C,EAAAC,GAAA,EAACC,MAAAA,CAAIC,UAAU,gCACb,GAAAH,EAAAC,GAAA,EAACiB,sBAAAA,CAAuB,GAAG8B,CAAS,KAEtC,GAAAhD,EAAAC,GAAA,EAACC,MAAAA,CAAIC,UAAU,gCACb,GAAAH,EAAAC,GAAA,EAACiB,sBAAAA,CAAuB,GAAG+B,CAAW,KAExC,GAAAjD,EAAAC,GAAA,EAACC,MAAAA,CAAIC,UAAU,gCACZkD,OAAAA,EACC,GAAArD,EAAAC,GAAA,EAACiB,sBAAAA,CAAuB,GAAGgC,CAAU,GAErC,GAAAlD,EAAAC,GAAA,EAACiB,sBAAAA,CAAuB,GAAGiC,CAAkB,QAInD,GAAAnD,EAAAC,GAAA,EAACC,MAAAA,CAAIC,UAAU,0BACb,GAAAH,EAAAC,GAAA,EAAC0D,EAAAA,CAAOA,CAAAA,CAACC,KAAK,gBAGhB,GAAA5D,EAAAC,GAAA,EAACC,MAAAA,CAAIC,UAAU,oCACb,GAAAH,EAAAC,GAAA,EAAC4D,EAAAA,CAAWA,CAAAA,CAACjE,KAAM,OAErB,GAAAI,EAAAC,GAAA,EAACC,MAAAA,CAAIC,UAAU,sCACb,GAAAH,EAAAC,GAAA,EAAC0C,EAAAA,CAASA,CAAAA,CAAC/C,KAAK,oBAAYkD,MAE9B,GAAA9C,EAAAC,GAAA,EAACC,MAAAA,CAAIC,UAAU,gBACb,GAAAH,EAAAC,GAAA,EAACoC,kBAAAA,CAAkBlB,MAAOiC,QAIlC,wJCjSO,IAAMU,EAA8BC,EAAAA,EAAQA,gBCmE5C,gCAAMC,oCACsB,KAChBC,qBAAAA,CAAwB,IAAIC,EAAAA,CAAYA,CAEL,KACnCC,wBAAAA,CAA2B,sBAE3BC,sBAAAA,CAAyB,+BAMzC,KACMC,GAAAA,CAAM,IACX,IAAI,CAACJ,qBAAqB,CAACI,GAAG,CAC5B,IAAI,CAACF,wBAAwB,CAC7BG,EACA,CAAEC,QAASR,EAAAA,EAAQA,EAEvB,EAMC,KACMS,GAAAA,CAAM,IACJ,IAAI,CAACP,qBAAqB,CAACO,GAAG,CACnC,IAAI,CAACL,wBAAwB,EAII,KAC9BM,MAAAA,CAAS,KACd,IAAI,CAACR,qBAAqB,CAACQ,MAAM,CAAC,IAAI,CAACN,wBAAwB,CACjE,EAMC,KACM/C,sBAAAA,CAAyB,IAC9B,IAAI,CAAC6C,qBAAqB,CAACI,GAAG,CAC5B,IAAI,CAACD,sBAAsB,CAC3B,CAAEM,UAAAA,CAAU,EACZ,CAAEH,QAAST,CAAsB,EAErC,EAOC,KACMa,sBAAAA,CAAyB,KAM9B,IAAMC,EAAO,IAAI,CAACX,qBAAqB,CAACO,GAAG,CACzC,IAAI,CAACJ,sBAAsB,EAOvBM,EAAYE,MAAAA,EAAAA,KAAAA,EAAAA,EAAMF,SAAS,QAEjC,GAIO,IACT,EACF,iBC3DA,IAAMG,EAAeC,CAAAA,EAAAA,EAAAA,aAAAA,EAhC6B,CAGhDC,WAAY,KAAO,EAMnBC,QAAS,IAAMC,KAAAA,EAGfC,UAAW,KAAO,EAGlB9D,uBAAwB,KAAO,EAM/BuD,uBAAwB,IACtBQ,EAAAA,EAAmBA,CAMrBC,SAAU,IAAMH,KAAAA,CAClB,GAsBO,SAASI,qBAAqBtF,CAEb,KAFa,CACnCuF,SAAAA,CAAQ,CACc,CAFavF,EAI7BkE,EAAwBsB,CAAAA,EAAAA,EAAAA,OAAAA,EAAQ,IAAM,IAAIvB,sBAAyB,EAAE,EAQrEe,EAAaS,CAAAA,EAAAA,EAAAA,WAAAA,EACjB,IACE,IAAMC,EAAaxB,EAAsBO,GAAG,GACtCkB,EAAcD,GAAc,CAAC,EAC/BC,GAAeC,GACjBA,CAAAA,EAAU,CAAE,GAAGD,CAAW,CAAE,GAAGC,CAAO,CAAC,EAEzC1B,EAAsBI,GAAG,CAACsB,EAC5B,EACA,CAAC1B,EAAsB,EAQnBiB,EAAYM,CAAAA,EAAAA,EAAAA,WAAAA,EAAY,KAC5BvB,EAAsBQ,MAAM,EAC9B,EAAG,CAACR,EAAsB,EAOpBe,EAAUQ,CAAAA,EAAAA,EAAAA,WAAAA,EAAY,IACnBvB,EAAsBO,GAAG,IAAMS,KAAAA,EACrC,CAAChB,EAAsB,EAOpBmB,EAAWI,CAAAA,EAAAA,EAAAA,WAAAA,EAAY,KAC3B,IAAMZ,EAAOX,EAAsBO,GAAG,GACtC,OAAOI,MAAAA,EAAAA,KAAAA,EAAAA,EAAMgB,KAAK,EACjB,CAAC3B,EAAsB,EAOpB7C,EAAyBoE,CAAAA,EAAAA,EAAAA,WAAAA,EAC7B,IACEvB,EAAsB7C,sBAAsB,CAACsD,EAC/C,EACA,CAACT,EAAsB,EAQnBU,EAAyBa,CAAAA,EAAAA,EAAAA,WAAAA,EAAY,IAClCvB,EAAsBU,sBAAsB,GAClD,CAACV,EAAsB,EAE1B,MACE,GAAA4B,EAAA5F,GAAA,EAAC4E,EAAaiB,QAAQ,EACpBC,MAAO,CACLb,UAAAA,EACAE,SAAAA,EACAJ,QAAAA,EACAL,uBAAAA,EACAvD,uBAAAA,EACA2D,WAAAA,CACF,WAECO,GAGP,CAOO,IAAMjE,gBAAkB,IAAqB2E,CAAAA,EAAAA,EAAAA,UAAAA,EAAWnB","sources":["webpack://_N_E/./src/components/molecules/SocialLinks/SocialLinks.tsx","webpack://_N_E/./src/components/organisms/Footer/Footer.tsx","webpack://_N_E/./src/lib/constants/constants/storage.ts","webpack://_N_E/./src/lib/storageClasses/analyticsEventStorage.ts","webpack://_N_E/./src/lib/hooks/analytics/useEventContext.tsx","webpack://_N_E/<anon>"],"sourcesContent":["import { chooseIcon, IconType } from '@/components/atoms/Icon/Icon';\n\n/**\n * ISocialLinks Interface for a SocialLink Item\n *\n * @interface ISocialLinkItem\n */\nexport interface ISocialLinkItem {\n  /**\n   * The name of the social link\n   *\n   * @memberof ISocialLinkItem\n   * @member {string} name\n   */\n  name: string;\n  /**\n   * The url of the social link\n   *\n   * @memberof ISocialLinkItem\n   * @member {string} url\n   */\n  url: string;\n  /**\n   * The icon of the social link\n   *\n   * @memberof ISocialLinkItem\n   * @member {IconType} icon\n   */\n  icon: IconType;\n}\n\n/** Social Links */\nexport const defaultSocialLinks: ISocialLinkItem[] = [\n  {\n    name: 'Facebook',\n    icon: 'facebook',\n    url: 'https://www.facebook.com/petcolovelost',\n  },\n  {\n    name: 'Twitter',\n    icon: 'twitter',\n    url: 'https://twitter.com/petcolovelost',\n  },\n  {\n    name: 'Instagram',\n    icon: 'instagram',\n    url: 'https://www.instagram.com/petcolovelost',\n  },\n  {\n    name: 'Youtube',\n    icon: 'youtube',\n    url: 'https://www.youtube.com/petcolove',\n  },\n  {\n    name: 'Nextdoor',\n    icon: 'nextdoor',\n    url: 'https://nextdoor.com/pages/petco-love-lost',\n  },\n];\n\n/**\n * ISocialLinks Interface for SocialLinks component\n *\n * @interface ISocialLinks\n */\nexport interface ISocialLinks {\n  /**\n   * The size of the Icons to display.\n   *\n   * @memberof ISocialLinks\n   * @member {number} size\n   */\n  size: number;\n  /**\n   * The optional social links to display\n   *\n   * @memberof ISocialLinks\n   * @default defaultSocialLinks\n   * @member {ISocialLinkItem[]} [socialLinks]\n   */\n  socialLinks?: ISocialLinkItem[];\n  /**\n   * The optional classes\n   *\n   * @memberof ISocialLinks\n   * @default ''\n   * @member {string} [classes]\n   */\n  classes?: string;\n}\n\n/**\n * Social Links A list of our social links to display out in the application.\n *\n * @param {ISocialLinks} props - The props for the SocialLinks component\n * @returns {React.FC<ISocialLinks>} Social Links Component\n */\nconst SocialLinks: React.FC<ISocialLinks> = ({\n  size,\n  classes = '',\n  socialLinks = defaultSocialLinks,\n}: ISocialLinks) => {\n  return (\n    <div data-testid=\"social-links\" className={`flex space-x-6 ${classes}`}>\n      {socialLinks.map((socialLink) => {\n        const Icon = chooseIcon(socialLink.icon);\n\n        return (\n          <div key={socialLink.name}>\n            <a\n              href={socialLink.url}\n              target=\"_blank\"\n              rel=\"noreferrer\"\n              className=\"focus-visible:outline-focus-400 text-base-400 hover:text-base-300\"\n            >\n              <Icon size={size} color=\"currentColor\" />\n              <span className=\"sr-only\">{socialLink.name}</span>\n            </a>\n          </div>\n        );\n      })}\n    </div>\n  );\n};\n\nexport default SocialLinks;\n","import CdnImage from '@/component-library/atoms/CdnImage/CdnImage';\nimport Divider from '@/components/atoms/Divider/Divider';\nimport { gridMaxWidth } from '@/components/atoms/Grid/GridClasses';\nimport Icon from '@/components/atoms/Icon/Icon';\nimport LostLogo from '@/components/atoms/LostLogo/LostLogo';\nimport Paragraph from '@/components/atoms/Paragraph/Paragraph';\nimport SocialLinks from '@/components/molecules/SocialLinks/SocialLinks';\nimport { useEventContext } from '@/lib/hooks/analytics/useEventContext';\nimport { useUserContext } from '@/lib/hooks/userContext/UserContext';\nimport { AnalyticsInitiatingComponent } from '@/lib/storageClasses/analyticsEventStorage';\nimport { Disclosure } from '@headlessui/react';\nimport Link from 'next/link';\nimport { Fragment } from 'react';\nimport { IMenuItem, MenuLink } from './FooterLinks';\n\n/**\n * Determine Initiating Component for analytics purposes\n *\n * @param {string} linkName - The name of the link\n * @returns {AnalyticsInitiatingComponent} - The initiating component\n */\nexport const determineInitiatingComponent = (\n  linkName: string\n): AnalyticsInitiatingComponent => {\n  switch (linkName) {\n    case 'I Lost a Pet':\n      return 'I Lost A Pet Footer Link / All Pages';\n    case 'I Found a Pet':\n      return 'I Found A Pet Footer Link / All Pages';\n    default:\n      return 'NA';\n  }\n};\n\n/**\n * Desktop Footer Menu Item This is the menu item that is displayed on desktop.\n *\n * @param {IMenuItem} props - The props for the DesktopFooterMenuItem component\n * @returns {React.FC<IMenuItem>} Desktop Footer Menu Item Component\n */\nconst DesktopFooterMenuItem: React.FC<IMenuItem> = ({\n  name,\n  links,\n}: IMenuItem) => {\n  const { setInitiatingComponent } = useEventContext();\n\n  return (\n    <>\n      <span\n        className={`font-petco font-bold uppercase text-base-300 text-overline`}\n      >\n        {name}\n      </span>\n      <ul className=\"mt-[17px]\">\n        {links.map((link: MenuLink) => (\n          <li key={link.name} className={`mb-4`}>\n            <Link\n              href={link.url}\n              className=\"text-body5 hover:text-base-300 font-petco text-neutral-800 focus:ring-focus-400 focus-visible:ring-focus-400 focus-visible:outline-focus-400\"\n              target={link.target}\n              onClick={() => {\n                link?.onClick;\n                if (\n                  link.name === 'I Lost a Pet' ||\n                  link.name === 'I Found a Pet'\n                ) {\n                  setInitiatingComponent(\n                    determineInitiatingComponent(link.name)\n                  );\n                }\n              }}\n            >\n              {link.name}\n            </Link>\n          </li>\n        ))}\n      </ul>\n    </>\n  );\n};\n\n/**\n * Mobile Footer Menu Item This is the menu item that is displayed on mobile.\n *\n * @param {IMenuItem} props - The props for the MobileFooterMenuItem component\n * @returns {React.FC<IMenuItem>} Mobile Footer Menu Item Component\n */\nconst MobileFooterMenuItem: React.FC<IMenuItem> = ({\n  name,\n  links,\n}: IMenuItem) => {\n  const { setInitiatingComponent } = useEventContext();\n\n  return (\n    <Disclosure\n      as=\"div\"\n      className=\"min-h-[56px] border-b-2 border-b-neutral-300\"\n    >\n      {({ open }) => (\n        <>\n          <Disclosure.Button\n            data-testid=\"mobile-footer-menu-button\"\n            className={`w-full h-full inline-flex justify-between min-h-[56px] text-left items-center font-petco font-bold uppercase text-base-300 text-overline`}\n          >\n            {name}\n            <Icon\n              icon={open ? 'arrowUp' : 'arrowDown'}\n              size={24}\n              colorType=\"base\"\n              colorShade={400}\n              id={`footer-arrow-${name}`}\n            />\n          </Disclosure.Button>\n          <Disclosure.Panel as=\"ul\" className=\"-mt-2.5 mb-2.5\">\n            {links.map((link: MenuLink) => (\n              <li key={link.name} data-testid=\"mobile-footer-menu-item\">\n                <Link\n                  href={link.url}\n                  className={`font-petco text-body5 text-neutral-800`}\n                  target={link.target}\n                  onClick={() => {\n                    if (\n                      link.name === 'I Lost a Pet' ||\n                      link.name === 'I Found a Pet'\n                    ) {\n                      setInitiatingComponent(\n                        determineInitiatingComponent(link.name)\n                      );\n                    }\n                    link?.onClick;\n                  }}\n                >\n                  {link.name}\n                </Link>\n              </li>\n            ))}\n          </Disclosure.Panel>\n        </>\n      )}\n    </Disclosure>\n  );\n};\n\n/**\n * IFooterBottomLinks This is the interface for the bottom links underneath the\n * Disclosure text.\n *\n * @interface\n */\ninterface IFooterBottomLinks {\n  /** The links to display. */\n  links: MenuLink[];\n}\n\n/**\n * FooterBottomLinks This is the bottom links underneath the Disclosure text.\n *\n * @param {IFooterBottomLinks} props - The props for the FooterBottomLinks\n * @returns {React.FC<IFooterBottomLinks>} Footer Bottom Links Component\n */\nconst FooterBottomLinks: React.FC<IFooterBottomLinks> = ({ links }) => {\n  return (\n    <div className=\"flex flex-col sm:flex-row gap-4 items-center justify-center\">\n      <Link\n        href=\"https://www.charitynavigator.org/ein/330845930\"\n        target=\"_blank\"\n        className=\"mt-1\"\n      >\n        <CdnImage\n          src=\"/assets/lost/charity-navigator.png\"\n          alt=\"Charity Navigator\"\n          width={128}\n          height={17}\n        />\n      </Link>\n      <Paragraph size=\"overline\" className=\"inline-flex gap-3\">\n        {links.map((link: MenuLink, index: number) => (\n          <Fragment key={link.name}>\n            <Link\n              href={link.url}\n              className=\"focus-visible:outline-focus-400 hover:text-base-300\"\n              target={link.target}\n            >\n              {link.name}\n            </Link>\n            {index !== links.length - 1 && ' | '}\n          </Fragment>\n        ))}\n      </Paragraph>\n    </div>\n  );\n};\n\n/**\n * IFooter This is the interface for the Footer component.\n *\n * @interface\n */\nexport interface IFooter {\n  /** The Copyright Text at the bottom of the footer. */\n  disclosure: string;\n  /** The menu items to display in the footer in the first column. */\n  columnOne: IMenuItem;\n  /** The menu items to display in the footer in the second column. */\n  columnTwo: IMenuItem;\n  /** The menu items to display in the footer in the third column. */\n  columnThree: IMenuItem;\n  /** The menu items to display in the footer in the fourth column. */\n  columnFour: IMenuItem;\n  /**\n   * The menu items to display in the footer in the fourth column when user is\n   * logged in.\n   */\n  columnFourLoggedIn: IMenuItem;\n  /** The links to display underneath the disclosure text. */\n  bottomLinks: MenuLink[];\n}\n\n/**\n * Footer Used to display the footer of the application.\n *\n * @param {IFooter} props - The props for the Footer component\n * @returns {React.FC<IFooter>} Footer Component\n */\nconst Footer: React.FC<IFooter> = ({\n  disclosure,\n  columnOne,\n  columnTwo,\n  columnThree,\n  columnFour,\n  columnFourLoggedIn,\n  bottomLinks,\n}: IFooter) => {\n  const { userType } = useUserContext();\n\n  return (\n    <footer\n      data-testid=\"footer\"\n      className={`${gridMaxWidth} flex flex-col text-center mt-5`}\n    >\n      {/* Mobile View */}\n      <div\n        className=\"flex flex-col md:hidden border-t-[5px] border-t-base-400 border-t-solid text-left\"\n        data-testid=\"footer-mobile\"\n      >\n        <MobileFooterMenuItem {...columnOne} />\n        <MobileFooterMenuItem {...columnTwo} />\n        <MobileFooterMenuItem {...columnThree} />\n        {userType === null ? (\n          <MobileFooterMenuItem {...columnFour} />\n        ) : (\n          <MobileFooterMenuItem {...columnFourLoggedIn} />\n        )}\n      </div>\n      {/* Desktop View */}\n      <div\n        className=\"hidden md:grid grid-flow-row-dense grid-cols-6 border-t-[5px] py-10 border-t-base-400 border-t-solid\"\n        data-testid=\"footer-desktop\"\n      >\n        <div className=\"col-span-2\">\n          <div className=\"w-[200px]\">\n            <LostLogo variant=\"standard\" />\n          </div>\n        </div>\n        <div className=\"col-span-1 text-left\">\n          <DesktopFooterMenuItem {...columnOne} />\n        </div>\n        <div className=\"col-span-1 text-left\">\n          <DesktopFooterMenuItem {...columnTwo} />\n        </div>\n        <div className=\"col-span-1 text-left\">\n          <DesktopFooterMenuItem {...columnThree} />\n        </div>\n        <div className=\"col-span-1 text-left\">\n          {userType === null ? (\n            <DesktopFooterMenuItem {...columnFour} />\n          ) : (\n            <DesktopFooterMenuItem {...columnFourLoggedIn} />\n          )}\n        </div>\n      </div>\n      <div className=\"hidden md:flex\">\n        <Divider type=\"lightGrey\" />\n      </div>\n      {/* Shared for Mobile and Desktop */}\n      <div className=\"flex justify-center my-8\">\n        <SocialLinks size={24} />\n      </div>\n      <div className=\"max-w-[780px] mx-auto mb-4\">\n        <Paragraph size=\"overline\">{disclosure}</Paragraph>\n      </div>\n      <div className=\"mb-8\">\n        <FooterBottomLinks links={bottomLinks} />\n      </div>\n    </footer>\n  );\n};\n\nexport default Footer;\n","import { tomorrow } from '@/lib/utils/helpers/dateHelpers/dates';\n\n/**\n * The default expiration date\n *\n * @constant {Date}\n */\nexport const defaultExpirationDate: Date = tomorrow;\n","import { notApplicableString } from '@/lib/constants/constants/analytics';\nimport { defaultExpirationDate } from '@/lib/constants/constants/storage';\nimport { EventData } from '@/lib/hooks/analytics/useEventContext';\nimport { tomorrow } from '@/lib/utils/helpers/dateHelpers/dates';\nimport LocalStorage from '@/lib/utils/storage/local-storage';\n\n/**\n * The valid type for the initiating component param\n *\n * @type {AnalyticsInitiatingComponent}\n */\nexport type AnalyticsInitiatingComponent =\n  | 'I Lost A Pet Button / Homepage'\n  | 'I Found A Pet Button / Homepage'\n  | 'I Lost A Pet Footer Link / All Pages'\n  | 'I Found A Pet Footer Link / All Pages'\n  | 'Search All Pets Link / Homepage'\n  | 'Search All Pets Link / How To Help Page'\n  | 'Search All Pets Button / How To Help Page'\n  | 'Sign Up Button / All Pages'\n  | 'Search Persistent Banner / All Pages'\n  | 'I Found A Pet Button / Shelter Dashboard'\n  | 'I Found A Pet Button / Shelter Homepage'\n  | 'Search Button / User Dashboard'\n  | 'Photo Search Chip / Search Results Page'\n  | 'Microchip Search Chip / Search Results Page'\n  | 'Distance Search Chip / Search Results Page'\n  | 'Photo Search Button / Search Results Page'\n  | 'Microchip Search Button / Search Results Page'\n  | 'Distance Search Button / Search Results Page'\n  | 'Photo Search Link / Search Results Page'\n  | 'Microchip Search Link / Search Results Page'\n  | 'Distance Search Link / Search Results Page'\n  | 'Search By Microchip Link / Lost and Found Tips Page'\n  | 'Contact Pet Finder Button'\n  | 'Contact Pet Parent Button'\n  | 'View Reported Pets Near Me / Alert Matches Page'\n  | 'View Matches Button / Shelter Pets Page'\n  | 'View Matches Button / Shelter Pet Profile'\n  | 'Card Header Link / Photo Search Results Page / Lost'\n  | 'Card Header Link / Photo Search Results Page / Found'\n  | 'Card Header Link / Distance Search Results Page / Lost'\n  | 'Card Header Link / Distance Search Results Page / Found'\n  | 'Card Header Link / Microchip Search Results Page / Lost'\n  | 'Card Header Link / Microchip Search Results Page / Found'\n  | 'Card Header Link / Distance Search Results Page / All'\n  | 'Card Header Link / Distance Search Results Map / Lost'\n  | 'Card Header Link / Distance Search Results Map / Found'\n  | 'Card Header Link / Distance Search Results Map / All'\n  | 'Add Pet Button / User Dashboard / Lost'\n  | 'Add Pet Button / User Dashboard / Found'\n  | 'Report as Lost Button / User Dashboard / Lost'\n  | 'Map View Icon'\n  | 'List View Icon'\n  | typeof notApplicableString;\n\n/**\n * The initiating component data\n *\n * @interface IAnalyticsInitiatingComponentData\n */\ninterface IAnalyticsInitiatingComponentData {\n  /** The initiating component */\n  component: AnalyticsInitiatingComponent;\n  /** The data expiration date */\n  expiration: Date;\n}\n\n/**\n * AnalyticsEventStorage class, this is used to store the analytics event\n * information that is not present in the context of certain pages\n *\n * @class AnalyticsEventStorage\n */\nexport class AnalyticsEventStorage {\n  /** The session storage instance */\n  private readonly analyticsEventStorage = new LocalStorage();\n\n  /** The key to store the analytics event data under */\n  private readonly analyticsEventStorageKey = 'analyticsEvent';\n\n  private readonly initiatingComponentKey = 'initiatingAnalyticsComponent';\n\n  /**\n   * Set data in session storage\n   *\n   * @param {EventData} analyticsEvent - The analytics event object to store\n   */\n  public set = (analyticsEvent: EventData) => {\n    this.analyticsEventStorage.set(\n      this.analyticsEventStorageKey,\n      analyticsEvent,\n      { expires: tomorrow }\n    );\n  };\n\n  /**\n   * Get data from session storage\n   *\n   * @returns {EventData | null} The analytics event object\n   */\n  public get = (): EventData | null => {\n    return this.analyticsEventStorage.get(\n      this.analyticsEventStorageKey\n    ) as EventData;\n  };\n\n  /** Delete data from session storage */\n  public delete = () => {\n    this.analyticsEventStorage.delete(this.analyticsEventStorageKey);\n  };\n\n  /**\n   * Set the initiating component\n   *\n   * @param {string} component - The initiating component\n   */\n  public setInitiatingComponent = (component: AnalyticsInitiatingComponent) => {\n    this.analyticsEventStorage.set(\n      this.initiatingComponentKey,\n      { component },\n      { expires: defaultExpirationDate }\n    );\n  };\n\n  /**\n   * Retrieve the initiating component\n   *\n   * @constant {AnalyticsInitiatingComponent} initiatingComponent\n   * @returns {AnalyticsInitiatingComponent} The initiating component\n   */\n  public getInitiatingComponent = (): AnalyticsInitiatingComponent => {\n    /**\n     * The analytics initiating component data\n     *\n     * @constant {IAnalyticsInitiatingComponentData} data\n     */\n    const data = this.analyticsEventStorage.get(\n      this.initiatingComponentKey\n    ) as IAnalyticsInitiatingComponentData;\n    /**\n     * The initiating component\n     *\n     * @constant {AnalyticsInitiatingComponent} component\n     */\n    const component = data?.component;\n\n    if (component) {\n      return component;\n    }\n\n    return 'NA';\n  };\n}\n","import { notApplicableString } from '@/lib/constants/constants/analytics';\nimport { PetStatus } from '@/lib/constants/types/analytics';\nimport {\n  AnalyticsEventStorage,\n  AnalyticsInitiatingComponent,\n} from '@/lib/storageClasses/analyticsEventStorage';\nimport { PetFlowType } from '@/lib/utils/analytics/petSearch';\nimport {\n  ReactNode,\n  createContext,\n  useCallback,\n  useContext,\n  useMemo,\n} from 'react';\n\n/**\n * The data structure for the event data, we can add more properties as needed\n *\n * @interface EventData\n */\nexport interface EventData {\n  /** The method behind the operation */\n  method?: string;\n  /** The status of the pet (Lost, Found, Safe at Home) */\n  petStatus?: PetStatus;\n  /** The text on the button that was clicked to get to this event */\n  clickText?: string;\n  /** The id of the pet entity */\n  petId?: number;\n  /** The name of the pet */\n  petName?: string;\n  /** The zip code associated with the pet */\n  locationId?: string;\n  /** The species of the pet */\n  species?: string;\n  /** The start date of the search */\n  start?: string | null;\n  /** The flow type */\n  flowType?: PetFlowType;\n}\n\n/** This is the data structure that can be returned from the provider */\nexport interface IEventContext {\n  /** This is the method for updating the data */\n  updateData: (newData: EventData) => void;\n  /** This is the method for clearing the data */\n  clearData: () => void;\n  /** Get data */\n  getData: () => EventData | undefined;\n  /** Set the initiating component state */\n  setInitiatingComponent: (component: AnalyticsInitiatingComponent) => void;\n  /** The initiating component */\n  getInitiatingComponent: () => AnalyticsInitiatingComponent;\n  /** Get the pet id */\n  getPetId: () => number | undefined;\n}\n\n/**\n * The default event context\n *\n * @constant {IEventContext} defaultEventContext\n */\nexport const defaultEventContext: IEventContext = {\n  /** This method is used to update the data */\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  updateData: () => {},\n  /**\n   * This method is used to get the data\n   *\n   * @returns {undefined} - The data\n   */\n  getData: () => undefined,\n  /** This method is used to clear the data */\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  clearData: () => {},\n  /** Set the initiating component state */\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  setInitiatingComponent: () => {},\n  /**\n   * The default initiating component\n   *\n   * @returns {string} - The initiating component\n   */\n  getInitiatingComponent: (): AnalyticsInitiatingComponent =>\n    notApplicableString,\n  /**\n   * The default pet id\n   *\n   * @returns {number | undefined} - The pet id\n   */\n  getPetId: () => undefined,\n};\n\n/** This is the context */\nconst EventContext = createContext<IEventContext>(defaultEventContext);\n\n/**\n * The interface for the EventContextProvider props\n *\n * @interface\n */\ninterface IEventContextProvider {\n  /** The children wrapped by the provider */\n  children: ReactNode;\n}\n\n/**\n * The EventContextProvider component.\n *\n * @param {IEventContextProvider} props - The props for the\n *   EventContextProvider.\n * @returns {Element} - The EventContextProvider.\n */\nexport function EventContextProvider({\n  children,\n}: IEventContextProvider): JSX.Element {\n  // Make instance of AnalyticsEventStorage referentially stable so context methods can be passed to the dependency array\n  const analyticsEventStorage = useMemo(() => new AnalyticsEventStorage(), []);\n\n  /**\n   * Update the state of data\n   *\n   * @param {EventData} newData - The new data\n   * @returns {void}\n   */\n  const updateData = useCallback(\n    (newData: EventData) => {\n      const storedData = analyticsEventStorage.get();\n      const currentData = storedData || {};\n      if (currentData && newData) {\n        newData = { ...currentData, ...newData };\n      }\n      analyticsEventStorage.set(newData);\n    },\n    [analyticsEventStorage]\n  );\n\n  /**\n   * Clear the state of data\n   *\n   * @returns {void}\n   */\n  const clearData = useCallback(() => {\n    analyticsEventStorage.delete();\n  }, [analyticsEventStorage]);\n\n  /**\n   * Return the state of data, if it is not there then check the storage\n   *\n   * @returns {EventData | undefined} - The data\n   */\n  const getData = useCallback(() => {\n    return analyticsEventStorage.get() || undefined;\n  }, [analyticsEventStorage]);\n\n  /**\n   * Return the pet id from the storage if available\n   *\n   * @returns {number | undefined} - The pet id\n   */\n  const getPetId = useCallback(() => {\n    const data = analyticsEventStorage.get();\n    return data?.petId;\n  }, [analyticsEventStorage]);\n\n  /**\n   * Set the initiating component\n   *\n   * @param {AnalyticsInitiatingComponent} component - The initiating component\n   */\n  const setInitiatingComponent = useCallback(\n    (component: AnalyticsInitiatingComponent) => {\n      analyticsEventStorage.setInitiatingComponent(component);\n    },\n    [analyticsEventStorage]\n  );\n\n  /**\n   * Retrieve the initiating component\n   *\n   * @returns {AnalyticsInitiatingComponent} - The initiating component\n   */\n  const getInitiatingComponent = useCallback(() => {\n    return analyticsEventStorage.getInitiatingComponent();\n  }, [analyticsEventStorage]);\n\n  return (\n    <EventContext.Provider\n      value={{\n        clearData,\n        getPetId,\n        getData,\n        getInitiatingComponent,\n        setInitiatingComponent,\n        updateData,\n      }}\n    >\n      {children}\n    </EventContext.Provider>\n  );\n}\n\n/**\n * This is the hook for the event context\n *\n * @returns {IEventContext} - The context\n */\nexport const useEventContext = (): IEventContext => useContext(EventContext);\n"],"names":["defaultSocialLinks","name","icon","url","__webpack_exports__","Z","size","classes","socialLinks","param","react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__","jsx","div","className","concat","map","Icon","chooseIcon","socialLink","jsxs","a","href","target","rel","color","span","determineInitiatingComponent","linkName","DesktopFooterMenuItem","links","setInitiatingComponent","useEventContext","Fragment","ul","li","Link","link","onClick","MobileFooterMenuItem","Disclosure","as","open","Button","colorType","colorShade","id","Panel","FooterBottomLinks","CdnImage","src","alt","width","height","Paragraph","index","length","disclosure","columnOne","columnTwo","columnThree","columnFour","columnFourLoggedIn","bottomLinks","userType","useUserContext","footer","gridMaxWidth","LostLogo","variant","Divider","type","SocialLinks","defaultExpirationDate","tomorrow","AnalyticsEventStorage","analyticsEventStorage","LocalStorage","analyticsEventStorageKey","initiatingComponentKey","set","analyticsEvent","expires","get","delete","component","getInitiatingComponent","data","EventContext","createContext","updateData","getData","undefined","clearData","notApplicableString","getPetId","EventContextProvider","children","useMemo","useCallback","storedData","currentData","newData","petId","jsx_runtime","Provider","value","useContext"],"sourceRoot":""}