{"version":3,"file":"static/chunks/306-b88bde2c22f064bd.js","mappings":"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","sources":["webpack://_N_E/./components/city-blocks/header-copy.tsx","webpack://_N_E/./components/city-blocks/max-width-container.tsx","webpack://_N_E/./components/dynamic-image/roundAndScale.ts","webpack://_N_E/./components/dynamic-image/utils.ts","webpack://_N_E/./components/dynamic-image/DynamicImage.tsx","webpack://_N_E/./components/dynamic-image/index.tsx","webpack://_N_E/./components/city-blocks/crumb.tsx","webpack://_N_E/./components/city-blocks/breadcrumbs.tsx","webpack://_N_E/./components/hero-block/zip-code-input.tsx","webpack://_N_E/./components/hero-block/hero-block.tsx","webpack://_N_E/./components/city-blocks/header-bar.tsx","webpack://_N_E/./components/footer/footer-list.tsx","webpack://_N_E/./components/footer/footer.tsx","webpack://_N_E/./components/layout.tsx","webpack://_N_E/./shared/baby-grammar-rules.ts","webpack://_N_E/./shared/no-follow-link.tsx","webpack://_N_E/./utils/asset-utils.ts","webpack://_N_E/./utils/breadcrumb-util.ts","webpack://_N_E/./utils/urls.ts","webpack://_N_E/<anon>"],"sourcesContent":["import React from 'react';\n\ninterface IProps {\n className?: string;\n title: React.ReactElement | string;\n content?: React.ReactElement | string;\n}\n\nexport const HeaderCopy: React.FC<IProps> = ({ className, title, content }) => (\n <div className={`flex-col text-neutral-800 ${className}`}>\n <h2 className='mb-4 text-3xl font-bold'>{title}</h2>\n {content && <span className='text-lg font-normal'>{content}</span>}\n </div>\n);\n","import React from 'react';\n\ninterface IProps {\n id?: string;\n className?: string;\n children;\n}\n\nexport const MaxWidthContainer: React.FC<IProps> = ({ id, className, children }) => (\n <div id={id} className={`mx-auto w-full md:w-[768px] lg:w-[1032px] ${className}`}>\n {children}\n </div>\n);\n","function roundToNearest(num: number, bucketSize: number): number {\n return Math.floor(Math.ceil(num / bucketSize) * bucketSize);\n}\n\nconst widthScaleToNearestBucket = (\n [oldWidth, oldHeight]: readonly [number, number],\n bucketSize: number\n): [number, number] => {\n const newWidth = roundToNearest(oldWidth, bucketSize);\n const newHeight = Math.ceil(oldHeight * (newWidth / oldWidth)); // Based on width\n return [newWidth, newHeight];\n};\n\nconst heightScaleToNearestBucket = (\n [oldWidth, oldHeight]: readonly [number, number],\n bucketSize: number\n): [number, number] => {\n const newHeight = roundToNearest(oldHeight, bucketSize);\n const newWidth = Math.ceil(oldWidth * (newHeight / oldHeight)); // Based on height\n return [newWidth, newHeight];\n};\n\nexport function roundAndScale([oldWidth, oldHeight]: readonly [number, number], bucketSize: number): [number, number] {\n return oldWidth > oldHeight\n ? widthScaleToNearestBucket([oldWidth, oldHeight], bucketSize)\n : heightScaleToNearestBucket([oldWidth, oldHeight], bucketSize);\n}\n","import { trimStart } from 'lodash';\nimport { thumborURL } from 'react-thumbor-img';\nimport { getBaseImagePath, getThumborEndpoint, isDevBox, isDevEnvironment } from 'utils/environment-util';\nimport { roundAndScale } from './roundAndScale';\nimport { ThumborImgUrlProps } from './types';\n\nconst MAX_IMAGE_SCALE = 2;\nconst DEFAULT_DEVICE_PIXEL_RATIO = 1;\n\nexport const generateThumborImgUrl = ({ src, width, height, bucketSize = 50 }: ThumborImgUrlProps): string => {\n if (src.startsWith('data:')) {\n return src;\n }\n\n const absolutePathExp = /^https?:\\/\\//i;\n const baseImagePath = getBaseImagePath();\n const computedSrc = absolutePathExp.test(src) ? src : `${baseImagePath}/${trimStart(src, '/')}`;\n\n if (isDevEnvironment() && !isDevBox()) {\n return computedSrc;\n }\n\n const devicePixelRatio = typeof window === 'undefined' ? DEFAULT_DEVICE_PIXEL_RATIO : window.devicePixelRatio;\n const scale = Math.min(devicePixelRatio, MAX_IMAGE_SCALE);\n\n const sourceWidthBeforeRounding = Math.ceil((width ?? 0) * scale);\n const sourceHeightBeforeRounding = Math.ceil((height ?? 0) * scale);\n const [sourceWidth, sourceHeight] = roundAndScale(\n [sourceWidthBeforeRounding, sourceHeightBeforeRounding],\n bucketSize\n );\n\n const thumborImg = {\n server: getThumborEndpoint(),\n src: computedSrc,\n width: sourceWidth,\n height: sourceHeight,\n };\n\n return thumborURL(thumborImg);\n};\n","import { omit } from 'lodash';\nimport React from 'react';\nimport { LazyLoadImage } from 'react-lazy-load-image-component';\nimport { DynamicImageProps } from './types';\nimport { generateThumborImgUrl } from './utils';\n\nexport const DynamicImage: React.FC<DynamicImageProps> = (props) => {\n const { height, width, sourceHeight, sourceWidth, src } = props;\n if (!src) {\n console.error('Dynamic image is missing path!');\n return null;\n }\n\n if (!sourceHeight && !sourceWidth) {\n console.error('Dynamic image is missing source size!');\n return null;\n }\n\n const imageHeight = height ?? sourceHeight;\n const imageHeightString = typeof imageHeight === 'number' ? `${imageHeight}px` : imageHeight;\n const imageWidth = width ?? sourceWidth;\n const imageWidthString = typeof imageWidth === 'number' ? `${imageWidth}px` : imageWidth;\n\n const imageSrc = generateThumborImgUrl({ src, width: sourceWidth, height: sourceHeight });\n\n // these are needed to force a box size that can be collided with in chrome\n const minSizing = 'min-w-[1px] min-h-[1px]';\n\n return (\n <LazyLoadImage\n className={`object-cover object-center ${minSizing} ${props.className}`}\n {...omit(props, ['className', 'sourceHeight', 'sourceWidth', 'objectPosition'])}\n width={imageWidthString}\n height={imageHeightString}\n src={imageSrc}\n alt={props.alt}\n data-resized\n threshold={300}\n />\n );\n};\n","export * from './DynamicImage';\nexport * from './roundAndScale';\nexport * from './types';\nexport * from './utils';\n","import Link from 'next/link';\nimport React from 'react';\nimport { Crumb } from 'utils/breadcrumb-util';\n\ninterface IProps {\n className?: string;\n crumb: Crumb;\n}\n\nexport const CrumbBlock: React.FC<IProps> = ({ className, crumb }) => {\n return (\n <Link key={crumb.href} href={crumb.href} className={`cursor-pointer last:text-white hover:underline ${className}`}>\n <i className='fas fa-chevron-right mr-[6px] text-xs md:mr-2' />\n <span className='align-middle'>{crumb.name}</span>\n </Link>\n );\n};\n","import { CrumbBlock } from 'components/city-blocks/crumb';\nimport Head from 'next/head';\nimport React, { Fragment } from 'react';\nimport { Crumb } from 'utils/breadcrumb-util';\nimport { getFrontEndUrl } from 'utils/environment-util';\n\ninterface IProps {\n className?: string;\n crumbs: Crumb[];\n}\n\n// LD+JSON: Linked Data - for SEO\n// see https://schema.org/\nfunction addProductJsonLd(input: unknown) {\n return {\n __html: JSON.stringify(input),\n };\n}\n\n// For collapsing to 3 crumbs on mobile devices\nconst ELLIPSIS_CRUMB = (\n <div key='ellipsis' className='mr-2 block md:hidden'>\n <i className='fas fa-chevron-right mr-2 text-xs' />\n <span className='align-middle'>...</span>\n </div>\n);\n\nexport const Breadcrumbs: React.FC<IProps> = ({ className, crumbs }) => {\n const ldJson = {\n '@context': 'https://schema.org',\n '@type': 'BreadcrumbList',\n itemListElement: crumbs.map((crumb, index) => ({\n '@type': 'ListItem',\n position: index + 1,\n item: {\n '@id': `${getFrontEndUrl({ withBasePath: true })}${crumb.href}`,\n name: crumb.name,\n },\n })),\n };\n\n const renderedCrumbs: React.ReactElement[] = crumbs.map((crumb, indx) => {\n const alwaysShow = indx === 0 || indx === crumbs.length - 1 || indx === crumbs.length - 2;\n const spliceEllipsis = indx === 0 && crumbs.length >= 4;\n return (\n <Fragment key={indx}>\n <CrumbBlock crumb={crumb} className={`mr-[6px] md:mr-2 ${alwaysShow ? 'block' : 'hidden md:block'}`} />\n {spliceEllipsis && ELLIPSIS_CRUMB}\n </Fragment>\n );\n });\n\n return (\n <>\n <Head>\n <script\n type='application/ld+json'\n dangerouslySetInnerHTML={addProductJsonLd(ldJson)}\n key='Breadcrumbs LD+JSON'></script>\n </Head>\n <div\n className={`-ml-2 flex w-fit flex-row items-center px-2 text-sm font-semibold text-neutral-200 ${className}`}>\n {renderedCrumbs}\n </div>\n </>\n );\n};\n","import React, { useState } from 'react';\nimport { NoFollowLink } from 'shared/no-follow-link';\nimport { getFrontEndUrl } from 'utils/environment-util';\n\ninterface IProps {\n className?: string;\n defaultZipCode?: string;\n prefillZipCode?: boolean;\n}\n\nexport const ZipCodeInput: React.FC<IProps> = ({ className, defaultZipCode, prefillZipCode }) => {\n const [zipCode, setZipCode] = useState<string>((prefillZipCode && defaultZipCode) || '');\n return (\n <div\n className={`relative flex h-12 w-full flex-row rounded-lg bg-white text-base text-neutral-800 md:w-[320px] ${className}`}>\n <div className='absolute left-1 top-[-1px] flex h-full items-center px-2 '>\n <i className='fal fa-location-dot' />\n </div>\n <input\n placeholder='Enter your ZIP code'\n type='number'\n value={zipCode}\n onChange={(event) => setZipCode(event.currentTarget.value)}\n className='h-full w-full rounded-lg border-none bg-white pl-9 placeholder:font-medium placeholder:text-neutral-700 focus:border-none'\n />\n <NoFollowLink\n href={`${getFrontEndUrl()}/explore/zip/${zipCode ?? defaultZipCode}`}\n className='absolute right-1 top-1 h-10 w-[125px] rounded-lg bg-radish-200 px-4 py-2 font-medium text-white'>\n Find food\n <i className='fal fa-chevron-right ml-3' />\n </NoFollowLink>\n </div>\n );\n};\n","import { Breadcrumbs } from 'components/city-blocks/breadcrumbs';\nimport { generateThumborImgUrl } from 'components/dynamic-image';\nimport { ZipCodeInput } from 'components/hero-block/zip-code-input';\nimport Head from 'next/head';\nimport React from 'react';\nimport { NoFollowLink } from 'shared/no-follow-link';\nimport { Crumb } from 'utils/breadcrumb-util';\nimport { getFrontEndUrl } from 'utils/environment-util';\n\nconst IMAGE_SRC = 'https://shef-general.s3.us-west-1.amazonaws.com/assets/img/landing/food_bg.jpg';\nconst LARGE_IMAGE_SRC = generateThumborImgUrl({ src: IMAGE_SRC, width: 1200, height: 253 });\n\n// TODO: Gil Note: We currently don't have different images optimized for different breakpoints, so we'll just use the\n// large version for now. Once we have optimized images, we can swap in different img srcs and dimensions\n// const MEDIUM_IMAGE_SRC = generateThumborImgUrl({ src: IMAGE_SRC, width: 768, height: 163 });\n// const SMALL_IMAGE_SRC = generateThumborImgUrl({ src: IMAGE_SRC, width: 576, height: 122 });\n\ninterface IProps {\n className?: string;\n heroText: React.ReactNode;\n crumbs: Crumb[];\n zipCode?: string;\n prefillZipCode?: boolean;\n}\n\nexport const HeroBlock: React.FC<IProps> = ({ className, heroText, crumbs, zipCode, prefillZipCode }) => {\n return (\n <>\n <Head>\n <link rel='preload' media='(min-width: 768px)' href={LARGE_IMAGE_SRC} as='image' />\n {/* <link rel='preload' media='(min-width: 576px) and (max-width: 767px)' href={MEDIUM_IMAGE_SRC} as='image' /> */}\n {/* <link rel='preload' media='(max-width: 576px)' href={SMALL_IMAGE_SRC} as='image' /> */}\n </Head>\n <div className={`relative flex h-full w-full flex-col p-4 py-10 md:px-24 md:py-16 ${className} `}>\n <div className='absolute inset-0 z-0 h-full w-full'>\n <picture className='absolute top-0 h-full w-full'>\n {/* TODO: Gil Note: We currently don't have different images optimized for different breakpoints, so we'll */}\n {/* just use the large version for now. Once we have optimized images, we can swap in */}\n {/* different img srcs and dimensions */}\n {/* <source media='(min-width: 768px)' srcSet={LARGE_IMAGE_SRC} /> */}\n {/* <source media='(min-width: 576px) and (max-width: 767px)' srcSet={MEDIUM_IMAGE_SRC} /> */}\n {/* <img */}\n {/* className='absolute top-0 h-full w-full object-cover object-center' */}\n {/* src={SMALL_IMAGE_SRC} */}\n {/* alt='Hero image' */}\n {/* /> */}\n <img\n className='absolute top-0 h-full w-full object-cover object-center'\n src={LARGE_IMAGE_SRC}\n alt='Hero image'\n />\n </picture>\n </div>\n\n <Breadcrumbs className='z-10 mb-6 rounded-lg backdrop-blur' crumbs={crumbs} />\n <h1\n className='z-10 mb-6 w-full text-[40px] font-bold leading-[48px] text-white drop-shadow-sm md:text-[64px] md:leading-[68px]'\n data-testid='hero-block-header'>\n {heroText}\n </h1>\n\n <ZipCodeInput className='z-10 mb-5' defaultZipCode={zipCode} prefillZipCode={prefillZipCode} />\n\n <span className='z-10 flex flex-row gap-2 text-base text-white'>\n <span className='font-medium'>Already have an account?</span>\n <NoFollowLink href={`${getFrontEndUrl()}/login`} className='font-bold underline'>\n Log in\n </NoFollowLink>\n </span>\n </div>\n </>\n );\n};\n","import Link from 'next/link';\nimport React from 'react';\nimport { NoFollowLink } from 'shared/no-follow-link';\nimport { getAssetPath } from 'utils/asset-utils';\nimport { getBlogUrl, getFrontEndUrl } from 'utils/environment-util';\n\nconst SHEF_LOGO_PATH = getAssetPath('/images/shef-logo.svg');\n\ninterface IProps {\n className?: string;\n}\n\nexport const HeaderBar: React.FC<IProps> = ({ className }) => {\n const frontEndUrl = getFrontEndUrl();\n const blogUrl = getBlogUrl();\n return (\n <div\n className={`${className} flex flex-row justify-between border-b border-neutral-800 p-2 text-base font-semibold text-neutral-700 md:px-12`}>\n <div className='flex flex-row gap-9'>\n <NoFollowLink href={frontEndUrl}>\n <img src={SHEF_LOGO_PATH} alt='Shef Logo' className={`h-[24px] w-[60px]`} />\n </NoFollowLink>\n <div className='hidden flex-row gap-5 md:flex'>\n <Link href={`${blogUrl}/our-story`}>Our Story</Link>\n <Link href={`${frontEndUrl}/become-a-shef`}>Become a shef</Link>\n </div>\n </div>\n <div className='flex flex-row gap-4'>\n <NoFollowLink href={`${frontEndUrl}/login`}>Log In</NoFollowLink>\n <NoFollowLink href={`${frontEndUrl}/register`} className='text-neutral-800'>\n Sign Up\n </NoFollowLink>\n </div>\n </div>\n );\n};\n","import React from 'react';\n\ninterface IProps {\n className?: string;\n title?: string;\n children: React.ReactNode;\n}\n\nexport const FooterList: React.FC<IProps> = ({ className, title, children }) => (\n <div\n className={`mb-6 flex w-full flex-col text-center text-base last:mb-0 md:mb-0 md:w-60 md:text-left ${className} `}>\n <span className='mb-4 font-semibold text-neutral-800'>{title}</span>\n <div className='flex flex-col gap-2 font-medium text-neutral-700'>{children}</div>\n </div>\n);\n","import { FooterList } from 'components/footer/footer-list';\nimport Link from 'next/link';\nimport React from 'react';\nimport { NoFollowLink } from 'shared/no-follow-link';\nimport { getAssetPath } from 'utils/asset-utils';\nimport { getBlogUrl, getFrontEndUrl } from 'utils/environment-util';\n\nconst SHEF_LOGO_PATH = getAssetPath('/images/shef-logo.svg');\nconst APP_STORE_LINK_PATH = getAssetPath('/images/app-store-link.svg');\nconst GOOGLE_PLAY_LINK_PATH = getAssetPath('/images/google-play-link.svg');\n\nconst GOOGLE_PLAY_HREF = 'https://play.google.com/store/apps/details?id=com.shef.consumerapp&hl=en_US&gl=US&pli=1';\nconst APP_STORE_HREF = 'https://apps.apple.com/us/app/shef-homemade-food-delivery/id1598007796';\n\ninterface IProps {\n className?: string;\n}\n\nexport const Footer: React.FC<IProps> = ({ className }) => {\n const frontEndUrl = getFrontEndUrl();\n const blogUrl = getBlogUrl();\n return (\n <div className={`flex w-full flex-col bg-neutral-50 p-10 ${className} `}>\n <div className='flex flex-col pb-5 md:flex-row'>\n <NoFollowLink className='mb-6 flex grow flex-col items-center md:mb-0 md:items-start' href={frontEndUrl}>\n <img src={SHEF_LOGO_PATH} alt='Shef Logo' className='mb-8 h-10 w-[100px]' />\n </NoFollowLink>\n <FooterList title='Learn'>\n <NoFollowLink href={`${blogUrl}/our-story`}>Our Story</NoFollowLink>\n <Link href={`${frontEndUrl}/homemade-food/food-safety`} className='hover:text-[Colors.KOHLRABI]'>\n Food Safety\n </Link>\n <NoFollowLink href='https://help.shef.com/en/'>Customer Support</NoFollowLink>\n <Link href={`${frontEndUrl}/homemade-food`} className='hover:text-[Colors.KOHLRABI]'>\n Global Cuisines\n </Link>\n </FooterList>\n <FooterList title='Community'>\n <Link href={`https://blog.shef.com/`} className='hover:text-[Colors.KOHLRABI]'>\n Blog\n </Link>\n <NoFollowLink href='https://www.facebook.com/ordershef'>Facebook</NoFollowLink>\n <NoFollowLink href='https://www.instagram.com/ordershef'>Instagram</NoFollowLink>\n <NoFollowLink href='https://www.tiktok.com/@ordershef'>TikTok</NoFollowLink>\n </FooterList>\n <FooterList title='Resources'>\n <NoFollowLink href={`${frontEndUrl}/become-a-shef`}>Become a shef</NoFollowLink>\n <NoFollowLink href={`${frontEndUrl}/careers`}>Careers</NoFollowLink>\n <NoFollowLink href={`${frontEndUrl}/gift`}>Gift cards</NoFollowLink>\n <Link href='/' className='hover:text-[Colors.KOHLRABI]'>\n Homemade food delivery\n </Link>\n </FooterList>\n </div>\n <div className='flex flex-col justify-between gap-4 border-t border-neutral-200 pt-5 text-xs font-normal text-neutral-700 md:flex-row md:gap-0'>\n <div className='flex grow flex-col items-center gap-4 md:flex-row md:gap-10'>\n <NoFollowLink href={`${frontEndUrl}/privacy-policy`}>Privacy Policy</NoFollowLink>\n <NoFollowLink href={`${frontEndUrl}/terms-of-service`}>Terms of Service</NoFollowLink>\n </div>\n <div className='flex flex-col items-center gap-4 md:flex-row'>\n <span>\n <i className='far fa-copyright mr-1' /> Shef, Inc. 2024. All Rights Reserved.\n </span>\n <div className='flex w-fit flex-row gap-4'>\n <NoFollowLink href={APP_STORE_HREF}>\n <img src={APP_STORE_LINK_PATH} width='92' height='33' alt='Download on the App Store' />\n </NoFollowLink>\n <NoFollowLink href={GOOGLE_PLAY_HREF}>\n <img src={GOOGLE_PLAY_LINK_PATH} width='108' height='33' alt='Get it on Google Play' />\n </NoFollowLink>\n </div>\n </div>\n </div>\n </div>\n );\n};\n","import { HeaderBar } from 'components/city-blocks/header-bar';\nimport { Footer } from 'components/footer/footer';\nimport Head from 'next/head';\n\nfunction Layout({ children }) {\n return (\n <div>\n <Head>\n <link rel='icon' href='/favicon.png' />\n <title></title>\n </Head>\n <main className='flex w-full flex-col'>\n <HeaderBar />\n {children}\n <Footer className='mt-4 md:mt-20' />\n </main>\n </div>\n );\n}\n\nexport default Layout;\n","/*\n * Fischer Price CMS: Just some basic formatting rules to get a few of our regions to display more naturally\n */\n\nimport { RegionInfoFragment } from 'utils/gqlReactTypings.generated.d';\n\ninterface RegionGrammar {\n // For example: 'The Bay Area' uses an article, but 'The New York City' would look wrong\n needsArticle?: boolean;\n useNear?: boolean;\n displayNameOverride?: string;\n}\n\nexport const RegionGrammarRules: Record<string, RegionGrammar> = {\n ATLANTA: {},\n AUSTIN: {},\n BAY_AREA: { needsArticle: true },\n BOSTON: {},\n CHICAGO: {},\n DALLAS: {},\n DC_AREA: { needsArticle: true },\n HOUSTON: {},\n LOS_ANGELES: {},\n NASSAU: {},\n NEW_JERSEY: {},\n NEW_YORK: { useNear: true },\n OTHER: {},\n SEATTLE: {},\n};\n\nexport const getRegionDisplayName = (region: Pick<RegionInfoFragment, 'name' | 'displayName'>): string => {\n const regionGrammar: RegionGrammar = RegionGrammarRules[region.name];\n return `${regionGrammar?.needsArticle ? 'The ' : ''}${\n regionGrammar?.displayNameOverride ?? region.displayName.replace('the', '')\n }`;\n};\n","import Link from 'next/link';\nimport React from 'react';\n\n/* Hints to web crawlers that we DO NOT want them to follow these links or share our precious page authority with them\n * Web crawlers do not have to obey rel='nofollow', but they promise to consider it\n *\n * Please use this component for links leading to the main Shef site to ensure we always include rel='nofollow'\n */\nexport const NoFollowLink: React.FC<React.ComponentProps<typeof Link>> = (props) => {\n const { children } = props;\n return (\n <Link className='hover:text-kale-400' rel='nofollow' {...props}>\n {children}\n </Link>\n );\n};\n","import { BASE_PATH } from './constants';\n\n/**\n * Helper method for returning a path for an asset in the public directory with the base path\n * @param path path to asset in public directory\n */\nexport const getAssetPath = (path: string): string => {\n return `${BASE_PATH}${path}`;\n};\n","import { compact } from 'lodash';\nimport { getRegionDisplayName } from 'shared/baby-grammar-rules';\nimport { tempDietaryTagMappings } from 'utils/constants';\nimport { CityPageCityFragment, CityPageFilterFragment, RegionInfoFragment } from 'utils/gqlReactTypings.generated.d';\nimport { encodeCityPageHref, encodeRegionPageHref, encodeZipPageHref } from 'utils/urls';\n\nexport interface Crumb {\n href: string;\n name: string;\n}\n\nexport const HOME_CRUMB: Crumb = {\n href: '/',\n name: 'Food delivery',\n};\n\nexport const rootBreadcrumbs = [HOME_CRUMB];\nexport const citiesRootBreadcrumbs = [\n HOME_CRUMB,\n {\n href: '/cities-we-serve',\n name: 'Shef Cities',\n },\n];\nexport const zipsRootBreadcrumbs = [HOME_CRUMB, { href: '/zip-codes-we-serve', name: 'Shef ZIPs' }];\nexport const metroRootBreadcrumbs = [HOME_CRUMB, { href: '/metros-we-serve', name: 'Metros' }];\n\nexport const generateCityPageBreadcrumbs = (\n cityPage: Pick<CityPageCityFragment, 'cityName' | 'stateNameShort'>,\n filter?: CityPageFilterFragment\n): Crumb[] => {\n const cityUrl = encodeCityPageHref(cityPage);\n // Backtrack away from dietary filter\n const cuisineUrl = encodeCityPageHref(cityPage, filter && { ...filter, dietaryFilter: null });\n const dietaryUrl = encodeCityPageHref(cityPage, filter);\n\n const cityCrumb: Crumb | null = cityPage.cityName\n ? { href: cityUrl, name: `${cityPage.cityName}, ${cityPage.stateNameShort}` }\n : null;\n const cuisineCrumb: Crumb | null =\n filter?.cuisineCategoryId && filter?.cuisineCategory?.title\n ? { href: cuisineUrl, name: filter.cuisineCategory.title }\n : null;\n const dietaryCrumb: Crumb | null = filter?.dietaryFilter\n ? { href: dietaryUrl, name: tempDietaryTagMappings[filter.dietaryFilter] }\n : null;\n\n return compact([HOME_CRUMB, cityCrumb, cuisineCrumb, dietaryCrumb]);\n};\n\nexport const generateZipPageBreadcrumbs = (\n zipCode: string,\n cityPage: Pick<CityPageCityFragment, 'cityName' | 'stateNameShort'>,\n filter?: CityPageFilterFragment\n): Crumb[] => {\n const cityUrl = encodeCityPageHref(cityPage);\n const zipUrl = encodeZipPageHref(cityPage, zipCode);\n // Backtrack away from dietary filter\n const cuisineUrl = encodeZipPageHref(cityPage, zipCode, filter && { ...filter, dietaryFilter: null });\n const dietaryUrl = encodeZipPageHref(cityPage, zipCode, filter);\n\n const cityCrumb: Crumb | null = cityPage.cityName\n ? { href: cityUrl, name: `${cityPage.cityName}, ${cityPage.stateNameShort}` }\n : null;\n const zipCrumb: Crumb | null = zipCode ? { href: zipUrl, name: zipCode } : null;\n const cuisineCrumb: Crumb | null =\n filter?.cuisineCategoryId && filter?.cuisineCategory?.title\n ? { href: cuisineUrl, name: filter.cuisineCategory.title }\n : null;\n const dietaryCrumb: Crumb | null = filter?.dietaryFilter\n ? { href: dietaryUrl, name: tempDietaryTagMappings[filter.dietaryFilter] }\n : null;\n\n return compact([HOME_CRUMB, cityCrumb, zipCrumb, cuisineCrumb, dietaryCrumb]);\n};\n\nexport const generateRegionPageBreadcrumbs = (region: Pick<RegionInfoFragment, 'name' | 'displayName'>): Crumb[] => {\n const regionUrl = encodeRegionPageHref(region);\n\n const displayName = getRegionDisplayName(region);\n const regionCrumb: Crumb | null = { href: regionUrl, name: displayName };\n\n return compact([HOME_CRUMB, regionCrumb]);\n};\n","import { chain } from 'lodash';\nimport { CityPageCityFragment, CityPageFilterFragment, RegionInfoFragment } from 'utils/gqlReactTypings.generated.d';\n\nexport const urlSafeEncode = (...args: (string | null | undefined)[]): string => {\n return chain(args).compact().join(' ').deburr().kebabCase().escape().value() || '';\n};\n\nexport const encodeCitySlug = (cityPage: Pick<CityPageCityFragment, 'cityName' | 'stateNameShort'>) =>\n urlSafeEncode(cityPage.cityName, cityPage.stateNameShort);\nexport const encodeRegionSlug = (region: Pick<RegionInfoFragment, 'name'>) => urlSafeEncode(region.name, 'metro');\n\nexport const encodeCuisineSlug = (filter?: Pick<CityPageFilterFragment, 'cuisineCategoryId' | 'dietaryFilter'>) => {\n if (!filter?.dietaryFilter && !filter?.cuisineCategoryId) return null;\n\n // HACK: Vegan specialty -> vegan food\n if (filter.cuisineCategoryId === 'VEGAN') {\n if (filter.dietaryFilter === 'vegan') return 'vegan-food'; // Vegan vegan food is just vegan food\n return urlSafeEncode(filter.dietaryFilter, 'vegan', 'food');\n }\n\n // Linguistic Note: Dietary filters make cuisines into food. Example: American Cuisine vs Vegetarian American Food\n const descriptor = filter.cuisineCategoryId && !filter.dietaryFilter ? 'cuisine' : 'food';\n return urlSafeEncode(filter.dietaryFilter, filter.cuisineCategoryId, descriptor);\n};\n\nexport const encodeCityPagePath = (\n cityPage: Pick<CityPageCityFragment, 'cityName' | 'stateNameShort'>,\n filter?: Pick<CityPageFilterFragment, 'cuisineCategoryId' | 'dietaryFilter'>\n): string[] => {\n const citySlug = encodeCitySlug(cityPage);\n const cuisineSlug = encodeCuisineSlug(filter);\n\n return cuisineSlug ? [citySlug, cuisineSlug] : [citySlug];\n};\n\nexport const encodeZipPagePath = (\n zipPage: Pick<CityPageCityFragment, 'cityName' | 'stateNameShort'>,\n zipCode: string,\n filter?: Pick<CityPageFilterFragment, 'cuisineCategoryId' | 'dietaryFilter'>\n): string[] => {\n const citySlug = encodeCitySlug(zipPage);\n const cuisineSlug = encodeCuisineSlug(filter);\n\n return cuisineSlug ? [citySlug, zipCode, cuisineSlug] : [citySlug, zipCode];\n};\n\nexport const encodeRegionPagePath = (\n region: Pick<RegionInfoFragment, 'name'>,\n filter?: Pick<CityPageFilterFragment, 'cuisineCategoryId' | 'dietaryFilter'>\n): string[] => {\n const citySlug = encodeRegionSlug(region);\n const cuisineSlug = encodeCuisineSlug(filter);\n\n return cuisineSlug ? [citySlug, cuisineSlug] : [citySlug];\n};\n\nexport const pathToHref = (path?: string[]): string => {\n return path?.length ? `/${path.join('/')}` : '/';\n};\n\nexport const encodeCityPageHref = (\n cityPage: Pick<CityPageCityFragment, 'cityName' | 'stateNameShort'>,\n filter?: Pick<CityPageFilterFragment, 'cuisineCategoryId' | 'dietaryFilter'>\n): string => {\n return pathToHref(encodeCityPagePath(cityPage, filter));\n};\n\nexport const encodeZipPageHref = (\n cityPage: Pick<CityPageCityFragment, 'cityName' | 'stateNameShort'>,\n zipCode: string,\n filter?: Pick<CityPageFilterFragment, 'cuisineCategoryId' | 'dietaryFilter'>\n): string => {\n return pathToHref(encodeZipPagePath(cityPage, zipCode, filter));\n};\n\nexport const encodeRegionPageHref = (\n region: Pick<RegionInfoFragment, 'name'>,\n filter?: Pick<CityPageFilterFragment, 'cuisineCategoryId' | 'dietaryFilter'>\n): string => {\n return pathToHref(encodeRegionPagePath(region, filter));\n};\n"],"names":["HeaderCopy","className","title","content","param","react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__","jsxs","div","concat","jsx","h2","span","MaxWidthContainer","id","children","roundToNearest","num","bucketSize","Math","floor","ceil","widthScaleToNearestBucket","oldWidth","oldHeight","newWidth","heightScaleToNearestBucket","newHeight","generateThumborImgUrl","src","width","height","startsWith","baseImagePath","getBaseImagePath","computedSrc","absolutePathExp","test","trimStart","isDevEnvironment","isDevBox","devicePixelRatio","window","scale","min","sourceWidth","sourceHeight","roundAndScale","thumborImg","server","getThumborEndpoint","thumborURL","DynamicImage","props","console","error","imageHeight","imageWidth","imageSrc","jsx_runtime","LazyLoadImage","omit","alt","data-resized","threshold","CrumbBlock","crumb","Link","href","i","name","ELLIPSIS_CRUMB","Breadcrumbs","crumbs","ldJson","itemListElement","map","index","position","item","getFrontEndUrl","withBasePath","renderedCrumbs","indx","alwaysShow","length","spliceEllipsis","Fragment","Head","script","type","dangerouslySetInnerHTML","__html","JSON","stringify","ZipCodeInput","defaultZipCode","prefillZipCode","zipCode","setZipCode","useState","input","placeholder","value","onChange","event","currentTarget","NoFollowLink","LARGE_IMAGE_SRC","HeroBlock","heroText","link","rel","media","as","picture","img","h1","data-testid","SHEF_LOGO_PATH","getAssetPath","HeaderBar","frontEndUrl","blogUrl","getBlogUrl","FooterList","APP_STORE_LINK_PATH","GOOGLE_PLAY_LINK_PATH","Footer","layout","main","RegionGrammarRules","ATLANTA","AUSTIN","BAY_AREA","needsArticle","BOSTON","CHICAGO","DALLAS","DC_AREA","HOUSTON","LOS_ANGELES","NASSAU","NEW_JERSEY","NEW_YORK","useNear","OTHER","SEATTLE","getRegionDisplayName","regionGrammar","region","displayNameOverride","displayName","replace","path","BASE_PATH","HOME_CRUMB","rootBreadcrumbs","citiesRootBreadcrumbs","zipsRootBreadcrumbs","metroRootBreadcrumbs","generateCityPageBreadcrumbs","cityPage","filter","cityUrl","encodeCityPageHref","cuisineUrl","dietaryFilter","dietaryUrl","cityCrumb","cityName","stateNameShort","cuisineCrumb","cuisineCategoryId","cuisineCategory","dietaryCrumb","tempDietaryTagMappings","compact","generateZipPageBreadcrumbs","zipUrl","encodeZipPageHref","generateRegionPageBreadcrumbs","regionUrl","encodeRegionPageHref","urlSafeEncode","args","chain","join","deburr","kebabCase","escape","encodeCitySlug","encodeRegionSlug","encodeCuisineSlug","descriptor","encodeCityPagePath","citySlug","cuisineSlug","encodeZipPagePath","zipPage","encodeRegionPagePath","pathToHref"],"sourceRoot":""}