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