[{"data":1,"prerenderedAt":6831},["ShallowReactive",2],{"\u002Fdocs\u002Fconfiguration\u002Fcomposables":3,"docs-nav":1094},{"id":4,"title":5,"body":6,"description":1084,"extension":1085,"links":1086,"meta":1087,"navigation":1088,"path":1090,"seo":1091,"stem":1092,"__hash__":1093},"docs\u002F3.configuration\u002F2.composables.md","Composables",{"type":7,"value":8,"toc":1069},"minimark",[9,13,18,21,173,188,191,195,198,331,338,340,344,347,419,421,425,428,480,487,489,493,496,557,559,563,566,608,627,629,633,636,698,700,704,710,782,784,788,791,843,845,849,852,913,915,919,922,951,953,957,960,988,1002,1004,1007,1013,1065],[10,11,12],"p",{},"WooNuxt provides 13 composables that handle all store logic. They are available globally — no import needed.",[14,15,17],"h2",{"id":16},"usecart","useCart",[10,19,20],{},"Manages the shopping cart state and all cart mutations.",[22,23,28],"pre",{"className":24,"code":25,"language":26,"meta":27,"style":27},"language-ts shiki shiki-themes material-theme-palenight","const {\n  cart,              \u002F\u002F Ref\u003CCart> — reactive cart object\n  cartTotals,        \u002F\u002F Computed cart totals\n  cartCount,         \u002F\u002F Computed item count\n  isUpdatingCart,    \u002F\u002F Ref\u003Cboolean> — loading state\n  addToCart,         \u002F\u002F (input: AddToCartInput) => Promise\u003Cvoid>\n  updateItemQuantity,\u002F\u002F (key: string, quantity: number) => Promise\u003Cvoid>\n  removeItem,        \u002F\u002F (key: string) => Promise\u003Cvoid>\n  emptyCart,         \u002F\u002F () => Promise\u003Cvoid>\n  applyCoupon,       \u002F\u002F (code: string) => Promise\u003Cvoid>\n  removeCoupon,      \u002F\u002F (code: string) => Promise\u003Cvoid>\n} = useCart()\n","ts","",[29,30,31,44,58,69,80,91,102,113,124,135,146,157],"code",{"__ignoreMap":27},[32,33,36,40],"span",{"class":34,"line":35},"line",1,[32,37,39],{"class":38},"sJ14y","const",[32,41,43],{"class":42},"sAklC"," {\n",[32,45,47,51,54],{"class":34,"line":46},2,[32,48,50],{"class":49},"s0W1g","  cart",[32,52,53],{"class":42},",",[32,55,57],{"class":56},"saEQR","              \u002F\u002F Ref\u003CCart> — reactive cart object\n",[32,59,61,64,66],{"class":34,"line":60},3,[32,62,63],{"class":49},"  cartTotals",[32,65,53],{"class":42},[32,67,68],{"class":56},"        \u002F\u002F Computed cart totals\n",[32,70,72,75,77],{"class":34,"line":71},4,[32,73,74],{"class":49},"  cartCount",[32,76,53],{"class":42},[32,78,79],{"class":56},"         \u002F\u002F Computed item count\n",[32,81,83,86,88],{"class":34,"line":82},5,[32,84,85],{"class":49},"  isUpdatingCart",[32,87,53],{"class":42},[32,89,90],{"class":56},"    \u002F\u002F Ref\u003Cboolean> — loading state\n",[32,92,94,97,99],{"class":34,"line":93},6,[32,95,96],{"class":49},"  addToCart",[32,98,53],{"class":42},[32,100,101],{"class":56},"         \u002F\u002F (input: AddToCartInput) => Promise\u003Cvoid>\n",[32,103,105,108,110],{"class":34,"line":104},7,[32,106,107],{"class":49},"  updateItemQuantity",[32,109,53],{"class":42},[32,111,112],{"class":56},"\u002F\u002F (key: string, quantity: number) => Promise\u003Cvoid>\n",[32,114,116,119,121],{"class":34,"line":115},8,[32,117,118],{"class":49},"  removeItem",[32,120,53],{"class":42},[32,122,123],{"class":56},"        \u002F\u002F (key: string) => Promise\u003Cvoid>\n",[32,125,127,130,132],{"class":34,"line":126},9,[32,128,129],{"class":49},"  emptyCart",[32,131,53],{"class":42},[32,133,134],{"class":56},"         \u002F\u002F () => Promise\u003Cvoid>\n",[32,136,138,141,143],{"class":34,"line":137},10,[32,139,140],{"class":49},"  applyCoupon",[32,142,53],{"class":42},[32,144,145],{"class":56},"       \u002F\u002F (code: string) => Promise\u003Cvoid>\n",[32,147,149,152,154],{"class":34,"line":148},11,[32,150,151],{"class":49},"  removeCoupon",[32,153,53],{"class":42},[32,155,156],{"class":56},"      \u002F\u002F (code: string) => Promise\u003Cvoid>\n",[32,158,160,163,166,170],{"class":34,"line":159},12,[32,161,162],{"class":42},"}",[32,164,165],{"class":42}," =",[32,167,169],{"class":168},"sdLwU"," useCart",[32,171,172],{"class":49},"()\n",[10,174,175,179,180,183,184,187],{},[176,177,178],"strong",{},"Modes:"," The cart supports ",[29,181,182],{},"optimistic"," (instant UI feedback) and ",[29,185,186],{},"safe"," (wait for server confirmation) update modes. Mutations are queued to prevent race conditions.",[189,190],"hr",{},[14,192,194],{"id":193},"useauth","useAuth",[10,196,197],{},"Handles customer authentication, sessions, and account data.",[22,199,201],{"className":24,"code":200,"language":26,"meta":27,"style":27},"const {\n  customer,          \u002F\u002F Ref\u003CCustomer> — logged-in customer data\n  viewer,            \u002F\u002F Ref\u003CViewer> — current user\n  orders,            \u002F\u002F Ref\u003COrder[]>\n  downloads,         \u002F\u002F Ref\u003CDownload[]>\n  isPending,         \u002F\u002F Ref\u003Cboolean>\n  isLoggedIn,        \u002F\u002F ComputedRef\u003Cboolean>\n  loginUser,         \u002F\u002F (input: LoginInput) => Promise\u003C{ success, error }>\n  logoutUser,        \u002F\u002F () => Promise\u003Cvoid>\n  registerUser,      \u002F\u002F (input: RegisterInput) => Promise\u003C{ success, error }>\n  updateCustomer,    \u002F\u002F (input: UpdateCustomerInput) => Promise\u003Cvoid>\n  refreshCart,       \u002F\u002F () => Promise\u003Cvoid>\n} = useAuth()\n",[29,202,203,209,219,229,239,249,259,269,279,289,299,309,319],{"__ignoreMap":27},[32,204,205,207],{"class":34,"line":35},[32,206,39],{"class":38},[32,208,43],{"class":42},[32,210,211,214,216],{"class":34,"line":46},[32,212,213],{"class":49},"  customer",[32,215,53],{"class":42},[32,217,218],{"class":56},"          \u002F\u002F Ref\u003CCustomer> — logged-in customer data\n",[32,220,221,224,226],{"class":34,"line":60},[32,222,223],{"class":49},"  viewer",[32,225,53],{"class":42},[32,227,228],{"class":56},"            \u002F\u002F Ref\u003CViewer> — current user\n",[32,230,231,234,236],{"class":34,"line":71},[32,232,233],{"class":49},"  orders",[32,235,53],{"class":42},[32,237,238],{"class":56},"            \u002F\u002F Ref\u003COrder[]>\n",[32,240,241,244,246],{"class":34,"line":82},[32,242,243],{"class":49},"  downloads",[32,245,53],{"class":42},[32,247,248],{"class":56},"         \u002F\u002F Ref\u003CDownload[]>\n",[32,250,251,254,256],{"class":34,"line":93},[32,252,253],{"class":49},"  isPending",[32,255,53],{"class":42},[32,257,258],{"class":56},"         \u002F\u002F Ref\u003Cboolean>\n",[32,260,261,264,266],{"class":34,"line":104},[32,262,263],{"class":49},"  isLoggedIn",[32,265,53],{"class":42},[32,267,268],{"class":56},"        \u002F\u002F ComputedRef\u003Cboolean>\n",[32,270,271,274,276],{"class":34,"line":115},[32,272,273],{"class":49},"  loginUser",[32,275,53],{"class":42},[32,277,278],{"class":56},"         \u002F\u002F (input: LoginInput) => Promise\u003C{ success, error }>\n",[32,280,281,284,286],{"class":34,"line":126},[32,282,283],{"class":49},"  logoutUser",[32,285,53],{"class":42},[32,287,288],{"class":56},"        \u002F\u002F () => Promise\u003Cvoid>\n",[32,290,291,294,296],{"class":34,"line":137},[32,292,293],{"class":49},"  registerUser",[32,295,53],{"class":42},[32,297,298],{"class":56},"      \u002F\u002F (input: RegisterInput) => Promise\u003C{ success, error }>\n",[32,300,301,304,306],{"class":34,"line":148},[32,302,303],{"class":49},"  updateCustomer",[32,305,53],{"class":42},[32,307,308],{"class":56},"    \u002F\u002F (input: UpdateCustomerInput) => Promise\u003Cvoid>\n",[32,310,311,314,316],{"class":34,"line":159},[32,312,313],{"class":49},"  refreshCart",[32,315,53],{"class":42},[32,317,318],{"class":56},"       \u002F\u002F () => Promise\u003Cvoid>\n",[32,320,322,324,326,329],{"class":34,"line":321},13,[32,323,162],{"class":42},[32,325,165],{"class":42},[32,327,328],{"class":168}," useAuth",[32,330,172],{"class":49},[10,332,333,334,337],{},"Authentication uses JWT tokens stored in cookies. Tokens are refreshed automatically on expiry via ",[29,335,336],{},"useAuthTokens",".",[189,339],{},[14,341,343],{"id":342},"usecheckout","useCheckout",[10,345,346],{},"Controls the checkout flow, shipping, and payment method selection.",[22,348,350],{"className":24,"code":349,"language":26,"meta":27,"style":27},"const {\n  orderInput,        \u002F\u002F Ref — checkout form state\n  isProcessingOrder, \u002F\u002F Ref\u003Cboolean>\n  proccessCheckout,  \u002F\u002F () => Promise\u003Cvoid>\n  paymentGateways,   \u002F\u002F Ref\u003CPaymentGateway[]>\n  shippingMethods,   \u002F\u002F Ref\u003CShippingMethod[]>\n} = useCheckout()\n",[29,351,352,358,368,378,388,398,408],{"__ignoreMap":27},[32,353,354,356],{"class":34,"line":35},[32,355,39],{"class":38},[32,357,43],{"class":42},[32,359,360,363,365],{"class":34,"line":46},[32,361,362],{"class":49},"  orderInput",[32,364,53],{"class":42},[32,366,367],{"class":56},"        \u002F\u002F Ref — checkout form state\n",[32,369,370,373,375],{"class":34,"line":60},[32,371,372],{"class":49},"  isProcessingOrder",[32,374,53],{"class":42},[32,376,377],{"class":56}," \u002F\u002F Ref\u003Cboolean>\n",[32,379,380,383,385],{"class":34,"line":71},[32,381,382],{"class":49},"  proccessCheckout",[32,384,53],{"class":42},[32,386,387],{"class":56},"  \u002F\u002F () => Promise\u003Cvoid>\n",[32,389,390,393,395],{"class":34,"line":82},[32,391,392],{"class":49},"  paymentGateways",[32,394,53],{"class":42},[32,396,397],{"class":56},"   \u002F\u002F Ref\u003CPaymentGateway[]>\n",[32,399,400,403,405],{"class":34,"line":93},[32,401,402],{"class":49},"  shippingMethods",[32,404,53],{"class":42},[32,406,407],{"class":56},"   \u002F\u002F Ref\u003CShippingMethod[]>\n",[32,409,410,412,414,417],{"class":34,"line":104},[32,411,162],{"class":42},[32,413,165],{"class":42},[32,415,416],{"class":168}," useCheckout",[32,418,172],{"class":49},[189,420],{},[14,422,424],{"id":423},"usefiltering","useFiltering",[10,426,427],{},"Manages URL-based product filtering by attributes, price range, and sale status.",[22,429,431],{"className":24,"code":430,"language":26,"meta":27,"style":27},"const {\n  isFiltersActive,   \u002F\u002F ComputedRef\u003Cboolean>\n  activeFilters,     \u002F\u002F ComputedRef\u003CActiveFilters>\n  resetFilters,      \u002F\u002F () => void\n} = useFiltering()\n",[29,432,433,439,449,459,469],{"__ignoreMap":27},[32,434,435,437],{"class":34,"line":35},[32,436,39],{"class":38},[32,438,43],{"class":42},[32,440,441,444,446],{"class":34,"line":46},[32,442,443],{"class":49},"  isFiltersActive",[32,445,53],{"class":42},[32,447,448],{"class":56},"   \u002F\u002F ComputedRef\u003Cboolean>\n",[32,450,451,454,456],{"class":34,"line":60},[32,452,453],{"class":49},"  activeFilters",[32,455,53],{"class":42},[32,457,458],{"class":56},"     \u002F\u002F ComputedRef\u003CActiveFilters>\n",[32,460,461,464,466],{"class":34,"line":71},[32,462,463],{"class":49},"  resetFilters",[32,465,53],{"class":42},[32,467,468],{"class":56},"      \u002F\u002F () => void\n",[32,470,471,473,475,478],{"class":34,"line":82},[32,472,162],{"class":42},[32,474,165],{"class":42},[32,476,477],{"class":168}," useFiltering",[32,479,172],{"class":49},[10,481,482,483,486],{},"Filter state is synced with the URL query string so filters are shareable and survive page refresh. Global attributes are configured via the ",[176,484,485],{},"WooNuxt Settings"," plugin.",[189,488],{},[14,490,492],{"id":491},"useproducts","useProducts",[10,494,495],{},"Manages product list state and the full filtering\u002Fsorting pipeline.",[22,497,499],{"className":24,"code":498,"language":26,"meta":27,"style":27},"const {\n  products,          \u002F\u002F Ref\u003CProduct[]>\n  allProducts,       \u002F\u002F Ref\u003CProduct[]> — unfiltered\n  isLoading,         \u002F\u002F Ref\u003Cboolean>\n  loadMore,          \u002F\u002F () => Promise\u003Cvoid>\n} = useProducts()\n",[29,500,501,507,517,527,536,546],{"__ignoreMap":27},[32,502,503,505],{"class":34,"line":35},[32,504,39],{"class":38},[32,506,43],{"class":42},[32,508,509,512,514],{"class":34,"line":46},[32,510,511],{"class":49},"  products",[32,513,53],{"class":42},[32,515,516],{"class":56},"          \u002F\u002F Ref\u003CProduct[]>\n",[32,518,519,522,524],{"class":34,"line":60},[32,520,521],{"class":49},"  allProducts",[32,523,53],{"class":42},[32,525,526],{"class":56},"       \u002F\u002F Ref\u003CProduct[]> — unfiltered\n",[32,528,529,532,534],{"class":34,"line":71},[32,530,531],{"class":49},"  isLoading",[32,533,53],{"class":42},[32,535,258],{"class":56},[32,537,538,541,543],{"class":34,"line":82},[32,539,540],{"class":49},"  loadMore",[32,542,53],{"class":42},[32,544,545],{"class":56},"          \u002F\u002F () => Promise\u003Cvoid>\n",[32,547,548,550,552,555],{"class":34,"line":93},[32,549,162],{"class":42},[32,551,165],{"class":42},[32,553,554],{"class":168}," useProducts",[32,556,172],{"class":49},[189,558],{},[14,560,562],{"id":561},"usesorting","useSorting",[10,564,565],{},"Controls product sort order.",[22,567,569],{"className":24,"code":568,"language":26,"meta":27,"style":27},"const {\n  sortOrder,         \u002F\u002F Ref\u003Cstring>\n  setSortOrder,      \u002F\u002F (order: string) => void\n} = useSorting()\n",[29,570,571,577,587,597],{"__ignoreMap":27},[32,572,573,575],{"class":34,"line":35},[32,574,39],{"class":38},[32,576,43],{"class":42},[32,578,579,582,584],{"class":34,"line":46},[32,580,581],{"class":49},"  sortOrder",[32,583,53],{"class":42},[32,585,586],{"class":56},"         \u002F\u002F Ref\u003Cstring>\n",[32,588,589,592,594],{"class":34,"line":60},[32,590,591],{"class":49},"  setSortOrder",[32,593,53],{"class":42},[32,595,596],{"class":56},"      \u002F\u002F (order: string) => void\n",[32,598,599,601,603,606],{"class":34,"line":71},[32,600,162],{"class":42},[32,602,165],{"class":42},[32,604,605],{"class":168}," useSorting",[32,607,172],{"class":49},[10,609,610,611,614,615,614,618,614,621,614,624,337],{},"Available sort options: ",[29,612,613],{},"DATE",", ",[29,616,617],{},"PRICE",[29,619,620],{},"PRICE_DESC",[29,622,623],{},"RATING",[29,625,626],{},"POPULARITY",[189,628],{},[14,630,632],{"id":631},"usesearch","useSearch",[10,634,635],{},"Handles product search queries.",[22,637,639],{"className":24,"code":638,"language":26,"meta":27,"style":27},"const {\n  searchQuery,       \u002F\u002F Ref\u003Cstring>\n  searchResults,     \u002F\u002F Ref\u003CProduct[]>\n  isSearching,       \u002F\u002F Ref\u003Cboolean>\n  clearSearch,       \u002F\u002F () => void\n} = useSearch()\n",[29,640,641,647,657,667,677,687],{"__ignoreMap":27},[32,642,643,645],{"class":34,"line":35},[32,644,39],{"class":38},[32,646,43],{"class":42},[32,648,649,652,654],{"class":34,"line":46},[32,650,651],{"class":49},"  searchQuery",[32,653,53],{"class":42},[32,655,656],{"class":56},"       \u002F\u002F Ref\u003Cstring>\n",[32,658,659,662,664],{"class":34,"line":60},[32,660,661],{"class":49},"  searchResults",[32,663,53],{"class":42},[32,665,666],{"class":56},"     \u002F\u002F Ref\u003CProduct[]>\n",[32,668,669,672,674],{"class":34,"line":71},[32,670,671],{"class":49},"  isSearching",[32,673,53],{"class":42},[32,675,676],{"class":56},"       \u002F\u002F Ref\u003Cboolean>\n",[32,678,679,682,684],{"class":34,"line":82},[32,680,681],{"class":49},"  clearSearch",[32,683,53],{"class":42},[32,685,686],{"class":56},"       \u002F\u002F () => void\n",[32,688,689,691,693,696],{"class":34,"line":93},[32,690,162],{"class":42},[32,692,165],{"class":42},[32,694,695],{"class":168}," useSearch",[32,697,172],{"class":49},[189,699],{},[14,701,703],{"id":702},"usewishlist","useWishlist",[10,705,706,707,337],{},"Persists a wishlist in ",[29,708,709],{},"localStorage",[22,711,713],{"className":24,"code":712,"language":26,"meta":27,"style":27},"const {\n  wishlist,          \u002F\u002F Ref\u003Cnumber[]> — array of product IDs\n  addToWishlist,     \u002F\u002F (productId: number) => void\n  removeFromWishlist,\u002F\u002F (productId: number) => void\n  isInWishlist,      \u002F\u002F (productId: number) => boolean\n  toggleWishlist,    \u002F\u002F (productId: number) => void\n} = useWishlist()\n",[29,714,715,721,731,741,751,761,771],{"__ignoreMap":27},[32,716,717,719],{"class":34,"line":35},[32,718,39],{"class":38},[32,720,43],{"class":42},[32,722,723,726,728],{"class":34,"line":46},[32,724,725],{"class":49},"  wishlist",[32,727,53],{"class":42},[32,729,730],{"class":56},"          \u002F\u002F Ref\u003Cnumber[]> — array of product IDs\n",[32,732,733,736,738],{"class":34,"line":60},[32,734,735],{"class":49},"  addToWishlist",[32,737,53],{"class":42},[32,739,740],{"class":56},"     \u002F\u002F (productId: number) => void\n",[32,742,743,746,748],{"class":34,"line":71},[32,744,745],{"class":49},"  removeFromWishlist",[32,747,53],{"class":42},[32,749,750],{"class":56},"\u002F\u002F (productId: number) => void\n",[32,752,753,756,758],{"class":34,"line":82},[32,754,755],{"class":49},"  isInWishlist",[32,757,53],{"class":42},[32,759,760],{"class":56},"      \u002F\u002F (productId: number) => boolean\n",[32,762,763,766,768],{"class":34,"line":93},[32,764,765],{"class":49},"  toggleWishlist",[32,767,53],{"class":42},[32,769,770],{"class":56},"    \u002F\u002F (productId: number) => void\n",[32,772,773,775,777,780],{"class":34,"line":104},[32,774,162],{"class":42},[32,776,165],{"class":42},[32,778,779],{"class":168}," useWishlist",[32,781,172],{"class":49},[189,783],{},[14,785,787],{"id":786},"usecountry","useCountry",[10,789,790],{},"Manages country and state selection for address forms.",[22,792,794],{"className":24,"code":793,"language":26,"meta":27,"style":27},"const {\n  allowedCountries,  \u002F\u002F Ref\u003CCountry[]>\n  states,            \u002F\u002F Ref\u003CState[]>\n  getStates,         \u002F\u002F (countryCode: string) => Promise\u003Cvoid>\n} = useCountry()\n",[29,795,796,802,812,822,832],{"__ignoreMap":27},[32,797,798,800],{"class":34,"line":35},[32,799,39],{"class":38},[32,801,43],{"class":42},[32,803,804,807,809],{"class":34,"line":46},[32,805,806],{"class":49},"  allowedCountries",[32,808,53],{"class":42},[32,810,811],{"class":56},"  \u002F\u002F Ref\u003CCountry[]>\n",[32,813,814,817,819],{"class":34,"line":60},[32,815,816],{"class":49},"  states",[32,818,53],{"class":42},[32,820,821],{"class":56},"            \u002F\u002F Ref\u003CState[]>\n",[32,823,824,827,829],{"class":34,"line":71},[32,825,826],{"class":49},"  getStates",[32,828,53],{"class":42},[32,830,831],{"class":56},"         \u002F\u002F (countryCode: string) => Promise\u003Cvoid>\n",[32,833,834,836,838,841],{"class":34,"line":82},[32,835,162],{"class":42},[32,837,165],{"class":42},[32,839,840],{"class":168}," useCountry",[32,842,172],{"class":49},[189,844],{},[14,846,848],{"id":847},"usehelpers","useHelpers",[10,850,851],{},"Utility functions used throughout the app.",[22,853,855],{"className":24,"code":854,"language":26,"meta":27,"style":27},"const {\n  formatPrice,       \u002F\u002F (price: string) => string\n  stripHtml,         \u002F\u002F (html: string) => string\n  scrollToTop,       \u002F\u002F () => void\n  isClient,          \u002F\u002F boolean\n} = useHelpers()\n",[29,856,857,863,873,883,892,902],{"__ignoreMap":27},[32,858,859,861],{"class":34,"line":35},[32,860,39],{"class":38},[32,862,43],{"class":42},[32,864,865,868,870],{"class":34,"line":46},[32,866,867],{"class":49},"  formatPrice",[32,869,53],{"class":42},[32,871,872],{"class":56},"       \u002F\u002F (price: string) => string\n",[32,874,875,878,880],{"class":34,"line":60},[32,876,877],{"class":49},"  stripHtml",[32,879,53],{"class":42},[32,881,882],{"class":56},"         \u002F\u002F (html: string) => string\n",[32,884,885,888,890],{"class":34,"line":71},[32,886,887],{"class":49},"  scrollToTop",[32,889,53],{"class":42},[32,891,686],{"class":56},[32,893,894,897,899],{"class":34,"line":82},[32,895,896],{"class":49},"  isClient",[32,898,53],{"class":42},[32,900,901],{"class":56},"          \u002F\u002F boolean\n",[32,903,904,906,908,911],{"class":34,"line":93},[32,905,162],{"class":42},[32,907,165],{"class":42},[32,909,910],{"class":168}," useHelpers",[32,912,172],{"class":49},[189,914],{},[14,916,918],{"id":917},"useseofallbacks","useSEOFallbacks",[10,920,921],{},"Provides fallback SEO meta tags when Yoast data is unavailable.",[22,923,925],{"className":24,"code":924,"language":26,"meta":27,"style":27},"const { generateSEO } = useSEOFallbacks()\n\u002F\u002F generateSEO(product) → useSeoMeta()-compatible object\n",[29,926,927,946],{"__ignoreMap":27},[32,928,929,931,934,937,939,941,944],{"class":34,"line":35},[32,930,39],{"class":38},[32,932,933],{"class":42}," {",[32,935,936],{"class":49}," generateSEO ",[32,938,162],{"class":42},[32,940,165],{"class":42},[32,942,943],{"class":168}," useSEOFallbacks",[32,945,172],{"class":49},[32,947,948],{"class":34,"line":46},[32,949,950],{"class":56},"\u002F\u002F generateSEO(product) → useSeoMeta()-compatible object\n",[189,952],{},[14,954,956],{"id":955},"useyoasthead","useYoastHead",[10,958,959],{},"Injects full Yoast SEO head tags for a product.",[22,961,963],{"className":24,"code":962,"language":26,"meta":27,"style":27},"const { setYoastHead } = useYoastHead()\n\u002F\u002F setYoastHead(fullYoastHead: string) → void\n",[29,964,965,983],{"__ignoreMap":27},[32,966,967,969,971,974,976,978,981],{"class":34,"line":35},[32,968,39],{"class":38},[32,970,933],{"class":42},[32,972,973],{"class":49}," setYoastHead ",[32,975,162],{"class":42},[32,977,165],{"class":42},[32,979,980],{"class":168}," useYoastHead",[32,982,172],{"class":49},[32,984,985],{"class":34,"line":46},[32,986,987],{"class":56},"\u002F\u002F setYoastHead(fullYoastHead: string) → void\n",[10,989,990,991,994,995,997,998,1001],{},"Requires the ",[29,992,993],{},"fullYoastHead"," field to be exposed by the ",[176,996,485],{}," plugin (",[29,999,1000],{},"graphql\u002Fyoast.php",").",[189,1003],{},[14,1005,336],{"id":1006},"useauthtokens",[10,1008,1009,1010,1012],{},"Low-level JWT token management. Used internally by ",[29,1011,194],{}," — you should not need to call this directly.",[22,1014,1016],{"className":24,"code":1015,"language":26,"meta":27,"style":27},"const {\n  getAuthToken,      \u002F\u002F () => string | null\n  setAuthToken,      \u002F\u002F (token: string) => void\n  clearAuthToken,    \u002F\u002F () => void\n} = useAuthTokens()\n",[29,1017,1018,1024,1034,1044,1054],{"__ignoreMap":27},[32,1019,1020,1022],{"class":34,"line":35},[32,1021,39],{"class":38},[32,1023,43],{"class":42},[32,1025,1026,1029,1031],{"class":34,"line":46},[32,1027,1028],{"class":49},"  getAuthToken",[32,1030,53],{"class":42},[32,1032,1033],{"class":56},"      \u002F\u002F () => string | null\n",[32,1035,1036,1039,1041],{"class":34,"line":60},[32,1037,1038],{"class":49},"  setAuthToken",[32,1040,53],{"class":42},[32,1042,1043],{"class":56},"      \u002F\u002F (token: string) => void\n",[32,1045,1046,1049,1051],{"class":34,"line":71},[32,1047,1048],{"class":49},"  clearAuthToken",[32,1050,53],{"class":42},[32,1052,1053],{"class":56},"    \u002F\u002F () => void\n",[32,1055,1056,1058,1060,1063],{"class":34,"line":82},[32,1057,162],{"class":42},[32,1059,165],{"class":42},[32,1061,1062],{"class":168}," useAuthTokens",[32,1064,172],{"class":49},[1066,1067,1068],"style",{},"html pre.shiki code .sJ14y, html code.shiki .sJ14y{--shiki-default:#C792EA}html pre.shiki code .sAklC, html code.shiki .sAklC{--shiki-default:#89DDFF}html pre.shiki code .s0W1g, html code.shiki .s0W1g{--shiki-default:#BABED8}html pre.shiki code .saEQR, html code.shiki .saEQR{--shiki-default:#676E95;--shiki-default-font-style:italic}html pre.shiki code .sdLwU, html code.shiki .sdLwU{--shiki-default:#82AAFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":27,"searchDepth":46,"depth":46,"links":1070},[1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083],{"id":16,"depth":46,"text":17},{"id":193,"depth":46,"text":194},{"id":342,"depth":46,"text":343},{"id":423,"depth":46,"text":424},{"id":491,"depth":46,"text":492},{"id":561,"depth":46,"text":562},{"id":631,"depth":46,"text":632},{"id":702,"depth":46,"text":703},{"id":786,"depth":46,"text":787},{"id":847,"depth":46,"text":848},{"id":917,"depth":46,"text":918},{"id":955,"depth":46,"text":956},{"id":1006,"depth":46,"text":336},"Reference for all WooNuxt composables","md",null,{},{"icon":1089},"i-lucide-puzzle","\u002Fconfiguration\u002Fcomposables",{"title":5,"description":1084},"3.configuration\u002F2.composables","WcoLoKGBbsXUSkhzRx9477rZ7V6xKMdt6YSvwyVMGIQ",[1095,1455,2267,2784,3604,3788,3906,5181,5532,6373],{"id":1096,"title":1097,"body":1098,"description":1447,"extension":1085,"links":1086,"meta":1448,"navigation":1449,"path":1451,"seo":1452,"stem":1453,"__hash__":1454},"docs\u002F1.getting-started\u002F1.index.md","Introduction",{"type":7,"value":1099,"toc":1440},[1100,1107,1111,1114,1148,1152,1155,1217,1221,1228,1236,1239,1253,1257,1260,1391,1398,1402,1437],[10,1101,1102,1103,1106],{},"WooNuxt is the ",[176,1104,1105],{},"Next Generation Front-End for WooCommerce",". A modern, headless eCommerce solution that combines the power of WooCommerce with the performance of Nuxt.js. Build blazing-fast, SEO-friendly online stores with complete control over your frontend while leveraging WooCommerce's robust backend.",[14,1108,1110],{"id":1109},"what-is-woonuxt","What is WooNuxt?",[10,1112,1113],{},"WooNuxt provides a complete eCommerce frontend built with:",[1115,1116,1117,1124,1130,1136,1142],"ul",{},[1118,1119,1120,1123],"li",{},[176,1121,1122],{},"Nuxt.js 4"," - The latest version of the Vue.js framework",[1118,1125,1126,1129],{},[176,1127,1128],{},"WooCommerce"," - Industry-standard eCommerce platform",[1118,1131,1132,1135],{},[176,1133,1134],{},"GraphQL"," - Efficient data fetching via WPGraphQL & WooGraphQL",[1118,1137,1138,1141],{},[176,1139,1140],{},"Tailwind CSS"," - Utility-first styling framework",[1118,1143,1144,1147],{},[176,1145,1146],{},"Vue 3"," - Reactive, component-based architecture",[14,1149,1151],{"id":1150},"key-features","Key Features",[10,1153,1154],{},"WooNuxt comes with everything you need to build a modern online store:",[1115,1156,1157,1163,1169,1175,1181,1187,1193,1199,1205,1211],{},[1118,1158,1159,1162],{},[176,1160,1161],{},"🚀 Lightning Fast",": Server-side rendering and optimized performance",[1118,1164,1165,1168],{},[176,1166,1167],{},"🛒 Complete Cart & Checkout",": Full shopping experience with secure payments",[1118,1170,1171,1174],{},[176,1172,1173],{},"🔐 User Authentication",": Customer accounts with JWT-based auth",[1118,1176,1177,1180],{},[176,1178,1179],{},"💳 Stripe Integration",": Built-in payment processing",[1118,1182,1183,1186],{},[176,1184,1185],{},"🔍 Advanced Filtering",": Dynamic product filters and search",[1118,1188,1189,1192],{},[176,1190,1191],{},"📱 Responsive Design",": Mobile-first, works on all devices",[1118,1194,1195,1198],{},[176,1196,1197],{},"🎨 Fully Customizable",": Built with Nuxt Layers for easy overrides",[1118,1200,1201,1204],{},[176,1202,1203],{},"♿ Accessible",": WCAG compliant components",[1118,1206,1207,1210],{},[176,1208,1209],{},"🌍 i18n Ready",": Multi-language support included",[1118,1212,1213,1216],{},[176,1214,1215],{},"🖼️ Image Optimization",": Automatic image optimization with Nuxt Image",[14,1218,1220],{"id":1219},"architecture","Architecture",[10,1222,1223,1224,1227],{},"WooNuxt uses a ",[176,1225,1226],{},"Nuxt Layers"," architecture - similar to WordPress parent\u002Fchild themes:",[22,1229,1234],{"className":1230,"code":1232,"language":1233},[1231],"language-text","\nwoonuxt\u002F\n├── woonuxt_base\u002F # Core functionality (parent)\n└── app\u002F # Your customizations (child)\n\n","text",[29,1235,1232],{"__ignoreMap":27},[10,1237,1238],{},"This means:",[1115,1240,1241,1244,1247,1250],{},[1118,1242,1243],{},"✅ Easy updates to core without losing customizations",[1118,1245,1246],{},"✅ Override any component, page, or composable",[1118,1248,1249],{},"✅ Clean separation of concerns",[1118,1251,1252],{},"✅ Full control over your implementation",[14,1254,1256],{"id":1255},"quick-start","Quick Start",[10,1258,1259],{},"Get started in minutes:",[22,1261,1265],{"className":1262,"code":1263,"language":1264,"meta":27,"style":27},"language-bash shiki shiki-themes material-theme-palenight","# Clone the repository\ngit clone https:\u002F\u002Fgithub.com\u002Fscottyzen\u002Fwoonuxt.git\ncd woonuxt\n\n# Install dependencies\nnpm install\n# or: yarn install\n# or: pnpm install\n\n# Create environment file\ncp .env.example .env\n\n# Edit .env with your WordPress URL\n# GQL_HOST=https:\u002F\u002Fyoursite.com\u002Fgraphql\n\n# Start development server\nnpm run dev\n# or: yarn dev\n# or: pnpm dev\n","bash",[29,1266,1267,1272,1285,1293,1299,1304,1312,1317,1322,1326,1331,1342,1346,1351,1357,1362,1368,1379,1385],{"__ignoreMap":27},[32,1268,1269],{"class":34,"line":35},[32,1270,1271],{"class":56},"# Clone the repository\n",[32,1273,1274,1278,1282],{"class":34,"line":46},[32,1275,1277],{"class":1276},"s5Dmg","git",[32,1279,1281],{"class":1280},"sfyAc"," clone",[32,1283,1284],{"class":1280}," https:\u002F\u002Fgithub.com\u002Fscottyzen\u002Fwoonuxt.git\n",[32,1286,1287,1290],{"class":34,"line":60},[32,1288,1289],{"class":168},"cd",[32,1291,1292],{"class":1280}," woonuxt\n",[32,1294,1295],{"class":34,"line":71},[32,1296,1298],{"emptyLinePlaceholder":1297},true,"\n",[32,1300,1301],{"class":34,"line":82},[32,1302,1303],{"class":56},"# Install dependencies\n",[32,1305,1306,1309],{"class":34,"line":93},[32,1307,1308],{"class":1276},"npm",[32,1310,1311],{"class":1280}," install\n",[32,1313,1314],{"class":34,"line":104},[32,1315,1316],{"class":56},"# or: yarn install\n",[32,1318,1319],{"class":34,"line":115},[32,1320,1321],{"class":56},"# or: pnpm install\n",[32,1323,1324],{"class":34,"line":126},[32,1325,1298],{"emptyLinePlaceholder":1297},[32,1327,1328],{"class":34,"line":137},[32,1329,1330],{"class":56},"# Create environment file\n",[32,1332,1333,1336,1339],{"class":34,"line":148},[32,1334,1335],{"class":1276},"cp",[32,1337,1338],{"class":1280}," .env.example",[32,1340,1341],{"class":1280}," .env\n",[32,1343,1344],{"class":34,"line":159},[32,1345,1298],{"emptyLinePlaceholder":1297},[32,1347,1348],{"class":34,"line":321},[32,1349,1350],{"class":56},"# Edit .env with your WordPress URL\n",[32,1352,1354],{"class":34,"line":1353},14,[32,1355,1356],{"class":56},"# GQL_HOST=https:\u002F\u002Fyoursite.com\u002Fgraphql\n",[32,1358,1360],{"class":34,"line":1359},15,[32,1361,1298],{"emptyLinePlaceholder":1297},[32,1363,1365],{"class":34,"line":1364},16,[32,1366,1367],{"class":56},"# Start development server\n",[32,1369,1371,1373,1376],{"class":34,"line":1370},17,[32,1372,1308],{"class":1276},[32,1374,1375],{"class":1280}," run",[32,1377,1378],{"class":1280}," dev\n",[32,1380,1382],{"class":34,"line":1381},18,[32,1383,1384],{"class":56},"# or: yarn dev\n",[32,1386,1388],{"class":34,"line":1387},19,[32,1389,1390],{"class":56},"# or: pnpm dev\n",[10,1392,1393,1394,1397],{},"Your store will be running at ",[29,1395,1396],{},"http:\u002F\u002Flocalhost:3000"," 🎉",[14,1399,1401],{"id":1400},"next-steps","Next Steps",[1403,1404,1405,1414,1422,1429],"card-group",{},[1406,1407,1411],"card",{"icon":1408,"title":1409,"to":1410},"i-lucide-download","Installation","\u002Fdocs\u002Fgetting-started\u002Finstallation",[10,1412,1413],{},"Step-by-step installation guide",[1406,1415,1419],{"icon":1416,"title":1417,"to":1418},"i-lucide-server","WordPress Setup","\u002Fdocs\u002Fwordpress-setup",[10,1420,1421],{},"Configure your WordPress backend",[1406,1423,1426],{"icon":1424,"title":1256,"to":1425},"i-lucide-code","\u002Fdocs\u002Fgetting-started\u002Fquick-start",[10,1427,1428],{},"Get up and running quickly",[1406,1430,1434],{"icon":1431,"title":1432,"to":1433},"i-lucide-sliders","Plugin Setup","\u002Fdocs\u002Fwordpress-setup\u002Fplugins",[10,1435,1436],{},"Install and configure WooNuxt Settings",[1066,1438,1439],{},"html pre.shiki code .saEQR, html code.shiki .saEQR{--shiki-default:#676E95;--shiki-default-font-style:italic}html pre.shiki code .s5Dmg, html code.shiki .s5Dmg{--shiki-default:#FFCB6B}html pre.shiki code .sfyAc, html code.shiki .sfyAc{--shiki-default:#C3E88D}html pre.shiki code .sdLwU, html code.shiki .sdLwU{--shiki-default:#82AAFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":27,"searchDepth":46,"depth":46,"links":1441},[1442,1443,1444,1445,1446],{"id":1109,"depth":46,"text":1110},{"id":1150,"depth":46,"text":1151},{"id":1219,"depth":46,"text":1220},{"id":1255,"depth":46,"text":1256},{"id":1400,"depth":46,"text":1401},"Welcome to WooNuxt - Modern headless eCommerce with WooCommerce and Nuxt.js",{},{"icon":1450},"i-lucide-house","\u002Fgetting-started",{"title":1097,"description":1447},"1.getting-started\u002F1.index","SN5RIBfETaeRkCglu_xAcCOAAp9lgpbb36XRRtpc9ng",{"id":1456,"title":1409,"body":1457,"description":2260,"extension":1085,"links":1086,"meta":2261,"navigation":2262,"path":2263,"seo":2264,"stem":2265,"__hash__":2266},"docs\u002F1.getting-started\u002F2.installation.md",{"type":7,"value":1458,"toc":2244},[1459,1462,1466,1469,1489,1493,1496,1544,1547,1551,1554,1567,1574,1694,1807,1811,1818,1838,1849,1859,1863,1866,1911,1914,1920,1926,1930,1933,1938,1999,2031,2035,2048,2059,2063,2075,2079,2125,2132,2151,2155,2158,2193,2197,2209,2221,2223,2241],[10,1460,1461],{},"This guide will walk you through installing WooNuxt and getting your first headless eCommerce store running.",[14,1463,1465],{"id":1464},"step-1-clone-repository","Step 1: Clone Repository",[10,1467,1468],{},"Clone the WooNuxt repository to your local machine:",[22,1470,1473],{"className":1262,"code":1471,"filename":1472,"language":1264,"meta":27,"style":27},"git clone https:\u002F\u002Fgithub.com\u002Fscottyzen\u002Fwoonuxt.git\ncd woonuxt\n","Terminal",[29,1474,1475,1483],{"__ignoreMap":27},[32,1476,1477,1479,1481],{"class":34,"line":35},[32,1478,1277],{"class":1276},[32,1480,1281],{"class":1280},[32,1482,1284],{"class":1280},[32,1484,1485,1487],{"class":34,"line":46},[32,1486,1289],{"class":168},[32,1488,1292],{"class":1280},[14,1490,1492],{"id":1491},"step-2-install-dependencies","Step 2: Install Dependencies",[10,1494,1495],{},"Install the required Node.js packages:",[22,1497,1499],{"className":1262,"code":1498,"filename":1472,"language":1264,"meta":27,"style":27},"# Using npm\nnpm install\n\n# Or using yarn\nyarn install\n\n# Or using pnpm\npnpm install\n",[29,1500,1501,1506,1512,1516,1521,1528,1532,1537],{"__ignoreMap":27},[32,1502,1503],{"class":34,"line":35},[32,1504,1505],{"class":56},"# Using npm\n",[32,1507,1508,1510],{"class":34,"line":46},[32,1509,1308],{"class":1276},[32,1511,1311],{"class":1280},[32,1513,1514],{"class":34,"line":60},[32,1515,1298],{"emptyLinePlaceholder":1297},[32,1517,1518],{"class":34,"line":71},[32,1519,1520],{"class":56},"# Or using yarn\n",[32,1522,1523,1526],{"class":34,"line":82},[32,1524,1525],{"class":1276},"yarn",[32,1527,1311],{"class":1280},[32,1529,1530],{"class":34,"line":93},[32,1531,1298],{"emptyLinePlaceholder":1297},[32,1533,1534],{"class":34,"line":104},[32,1535,1536],{"class":56},"# Or using pnpm\n",[32,1538,1539,1542],{"class":34,"line":115},[32,1540,1541],{"class":1276},"pnpm",[32,1543,1311],{"class":1280},[10,1545,1546],{},"This will install all dependencies including Nuxt.js, Vue, and other required packages.",[14,1548,1550],{"id":1549},"step-3-environment-configuration","Step 3: Environment Configuration",[10,1552,1553],{},"Create your environment configuration file:",[22,1555,1557],{"className":1262,"code":1556,"filename":1472,"language":1264,"meta":27,"style":27},"cp .env.example .env\n",[29,1558,1559],{"__ignoreMap":27},[32,1560,1561,1563,1565],{"class":34,"line":35},[32,1562,1335],{"class":1276},[32,1564,1338],{"class":1280},[32,1566,1341],{"class":1280},[10,1568,1569,1570,1573],{},"Edit the ",[29,1571,1572],{},".env"," file with your WordPress site details:",[22,1575,1579],{"className":1576,"code":1577,"filename":1572,"language":1578,"meta":27,"style":27},"language-env shiki shiki-themes material-theme-palenight","# ─── Required ────────────────────────────────────────────────\n# WordPress GraphQL endpoint\nGQL_HOST=https:\u002F\u002Fyoursite.com\u002Fgraphql\n\n# Comma-separated list of image domains for @nuxt\u002Fimage optimization\nNUXT_IMAGE_DOMAINS=yoursite.com,cdn.yoursite.com\n\n# ─── Optional ────────────────────────────────────────────────\n# Origin header sent with GraphQL requests (defaults to http:\u002F\u002Flocalhost:3000)\nAPP_HOST=http:\u002F\u002Flocalhost:3000\n\n# ISR cache lifetime in seconds for product\u002Fcategory pages (default: 3600)\n# Increase for large catalogs (10 000+ products) to reduce build times\nCATALOG_ISR_TTL=3600\n\n# Override products per page set in WooNuxt Settings plugin\nNUXT_PUBLIC_PRODUCTS_PER_PAGE=24\n\n# Stripe publishable key (overrides value fetched from WordPress)\nNUXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=pk_test_...\n\n# Override brand primary color (hex, overrides WooNuxt Settings plugin value)\nPRIMARY_COLOR=#7F54B2\n","env",[29,1580,1581,1586,1591,1596,1600,1605,1610,1614,1619,1624,1629,1633,1638,1643,1648,1652,1657,1662,1666,1671,1677,1682,1688],{"__ignoreMap":27},[32,1582,1583],{"class":34,"line":35},[32,1584,1585],{},"# ─── Required ────────────────────────────────────────────────\n",[32,1587,1588],{"class":34,"line":46},[32,1589,1590],{},"# WordPress GraphQL endpoint\n",[32,1592,1593],{"class":34,"line":60},[32,1594,1595],{},"GQL_HOST=https:\u002F\u002Fyoursite.com\u002Fgraphql\n",[32,1597,1598],{"class":34,"line":71},[32,1599,1298],{"emptyLinePlaceholder":1297},[32,1601,1602],{"class":34,"line":82},[32,1603,1604],{},"# Comma-separated list of image domains for @nuxt\u002Fimage optimization\n",[32,1606,1607],{"class":34,"line":93},[32,1608,1609],{},"NUXT_IMAGE_DOMAINS=yoursite.com,cdn.yoursite.com\n",[32,1611,1612],{"class":34,"line":104},[32,1613,1298],{"emptyLinePlaceholder":1297},[32,1615,1616],{"class":34,"line":115},[32,1617,1618],{},"# ─── Optional ────────────────────────────────────────────────\n",[32,1620,1621],{"class":34,"line":126},[32,1622,1623],{},"# Origin header sent with GraphQL requests (defaults to http:\u002F\u002Flocalhost:3000)\n",[32,1625,1626],{"class":34,"line":137},[32,1627,1628],{},"APP_HOST=http:\u002F\u002Flocalhost:3000\n",[32,1630,1631],{"class":34,"line":148},[32,1632,1298],{"emptyLinePlaceholder":1297},[32,1634,1635],{"class":34,"line":159},[32,1636,1637],{},"# ISR cache lifetime in seconds for product\u002Fcategory pages (default: 3600)\n",[32,1639,1640],{"class":34,"line":321},[32,1641,1642],{},"# Increase for large catalogs (10 000+ products) to reduce build times\n",[32,1644,1645],{"class":34,"line":1353},[32,1646,1647],{},"CATALOG_ISR_TTL=3600\n",[32,1649,1650],{"class":34,"line":1359},[32,1651,1298],{"emptyLinePlaceholder":1297},[32,1653,1654],{"class":34,"line":1364},[32,1655,1656],{},"# Override products per page set in WooNuxt Settings plugin\n",[32,1658,1659],{"class":34,"line":1370},[32,1660,1661],{},"NUXT_PUBLIC_PRODUCTS_PER_PAGE=24\n",[32,1663,1664],{"class":34,"line":1381},[32,1665,1298],{"emptyLinePlaceholder":1297},[32,1667,1668],{"class":34,"line":1387},[32,1669,1670],{},"# Stripe publishable key (overrides value fetched from WordPress)\n",[32,1672,1674],{"class":34,"line":1673},20,[32,1675,1676],{},"NUXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=pk_test_...\n",[32,1678,1680],{"class":34,"line":1679},21,[32,1681,1298],{"emptyLinePlaceholder":1297},[32,1683,1685],{"class":34,"line":1684},22,[32,1686,1687],{},"# Override brand primary color (hex, overrides WooNuxt Settings plugin value)\n",[32,1689,1691],{"class":34,"line":1690},23,[32,1692,1693],{},"PRIMARY_COLOR=#7F54B2\n",[1695,1696,1697,1713],"table",{},[1698,1699,1700],"thead",{},[1701,1702,1703,1707,1710],"tr",{},[1704,1705,1706],"th",{},"Variable",[1704,1708,1709],{},"Required",[1704,1711,1712],{},"Description",[1714,1715,1716,1730,1742,1755,1771,1783,1795],"tbody",{},[1701,1717,1718,1724,1727],{},[1719,1720,1721],"td",{},[29,1722,1723],{},"GQL_HOST",[1719,1725,1726],{},"✅",[1719,1728,1729],{},"WordPress GraphQL endpoint",[1701,1731,1732,1737,1739],{},[1719,1733,1734],{},[29,1735,1736],{},"NUXT_IMAGE_DOMAINS",[1719,1738,1726],{},[1719,1740,1741],{},"Allowed image domains for optimization",[1701,1743,1744,1749,1752],{},[1719,1745,1746],{},[29,1747,1748],{},"APP_HOST",[1719,1750,1751],{},"—",[1719,1753,1754],{},"Origin header for GraphQL requests",[1701,1756,1757,1762,1764],{},[1719,1758,1759],{},[29,1760,1761],{},"CATALOG_ISR_TTL",[1719,1763,1751],{},[1719,1765,1766,1767,1770],{},"ISR cache TTL in seconds (default ",[29,1768,1769],{},"3600",")",[1701,1772,1773,1778,1780],{},[1719,1774,1775],{},[29,1776,1777],{},"NUXT_PUBLIC_PRODUCTS_PER_PAGE",[1719,1779,1751],{},[1719,1781,1782],{},"Overrides plugin setting",[1701,1784,1785,1790,1792],{},[1719,1786,1787],{},[29,1788,1789],{},"NUXT_PUBLIC_STRIPE_PUBLISHABLE_KEY",[1719,1791,1751],{},[1719,1793,1794],{},"Overrides Stripe key from plugin",[1701,1796,1797,1802,1804],{},[1719,1798,1799],{},[29,1800,1801],{},"PRIMARY_COLOR",[1719,1803,1751],{},[1719,1805,1806],{},"Overrides brand color from plugin",[14,1808,1810],{"id":1809},"step-4-wordpress-setup","Step 4: WordPress Setup",[10,1812,1813,1814,1817],{},"Before starting the frontend, you need to configure WordPress. Download and install the ",[176,1815,1816],{},"WooNuxt Settings Plugin"," which will automatically install and configure:",[1115,1819,1820,1826,1832],{},[1118,1821,1822,1825],{},[176,1823,1824],{},"WPGraphQL 2.12.0+"," - GraphQL API for WordPress",[1118,1827,1828,1831],{},[176,1829,1830],{},"WooGraphQL 1.0.2+"," - WooCommerce integration for GraphQL",[1118,1833,1834,1837],{},[176,1835,1836],{},"WPGraphQL Headless Login 0.4.4+"," - Authentication for headless sites",[10,1839,1840],{},[176,1841,1842],{},[1843,1844,1848],"a",{"href":1845,"rel":1846},"https:\u002F\u002Fgithub.com\u002Fscottyzen\u002Fwoonuxt-settings\u002Freleases\u002Flatest\u002Fdownload\u002Fwoonuxt-settings.zip",[1847],"nofollow","Download woonuxt-settings.zip",[1850,1851,1852],"tip",{},[10,1853,1854,1855,1858],{},"See the ",[1843,1856,1857],{"href":1418},"WordPress Setup Guide"," for complete installation instructions.",[14,1860,1862],{"id":1861},"step-5-start-development-server","Step 5: Start Development Server",[10,1864,1865],{},"Once WordPress is configured, start your WooNuxt development server:",[22,1867,1869],{"className":1262,"code":1868,"filename":1472,"language":1264,"meta":27,"style":27},"# Using npm\nnpm run dev\n\n# Or using yarn\nyarn dev\n\n# Or using pnpm\npnpm dev\n",[29,1870,1871,1875,1883,1887,1891,1897,1901,1905],{"__ignoreMap":27},[32,1872,1873],{"class":34,"line":35},[32,1874,1505],{"class":56},[32,1876,1877,1879,1881],{"class":34,"line":46},[32,1878,1308],{"class":1276},[32,1880,1375],{"class":1280},[32,1882,1378],{"class":1280},[32,1884,1885],{"class":34,"line":60},[32,1886,1298],{"emptyLinePlaceholder":1297},[32,1888,1889],{"class":34,"line":71},[32,1890,1520],{"class":56},[32,1892,1893,1895],{"class":34,"line":82},[32,1894,1525],{"class":1276},[32,1896,1378],{"class":1280},[32,1898,1899],{"class":34,"line":93},[32,1900,1298],{"emptyLinePlaceholder":1297},[32,1902,1903],{"class":34,"line":104},[32,1904,1536],{"class":56},[32,1906,1907,1909],{"class":34,"line":115},[32,1908,1541],{"class":1276},[32,1910,1378],{"class":1280},[10,1912,1913],{},"Your store should now be running at:",[22,1915,1918],{"className":1916,"code":1917,"language":1233},[1231],"http:\u002F\u002Flocalhost:3000\n",[29,1919,1917],{"__ignoreMap":27},[1921,1922,1923],"success",{},[10,1924,1925],{},"🎉 Congratulations! Your WooNuxt store is now running.",[14,1927,1929],{"id":1928},"optional-ssl-for-local-development","Optional: SSL for Local Development",[10,1931,1932],{},"If you need HTTPS for local development (for testing payment gateways, PWA features, or third-party integrations):",[1934,1935,1937],"h3",{"id":1936},"install-mkcert","Install mkcert",[22,1939,1942],{"className":1262,"code":1940,"filename":1941,"language":1264,"meta":27,"style":27},"# macOS (Homebrew)\nbrew install mkcert\n\n# Linux\nsudo apt install mkcert   # Debian\u002FUbuntu\nsudo yum install mkcert    # Fedora\u002FRHEL\n","macOS\u002FLinux",[29,1943,1944,1949,1960,1964,1969,1985],{"__ignoreMap":27},[32,1945,1946],{"class":34,"line":35},[32,1947,1948],{"class":56},"# macOS (Homebrew)\n",[32,1950,1951,1954,1957],{"class":34,"line":46},[32,1952,1953],{"class":1276},"brew",[32,1955,1956],{"class":1280}," install",[32,1958,1959],{"class":1280}," mkcert\n",[32,1961,1962],{"class":34,"line":60},[32,1963,1298],{"emptyLinePlaceholder":1297},[32,1965,1966],{"class":34,"line":71},[32,1967,1968],{"class":56},"# Linux\n",[32,1970,1971,1974,1977,1979,1982],{"class":34,"line":82},[32,1972,1973],{"class":1276},"sudo",[32,1975,1976],{"class":1280}," apt",[32,1978,1956],{"class":1280},[32,1980,1981],{"class":1280}," mkcert",[32,1983,1984],{"class":56},"   # Debian\u002FUbuntu\n",[32,1986,1987,1989,1992,1994,1996],{"class":34,"line":93},[32,1988,1973],{"class":1276},[32,1990,1991],{"class":1280}," yum",[32,1993,1956],{"class":1280},[32,1995,1981],{"class":1280},[32,1997,1998],{"class":56},"    # Fedora\u002FRHEL\n",[22,2000,2005],{"className":2001,"code":2002,"filename":2003,"language":2004,"meta":27,"style":27},"language-powershell shiki shiki-themes material-theme-palenight","# Using Chocolatey\nchoco install mkcert\n\n# Or using Scoop\nscoop install mkcert\n","Windows","powershell",[29,2006,2007,2012,2017,2021,2026],{"__ignoreMap":27},[32,2008,2009],{"class":34,"line":35},[32,2010,2011],{},"# Using Chocolatey\n",[32,2013,2014],{"class":34,"line":46},[32,2015,2016],{},"choco install mkcert\n",[32,2018,2019],{"class":34,"line":60},[32,2020,1298],{"emptyLinePlaceholder":1297},[32,2022,2023],{"class":34,"line":71},[32,2024,2025],{},"# Or using Scoop\n",[32,2027,2028],{"class":34,"line":82},[32,2029,2030],{},"scoop install mkcert\n",[1934,2032,2034],{"id":2033},"generate-certificate","Generate Certificate",[22,2036,2038],{"className":1262,"code":2037,"filename":1472,"language":1264,"meta":27,"style":27},"mkcert localhost\n",[29,2039,2040],{"__ignoreMap":27},[32,2041,2042,2045],{"class":34,"line":35},[32,2043,2044],{"class":1276},"mkcert",[32,2046,2047],{"class":1280}," localhost\n",[10,2049,2050,2051,2054,2055,2058],{},"This creates ",[29,2052,2053],{},"localhost.pem"," and ",[29,2056,2057],{},"localhost-key.pem"," files in your current directory.",[1934,2060,2062],{"id":2061},"install-certificate-authority","Install Certificate Authority",[22,2064,2066],{"className":1262,"code":2065,"filename":1472,"language":1264,"meta":27,"style":27},"mkcert -install\n",[29,2067,2068],{"__ignoreMap":27},[32,2069,2070,2072],{"class":34,"line":35},[32,2071,2044],{"class":1276},[32,2073,2074],{"class":1280}," -install\n",[1934,2076,2078],{"id":2077},"start-with-ssl","Start with SSL",[22,2080,2082],{"className":1262,"code":2081,"filename":1472,"language":1264,"meta":27,"style":27},"# Using npm\nnpm run dev:ssl\n\n# Or using yarn\nyarn dev:ssl\n\n# Or using pnpm\npnpm dev:ssl\n",[29,2083,2084,2088,2097,2101,2105,2111,2115,2119],{"__ignoreMap":27},[32,2085,2086],{"class":34,"line":35},[32,2087,1505],{"class":56},[32,2089,2090,2092,2094],{"class":34,"line":46},[32,2091,1308],{"class":1276},[32,2093,1375],{"class":1280},[32,2095,2096],{"class":1280}," dev:ssl\n",[32,2098,2099],{"class":34,"line":60},[32,2100,1298],{"emptyLinePlaceholder":1297},[32,2102,2103],{"class":34,"line":71},[32,2104,1520],{"class":56},[32,2106,2107,2109],{"class":34,"line":82},[32,2108,1525],{"class":1276},[32,2110,2096],{"class":1280},[32,2112,2113],{"class":34,"line":93},[32,2114,1298],{"emptyLinePlaceholder":1297},[32,2116,2117],{"class":34,"line":104},[32,2118,1536],{"class":56},[32,2120,2121,2123],{"class":34,"line":115},[32,2122,1541],{"class":1276},[32,2124,2096],{"class":1280},[10,2126,2127,2128,2131],{},"Your store will now be available at ",[29,2129,2130],{},"https:\u002F\u002Flocalhost:3000"," with a valid SSL certificate.",[1850,2133,2134],{},[10,2135,2136,2137,2140,2141,2144,2145,2150],{},"The ",[29,2138,2139],{},"dev:ssl"," script must be configured in your ",[29,2142,2143],{},"package.json",". Check the ",[1843,2146,2149],{"href":2147,"rel":2148},"https:\u002F\u002Fgithub.com\u002Fscottyzen\u002Fwoonuxt",[1847],"WooNuxt repository"," for the latest configuration.",[14,2152,2154],{"id":2153},"verify-installation","Verify Installation",[10,2156,2157],{},"Check that everything is working:",[2159,2160,2161,2169,2175,2181,2187],"ol",{},[1118,2162,2163,2166,2167],{},[176,2164,2165],{},"Homepage loads"," - Navigate to ",[29,2168,1396],{},[1118,2170,2171,2174],{},[176,2172,2173],{},"Products display"," - Products from WooCommerce appear",[1118,2176,2177,2180],{},[176,2178,2179],{},"No errors"," - Check browser console (F12) for errors",[1118,2182,2183,2186],{},[176,2184,2185],{},"Images load"," - Product images display correctly",[1118,2188,2189,2192],{},[176,2190,2191],{},"Navigation works"," - Menu and links function properly",[14,2194,2196],{"id":2195},"common-issues","Common Issues",[10,2198,2199,2202,2203,2205,2206,2208],{},[176,2200,2201],{},"GraphQL connection errors?"," Verify your ",[29,2204,1723],{}," in ",[29,2207,1572],{}," matches your WordPress GraphQL endpoint and ensure the WooNuxt Settings plugin is installed.",[10,2210,2211,2214,2215,2220],{},[176,2212,2213],{},"Need help?"," Visit ",[1843,2216,2219],{"href":2217,"rel":2218},"https:\u002F\u002Fgithub.com\u002Fscottyzen\u002Fwoonuxt\u002Fissues",[1847],"GitHub Issues"," for support.",[14,2222,1401],{"id":1400},[1403,2224,2225,2230,2236],{},[1406,2226,2227],{"icon":1416,"title":1417,"to":1418},[10,2228,2229],{},"Configure your WordPress backend with required plugins",[1406,2231,2233],{"icon":2232,"title":1256,"to":1425},"i-lucide-zap",[10,2234,2235],{},"Get your store running in minutes",[1406,2237,2239],{"icon":2238,"title":1432,"to":1433},"i-lucide-plug",[10,2240,1436],{},[1066,2242,2243],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .s5Dmg, html code.shiki .s5Dmg{--shiki-default:#FFCB6B}html pre.shiki code .sfyAc, html code.shiki .sfyAc{--shiki-default:#C3E88D}html pre.shiki code .sdLwU, html code.shiki .sdLwU{--shiki-default:#82AAFF}html pre.shiki code .saEQR, html code.shiki .saEQR{--shiki-default:#676E95;--shiki-default-font-style:italic}",{"title":27,"searchDepth":46,"depth":46,"links":2245},[2246,2247,2248,2249,2250,2251,2257,2258,2259],{"id":1464,"depth":46,"text":1465},{"id":1491,"depth":46,"text":1492},{"id":1549,"depth":46,"text":1550},{"id":1809,"depth":46,"text":1810},{"id":1861,"depth":46,"text":1862},{"id":1928,"depth":46,"text":1929,"children":2252},[2253,2254,2255,2256],{"id":1936,"depth":60,"text":1937},{"id":2033,"depth":60,"text":2034},{"id":2061,"depth":60,"text":2062},{"id":2077,"depth":60,"text":2078},{"id":2153,"depth":46,"text":2154},{"id":2195,"depth":46,"text":2196},{"id":1400,"depth":46,"text":1401},"Step-by-step guide to installing WooNuxt",{},{"icon":1408},"\u002Fgetting-started\u002Finstallation",{"title":1409,"description":2260},"1.getting-started\u002F2.installation","X3bIq_deJosp8ZoaEAjpkrkL8FsI8s52IBlYCVsLJ5I",{"id":2268,"title":2269,"body":2270,"description":2777,"extension":1085,"links":1086,"meta":2778,"navigation":2779,"path":2780,"seo":2781,"stem":2782,"__hash__":2783},"docs\u002F1.getting-started\u002F3.quick-start.md","Quick Start Guide",{"type":7,"value":2271,"toc":2766},[2272,2275,2279,2282,2302,2306,2309,2340,2343,2352,2356,2362,2391,2397,2415,2419,2422,2432,2513,2518,2522,2584,2590,2622,2626,2670,2676,2680,2683,2711,2713,2719,2728,2736,2745,2749,2752,2763],[10,2273,2274],{},"Follow these steps to get WooNuxt running quickly. This is the condensed version - see detailed sections for more information.",[14,2276,2278],{"id":2277},"step-1-prerequisites-checklist","Step 1: Prerequisites Checklist",[10,2280,2281],{},"Make sure you have everything ready:",[2283,2284,2285],"checklist",{},[1115,2286,2287,2290,2293,2296,2299],{},[1118,2288,2289],{},"WordPress 6.9.4+ with WooCommerce 10.7.0+",[1118,2291,2292],{},"At least one product published",[1118,2294,2295],{},"At least one product attribute configured (this is a prerequisite of WooGraphQL)",[1118,2297,2298],{},"Permalinks set to \"Post name\"",[1118,2300,2301],{},"Node.js 20+ installed locally",[14,2303,2305],{"id":2304},"step-2-install-woonuxt-settings-plugin","Step 2: Install WooNuxt Settings Plugin",[10,2307,2308],{},"This plugin is essential - it installs all dependencies automatically:",[2159,2310,2311,2319,2325,2328,2334,2337],{},[1118,2312,2313,2314],{},"Download from ",[1843,2315,2318],{"href":2316,"rel":2317},"https:\u002F\u002Fgithub.com\u002Fscottyzen\u002Fwoonuxt-settings\u002Freleases\u002Flatest",[1847],"GitHub Releases",[1118,2320,2321,2322],{},"Upload to ",[176,2323,2324],{},"Plugins > Add New > Upload Plugin",[1118,2326,2327],{},"Activate the plugin",[1118,2329,2330,2331],{},"Go to ",[176,2332,2333],{},"Settings > WooNuxt",[1118,2335,2336],{},"Click \"Install Now\" for each required plugin",[1118,2338,2339],{},"Wait for all plugins to show \"✅ Installed\"",[10,2341,2342],{},"Required plugins that will be installed:",[1115,2344,2345,2347,2349],{},[1118,2346,1824],{},[1118,2348,1830],{},[1118,2350,2351],{},"Headless Login for WPGraphQL 0.4.4+",[14,2353,2355],{"id":2354},"step-3-configure-woonuxt-settings","Step 3: Configure WooNuxt Settings",[10,2357,2358,2359,2361],{},"In ",[176,2360,2333],{},", configure these key settings:",[1115,2363,2364,2370,2376,2385],{},[1118,2365,2366,2369],{},[176,2367,2368],{},"Logo URL"," - Upload a logo to Media Library and paste the URL",[1118,2371,2372,2375],{},[176,2373,2374],{},"Primary Color"," - Set your brand color (default: #7F54B2)",[1118,2377,2378,2381,2382,2384],{},[176,2379,2380],{},"Front End URL"," - Set to ",[29,2383,1396],{}," for development",[1118,2386,2387,2390],{},[176,2388,2389],{},"Products Per Page"," - Set to 24 (or your preference)",[10,2392,2393,2396],{},[176,2394,2395],{},"Global Attributes"," - Add at least one product attribute for filtering:",[2159,2398,2399,2406,2409,2412],{},[1118,2400,2401,2402,2405],{},"Click ",[176,2403,2404],{},"Add New"," under Global Attributes",[1118,2407,2408],{},"Select an attribute (Color, Size, etc.)",[1118,2410,2411],{},"Configure display options",[1118,2413,2414],{},"Save changes",[14,2416,2418],{"id":2417},"step-4-test-wordpress-graphql","Step 4: Test WordPress GraphQL",[10,2420,2421],{},"Verify your setup works:",[2159,2423,2424,2429],{},[1118,2425,2330,2426],{},[176,2427,2428],{},"GraphQL > GraphiQL IDE",[1118,2430,2431],{},"Run this test query:",[22,2433,2437],{"className":2434,"code":2435,"language":2436,"meta":27,"style":27},"language-graphql shiki shiki-themes material-theme-palenight","query TestSetup {\n  products(first: 5) {\n    nodes {\n      id\n      name\n      ... on SimpleProduct {\n        price\n      }\n    }\n  }\n  woonuxtSettings {\n    primary_color\n    logo\n  }\n}\n","graphql",[29,2438,2439,2444,2449,2454,2459,2464,2469,2474,2479,2484,2489,2494,2499,2504,2508],{"__ignoreMap":27},[32,2440,2441],{"class":34,"line":35},[32,2442,2443],{},"query TestSetup {\n",[32,2445,2446],{"class":34,"line":46},[32,2447,2448],{},"  products(first: 5) {\n",[32,2450,2451],{"class":34,"line":60},[32,2452,2453],{},"    nodes {\n",[32,2455,2456],{"class":34,"line":71},[32,2457,2458],{},"      id\n",[32,2460,2461],{"class":34,"line":82},[32,2462,2463],{},"      name\n",[32,2465,2466],{"class":34,"line":93},[32,2467,2468],{},"      ... on SimpleProduct {\n",[32,2470,2471],{"class":34,"line":104},[32,2472,2473],{},"        price\n",[32,2475,2476],{"class":34,"line":115},[32,2477,2478],{},"      }\n",[32,2480,2481],{"class":34,"line":126},[32,2482,2483],{},"    }\n",[32,2485,2486],{"class":34,"line":137},[32,2487,2488],{},"  }\n",[32,2490,2491],{"class":34,"line":148},[32,2492,2493],{},"  woonuxtSettings {\n",[32,2495,2496],{"class":34,"line":159},[32,2497,2498],{},"    primary_color\n",[32,2500,2501],{"class":34,"line":321},[32,2502,2503],{},"    logo\n",[32,2505,2506],{"class":34,"line":1353},[32,2507,2488],{},[32,2509,2510],{"class":34,"line":1359},[32,2511,2512],{},"}\n",[1921,2514,2515],{},[10,2516,2517],{},"If you see products and settings, WordPress is configured correctly! ✅",[14,2519,2521],{"id":2520},"step-5-clone-configure-frontend","Step 5: Clone & Configure Frontend",[22,2523,2525],{"className":1262,"code":2524,"filename":1472,"language":1264,"meta":27,"style":27},"# Clone repository\ngit clone https:\u002F\u002Fgithub.com\u002Fscottyzen\u002Fwoonuxt.git\ncd woonuxt\n\n# Install dependencies\nnpm install\n# or: yarn install\n# or: pnpm install\n\n# Create environment file\ncp .env.example .env\n",[29,2526,2527,2532,2540,2546,2550,2554,2560,2564,2568,2572,2576],{"__ignoreMap":27},[32,2528,2529],{"class":34,"line":35},[32,2530,2531],{"class":56},"# Clone repository\n",[32,2533,2534,2536,2538],{"class":34,"line":46},[32,2535,1277],{"class":1276},[32,2537,1281],{"class":1280},[32,2539,1284],{"class":1280},[32,2541,2542,2544],{"class":34,"line":60},[32,2543,1289],{"class":168},[32,2545,1292],{"class":1280},[32,2547,2548],{"class":34,"line":71},[32,2549,1298],{"emptyLinePlaceholder":1297},[32,2551,2552],{"class":34,"line":82},[32,2553,1303],{"class":56},[32,2555,2556,2558],{"class":34,"line":93},[32,2557,1308],{"class":1276},[32,2559,1311],{"class":1280},[32,2561,2562],{"class":34,"line":104},[32,2563,1316],{"class":56},[32,2565,2566],{"class":34,"line":115},[32,2567,1321],{"class":56},[32,2569,2570],{"class":34,"line":126},[32,2571,1298],{"emptyLinePlaceholder":1297},[32,2573,2574],{"class":34,"line":137},[32,2575,1330],{"class":56},[32,2577,2578,2580,2582],{"class":34,"line":148},[32,2579,1335],{"class":1276},[32,2581,1338],{"class":1280},[32,2583,1341],{"class":1280},[10,2585,2586,2587,2589],{},"Edit ",[29,2588,1572],{},":",[22,2591,2593],{"className":1262,"code":2592,"filename":1572,"language":1264,"meta":27,"style":27},"GQL_HOST=https:\u002F\u002Fyoursite.com\u002Fgraphql\nAPP_HOST=http:\u002F\u002Flocalhost:3000\nNUXT_IMAGE_DOMAINS=yoursite.com\n",[29,2594,2595,2605,2613],{"__ignoreMap":27},[32,2596,2597,2599,2602],{"class":34,"line":35},[32,2598,1723],{"class":49},[32,2600,2601],{"class":42},"=",[32,2603,2604],{"class":1280},"https:\u002F\u002Fyoursite.com\u002Fgraphql\n",[32,2606,2607,2609,2611],{"class":34,"line":46},[32,2608,1748],{"class":49},[32,2610,2601],{"class":42},[32,2612,1917],{"class":1280},[32,2614,2615,2617,2619],{"class":34,"line":60},[32,2616,1736],{"class":49},[32,2618,2601],{"class":42},[32,2620,2621],{"class":1280},"yoursite.com\n",[14,2623,2625],{"id":2624},"step-6-start-development-server","Step 6: Start Development Server",[22,2627,2628],{"className":1262,"code":1868,"filename":1472,"language":1264,"meta":27,"style":27},[29,2629,2630,2634,2642,2646,2650,2656,2660,2664],{"__ignoreMap":27},[32,2631,2632],{"class":34,"line":35},[32,2633,1505],{"class":56},[32,2635,2636,2638,2640],{"class":34,"line":46},[32,2637,1308],{"class":1276},[32,2639,1375],{"class":1280},[32,2641,1378],{"class":1280},[32,2643,2644],{"class":34,"line":60},[32,2645,1298],{"emptyLinePlaceholder":1297},[32,2647,2648],{"class":34,"line":71},[32,2649,1520],{"class":56},[32,2651,2652,2654],{"class":34,"line":82},[32,2653,1525],{"class":1276},[32,2655,1378],{"class":1280},[32,2657,2658],{"class":34,"line":93},[32,2659,1298],{"emptyLinePlaceholder":1297},[32,2661,2662],{"class":34,"line":104},[32,2663,1536],{"class":56},[32,2665,2666,2668],{"class":34,"line":115},[32,2667,1541],{"class":1276},[32,2669,1378],{"class":1280},[10,2671,2672,2673,2675],{},"Open ",[29,2674,1396],{}," in your browser.",[14,2677,2679],{"id":2678},"step-7-verify-everything-works","Step 7: Verify Everything Works",[10,2681,2682],{},"Test these features:",[2283,2684,2685],{},[1115,2686,2687,2690,2693,2696,2699,2702,2705,2708],{},[1118,2688,2689],{},"Homepage loads with products",[1118,2691,2692],{},"Product images display",[1118,2694,2695],{},"Click on a product to view details",[1118,2697,2698],{},"Add product to cart",[1118,2700,2701],{},"Cart drawer opens",[1118,2703,2704],{},"Filters appear (if attributes configured)",[1118,2706,2707],{},"Search works",[1118,2709,2710],{},"No console errors (F12 to check)",[14,2712,2196],{"id":2195},[10,2714,2715,2718],{},[176,2716,2717],{},"No products showing?"," Ensure products are published in WooCommerce and the WooNuxt Settings plugin is configured.",[10,2720,2721,2724,2725,337],{},[176,2722,2723],{},"Filters not working?"," Add product attributes in WooCommerce and configure them in ",[176,2726,2727],{},"Settings > WooNuxt > Global Attributes",[10,2729,2730,2733,2734,2589],{},[176,2731,2732],{},"Images not loading?"," Add your WordPress domain to ",[29,2735,1572],{},[22,2737,2739],{"className":1576,"code":2738,"language":1578,"meta":27,"style":27},"NUXT_IMAGE_DOMAINS=yoursite.com\n",[29,2740,2741],{"__ignoreMap":27},[32,2742,2743],{"class":34,"line":35},[32,2744,2738],{},[14,2746,2748],{"id":2747},"whats-next","What's Next?",[10,2750,2751],{},"Now that you're running, customize your store:",[1403,2753,2754,2758],{},[1406,2755,2756],{"icon":1416,"title":1417,"to":1418},[10,2757,1421],{},[1406,2759,2761],{"icon":2760,"title":1432,"to":1433},"i-lucide-settings",[10,2762,1436],{},[1066,2764,2765],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .saEQR, html code.shiki .saEQR{--shiki-default:#676E95;--shiki-default-font-style:italic}html pre.shiki code .s5Dmg, html code.shiki .s5Dmg{--shiki-default:#FFCB6B}html pre.shiki code .sfyAc, html code.shiki .sfyAc{--shiki-default:#C3E88D}html pre.shiki code .sdLwU, html code.shiki .sdLwU{--shiki-default:#82AAFF}html pre.shiki code .s0W1g, html code.shiki .s0W1g{--shiki-default:#BABED8}html pre.shiki code .sAklC, html code.shiki .sAklC{--shiki-default:#89DDFF}",{"title":27,"searchDepth":46,"depth":46,"links":2767},[2768,2769,2770,2771,2772,2773,2774,2775,2776],{"id":2277,"depth":46,"text":2278},{"id":2304,"depth":46,"text":2305},{"id":2354,"depth":46,"text":2355},{"id":2417,"depth":46,"text":2418},{"id":2520,"depth":46,"text":2521},{"id":2624,"depth":46,"text":2625},{"id":2678,"depth":46,"text":2679},{"id":2195,"depth":46,"text":2196},{"id":2747,"depth":46,"text":2748},"Get your WooNuxt store up and running in minutes",{},{"icon":2232},"\u002Fgetting-started\u002Fquick-start",{"title":2269,"description":2777},"1.getting-started\u002F3.quick-start","swHE3iLj3qRGWZi4db-WhaniMQCOq9mp8DgnXcqAkJo",{"id":2785,"title":2786,"body":2787,"description":3596,"extension":1085,"links":1086,"meta":3597,"navigation":3598,"path":3600,"seo":3601,"stem":3602,"__hash__":3603},"docs\u002F1.getting-started\u002F4.customization.md","Customization & Architecture",{"type":7,"value":2788,"toc":3585},[2789,2795,2799,2802,2808,2815,2875,2881,2885,2896,2947,2950,2954,3128,3132,3135,3167,3171,3178,3253,3257,3271,3291,3295,3305,3532,3536,3543,3570,3582],[10,2790,2791,2792,2794],{},"WooNuxt uses ",[176,2793,1226],{}," to separate core functionality from your customizations. This means you can override any component, page, composable, or style without touching the base layer — and safely pull in upstream updates without losing your changes.",[14,2796,2798],{"id":2797},"how-it-works","How It Works",[10,2800,2801],{},"The project has two layers:",[22,2803,2806],{"className":2804,"code":2805,"language":1233},[1231],"woonuxt\u002F                    ← Your project (customize here)\n├── app\u002F\n│   └── types\u002F             ← Type overrides\n├── nuxt.config.ts         ← Extends woonuxt_base\n└── ...\n\nwoonuxt_base\u002F              ← Core layer (do not edit directly)\n├── app\u002F\n│   ├── components\u002F        ← All default components\n│   ├── composables\u002F       ← All composables\n│   ├── pages\u002F             ← All pages\n│   ├── queries\u002F           ← All GraphQL queries\n│   └── assets\u002Fcss\u002F        ← Base styles\n└── nuxt.config.ts         ← Core Nuxt config\n",[29,2807,2805],{"__ignoreMap":27},[10,2809,2810,2811,2814],{},"Your root ",[29,2812,2813],{},"nuxt.config.ts"," extends the base:",[22,2816,2818],{"className":24,"code":2817,"filename":2813,"language":26,"meta":27,"style":27},"export default defineNuxtConfig({\n  extends: ['.\u002Fwoonuxt_base'],\n  \u002F\u002F your overrides here\n})\n",[29,2819,2820,2838,2863,2868],{"__ignoreMap":27},[32,2821,2822,2826,2829,2832,2835],{"class":34,"line":35},[32,2823,2825],{"class":2824},"s6cf3","export",[32,2827,2828],{"class":2824}," default",[32,2830,2831],{"class":168}," defineNuxtConfig",[32,2833,2834],{"class":49},"(",[32,2836,2837],{"class":42},"{\n",[32,2839,2840,2844,2846,2849,2852,2855,2857,2860],{"class":34,"line":46},[32,2841,2843],{"class":2842},"s-wAU","  extends",[32,2845,2589],{"class":42},[32,2847,2848],{"class":49}," [",[32,2850,2851],{"class":42},"'",[32,2853,2854],{"class":1280},".\u002Fwoonuxt_base",[32,2856,2851],{"class":42},[32,2858,2859],{"class":49},"]",[32,2861,2862],{"class":42},",\n",[32,2864,2865],{"class":34,"line":60},[32,2866,2867],{"class":56},"  \u002F\u002F your overrides here\n",[32,2869,2870,2872],{"class":34,"line":71},[32,2871,162],{"class":42},[32,2873,2874],{"class":49},")\n",[10,2876,2877,2878,337],{},"Nuxt merges both layers at build time, with your root-level files taking priority over ",[29,2879,2880],{},"woonuxt_base",[14,2882,2884],{"id":2883},"overriding-components","Overriding Components",[10,2886,2887,2888,2891,2892,2895],{},"To override any component, create a file with the ",[176,2889,2890],{},"same name"," in your root ",[29,2893,2894],{},"app\u002Fcomponents\u002F"," folder:",[22,2897,2899],{"className":1262,"code":2898,"language":1264,"meta":27,"style":27},"# Example: override the default ProductCard\napp\u002F\n└── components\u002F\n    └── productElements\u002F\n        └── ProductCard.vue   ← your version wins\n",[29,2900,2901,2906,2911,2919,2927],{"__ignoreMap":27},[32,2902,2903],{"class":34,"line":35},[32,2904,2905],{"class":56},"# Example: override the default ProductCard\n",[32,2907,2908],{"class":34,"line":46},[32,2909,2910],{"class":1276},"app\u002F\n",[32,2912,2913,2916],{"class":34,"line":60},[32,2914,2915],{"class":1276},"└──",[32,2917,2918],{"class":1280}," components\u002F\n",[32,2920,2921,2924],{"class":34,"line":71},[32,2922,2923],{"class":1276},"    └──",[32,2925,2926],{"class":1280}," productElements\u002F\n",[32,2928,2929,2932,2935,2938,2941,2944],{"class":34,"line":82},[32,2930,2931],{"class":1276},"        └──",[32,2933,2934],{"class":1280}," ProductCard.vue",[32,2936,2937],{"class":1280},"   ←",[32,2939,2940],{"class":1280}," your",[32,2942,2943],{"class":1280}," version",[32,2945,2946],{"class":1280}," wins\n",[10,2948,2949],{},"You don't need to copy the original — just create a new file at the same path. The base layer version is completely replaced.",[1934,2951,2953],{"id":2952},"example-custom-herobanner","Example: Custom HeroBanner",[22,2955,2960],{"className":2956,"code":2957,"filename":2958,"language":2959,"meta":27,"style":27},"language-vue shiki shiki-themes material-theme-palenight","\u003Ctemplate>\n  \u003Csection class=\"hero bg-primary text-white py-20\">\n    \u003Ch1 class=\"text-4xl font-bold\">{{ title }}\u003C\u002Fh1>\n    \u003Cp>{{ description }}\u003C\u002Fp>\n  \u003C\u002Fsection>\n\u003C\u002Ftemplate>\n\n\u003Cscript setup lang=\"ts\">\ndefineProps\u003C{ title: string; description: string }>()\n\u003C\u002Fscript>\n","app\u002Fcomponents\u002FgeneralElements\u002FHeroBanner.vue","vue",[29,2961,2962,2973,2996,3028,3045,3054,3062,3066,3089,3120],{"__ignoreMap":27},[32,2963,2964,2967,2970],{"class":34,"line":35},[32,2965,2966],{"class":42},"\u003C",[32,2968,2969],{"class":2842},"template",[32,2971,2972],{"class":42},">\n",[32,2974,2975,2978,2981,2984,2986,2989,2992,2994],{"class":34,"line":46},[32,2976,2977],{"class":42},"  \u003C",[32,2979,2980],{"class":2842},"section",[32,2982,2983],{"class":38}," class",[32,2985,2601],{"class":42},[32,2987,2988],{"class":42},"\"",[32,2990,2991],{"class":1280},"hero bg-primary text-white py-20",[32,2993,2988],{"class":42},[32,2995,2972],{"class":42},[32,2997,2998,3001,3004,3006,3008,3010,3013,3015,3018,3021,3024,3026],{"class":34,"line":60},[32,2999,3000],{"class":42},"    \u003C",[32,3002,3003],{"class":2842},"h1",[32,3005,2983],{"class":38},[32,3007,2601],{"class":42},[32,3009,2988],{"class":42},[32,3011,3012],{"class":1280},"text-4xl font-bold",[32,3014,2988],{"class":42},[32,3016,3017],{"class":42},">",[32,3019,3020],{"class":49},"{{ title }}",[32,3022,3023],{"class":42},"\u003C\u002F",[32,3025,3003],{"class":2842},[32,3027,2972],{"class":42},[32,3029,3030,3032,3034,3036,3039,3041,3043],{"class":34,"line":71},[32,3031,3000],{"class":42},[32,3033,10],{"class":2842},[32,3035,3017],{"class":42},[32,3037,3038],{"class":49},"{{ description }}",[32,3040,3023],{"class":42},[32,3042,10],{"class":2842},[32,3044,2972],{"class":42},[32,3046,3047,3050,3052],{"class":34,"line":82},[32,3048,3049],{"class":42},"  \u003C\u002F",[32,3051,2980],{"class":2842},[32,3053,2972],{"class":42},[32,3055,3056,3058,3060],{"class":34,"line":93},[32,3057,3023],{"class":42},[32,3059,2969],{"class":2842},[32,3061,2972],{"class":42},[32,3063,3064],{"class":34,"line":104},[32,3065,1298],{"emptyLinePlaceholder":1297},[32,3067,3068,3070,3073,3076,3079,3081,3083,3085,3087],{"class":34,"line":115},[32,3069,2966],{"class":42},[32,3071,3072],{"class":2842},"script",[32,3074,3075],{"class":38}," setup",[32,3077,3078],{"class":38}," lang",[32,3080,2601],{"class":42},[32,3082,2988],{"class":42},[32,3084,26],{"class":1280},[32,3086,2988],{"class":42},[32,3088,2972],{"class":42},[32,3090,3091,3094,3097,3100,3102,3105,3108,3111,3113,3115,3118],{"class":34,"line":126},[32,3092,3093],{"class":168},"defineProps",[32,3095,3096],{"class":42},"\u003C{",[32,3098,3099],{"class":2842}," title",[32,3101,2589],{"class":42},[32,3103,3104],{"class":1276}," string",[32,3106,3107],{"class":42},";",[32,3109,3110],{"class":2842}," description",[32,3112,2589],{"class":42},[32,3114,3104],{"class":1276},[32,3116,3117],{"class":42}," }>",[32,3119,172],{"class":49},[32,3121,3122,3124,3126],{"class":34,"line":137},[32,3123,3023],{"class":42},[32,3125,3072],{"class":2842},[32,3127,2972],{"class":42},[14,3129,3131],{"id":3130},"overriding-pages","Overriding Pages",[10,3133,3134],{},"Same principle — create a page at the same path:",[22,3136,3138],{"className":1262,"code":3137,"language":1264,"meta":27,"style":27},"app\u002F\n└── pages\u002F\n    └── index.vue    ← replaces woonuxt_base\u002Fapp\u002Fpages\u002Findex.vue\n",[29,3139,3140,3144,3151],{"__ignoreMap":27},[32,3141,3142],{"class":34,"line":35},[32,3143,2910],{"class":1276},[32,3145,3146,3148],{"class":34,"line":46},[32,3147,2915],{"class":1276},[32,3149,3150],{"class":1280}," pages\u002F\n",[32,3152,3153,3155,3158,3161,3164],{"class":34,"line":60},[32,3154,2923],{"class":1276},[32,3156,3157],{"class":1280}," index.vue",[32,3159,3160],{"class":1280},"    ←",[32,3162,3163],{"class":1280}," replaces",[32,3165,3166],{"class":1280}," woonuxt_base\u002Fapp\u002Fpages\u002Findex.vue\n",[14,3168,3170],{"id":3169},"overriding-styles","Overriding Styles",[10,3172,3173,3174,3177],{},"Add custom CSS in ",[29,3175,3176],{},"app\u002Fassets\u002Fcss\u002Fmain.css",". Tailwind CSS 4 is configured via PostCSS — extend the theme in your CSS directly:",[22,3179,3183],{"className":3180,"code":3181,"filename":3176,"language":3182,"meta":27,"style":27},"language-css shiki shiki-themes material-theme-palenight","@import \"tailwindcss\";\n\n\u002F* Extend or override Tailwind theme *\u002F\n@theme {\n  --color-primary: v-bind(primaryColor);\n}\n\n\u002F* Your custom styles *\u002F\n.my-custom-class {\n  \u002F* ... *\u002F\n}\n","css",[29,3184,3185,3201,3205,3210,3217,3222,3226,3230,3235,3244,3249],{"__ignoreMap":27},[32,3186,3187,3190,3193,3196,3198],{"class":34,"line":35},[32,3188,3189],{"class":2824},"@import",[32,3191,3192],{"class":42}," \"",[32,3194,3195],{"class":1280},"tailwindcss",[32,3197,2988],{"class":42},[32,3199,3200],{"class":42},";\n",[32,3202,3203],{"class":34,"line":46},[32,3204,1298],{"emptyLinePlaceholder":1297},[32,3206,3207],{"class":34,"line":60},[32,3208,3209],{"class":56},"\u002F* Extend or override Tailwind theme *\u002F\n",[32,3211,3212,3215],{"class":34,"line":71},[32,3213,3214],{"class":2824},"@theme",[32,3216,43],{"class":42},[32,3218,3219],{"class":34,"line":82},[32,3220,3221],{"class":49},"  --color-primary: v-bind(primaryColor);\n",[32,3223,3224],{"class":34,"line":93},[32,3225,2512],{"class":42},[32,3227,3228],{"class":34,"line":104},[32,3229,1298],{"emptyLinePlaceholder":1297},[32,3231,3232],{"class":34,"line":115},[32,3233,3234],{"class":56},"\u002F* Your custom styles *\u002F\n",[32,3236,3237,3239,3242],{"class":34,"line":126},[32,3238,337],{"class":42},[32,3240,3241],{"class":1276},"my-custom-class",[32,3243,43],{"class":42},[32,3245,3246],{"class":34,"line":137},[32,3247,3248],{"class":56},"  \u002F* ... *\u002F\n",[32,3250,3251],{"class":34,"line":148},[32,3252,2512],{"class":42},[14,3254,3256],{"id":3255},"adding-custom-graphql-queries","Adding Custom GraphQL Queries",[10,3258,3259,3260,3263,3264,3267,3268,2589],{},"Place ",[29,3261,3262],{},".gql"," files in ",[29,3265,3266],{},"app\u002Fqueries\u002F",". These are picked up automatically by ",[29,3269,3270],{},"nuxt-graphql-client",[22,3272,3275],{"className":2434,"code":3273,"filename":3274,"language":2436,"meta":27,"style":27},"query GetMyCustomData {\n  # your query\n}\n","app\u002Fqueries\u002FgetMyCustomData.gql",[29,3276,3277,3282,3287],{"__ignoreMap":27},[32,3278,3279],{"class":34,"line":35},[32,3280,3281],{},"query GetMyCustomData {\n",[32,3283,3284],{"class":34,"line":46},[32,3285,3286],{},"  # your query\n",[32,3288,3289],{"class":34,"line":60},[32,3290,2512],{},[14,3292,3294],{"id":3293},"modifying-nuxtconfigts","Modifying nuxt.config.ts",[10,3296,3297,3298,3300,3301,3304],{},"Add modules, routes, or runtime config in the root ",[29,3299,2813],{},". It is ",[176,3302,3303],{},"merged"," with the base config, not replaced:",[22,3306,3308],{"className":24,"code":3307,"filename":2813,"language":26,"meta":27,"style":27},"export default defineNuxtConfig({\n  extends: ['.\u002Fwoonuxt_base'],\n\n  \u002F\u002F Add extra modules\n  modules: ['@nuxtjs\u002Fgoogle-fonts'],\n\n  \u002F\u002F Override runtime config\n  runtimeConfig: {\n    public: {\n      PRODUCTS_PER_PAGE: 12,\n    },\n  },\n\n  \u002F\u002F Add custom routes\n  hooks: {\n    'pages:extend'(pages) {\n      pages.push({ name: 'custom', path: '\u002Fcustom', file: '~\u002Fapp\u002Fpages\u002Fcustom.vue' })\n    },\n  },\n})\n",[29,3309,3310,3322,3340,3344,3349,3369,3373,3378,3387,3396,3409,3414,3419,3423,3428,3437,3457,3518,3522,3526],{"__ignoreMap":27},[32,3311,3312,3314,3316,3318,3320],{"class":34,"line":35},[32,3313,2825],{"class":2824},[32,3315,2828],{"class":2824},[32,3317,2831],{"class":168},[32,3319,2834],{"class":49},[32,3321,2837],{"class":42},[32,3323,3324,3326,3328,3330,3332,3334,3336,3338],{"class":34,"line":46},[32,3325,2843],{"class":2842},[32,3327,2589],{"class":42},[32,3329,2848],{"class":49},[32,3331,2851],{"class":42},[32,3333,2854],{"class":1280},[32,3335,2851],{"class":42},[32,3337,2859],{"class":49},[32,3339,2862],{"class":42},[32,3341,3342],{"class":34,"line":60},[32,3343,1298],{"emptyLinePlaceholder":1297},[32,3345,3346],{"class":34,"line":71},[32,3347,3348],{"class":56},"  \u002F\u002F Add extra modules\n",[32,3350,3351,3354,3356,3358,3360,3363,3365,3367],{"class":34,"line":82},[32,3352,3353],{"class":2842},"  modules",[32,3355,2589],{"class":42},[32,3357,2848],{"class":49},[32,3359,2851],{"class":42},[32,3361,3362],{"class":1280},"@nuxtjs\u002Fgoogle-fonts",[32,3364,2851],{"class":42},[32,3366,2859],{"class":49},[32,3368,2862],{"class":42},[32,3370,3371],{"class":34,"line":93},[32,3372,1298],{"emptyLinePlaceholder":1297},[32,3374,3375],{"class":34,"line":104},[32,3376,3377],{"class":56},"  \u002F\u002F Override runtime config\n",[32,3379,3380,3383,3385],{"class":34,"line":115},[32,3381,3382],{"class":2842},"  runtimeConfig",[32,3384,2589],{"class":42},[32,3386,43],{"class":42},[32,3388,3389,3392,3394],{"class":34,"line":126},[32,3390,3391],{"class":2842},"    public",[32,3393,2589],{"class":42},[32,3395,43],{"class":42},[32,3397,3398,3401,3403,3407],{"class":34,"line":137},[32,3399,3400],{"class":2842},"      PRODUCTS_PER_PAGE",[32,3402,2589],{"class":42},[32,3404,3406],{"class":3405},"sx098"," 12",[32,3408,2862],{"class":42},[32,3410,3411],{"class":34,"line":148},[32,3412,3413],{"class":42},"    },\n",[32,3415,3416],{"class":34,"line":159},[32,3417,3418],{"class":42},"  },\n",[32,3420,3421],{"class":34,"line":321},[32,3422,1298],{"emptyLinePlaceholder":1297},[32,3424,3425],{"class":34,"line":1353},[32,3426,3427],{"class":56},"  \u002F\u002F Add custom routes\n",[32,3429,3430,3433,3435],{"class":34,"line":1359},[32,3431,3432],{"class":2842},"  hooks",[32,3434,2589],{"class":42},[32,3436,43],{"class":42},[32,3438,3439,3442,3445,3447,3449,3453,3455],{"class":34,"line":1364},[32,3440,3441],{"class":42},"    '",[32,3443,3444],{"class":1280},"pages:extend",[32,3446,2851],{"class":42},[32,3448,2834],{"class":42},[32,3450,3452],{"class":3451},"s7ZW3","pages",[32,3454,1770],{"class":42},[32,3456,43],{"class":42},[32,3458,3459,3462,3464,3467,3469,3472,3475,3477,3480,3483,3485,3487,3490,3492,3494,3497,3499,3501,3504,3506,3508,3511,3513,3516],{"class":34,"line":1370},[32,3460,3461],{"class":49},"      pages",[32,3463,337],{"class":42},[32,3465,3466],{"class":168},"push",[32,3468,2834],{"class":2842},[32,3470,3471],{"class":42},"{",[32,3473,3474],{"class":2842}," name",[32,3476,2589],{"class":42},[32,3478,3479],{"class":42}," '",[32,3481,3482],{"class":1280},"custom",[32,3484,2851],{"class":42},[32,3486,53],{"class":42},[32,3488,3489],{"class":2842}," path",[32,3491,2589],{"class":42},[32,3493,3479],{"class":42},[32,3495,3496],{"class":1280},"\u002Fcustom",[32,3498,2851],{"class":42},[32,3500,53],{"class":42},[32,3502,3503],{"class":2842}," file",[32,3505,2589],{"class":42},[32,3507,3479],{"class":42},[32,3509,3510],{"class":1280},"~\u002Fapp\u002Fpages\u002Fcustom.vue",[32,3512,2851],{"class":42},[32,3514,3515],{"class":42}," }",[32,3517,2874],{"class":2842},[32,3519,3520],{"class":34,"line":1381},[32,3521,3413],{"class":42},[32,3523,3524],{"class":34,"line":1387},[32,3525,3418],{"class":42},[32,3527,3528,3530],{"class":34,"line":1673},[32,3529,162],{"class":42},[32,3531,2874],{"class":49},[14,3533,3535],{"id":3534},"what-should-not-be-edited","What Should NOT Be Edited",[10,3537,3538,3539,3542],{},"Avoid editing files inside ",[29,3540,3541],{},"woonuxt_base\u002F"," directly. Changes there will be lost when you pull upstream updates. If you need to change base behavior:",[1115,3544,3545,3554,3562],{},[1118,3546,3547,3550,3551,3553],{},[176,3548,3549],{},"Components"," → copy to ",[29,3552,2894],{}," with the same path",[1118,3555,3556,3550,3558,3561],{},[176,3557,5],{},[29,3559,3560],{},"app\u002Fcomposables\u002F"," and adjust imports",[1118,3563,3564,3567,3568],{},[176,3565,3566],{},"Config"," → override in root ",[29,3569,2813],{},[1850,3571,3572],{},[10,3573,3574,3575,3577,3578,3581],{},"Keep ",[29,3576,3541],{}," as a clean git submodule or subtree so you can ",[29,3579,3580],{},"git pull"," upstream changes without conflicts.",[1066,3583,3584],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .s6cf3, html code.shiki .s6cf3{--shiki-default:#89DDFF;--shiki-default-font-style:italic}html pre.shiki code .sdLwU, html code.shiki .sdLwU{--shiki-default:#82AAFF}html pre.shiki code .s0W1g, html code.shiki .s0W1g{--shiki-default:#BABED8}html pre.shiki code .sAklC, html code.shiki .sAklC{--shiki-default:#89DDFF}html pre.shiki code .s-wAU, html code.shiki .s-wAU{--shiki-default:#F07178}html pre.shiki code .sfyAc, html code.shiki .sfyAc{--shiki-default:#C3E88D}html pre.shiki code .saEQR, html code.shiki .saEQR{--shiki-default:#676E95;--shiki-default-font-style:italic}html pre.shiki code .s5Dmg, html code.shiki .s5Dmg{--shiki-default:#FFCB6B}html pre.shiki code .sJ14y, html code.shiki .sJ14y{--shiki-default:#C792EA}html pre.shiki code .sx098, html code.shiki .sx098{--shiki-default:#F78C6C}html pre.shiki code .s7ZW3, html code.shiki .s7ZW3{--shiki-default:#BABED8;--shiki-default-font-style:italic}",{"title":27,"searchDepth":46,"depth":46,"links":3586},[3587,3588,3591,3592,3593,3594,3595],{"id":2797,"depth":46,"text":2798},{"id":2883,"depth":46,"text":2884,"children":3589},[3590],{"id":2952,"depth":60,"text":2953},{"id":3130,"depth":46,"text":3131},{"id":3169,"depth":46,"text":3170},{"id":3255,"depth":46,"text":3256},{"id":3293,"depth":46,"text":3294},{"id":3534,"depth":46,"text":3535},"How to customize WooNuxt using Nuxt Layers without modifying core files",{},{"icon":3599},"i-lucide-layers","\u002Fgetting-started\u002Fcustomization",{"title":2786,"description":3596},"1.getting-started\u002F4.customization","UXX0ykM4xIERhxoKzxQRR19xaD6Knxzf4UtV0eAncfU",{"id":3605,"title":1417,"body":3606,"description":3781,"extension":1085,"links":1086,"meta":3782,"navigation":3783,"path":3784,"seo":3785,"stem":3786,"__hash__":3787},"docs\u002F2.wordpress-setup\u002F1.index.md",{"type":7,"value":3607,"toc":3773},[3608,3611,3615,3618,3622,3657,3661,3664,3682,3686,3689,3721,3725,3763,3766],[10,3609,3610],{},"This section covers everything you need to configure on the WordPress side for WooNuxt to work properly.",[14,3612,3614],{"id":3613},"overview","Overview",[10,3616,3617],{},"WooNuxt requires a properly configured WordPress installation with WooCommerce and several plugins to function as a headless eCommerce backend.",[14,3619,3621],{"id":3620},"required-components","Required Components",[1115,3623,3624,3630,3636,3641,3646,3651],{},[1118,3625,3626,3629],{},[176,3627,3628],{},"WordPress 6.9.4+"," - Core WordPress installation with proper permalinks",[1118,3631,3632,3635],{},[176,3633,3634],{},"WooCommerce 10.7.0+"," - Fully configured with products, shipping, and payments",[1118,3637,3638,3640],{},[176,3639,1816],{}," - Essential plugin that configures everything for you",[1118,3642,3643,3645],{},[176,3644,1824],{}," - Exposes WordPress data via GraphQL (auto-installed)",[1118,3647,3648,3650],{},[176,3649,1830],{}," - Adds WooCommerce support to WPGraphQL (auto-installed)",[1118,3652,3653,3656],{},[176,3654,3655],{},"Headless Login 0.4.4+"," - Enables customer authentication (auto-installed)",[14,3658,3660],{"id":3659},"setup-process","Setup Process",[10,3662,3663],{},"Follow these guides in order:",[2159,3665,3666,3675],{},[1118,3667,3668,3674],{},[176,3669,3670],{},[1843,3671,3673],{"href":3672},"\u002Fdocs\u002Fwordpress-setup\u002Fconfiguration","Initial Configuration"," - Set up WordPress basics and permalinks",[1118,3676,3677,3681],{},[176,3678,3679],{},[1843,3680,1432],{"href":1433}," - Install and configure WooNuxt Settings plugin (version 2.5.9+)",[14,3683,3685],{"id":3684},"quick-checklist","Quick Checklist",[10,3687,3688],{},"Before proceeding to frontend setup, ensure:",[2283,3690,3691],{},[1115,3692,3693,3695,3697,3700,3703,3706,3709,3712,3715,3718],{},[1118,3694,2298],{},[1118,3696,2292],{},[1118,3698,3699],{},"Product attributes created and assigned",[1118,3701,3702],{},"Shipping zones configured",[1118,3704,3705],{},"Payment method enabled",[1118,3707,3708],{},"WooNuxt Settings plugin installed",[1118,3710,3711],{},"Required plugins auto-installed",[1118,3713,3714],{},"Global attributes configured",[1118,3716,3717],{},"GraphQL endpoint accessible",[1118,3719,3720],{},"Test queries work in GraphiQL IDE",[14,3722,3724],{"id":3723},"why-this-setup-works","Why This Setup Works",[1115,3726,3727,3733,3739,3745,3751,3757],{},[1118,3728,3729,3732],{},[176,3730,3731],{},"⚡ Fast Performance",": Static generation and optimized delivery",[1118,3734,3735,3738],{},[176,3736,3737],{},"🎨 Design Freedom",": Complete control over frontend appearance",[1118,3740,3741,3744],{},[176,3742,3743],{},"🔒 Secure",": WordPress admin hidden from public",[1118,3746,3747,3750],{},[176,3748,3749],{},"📈 Scalable",": Frontend can be deployed on CDN",[1118,3752,3753,3756],{},[176,3754,3755],{},"🔧 Maintainable",": Updates to WordPress don't break frontend",[1118,3758,3759,3762],{},[176,3760,3761],{},"🌍 Multi-Platform",": Same backend can power web, mobile, etc.",[14,3764,3765],{"id":2747},"What's Next",[1403,3767,3768],{},[1406,3769,3770],{"icon":2760,"title":3673,"to":3672},[10,3771,3772],{},"Set up WordPress permalinks and basic settings",{"title":27,"searchDepth":46,"depth":46,"links":3774},[3775,3776,3777,3778,3779,3780],{"id":3613,"depth":46,"text":3614},{"id":3620,"depth":46,"text":3621},{"id":3659,"depth":46,"text":3660},{"id":3684,"depth":46,"text":3685},{"id":3723,"depth":46,"text":3724},{"id":2747,"depth":46,"text":3765},"Configure WordPress and WooCommerce for WooNuxt",{},{"icon":1416},"\u002Fwordpress-setup",{"title":1417,"description":3781},"2.wordpress-setup\u002F1.index","MyLkmfCUKDqfuk_7U9y8sgUUsawYrQWDAY3jYuxTPxA",{"id":3789,"title":3673,"body":3790,"description":3899,"extension":1085,"links":1086,"meta":3900,"navigation":3901,"path":3902,"seo":3903,"stem":3904,"__hash__":3905},"docs\u002F2.wordpress-setup\u002F2.configuration.md",{"type":7,"value":3791,"toc":3894},[3792,3795,3799,3809,3829,3843,3847,3850,3876,3879,3881,3884],[10,3793,3794],{},"WooNuxt requires specific WordPress configuration to enable the GraphQL endpoint. This should only take a few minutes.",[14,3796,3798],{"id":3797},"configure-permalinks","Configure Permalinks",[3800,3801,3802],"warning",{},[10,3803,3804,3805,3808],{},"WPGraphQL requires pretty permalinks. Without this, your GraphQL endpoint at ",[29,3806,3807],{},"\u002Fgraphql"," won't be accessible.",[2159,3810,3811,3817,3824],{},[1118,3812,2330,3813,3816],{},[176,3814,3815],{},"Settings > Permalinks"," in WordPress admin",[1118,3818,3819,3820,3823],{},"Select ",[176,3821,3822],{},"Post name"," structure",[1118,3825,2401,3826],{},[176,3827,3828],{},"Save Changes",[10,3830,3831,3832,3835,3836,3839,3840,3842],{},"This changes URLs from ",[29,3833,3834],{},"?p=123"," to ",[29,3837,3838],{},"\u002Fsample-post\u002F"," and enables the ",[29,3841,3807],{}," endpoint.",[14,3844,3846],{"id":3845},"verify-requirements","Verify Requirements",[10,3848,3849],{},"Ensure you have:",[1115,3851,3852,3861,3870],{},[1118,3853,3854,3857,3858],{},[176,3855,3856],{},"WordPress 6.8.3+"," - Check ",[176,3859,3860],{},"Dashboard > Updates",[1118,3862,3863,3857,3866,3869],{},[176,3864,3865],{},"WooCommerce 10.3.5+",[176,3867,3868],{},"Plugins"," page",[1118,3871,3872,3875],{},[176,3873,3874],{},"At least one published product"," - For testing the connection",[10,3877,3878],{},"That's it for WordPress configuration! The rest is handled by the WooNuxt Settings plugin.",[14,3880,3765],{"id":2747},[10,3882,3883],{},"Now install the required plugins:",[1403,3885,3886],{},[1406,3887,3889],{"icon":2238,"title":3888},"Install Plugins",[10,3890,3891],{},[1843,3892,3893],{"href":1433},"Continue to Plugin Installation →",{"title":27,"searchDepth":46,"depth":46,"links":3895},[3896,3897,3898],{"id":3797,"depth":46,"text":3798},{"id":3845,"depth":46,"text":3846},{"id":2747,"depth":46,"text":3765},"Configure WordPress basics for WooNuxt",{},{"icon":2760},"\u002Fwordpress-setup\u002Fconfiguration",{"title":3673,"description":3899},"2.wordpress-setup\u002F2.configuration","_MNEHn4oByp3HtbGJ0VT0DNKQYNNHwDAMWhH4sEvD3c",{"id":3907,"title":1432,"body":3908,"description":5174,"extension":1085,"links":1086,"meta":5175,"navigation":5176,"path":5177,"seo":5178,"stem":5179,"__hash__":5180},"docs\u002F2.wordpress-setup\u002F3.plugins.md",{"type":7,"value":3909,"toc":5142},[3910,3913,3964,3968,3972,4006,4010,4013,4022,4026,4029,4071,4075,4078,4207,4211,4217,4240,4246,4250,4253,4257,4343,4346,4349,4384,4391,4395,4398,4418,4422,4425,4460,4464,4471,4596,4600,4603,4624,4626,4642,4654,4658,4661,4665,4671,4676,4680,4683,4689,4694,4712,4717,4731,4734,4737,4743,4766,4771,4785,4788,4791,4797,4802,4813,4816,4819,4822,4828,4833,4847,4853,4856,4859,4865,4870,4884,4889,4903,4910,4913,4916,4921,4924,4929,4960,4969,4972,4975,4980,5005,5008,5011,5014,5027,5032,5035,5038,5124,5126,5129,5139],[10,3911,3912],{},"The WooNuxt Settings plugin is the cornerstone of your WooNuxt setup. It automatically installs dependencies and provides a central configuration hub for your headless WooCommerce store.",[3914,3915,3924,3925],"div",{"className":3916},[3917,3918,3919,3920,3921,3922,3923],"flex","items-center","justify-center","gap-4","mb-8","md:justify-start","not-prose","\n  ",[1843,3926,3939,3940,3939,3956,3924],{"href":1845,"download":1297,"className":3927},[3917,3918,3928,3929,3930,3931,3932,3933,3934,3935,3936,3937,3938],"gap-6","p-4","transition-shadow","duration-200","ease-in-out","bg-white","border","border-gray-300","border-dashed","rounded-lg","hover:shadow-md","\n    ",[3914,3941,3945,3946,3945,3951,3939],{"className":3942},[3917,3943,3944],"flex-col","flex-1","\n      ",[32,3947,3950],{"className":3948},[3949],"font-semibold","WooNuxt setup plugin",[32,3952,3955],{"className":3953},[3954],"text-xs","woonuxt-settings.zip",[3957,3958],"img",{"className":3959,"width":3961,"height":3961,"src":3962,"alt":3963},[3960],"mr-2",36,"\u002Flogo.svg","Logo",[14,3965,3967],{"id":3966},"installation-steps","Installation Steps",[1934,3969,3971],{"id":3970},"upload-to-wordpress","Upload to WordPress",[2159,3973,3974,3980,3987,3995,4000],{},[1118,3975,3976,3977],{},"In WordPress admin, navigate to ",[176,3978,3979],{},"Plugins > Add New",[1118,3981,3982,3983,3986],{},"Click the ",[176,3984,3985],{},"Upload Plugin"," button at the top",[1118,3988,2401,3989,3992,3993],{},[176,3990,3991],{},"Choose File"," and select ",[29,3994,3955],{},[1118,3996,2401,3997],{},[176,3998,3999],{},"Install Now",[1118,4001,2401,4002,4005],{},[176,4003,4004],{},"Activate"," once installation completes",[1934,4007,4009],{"id":4008},"access-settings","Access Settings",[10,4011,4012],{},"After activation, find the settings page:",[1115,4014,4015,4019],{},[1118,4016,2330,4017,3816],{},[176,4018,2333],{},[1118,4020,4021],{},"You'll see a comprehensive dashboard with multiple sections",[14,4023,4025],{"id":4024},"what-the-plugin-does","What the Plugin Does",[10,4027,4028],{},"The WooNuxt Settings plugin handles the heavy lifting of WordPress configuration for your headless WooCommerce store.",[1403,4030,4031,4037,4044,4051,4058,4065],{},[1406,4032,4034],{"icon":1408,"title":4033},"Auto-Install Dependencies",[10,4035,4036],{},"Automatically downloads and activates WPGraphQL, WooGraphQL, and Headless Login plugins",[1406,4038,4041],{"icon":4039,"title":4040},"i-lucide-settings-2","GraphQL Configuration",[10,4042,4043],{},"Exposes all WooCommerce and WooNuxt settings via GraphQL API",[1406,4045,4048],{"icon":4046,"title":4047},"i-lucide-credit-card","Payment Integration",[10,4049,4050],{},"Handles Stripe payment intent creation and exposes payment settings",[1406,4052,4055],{"icon":4053,"title":4054},"i-lucide-filter","Product Filtering",[10,4056,4057],{},"Manages global product attributes for advanced filtering capabilities",[1406,4059,4062],{"icon":4060,"title":4061},"i-lucide-palette","Brand Customization",[10,4063,4064],{},"Configure logo, primary colors, and visual branding",[1406,4066,4068],{"icon":2232,"title":4067},"Deployment Hooks",[10,4069,4070],{},"Trigger Netlify\u002FVercel builds directly from WordPress",[14,4072,4074],{"id":4073},"required-dependencies","Required Dependencies",[10,4076,4077],{},"The plugin will automatically install these dependencies for you:",[4079,4080,4081,4127,4167],"code-group",{},[22,4082,4086],{"className":4083,"code":4084,"filename":1824,"language":4085,"meta":27,"style":27},"language-yaml shiki shiki-themes material-theme-palenight","Name: WPGraphQL\nPurpose: GraphQL API for WordPress\nDescription: Provides GraphQL endpoint at \u002Fgraphql\nAuto-installed: ✅ Yes\n","yaml",[29,4087,4088,4098,4108,4117],{"__ignoreMap":27},[32,4089,4090,4093,4095],{"class":34,"line":35},[32,4091,4092],{"class":2842},"Name",[32,4094,2589],{"class":42},[32,4096,4097],{"class":1280}," WPGraphQL\n",[32,4099,4100,4103,4105],{"class":34,"line":46},[32,4101,4102],{"class":2842},"Purpose",[32,4104,2589],{"class":42},[32,4106,4107],{"class":1280}," GraphQL API for WordPress\n",[32,4109,4110,4112,4114],{"class":34,"line":60},[32,4111,1712],{"class":2842},[32,4113,2589],{"class":42},[32,4115,4116],{"class":1280}," Provides GraphQL endpoint at \u002Fgraphql\n",[32,4118,4119,4122,4124],{"class":34,"line":71},[32,4120,4121],{"class":2842},"Auto-installed",[32,4123,2589],{"class":42},[32,4125,4126],{"class":1280}," ✅ Yes\n",[22,4128,4130],{"className":4083,"code":4129,"filename":1830,"language":4085,"meta":27,"style":27},"Name: WPGraphQL WooCommerce (WooGraphQL)\nPurpose: WooCommerce GraphQL integration\nDescription: Exposes WooCommerce data via GraphQL\nAuto-installed: ✅ Yes\n",[29,4131,4132,4141,4150,4159],{"__ignoreMap":27},[32,4133,4134,4136,4138],{"class":34,"line":35},[32,4135,4092],{"class":2842},[32,4137,2589],{"class":42},[32,4139,4140],{"class":1280}," WPGraphQL WooCommerce (WooGraphQL)\n",[32,4142,4143,4145,4147],{"class":34,"line":46},[32,4144,4102],{"class":2842},[32,4146,2589],{"class":42},[32,4148,4149],{"class":1280}," WooCommerce GraphQL integration\n",[32,4151,4152,4154,4156],{"class":34,"line":60},[32,4153,1712],{"class":2842},[32,4155,2589],{"class":42},[32,4157,4158],{"class":1280}," Exposes WooCommerce data via GraphQL\n",[32,4160,4161,4163,4165],{"class":34,"line":71},[32,4162,4121],{"class":2842},[32,4164,2589],{"class":42},[32,4166,4126],{"class":1280},[22,4168,4170],{"className":4083,"code":4169,"filename":3655,"language":4085,"meta":27,"style":27},"Name: WPGraphQL Headless Login\nPurpose: Headless authentication\nDescription: Enables login\u002Flogout via GraphQL mutations\nAuto-installed: ✅ Yes\n",[29,4171,4172,4181,4190,4199],{"__ignoreMap":27},[32,4173,4174,4176,4178],{"class":34,"line":35},[32,4175,4092],{"class":2842},[32,4177,2589],{"class":42},[32,4179,4180],{"class":1280}," WPGraphQL Headless Login\n",[32,4182,4183,4185,4187],{"class":34,"line":46},[32,4184,4102],{"class":2842},[32,4186,2589],{"class":42},[32,4188,4189],{"class":1280}," Headless authentication\n",[32,4191,4192,4194,4196],{"class":34,"line":60},[32,4193,1712],{"class":2842},[32,4195,2589],{"class":42},[32,4197,4198],{"class":1280}," Enables login\u002Flogout via GraphQL mutations\n",[32,4200,4201,4203,4205],{"class":34,"line":71},[32,4202,4121],{"class":2842},[32,4204,2589],{"class":42},[32,4206,4126],{"class":1280},[1934,4208,4210],{"id":4209},"auto-installation-process","Auto-Installation Process",[10,4212,4213,4214,4216],{},"When you visit ",[176,4215,2333],{}," for the first time:",[2159,4218,4219,4222,4229,4234,4237],{},[1118,4220,4221],{},"The plugin checks for required dependencies",[1118,4223,4224,4225,4228],{},"Shows ",[176,4226,4227],{},"\"Required Plugins\""," section with install buttons",[1118,4230,2401,4231,4233],{},[176,4232,3999],{}," for each plugin",[1118,4235,4236],{},"Plugins are downloaded, installed, and activated automatically",[1118,4238,4239],{},"Once all plugins are installed, the section changes to deployment options",[4241,4242,4243],"note",{},[10,4244,4245],{},"The plugin uses secure AJAX requests with nonce verification to handle installations. Each plugin status is checked in real-time via jQuery.",[14,4247,4249],{"id":4248},"plugin-settings-overview","Plugin Settings Overview",[10,4251,4252],{},"Once installed, the WooNuxt Settings plugin provides these configuration options:",[1934,4254,4256],{"id":4255},"global-settings","Global Settings",[1695,4258,4259,4271],{},[1698,4260,4261],{},[1701,4262,4263,4266,4268],{},[1704,4264,4265],{},"Setting",[1704,4267,1712],{},[1704,4269,4270],{},"GraphQL Field",[1714,4272,4273,4287,4302,4316,4330],{},[1701,4274,4275,4279,4282],{},[1719,4276,4277],{},[176,4278,3963],{},[1719,4280,4281],{},"Your site logo URL",[1719,4283,4284],{},[29,4285,4286],{},"logo",[1701,4288,4289,4294,4297],{},[1719,4290,4291],{},[176,4292,4293],{},"Frontend URL",[1719,4295,4296],{},"Your Nuxt site URL (not WordPress)",[1719,4298,4299],{},[29,4300,4301],{},"frontEndUrl",[1701,4303,4304,4308,4311],{},[1719,4305,4306],{},[176,4307,2389],{},[1719,4309,4310],{},"Pagination limit (default: 24)",[1719,4312,4313],{},[29,4314,4315],{},"productsPerPage",[1701,4317,4318,4322,4325],{},[1719,4319,4320],{},[176,4321,2374],{},[1719,4323,4324],{},"Brand color in hex format",[1719,4326,4327],{},[29,4328,4329],{},"primary_color",[1701,4331,4332,4337,4340],{},[1719,4333,4334],{},[176,4335,4336],{},"Build Hook",[1719,4338,4339],{},"Netlify\u002FVercel deployment webhook",[1719,4341,4342],{},"-",[1934,4344,2395],{"id":4345},"global-attributes",[10,4347,4348],{},"Configure product attributes for filtering:",[1115,4350,4351,4357,4366,4372,4378],{},[1118,4352,4353,4356],{},[176,4354,4355],{},"Custom Label"," - Display name for the filter",[1118,4358,4359,4362,4363,1770],{},[176,4360,4361],{},"Attribute"," - WooCommerce attribute taxonomy (e.g., ",[29,4364,4365],{},"pa_color",[1118,4367,4368,4371],{},[176,4369,4370],{},"Show Count"," - Display product count per term",[1118,4373,4374,4377],{},[176,4375,4376],{},"Hide Empty"," - Hide attributes with no products",[1118,4379,4380,4383],{},[176,4381,4382],{},"Open By Default"," - Expand filter by default",[10,4385,4386,4387,4390],{},"These settings are exposed via GraphQL as ",[29,4388,4389],{},"global_attributes"," array.",[1934,4392,4394],{"id":4393},"seo-settings","SEO Settings",[10,4396,4397],{},"Add social media handles:",[1115,4399,4400,4406,4412],{},[1118,4401,4402,4405],{},[176,4403,4404],{},"Provider"," - Social platform (Facebook, Twitter, Instagram, etc.)",[1118,4407,4408,4411],{},[176,4409,4410],{},"Handle"," - Your username\u002Fhandle",[1118,4413,4414,4417],{},[176,4415,4416],{},"URL"," - Full profile URL",[1934,4419,4421],{"id":4420},"stripe-configuration","Stripe Configuration",[10,4423,4424],{},"Stripe settings are automatically exposed via GraphQL:",[1115,4426,4427,4433],{},[1118,4428,4429,4430],{},"Reads from ",[176,4431,4432],{},"WooCommerce > Settings > Payments > Stripe",[1118,4434,4435,4436,4439,4440],{},"Exposes ",[29,4437,4438],{},"stripeSettings"," with:\n",[1115,4441,4442,4448,4454],{},[1118,4443,4444,4447],{},[29,4445,4446],{},"enabled"," - Whether Stripe is active",[1118,4449,4450,4453],{},[29,4451,4452],{},"testmode"," - Test or live mode",[1118,4455,4456,4459],{},[29,4457,4458],{},"publishable_key"," - Public key based on environment",[14,4461,4463],{"id":4462},"graphql-schema","GraphQL Schema",[10,4465,4466,4467,4470],{},"After installation, the plugin adds ",[29,4468,4469],{},"woonuxtSettings"," to your GraphQL schema:",[22,4472,4474],{"className":2434,"code":4473,"language":2436,"meta":27,"style":27},"query getWooNuxtSettings {\n  woonuxtSettings {\n    primary_color\n    logo\n    publicIntrospectionEnabled\n    frontEndUrl\n    domain\n    maxPrice\n    productsPerPage\n    wooCommerceSettingsVersion\n    global_attributes {\n      slug\n      showCount\n      openByDefault\n      label\n      hideEmpty\n    }\n    stripeSettings {\n      enabled\n      testmode\n      test_publishable_key\n      publishable_key\n    }\n  }\n}\n",[29,4475,4476,4481,4485,4489,4493,4498,4503,4508,4513,4518,4523,4528,4533,4538,4543,4548,4553,4557,4562,4567,4572,4577,4582,4586,4591],{"__ignoreMap":27},[32,4477,4478],{"class":34,"line":35},[32,4479,4480],{},"query getWooNuxtSettings {\n",[32,4482,4483],{"class":34,"line":46},[32,4484,2493],{},[32,4486,4487],{"class":34,"line":60},[32,4488,2498],{},[32,4490,4491],{"class":34,"line":71},[32,4492,2503],{},[32,4494,4495],{"class":34,"line":82},[32,4496,4497],{},"    publicIntrospectionEnabled\n",[32,4499,4500],{"class":34,"line":93},[32,4501,4502],{},"    frontEndUrl\n",[32,4504,4505],{"class":34,"line":104},[32,4506,4507],{},"    domain\n",[32,4509,4510],{"class":34,"line":115},[32,4511,4512],{},"    maxPrice\n",[32,4514,4515],{"class":34,"line":126},[32,4516,4517],{},"    productsPerPage\n",[32,4519,4520],{"class":34,"line":137},[32,4521,4522],{},"    wooCommerceSettingsVersion\n",[32,4524,4525],{"class":34,"line":148},[32,4526,4527],{},"    global_attributes {\n",[32,4529,4530],{"class":34,"line":159},[32,4531,4532],{},"      slug\n",[32,4534,4535],{"class":34,"line":321},[32,4536,4537],{},"      showCount\n",[32,4539,4540],{"class":34,"line":1353},[32,4541,4542],{},"      openByDefault\n",[32,4544,4545],{"class":34,"line":1359},[32,4546,4547],{},"      label\n",[32,4549,4550],{"class":34,"line":1364},[32,4551,4552],{},"      hideEmpty\n",[32,4554,4555],{"class":34,"line":1370},[32,4556,2483],{},[32,4558,4559],{"class":34,"line":1381},[32,4560,4561],{},"    stripeSettings {\n",[32,4563,4564],{"class":34,"line":1387},[32,4565,4566],{},"      enabled\n",[32,4568,4569],{"class":34,"line":1673},[32,4570,4571],{},"      testmode\n",[32,4573,4574],{"class":34,"line":1679},[32,4575,4576],{},"      test_publishable_key\n",[32,4578,4579],{"class":34,"line":1684},[32,4580,4581],{},"      publishable_key\n",[32,4583,4584],{"class":34,"line":1690},[32,4585,2483],{},[32,4587,4589],{"class":34,"line":4588},24,[32,4590,2488],{},[32,4592,4594],{"class":34,"line":4593},25,[32,4595,2512],{},[14,4597,4599],{"id":4598},"verification","Verification",[10,4601,4602],{},"After installation, verify everything is working:",[2283,4604,4605],{},[1115,4606,4607,4610,4613,4618,4621],{},[1118,4608,4609],{},"WooNuxt Settings plugin is activated",[1118,4611,4612],{},"All required plugins show as \"Installed\" in Settings > WooNuxt",[1118,4614,4615,4616],{},"GraphQL endpoint is accessible at ",[29,4617,3807],{},[1118,4619,4620],{},"WPGraphQL shows in WordPress admin sidebar",[1118,4622,4623],{},"WooCommerce products are visible in GraphQL IDE",[14,4625,2196],{"id":2195},[10,4627,4628,4631,4632,2054,4637,337],{},[176,4629,4630],{},"Plugin auto-installation fails?"," Ensure WordPress is 6.9.4+ and you have admin access. Manual installation: download from ",[1843,4633,4636],{"href":4634,"rel":4635},"https:\u002F\u002Fwordpress.org\u002Fplugins\u002F",[1847],"WordPress.org",[1843,4638,4641],{"href":4639,"rel":4640},"https:\u002F\u002Fgithub.com\u002Fwp-graphql\u002Fwp-graphql-woocommerce\u002Freleases",[1847],"GitHub releases",[10,4643,4644,4647,4648,4650,4651,4653],{},[176,4645,4646],{},"GraphQL endpoint not accessible?"," Go to ",[176,4649,3815],{}," and click ",[176,4652,3828],{}," to flush rewrite rules.",[14,4655,4657],{"id":4656},"plugin-configuration","Plugin Configuration",[10,4659,4660],{},"After installing the WooNuxt Settings plugin, configure it to connect your WordPress backend with your Nuxt frontend.",[1934,4662,4664],{"id":4663},"accessing-settings","Accessing Settings",[10,4666,4667,4668,4670],{},"Navigate to ",[176,4669,2333],{}," in your WordPress admin dashboard.",[4241,4672,4673],{},[10,4674,4675],{},"You'll see different sections based on whether all required plugins are installed. If dependencies are missing, you'll see the \"Required Plugins\" section first.",[1934,4677,4679],{"id":4678},"logo-configuration","Logo Configuration",[10,4681,4682],{},"Upload or specify your site logo:",[22,4684,4687],{"className":4685,"code":4686,"language":1233},[1231],"Logo URL: https:\u002F\u002Fyoursite.com\u002Fwp-content\u002Fuploads\u002Flogo.svg\n",[29,4688,4686],{"__ignoreMap":27},[10,4690,4691],{},[176,4692,4693],{},"How to set:",[2159,4695,4696,4702,4705,4708],{},[1118,4697,4698,4699],{},"Upload logo to ",[176,4700,4701],{},"Media Library",[1118,4703,4704],{},"Copy the file URL",[1118,4706,4707],{},"Paste into the Logo field",[1118,4709,2401,4710],{},[176,4711,3828],{},[10,4713,4714],{},[176,4715,4716],{},"Best practices:",[1115,4718,4719,4722,4725,4728],{},[1118,4720,4721],{},"Use SVG format for best quality",[1118,4723,4724],{},"Recommended size: 200x50px to 400x100px",[1118,4726,4727],{},"Transparent background works best",[1118,4729,4730],{},"Logo appears in your Nuxt frontend header",[1934,4732,4293],{"id":4733},"frontend-url",[10,4735,4736],{},"Specify your Nuxt application URL (not your WordPress URL):",[22,4738,4741],{"className":4739,"code":4740,"language":1233},[1231],"Frontend URL: https:\u002F\u002Fyour-store.netlify.app\n",[29,4742,4740],{"__ignoreMap":27},[3800,4744,4745,4752],{},[10,4746,4747,4748,4751],{},"This should be your ",[176,4749,4750],{},"Nuxt site URL",", not your WordPress backend URL. Example:",[1115,4753,4754,4760],{},[1118,4755,4756,4757],{},"✅ Correct: ",[29,4758,4759],{},"https:\u002F\u002Fmystore.netlify.app",[1118,4761,4762,4763],{},"❌ Wrong: ",[29,4764,4765],{},"https:\u002F\u002Fwordpress.mystore.com",[10,4767,4768],{},[176,4769,4770],{},"Use cases:",[1115,4772,4773,4776,4779,4782],{},[1118,4774,4775],{},"Links in emails point to frontend",[1118,4777,4778],{},"Redirects after login\u002Flogout",[1118,4780,4781],{},"CORS configuration",[1118,4783,4784],{},"Social sharing links",[1934,4786,2389],{"id":4787},"products-per-page",[10,4789,4790],{},"Set pagination limit for product listings:",[22,4792,4795],{"className":4793,"code":4794,"language":1233},[1231],"Products Per Page: 24 (default)\n",[29,4796,4794],{"__ignoreMap":27},[10,4798,4799],{},[176,4800,4801],{},"Common values:",[1115,4803,4804,4807,4810],{},[1118,4805,4806],{},"12 - Fewer products, faster loading",[1118,4808,4809],{},"24 - Balanced (default)",[1118,4811,4812],{},"48 - More products per page",[10,4814,4815],{},"This value is exposed via GraphQL and used by your Nuxt frontend for pagination.",[1934,4817,2374],{"id":4818},"primary-color",[10,4820,4821],{},"Define your brand's primary color:",[22,4823,4826],{"className":4824,"code":4825,"language":1233},[1231],"Primary Color: #7F54B2 (default)\n",[29,4827,4825],{"__ignoreMap":27},[10,4829,4830],{},[176,4831,4832],{},"Features:",[1115,4834,4835,4838,4841,4844],{},[1118,4836,4837],{},"Color picker interface",[1118,4839,4840],{},"Live preview of frontend elements",[1118,4842,4843],{},"Hex color code input",[1118,4845,4846],{},"Affects buttons, links, and interactive elements",[10,4848,4849,4850,4852],{},"The color is exposed via GraphQL as ",[29,4851,4329],{}," for your Nuxt theme.",[1934,4854,4336],{"id":4855},"build-hook",[10,4857,4858],{},"Trigger deployments from WordPress:",[22,4860,4863],{"className":4861,"code":4862,"language":1233},[1231],"Build Hook: https:\u002F\u002Fapi.netlify.com\u002Fbuild_hooks\u002Fyour_unique_id\n",[29,4864,4862],{"__ignoreMap":27},[10,4866,4867],{},[176,4868,4869],{},"Where to find:",[2159,4871,4872,4878],{},[1118,4873,4874,4877],{},[176,4875,4876],{},"Netlify",": Site Settings > Build & Deploy > Build Hooks",[1118,4879,4880,4883],{},[176,4881,4882],{},"Vercel",": Project Settings > Git > Deploy Hooks",[10,4885,4886],{},[176,4887,4888],{},"When to use:",[1115,4890,4891,4894,4897,4900],{},[1118,4892,4893],{},"After publishing new products",[1118,4895,4896],{},"After updating content",[1118,4898,4899],{},"After changing settings",[1118,4901,4902],{},"Automatic deployments on save",[10,4904,4905,4906,4909],{},"Once configured, a ",[176,4907,4908],{},"Deploy"," button appears in the WooNuxt toolbar.",[1934,4911,2395],{"id":4912},"global-attributes-1",[10,4914,4915],{},"Global Attributes enable advanced product filtering on your frontend.",[10,4917,4918],{},[176,4919,4920],{},"What Are Global Attributes?",[10,4922,4923],{},"Product attributes in WooCommerce (like Color, Size, Material) that you want to use as filters across all product pages.",[10,4925,4926],{},[176,4927,4928],{},"Adding a Filter:",[2159,4930,4931,4936,4939,4942,4956],{},[1118,4932,2401,4933,4935],{},[176,4934,2404],{}," button",[1118,4937,4938],{},"Enter a custom label (e.g., \"Filter by Color\")",[1118,4940,4941],{},"Select the attribute from dropdown (e.g., Color)",[1118,4943,4944,4945],{},"Configure display options:\n",[1115,4946,4947,4950,4953],{},[1118,4948,4949],{},"☑️ Show Count - Display number of products",[1118,4951,4952],{},"☑️ Hide Empty - Hide terms with 0 products",[1118,4954,4955],{},"☑️ Open By Default - Start expanded",[1118,4957,2401,4958],{},[176,4959,3828],{},[1850,4961,4962],{},[10,4963,4964,4965,4968],{},"Create product attributes first in ",[176,4966,4967],{},"Products > Attributes"," before configuring global attributes in WooNuxt Settings.",[1934,4970,4394],{"id":4971},"seo-settings-1",[10,4973,4974],{},"Configure social media profiles for rich meta tags:",[10,4976,4977],{},[176,4978,4979],{},"Adding Social Profiles:",[2159,4981,4982,4987,4990,4993,5001],{},[1118,4983,2401,4984,4935],{},[176,4985,4986],{},"Add new",[1118,4988,4989],{},"Enter provider name (e.g., \"facebook\", \"twitter\", \"instagram\")",[1118,4991,4992],{},"Add your handle (e.g., \"@yourstore\")",[1118,4994,4995,4996,5000],{},"Add full profile URL (e.g., \"",[1843,4997,4998],{"href":4998,"rel":4999},"https:\u002F\u002Ffacebook.com\u002Fyourstore",[1847],"\")",[1118,5002,2401,5003],{},[176,5004,3828],{},[10,5006,5007],{},"These settings populate Open Graph and Twitter Card meta tags on your frontend for better social sharing.",[1934,5009,4421],{"id":5010},"stripe-configuration-1",[10,5012,5013],{},"Stripe settings are automatically pulled from WooCommerce:",[2159,5015,5016,5021,5024],{},[1118,5017,5018,5019],{},"Configure Stripe in ",[176,5020,4432],{},[1118,5022,5023],{},"WooNuxt Settings automatically exposes these via GraphQL",[1118,5025,5026],{},"Your Nuxt frontend reads the appropriate key based on environment",[4241,5028,5029],{},[10,5030,5031],{},"The plugin intelligently returns test or live keys based on your WooCommerce Stripe mode setting.",[14,5033,4599],{"id":5034},"verification-1",[10,5036,5037],{},"After configuring settings, verify in GraphQL IDE:",[22,5039,5041],{"className":2434,"code":5040,"language":2436,"meta":27,"style":27},"query TestSettings {\n  woonuxtSettings {\n    logo\n    primary_color\n    frontEndUrl\n    productsPerPage\n    global_attributes {\n      label\n      slug\n      showCount\n      hideEmpty\n      openByDefault\n    }\n    stripeSettings {\n      enabled\n      testmode\n      publishable_key\n    }\n  }\n}\n",[29,5042,5043,5048,5052,5056,5060,5064,5068,5072,5076,5080,5084,5088,5092,5096,5100,5104,5108,5112,5116,5120],{"__ignoreMap":27},[32,5044,5045],{"class":34,"line":35},[32,5046,5047],{},"query TestSettings {\n",[32,5049,5050],{"class":34,"line":46},[32,5051,2493],{},[32,5053,5054],{"class":34,"line":60},[32,5055,2503],{},[32,5057,5058],{"class":34,"line":71},[32,5059,2498],{},[32,5061,5062],{"class":34,"line":82},[32,5063,4502],{},[32,5065,5066],{"class":34,"line":93},[32,5067,4517],{},[32,5069,5070],{"class":34,"line":104},[32,5071,4527],{},[32,5073,5074],{"class":34,"line":115},[32,5075,4547],{},[32,5077,5078],{"class":34,"line":126},[32,5079,4532],{},[32,5081,5082],{"class":34,"line":137},[32,5083,4537],{},[32,5085,5086],{"class":34,"line":148},[32,5087,4552],{},[32,5089,5090],{"class":34,"line":159},[32,5091,4542],{},[32,5093,5094],{"class":34,"line":321},[32,5095,2483],{},[32,5097,5098],{"class":34,"line":1353},[32,5099,4561],{},[32,5101,5102],{"class":34,"line":1359},[32,5103,4566],{},[32,5105,5106],{"class":34,"line":1364},[32,5107,4571],{},[32,5109,5110],{"class":34,"line":1370},[32,5111,4581],{},[32,5113,5114],{"class":34,"line":1381},[32,5115,2483],{},[32,5117,5118],{"class":34,"line":1387},[32,5119,2488],{},[32,5121,5122],{"class":34,"line":1673},[32,5123,2512],{},[14,5125,3765],{"id":2747},[10,5127,5128],{},"With WordPress fully configured, you're ready to start building with WooNuxt!",[1921,5130,5131],{},[10,5132,5133,5134,5138],{},"Your WordPress backend is now configured and ready to power your headless WooCommerce store. Check out the ",[1843,5135,5137],{"href":2147,"rel":5136},[1847],"WooNuxt GitHub repository"," to get started with the frontend.",[1066,5140,5141],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .s-wAU, html code.shiki .s-wAU{--shiki-default:#F07178}html pre.shiki code .sAklC, html code.shiki .sAklC{--shiki-default:#89DDFF}html pre.shiki code .sfyAc, html code.shiki .sfyAc{--shiki-default:#C3E88D}",{"title":27,"searchDepth":46,"depth":46,"links":5143},[5144,5148,5149,5152,5158,5159,5160,5161,5172,5173],{"id":3966,"depth":46,"text":3967,"children":5145},[5146,5147],{"id":3970,"depth":60,"text":3971},{"id":4008,"depth":60,"text":4009},{"id":4024,"depth":46,"text":4025},{"id":4073,"depth":46,"text":4074,"children":5150},[5151],{"id":4209,"depth":60,"text":4210},{"id":4248,"depth":46,"text":4249,"children":5153},[5154,5155,5156,5157],{"id":4255,"depth":60,"text":4256},{"id":4345,"depth":60,"text":2395},{"id":4393,"depth":60,"text":4394},{"id":4420,"depth":60,"text":4421},{"id":4462,"depth":46,"text":4463},{"id":4598,"depth":46,"text":4599},{"id":2195,"depth":46,"text":2196},{"id":4656,"depth":46,"text":4657,"children":5162},[5163,5164,5165,5166,5167,5168,5169,5170,5171],{"id":4663,"depth":60,"text":4664},{"id":4678,"depth":60,"text":4679},{"id":4733,"depth":60,"text":4293},{"id":4787,"depth":60,"text":2389},{"id":4818,"depth":60,"text":2374},{"id":4855,"depth":60,"text":4336},{"id":4912,"depth":60,"text":2395},{"id":4971,"depth":60,"text":4394},{"id":5010,"depth":60,"text":4421},{"id":5034,"depth":46,"text":4599},{"id":2747,"depth":46,"text":3765},"Install and configure WooNuxt Settings plugin",{},{"icon":2238},"\u002Fwordpress-setup\u002Fplugins",{"title":1432,"description":5174},"2.wordpress-setup\u002F3.plugins","c1gThVqcKW9rBW7VG4rq8dgTOdt0k8yi_xQhzSeG9a4",{"id":5182,"title":5183,"body":5184,"description":5524,"extension":1085,"links":1086,"meta":5525,"navigation":5526,"path":5528,"seo":5529,"stem":5530,"__hash__":5531},"docs\u002F3.configuration\u002F1.deployment.md","Deployment",{"type":7,"value":5185,"toc":5512},[5186,5189,5193,5255,5258,5262,5288,5292,5295,5320,5323,5326,5351,5355,5369,5373,5376,5431,5439,5443,5446,5502,5509],[10,5187,5188],{},"WooNuxt supports three output modes. Choose the one that fits your hosting and catalog size.",[14,5190,5192],{"id":5191},"output-modes","Output Modes",[1695,5194,5195,5208],{},[1698,5196,5197],{},[1701,5198,5199,5202,5205],{},[1704,5200,5201],{},"Mode",[1704,5203,5204],{},"Command",[1704,5206,5207],{},"Best For",[1714,5209,5210,5225,5240],{},[1701,5211,5212,5217,5222],{},[1719,5213,5214],{},[176,5215,5216],{},"Static (SSG)",[1719,5218,5219],{},[29,5220,5221],{},"nuxt generate",[1719,5223,5224],{},"Small–medium catalogs, cheapest hosting",[1701,5226,5227,5232,5237],{},[1719,5228,5229],{},[176,5230,5231],{},"Server (SSR)",[1719,5233,5234],{},[29,5235,5236],{},"nuxt build",[1719,5238,5239],{},"Large catalogs, always-fresh data",[1701,5241,5242,5247,5252],{},[1719,5243,5244],{},[176,5245,5246],{},"Hybrid (ISR)",[1719,5248,5249,5251],{},[29,5250,5236],{}," + ISR routes",[1719,5253,5254],{},"Large catalogs with caching",[14,5256,4876],{"id":5257},"netlify",[1934,5259,5261],{"id":5260},"static-generation-recommended","Static Generation (Recommended)",[2159,5263,5264,5267,5277,5285],{},[1118,5265,5266],{},"Connect your GitHub repo in the Netlify dashboard",[1118,5268,5269,5270,5273,5274],{},"Set ",[176,5271,5272],{},"Build command",": ",[29,5275,5276],{},"npm run generate",[1118,5278,5269,5279,5273,5282],{},[176,5280,5281],{},"Publish directory",[29,5283,5284],{},".output\u002Fpublic",[1118,5286,5287],{},"Add environment variables (see below)",[1934,5289,5291],{"id":5290},"build-hook-trigger-rebuild-from-wordpress","Build Hook (Trigger Rebuild from WordPress)",[10,5293,5294],{},"When content changes in WooCommerce (new products, price updates), you can trigger a rebuild automatically:",[2159,5296,5297,5304,5307,5314],{},[1118,5298,5299,5300,5303],{},"In Netlify: ",[176,5301,5302],{},"Site settings > Build & deploy > Build hooks"," → create a hook",[1118,5305,5306],{},"Copy the hook URL",[1118,5308,5309,5310,5313],{},"In WordPress: ",[176,5311,5312],{},"Settings > WooNuxt > Build Hook"," → paste the URL",[1118,5315,2401,5316,5319],{},[176,5317,5318],{},"Trigger Rebuild"," to test",[10,5321,5322],{},"The rebuild button appears in the WooNuxt Settings admin page only when a Build Hook URL is configured.",[14,5324,4882],{"id":5325},"vercel",[2159,5327,5328,5331,5338,5348],{},[1118,5329,5330],{},"Import your GitHub repo in the Vercel dashboard",[1118,5332,5333,5334,5337],{},"Framework preset: ",[176,5335,5336],{},"Nuxt.js"," (auto-detected)",[1118,5339,5340,5341,5343,5344,5347],{},"Build command: ",[29,5342,5276],{}," (SSG) or ",[29,5345,5346],{},"npm run build"," (SSR)",[1118,5349,5350],{},"Add environment variables",[1934,5352,5354],{"id":5353},"build-hook-for-vercel","Build Hook for Vercel",[2159,5356,5357,5363],{},[1118,5358,5359,5360,5303],{},"In Vercel: ",[176,5361,5362],{},"Project > Settings > Git > Deploy Hooks",[1118,5364,5365,5366,5368],{},"Copy the URL and paste it into ",[176,5367,5312],{}," in WordPress",[14,5370,5372],{"id":5371},"required-environment-variables","Required Environment Variables",[10,5374,5375],{},"Set these in your hosting provider's environment variables panel:",[22,5377,5379],{"className":1576,"code":5378,"language":1578,"meta":27,"style":27},"# Required\nGQL_HOST=https:\u002F\u002Fyourwordpress.com\u002Fgraphql\nNUXT_IMAGE_DOMAINS=yourwordpress.com,cdn.yourwordpress.com\n\n# Optional — overrides WooNuxt Settings plugin values\nNUXT_PUBLIC_PRODUCTS_PER_PAGE=24\nNUXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=pk_live_...\nPRIMARY_COLOR=#7F54B2\n\n# Optional — ISR cache lifetime (SSR\u002Fhybrid mode only)\nCATALOG_ISR_TTL=3600\n",[29,5380,5381,5386,5391,5396,5400,5405,5409,5414,5418,5422,5427],{"__ignoreMap":27},[32,5382,5383],{"class":34,"line":35},[32,5384,5385],{},"# Required\n",[32,5387,5388],{"class":34,"line":46},[32,5389,5390],{},"GQL_HOST=https:\u002F\u002Fyourwordpress.com\u002Fgraphql\n",[32,5392,5393],{"class":34,"line":60},[32,5394,5395],{},"NUXT_IMAGE_DOMAINS=yourwordpress.com,cdn.yourwordpress.com\n",[32,5397,5398],{"class":34,"line":71},[32,5399,1298],{"emptyLinePlaceholder":1297},[32,5401,5402],{"class":34,"line":82},[32,5403,5404],{},"# Optional — overrides WooNuxt Settings plugin values\n",[32,5406,5407],{"class":34,"line":93},[32,5408,1661],{},[32,5410,5411],{"class":34,"line":104},[32,5412,5413],{},"NUXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=pk_live_...\n",[32,5415,5416],{"class":34,"line":115},[32,5417,1693],{},[32,5419,5420],{"class":34,"line":126},[32,5421,1298],{"emptyLinePlaceholder":1297},[32,5423,5424],{"class":34,"line":137},[32,5425,5426],{},"# Optional — ISR cache lifetime (SSR\u002Fhybrid mode only)\n",[32,5428,5429],{"class":34,"line":148},[32,5430,1647],{},[3800,5432,5433],{},[10,5434,5435,5436,5438],{},"Never commit your ",[29,5437,1572],{}," file. All secrets should be set via your hosting provider's environment variables UI.",[14,5440,5442],{"id":5441},"ssl-for-local-development","SSL for Local Development",[10,5444,5445],{},"If you need HTTPS locally (Stripe, PWA, OAuth providers):",[22,5447,5449],{"className":1262,"code":5448,"filename":1472,"language":1264,"meta":27,"style":27},"# Install mkcert\nbrew install mkcert\nmkcert -install\n\n# Generate local certificate\nmkcert localhost\n\n# Run dev server with SSL\nnpm run dev:ssl\n",[29,5450,5451,5456,5464,5470,5474,5479,5485,5489,5494],{"__ignoreMap":27},[32,5452,5453],{"class":34,"line":35},[32,5454,5455],{"class":56},"# Install mkcert\n",[32,5457,5458,5460,5462],{"class":34,"line":46},[32,5459,1953],{"class":1276},[32,5461,1956],{"class":1280},[32,5463,1959],{"class":1280},[32,5465,5466,5468],{"class":34,"line":60},[32,5467,2044],{"class":1276},[32,5469,2074],{"class":1280},[32,5471,5472],{"class":34,"line":71},[32,5473,1298],{"emptyLinePlaceholder":1297},[32,5475,5476],{"class":34,"line":82},[32,5477,5478],{"class":56},"# Generate local certificate\n",[32,5480,5481,5483],{"class":34,"line":93},[32,5482,2044],{"class":1276},[32,5484,2047],{"class":1280},[32,5486,5487],{"class":34,"line":104},[32,5488,1298],{"emptyLinePlaceholder":1297},[32,5490,5491],{"class":34,"line":115},[32,5492,5493],{"class":56},"# Run dev server with SSL\n",[32,5495,5496,5498,5500],{"class":34,"line":126},[32,5497,1308],{"class":1276},[32,5499,1375],{"class":1280},[32,5501,2096],{"class":1280},[10,5503,2136,5504,5506,5507,337],{},[29,5505,2139],{}," script is pre-configured in ",[29,5508,2143],{},[1066,5510,5511],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .saEQR, html code.shiki .saEQR{--shiki-default:#676E95;--shiki-default-font-style:italic}html pre.shiki code .s5Dmg, html code.shiki .s5Dmg{--shiki-default:#FFCB6B}html pre.shiki code .sfyAc, html code.shiki .sfyAc{--shiki-default:#C3E88D}",{"title":27,"searchDepth":46,"depth":46,"links":5513},[5514,5515,5519,5522,5523],{"id":5191,"depth":46,"text":5192},{"id":5257,"depth":46,"text":4876,"children":5516},[5517,5518],{"id":5260,"depth":60,"text":5261},{"id":5290,"depth":60,"text":5291},{"id":5325,"depth":46,"text":4882,"children":5520},[5521],{"id":5353,"depth":60,"text":5354},{"id":5371,"depth":46,"text":5372},{"id":5441,"depth":46,"text":5442},"Deploy WooNuxt to Netlify, Vercel, or any static host",{},{"icon":5527},"i-lucide-rocket","\u002Fconfiguration\u002Fdeployment",{"title":5183,"description":5524},"3.configuration\u002F1.deployment","SlfnFYHvqwXRGCh2f75QwzbwC1_O6bmFQybrW1g_3LY",{"id":4,"title":5,"body":5533,"description":1084,"extension":1085,"links":1086,"meta":6370,"navigation":6371,"path":1090,"seo":6372,"stem":1092,"__hash__":1093},{"type":7,"value":5534,"toc":6355},[5535,5537,5539,5541,5641,5649,5651,5653,5655,5763,5767,5769,5771,5773,5833,5835,5837,5839,5883,5887,5889,5891,5893,5945,5947,5949,5951,5987,5999,6001,6003,6005,6057,6059,6061,6065,6125,6127,6129,6131,6175,6177,6179,6181,6233,6235,6237,6239,6263,6265,6267,6269,6293,6301,6303,6305,6309,6353],[10,5536,12],{},[14,5538,17],{"id":16},[10,5540,20],{},[22,5542,5543],{"className":24,"code":25,"language":26,"meta":27,"style":27},[29,5544,5545,5551,5559,5567,5575,5583,5591,5599,5607,5615,5623,5631],{"__ignoreMap":27},[32,5546,5547,5549],{"class":34,"line":35},[32,5548,39],{"class":38},[32,5550,43],{"class":42},[32,5552,5553,5555,5557],{"class":34,"line":46},[32,5554,50],{"class":49},[32,5556,53],{"class":42},[32,5558,57],{"class":56},[32,5560,5561,5563,5565],{"class":34,"line":60},[32,5562,63],{"class":49},[32,5564,53],{"class":42},[32,5566,68],{"class":56},[32,5568,5569,5571,5573],{"class":34,"line":71},[32,5570,74],{"class":49},[32,5572,53],{"class":42},[32,5574,79],{"class":56},[32,5576,5577,5579,5581],{"class":34,"line":82},[32,5578,85],{"class":49},[32,5580,53],{"class":42},[32,5582,90],{"class":56},[32,5584,5585,5587,5589],{"class":34,"line":93},[32,5586,96],{"class":49},[32,5588,53],{"class":42},[32,5590,101],{"class":56},[32,5592,5593,5595,5597],{"class":34,"line":104},[32,5594,107],{"class":49},[32,5596,53],{"class":42},[32,5598,112],{"class":56},[32,5600,5601,5603,5605],{"class":34,"line":115},[32,5602,118],{"class":49},[32,5604,53],{"class":42},[32,5606,123],{"class":56},[32,5608,5609,5611,5613],{"class":34,"line":126},[32,5610,129],{"class":49},[32,5612,53],{"class":42},[32,5614,134],{"class":56},[32,5616,5617,5619,5621],{"class":34,"line":137},[32,5618,140],{"class":49},[32,5620,53],{"class":42},[32,5622,145],{"class":56},[32,5624,5625,5627,5629],{"class":34,"line":148},[32,5626,151],{"class":49},[32,5628,53],{"class":42},[32,5630,156],{"class":56},[32,5632,5633,5635,5637,5639],{"class":34,"line":159},[32,5634,162],{"class":42},[32,5636,165],{"class":42},[32,5638,169],{"class":168},[32,5640,172],{"class":49},[10,5642,5643,179,5645,183,5647,187],{},[176,5644,178],{},[29,5646,182],{},[29,5648,186],{},[189,5650],{},[14,5652,194],{"id":193},[10,5654,197],{},[22,5656,5657],{"className":24,"code":200,"language":26,"meta":27,"style":27},[29,5658,5659,5665,5673,5681,5689,5697,5705,5713,5721,5729,5737,5745,5753],{"__ignoreMap":27},[32,5660,5661,5663],{"class":34,"line":35},[32,5662,39],{"class":38},[32,5664,43],{"class":42},[32,5666,5667,5669,5671],{"class":34,"line":46},[32,5668,213],{"class":49},[32,5670,53],{"class":42},[32,5672,218],{"class":56},[32,5674,5675,5677,5679],{"class":34,"line":60},[32,5676,223],{"class":49},[32,5678,53],{"class":42},[32,5680,228],{"class":56},[32,5682,5683,5685,5687],{"class":34,"line":71},[32,5684,233],{"class":49},[32,5686,53],{"class":42},[32,5688,238],{"class":56},[32,5690,5691,5693,5695],{"class":34,"line":82},[32,5692,243],{"class":49},[32,5694,53],{"class":42},[32,5696,248],{"class":56},[32,5698,5699,5701,5703],{"class":34,"line":93},[32,5700,253],{"class":49},[32,5702,53],{"class":42},[32,5704,258],{"class":56},[32,5706,5707,5709,5711],{"class":34,"line":104},[32,5708,263],{"class":49},[32,5710,53],{"class":42},[32,5712,268],{"class":56},[32,5714,5715,5717,5719],{"class":34,"line":115},[32,5716,273],{"class":49},[32,5718,53],{"class":42},[32,5720,278],{"class":56},[32,5722,5723,5725,5727],{"class":34,"line":126},[32,5724,283],{"class":49},[32,5726,53],{"class":42},[32,5728,288],{"class":56},[32,5730,5731,5733,5735],{"class":34,"line":137},[32,5732,293],{"class":49},[32,5734,53],{"class":42},[32,5736,298],{"class":56},[32,5738,5739,5741,5743],{"class":34,"line":148},[32,5740,303],{"class":49},[32,5742,53],{"class":42},[32,5744,308],{"class":56},[32,5746,5747,5749,5751],{"class":34,"line":159},[32,5748,313],{"class":49},[32,5750,53],{"class":42},[32,5752,318],{"class":56},[32,5754,5755,5757,5759,5761],{"class":34,"line":321},[32,5756,162],{"class":42},[32,5758,165],{"class":42},[32,5760,328],{"class":168},[32,5762,172],{"class":49},[10,5764,333,5765,337],{},[29,5766,336],{},[189,5768],{},[14,5770,343],{"id":342},[10,5772,346],{},[22,5774,5775],{"className":24,"code":349,"language":26,"meta":27,"style":27},[29,5776,5777,5783,5791,5799,5807,5815,5823],{"__ignoreMap":27},[32,5778,5779,5781],{"class":34,"line":35},[32,5780,39],{"class":38},[32,5782,43],{"class":42},[32,5784,5785,5787,5789],{"class":34,"line":46},[32,5786,362],{"class":49},[32,5788,53],{"class":42},[32,5790,367],{"class":56},[32,5792,5793,5795,5797],{"class":34,"line":60},[32,5794,372],{"class":49},[32,5796,53],{"class":42},[32,5798,377],{"class":56},[32,5800,5801,5803,5805],{"class":34,"line":71},[32,5802,382],{"class":49},[32,5804,53],{"class":42},[32,5806,387],{"class":56},[32,5808,5809,5811,5813],{"class":34,"line":82},[32,5810,392],{"class":49},[32,5812,53],{"class":42},[32,5814,397],{"class":56},[32,5816,5817,5819,5821],{"class":34,"line":93},[32,5818,402],{"class":49},[32,5820,53],{"class":42},[32,5822,407],{"class":56},[32,5824,5825,5827,5829,5831],{"class":34,"line":104},[32,5826,162],{"class":42},[32,5828,165],{"class":42},[32,5830,416],{"class":168},[32,5832,172],{"class":49},[189,5834],{},[14,5836,424],{"id":423},[10,5838,427],{},[22,5840,5841],{"className":24,"code":430,"language":26,"meta":27,"style":27},[29,5842,5843,5849,5857,5865,5873],{"__ignoreMap":27},[32,5844,5845,5847],{"class":34,"line":35},[32,5846,39],{"class":38},[32,5848,43],{"class":42},[32,5850,5851,5853,5855],{"class":34,"line":46},[32,5852,443],{"class":49},[32,5854,53],{"class":42},[32,5856,448],{"class":56},[32,5858,5859,5861,5863],{"class":34,"line":60},[32,5860,453],{"class":49},[32,5862,53],{"class":42},[32,5864,458],{"class":56},[32,5866,5867,5869,5871],{"class":34,"line":71},[32,5868,463],{"class":49},[32,5870,53],{"class":42},[32,5872,468],{"class":56},[32,5874,5875,5877,5879,5881],{"class":34,"line":82},[32,5876,162],{"class":42},[32,5878,165],{"class":42},[32,5880,477],{"class":168},[32,5882,172],{"class":49},[10,5884,482,5885,486],{},[176,5886,485],{},[189,5888],{},[14,5890,492],{"id":491},[10,5892,495],{},[22,5894,5895],{"className":24,"code":498,"language":26,"meta":27,"style":27},[29,5896,5897,5903,5911,5919,5927,5935],{"__ignoreMap":27},[32,5898,5899,5901],{"class":34,"line":35},[32,5900,39],{"class":38},[32,5902,43],{"class":42},[32,5904,5905,5907,5909],{"class":34,"line":46},[32,5906,511],{"class":49},[32,5908,53],{"class":42},[32,5910,516],{"class":56},[32,5912,5913,5915,5917],{"class":34,"line":60},[32,5914,521],{"class":49},[32,5916,53],{"class":42},[32,5918,526],{"class":56},[32,5920,5921,5923,5925],{"class":34,"line":71},[32,5922,531],{"class":49},[32,5924,53],{"class":42},[32,5926,258],{"class":56},[32,5928,5929,5931,5933],{"class":34,"line":82},[32,5930,540],{"class":49},[32,5932,53],{"class":42},[32,5934,545],{"class":56},[32,5936,5937,5939,5941,5943],{"class":34,"line":93},[32,5938,162],{"class":42},[32,5940,165],{"class":42},[32,5942,554],{"class":168},[32,5944,172],{"class":49},[189,5946],{},[14,5948,562],{"id":561},[10,5950,565],{},[22,5952,5953],{"className":24,"code":568,"language":26,"meta":27,"style":27},[29,5954,5955,5961,5969,5977],{"__ignoreMap":27},[32,5956,5957,5959],{"class":34,"line":35},[32,5958,39],{"class":38},[32,5960,43],{"class":42},[32,5962,5963,5965,5967],{"class":34,"line":46},[32,5964,581],{"class":49},[32,5966,53],{"class":42},[32,5968,586],{"class":56},[32,5970,5971,5973,5975],{"class":34,"line":60},[32,5972,591],{"class":49},[32,5974,53],{"class":42},[32,5976,596],{"class":56},[32,5978,5979,5981,5983,5985],{"class":34,"line":71},[32,5980,162],{"class":42},[32,5982,165],{"class":42},[32,5984,605],{"class":168},[32,5986,172],{"class":49},[10,5988,610,5989,614,5991,614,5993,614,5995,614,5997,337],{},[29,5990,613],{},[29,5992,617],{},[29,5994,620],{},[29,5996,623],{},[29,5998,626],{},[189,6000],{},[14,6002,632],{"id":631},[10,6004,635],{},[22,6006,6007],{"className":24,"code":638,"language":26,"meta":27,"style":27},[29,6008,6009,6015,6023,6031,6039,6047],{"__ignoreMap":27},[32,6010,6011,6013],{"class":34,"line":35},[32,6012,39],{"class":38},[32,6014,43],{"class":42},[32,6016,6017,6019,6021],{"class":34,"line":46},[32,6018,651],{"class":49},[32,6020,53],{"class":42},[32,6022,656],{"class":56},[32,6024,6025,6027,6029],{"class":34,"line":60},[32,6026,661],{"class":49},[32,6028,53],{"class":42},[32,6030,666],{"class":56},[32,6032,6033,6035,6037],{"class":34,"line":71},[32,6034,671],{"class":49},[32,6036,53],{"class":42},[32,6038,676],{"class":56},[32,6040,6041,6043,6045],{"class":34,"line":82},[32,6042,681],{"class":49},[32,6044,53],{"class":42},[32,6046,686],{"class":56},[32,6048,6049,6051,6053,6055],{"class":34,"line":93},[32,6050,162],{"class":42},[32,6052,165],{"class":42},[32,6054,695],{"class":168},[32,6056,172],{"class":49},[189,6058],{},[14,6060,703],{"id":702},[10,6062,706,6063,337],{},[29,6064,709],{},[22,6066,6067],{"className":24,"code":712,"language":26,"meta":27,"style":27},[29,6068,6069,6075,6083,6091,6099,6107,6115],{"__ignoreMap":27},[32,6070,6071,6073],{"class":34,"line":35},[32,6072,39],{"class":38},[32,6074,43],{"class":42},[32,6076,6077,6079,6081],{"class":34,"line":46},[32,6078,725],{"class":49},[32,6080,53],{"class":42},[32,6082,730],{"class":56},[32,6084,6085,6087,6089],{"class":34,"line":60},[32,6086,735],{"class":49},[32,6088,53],{"class":42},[32,6090,740],{"class":56},[32,6092,6093,6095,6097],{"class":34,"line":71},[32,6094,745],{"class":49},[32,6096,53],{"class":42},[32,6098,750],{"class":56},[32,6100,6101,6103,6105],{"class":34,"line":82},[32,6102,755],{"class":49},[32,6104,53],{"class":42},[32,6106,760],{"class":56},[32,6108,6109,6111,6113],{"class":34,"line":93},[32,6110,765],{"class":49},[32,6112,53],{"class":42},[32,6114,770],{"class":56},[32,6116,6117,6119,6121,6123],{"class":34,"line":104},[32,6118,162],{"class":42},[32,6120,165],{"class":42},[32,6122,779],{"class":168},[32,6124,172],{"class":49},[189,6126],{},[14,6128,787],{"id":786},[10,6130,790],{},[22,6132,6133],{"className":24,"code":793,"language":26,"meta":27,"style":27},[29,6134,6135,6141,6149,6157,6165],{"__ignoreMap":27},[32,6136,6137,6139],{"class":34,"line":35},[32,6138,39],{"class":38},[32,6140,43],{"class":42},[32,6142,6143,6145,6147],{"class":34,"line":46},[32,6144,806],{"class":49},[32,6146,53],{"class":42},[32,6148,811],{"class":56},[32,6150,6151,6153,6155],{"class":34,"line":60},[32,6152,816],{"class":49},[32,6154,53],{"class":42},[32,6156,821],{"class":56},[32,6158,6159,6161,6163],{"class":34,"line":71},[32,6160,826],{"class":49},[32,6162,53],{"class":42},[32,6164,831],{"class":56},[32,6166,6167,6169,6171,6173],{"class":34,"line":82},[32,6168,162],{"class":42},[32,6170,165],{"class":42},[32,6172,840],{"class":168},[32,6174,172],{"class":49},[189,6176],{},[14,6178,848],{"id":847},[10,6180,851],{},[22,6182,6183],{"className":24,"code":854,"language":26,"meta":27,"style":27},[29,6184,6185,6191,6199,6207,6215,6223],{"__ignoreMap":27},[32,6186,6187,6189],{"class":34,"line":35},[32,6188,39],{"class":38},[32,6190,43],{"class":42},[32,6192,6193,6195,6197],{"class":34,"line":46},[32,6194,867],{"class":49},[32,6196,53],{"class":42},[32,6198,872],{"class":56},[32,6200,6201,6203,6205],{"class":34,"line":60},[32,6202,877],{"class":49},[32,6204,53],{"class":42},[32,6206,882],{"class":56},[32,6208,6209,6211,6213],{"class":34,"line":71},[32,6210,887],{"class":49},[32,6212,53],{"class":42},[32,6214,686],{"class":56},[32,6216,6217,6219,6221],{"class":34,"line":82},[32,6218,896],{"class":49},[32,6220,53],{"class":42},[32,6222,901],{"class":56},[32,6224,6225,6227,6229,6231],{"class":34,"line":93},[32,6226,162],{"class":42},[32,6228,165],{"class":42},[32,6230,910],{"class":168},[32,6232,172],{"class":49},[189,6234],{},[14,6236,918],{"id":917},[10,6238,921],{},[22,6240,6241],{"className":24,"code":924,"language":26,"meta":27,"style":27},[29,6242,6243,6259],{"__ignoreMap":27},[32,6244,6245,6247,6249,6251,6253,6255,6257],{"class":34,"line":35},[32,6246,39],{"class":38},[32,6248,933],{"class":42},[32,6250,936],{"class":49},[32,6252,162],{"class":42},[32,6254,165],{"class":42},[32,6256,943],{"class":168},[32,6258,172],{"class":49},[32,6260,6261],{"class":34,"line":46},[32,6262,950],{"class":56},[189,6264],{},[14,6266,956],{"id":955},[10,6268,959],{},[22,6270,6271],{"className":24,"code":962,"language":26,"meta":27,"style":27},[29,6272,6273,6289],{"__ignoreMap":27},[32,6274,6275,6277,6279,6281,6283,6285,6287],{"class":34,"line":35},[32,6276,39],{"class":38},[32,6278,933],{"class":42},[32,6280,973],{"class":49},[32,6282,162],{"class":42},[32,6284,165],{"class":42},[32,6286,980],{"class":168},[32,6288,172],{"class":49},[32,6290,6291],{"class":34,"line":46},[32,6292,987],{"class":56},[10,6294,990,6295,994,6297,997,6299,1001],{},[29,6296,993],{},[176,6298,485],{},[29,6300,1000],{},[189,6302],{},[14,6304,336],{"id":1006},[10,6306,1009,6307,1012],{},[29,6308,194],{},[22,6310,6311],{"className":24,"code":1015,"language":26,"meta":27,"style":27},[29,6312,6313,6319,6327,6335,6343],{"__ignoreMap":27},[32,6314,6315,6317],{"class":34,"line":35},[32,6316,39],{"class":38},[32,6318,43],{"class":42},[32,6320,6321,6323,6325],{"class":34,"line":46},[32,6322,1028],{"class":49},[32,6324,53],{"class":42},[32,6326,1033],{"class":56},[32,6328,6329,6331,6333],{"class":34,"line":60},[32,6330,1038],{"class":49},[32,6332,53],{"class":42},[32,6334,1043],{"class":56},[32,6336,6337,6339,6341],{"class":34,"line":71},[32,6338,1048],{"class":49},[32,6340,53],{"class":42},[32,6342,1053],{"class":56},[32,6344,6345,6347,6349,6351],{"class":34,"line":82},[32,6346,162],{"class":42},[32,6348,165],{"class":42},[32,6350,1062],{"class":168},[32,6352,172],{"class":49},[1066,6354,1068],{},{"title":27,"searchDepth":46,"depth":46,"links":6356},[6357,6358,6359,6360,6361,6362,6363,6364,6365,6366,6367,6368,6369],{"id":16,"depth":46,"text":17},{"id":193,"depth":46,"text":194},{"id":342,"depth":46,"text":343},{"id":423,"depth":46,"text":424},{"id":491,"depth":46,"text":492},{"id":561,"depth":46,"text":562},{"id":631,"depth":46,"text":632},{"id":702,"depth":46,"text":703},{"id":786,"depth":46,"text":787},{"id":847,"depth":46,"text":848},{"id":917,"depth":46,"text":918},{"id":955,"depth":46,"text":956},{"id":1006,"depth":46,"text":336},{},{"icon":1089},{"title":5,"description":1084},{"id":6374,"title":6375,"body":6376,"description":6823,"extension":1085,"links":1086,"meta":6824,"navigation":6825,"path":6827,"seo":6828,"stem":6829,"__hash__":6830},"docs\u002F3.configuration\u002F3.performance.md","Performance & ISR",{"type":7,"value":6377,"toc":6811},[6378,6385,6389,6392,6402,6406,6412,6488,6492,6497,6539,6547,6551,6561,6578,6582,6588,6592,6601,6609,6612,6616,6622,6677,6681,6684,6797,6808],[10,6379,6380,6381,6384],{},"WooNuxt is optimized for performance at every layer. For large catalogs, ",[176,6382,6383],{},"Incremental Static Regeneration (ISR)"," lets you cache product pages at the CDN edge while still serving fresh data.",[14,6386,6388],{"id":6387},"isr-incremental-static-regeneration","ISR (Incremental Static Regeneration)",[10,6390,6391],{},"ISR pre-renders pages on first request and caches them for a configurable TTL. Subsequent requests are served from cache — zero cold-start latency — until the TTL expires and the page is regenerated in the background.",[10,6393,6394,6395,6398,6399,6401],{},"This is ideal for catalogs with ",[176,6396,6397],{},"10,000+ products"," where full ",[29,6400,5221],{}," would take too long.",[1934,6403,6405],{"id":6404},"which-routes-use-isr","Which Routes Use ISR",[10,6407,6408,6409,2589],{},"The following routes are ISR-enabled by default in ",[29,6410,6411],{},"woonuxt_base\u002Fnuxt.config.ts",[1695,6413,6414,6424],{},[1698,6415,6416],{},[1701,6417,6418,6421],{},[1704,6419,6420],{},"Route Pattern",[1704,6422,6423],{},"Behavior",[1714,6425,6426,6438,6449,6460,6472],{},[1701,6427,6428,6433],{},[1719,6429,6430],{},[29,6431,6432],{},"\u002Fproduct\u002F**",[1719,6434,6435,6436],{},"ISR with ",[29,6437,1761],{},[1701,6439,6440,6445],{},[1719,6441,6442],{},[29,6443,6444],{},"\u002Fproduct-category\u002F**",[1719,6446,6435,6447],{},[29,6448,1761],{},[1701,6450,6451,6456],{},[1719,6452,6453],{},[29,6454,6455],{},"\u002Fproducts",[1719,6457,6435,6458],{},[29,6459,1761],{},[1701,6461,6462,6468],{},[1719,6463,6464,6467],{},[29,6465,6466],{},"\u002Fproducts\u002F**"," (pagination)",[1719,6469,6435,6470],{},[29,6471,1761],{},[1701,6473,6474,6482],{},[1719,6475,6476,614,6479],{},[29,6477,6478],{},"\u002Fcheckout",[29,6480,6481],{},"\u002Forder-summary",[1719,6483,6484,6487],{},[29,6485,6486],{},"prerender: false"," (always live)",[1934,6489,6491],{"id":6490},"configuring-isr-ttl","Configuring ISR TTL",[10,6493,5269,6494,6496],{},[29,6495,1761],{}," in your environment variables (value in seconds):",[22,6498,6500],{"className":1576,"code":6499,"filename":1572,"language":1578,"meta":27,"style":27},"# Cache product pages for 1 hour (default)\nCATALOG_ISR_TTL=3600\n\n# Cache for 24 hours (high-traffic stores with infrequent updates)\nCATALOG_ISR_TTL=86400\n\n# Cache for 5 minutes (stores with frequent price\u002Fstock changes)\nCATALOG_ISR_TTL=300\n",[29,6501,6502,6507,6511,6515,6520,6525,6529,6534],{"__ignoreMap":27},[32,6503,6504],{"class":34,"line":35},[32,6505,6506],{},"# Cache product pages for 1 hour (default)\n",[32,6508,6509],{"class":34,"line":46},[32,6510,1647],{},[32,6512,6513],{"class":34,"line":60},[32,6514,1298],{"emptyLinePlaceholder":1297},[32,6516,6517],{"class":34,"line":71},[32,6518,6519],{},"# Cache for 24 hours (high-traffic stores with infrequent updates)\n",[32,6521,6522],{"class":34,"line":82},[32,6523,6524],{},"CATALOG_ISR_TTL=86400\n",[32,6526,6527],{"class":34,"line":93},[32,6528,1298],{"emptyLinePlaceholder":1297},[32,6530,6531],{"class":34,"line":104},[32,6532,6533],{},"# Cache for 5 minutes (stores with frequent price\u002Fstock changes)\n",[32,6535,6536],{"class":34,"line":115},[32,6537,6538],{},"CATALOG_ISR_TTL=300\n",[1850,6540,6541],{},[10,6542,6543,6544,6546],{},"After updating a product in WooCommerce, the cache for that product's page will be stale until the TTL expires. Pair ISR with a ",[176,6545,4336],{}," (configured in WooNuxt Settings) to trigger a full rebuild on important changes.",[1934,6548,6550],{"id":6549},"requirements","Requirements",[10,6552,6553,6554,6557,6558,6560],{},"ISR requires a ",[176,6555,6556],{},"server runtime"," — it does not work with pure static output (",[29,6559,5221],{},"). Deploy with:",[1115,6562,6563,6566,6569],{},[1118,6564,6565],{},"Netlify (serverless functions)",[1118,6567,6568],{},"Vercel (edge functions)",[1118,6570,6571,6572,6574,6575,1770],{},"Node.js server (",[29,6573,5236],{}," + ",[29,6576,6577],{},"node .output\u002Fserver\u002Findex.mjs",[14,6579,6581],{"id":6580},"image-optimization","Image Optimization",[10,6583,2791,6584,6587],{},[29,6585,6586],{},"@nuxt\u002Fimage"," to automatically optimize WooCommerce product images.",[1934,6589,6591],{"id":6590},"configure-allowed-domains","Configure Allowed Domains",[10,6593,6594,6595,6598,6599,2589],{},"You ",[176,6596,6597],{},"must"," list all image domains in ",[29,6600,1736],{},[22,6602,6603],{"className":1576,"code":5395,"filename":1572,"language":1578,"meta":27,"style":27},[29,6604,6605],{"__ignoreMap":27},[32,6606,6607],{"class":34,"line":35},[32,6608,5395],{},[10,6610,6611],{},"Multiple domains are comma-separated. Without this, images from those domains will not be optimized.",[1934,6613,6615],{"id":6614},"netlify-image-cdn","Netlify Image CDN",[10,6617,6618,6619,6621],{},"When deploying to Netlify, ",[29,6620,6586],{}," automatically uses Netlify's Image CDN. The base config already ignores Netlify CDN URLs during prerendering to avoid double-optimization:",[22,6623,6625],{"className":24,"code":6624,"language":26,"meta":27,"style":27},"\u002F\u002F Already configured in woonuxt_base\u002Fnuxt.config.ts\nnitro: {\n  prerender: {\n    ignore: ['\u002F_netlify\u002Fimages']\n  }\n}\n",[29,6626,6627,6632,6641,6650,6669,6673],{"__ignoreMap":27},[32,6628,6629],{"class":34,"line":35},[32,6630,6631],{"class":56},"\u002F\u002F Already configured in woonuxt_base\u002Fnuxt.config.ts\n",[32,6633,6634,6637,6639],{"class":34,"line":46},[32,6635,6636],{"class":1276},"nitro",[32,6638,2589],{"class":42},[32,6640,43],{"class":42},[32,6642,6643,6646,6648],{"class":34,"line":60},[32,6644,6645],{"class":1276},"  prerender",[32,6647,2589],{"class":42},[32,6649,43],{"class":42},[32,6651,6652,6655,6657,6659,6661,6664,6666],{"class":34,"line":71},[32,6653,6654],{"class":1276},"    ignore",[32,6656,2589],{"class":42},[32,6658,2848],{"class":2842},[32,6660,2851],{"class":42},[32,6662,6663],{"class":1280},"\u002F_netlify\u002Fimages",[32,6665,2851],{"class":42},[32,6667,6668],{"class":2842},"]\n",[32,6670,6671],{"class":34,"line":82},[32,6672,2488],{"class":42},[32,6674,6675],{"class":34,"line":93},[32,6676,2512],{"class":42},[14,6678,6680],{"id":6679},"build-performance","Build Performance",[10,6682,6683],{},"For SSG builds with large catalogs:",[22,6685,6687],{"className":24,"code":6686,"filename":2813,"language":26,"meta":27,"style":27},"export default defineNuxtConfig({\n  extends: ['.\u002Fwoonuxt_base'],\n  nitro: {\n    prerender: {\n      concurrency: 10,    \u002F\u002F Pages prerendered in parallel (default)\n      interval: 1000,     \u002F\u002F ms between batches (avoids WordPress rate limits)\n      failOnError: false, \u002F\u002F Continue build if a product page fails\n    },\n  },\n})\n",[29,6688,6689,6701,6719,6728,6737,6752,6767,6783,6787,6791],{"__ignoreMap":27},[32,6690,6691,6693,6695,6697,6699],{"class":34,"line":35},[32,6692,2825],{"class":2824},[32,6694,2828],{"class":2824},[32,6696,2831],{"class":168},[32,6698,2834],{"class":49},[32,6700,2837],{"class":42},[32,6702,6703,6705,6707,6709,6711,6713,6715,6717],{"class":34,"line":46},[32,6704,2843],{"class":2842},[32,6706,2589],{"class":42},[32,6708,2848],{"class":49},[32,6710,2851],{"class":42},[32,6712,2854],{"class":1280},[32,6714,2851],{"class":42},[32,6716,2859],{"class":49},[32,6718,2862],{"class":42},[32,6720,6721,6724,6726],{"class":34,"line":60},[32,6722,6723],{"class":2842},"  nitro",[32,6725,2589],{"class":42},[32,6727,43],{"class":42},[32,6729,6730,6733,6735],{"class":34,"line":71},[32,6731,6732],{"class":2842},"    prerender",[32,6734,2589],{"class":42},[32,6736,43],{"class":42},[32,6738,6739,6742,6744,6747,6749],{"class":34,"line":82},[32,6740,6741],{"class":2842},"      concurrency",[32,6743,2589],{"class":42},[32,6745,6746],{"class":3405}," 10",[32,6748,53],{"class":42},[32,6750,6751],{"class":56},"    \u002F\u002F Pages prerendered in parallel (default)\n",[32,6753,6754,6757,6759,6762,6764],{"class":34,"line":93},[32,6755,6756],{"class":2842},"      interval",[32,6758,2589],{"class":42},[32,6760,6761],{"class":3405}," 1000",[32,6763,53],{"class":42},[32,6765,6766],{"class":56},"     \u002F\u002F ms between batches (avoids WordPress rate limits)\n",[32,6768,6769,6772,6774,6778,6780],{"class":34,"line":104},[32,6770,6771],{"class":2842},"      failOnError",[32,6773,2589],{"class":42},[32,6775,6777],{"class":6776},"sbqyR"," false",[32,6779,53],{"class":42},[32,6781,6782],{"class":56}," \u002F\u002F Continue build if a product page fails\n",[32,6784,6785],{"class":34,"line":115},[32,6786,3413],{"class":42},[32,6788,6789],{"class":34,"line":126},[32,6790,3418],{"class":42},[32,6792,6793,6795],{"class":34,"line":137},[32,6794,162],{"class":42},[32,6796,2874],{"class":49},[10,6798,6799,6800,6803,6804,6807],{},"Increase ",[29,6801,6802],{},"concurrency"," if your WordPress server can handle more parallel requests. Lower ",[29,6805,6806],{},"interval"," if you hit WordPress rate limiting.",[1066,6809,6810],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .saEQR, html code.shiki .saEQR{--shiki-default:#676E95;--shiki-default-font-style:italic}html pre.shiki code .s5Dmg, html code.shiki .s5Dmg{--shiki-default:#FFCB6B}html pre.shiki code .sAklC, html code.shiki .sAklC{--shiki-default:#89DDFF}html pre.shiki code .s-wAU, html code.shiki .s-wAU{--shiki-default:#F07178}html pre.shiki code .sfyAc, html code.shiki .sfyAc{--shiki-default:#C3E88D}html pre.shiki code .s6cf3, html code.shiki .s6cf3{--shiki-default:#89DDFF;--shiki-default-font-style:italic}html pre.shiki code .sdLwU, html code.shiki .sdLwU{--shiki-default:#82AAFF}html pre.shiki code .s0W1g, html code.shiki .s0W1g{--shiki-default:#BABED8}html pre.shiki code .sx098, html code.shiki .sx098{--shiki-default:#F78C6C}html pre.shiki code .sbqyR, html code.shiki .sbqyR{--shiki-default:#FF9CAC}",{"title":27,"searchDepth":46,"depth":46,"links":6812},[6813,6818,6822],{"id":6387,"depth":46,"text":6388,"children":6814},[6815,6816,6817],{"id":6404,"depth":60,"text":6405},{"id":6490,"depth":60,"text":6491},{"id":6549,"depth":60,"text":6550},{"id":6580,"depth":46,"text":6581,"children":6819},[6820,6821],{"id":6590,"depth":60,"text":6591},{"id":6614,"depth":60,"text":6615},{"id":6679,"depth":46,"text":6680},"Caching strategies and ISR configuration for large WooCommerce catalogs",{},{"icon":6826},"i-lucide-gauge","\u002Fconfiguration\u002Fperformance",{"title":6375,"description":6823},"3.configuration\u002F3.performance","EHr8AwBtr_HQhcZ4dXHtInQnYWGIW4xjZ3gQcGOOYMA",1777753060969]