SYMBOL INDEX (137 symbols across 49 files) FILE: app/[page]/layout.tsx function Layout (line 3) | function Layout({ children }: { children: React.ReactNode }) { FILE: app/[page]/opengraph-image.tsx function Image (line 4) | async function Image({ params }: { params: { page: string } }) { FILE: app/[page]/page.tsx function generateMetadata (line 7) | async function generateMetadata(props: { function Page (line 26) | async function Page(props: { FILE: app/api/revalidate/route.ts function POST (line 4) | async function POST(req: NextRequest): Promise { FILE: app/error.tsx function Error (line 3) | function Error({ reset }: { reset: () => void }) { FILE: app/layout.tsx function RootLayout (line 25) | async function RootLayout({ FILE: app/opengraph-image.tsx function Image (line 3) | async function Image() { FILE: app/page.tsx function HomePage (line 13) | function HomePage() { FILE: app/product/[handle]/page.tsx function generateMetadata (line 13) | async function generateMetadata(props: { function ProductPage (line 50) | async function ProductPage(props: { function RelatedProducts (line 113) | async function RelatedProducts({ id }: { id: string }) { FILE: app/robots.ts function robots (line 3) | function robots() { FILE: app/search/[collection]/opengraph-image.tsx function Image (line 4) | async function Image({ FILE: app/search/[collection]/page.tsx function generateMetadata (line 9) | async function generateMetadata(props: { function CategoryPage (line 26) | async function CategoryPage(props: { FILE: app/search/children-wrapper.tsx function ChildrenWrapper (line 7) | function ChildrenWrapper({ FILE: app/search/layout.tsx function SearchLayout (line 8) | function SearchLayout({ FILE: app/search/loading.tsx function Loading (line 3) | function Loading() { FILE: app/search/page.tsx function SearchPage (line 11) | async function SearchPage(props: { FILE: app/sitemap.ts type Route (line 5) | type Route = { function sitemap (line 12) | async function sitemap(): Promise { FILE: components/carousel.tsx function Carousel (line 5) | async function Carousel() { FILE: components/cart/actions.ts function addItem (line 15) | async function addItem( function removeItem (line 31) | async function removeItem(prevState: any, merchandiseId: string) { function updateItemQuantity (line 54) | async function updateItemQuantity( function redirectToCheckout (line 98) | async function redirectToCheckout() { function createCartAndSetCookie (line 103) | async function createCartAndSetCookie() { FILE: components/cart/add-to-cart.tsx function SubmitButton (line 11) | function SubmitButton({ function AddToCart (line 60) | function AddToCart({ product }: { product: Product }) { FILE: components/cart/cart-context.tsx type UpdateType (line 17) | type UpdateType = "plus" | "minus" | "delete"; type CartAction (line 19) | type CartAction = type CartContextType (line 29) | type CartContextType = { function calculateItemCost (line 35) | function calculateItemCost(quantity: number, price: string): string { function updateCartItem (line 39) | function updateCartItem( function createOrUpdateCartItem (line 68) | function createOrUpdateCartItem( function updateCartTotals (line 99) | function updateCartTotals( function createEmptyCart (line 119) | function createEmptyCart(): Cart { function cartReducer (line 133) | function cartReducer(state: Cart | undefined, action: CartAction): Cart { function CartProvider (line 193) | function CartProvider({ function useCart (line 207) | function useCart() { FILE: components/cart/delete-item-button.tsx function DeleteItemButton (line 8) | function DeleteItemButton({ FILE: components/cart/edit-item-quantity-button.tsx function SubmitButton (line 9) | function SubmitButton({ type }: { type: "plus" | "minus" }) { function EditItemQuantityButton (line 32) | function EditItemQuantityButton({ FILE: components/cart/modal.tsx type MerchandiseSearchParams (line 20) | type MerchandiseSearchParams = { function CartModal (line 24) | function CartModal() { function CloseCart (line 231) | function CloseCart({ className }: { className?: string }) { function CheckoutButton (line 244) | function CheckoutButton() { FILE: components/cart/open-cart.tsx function OpenCart (line 4) | function OpenCart({ FILE: components/grid/index.tsx function Grid (line 3) | function Grid(props: React.ComponentProps<"ul">) { function GridItem (line 14) | function GridItem(props: React.ComponentProps<"li">) { FILE: components/grid/three-items.tsx function ThreeItemGridItem (line 6) | function ThreeItemGridItem({ function ThreeItemGrid (line 50) | async function ThreeItemGrid() { FILE: components/grid/tile.tsx function GridTileImage (line 5) | function GridTileImage({ FILE: components/icons/logo.tsx function LogoIcon (line 3) | function LogoIcon(props: React.ComponentProps<"svg">) { FILE: components/layout/footer-menu.tsx function FooterMenuItem (line 9) | function FooterMenuItem({ item }: { item: Menu }) { function FooterMenu (line 34) | function FooterMenu({ menu }: { menu: Menu[] }) { FILE: components/layout/footer.tsx function Footer (line 10) | async function Footer() { FILE: components/layout/navbar/index.tsx function Navbar (line 12) | async function Navbar() { FILE: components/layout/navbar/mobile-menu.tsx function MobileMenu (line 12) | function MobileMenu({ menu }: { menu: Menu[] }) { FILE: components/layout/navbar/search.tsx function Search (line 7) | function Search() { function SearchSkeleton (line 31) | function SearchSkeleton() { FILE: components/layout/product-grid-items.tsx function ProductGridItems (line 6) | function ProductGridItems({ FILE: components/layout/search/collections.tsx function CollectionList (line 7) | async function CollectionList() { function Collections (line 16) | function Collections() { FILE: components/layout/search/filter/dropdown.tsx function FilterItemDropdown (line 10) | function FilterItemDropdown({ list }: { list: ListItem[] }) { FILE: components/layout/search/filter/index.tsx type ListItem (line 6) | type ListItem = SortFilterItem | PathFilterItem; type PathFilterItem (line 7) | type PathFilterItem = { title: string; path: string }; function FilterItemList (line 9) | function FilterItemList({ list }: { list: ListItem[] }) { function FilterList (line 19) | function FilterList({ FILE: components/layout/search/filter/item.tsx function PathFilterItem (line 10) | function PathFilterItem({ item }: { item: PathFilterItem }) { function SortFilterItem (line 36) | function SortFilterItem({ item }: { item: SortFilterItem }) { function FilterItem (line 68) | function FilterItem({ item }: { item: ListItem }) { FILE: components/logo-square.tsx function LogoSquare (line 4) | function LogoSquare({ size }: { size?: "sm" | undefined }) { FILE: components/opengraph-image.tsx type Props (line 6) | type Props = { function OpengraphImage (line 10) | async function OpengraphImage( FILE: components/product/gallery.tsx function Gallery (line 8) | function Gallery({ FILE: components/product/product-description.tsx function ProductDescription (line 7) | function ProductDescription({ product }: { product: Product }) { FILE: components/product/variant-selector.tsx type Combination (line 7) | type Combination = { function VariantSelector (line 13) | function VariantSelector({ FILE: components/welcome-toast.tsx function WelcomeToast (line 6) | function WelcomeToast() { FILE: lib/constants.ts type SortFilterItem (line 1) | type SortFilterItem = { constant TAGS (line 43) | const TAGS = { constant HIDDEN_PRODUCT_TAG (line 49) | const HIDDEN_PRODUCT_TAG = "nextjs-frontend-hidden"; constant DEFAULT_OPTION (line 50) | const DEFAULT_OPTION = "Default Title"; constant SHOPIFY_GRAPHQL_API_ENDPOINT (line 51) | const SHOPIFY_GRAPHQL_API_ENDPOINT = "/api/2023-01/graphql.json"; FILE: lib/shopify/index.ts type ExtractVariables (line 67) | type ExtractVariables = T extends { variables: object } function shopifyFetch (line 71) | async function shopifyFetch({ function createCart (line 220) | async function createCart(): Promise { function addToCart (line 228) | async function addToCart( function removeFromCart (line 242) | async function removeFromCart(lineIds: string[]): Promise { function updateCart (line 255) | async function updateCart( function getCart (line 270) | async function getCart(): Promise { function getCollection (line 294) | async function getCollection( function getCollectionProducts (line 311) | async function getCollectionProducts({ function getCollections (line 350) | async function getCollections(): Promise { function getMenu (line 398) | async function getMenu(handle: string): Promise { function getPage (line 426) | async function getPage(handle: string): Promise { function getPages (line 435) | async function getPages(): Promise { function getProduct (line 443) | async function getProduct(handle: string): Promise { function getProductRecommendations (line 463) | async function getProductRecommendations( function getProducts (line 480) | async function getProducts({ function revalidate (line 506) | async function revalidate(req: NextRequest): Promise { FILE: lib/shopify/types.ts type Maybe (line 1) | type Maybe = T | null; type Connection (line 3) | type Connection = { type Edge (line 7) | type Edge = { type Cart (line 11) | type Cart = Omit & { type CartProduct (line 15) | type CartProduct = { type CartItem (line 22) | type CartItem = { type Collection (line 39) | type Collection = ShopifyCollection & { type Image (line 43) | type Image = { type Menu (line 50) | type Menu = { type Money (line 55) | type Money = { type Page (line 60) | type Page = { type Product (line 71) | type Product = Omit & { type ProductOption (line 76) | type ProductOption = { type ProductVariant (line 82) | type ProductVariant = { type SEO (line 93) | type SEO = { type ShopifyCart (line 98) | type ShopifyCart = { type ShopifyCollection (line 110) | type ShopifyCollection = { type ShopifyProduct (line 118) | type ShopifyProduct = { type ShopifyCartOperation (line 138) | type ShopifyCartOperation = { type ShopifyCreateCartOperation (line 147) | type ShopifyCreateCartOperation = { type ShopifyAddToCartOperation (line 151) | type ShopifyAddToCartOperation = { type ShopifyRemoveFromCartOperation (line 166) | type ShopifyRemoveFromCartOperation = { type ShopifyUpdateCartOperation (line 178) | type ShopifyUpdateCartOperation = { type ShopifyCollectionOperation (line 194) | type ShopifyCollectionOperation = { type ShopifyCollectionProductsOperation (line 203) | type ShopifyCollectionProductsOperation = { type ShopifyCollectionsOperation (line 216) | type ShopifyCollectionsOperation = { type ShopifyMenuOperation (line 222) | type ShopifyMenuOperation = { type ShopifyPageOperation (line 236) | type ShopifyPageOperation = { type ShopifyPagesOperation (line 241) | type ShopifyPagesOperation = { type ShopifyProductOperation (line 247) | type ShopifyProductOperation = { type ShopifyProductRecommendationsOperation (line 254) | type ShopifyProductRecommendationsOperation = { type ShopifyProductsOperation (line 263) | type ShopifyProductsOperation = { FILE: lib/type-guards.ts type ShopifyErrorLike (line 1) | interface ShopifyErrorLike { function findError (line 23) | function findError(error: T): boolean {