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