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