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