[{"data":1,"prerenderedAt":8885},["ShallowReactive",2],{"\u002Fdocs\u002Fhooks":3,"docs-nav":552},{"id":4,"title":5,"body":6,"description":12,"extension":545,"links":546,"meta":547,"navigation":88,"path":548,"seo":549,"stem":550,"__hash__":551},"docs\u002F4.hooks\u002Findex.md","",{"type":7,"value":8,"toc":538},"minimark",[9,13,18,21,26,30,38,203,207,214,386,390,401,527,531,534],[10,11,12],"p",{},"title: Location Hooks\ndescription: Extending WooNuxt with the Location Hooks system (registering outlets and components).",[14,15,17],"h1",{"id":16},"location-hooks","Location Hooks",[10,19,20],{},"The Location Hooks system provides lightweight extension points throughout WooNuxt so you can inject UI and logic without overriding full pages or components.",[22,23,25],"h2",{"id":24},"key-points","Key points",[22,27,29],{"id":28},"registering-a-hook","Registering a hook",[10,31,32,33,37],{},"Create a ",[34,35,36],"code",{},"hooks\u002F"," folder in your app or custom layer and export a registration function. Files are loaded during app startup.",[39,40,44],"pre",{"className":41,"code":42,"language":43,"meta":5,"style":5},"language-ts shiki shiki-themes material-theme-palenight","\u002F\u002F hooks\u002Fproduct.ts\nimport ProductTrustMessage from \"~\u002Fcomponents\u002FProductTrustMessage.vue\";\n\nexport default () => {\n  registerHook({\n    name: \"product.summary.afterPrice\",\n    id: \"product-trust-message\",\n    component: ProductTrustMessage,\n    priority: 10,\n  });\n};\n","ts",[34,45,46,55,83,90,109,123,142,159,172,186,197],{"__ignoreMap":5},[47,48,51],"span",{"class":49,"line":50},"line",1,[47,52,54],{"class":53},"saEQR","\u002F\u002F hooks\u002Fproduct.ts\n",[47,56,58,62,66,69,73,77,80],{"class":49,"line":57},2,[47,59,61],{"class":60},"s6cf3","import",[47,63,65],{"class":64},"s0W1g"," ProductTrustMessage ",[47,67,68],{"class":60},"from",[47,70,72],{"class":71},"sAklC"," \"",[47,74,76],{"class":75},"sfyAc","~\u002Fcomponents\u002FProductTrustMessage.vue",[47,78,79],{"class":71},"\"",[47,81,82],{"class":71},";\n",[47,84,86],{"class":49,"line":85},3,[47,87,89],{"emptyLinePlaceholder":88},true,"\n",[47,91,93,96,99,102,106],{"class":49,"line":92},4,[47,94,95],{"class":60},"export",[47,97,98],{"class":60}," default",[47,100,101],{"class":71}," ()",[47,103,105],{"class":104},"sJ14y"," =>",[47,107,108],{"class":71}," {\n",[47,110,112,116,120],{"class":49,"line":111},5,[47,113,115],{"class":114},"sdLwU","  registerHook",[47,117,119],{"class":118},"s-wAU","(",[47,121,122],{"class":71},"{\n",[47,124,126,129,132,134,137,139],{"class":49,"line":125},6,[47,127,128],{"class":118},"    name",[47,130,131],{"class":71},":",[47,133,72],{"class":71},[47,135,136],{"class":75},"product.summary.afterPrice",[47,138,79],{"class":71},[47,140,141],{"class":71},",\n",[47,143,145,148,150,152,155,157],{"class":49,"line":144},7,[47,146,147],{"class":118},"    id",[47,149,131],{"class":71},[47,151,72],{"class":71},[47,153,154],{"class":75},"product-trust-message",[47,156,79],{"class":71},[47,158,141],{"class":71},[47,160,162,165,167,170],{"class":49,"line":161},8,[47,163,164],{"class":118},"    component",[47,166,131],{"class":71},[47,168,169],{"class":64}," ProductTrustMessage",[47,171,141],{"class":71},[47,173,175,178,180,184],{"class":49,"line":174},9,[47,176,177],{"class":118},"    priority",[47,179,131],{"class":71},[47,181,183],{"class":182},"sx098"," 10",[47,185,141],{"class":71},[47,187,189,192,195],{"class":49,"line":188},10,[47,190,191],{"class":71},"  }",[47,193,194],{"class":118},")",[47,196,82],{"class":71},[47,198,200],{"class":49,"line":199},11,[47,201,202],{"class":71},"};\n",[22,204,206],{"id":205},"hook-component","Hook component",[10,208,209,210,213],{},"The registered component receives a ",[34,211,212],{},"ctx"," prop with location-specific data.",[39,215,219],{"className":216,"code":217,"language":218,"meta":5,"style":5},"language-vue shiki shiki-themes material-theme-palenight","\u003Cscript setup lang=\"ts\">\ndefineProps\u003C{\n  ctx: {\n    product?: { name?: string; salePrice?: string | null }\n  }\n}>();\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003Cdiv class=\"p-3 mt-4 text-sm border rounded-md\">\n    Free returns and secure checkout for {{ ctx.product?.name || \"this product\" }}.\n  \u003C\u002Fdiv>\n\u003C\u002Ftemplate>\n","vue",[34,220,221,247,255,264,303,308,318,327,331,340,362,367,377],{"__ignoreMap":5},[47,222,223,226,229,232,235,238,240,242,244],{"class":49,"line":50},[47,224,225],{"class":71},"\u003C",[47,227,228],{"class":118},"script",[47,230,231],{"class":104}," setup",[47,233,234],{"class":104}," lang",[47,236,237],{"class":71},"=",[47,239,79],{"class":71},[47,241,43],{"class":75},[47,243,79],{"class":71},[47,245,246],{"class":71},">\n",[47,248,249,252],{"class":49,"line":57},[47,250,251],{"class":114},"defineProps",[47,253,254],{"class":71},"\u003C{\n",[47,256,257,260,262],{"class":49,"line":85},[47,258,259],{"class":118},"  ctx",[47,261,131],{"class":71},[47,263,108],{"class":71},[47,265,266,269,272,275,278,280,284,287,290,292,294,297,300],{"class":49,"line":92},[47,267,268],{"class":118},"    product",[47,270,271],{"class":71},"?:",[47,273,274],{"class":71}," {",[47,276,277],{"class":118}," name",[47,279,271],{"class":71},[47,281,283],{"class":282},"s5Dmg"," string",[47,285,286],{"class":71},";",[47,288,289],{"class":118}," salePrice",[47,291,271],{"class":71},[47,293,283],{"class":282},[47,295,296],{"class":71}," |",[47,298,299],{"class":282}," null",[47,301,302],{"class":71}," }\n",[47,304,305],{"class":49,"line":111},[47,306,307],{"class":71},"  }\n",[47,309,310,313,316],{"class":49,"line":125},[47,311,312],{"class":71},"}>",[47,314,315],{"class":64},"()",[47,317,82],{"class":71},[47,319,320,323,325],{"class":49,"line":144},[47,321,322],{"class":71},"\u003C\u002F",[47,324,228],{"class":118},[47,326,246],{"class":71},[47,328,329],{"class":49,"line":161},[47,330,89],{"emptyLinePlaceholder":88},[47,332,333,335,338],{"class":49,"line":174},[47,334,225],{"class":71},[47,336,337],{"class":118},"template",[47,339,246],{"class":71},[47,341,342,345,348,351,353,355,358,360],{"class":49,"line":188},[47,343,344],{"class":71},"  \u003C",[47,346,347],{"class":118},"div",[47,349,350],{"class":104}," class",[47,352,237],{"class":71},[47,354,79],{"class":71},[47,356,357],{"class":75},"p-3 mt-4 text-sm border rounded-md",[47,359,79],{"class":71},[47,361,246],{"class":71},[47,363,364],{"class":49,"line":199},[47,365,366],{"class":64},"    Free returns and secure checkout for {{ ctx.product?.name || \"this product\" }}.\n",[47,368,370,373,375],{"class":49,"line":369},12,[47,371,372],{"class":71},"  \u003C\u002F",[47,374,347],{"class":118},[47,376,246],{"class":71},[47,378,380,382,384],{"class":49,"line":379},13,[47,381,322],{"class":71},[47,383,337],{"class":118},[47,385,246],{"class":71},[22,387,389],{"id":388},"conditional-rendering-priority","Conditional rendering & priority",[10,391,392,393,396,397,400],{},"You can provide a ",[34,394,395],{},"when"," predicate and ",[34,398,399],{},"priority"," to control rendering order and conditional display.",[39,402,404],{"className":41,"code":403,"language":43,"meta":5,"style":5},"export default () => {\n  registerHook({\n    name: \"product.summary.beforeTitle\",\n    id: \"sale-notice\",\n    component: SaleNotice,\n    priority: 5,\n    when: ({ product }) => Boolean(product?.salePrice),\n  });\n};\n",[34,405,406,418,426,441,456,467,478,515,523],{"__ignoreMap":5},[47,407,408,410,412,414,416],{"class":49,"line":50},[47,409,95],{"class":60},[47,411,98],{"class":60},[47,413,101],{"class":71},[47,415,105],{"class":104},[47,417,108],{"class":71},[47,419,420,422,424],{"class":49,"line":57},[47,421,115],{"class":114},[47,423,119],{"class":118},[47,425,122],{"class":71},[47,427,428,430,432,434,437,439],{"class":49,"line":85},[47,429,128],{"class":118},[47,431,131],{"class":71},[47,433,72],{"class":71},[47,435,436],{"class":75},"product.summary.beforeTitle",[47,438,79],{"class":71},[47,440,141],{"class":71},[47,442,443,445,447,449,452,454],{"class":49,"line":92},[47,444,147],{"class":118},[47,446,131],{"class":71},[47,448,72],{"class":71},[47,450,451],{"class":75},"sale-notice",[47,453,79],{"class":71},[47,455,141],{"class":71},[47,457,458,460,462,465],{"class":49,"line":111},[47,459,164],{"class":118},[47,461,131],{"class":71},[47,463,464],{"class":64}," SaleNotice",[47,466,141],{"class":71},[47,468,469,471,473,476],{"class":49,"line":125},[47,470,177],{"class":118},[47,472,131],{"class":71},[47,474,475],{"class":182}," 5",[47,477,141],{"class":71},[47,479,480,483,485,488,492,495,497,500,502,505,508,511,513],{"class":49,"line":144},[47,481,482],{"class":114},"    when",[47,484,131],{"class":71},[47,486,487],{"class":71}," ({",[47,489,491],{"class":490},"s7ZW3"," product",[47,493,494],{"class":71}," })",[47,496,105],{"class":104},[47,498,499],{"class":114}," Boolean",[47,501,119],{"class":118},[47,503,504],{"class":64},"product",[47,506,507],{"class":71},"?.",[47,509,510],{"class":64},"salePrice",[47,512,194],{"class":118},[47,514,141],{"class":71},[47,516,517,519,521],{"class":49,"line":161},[47,518,191],{"class":71},[47,520,194],{"class":118},[47,522,82],{"class":71},[47,524,525],{"class":49,"line":174},[47,526,202],{"class":71},[22,528,530],{"id":529},"examples-and-deeper-reference","Examples and deeper reference",[10,532,533],{},"See the code examples and API reference in the project docs. If you'd like, I can add a dedicated deep-dive page with more examples and API details.",[535,536,537],"style",{},"html pre.shiki code .saEQR, html code.shiki .saEQR{--shiki-default:#676E95;--shiki-default-font-style:italic}html pre.shiki code .s6cf3, html code.shiki .s6cf3{--shiki-default:#89DDFF;--shiki-default-font-style:italic}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 .sfyAc, html code.shiki .sfyAc{--shiki-default:#C3E88D}html pre.shiki code .sJ14y, html code.shiki .sJ14y{--shiki-default:#C792EA}html pre.shiki code .sdLwU, html code.shiki .sdLwU{--shiki-default:#82AAFF}html pre.shiki code .s-wAU, html code.shiki .s-wAU{--shiki-default:#F07178}html pre.shiki code .sx098, html code.shiki .sx098{--shiki-default:#F78C6C}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 .s7ZW3, html code.shiki .s7ZW3{--shiki-default:#BABED8;--shiki-default-font-style:italic}",{"title":5,"searchDepth":57,"depth":57,"links":539},[540,541,542,543,544],{"id":24,"depth":57,"text":25},{"id":28,"depth":57,"text":29},{"id":205,"depth":57,"text":206},{"id":388,"depth":57,"text":389},{"id":529,"depth":57,"text":530},"md",null,{},"\u002Fhooks",{"description":12},"4.hooks\u002Findex","VF6GdaH9MmjUnCZcClD0kx_50hLdiEV5vdIZb6lu2Es",[553,910,1721,2236,3031,3639,3823,3941,5215,5566,6618,7075,8483],{"id":554,"title":555,"body":556,"description":902,"extension":545,"links":546,"meta":903,"navigation":904,"path":906,"seo":907,"stem":908,"__hash__":909},"docs\u002F1.getting-started\u002F1.index.md","Introduction",{"type":7,"value":557,"toc":895},[558,566,570,573,607,611,614,676,680,687,695,698,712,716,719,846,853,857,892],[10,559,560,561,565],{},"WooNuxt is the ",[562,563,564],"strong",{},"Next Generation Front-End for WooCommerce",". A modern, headless eCommerce solution that combines the power of WooCommerce with the performance of Nuxt.js. Build blazing-fast, SEO-friendly online stores with complete control over your frontend while leveraging WooCommerce's robust backend.",[22,567,569],{"id":568},"what-is-woonuxt","What is WooNuxt?",[10,571,572],{},"WooNuxt provides a complete eCommerce frontend built with:",[574,575,576,583,589,595,601],"ul",{},[577,578,579,582],"li",{},[562,580,581],{},"Nuxt.js 4"," - The latest version of the Vue.js framework",[577,584,585,588],{},[562,586,587],{},"WooCommerce"," - Industry-standard eCommerce platform",[577,590,591,594],{},[562,592,593],{},"GraphQL"," - Efficient data fetching via WPGraphQL & WooGraphQL",[577,596,597,600],{},[562,598,599],{},"Tailwind CSS"," - Utility-first styling framework",[577,602,603,606],{},[562,604,605],{},"Vue 3"," - Reactive, component-based architecture",[22,608,610],{"id":609},"key-features","Key Features",[10,612,613],{},"WooNuxt comes with everything you need to build a modern online store:",[574,615,616,622,628,634,640,646,652,658,664,670],{},[577,617,618,621],{},[562,619,620],{},"🚀 Lightning Fast",": Server-side rendering and optimized performance",[577,623,624,627],{},[562,625,626],{},"🛒 Complete Cart & Checkout",": Full shopping experience with secure payments",[577,629,630,633],{},[562,631,632],{},"🔐 User Authentication",": Customer accounts with JWT-based auth",[577,635,636,639],{},[562,637,638],{},"💳 Stripe Integration",": Built-in payment processing",[577,641,642,645],{},[562,643,644],{},"🔍 Advanced Filtering",": Dynamic product filters and search",[577,647,648,651],{},[562,649,650],{},"📱 Responsive Design",": Mobile-first, works on all devices",[577,653,654,657],{},[562,655,656],{},"🎨 Fully Customizable",": Built with Nuxt Layers for easy overrides",[577,659,660,663],{},[562,661,662],{},"♿ Accessible",": WCAG compliant components",[577,665,666,669],{},[562,667,668],{},"🌍 i18n Ready",": Multi-language support included",[577,671,672,675],{},[562,673,674],{},"🖼️ Image Optimization",": Automatic image optimization with Nuxt Image",[22,677,679],{"id":678},"architecture","Architecture",[10,681,682,683,686],{},"WooNuxt uses a ",[562,684,685],{},"Nuxt Layers"," architecture - similar to WordPress parent\u002Fchild themes:",[39,688,693],{"className":689,"code":691,"language":692},[690],"language-text","\nwoonuxt\u002F\n├── woonuxt_base\u002F # Core functionality (parent)\n└── app\u002F # Your customizations (child)\n\n","text",[34,694,691],{"__ignoreMap":5},[10,696,697],{},"This means:",[574,699,700,703,706,709],{},[577,701,702],{},"✅ Easy updates to core without losing customizations",[577,704,705],{},"✅ Override any component, page, or composable",[577,707,708],{},"✅ Clean separation of concerns",[577,710,711],{},"✅ Full control over your implementation",[22,713,715],{"id":714},"quick-start","Quick Start",[10,717,718],{},"Get started in minutes:",[39,720,724],{"className":721,"code":722,"language":723,"meta":5,"style":5},"language-bash shiki shiki-themes material-theme-palenight","# Clone the repository\ngit clone https:\u002F\u002Fgithub.com\u002Fscottyzen\u002Fwoonuxt.git\ncd woonuxt\n\n# Install dependencies\nnpm install\n# or: yarn install\n# or: pnpm install\n\n# Create environment file\ncp .env.example .env\n\n# Edit .env with your WordPress URL\n# GQL_HOST=https:\u002F\u002Fyoursite.com\u002Fgraphql\n\n# Start development server\nnpm run dev\n# or: yarn dev\n# or: pnpm dev\n","bash",[34,725,726,731,742,750,754,759,767,772,777,781,786,797,801,806,812,817,823,834,840],{"__ignoreMap":5},[47,727,728],{"class":49,"line":50},[47,729,730],{"class":53},"# Clone the repository\n",[47,732,733,736,739],{"class":49,"line":57},[47,734,735],{"class":282},"git",[47,737,738],{"class":75}," clone",[47,740,741],{"class":75}," https:\u002F\u002Fgithub.com\u002Fscottyzen\u002Fwoonuxt.git\n",[47,743,744,747],{"class":49,"line":85},[47,745,746],{"class":114},"cd",[47,748,749],{"class":75}," woonuxt\n",[47,751,752],{"class":49,"line":92},[47,753,89],{"emptyLinePlaceholder":88},[47,755,756],{"class":49,"line":111},[47,757,758],{"class":53},"# Install dependencies\n",[47,760,761,764],{"class":49,"line":125},[47,762,763],{"class":282},"npm",[47,765,766],{"class":75}," install\n",[47,768,769],{"class":49,"line":144},[47,770,771],{"class":53},"# or: yarn install\n",[47,773,774],{"class":49,"line":161},[47,775,776],{"class":53},"# or: pnpm install\n",[47,778,779],{"class":49,"line":174},[47,780,89],{"emptyLinePlaceholder":88},[47,782,783],{"class":49,"line":188},[47,784,785],{"class":53},"# Create environment file\n",[47,787,788,791,794],{"class":49,"line":199},[47,789,790],{"class":282},"cp",[47,792,793],{"class":75}," .env.example",[47,795,796],{"class":75}," .env\n",[47,798,799],{"class":49,"line":369},[47,800,89],{"emptyLinePlaceholder":88},[47,802,803],{"class":49,"line":379},[47,804,805],{"class":53},"# Edit .env with your WordPress URL\n",[47,807,809],{"class":49,"line":808},14,[47,810,811],{"class":53},"# GQL_HOST=https:\u002F\u002Fyoursite.com\u002Fgraphql\n",[47,813,815],{"class":49,"line":814},15,[47,816,89],{"emptyLinePlaceholder":88},[47,818,820],{"class":49,"line":819},16,[47,821,822],{"class":53},"# Start development server\n",[47,824,826,828,831],{"class":49,"line":825},17,[47,827,763],{"class":282},[47,829,830],{"class":75}," run",[47,832,833],{"class":75}," dev\n",[47,835,837],{"class":49,"line":836},18,[47,838,839],{"class":53},"# or: yarn dev\n",[47,841,843],{"class":49,"line":842},19,[47,844,845],{"class":53},"# or: pnpm dev\n",[10,847,848,849,852],{},"Your store will be running at ",[34,850,851],{},"http:\u002F\u002Flocalhost:3000"," 🎉",[22,854,856],{"id":855},"next-steps","Next Steps",[858,859,860,869,877,884],"card-group",{},[861,862,866],"card",{"icon":863,"title":864,"to":865},"i-lucide-download","Installation","\u002Fdocs\u002Fgetting-started\u002Finstallation",[10,867,868],{},"Step-by-step installation guide",[861,870,874],{"icon":871,"title":872,"to":873},"i-lucide-server","WordPress Setup","\u002Fdocs\u002Fwordpress-setup",[10,875,876],{},"Configure your WordPress backend",[861,878,881],{"icon":879,"title":715,"to":880},"i-lucide-code","\u002Fdocs\u002Fgetting-started\u002Fquick-start",[10,882,883],{},"Get up and running quickly",[861,885,889],{"icon":886,"title":887,"to":888},"i-lucide-sliders","Plugin Setup","\u002Fdocs\u002Fwordpress-setup\u002Fplugins",[10,890,891],{},"Install and configure WooNuxt Settings",[535,893,894],{},"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":5,"searchDepth":57,"depth":57,"links":896},[897,898,899,900,901],{"id":568,"depth":57,"text":569},{"id":609,"depth":57,"text":610},{"id":678,"depth":57,"text":679},{"id":714,"depth":57,"text":715},{"id":855,"depth":57,"text":856},"Welcome to WooNuxt - Modern headless eCommerce with WooCommerce and Nuxt.js",{},{"icon":905},"i-lucide-house","\u002Fgetting-started",{"title":555,"description":902},"1.getting-started\u002F1.index","SN5RIBfETaeRkCglu_xAcCOAAp9lgpbb36XRRtpc9ng",{"id":911,"title":864,"body":912,"description":1714,"extension":545,"links":546,"meta":1715,"navigation":1716,"path":1717,"seo":1718,"stem":1719,"__hash__":1720},"docs\u002F1.getting-started\u002F2.installation.md",{"type":7,"value":913,"toc":1698},[914,917,921,924,944,948,951,999,1002,1006,1009,1022,1029,1149,1261,1265,1272,1292,1303,1313,1317,1320,1365,1368,1374,1380,1384,1387,1392,1453,1485,1489,1502,1513,1517,1529,1533,1579,1586,1605,1609,1612,1647,1651,1663,1675,1677,1695],[10,915,916],{},"This guide will walk you through installing WooNuxt and getting your first headless eCommerce store running.",[22,918,920],{"id":919},"step-1-clone-repository","Step 1: Clone Repository",[10,922,923],{},"Clone the WooNuxt repository to your local machine:",[39,925,928],{"className":721,"code":926,"filename":927,"language":723,"meta":5,"style":5},"git clone https:\u002F\u002Fgithub.com\u002Fscottyzen\u002Fwoonuxt.git\ncd woonuxt\n","Terminal",[34,929,930,938],{"__ignoreMap":5},[47,931,932,934,936],{"class":49,"line":50},[47,933,735],{"class":282},[47,935,738],{"class":75},[47,937,741],{"class":75},[47,939,940,942],{"class":49,"line":57},[47,941,746],{"class":114},[47,943,749],{"class":75},[22,945,947],{"id":946},"step-2-install-dependencies","Step 2: Install Dependencies",[10,949,950],{},"Install the required Node.js packages:",[39,952,954],{"className":721,"code":953,"filename":927,"language":723,"meta":5,"style":5},"# Using npm\nnpm install\n\n# Or using yarn\nyarn install\n\n# Or using pnpm\npnpm install\n",[34,955,956,961,967,971,976,983,987,992],{"__ignoreMap":5},[47,957,958],{"class":49,"line":50},[47,959,960],{"class":53},"# Using npm\n",[47,962,963,965],{"class":49,"line":57},[47,964,763],{"class":282},[47,966,766],{"class":75},[47,968,969],{"class":49,"line":85},[47,970,89],{"emptyLinePlaceholder":88},[47,972,973],{"class":49,"line":92},[47,974,975],{"class":53},"# Or using yarn\n",[47,977,978,981],{"class":49,"line":111},[47,979,980],{"class":282},"yarn",[47,982,766],{"class":75},[47,984,985],{"class":49,"line":125},[47,986,89],{"emptyLinePlaceholder":88},[47,988,989],{"class":49,"line":144},[47,990,991],{"class":53},"# Or using pnpm\n",[47,993,994,997],{"class":49,"line":161},[47,995,996],{"class":282},"pnpm",[47,998,766],{"class":75},[10,1000,1001],{},"This will install all dependencies including Nuxt.js, Vue, and other required packages.",[22,1003,1005],{"id":1004},"step-3-environment-configuration","Step 3: Environment Configuration",[10,1007,1008],{},"Create your environment configuration file:",[39,1010,1012],{"className":721,"code":1011,"filename":927,"language":723,"meta":5,"style":5},"cp .env.example .env\n",[34,1013,1014],{"__ignoreMap":5},[47,1015,1016,1018,1020],{"class":49,"line":50},[47,1017,790],{"class":282},[47,1019,793],{"class":75},[47,1021,796],{"class":75},[10,1023,1024,1025,1028],{},"Edit the ",[34,1026,1027],{},".env"," file with your WordPress site details:",[39,1030,1034],{"className":1031,"code":1032,"filename":1027,"language":1033,"meta":5,"style":5},"language-env shiki shiki-themes material-theme-palenight","# ─── Required ────────────────────────────────────────────────\n# WordPress GraphQL endpoint\nGQL_HOST=https:\u002F\u002Fyoursite.com\u002Fgraphql\n\n# Comma-separated list of image domains for @nuxt\u002Fimage optimization\nNUXT_IMAGE_DOMAINS=yoursite.com,cdn.yoursite.com\n\n# ─── Optional ────────────────────────────────────────────────\n# Origin header sent with GraphQL requests (defaults to http:\u002F\u002Flocalhost:3000)\nAPP_HOST=http:\u002F\u002Flocalhost:3000\n\n# ISR cache lifetime in seconds for product\u002Fcategory pages (default: 3600)\n# Increase for large catalogs (10 000+ products) to reduce build times\nCATALOG_ISR_TTL=3600\n\n# Override products per page set in WooNuxt Settings plugin\nNUXT_PUBLIC_PRODUCTS_PER_PAGE=24\n\n# Stripe publishable key (overrides value fetched from WordPress)\nNUXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=pk_test_...\n\n# Override brand primary color (hex, overrides WooNuxt Settings plugin value)\nPRIMARY_COLOR=#7F54B2\n","env",[34,1035,1036,1041,1046,1051,1055,1060,1065,1069,1074,1079,1084,1088,1093,1098,1103,1107,1112,1117,1121,1126,1132,1137,1143],{"__ignoreMap":5},[47,1037,1038],{"class":49,"line":50},[47,1039,1040],{},"# ─── Required ────────────────────────────────────────────────\n",[47,1042,1043],{"class":49,"line":57},[47,1044,1045],{},"# WordPress GraphQL endpoint\n",[47,1047,1048],{"class":49,"line":85},[47,1049,1050],{},"GQL_HOST=https:\u002F\u002Fyoursite.com\u002Fgraphql\n",[47,1052,1053],{"class":49,"line":92},[47,1054,89],{"emptyLinePlaceholder":88},[47,1056,1057],{"class":49,"line":111},[47,1058,1059],{},"# Comma-separated list of image domains for @nuxt\u002Fimage optimization\n",[47,1061,1062],{"class":49,"line":125},[47,1063,1064],{},"NUXT_IMAGE_DOMAINS=yoursite.com,cdn.yoursite.com\n",[47,1066,1067],{"class":49,"line":144},[47,1068,89],{"emptyLinePlaceholder":88},[47,1070,1071],{"class":49,"line":161},[47,1072,1073],{},"# ─── Optional ────────────────────────────────────────────────\n",[47,1075,1076],{"class":49,"line":174},[47,1077,1078],{},"# Origin header sent with GraphQL requests (defaults to http:\u002F\u002Flocalhost:3000)\n",[47,1080,1081],{"class":49,"line":188},[47,1082,1083],{},"APP_HOST=http:\u002F\u002Flocalhost:3000\n",[47,1085,1086],{"class":49,"line":199},[47,1087,89],{"emptyLinePlaceholder":88},[47,1089,1090],{"class":49,"line":369},[47,1091,1092],{},"# ISR cache lifetime in seconds for product\u002Fcategory pages (default: 3600)\n",[47,1094,1095],{"class":49,"line":379},[47,1096,1097],{},"# Increase for large catalogs (10 000+ products) to reduce build times\n",[47,1099,1100],{"class":49,"line":808},[47,1101,1102],{},"CATALOG_ISR_TTL=3600\n",[47,1104,1105],{"class":49,"line":814},[47,1106,89],{"emptyLinePlaceholder":88},[47,1108,1109],{"class":49,"line":819},[47,1110,1111],{},"# Override products per page set in WooNuxt Settings plugin\n",[47,1113,1114],{"class":49,"line":825},[47,1115,1116],{},"NUXT_PUBLIC_PRODUCTS_PER_PAGE=24\n",[47,1118,1119],{"class":49,"line":836},[47,1120,89],{"emptyLinePlaceholder":88},[47,1122,1123],{"class":49,"line":842},[47,1124,1125],{},"# Stripe publishable key (overrides value fetched from WordPress)\n",[47,1127,1129],{"class":49,"line":1128},20,[47,1130,1131],{},"NUXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=pk_test_...\n",[47,1133,1135],{"class":49,"line":1134},21,[47,1136,89],{"emptyLinePlaceholder":88},[47,1138,1140],{"class":49,"line":1139},22,[47,1141,1142],{},"# Override brand primary color (hex, overrides WooNuxt Settings plugin value)\n",[47,1144,1146],{"class":49,"line":1145},23,[47,1147,1148],{},"PRIMARY_COLOR=#7F54B2\n",[1150,1151,1152,1168],"table",{},[1153,1154,1155],"thead",{},[1156,1157,1158,1162,1165],"tr",{},[1159,1160,1161],"th",{},"Variable",[1159,1163,1164],{},"Required",[1159,1166,1167],{},"Description",[1169,1170,1171,1185,1197,1210,1225,1237,1249],"tbody",{},[1156,1172,1173,1179,1182],{},[1174,1175,1176],"td",{},[34,1177,1178],{},"GQL_HOST",[1174,1180,1181],{},"✅",[1174,1183,1184],{},"WordPress GraphQL endpoint",[1156,1186,1187,1192,1194],{},[1174,1188,1189],{},[34,1190,1191],{},"NUXT_IMAGE_DOMAINS",[1174,1193,1181],{},[1174,1195,1196],{},"Allowed image domains for optimization",[1156,1198,1199,1204,1207],{},[1174,1200,1201],{},[34,1202,1203],{},"APP_HOST",[1174,1205,1206],{},"—",[1174,1208,1209],{},"Origin header for GraphQL requests",[1156,1211,1212,1217,1219],{},[1174,1213,1214],{},[34,1215,1216],{},"CATALOG_ISR_TTL",[1174,1218,1206],{},[1174,1220,1221,1222,194],{},"ISR cache TTL in seconds (default ",[34,1223,1224],{},"3600",[1156,1226,1227,1232,1234],{},[1174,1228,1229],{},[34,1230,1231],{},"NUXT_PUBLIC_PRODUCTS_PER_PAGE",[1174,1233,1206],{},[1174,1235,1236],{},"Overrides plugin setting",[1156,1238,1239,1244,1246],{},[1174,1240,1241],{},[34,1242,1243],{},"NUXT_PUBLIC_STRIPE_PUBLISHABLE_KEY",[1174,1245,1206],{},[1174,1247,1248],{},"Overrides Stripe key from plugin",[1156,1250,1251,1256,1258],{},[1174,1252,1253],{},[34,1254,1255],{},"PRIMARY_COLOR",[1174,1257,1206],{},[1174,1259,1260],{},"Overrides brand color from plugin",[22,1262,1264],{"id":1263},"step-4-wordpress-setup","Step 4: WordPress Setup",[10,1266,1267,1268,1271],{},"Before starting the frontend, you need to configure WordPress. Download and install the ",[562,1269,1270],{},"WooNuxt Settings Plugin"," which will automatically install and configure:",[574,1273,1274,1280,1286],{},[577,1275,1276,1279],{},[562,1277,1278],{},"WPGraphQL 2.12.0+"," - GraphQL API for WordPress",[577,1281,1282,1285],{},[562,1283,1284],{},"WooGraphQL 1.0.2+"," - WooCommerce integration for GraphQL",[577,1287,1288,1291],{},[562,1289,1290],{},"WPGraphQL Headless Login 0.4.4+"," - Authentication for headless sites",[10,1293,1294],{},[562,1295,1296],{},[1297,1298,1302],"a",{"href":1299,"rel":1300},"https:\u002F\u002Fgithub.com\u002Fscottyzen\u002Fwoonuxt-settings\u002Freleases\u002Flatest\u002Fdownload\u002Fwoonuxt-settings.zip",[1301],"nofollow","Download woonuxt-settings.zip",[1304,1305,1306],"tip",{},[10,1307,1308,1309,1312],{},"See the ",[1297,1310,1311],{"href":873},"WordPress Setup Guide"," for complete installation instructions.",[22,1314,1316],{"id":1315},"step-5-start-development-server","Step 5: Start Development Server",[10,1318,1319],{},"Once WordPress is configured, start your WooNuxt development server:",[39,1321,1323],{"className":721,"code":1322,"filename":927,"language":723,"meta":5,"style":5},"# Using npm\nnpm run dev\n\n# Or using yarn\nyarn dev\n\n# Or using pnpm\npnpm dev\n",[34,1324,1325,1329,1337,1341,1345,1351,1355,1359],{"__ignoreMap":5},[47,1326,1327],{"class":49,"line":50},[47,1328,960],{"class":53},[47,1330,1331,1333,1335],{"class":49,"line":57},[47,1332,763],{"class":282},[47,1334,830],{"class":75},[47,1336,833],{"class":75},[47,1338,1339],{"class":49,"line":85},[47,1340,89],{"emptyLinePlaceholder":88},[47,1342,1343],{"class":49,"line":92},[47,1344,975],{"class":53},[47,1346,1347,1349],{"class":49,"line":111},[47,1348,980],{"class":282},[47,1350,833],{"class":75},[47,1352,1353],{"class":49,"line":125},[47,1354,89],{"emptyLinePlaceholder":88},[47,1356,1357],{"class":49,"line":144},[47,1358,991],{"class":53},[47,1360,1361,1363],{"class":49,"line":161},[47,1362,996],{"class":282},[47,1364,833],{"class":75},[10,1366,1367],{},"Your store should now be running at:",[39,1369,1372],{"className":1370,"code":1371,"language":692},[690],"http:\u002F\u002Flocalhost:3000\n",[34,1373,1371],{"__ignoreMap":5},[1375,1376,1377],"success",{},[10,1378,1379],{},"🎉 Congratulations! Your WooNuxt store is now running.",[22,1381,1383],{"id":1382},"optional-ssl-for-local-development","Optional: SSL for Local Development",[10,1385,1386],{},"If you need HTTPS for local development (for testing payment gateways, PWA features, or third-party integrations):",[1388,1389,1391],"h3",{"id":1390},"install-mkcert","Install mkcert",[39,1393,1396],{"className":721,"code":1394,"filename":1395,"language":723,"meta":5,"style":5},"# macOS (Homebrew)\nbrew install mkcert\n\n# Linux\nsudo apt install mkcert   # Debian\u002FUbuntu\nsudo yum install mkcert    # Fedora\u002FRHEL\n","macOS\u002FLinux",[34,1397,1398,1403,1414,1418,1423,1439],{"__ignoreMap":5},[47,1399,1400],{"class":49,"line":50},[47,1401,1402],{"class":53},"# macOS (Homebrew)\n",[47,1404,1405,1408,1411],{"class":49,"line":57},[47,1406,1407],{"class":282},"brew",[47,1409,1410],{"class":75}," install",[47,1412,1413],{"class":75}," mkcert\n",[47,1415,1416],{"class":49,"line":85},[47,1417,89],{"emptyLinePlaceholder":88},[47,1419,1420],{"class":49,"line":92},[47,1421,1422],{"class":53},"# Linux\n",[47,1424,1425,1428,1431,1433,1436],{"class":49,"line":111},[47,1426,1427],{"class":282},"sudo",[47,1429,1430],{"class":75}," apt",[47,1432,1410],{"class":75},[47,1434,1435],{"class":75}," mkcert",[47,1437,1438],{"class":53},"   # Debian\u002FUbuntu\n",[47,1440,1441,1443,1446,1448,1450],{"class":49,"line":125},[47,1442,1427],{"class":282},[47,1444,1445],{"class":75}," yum",[47,1447,1410],{"class":75},[47,1449,1435],{"class":75},[47,1451,1452],{"class":53},"    # Fedora\u002FRHEL\n",[39,1454,1459],{"className":1455,"code":1456,"filename":1457,"language":1458,"meta":5,"style":5},"language-powershell shiki shiki-themes material-theme-palenight","# Using Chocolatey\nchoco install mkcert\n\n# Or using Scoop\nscoop install mkcert\n","Windows","powershell",[34,1460,1461,1466,1471,1475,1480],{"__ignoreMap":5},[47,1462,1463],{"class":49,"line":50},[47,1464,1465],{},"# Using Chocolatey\n",[47,1467,1468],{"class":49,"line":57},[47,1469,1470],{},"choco install mkcert\n",[47,1472,1473],{"class":49,"line":85},[47,1474,89],{"emptyLinePlaceholder":88},[47,1476,1477],{"class":49,"line":92},[47,1478,1479],{},"# Or using Scoop\n",[47,1481,1482],{"class":49,"line":111},[47,1483,1484],{},"scoop install mkcert\n",[1388,1486,1488],{"id":1487},"generate-certificate","Generate Certificate",[39,1490,1492],{"className":721,"code":1491,"filename":927,"language":723,"meta":5,"style":5},"mkcert localhost\n",[34,1493,1494],{"__ignoreMap":5},[47,1495,1496,1499],{"class":49,"line":50},[47,1497,1498],{"class":282},"mkcert",[47,1500,1501],{"class":75}," localhost\n",[10,1503,1504,1505,1508,1509,1512],{},"This creates ",[34,1506,1507],{},"localhost.pem"," and ",[34,1510,1511],{},"localhost-key.pem"," files in your current directory.",[1388,1514,1516],{"id":1515},"install-certificate-authority","Install Certificate Authority",[39,1518,1520],{"className":721,"code":1519,"filename":927,"language":723,"meta":5,"style":5},"mkcert -install\n",[34,1521,1522],{"__ignoreMap":5},[47,1523,1524,1526],{"class":49,"line":50},[47,1525,1498],{"class":282},[47,1527,1528],{"class":75}," -install\n",[1388,1530,1532],{"id":1531},"start-with-ssl","Start with SSL",[39,1534,1536],{"className":721,"code":1535,"filename":927,"language":723,"meta":5,"style":5},"# Using npm\nnpm run dev:ssl\n\n# Or using yarn\nyarn dev:ssl\n\n# Or using pnpm\npnpm dev:ssl\n",[34,1537,1538,1542,1551,1555,1559,1565,1569,1573],{"__ignoreMap":5},[47,1539,1540],{"class":49,"line":50},[47,1541,960],{"class":53},[47,1543,1544,1546,1548],{"class":49,"line":57},[47,1545,763],{"class":282},[47,1547,830],{"class":75},[47,1549,1550],{"class":75}," dev:ssl\n",[47,1552,1553],{"class":49,"line":85},[47,1554,89],{"emptyLinePlaceholder":88},[47,1556,1557],{"class":49,"line":92},[47,1558,975],{"class":53},[47,1560,1561,1563],{"class":49,"line":111},[47,1562,980],{"class":282},[47,1564,1550],{"class":75},[47,1566,1567],{"class":49,"line":125},[47,1568,89],{"emptyLinePlaceholder":88},[47,1570,1571],{"class":49,"line":144},[47,1572,991],{"class":53},[47,1574,1575,1577],{"class":49,"line":161},[47,1576,996],{"class":282},[47,1578,1550],{"class":75},[10,1580,1581,1582,1585],{},"Your store will now be available at ",[34,1583,1584],{},"https:\u002F\u002Flocalhost:3000"," with a valid SSL certificate.",[1304,1587,1588],{},[10,1589,1590,1591,1594,1595,1598,1599,1604],{},"The ",[34,1592,1593],{},"dev:ssl"," script must be configured in your ",[34,1596,1597],{},"package.json",". Check the ",[1297,1600,1603],{"href":1601,"rel":1602},"https:\u002F\u002Fgithub.com\u002Fscottyzen\u002Fwoonuxt",[1301],"WooNuxt repository"," for the latest configuration.",[22,1606,1608],{"id":1607},"verify-installation","Verify Installation",[10,1610,1611],{},"Check that everything is working:",[1613,1614,1615,1623,1629,1635,1641],"ol",{},[577,1616,1617,1620,1621],{},[562,1618,1619],{},"Homepage loads"," - Navigate to ",[34,1622,851],{},[577,1624,1625,1628],{},[562,1626,1627],{},"Products display"," - Products from WooCommerce appear",[577,1630,1631,1634],{},[562,1632,1633],{},"No errors"," - Check browser console (F12) for errors",[577,1636,1637,1640],{},[562,1638,1639],{},"Images load"," - Product images display correctly",[577,1642,1643,1646],{},[562,1644,1645],{},"Navigation works"," - Menu and links function properly",[22,1648,1650],{"id":1649},"common-issues","Common Issues",[10,1652,1653,1656,1657,1659,1660,1662],{},[562,1654,1655],{},"GraphQL connection errors?"," Verify your ",[34,1658,1178],{}," in ",[34,1661,1027],{}," matches your WordPress GraphQL endpoint and ensure the WooNuxt Settings plugin is installed.",[10,1664,1665,1668,1669,1674],{},[562,1666,1667],{},"Need help?"," Visit ",[1297,1670,1673],{"href":1671,"rel":1672},"https:\u002F\u002Fgithub.com\u002Fscottyzen\u002Fwoonuxt\u002Fissues",[1301],"GitHub Issues"," for support.",[22,1676,856],{"id":855},[858,1678,1679,1684,1690],{},[861,1680,1681],{"icon":871,"title":872,"to":873},[10,1682,1683],{},"Configure your WordPress backend with required plugins",[861,1685,1687],{"icon":1686,"title":715,"to":880},"i-lucide-zap",[10,1688,1689],{},"Get your store running in minutes",[861,1691,1693],{"icon":1692,"title":887,"to":888},"i-lucide-plug",[10,1694,891],{},[535,1696,1697],{},"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":5,"searchDepth":57,"depth":57,"links":1699},[1700,1701,1702,1703,1704,1705,1711,1712,1713],{"id":919,"depth":57,"text":920},{"id":946,"depth":57,"text":947},{"id":1004,"depth":57,"text":1005},{"id":1263,"depth":57,"text":1264},{"id":1315,"depth":57,"text":1316},{"id":1382,"depth":57,"text":1383,"children":1706},[1707,1708,1709,1710],{"id":1390,"depth":85,"text":1391},{"id":1487,"depth":85,"text":1488},{"id":1515,"depth":85,"text":1516},{"id":1531,"depth":85,"text":1532},{"id":1607,"depth":57,"text":1608},{"id":1649,"depth":57,"text":1650},{"id":855,"depth":57,"text":856},"Step-by-step guide to installing WooNuxt",{},{"icon":863},"\u002Fgetting-started\u002Finstallation",{"title":864,"description":1714},"1.getting-started\u002F2.installation","X3bIq_deJosp8ZoaEAjpkrkL8FsI8s52IBlYCVsLJ5I",{"id":1722,"title":1723,"body":1724,"description":2229,"extension":545,"links":546,"meta":2230,"navigation":2231,"path":2232,"seo":2233,"stem":2234,"__hash__":2235},"docs\u002F1.getting-started\u002F3.quick-start.md","Quick Start Guide",{"type":7,"value":1725,"toc":2218},[1726,1729,1733,1736,1756,1760,1763,1794,1797,1806,1810,1816,1845,1851,1869,1873,1876,1886,1966,1971,1975,2037,2042,2073,2077,2121,2127,2131,2134,2162,2164,2170,2180,2188,2197,2201,2204,2215],[10,1727,1728],{},"Follow these steps to get WooNuxt running quickly. This is the condensed version - see detailed sections for more information.",[22,1730,1732],{"id":1731},"step-1-prerequisites-checklist","Step 1: Prerequisites Checklist",[10,1734,1735],{},"Make sure you have everything ready:",[1737,1738,1739],"checklist",{},[574,1740,1741,1744,1747,1750,1753],{},[577,1742,1743],{},"WordPress 6.9.4+ with WooCommerce 10.7.0+",[577,1745,1746],{},"At least one product published",[577,1748,1749],{},"At least one product attribute configured (this is a prerequisite of WooGraphQL)",[577,1751,1752],{},"Permalinks set to \"Post name\"",[577,1754,1755],{},"Node.js 20+ installed locally",[22,1757,1759],{"id":1758},"step-2-install-woonuxt-settings-plugin","Step 2: Install WooNuxt Settings Plugin",[10,1761,1762],{},"This plugin is essential - it installs all dependencies automatically:",[1613,1764,1765,1773,1779,1782,1788,1791],{},[577,1766,1767,1768],{},"Download from ",[1297,1769,1772],{"href":1770,"rel":1771},"https:\u002F\u002Fgithub.com\u002Fscottyzen\u002Fwoonuxt-settings\u002Freleases\u002Flatest",[1301],"GitHub Releases",[577,1774,1775,1776],{},"Upload to ",[562,1777,1778],{},"Plugins > Add New > Upload Plugin",[577,1780,1781],{},"Activate the plugin",[577,1783,1784,1785],{},"Go to ",[562,1786,1787],{},"Settings > WooNuxt",[577,1789,1790],{},"Click \"Install Now\" for each required plugin",[577,1792,1793],{},"Wait for all plugins to show \"✅ Installed\"",[10,1795,1796],{},"Required plugins that will be installed:",[574,1798,1799,1801,1803],{},[577,1800,1278],{},[577,1802,1284],{},[577,1804,1805],{},"Headless Login for WPGraphQL 0.4.4+",[22,1807,1809],{"id":1808},"step-3-configure-woonuxt-settings","Step 3: Configure WooNuxt Settings",[10,1811,1812,1813,1815],{},"In ",[562,1814,1787],{},", configure these key settings:",[574,1817,1818,1824,1830,1839],{},[577,1819,1820,1823],{},[562,1821,1822],{},"Logo URL"," - Upload a logo to Media Library and paste the URL",[577,1825,1826,1829],{},[562,1827,1828],{},"Primary Color"," - Set your brand color (default: #7F54B2)",[577,1831,1832,1835,1836,1838],{},[562,1833,1834],{},"Front End URL"," - Set to ",[34,1837,851],{}," for development",[577,1840,1841,1844],{},[562,1842,1843],{},"Products Per Page"," - Set to 24 (or your preference)",[10,1846,1847,1850],{},[562,1848,1849],{},"Global Attributes"," - Add at least one product attribute for filtering:",[1613,1852,1853,1860,1863,1866],{},[577,1854,1855,1856,1859],{},"Click ",[562,1857,1858],{},"Add New"," under Global Attributes",[577,1861,1862],{},"Select an attribute (Color, Size, etc.)",[577,1864,1865],{},"Configure display options",[577,1867,1868],{},"Save changes",[22,1870,1872],{"id":1871},"step-4-test-wordpress-graphql","Step 4: Test WordPress GraphQL",[10,1874,1875],{},"Verify your setup works:",[1613,1877,1878,1883],{},[577,1879,1784,1880],{},[562,1881,1882],{},"GraphQL > GraphiQL IDE",[577,1884,1885],{},"Run this test query:",[39,1887,1891],{"className":1888,"code":1889,"language":1890,"meta":5,"style":5},"language-graphql shiki shiki-themes material-theme-palenight","query TestSetup {\n  products(first: 5) {\n    nodes {\n      id\n      name\n      ... on SimpleProduct {\n        price\n      }\n    }\n  }\n  woonuxtSettings {\n    primary_color\n    logo\n  }\n}\n","graphql",[34,1892,1893,1898,1903,1908,1913,1918,1923,1928,1933,1938,1942,1947,1952,1957,1961],{"__ignoreMap":5},[47,1894,1895],{"class":49,"line":50},[47,1896,1897],{},"query TestSetup {\n",[47,1899,1900],{"class":49,"line":57},[47,1901,1902],{},"  products(first: 5) {\n",[47,1904,1905],{"class":49,"line":85},[47,1906,1907],{},"    nodes {\n",[47,1909,1910],{"class":49,"line":92},[47,1911,1912],{},"      id\n",[47,1914,1915],{"class":49,"line":111},[47,1916,1917],{},"      name\n",[47,1919,1920],{"class":49,"line":125},[47,1921,1922],{},"      ... on SimpleProduct {\n",[47,1924,1925],{"class":49,"line":144},[47,1926,1927],{},"        price\n",[47,1929,1930],{"class":49,"line":161},[47,1931,1932],{},"      }\n",[47,1934,1935],{"class":49,"line":174},[47,1936,1937],{},"    }\n",[47,1939,1940],{"class":49,"line":188},[47,1941,307],{},[47,1943,1944],{"class":49,"line":199},[47,1945,1946],{},"  woonuxtSettings {\n",[47,1948,1949],{"class":49,"line":369},[47,1950,1951],{},"    primary_color\n",[47,1953,1954],{"class":49,"line":379},[47,1955,1956],{},"    logo\n",[47,1958,1959],{"class":49,"line":808},[47,1960,307],{},[47,1962,1963],{"class":49,"line":814},[47,1964,1965],{},"}\n",[1375,1967,1968],{},[10,1969,1970],{},"If you see products and settings, WordPress is configured correctly! ✅",[22,1972,1974],{"id":1973},"step-5-clone-configure-frontend","Step 5: Clone & Configure Frontend",[39,1976,1978],{"className":721,"code":1977,"filename":927,"language":723,"meta":5,"style":5},"# Clone repository\ngit clone https:\u002F\u002Fgithub.com\u002Fscottyzen\u002Fwoonuxt.git\ncd woonuxt\n\n# Install dependencies\nnpm install\n# or: yarn install\n# or: pnpm install\n\n# Create environment file\ncp .env.example .env\n",[34,1979,1980,1985,1993,1999,2003,2007,2013,2017,2021,2025,2029],{"__ignoreMap":5},[47,1981,1982],{"class":49,"line":50},[47,1983,1984],{"class":53},"# Clone repository\n",[47,1986,1987,1989,1991],{"class":49,"line":57},[47,1988,735],{"class":282},[47,1990,738],{"class":75},[47,1992,741],{"class":75},[47,1994,1995,1997],{"class":49,"line":85},[47,1996,746],{"class":114},[47,1998,749],{"class":75},[47,2000,2001],{"class":49,"line":92},[47,2002,89],{"emptyLinePlaceholder":88},[47,2004,2005],{"class":49,"line":111},[47,2006,758],{"class":53},[47,2008,2009,2011],{"class":49,"line":125},[47,2010,763],{"class":282},[47,2012,766],{"class":75},[47,2014,2015],{"class":49,"line":144},[47,2016,771],{"class":53},[47,2018,2019],{"class":49,"line":161},[47,2020,776],{"class":53},[47,2022,2023],{"class":49,"line":174},[47,2024,89],{"emptyLinePlaceholder":88},[47,2026,2027],{"class":49,"line":188},[47,2028,785],{"class":53},[47,2030,2031,2033,2035],{"class":49,"line":199},[47,2032,790],{"class":282},[47,2034,793],{"class":75},[47,2036,796],{"class":75},[10,2038,2039,2040,131],{},"Edit ",[34,2041,1027],{},[39,2043,2045],{"className":721,"code":2044,"filename":1027,"language":723,"meta":5,"style":5},"GQL_HOST=https:\u002F\u002Fyoursite.com\u002Fgraphql\nAPP_HOST=http:\u002F\u002Flocalhost:3000\nNUXT_IMAGE_DOMAINS=yoursite.com\n",[34,2046,2047,2056,2064],{"__ignoreMap":5},[47,2048,2049,2051,2053],{"class":49,"line":50},[47,2050,1178],{"class":64},[47,2052,237],{"class":71},[47,2054,2055],{"class":75},"https:\u002F\u002Fyoursite.com\u002Fgraphql\n",[47,2057,2058,2060,2062],{"class":49,"line":57},[47,2059,1203],{"class":64},[47,2061,237],{"class":71},[47,2063,1371],{"class":75},[47,2065,2066,2068,2070],{"class":49,"line":85},[47,2067,1191],{"class":64},[47,2069,237],{"class":71},[47,2071,2072],{"class":75},"yoursite.com\n",[22,2074,2076],{"id":2075},"step-6-start-development-server","Step 6: Start Development Server",[39,2078,2079],{"className":721,"code":1322,"filename":927,"language":723,"meta":5,"style":5},[34,2080,2081,2085,2093,2097,2101,2107,2111,2115],{"__ignoreMap":5},[47,2082,2083],{"class":49,"line":50},[47,2084,960],{"class":53},[47,2086,2087,2089,2091],{"class":49,"line":57},[47,2088,763],{"class":282},[47,2090,830],{"class":75},[47,2092,833],{"class":75},[47,2094,2095],{"class":49,"line":85},[47,2096,89],{"emptyLinePlaceholder":88},[47,2098,2099],{"class":49,"line":92},[47,2100,975],{"class":53},[47,2102,2103,2105],{"class":49,"line":111},[47,2104,980],{"class":282},[47,2106,833],{"class":75},[47,2108,2109],{"class":49,"line":125},[47,2110,89],{"emptyLinePlaceholder":88},[47,2112,2113],{"class":49,"line":144},[47,2114,991],{"class":53},[47,2116,2117,2119],{"class":49,"line":161},[47,2118,996],{"class":282},[47,2120,833],{"class":75},[10,2122,2123,2124,2126],{},"Open ",[34,2125,851],{}," in your browser.",[22,2128,2130],{"id":2129},"step-7-verify-everything-works","Step 7: Verify Everything Works",[10,2132,2133],{},"Test these features:",[1737,2135,2136],{},[574,2137,2138,2141,2144,2147,2150,2153,2156,2159],{},[577,2139,2140],{},"Homepage loads with products",[577,2142,2143],{},"Product images display",[577,2145,2146],{},"Click on a product to view details",[577,2148,2149],{},"Add product to cart",[577,2151,2152],{},"Cart drawer opens",[577,2154,2155],{},"Filters appear (if attributes configured)",[577,2157,2158],{},"Search works",[577,2160,2161],{},"No console errors (F12 to check)",[22,2163,1650],{"id":1649},[10,2165,2166,2169],{},[562,2167,2168],{},"No products showing?"," Ensure products are published in WooCommerce and the WooNuxt Settings plugin is configured.",[10,2171,2172,2175,2176,2179],{},[562,2173,2174],{},"Filters not working?"," Add product attributes in WooCommerce and configure them in ",[562,2177,2178],{},"Settings > WooNuxt > Global Attributes",".",[10,2181,2182,2185,2186,131],{},[562,2183,2184],{},"Images not loading?"," Add your WordPress domain to ",[34,2187,1027],{},[39,2189,2191],{"className":1031,"code":2190,"language":1033,"meta":5,"style":5},"NUXT_IMAGE_DOMAINS=yoursite.com\n",[34,2192,2193],{"__ignoreMap":5},[47,2194,2195],{"class":49,"line":50},[47,2196,2190],{},[22,2198,2200],{"id":2199},"whats-next","What's Next?",[10,2202,2203],{},"Now that you're running, customize your store:",[858,2205,2206,2210],{},[861,2207,2208],{"icon":871,"title":872,"to":873},[10,2209,876],{},[861,2211,2213],{"icon":2212,"title":887,"to":888},"i-lucide-settings",[10,2214,891],{},[535,2216,2217],{},"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":5,"searchDepth":57,"depth":57,"links":2219},[2220,2221,2222,2223,2224,2225,2226,2227,2228],{"id":1731,"depth":57,"text":1732},{"id":1758,"depth":57,"text":1759},{"id":1808,"depth":57,"text":1809},{"id":1871,"depth":57,"text":1872},{"id":1973,"depth":57,"text":1974},{"id":2075,"depth":57,"text":2076},{"id":2129,"depth":57,"text":2130},{"id":1649,"depth":57,"text":1650},{"id":2199,"depth":57,"text":2200},"Get your WooNuxt store up and running in minutes",{},{"icon":1686},"\u002Fgetting-started\u002Fquick-start",{"title":1723,"description":2229},"1.getting-started\u002F3.quick-start","swHE3iLj3qRGWZi4db-WhaniMQCOq9mp8DgnXcqAkJo",{"id":2237,"title":2238,"body":2239,"description":3023,"extension":545,"links":546,"meta":3024,"navigation":3025,"path":3027,"seo":3028,"stem":3029,"__hash__":3030},"docs\u002F1.getting-started\u002F4.customization.md","Customization & Architecture",{"type":7,"value":2240,"toc":3012},[2241,2247,2251,2254,2260,2267,2321,2327,2331,2342,2393,2396,2400,2558,2562,2565,2597,2601,2608,2681,2685,2699,2719,2723,2733,2958,2962,2969,2997,3009],[10,2242,2243,2244,2246],{},"WooNuxt uses ",[562,2245,685],{}," 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.",[22,2248,2250],{"id":2249},"how-it-works","How It Works",[10,2252,2253],{},"The project has two layers:",[39,2255,2258],{"className":2256,"code":2257,"language":692},[690],"woonuxt\u002F                    ← Your project (customize here)\n├── app\u002F\n│   └── types\u002F             ← Type overrides\n├── nuxt.config.ts         ← Extends woonuxt_base\n└── ...\n\nwoonuxt_base\u002F              ← Core layer (do not edit directly)\n├── app\u002F\n│   ├── components\u002F        ← All default components\n│   ├── composables\u002F       ← All composables\n│   ├── pages\u002F             ← All pages\n│   ├── queries\u002F           ← All GraphQL queries\n│   └── assets\u002Fcss\u002F        ← Base styles\n└── nuxt.config.ts         ← Core Nuxt config\n",[34,2259,2257],{"__ignoreMap":5},[10,2261,2262,2263,2266],{},"Your root ",[34,2264,2265],{},"nuxt.config.ts"," extends the base:",[39,2268,2270],{"className":41,"code":2269,"filename":2265,"language":43,"meta":5,"style":5},"export default defineNuxtConfig({\n  extends: ['.\u002Fwoonuxt_base'],\n  \u002F\u002F your overrides here\n})\n",[34,2271,2272,2285,2308,2313],{"__ignoreMap":5},[47,2273,2274,2276,2278,2281,2283],{"class":49,"line":50},[47,2275,95],{"class":60},[47,2277,98],{"class":60},[47,2279,2280],{"class":114}," defineNuxtConfig",[47,2282,119],{"class":64},[47,2284,122],{"class":71},[47,2286,2287,2290,2292,2295,2298,2301,2303,2306],{"class":49,"line":57},[47,2288,2289],{"class":118},"  extends",[47,2291,131],{"class":71},[47,2293,2294],{"class":64}," [",[47,2296,2297],{"class":71},"'",[47,2299,2300],{"class":75},".\u002Fwoonuxt_base",[47,2302,2297],{"class":71},[47,2304,2305],{"class":64},"]",[47,2307,141],{"class":71},[47,2309,2310],{"class":49,"line":85},[47,2311,2312],{"class":53},"  \u002F\u002F your overrides here\n",[47,2314,2315,2318],{"class":49,"line":92},[47,2316,2317],{"class":71},"}",[47,2319,2320],{"class":64},")\n",[10,2322,2323,2324,2179],{},"Nuxt merges both layers at build time, with your root-level files taking priority over ",[34,2325,2326],{},"woonuxt_base",[22,2328,2330],{"id":2329},"overriding-components","Overriding Components",[10,2332,2333,2334,2337,2338,2341],{},"To override any component, create a file with the ",[562,2335,2336],{},"same name"," in your root ",[34,2339,2340],{},"app\u002Fcomponents\u002F"," folder:",[39,2343,2345],{"className":721,"code":2344,"language":723,"meta":5,"style":5},"# Example: override the default ProductCard\napp\u002F\n└── components\u002F\n    └── productElements\u002F\n        └── ProductCard.vue   ← your version wins\n",[34,2346,2347,2352,2357,2365,2373],{"__ignoreMap":5},[47,2348,2349],{"class":49,"line":50},[47,2350,2351],{"class":53},"# Example: override the default ProductCard\n",[47,2353,2354],{"class":49,"line":57},[47,2355,2356],{"class":282},"app\u002F\n",[47,2358,2359,2362],{"class":49,"line":85},[47,2360,2361],{"class":282},"└──",[47,2363,2364],{"class":75}," components\u002F\n",[47,2366,2367,2370],{"class":49,"line":92},[47,2368,2369],{"class":282},"    └──",[47,2371,2372],{"class":75}," productElements\u002F\n",[47,2374,2375,2378,2381,2384,2387,2390],{"class":49,"line":111},[47,2376,2377],{"class":282},"        └──",[47,2379,2380],{"class":75}," ProductCard.vue",[47,2382,2383],{"class":75},"   ←",[47,2385,2386],{"class":75}," your",[47,2388,2389],{"class":75}," version",[47,2391,2392],{"class":75}," wins\n",[10,2394,2395],{},"You don't need to copy the original — just create a new file at the same path. The base layer version is completely replaced.",[1388,2397,2399],{"id":2398},"example-custom-herobanner","Example: Custom HeroBanner",[39,2401,2404],{"className":216,"code":2402,"filename":2403,"language":218,"meta":5,"style":5},"\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",[34,2405,2406,2414,2434,2464,2481,2489,2497,2501,2521,2550],{"__ignoreMap":5},[47,2407,2408,2410,2412],{"class":49,"line":50},[47,2409,225],{"class":71},[47,2411,337],{"class":118},[47,2413,246],{"class":71},[47,2415,2416,2418,2421,2423,2425,2427,2430,2432],{"class":49,"line":57},[47,2417,344],{"class":71},[47,2419,2420],{"class":118},"section",[47,2422,350],{"class":104},[47,2424,237],{"class":71},[47,2426,79],{"class":71},[47,2428,2429],{"class":75},"hero bg-primary text-white py-20",[47,2431,79],{"class":71},[47,2433,246],{"class":71},[47,2435,2436,2439,2441,2443,2445,2447,2450,2452,2455,2458,2460,2462],{"class":49,"line":85},[47,2437,2438],{"class":71},"    \u003C",[47,2440,14],{"class":118},[47,2442,350],{"class":104},[47,2444,237],{"class":71},[47,2446,79],{"class":71},[47,2448,2449],{"class":75},"text-4xl font-bold",[47,2451,79],{"class":71},[47,2453,2454],{"class":71},">",[47,2456,2457],{"class":64},"{{ title }}",[47,2459,322],{"class":71},[47,2461,14],{"class":118},[47,2463,246],{"class":71},[47,2465,2466,2468,2470,2472,2475,2477,2479],{"class":49,"line":92},[47,2467,2438],{"class":71},[47,2469,10],{"class":118},[47,2471,2454],{"class":71},[47,2473,2474],{"class":64},"{{ description }}",[47,2476,322],{"class":71},[47,2478,10],{"class":118},[47,2480,246],{"class":71},[47,2482,2483,2485,2487],{"class":49,"line":111},[47,2484,372],{"class":71},[47,2486,2420],{"class":118},[47,2488,246],{"class":71},[47,2490,2491,2493,2495],{"class":49,"line":125},[47,2492,322],{"class":71},[47,2494,337],{"class":118},[47,2496,246],{"class":71},[47,2498,2499],{"class":49,"line":144},[47,2500,89],{"emptyLinePlaceholder":88},[47,2502,2503,2505,2507,2509,2511,2513,2515,2517,2519],{"class":49,"line":161},[47,2504,225],{"class":71},[47,2506,228],{"class":118},[47,2508,231],{"class":104},[47,2510,234],{"class":104},[47,2512,237],{"class":71},[47,2514,79],{"class":71},[47,2516,43],{"class":75},[47,2518,79],{"class":71},[47,2520,246],{"class":71},[47,2522,2523,2525,2528,2531,2533,2535,2537,2540,2542,2544,2547],{"class":49,"line":174},[47,2524,251],{"class":114},[47,2526,2527],{"class":71},"\u003C{",[47,2529,2530],{"class":118}," title",[47,2532,131],{"class":71},[47,2534,283],{"class":282},[47,2536,286],{"class":71},[47,2538,2539],{"class":118}," description",[47,2541,131],{"class":71},[47,2543,283],{"class":282},[47,2545,2546],{"class":71}," }>",[47,2548,2549],{"class":64},"()\n",[47,2551,2552,2554,2556],{"class":49,"line":188},[47,2553,322],{"class":71},[47,2555,228],{"class":118},[47,2557,246],{"class":71},[22,2559,2561],{"id":2560},"overriding-pages","Overriding Pages",[10,2563,2564],{},"Same principle — create a page at the same path:",[39,2566,2568],{"className":721,"code":2567,"language":723,"meta":5,"style":5},"app\u002F\n└── pages\u002F\n    └── index.vue    ← replaces woonuxt_base\u002Fapp\u002Fpages\u002Findex.vue\n",[34,2569,2570,2574,2581],{"__ignoreMap":5},[47,2571,2572],{"class":49,"line":50},[47,2573,2356],{"class":282},[47,2575,2576,2578],{"class":49,"line":57},[47,2577,2361],{"class":282},[47,2579,2580],{"class":75}," pages\u002F\n",[47,2582,2583,2585,2588,2591,2594],{"class":49,"line":85},[47,2584,2369],{"class":282},[47,2586,2587],{"class":75}," index.vue",[47,2589,2590],{"class":75},"    ←",[47,2592,2593],{"class":75}," replaces",[47,2595,2596],{"class":75}," woonuxt_base\u002Fapp\u002Fpages\u002Findex.vue\n",[22,2598,2600],{"id":2599},"overriding-styles","Overriding Styles",[10,2602,2603,2604,2607],{},"Add custom CSS in ",[34,2605,2606],{},"app\u002Fassets\u002Fcss\u002Fmain.css",". Tailwind CSS 4 is configured via PostCSS — extend the theme in your CSS directly:",[39,2609,2613],{"className":2610,"code":2611,"filename":2606,"language":2612,"meta":5,"style":5},"language-css shiki shiki-themes material-theme-palenight","@import \"tailwindcss\";\n\n\u002F* Extend or override Tailwind theme *\u002F\n@theme {\n  --color-primary: v-bind(primaryColor);\n}\n\n\u002F* Your custom styles *\u002F\n.my-custom-class {\n  \u002F* ... *\u002F\n}\n","css",[34,2614,2615,2629,2633,2638,2645,2650,2654,2658,2663,2672,2677],{"__ignoreMap":5},[47,2616,2617,2620,2622,2625,2627],{"class":49,"line":50},[47,2618,2619],{"class":60},"@import",[47,2621,72],{"class":71},[47,2623,2624],{"class":75},"tailwindcss",[47,2626,79],{"class":71},[47,2628,82],{"class":71},[47,2630,2631],{"class":49,"line":57},[47,2632,89],{"emptyLinePlaceholder":88},[47,2634,2635],{"class":49,"line":85},[47,2636,2637],{"class":53},"\u002F* Extend or override Tailwind theme *\u002F\n",[47,2639,2640,2643],{"class":49,"line":92},[47,2641,2642],{"class":60},"@theme",[47,2644,108],{"class":71},[47,2646,2647],{"class":49,"line":111},[47,2648,2649],{"class":64},"  --color-primary: v-bind(primaryColor);\n",[47,2651,2652],{"class":49,"line":125},[47,2653,1965],{"class":71},[47,2655,2656],{"class":49,"line":144},[47,2657,89],{"emptyLinePlaceholder":88},[47,2659,2660],{"class":49,"line":161},[47,2661,2662],{"class":53},"\u002F* Your custom styles *\u002F\n",[47,2664,2665,2667,2670],{"class":49,"line":174},[47,2666,2179],{"class":71},[47,2668,2669],{"class":282},"my-custom-class",[47,2671,108],{"class":71},[47,2673,2674],{"class":49,"line":188},[47,2675,2676],{"class":53},"  \u002F* ... *\u002F\n",[47,2678,2679],{"class":49,"line":199},[47,2680,1965],{"class":71},[22,2682,2684],{"id":2683},"adding-custom-graphql-queries","Adding Custom GraphQL Queries",[10,2686,2687,2688,2691,2692,2695,2696,131],{},"Place ",[34,2689,2690],{},".gql"," files in ",[34,2693,2694],{},"app\u002Fqueries\u002F",". These are picked up automatically by ",[34,2697,2698],{},"nuxt-graphql-client",[39,2700,2703],{"className":1888,"code":2701,"filename":2702,"language":1890,"meta":5,"style":5},"query GetMyCustomData {\n  # your query\n}\n","app\u002Fqueries\u002FgetMyCustomData.gql",[34,2704,2705,2710,2715],{"__ignoreMap":5},[47,2706,2707],{"class":49,"line":50},[47,2708,2709],{},"query GetMyCustomData {\n",[47,2711,2712],{"class":49,"line":57},[47,2713,2714],{},"  # your query\n",[47,2716,2717],{"class":49,"line":85},[47,2718,1965],{},[22,2720,2722],{"id":2721},"modifying-nuxtconfigts","Modifying nuxt.config.ts",[10,2724,2725,2726,2728,2729,2732],{},"Add modules, routes, or runtime config in the root ",[34,2727,2265],{},". It is ",[562,2730,2731],{},"merged"," with the base config, not replaced:",[39,2734,2736],{"className":41,"code":2735,"filename":2265,"language":43,"meta":5,"style":5},"export default defineNuxtConfig({\n  extends: ['.\u002Fwoonuxt_base'],\n\n  \u002F\u002F Add extra modules\n  modules: ['@nuxtjs\u002Fgoogle-fonts'],\n\n  \u002F\u002F Override runtime config\n  runtimeConfig: {\n    public: {\n      PRODUCTS_PER_PAGE: 12,\n    },\n  },\n\n  \u002F\u002F Add custom routes\n  hooks: {\n    'pages:extend'(pages) {\n      pages.push({ name: 'custom', path: '\u002Fcustom', file: '~\u002Fapp\u002Fpages\u002Fcustom.vue' })\n    },\n  },\n})\n",[34,2737,2738,2750,2768,2772,2777,2797,2801,2806,2815,2824,2836,2841,2846,2850,2855,2864,2883,2944,2948,2952],{"__ignoreMap":5},[47,2739,2740,2742,2744,2746,2748],{"class":49,"line":50},[47,2741,95],{"class":60},[47,2743,98],{"class":60},[47,2745,2280],{"class":114},[47,2747,119],{"class":64},[47,2749,122],{"class":71},[47,2751,2752,2754,2756,2758,2760,2762,2764,2766],{"class":49,"line":57},[47,2753,2289],{"class":118},[47,2755,131],{"class":71},[47,2757,2294],{"class":64},[47,2759,2297],{"class":71},[47,2761,2300],{"class":75},[47,2763,2297],{"class":71},[47,2765,2305],{"class":64},[47,2767,141],{"class":71},[47,2769,2770],{"class":49,"line":85},[47,2771,89],{"emptyLinePlaceholder":88},[47,2773,2774],{"class":49,"line":92},[47,2775,2776],{"class":53},"  \u002F\u002F Add extra modules\n",[47,2778,2779,2782,2784,2786,2788,2791,2793,2795],{"class":49,"line":111},[47,2780,2781],{"class":118},"  modules",[47,2783,131],{"class":71},[47,2785,2294],{"class":64},[47,2787,2297],{"class":71},[47,2789,2790],{"class":75},"@nuxtjs\u002Fgoogle-fonts",[47,2792,2297],{"class":71},[47,2794,2305],{"class":64},[47,2796,141],{"class":71},[47,2798,2799],{"class":49,"line":125},[47,2800,89],{"emptyLinePlaceholder":88},[47,2802,2803],{"class":49,"line":144},[47,2804,2805],{"class":53},"  \u002F\u002F Override runtime config\n",[47,2807,2808,2811,2813],{"class":49,"line":161},[47,2809,2810],{"class":118},"  runtimeConfig",[47,2812,131],{"class":71},[47,2814,108],{"class":71},[47,2816,2817,2820,2822],{"class":49,"line":174},[47,2818,2819],{"class":118},"    public",[47,2821,131],{"class":71},[47,2823,108],{"class":71},[47,2825,2826,2829,2831,2834],{"class":49,"line":188},[47,2827,2828],{"class":118},"      PRODUCTS_PER_PAGE",[47,2830,131],{"class":71},[47,2832,2833],{"class":182}," 12",[47,2835,141],{"class":71},[47,2837,2838],{"class":49,"line":199},[47,2839,2840],{"class":71},"    },\n",[47,2842,2843],{"class":49,"line":369},[47,2844,2845],{"class":71},"  },\n",[47,2847,2848],{"class":49,"line":379},[47,2849,89],{"emptyLinePlaceholder":88},[47,2851,2852],{"class":49,"line":808},[47,2853,2854],{"class":53},"  \u002F\u002F Add custom routes\n",[47,2856,2857,2860,2862],{"class":49,"line":814},[47,2858,2859],{"class":118},"  hooks",[47,2861,131],{"class":71},[47,2863,108],{"class":71},[47,2865,2866,2869,2872,2874,2876,2879,2881],{"class":49,"line":819},[47,2867,2868],{"class":71},"    '",[47,2870,2871],{"class":75},"pages:extend",[47,2873,2297],{"class":71},[47,2875,119],{"class":71},[47,2877,2878],{"class":490},"pages",[47,2880,194],{"class":71},[47,2882,108],{"class":71},[47,2884,2885,2888,2890,2893,2895,2898,2900,2902,2905,2908,2910,2913,2916,2918,2920,2923,2925,2927,2930,2932,2934,2937,2939,2942],{"class":49,"line":825},[47,2886,2887],{"class":64},"      pages",[47,2889,2179],{"class":71},[47,2891,2892],{"class":114},"push",[47,2894,119],{"class":118},[47,2896,2897],{"class":71},"{",[47,2899,277],{"class":118},[47,2901,131],{"class":71},[47,2903,2904],{"class":71}," '",[47,2906,2907],{"class":75},"custom",[47,2909,2297],{"class":71},[47,2911,2912],{"class":71},",",[47,2914,2915],{"class":118}," path",[47,2917,131],{"class":71},[47,2919,2904],{"class":71},[47,2921,2922],{"class":75},"\u002Fcustom",[47,2924,2297],{"class":71},[47,2926,2912],{"class":71},[47,2928,2929],{"class":118}," file",[47,2931,131],{"class":71},[47,2933,2904],{"class":71},[47,2935,2936],{"class":75},"~\u002Fapp\u002Fpages\u002Fcustom.vue",[47,2938,2297],{"class":71},[47,2940,2941],{"class":71}," }",[47,2943,2320],{"class":118},[47,2945,2946],{"class":49,"line":836},[47,2947,2840],{"class":71},[47,2949,2950],{"class":49,"line":842},[47,2951,2845],{"class":71},[47,2953,2954,2956],{"class":49,"line":1128},[47,2955,2317],{"class":71},[47,2957,2320],{"class":64},[22,2959,2961],{"id":2960},"what-should-not-be-edited","What Should NOT Be Edited",[10,2963,2964,2965,2968],{},"Avoid editing files inside ",[34,2966,2967],{},"woonuxt_base\u002F"," directly. Changes there will be lost when you pull upstream updates. If you need to change base behavior:",[574,2970,2971,2980,2989],{},[577,2972,2973,2976,2977,2979],{},[562,2974,2975],{},"Components"," → copy to ",[34,2978,2340],{}," with the same path",[577,2981,2982,2976,2985,2988],{},[562,2983,2984],{},"Composables",[34,2986,2987],{},"app\u002Fcomposables\u002F"," and adjust imports",[577,2990,2991,2994,2995],{},[562,2992,2993],{},"Config"," → override in root ",[34,2996,2265],{},[1304,2998,2999],{},[10,3000,3001,3002,3004,3005,3008],{},"Keep ",[34,3003,2967],{}," as a clean git submodule or subtree so you can ",[34,3006,3007],{},"git pull"," upstream changes without conflicts.",[535,3010,3011],{},"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":5,"searchDepth":57,"depth":57,"links":3013},[3014,3015,3018,3019,3020,3021,3022],{"id":2249,"depth":57,"text":2250},{"id":2329,"depth":57,"text":2330,"children":3016},[3017],{"id":2398,"depth":85,"text":2399},{"id":2560,"depth":57,"text":2561},{"id":2599,"depth":57,"text":2600},{"id":2683,"depth":57,"text":2684},{"id":2721,"depth":57,"text":2722},{"id":2960,"depth":57,"text":2961},"How to customize WooNuxt using Nuxt Layers without modifying core files",{},{"icon":3026},"i-lucide-layers","\u002Fgetting-started\u002Fcustomization",{"title":2238,"description":3023},"1.getting-started\u002F4.customization","UXX0ykM4xIERhxoKzxQRR19xaD6Knxzf4UtV0eAncfU",{"id":3032,"title":3033,"body":3034,"description":3632,"extension":545,"links":546,"meta":3633,"navigation":3634,"path":3635,"seo":3636,"stem":3637,"__hash__":3638},"docs\u002F1.getting-started\u002F5.hooks.md","Hooks",{"type":7,"value":3035,"toc":3627},[3036,3041,3044,3048,3051,3149,3152,3156,3169,3210,3225,3329,3335,3467,3470,3474,3483,3488,3619,3624],[10,3037,3038,3039,2179],{},"WooNuxt hooks let you inject custom components at predefined locations in the storefront. They are useful when you only need to add a small piece of UI or logic and do not want to override a full page or component from ",[34,3040,2326],{},[10,3042,3043],{},"Hooks work with Nuxt layers, SSR, and static generation. Add your hook files to the root project or to a custom layer so upstream WooNuxt updates can still be pulled cleanly.",[22,3045,3047],{"id":3046},"available-hooks","Available Hooks",[10,3049,3050],{},"These hook outlets are currently rendered by WooNuxt:",[1150,3052,3053,3066],{},[1153,3054,3055],{},[1156,3056,3057,3060,3063],{},[1159,3058,3059],{},"Hook name",[1159,3061,3062],{},"Context",[1159,3064,3065],{},"Location",[1169,3067,3068,3081,3093,3107,3120,3134],{},[1156,3069,3070,3075,3078],{},[1174,3071,3072],{},[34,3073,3074],{},"layout.header.beforeNav",[1174,3076,3077],{},"none",[1174,3079,3080],{},"Before the header logo and navigation area",[1156,3082,3083,3088,3090],{},[1174,3084,3085],{},[34,3086,3087],{},"layout.footer.bottom",[1174,3089,3077],{},[1174,3091,3092],{},"Bottom of the footer",[1156,3094,3095,3099,3104],{},[1174,3096,3097],{},[34,3098,436],{},[1174,3100,3101],{},[34,3102,3103],{},"{ product }",[1174,3105,3106],{},"Product page, before the product title",[1156,3108,3109,3113,3117],{},[1174,3110,3111],{},[34,3112,136],{},[1174,3114,3115],{},[34,3116,3103],{},[1174,3118,3119],{},"Product page, after the product price",[1156,3121,3122,3127,3131],{},[1174,3123,3124],{},[34,3125,3126],{},"product.tabs.after",[1174,3128,3129],{},[34,3130,3103],{},[1174,3132,3133],{},"Product page, after product tabs",[1156,3135,3136,3141,3146],{},[1174,3137,3138],{},[34,3139,3140],{},"checkout.review.after",[1174,3142,3143],{},[34,3144,3145],{},"{ checkout }",[1174,3147,3148],{},"Checkout page, after the order note and review area",[10,3150,3151],{},"If no hook is registered for a location, WooNuxt renders nothing for that outlet and does not add an empty wrapper element.",[22,3153,3155],{"id":3154},"how-hooks-are-loaded","How Hooks Are Loaded",[10,3157,32,3158,3161,3162,1508,3165,3168],{},[34,3159,3160],{},"hooks"," folder in your app or custom layer. WooNuxt automatically loads every ",[34,3163,3164],{},".ts",[34,3166,3167],{},".js"," file in that folder.",[39,3170,3172],{"className":721,"code":3171,"language":723,"meta":5,"style":5},"app\u002F\n├── components\u002F\n│   └── ProductTrustMessage.vue\n└── hooks\u002F\n    └── product.ts\n",[34,3173,3174,3178,3185,3196,3203],{"__ignoreMap":5},[47,3175,3176],{"class":49,"line":50},[47,3177,2356],{"class":282},[47,3179,3180,3183],{"class":49,"line":57},[47,3181,3182],{"class":282},"├──",[47,3184,2364],{"class":75},[47,3186,3187,3190,3193],{"class":49,"line":85},[47,3188,3189],{"class":282},"│",[47,3191,3192],{"class":75},"   └──",[47,3194,3195],{"class":75}," ProductTrustMessage.vue\n",[47,3197,3198,3200],{"class":49,"line":92},[47,3199,2361],{"class":282},[47,3201,3202],{"class":75}," hooks\u002F\n",[47,3204,3205,3207],{"class":49,"line":111},[47,3206,2369],{"class":282},[47,3208,3209],{"class":75}," product.ts\n",[10,3211,3212,3213,3216,3217,3220,3221,3224],{},"Register hooks with ",[34,3214,3215],{},"registerHook",". The ",[34,3218,3219],{},"name"," must match one of the available hook locations, and the ",[34,3222,3223],{},"id"," must be unique for that location.",[39,3226,3229],{"className":41,"code":3227,"filename":3228,"language":43,"meta":5,"style":5},"import ProductTrustMessage from '~\u002Fcomponents\u002FProductTrustMessage.vue'\n\nexport default () => {\n  registerHook({\n    name: 'product.summary.afterPrice',\n    id: 'product-trust-message',\n    renderer: ProductTrustMessage,\n    priority: 10,\n  })\n}\n","app\u002Fhooks\u002Fproduct.ts",[34,3230,3231,3246,3250,3262,3270,3284,3298,3309,3319,3325],{"__ignoreMap":5},[47,3232,3233,3235,3237,3239,3241,3243],{"class":49,"line":50},[47,3234,61],{"class":60},[47,3236,65],{"class":64},[47,3238,68],{"class":60},[47,3240,2904],{"class":71},[47,3242,76],{"class":75},[47,3244,3245],{"class":71},"'\n",[47,3247,3248],{"class":49,"line":57},[47,3249,89],{"emptyLinePlaceholder":88},[47,3251,3252,3254,3256,3258,3260],{"class":49,"line":85},[47,3253,95],{"class":60},[47,3255,98],{"class":60},[47,3257,101],{"class":71},[47,3259,105],{"class":104},[47,3261,108],{"class":71},[47,3263,3264,3266,3268],{"class":49,"line":92},[47,3265,115],{"class":114},[47,3267,119],{"class":118},[47,3269,122],{"class":71},[47,3271,3272,3274,3276,3278,3280,3282],{"class":49,"line":111},[47,3273,128],{"class":118},[47,3275,131],{"class":71},[47,3277,2904],{"class":71},[47,3279,136],{"class":75},[47,3281,2297],{"class":71},[47,3283,141],{"class":71},[47,3285,3286,3288,3290,3292,3294,3296],{"class":49,"line":125},[47,3287,147],{"class":118},[47,3289,131],{"class":71},[47,3291,2904],{"class":71},[47,3293,154],{"class":75},[47,3295,2297],{"class":71},[47,3297,141],{"class":71},[47,3299,3300,3303,3305,3307],{"class":49,"line":144},[47,3301,3302],{"class":118},"    renderer",[47,3304,131],{"class":71},[47,3306,169],{"class":64},[47,3308,141],{"class":71},[47,3310,3311,3313,3315,3317],{"class":49,"line":161},[47,3312,177],{"class":118},[47,3314,131],{"class":71},[47,3316,183],{"class":182},[47,3318,141],{"class":71},[47,3320,3321,3323],{"class":49,"line":174},[47,3322,191],{"class":71},[47,3324,2320],{"class":118},[47,3326,3327],{"class":49,"line":188},[47,3328,1965],{"class":71},[10,3330,3331,3332,3334],{},"The registered component receives the hook context as a ",[34,3333,212],{}," prop.",[39,3336,3339],{"className":216,"code":3337,"filename":3338,"language":218,"meta":5,"style":5},"\u003Cscript setup lang=\"ts\">\ndefineProps\u003C{\n  ctx: {\n    product: {\n      name?: string\n    }\n  }\n}>()\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003Cdiv class=\"mt-4 rounded-md border border-green-200 bg-green-50 p-3 text-sm text-green-800\">\n    Free returns and secure checkout for {{ ctx.product?.name || 'this product' }}.\n  \u003C\u002Fdiv>\n\u003C\u002Ftemplate>\n","app\u002Fcomponents\u002FProductTrustMessage.vue",[34,3340,3341,3361,3367,3375,3383,3393,3397,3401,3407,3415,3419,3427,3446,3451,3459],{"__ignoreMap":5},[47,3342,3343,3345,3347,3349,3351,3353,3355,3357,3359],{"class":49,"line":50},[47,3344,225],{"class":71},[47,3346,228],{"class":118},[47,3348,231],{"class":104},[47,3350,234],{"class":104},[47,3352,237],{"class":71},[47,3354,79],{"class":71},[47,3356,43],{"class":75},[47,3358,79],{"class":71},[47,3360,246],{"class":71},[47,3362,3363,3365],{"class":49,"line":57},[47,3364,251],{"class":114},[47,3366,254],{"class":71},[47,3368,3369,3371,3373],{"class":49,"line":85},[47,3370,259],{"class":118},[47,3372,131],{"class":71},[47,3374,108],{"class":71},[47,3376,3377,3379,3381],{"class":49,"line":92},[47,3378,268],{"class":118},[47,3380,131],{"class":71},[47,3382,108],{"class":71},[47,3384,3385,3388,3390],{"class":49,"line":111},[47,3386,3387],{"class":118},"      name",[47,3389,271],{"class":71},[47,3391,3392],{"class":282}," string\n",[47,3394,3395],{"class":49,"line":125},[47,3396,1937],{"class":71},[47,3398,3399],{"class":49,"line":144},[47,3400,307],{"class":71},[47,3402,3403,3405],{"class":49,"line":161},[47,3404,312],{"class":71},[47,3406,2549],{"class":64},[47,3408,3409,3411,3413],{"class":49,"line":174},[47,3410,322],{"class":71},[47,3412,228],{"class":118},[47,3414,246],{"class":71},[47,3416,3417],{"class":49,"line":188},[47,3418,89],{"emptyLinePlaceholder":88},[47,3420,3421,3423,3425],{"class":49,"line":199},[47,3422,225],{"class":71},[47,3424,337],{"class":118},[47,3426,246],{"class":71},[47,3428,3429,3431,3433,3435,3437,3439,3442,3444],{"class":49,"line":369},[47,3430,344],{"class":71},[47,3432,347],{"class":118},[47,3434,350],{"class":104},[47,3436,237],{"class":71},[47,3438,79],{"class":71},[47,3440,3441],{"class":75},"mt-4 rounded-md border border-green-200 bg-green-50 p-3 text-sm text-green-800",[47,3443,79],{"class":71},[47,3445,246],{"class":71},[47,3447,3448],{"class":49,"line":379},[47,3449,3450],{"class":64},"    Free returns and secure checkout for {{ ctx.product?.name || 'this product' }}.\n",[47,3452,3453,3455,3457],{"class":49,"line":808},[47,3454,372],{"class":71},[47,3456,347],{"class":118},[47,3458,246],{"class":71},[47,3460,3461,3463,3465],{"class":49,"line":814},[47,3462,322],{"class":71},[47,3464,337],{"class":118},[47,3466,246],{"class":71},[10,3468,3469],{},"This renders the trust message after the product price on product pages without replacing the product page component.",[22,3471,3473],{"id":3472},"priority-and-conditions","Priority And Conditions",[10,3475,3476,3477,3479,3480,2179],{},"Use ",[34,3478,399],{}," when multiple hooks are registered for the same location. Lower priority values render first. If no priority is set, WooNuxt uses ",[34,3481,3482],{},"10",[10,3484,3476,3485,3487],{},[34,3486,395],{}," to render a hook only for matching context.",[39,3489,3491],{"className":41,"code":3490,"filename":3228,"language":43,"meta":5,"style":5},"import SaleNotice from '~\u002Fcomponents\u002FSaleNotice.vue'\n\nexport default () => {\n  registerHook({\n    name: 'product.summary.beforeTitle',\n    id: 'sale-notice',\n    renderer: SaleNotice,\n    priority: 5,\n    when: ({ product }) => Boolean(product?.salePrice),\n  })\n}\n",[34,3492,3493,3509,3513,3525,3533,3547,3561,3571,3581,3609,3615],{"__ignoreMap":5},[47,3494,3495,3497,3500,3502,3504,3507],{"class":49,"line":50},[47,3496,61],{"class":60},[47,3498,3499],{"class":64}," SaleNotice ",[47,3501,68],{"class":60},[47,3503,2904],{"class":71},[47,3505,3506],{"class":75},"~\u002Fcomponents\u002FSaleNotice.vue",[47,3508,3245],{"class":71},[47,3510,3511],{"class":49,"line":57},[47,3512,89],{"emptyLinePlaceholder":88},[47,3514,3515,3517,3519,3521,3523],{"class":49,"line":85},[47,3516,95],{"class":60},[47,3518,98],{"class":60},[47,3520,101],{"class":71},[47,3522,105],{"class":104},[47,3524,108],{"class":71},[47,3526,3527,3529,3531],{"class":49,"line":92},[47,3528,115],{"class":114},[47,3530,119],{"class":118},[47,3532,122],{"class":71},[47,3534,3535,3537,3539,3541,3543,3545],{"class":49,"line":111},[47,3536,128],{"class":118},[47,3538,131],{"class":71},[47,3540,2904],{"class":71},[47,3542,436],{"class":75},[47,3544,2297],{"class":71},[47,3546,141],{"class":71},[47,3548,3549,3551,3553,3555,3557,3559],{"class":49,"line":125},[47,3550,147],{"class":118},[47,3552,131],{"class":71},[47,3554,2904],{"class":71},[47,3556,451],{"class":75},[47,3558,2297],{"class":71},[47,3560,141],{"class":71},[47,3562,3563,3565,3567,3569],{"class":49,"line":144},[47,3564,3302],{"class":118},[47,3566,131],{"class":71},[47,3568,464],{"class":64},[47,3570,141],{"class":71},[47,3572,3573,3575,3577,3579],{"class":49,"line":161},[47,3574,177],{"class":118},[47,3576,131],{"class":71},[47,3578,475],{"class":182},[47,3580,141],{"class":71},[47,3582,3583,3585,3587,3589,3591,3593,3595,3597,3599,3601,3603,3605,3607],{"class":49,"line":174},[47,3584,482],{"class":114},[47,3586,131],{"class":71},[47,3588,487],{"class":71},[47,3590,491],{"class":490},[47,3592,494],{"class":71},[47,3594,105],{"class":104},[47,3596,499],{"class":114},[47,3598,119],{"class":118},[47,3600,504],{"class":64},[47,3602,507],{"class":71},[47,3604,510],{"class":64},[47,3606,194],{"class":118},[47,3608,141],{"class":71},[47,3610,3611,3613],{"class":49,"line":188},[47,3612,191],{"class":71},[47,3614,2320],{"class":118},[47,3616,3617],{"class":49,"line":199},[47,3618,1965],{"class":71},[1304,3620,3621],{},[10,3622,3623],{},"Use hooks for small additions. If you need to restructure a page or replace core behavior, override the relevant page or component with a Nuxt layer instead.",[535,3625,3626],{},"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 .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 .s0W1g, html code.shiki .s0W1g{--shiki-default:#BABED8}html pre.shiki code .sAklC, html code.shiki .sAklC{--shiki-default:#89DDFF}html pre.shiki code .sJ14y, html code.shiki .sJ14y{--shiki-default:#C792EA}html pre.shiki code .sdLwU, html code.shiki .sdLwU{--shiki-default:#82AAFF}html pre.shiki code .s-wAU, html code.shiki .s-wAU{--shiki-default:#F07178}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":5,"searchDepth":57,"depth":57,"links":3628},[3629,3630,3631],{"id":3046,"depth":57,"text":3047},{"id":3154,"depth":57,"text":3155},{"id":3472,"depth":57,"text":3473},"Add custom UI to WooNuxt without overriding core components",{},{"icon":1692},"\u002Fgetting-started\u002Fhooks",{"title":3033,"description":3632},"1.getting-started\u002F5.hooks","YffLQyyD3pt7Ohi5ykEy8u9ZsNLpQ-lNnap2Jlx7AKM",{"id":3640,"title":872,"body":3641,"description":3816,"extension":545,"links":546,"meta":3817,"navigation":3818,"path":3819,"seo":3820,"stem":3821,"__hash__":3822},"docs\u002F2.wordpress-setup\u002F1.index.md",{"type":7,"value":3642,"toc":3808},[3643,3646,3650,3653,3657,3692,3696,3699,3717,3721,3724,3756,3760,3798,3801],[10,3644,3645],{},"This section covers everything you need to configure on the WordPress side for WooNuxt to work properly.",[22,3647,3649],{"id":3648},"overview","Overview",[10,3651,3652],{},"WooNuxt requires a properly configured WordPress installation with WooCommerce and several plugins to function as a headless eCommerce backend.",[22,3654,3656],{"id":3655},"required-components","Required Components",[574,3658,3659,3665,3671,3676,3681,3686],{},[577,3660,3661,3664],{},[562,3662,3663],{},"WordPress 6.9.4+"," - Core WordPress installation with proper permalinks",[577,3666,3667,3670],{},[562,3668,3669],{},"WooCommerce 10.7.0+"," - Fully configured with products, shipping, and payments",[577,3672,3673,3675],{},[562,3674,1270],{}," - Essential plugin that configures everything for you",[577,3677,3678,3680],{},[562,3679,1278],{}," - Exposes WordPress data via GraphQL (auto-installed)",[577,3682,3683,3685],{},[562,3684,1284],{}," - Adds WooCommerce support to WPGraphQL (auto-installed)",[577,3687,3688,3691],{},[562,3689,3690],{},"Headless Login 0.4.4+"," - Enables customer authentication (auto-installed)",[22,3693,3695],{"id":3694},"setup-process","Setup Process",[10,3697,3698],{},"Follow these guides in order:",[1613,3700,3701,3710],{},[577,3702,3703,3709],{},[562,3704,3705],{},[1297,3706,3708],{"href":3707},"\u002Fdocs\u002Fwordpress-setup\u002Fconfiguration","Initial Configuration"," - Set up WordPress basics and permalinks",[577,3711,3712,3716],{},[562,3713,3714],{},[1297,3715,887],{"href":888}," - Install and configure WooNuxt Settings plugin (version 2.5.9+)",[22,3718,3720],{"id":3719},"quick-checklist","Quick Checklist",[10,3722,3723],{},"Before proceeding to frontend setup, ensure:",[1737,3725,3726],{},[574,3727,3728,3730,3732,3735,3738,3741,3744,3747,3750,3753],{},[577,3729,1752],{},[577,3731,1746],{},[577,3733,3734],{},"Product attributes created and assigned",[577,3736,3737],{},"Shipping zones configured",[577,3739,3740],{},"Payment method enabled",[577,3742,3743],{},"WooNuxt Settings plugin installed",[577,3745,3746],{},"Required plugins auto-installed",[577,3748,3749],{},"Global attributes configured",[577,3751,3752],{},"GraphQL endpoint accessible",[577,3754,3755],{},"Test queries work in GraphiQL IDE",[22,3757,3759],{"id":3758},"why-this-setup-works","Why This Setup Works",[574,3761,3762,3768,3774,3780,3786,3792],{},[577,3763,3764,3767],{},[562,3765,3766],{},"⚡ Fast Performance",": Static generation and optimized delivery",[577,3769,3770,3773],{},[562,3771,3772],{},"🎨 Design Freedom",": Complete control over frontend appearance",[577,3775,3776,3779],{},[562,3777,3778],{},"🔒 Secure",": WordPress admin hidden from public",[577,3781,3782,3785],{},[562,3783,3784],{},"📈 Scalable",": Frontend can be deployed on CDN",[577,3787,3788,3791],{},[562,3789,3790],{},"🔧 Maintainable",": Updates to WordPress don't break frontend",[577,3793,3794,3797],{},[562,3795,3796],{},"🌍 Multi-Platform",": Same backend can power web, mobile, etc.",[22,3799,3800],{"id":2199},"What's Next",[858,3802,3803],{},[861,3804,3805],{"icon":2212,"title":3708,"to":3707},[10,3806,3807],{},"Set up WordPress permalinks and basic settings",{"title":5,"searchDepth":57,"depth":57,"links":3809},[3810,3811,3812,3813,3814,3815],{"id":3648,"depth":57,"text":3649},{"id":3655,"depth":57,"text":3656},{"id":3694,"depth":57,"text":3695},{"id":3719,"depth":57,"text":3720},{"id":3758,"depth":57,"text":3759},{"id":2199,"depth":57,"text":3800},"Configure WordPress and WooCommerce for WooNuxt",{},{"icon":871},"\u002Fwordpress-setup",{"title":872,"description":3816},"2.wordpress-setup\u002F1.index","MyLkmfCUKDqfuk_7U9y8sgUUsawYrQWDAY3jYuxTPxA",{"id":3824,"title":3708,"body":3825,"description":3934,"extension":545,"links":546,"meta":3935,"navigation":3936,"path":3937,"seo":3938,"stem":3939,"__hash__":3940},"docs\u002F2.wordpress-setup\u002F2.configuration.md",{"type":7,"value":3826,"toc":3929},[3827,3830,3834,3844,3864,3878,3882,3885,3911,3914,3916,3919],[10,3828,3829],{},"WooNuxt requires specific WordPress configuration to enable the GraphQL endpoint. This should only take a few minutes.",[22,3831,3833],{"id":3832},"configure-permalinks","Configure Permalinks",[3835,3836,3837],"warning",{},[10,3838,3839,3840,3843],{},"WPGraphQL requires pretty permalinks. Without this, your GraphQL endpoint at ",[34,3841,3842],{},"\u002Fgraphql"," won't be accessible.",[1613,3845,3846,3852,3859],{},[577,3847,1784,3848,3851],{},[562,3849,3850],{},"Settings > Permalinks"," in WordPress admin",[577,3853,3854,3855,3858],{},"Select ",[562,3856,3857],{},"Post name"," structure",[577,3860,1855,3861],{},[562,3862,3863],{},"Save Changes",[10,3865,3866,3867,3870,3871,3874,3875,3877],{},"This changes URLs from ",[34,3868,3869],{},"?p=123"," to ",[34,3872,3873],{},"\u002Fsample-post\u002F"," and enables the ",[34,3876,3842],{}," endpoint.",[22,3879,3881],{"id":3880},"verify-requirements","Verify Requirements",[10,3883,3884],{},"Ensure you have:",[574,3886,3887,3896,3905],{},[577,3888,3889,3892,3893],{},[562,3890,3891],{},"WordPress 6.8.3+"," - Check ",[562,3894,3895],{},"Dashboard > Updates",[577,3897,3898,3892,3901,3904],{},[562,3899,3900],{},"WooCommerce 10.3.5+",[562,3902,3903],{},"Plugins"," page",[577,3906,3907,3910],{},[562,3908,3909],{},"At least one published product"," - For testing the connection",[10,3912,3913],{},"That's it for WordPress configuration! The rest is handled by the WooNuxt Settings plugin.",[22,3915,3800],{"id":2199},[10,3917,3918],{},"Now install the required plugins:",[858,3920,3921],{},[861,3922,3924],{"icon":1692,"title":3923},"Install Plugins",[10,3925,3926],{},[1297,3927,3928],{"href":888},"Continue to Plugin Installation →",{"title":5,"searchDepth":57,"depth":57,"links":3930},[3931,3932,3933],{"id":3832,"depth":57,"text":3833},{"id":3880,"depth":57,"text":3881},{"id":2199,"depth":57,"text":3800},"Configure WordPress basics for WooNuxt",{},{"icon":2212},"\u002Fwordpress-setup\u002Fconfiguration",{"title":3708,"description":3934},"2.wordpress-setup\u002F2.configuration","_MNEHn4oByp3HtbGJ0VT0DNKQYNNHwDAMWhH4sEvD3c",{"id":3942,"title":887,"body":3943,"description":5208,"extension":545,"links":546,"meta":5209,"navigation":5210,"path":5211,"seo":5212,"stem":5213,"__hash__":5214},"docs\u002F2.wordpress-setup\u002F3.plugins.md",{"type":7,"value":3944,"toc":5176},[3945,3948,3998,4002,4006,4040,4044,4047,4056,4060,4063,4105,4109,4112,4241,4245,4251,4274,4280,4284,4287,4291,4377,4380,4383,4418,4425,4429,4432,4452,4456,4459,4494,4498,4505,4630,4634,4637,4658,4660,4676,4688,4692,4695,4699,4705,4710,4714,4717,4723,4728,4746,4751,4765,4768,4771,4777,4800,4805,4819,4822,4825,4831,4836,4847,4850,4853,4856,4862,4867,4881,4887,4890,4893,4899,4904,4918,4923,4937,4944,4947,4950,4955,4958,4963,4994,5003,5006,5009,5014,5039,5042,5045,5048,5061,5066,5069,5072,5158,5160,5163,5173],[10,3946,3947],{},"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.",[347,3949,3958,3959],{"className":3950},[3951,3952,3953,3954,3955,3956,3957],"flex","items-center","justify-center","gap-4","mb-8","md:justify-start","not-prose","\n  ",[1297,3960,3973,3974,3973,3990,3958],{"href":1299,"download":88,"className":3961},[3951,3952,3962,3963,3964,3965,3966,3967,3968,3969,3970,3971,3972],"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    ",[347,3975,3979,3980,3979,3985,3973],{"className":3976},[3951,3977,3978],"flex-col","flex-1","\n      ",[47,3981,3984],{"className":3982},[3983],"font-semibold","WooNuxt setup plugin",[47,3986,3989],{"className":3987},[3988],"text-xs","woonuxt-settings.zip",[3991,3992],"img",{"className":3993,"width":3995,"height":3995,"src":3996,"alt":3997},[3994],"mr-2",36,"\u002Flogo.svg","Logo",[22,3999,4001],{"id":4000},"installation-steps","Installation Steps",[1388,4003,4005],{"id":4004},"upload-to-wordpress","Upload to WordPress",[1613,4007,4008,4014,4021,4029,4034],{},[577,4009,4010,4011],{},"In WordPress admin, navigate to ",[562,4012,4013],{},"Plugins > Add New",[577,4015,4016,4017,4020],{},"Click the ",[562,4018,4019],{},"Upload Plugin"," button at the top",[577,4022,1855,4023,4026,4027],{},[562,4024,4025],{},"Choose File"," and select ",[34,4028,3989],{},[577,4030,1855,4031],{},[562,4032,4033],{},"Install Now",[577,4035,1855,4036,4039],{},[562,4037,4038],{},"Activate"," once installation completes",[1388,4041,4043],{"id":4042},"access-settings","Access Settings",[10,4045,4046],{},"After activation, find the settings page:",[574,4048,4049,4053],{},[577,4050,1784,4051,3851],{},[562,4052,1787],{},[577,4054,4055],{},"You'll see a comprehensive dashboard with multiple sections",[22,4057,4059],{"id":4058},"what-the-plugin-does","What the Plugin Does",[10,4061,4062],{},"The WooNuxt Settings plugin handles the heavy lifting of WordPress configuration for your headless WooCommerce store.",[858,4064,4065,4071,4078,4085,4092,4099],{},[861,4066,4068],{"icon":863,"title":4067},"Auto-Install Dependencies",[10,4069,4070],{},"Automatically downloads and activates WPGraphQL, WooGraphQL, and Headless Login plugins",[861,4072,4075],{"icon":4073,"title":4074},"i-lucide-settings-2","GraphQL Configuration",[10,4076,4077],{},"Exposes all WooCommerce and WooNuxt settings via GraphQL API",[861,4079,4082],{"icon":4080,"title":4081},"i-lucide-credit-card","Payment Integration",[10,4083,4084],{},"Handles Stripe payment intent creation and exposes payment settings",[861,4086,4089],{"icon":4087,"title":4088},"i-lucide-filter","Product Filtering",[10,4090,4091],{},"Manages global product attributes for advanced filtering capabilities",[861,4093,4096],{"icon":4094,"title":4095},"i-lucide-palette","Brand Customization",[10,4097,4098],{},"Configure logo, primary colors, and visual branding",[861,4100,4102],{"icon":1686,"title":4101},"Deployment Hooks",[10,4103,4104],{},"Trigger Netlify\u002FVercel builds directly from WordPress",[22,4106,4108],{"id":4107},"required-dependencies","Required Dependencies",[10,4110,4111],{},"The plugin will automatically install these dependencies for you:",[4113,4114,4115,4161,4201],"code-group",{},[39,4116,4120],{"className":4117,"code":4118,"filename":1278,"language":4119,"meta":5,"style":5},"language-yaml shiki shiki-themes material-theme-palenight","Name: WPGraphQL\nPurpose: GraphQL API for WordPress\nDescription: Provides GraphQL endpoint at \u002Fgraphql\nAuto-installed: ✅ Yes\n","yaml",[34,4121,4122,4132,4142,4151],{"__ignoreMap":5},[47,4123,4124,4127,4129],{"class":49,"line":50},[47,4125,4126],{"class":118},"Name",[47,4128,131],{"class":71},[47,4130,4131],{"class":75}," WPGraphQL\n",[47,4133,4134,4137,4139],{"class":49,"line":57},[47,4135,4136],{"class":118},"Purpose",[47,4138,131],{"class":71},[47,4140,4141],{"class":75}," GraphQL API for WordPress\n",[47,4143,4144,4146,4148],{"class":49,"line":85},[47,4145,1167],{"class":118},[47,4147,131],{"class":71},[47,4149,4150],{"class":75}," Provides GraphQL endpoint at \u002Fgraphql\n",[47,4152,4153,4156,4158],{"class":49,"line":92},[47,4154,4155],{"class":118},"Auto-installed",[47,4157,131],{"class":71},[47,4159,4160],{"class":75}," ✅ Yes\n",[39,4162,4164],{"className":4117,"code":4163,"filename":1284,"language":4119,"meta":5,"style":5},"Name: WPGraphQL WooCommerce (WooGraphQL)\nPurpose: WooCommerce GraphQL integration\nDescription: Exposes WooCommerce data via GraphQL\nAuto-installed: ✅ Yes\n",[34,4165,4166,4175,4184,4193],{"__ignoreMap":5},[47,4167,4168,4170,4172],{"class":49,"line":50},[47,4169,4126],{"class":118},[47,4171,131],{"class":71},[47,4173,4174],{"class":75}," WPGraphQL WooCommerce (WooGraphQL)\n",[47,4176,4177,4179,4181],{"class":49,"line":57},[47,4178,4136],{"class":118},[47,4180,131],{"class":71},[47,4182,4183],{"class":75}," WooCommerce GraphQL integration\n",[47,4185,4186,4188,4190],{"class":49,"line":85},[47,4187,1167],{"class":118},[47,4189,131],{"class":71},[47,4191,4192],{"class":75}," Exposes WooCommerce data via GraphQL\n",[47,4194,4195,4197,4199],{"class":49,"line":92},[47,4196,4155],{"class":118},[47,4198,131],{"class":71},[47,4200,4160],{"class":75},[39,4202,4204],{"className":4117,"code":4203,"filename":3690,"language":4119,"meta":5,"style":5},"Name: WPGraphQL Headless Login\nPurpose: Headless authentication\nDescription: Enables login\u002Flogout via GraphQL mutations\nAuto-installed: ✅ Yes\n",[34,4205,4206,4215,4224,4233],{"__ignoreMap":5},[47,4207,4208,4210,4212],{"class":49,"line":50},[47,4209,4126],{"class":118},[47,4211,131],{"class":71},[47,4213,4214],{"class":75}," WPGraphQL Headless Login\n",[47,4216,4217,4219,4221],{"class":49,"line":57},[47,4218,4136],{"class":118},[47,4220,131],{"class":71},[47,4222,4223],{"class":75}," Headless authentication\n",[47,4225,4226,4228,4230],{"class":49,"line":85},[47,4227,1167],{"class":118},[47,4229,131],{"class":71},[47,4231,4232],{"class":75}," Enables login\u002Flogout via GraphQL mutations\n",[47,4234,4235,4237,4239],{"class":49,"line":92},[47,4236,4155],{"class":118},[47,4238,131],{"class":71},[47,4240,4160],{"class":75},[1388,4242,4244],{"id":4243},"auto-installation-process","Auto-Installation Process",[10,4246,4247,4248,4250],{},"When you visit ",[562,4249,1787],{}," for the first time:",[1613,4252,4253,4256,4263,4268,4271],{},[577,4254,4255],{},"The plugin checks for required dependencies",[577,4257,4258,4259,4262],{},"Shows ",[562,4260,4261],{},"\"Required Plugins\""," section with install buttons",[577,4264,1855,4265,4267],{},[562,4266,4033],{}," for each plugin",[577,4269,4270],{},"Plugins are downloaded, installed, and activated automatically",[577,4272,4273],{},"Once all plugins are installed, the section changes to deployment options",[4275,4276,4277],"note",{},[10,4278,4279],{},"The plugin uses secure AJAX requests with nonce verification to handle installations. Each plugin status is checked in real-time via jQuery.",[22,4281,4283],{"id":4282},"plugin-settings-overview","Plugin Settings Overview",[10,4285,4286],{},"Once installed, the WooNuxt Settings plugin provides these configuration options:",[1388,4288,4290],{"id":4289},"global-settings","Global Settings",[1150,4292,4293,4305],{},[1153,4294,4295],{},[1156,4296,4297,4300,4302],{},[1159,4298,4299],{},"Setting",[1159,4301,1167],{},[1159,4303,4304],{},"GraphQL Field",[1169,4306,4307,4321,4336,4350,4364],{},[1156,4308,4309,4313,4316],{},[1174,4310,4311],{},[562,4312,3997],{},[1174,4314,4315],{},"Your site logo URL",[1174,4317,4318],{},[34,4319,4320],{},"logo",[1156,4322,4323,4328,4331],{},[1174,4324,4325],{},[562,4326,4327],{},"Frontend URL",[1174,4329,4330],{},"Your Nuxt site URL (not WordPress)",[1174,4332,4333],{},[34,4334,4335],{},"frontEndUrl",[1156,4337,4338,4342,4345],{},[1174,4339,4340],{},[562,4341,1843],{},[1174,4343,4344],{},"Pagination limit (default: 24)",[1174,4346,4347],{},[34,4348,4349],{},"productsPerPage",[1156,4351,4352,4356,4359],{},[1174,4353,4354],{},[562,4355,1828],{},[1174,4357,4358],{},"Brand color in hex format",[1174,4360,4361],{},[34,4362,4363],{},"primary_color",[1156,4365,4366,4371,4374],{},[1174,4367,4368],{},[562,4369,4370],{},"Build Hook",[1174,4372,4373],{},"Netlify\u002FVercel deployment webhook",[1174,4375,4376],{},"-",[1388,4378,1849],{"id":4379},"global-attributes",[10,4381,4382],{},"Configure product attributes for filtering:",[574,4384,4385,4391,4400,4406,4412],{},[577,4386,4387,4390],{},[562,4388,4389],{},"Custom Label"," - Display name for the filter",[577,4392,4393,4396,4397,194],{},[562,4394,4395],{},"Attribute"," - WooCommerce attribute taxonomy (e.g., ",[34,4398,4399],{},"pa_color",[577,4401,4402,4405],{},[562,4403,4404],{},"Show Count"," - Display product count per term",[577,4407,4408,4411],{},[562,4409,4410],{},"Hide Empty"," - Hide attributes with no products",[577,4413,4414,4417],{},[562,4415,4416],{},"Open By Default"," - Expand filter by default",[10,4419,4420,4421,4424],{},"These settings are exposed via GraphQL as ",[34,4422,4423],{},"global_attributes"," array.",[1388,4426,4428],{"id":4427},"seo-settings","SEO Settings",[10,4430,4431],{},"Add social media handles:",[574,4433,4434,4440,4446],{},[577,4435,4436,4439],{},[562,4437,4438],{},"Provider"," - Social platform (Facebook, Twitter, Instagram, etc.)",[577,4441,4442,4445],{},[562,4443,4444],{},"Handle"," - Your username\u002Fhandle",[577,4447,4448,4451],{},[562,4449,4450],{},"URL"," - Full profile URL",[1388,4453,4455],{"id":4454},"stripe-configuration","Stripe Configuration",[10,4457,4458],{},"Stripe settings are automatically exposed via GraphQL:",[574,4460,4461,4467],{},[577,4462,4463,4464],{},"Reads from ",[562,4465,4466],{},"WooCommerce > Settings > Payments > Stripe",[577,4468,4469,4470,4473,4474],{},"Exposes ",[34,4471,4472],{},"stripeSettings"," with:\n",[574,4475,4476,4482,4488],{},[577,4477,4478,4481],{},[34,4479,4480],{},"enabled"," - Whether Stripe is active",[577,4483,4484,4487],{},[34,4485,4486],{},"testmode"," - Test or live mode",[577,4489,4490,4493],{},[34,4491,4492],{},"publishable_key"," - Public key based on environment",[22,4495,4497],{"id":4496},"graphql-schema","GraphQL Schema",[10,4499,4500,4501,4504],{},"After installation, the plugin adds ",[34,4502,4503],{},"woonuxtSettings"," to your GraphQL schema:",[39,4506,4508],{"className":1888,"code":4507,"language":1890,"meta":5,"style":5},"query getWooNuxtSettings {\n  woonuxtSettings {\n    primary_color\n    logo\n    publicIntrospectionEnabled\n    frontEndUrl\n    domain\n    maxPrice\n    productsPerPage\n    wooCommerceSettingsVersion\n    global_attributes {\n      slug\n      showCount\n      openByDefault\n      label\n      hideEmpty\n    }\n    stripeSettings {\n      enabled\n      testmode\n      test_publishable_key\n      publishable_key\n    }\n  }\n}\n",[34,4509,4510,4515,4519,4523,4527,4532,4537,4542,4547,4552,4557,4562,4567,4572,4577,4582,4587,4591,4596,4601,4606,4611,4616,4620,4625],{"__ignoreMap":5},[47,4511,4512],{"class":49,"line":50},[47,4513,4514],{},"query getWooNuxtSettings {\n",[47,4516,4517],{"class":49,"line":57},[47,4518,1946],{},[47,4520,4521],{"class":49,"line":85},[47,4522,1951],{},[47,4524,4525],{"class":49,"line":92},[47,4526,1956],{},[47,4528,4529],{"class":49,"line":111},[47,4530,4531],{},"    publicIntrospectionEnabled\n",[47,4533,4534],{"class":49,"line":125},[47,4535,4536],{},"    frontEndUrl\n",[47,4538,4539],{"class":49,"line":144},[47,4540,4541],{},"    domain\n",[47,4543,4544],{"class":49,"line":161},[47,4545,4546],{},"    maxPrice\n",[47,4548,4549],{"class":49,"line":174},[47,4550,4551],{},"    productsPerPage\n",[47,4553,4554],{"class":49,"line":188},[47,4555,4556],{},"    wooCommerceSettingsVersion\n",[47,4558,4559],{"class":49,"line":199},[47,4560,4561],{},"    global_attributes {\n",[47,4563,4564],{"class":49,"line":369},[47,4565,4566],{},"      slug\n",[47,4568,4569],{"class":49,"line":379},[47,4570,4571],{},"      showCount\n",[47,4573,4574],{"class":49,"line":808},[47,4575,4576],{},"      openByDefault\n",[47,4578,4579],{"class":49,"line":814},[47,4580,4581],{},"      label\n",[47,4583,4584],{"class":49,"line":819},[47,4585,4586],{},"      hideEmpty\n",[47,4588,4589],{"class":49,"line":825},[47,4590,1937],{},[47,4592,4593],{"class":49,"line":836},[47,4594,4595],{},"    stripeSettings {\n",[47,4597,4598],{"class":49,"line":842},[47,4599,4600],{},"      enabled\n",[47,4602,4603],{"class":49,"line":1128},[47,4604,4605],{},"      testmode\n",[47,4607,4608],{"class":49,"line":1134},[47,4609,4610],{},"      test_publishable_key\n",[47,4612,4613],{"class":49,"line":1139},[47,4614,4615],{},"      publishable_key\n",[47,4617,4618],{"class":49,"line":1145},[47,4619,1937],{},[47,4621,4623],{"class":49,"line":4622},24,[47,4624,307],{},[47,4626,4628],{"class":49,"line":4627},25,[47,4629,1965],{},[22,4631,4633],{"id":4632},"verification","Verification",[10,4635,4636],{},"After installation, verify everything is working:",[1737,4638,4639],{},[574,4640,4641,4644,4647,4652,4655],{},[577,4642,4643],{},"WooNuxt Settings plugin is activated",[577,4645,4646],{},"All required plugins show as \"Installed\" in Settings > WooNuxt",[577,4648,4649,4650],{},"GraphQL endpoint is accessible at ",[34,4651,3842],{},[577,4653,4654],{},"WPGraphQL shows in WordPress admin sidebar",[577,4656,4657],{},"WooCommerce products are visible in GraphQL IDE",[22,4659,1650],{"id":1649},[10,4661,4662,4665,4666,1508,4671,2179],{},[562,4663,4664],{},"Plugin auto-installation fails?"," Ensure WordPress is 6.9.4+ and you have admin access. Manual installation: download from ",[1297,4667,4670],{"href":4668,"rel":4669},"https:\u002F\u002Fwordpress.org\u002Fplugins\u002F",[1301],"WordPress.org",[1297,4672,4675],{"href":4673,"rel":4674},"https:\u002F\u002Fgithub.com\u002Fwp-graphql\u002Fwp-graphql-woocommerce\u002Freleases",[1301],"GitHub releases",[10,4677,4678,4681,4682,4684,4685,4687],{},[562,4679,4680],{},"GraphQL endpoint not accessible?"," Go to ",[562,4683,3850],{}," and click ",[562,4686,3863],{}," to flush rewrite rules.",[22,4689,4691],{"id":4690},"plugin-configuration","Plugin Configuration",[10,4693,4694],{},"After installing the WooNuxt Settings plugin, configure it to connect your WordPress backend with your Nuxt frontend.",[1388,4696,4698],{"id":4697},"accessing-settings","Accessing Settings",[10,4700,4701,4702,4704],{},"Navigate to ",[562,4703,1787],{}," in your WordPress admin dashboard.",[4275,4706,4707],{},[10,4708,4709],{},"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.",[1388,4711,4713],{"id":4712},"logo-configuration","Logo Configuration",[10,4715,4716],{},"Upload or specify your site logo:",[39,4718,4721],{"className":4719,"code":4720,"language":692},[690],"Logo URL: https:\u002F\u002Fyoursite.com\u002Fwp-content\u002Fuploads\u002Flogo.svg\n",[34,4722,4720],{"__ignoreMap":5},[10,4724,4725],{},[562,4726,4727],{},"How to set:",[1613,4729,4730,4736,4739,4742],{},[577,4731,4732,4733],{},"Upload logo to ",[562,4734,4735],{},"Media Library",[577,4737,4738],{},"Copy the file URL",[577,4740,4741],{},"Paste into the Logo field",[577,4743,1855,4744],{},[562,4745,3863],{},[10,4747,4748],{},[562,4749,4750],{},"Best practices:",[574,4752,4753,4756,4759,4762],{},[577,4754,4755],{},"Use SVG format for best quality",[577,4757,4758],{},"Recommended size: 200x50px to 400x100px",[577,4760,4761],{},"Transparent background works best",[577,4763,4764],{},"Logo appears in your Nuxt frontend header",[1388,4766,4327],{"id":4767},"frontend-url",[10,4769,4770],{},"Specify your Nuxt application URL (not your WordPress URL):",[39,4772,4775],{"className":4773,"code":4774,"language":692},[690],"Frontend URL: https:\u002F\u002Fyour-store.netlify.app\n",[34,4776,4774],{"__ignoreMap":5},[3835,4778,4779,4786],{},[10,4780,4781,4782,4785],{},"This should be your ",[562,4783,4784],{},"Nuxt site URL",", not your WordPress backend URL. Example:",[574,4787,4788,4794],{},[577,4789,4790,4791],{},"✅ Correct: ",[34,4792,4793],{},"https:\u002F\u002Fmystore.netlify.app",[577,4795,4796,4797],{},"❌ Wrong: ",[34,4798,4799],{},"https:\u002F\u002Fwordpress.mystore.com",[10,4801,4802],{},[562,4803,4804],{},"Use cases:",[574,4806,4807,4810,4813,4816],{},[577,4808,4809],{},"Links in emails point to frontend",[577,4811,4812],{},"Redirects after login\u002Flogout",[577,4814,4815],{},"CORS configuration",[577,4817,4818],{},"Social sharing links",[1388,4820,1843],{"id":4821},"products-per-page",[10,4823,4824],{},"Set pagination limit for product listings:",[39,4826,4829],{"className":4827,"code":4828,"language":692},[690],"Products Per Page: 24 (default)\n",[34,4830,4828],{"__ignoreMap":5},[10,4832,4833],{},[562,4834,4835],{},"Common values:",[574,4837,4838,4841,4844],{},[577,4839,4840],{},"12 - Fewer products, faster loading",[577,4842,4843],{},"24 - Balanced (default)",[577,4845,4846],{},"48 - More products per page",[10,4848,4849],{},"This value is exposed via GraphQL and used by your Nuxt frontend for pagination.",[1388,4851,1828],{"id":4852},"primary-color",[10,4854,4855],{},"Define your brand's primary color:",[39,4857,4860],{"className":4858,"code":4859,"language":692},[690],"Primary Color: #7F54B2 (default)\n",[34,4861,4859],{"__ignoreMap":5},[10,4863,4864],{},[562,4865,4866],{},"Features:",[574,4868,4869,4872,4875,4878],{},[577,4870,4871],{},"Color picker interface",[577,4873,4874],{},"Live preview of frontend elements",[577,4876,4877],{},"Hex color code input",[577,4879,4880],{},"Affects buttons, links, and interactive elements",[10,4882,4883,4884,4886],{},"The color is exposed via GraphQL as ",[34,4885,4363],{}," for your Nuxt theme.",[1388,4888,4370],{"id":4889},"build-hook",[10,4891,4892],{},"Trigger deployments from WordPress:",[39,4894,4897],{"className":4895,"code":4896,"language":692},[690],"Build Hook: https:\u002F\u002Fapi.netlify.com\u002Fbuild_hooks\u002Fyour_unique_id\n",[34,4898,4896],{"__ignoreMap":5},[10,4900,4901],{},[562,4902,4903],{},"Where to find:",[1613,4905,4906,4912],{},[577,4907,4908,4911],{},[562,4909,4910],{},"Netlify",": Site Settings > Build & Deploy > Build Hooks",[577,4913,4914,4917],{},[562,4915,4916],{},"Vercel",": Project Settings > Git > Deploy Hooks",[10,4919,4920],{},[562,4921,4922],{},"When to use:",[574,4924,4925,4928,4931,4934],{},[577,4926,4927],{},"After publishing new products",[577,4929,4930],{},"After updating content",[577,4932,4933],{},"After changing settings",[577,4935,4936],{},"Automatic deployments on save",[10,4938,4939,4940,4943],{},"Once configured, a ",[562,4941,4942],{},"Deploy"," button appears in the WooNuxt toolbar.",[1388,4945,1849],{"id":4946},"global-attributes-1",[10,4948,4949],{},"Global Attributes enable advanced product filtering on your frontend.",[10,4951,4952],{},[562,4953,4954],{},"What Are Global Attributes?",[10,4956,4957],{},"Product attributes in WooCommerce (like Color, Size, Material) that you want to use as filters across all product pages.",[10,4959,4960],{},[562,4961,4962],{},"Adding a Filter:",[1613,4964,4965,4970,4973,4976,4990],{},[577,4966,1855,4967,4969],{},[562,4968,1858],{}," button",[577,4971,4972],{},"Enter a custom label (e.g., \"Filter by Color\")",[577,4974,4975],{},"Select the attribute from dropdown (e.g., Color)",[577,4977,4978,4979],{},"Configure display options:\n",[574,4980,4981,4984,4987],{},[577,4982,4983],{},"☑️ Show Count - Display number of products",[577,4985,4986],{},"☑️ Hide Empty - Hide terms with 0 products",[577,4988,4989],{},"☑️ Open By Default - Start expanded",[577,4991,1855,4992],{},[562,4993,3863],{},[1304,4995,4996],{},[10,4997,4998,4999,5002],{},"Create product attributes first in ",[562,5000,5001],{},"Products > Attributes"," before configuring global attributes in WooNuxt Settings.",[1388,5004,4428],{"id":5005},"seo-settings-1",[10,5007,5008],{},"Configure social media profiles for rich meta tags:",[10,5010,5011],{},[562,5012,5013],{},"Adding Social Profiles:",[1613,5015,5016,5021,5024,5027,5035],{},[577,5017,1855,5018,4969],{},[562,5019,5020],{},"Add new",[577,5022,5023],{},"Enter provider name (e.g., \"facebook\", \"twitter\", \"instagram\")",[577,5025,5026],{},"Add your handle (e.g., \"@yourstore\")",[577,5028,5029,5030,5034],{},"Add full profile URL (e.g., \"",[1297,5031,5032],{"href":5032,"rel":5033},"https:\u002F\u002Ffacebook.com\u002Fyourstore",[1301],"\")",[577,5036,1855,5037],{},[562,5038,3863],{},[10,5040,5041],{},"These settings populate Open Graph and Twitter Card meta tags on your frontend for better social sharing.",[1388,5043,4455],{"id":5044},"stripe-configuration-1",[10,5046,5047],{},"Stripe settings are automatically pulled from WooCommerce:",[1613,5049,5050,5055,5058],{},[577,5051,5052,5053],{},"Configure Stripe in ",[562,5054,4466],{},[577,5056,5057],{},"WooNuxt Settings automatically exposes these via GraphQL",[577,5059,5060],{},"Your Nuxt frontend reads the appropriate key based on environment",[4275,5062,5063],{},[10,5064,5065],{},"The plugin intelligently returns test or live keys based on your WooCommerce Stripe mode setting.",[22,5067,4633],{"id":5068},"verification-1",[10,5070,5071],{},"After configuring settings, verify in GraphQL IDE:",[39,5073,5075],{"className":1888,"code":5074,"language":1890,"meta":5,"style":5},"query TestSettings {\n  woonuxtSettings {\n    logo\n    primary_color\n    frontEndUrl\n    productsPerPage\n    global_attributes {\n      label\n      slug\n      showCount\n      hideEmpty\n      openByDefault\n    }\n    stripeSettings {\n      enabled\n      testmode\n      publishable_key\n    }\n  }\n}\n",[34,5076,5077,5082,5086,5090,5094,5098,5102,5106,5110,5114,5118,5122,5126,5130,5134,5138,5142,5146,5150,5154],{"__ignoreMap":5},[47,5078,5079],{"class":49,"line":50},[47,5080,5081],{},"query TestSettings {\n",[47,5083,5084],{"class":49,"line":57},[47,5085,1946],{},[47,5087,5088],{"class":49,"line":85},[47,5089,1956],{},[47,5091,5092],{"class":49,"line":92},[47,5093,1951],{},[47,5095,5096],{"class":49,"line":111},[47,5097,4536],{},[47,5099,5100],{"class":49,"line":125},[47,5101,4551],{},[47,5103,5104],{"class":49,"line":144},[47,5105,4561],{},[47,5107,5108],{"class":49,"line":161},[47,5109,4581],{},[47,5111,5112],{"class":49,"line":174},[47,5113,4566],{},[47,5115,5116],{"class":49,"line":188},[47,5117,4571],{},[47,5119,5120],{"class":49,"line":199},[47,5121,4586],{},[47,5123,5124],{"class":49,"line":369},[47,5125,4576],{},[47,5127,5128],{"class":49,"line":379},[47,5129,1937],{},[47,5131,5132],{"class":49,"line":808},[47,5133,4595],{},[47,5135,5136],{"class":49,"line":814},[47,5137,4600],{},[47,5139,5140],{"class":49,"line":819},[47,5141,4605],{},[47,5143,5144],{"class":49,"line":825},[47,5145,4615],{},[47,5147,5148],{"class":49,"line":836},[47,5149,1937],{},[47,5151,5152],{"class":49,"line":842},[47,5153,307],{},[47,5155,5156],{"class":49,"line":1128},[47,5157,1965],{},[22,5159,3800],{"id":2199},[10,5161,5162],{},"With WordPress fully configured, you're ready to start building with WooNuxt!",[1375,5164,5165],{},[10,5166,5167,5168,5172],{},"Your WordPress backend is now configured and ready to power your headless WooCommerce store. Check out the ",[1297,5169,5171],{"href":1601,"rel":5170},[1301],"WooNuxt GitHub repository"," to get started with the frontend.",[535,5174,5175],{},"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":5,"searchDepth":57,"depth":57,"links":5177},[5178,5182,5183,5186,5192,5193,5194,5195,5206,5207],{"id":4000,"depth":57,"text":4001,"children":5179},[5180,5181],{"id":4004,"depth":85,"text":4005},{"id":4042,"depth":85,"text":4043},{"id":4058,"depth":57,"text":4059},{"id":4107,"depth":57,"text":4108,"children":5184},[5185],{"id":4243,"depth":85,"text":4244},{"id":4282,"depth":57,"text":4283,"children":5187},[5188,5189,5190,5191],{"id":4289,"depth":85,"text":4290},{"id":4379,"depth":85,"text":1849},{"id":4427,"depth":85,"text":4428},{"id":4454,"depth":85,"text":4455},{"id":4496,"depth":57,"text":4497},{"id":4632,"depth":57,"text":4633},{"id":1649,"depth":57,"text":1650},{"id":4690,"depth":57,"text":4691,"children":5196},[5197,5198,5199,5200,5201,5202,5203,5204,5205],{"id":4697,"depth":85,"text":4698},{"id":4712,"depth":85,"text":4713},{"id":4767,"depth":85,"text":4327},{"id":4821,"depth":85,"text":1843},{"id":4852,"depth":85,"text":1828},{"id":4889,"depth":85,"text":4370},{"id":4946,"depth":85,"text":1849},{"id":5005,"depth":85,"text":4428},{"id":5044,"depth":85,"text":4455},{"id":5068,"depth":57,"text":4633},{"id":2199,"depth":57,"text":3800},"Install and configure WooNuxt Settings plugin",{},{"icon":1692},"\u002Fwordpress-setup\u002Fplugins",{"title":887,"description":5208},"2.wordpress-setup\u002F3.plugins","c1gThVqcKW9rBW7VG4rq8dgTOdt0k8yi_xQhzSeG9a4",{"id":5216,"title":5217,"body":5218,"description":5558,"extension":545,"links":546,"meta":5559,"navigation":5560,"path":5562,"seo":5563,"stem":5564,"__hash__":5565},"docs\u002F3.configuration\u002F1.deployment.md","Deployment",{"type":7,"value":5219,"toc":5546},[5220,5223,5227,5289,5292,5296,5322,5326,5329,5354,5357,5360,5385,5389,5403,5407,5410,5465,5473,5477,5480,5536,5543],[10,5221,5222],{},"WooNuxt supports three output modes. Choose the one that fits your hosting and catalog size.",[22,5224,5226],{"id":5225},"output-modes","Output Modes",[1150,5228,5229,5242],{},[1153,5230,5231],{},[1156,5232,5233,5236,5239],{},[1159,5234,5235],{},"Mode",[1159,5237,5238],{},"Command",[1159,5240,5241],{},"Best For",[1169,5243,5244,5259,5274],{},[1156,5245,5246,5251,5256],{},[1174,5247,5248],{},[562,5249,5250],{},"Static (SSG)",[1174,5252,5253],{},[34,5254,5255],{},"nuxt generate",[1174,5257,5258],{},"Small–medium catalogs, cheapest hosting",[1156,5260,5261,5266,5271],{},[1174,5262,5263],{},[562,5264,5265],{},"Server (SSR)",[1174,5267,5268],{},[34,5269,5270],{},"nuxt build",[1174,5272,5273],{},"Large catalogs, always-fresh data",[1156,5275,5276,5281,5286],{},[1174,5277,5278],{},[562,5279,5280],{},"Hybrid (ISR)",[1174,5282,5283,5285],{},[34,5284,5270],{}," + ISR routes",[1174,5287,5288],{},"Large catalogs with caching",[22,5290,4910],{"id":5291},"netlify",[1388,5293,5295],{"id":5294},"static-generation-recommended","Static Generation (Recommended)",[1613,5297,5298,5301,5311,5319],{},[577,5299,5300],{},"Connect your GitHub repo in the Netlify dashboard",[577,5302,5303,5304,5307,5308],{},"Set ",[562,5305,5306],{},"Build command",": ",[34,5309,5310],{},"npm run generate",[577,5312,5303,5313,5307,5316],{},[562,5314,5315],{},"Publish directory",[34,5317,5318],{},".output\u002Fpublic",[577,5320,5321],{},"Add environment variables (see below)",[1388,5323,5325],{"id":5324},"build-hook-trigger-rebuild-from-wordpress","Build Hook (Trigger Rebuild from WordPress)",[10,5327,5328],{},"When content changes in WooCommerce (new products, price updates), you can trigger a rebuild automatically:",[1613,5330,5331,5338,5341,5348],{},[577,5332,5333,5334,5337],{},"In Netlify: ",[562,5335,5336],{},"Site settings > Build & deploy > Build hooks"," → create a hook",[577,5339,5340],{},"Copy the hook URL",[577,5342,5343,5344,5347],{},"In WordPress: ",[562,5345,5346],{},"Settings > WooNuxt > Build Hook"," → paste the URL",[577,5349,1855,5350,5353],{},[562,5351,5352],{},"Trigger Rebuild"," to test",[10,5355,5356],{},"The rebuild button appears in the WooNuxt Settings admin page only when a Build Hook URL is configured.",[22,5358,4916],{"id":5359},"vercel",[1613,5361,5362,5365,5372,5382],{},[577,5363,5364],{},"Import your GitHub repo in the Vercel dashboard",[577,5366,5367,5368,5371],{},"Framework preset: ",[562,5369,5370],{},"Nuxt.js"," (auto-detected)",[577,5373,5374,5375,5377,5378,5381],{},"Build command: ",[34,5376,5310],{}," (SSG) or ",[34,5379,5380],{},"npm run build"," (SSR)",[577,5383,5384],{},"Add environment variables",[1388,5386,5388],{"id":5387},"build-hook-for-vercel","Build Hook for Vercel",[1613,5390,5391,5397],{},[577,5392,5393,5394,5337],{},"In Vercel: ",[562,5395,5396],{},"Project > Settings > Git > Deploy Hooks",[577,5398,5399,5400,5402],{},"Copy the URL and paste it into ",[562,5401,5346],{}," in WordPress",[22,5404,5406],{"id":5405},"required-environment-variables","Required Environment Variables",[10,5408,5409],{},"Set these in your hosting provider's environment variables panel:",[39,5411,5413],{"className":1031,"code":5412,"language":1033,"meta":5,"style":5},"# Required\nGQL_HOST=https:\u002F\u002Fyourwordpress.com\u002Fgraphql\nNUXT_IMAGE_DOMAINS=yourwordpress.com,cdn.yourwordpress.com\n\n# Optional — overrides WooNuxt Settings plugin values\nNUXT_PUBLIC_PRODUCTS_PER_PAGE=24\nNUXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=pk_live_...\nPRIMARY_COLOR=#7F54B2\n\n# Optional — ISR cache lifetime (SSR\u002Fhybrid mode only)\nCATALOG_ISR_TTL=3600\n",[34,5414,5415,5420,5425,5430,5434,5439,5443,5448,5452,5456,5461],{"__ignoreMap":5},[47,5416,5417],{"class":49,"line":50},[47,5418,5419],{},"# Required\n",[47,5421,5422],{"class":49,"line":57},[47,5423,5424],{},"GQL_HOST=https:\u002F\u002Fyourwordpress.com\u002Fgraphql\n",[47,5426,5427],{"class":49,"line":85},[47,5428,5429],{},"NUXT_IMAGE_DOMAINS=yourwordpress.com,cdn.yourwordpress.com\n",[47,5431,5432],{"class":49,"line":92},[47,5433,89],{"emptyLinePlaceholder":88},[47,5435,5436],{"class":49,"line":111},[47,5437,5438],{},"# Optional — overrides WooNuxt Settings plugin values\n",[47,5440,5441],{"class":49,"line":125},[47,5442,1116],{},[47,5444,5445],{"class":49,"line":144},[47,5446,5447],{},"NUXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=pk_live_...\n",[47,5449,5450],{"class":49,"line":161},[47,5451,1148],{},[47,5453,5454],{"class":49,"line":174},[47,5455,89],{"emptyLinePlaceholder":88},[47,5457,5458],{"class":49,"line":188},[47,5459,5460],{},"# Optional — ISR cache lifetime (SSR\u002Fhybrid mode only)\n",[47,5462,5463],{"class":49,"line":199},[47,5464,1102],{},[3835,5466,5467],{},[10,5468,5469,5470,5472],{},"Never commit your ",[34,5471,1027],{}," file. All secrets should be set via your hosting provider's environment variables UI.",[22,5474,5476],{"id":5475},"ssl-for-local-development","SSL for Local Development",[10,5478,5479],{},"If you need HTTPS locally (Stripe, PWA, OAuth providers):",[39,5481,5483],{"className":721,"code":5482,"filename":927,"language":723,"meta":5,"style":5},"# Install mkcert\nbrew install mkcert\nmkcert -install\n\n# Generate local certificate\nmkcert localhost\n\n# Run dev server with SSL\nnpm run dev:ssl\n",[34,5484,5485,5490,5498,5504,5508,5513,5519,5523,5528],{"__ignoreMap":5},[47,5486,5487],{"class":49,"line":50},[47,5488,5489],{"class":53},"# Install mkcert\n",[47,5491,5492,5494,5496],{"class":49,"line":57},[47,5493,1407],{"class":282},[47,5495,1410],{"class":75},[47,5497,1413],{"class":75},[47,5499,5500,5502],{"class":49,"line":85},[47,5501,1498],{"class":282},[47,5503,1528],{"class":75},[47,5505,5506],{"class":49,"line":92},[47,5507,89],{"emptyLinePlaceholder":88},[47,5509,5510],{"class":49,"line":111},[47,5511,5512],{"class":53},"# Generate local certificate\n",[47,5514,5515,5517],{"class":49,"line":125},[47,5516,1498],{"class":282},[47,5518,1501],{"class":75},[47,5520,5521],{"class":49,"line":144},[47,5522,89],{"emptyLinePlaceholder":88},[47,5524,5525],{"class":49,"line":161},[47,5526,5527],{"class":53},"# Run dev server with SSL\n",[47,5529,5530,5532,5534],{"class":49,"line":174},[47,5531,763],{"class":282},[47,5533,830],{"class":75},[47,5535,1550],{"class":75},[10,5537,1590,5538,5540,5541,2179],{},[34,5539,1593],{}," script is pre-configured in ",[34,5542,1597],{},[535,5544,5545],{},"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":5,"searchDepth":57,"depth":57,"links":5547},[5548,5549,5553,5556,5557],{"id":5225,"depth":57,"text":5226},{"id":5291,"depth":57,"text":4910,"children":5550},[5551,5552],{"id":5294,"depth":85,"text":5295},{"id":5324,"depth":85,"text":5325},{"id":5359,"depth":57,"text":4916,"children":5554},[5555],{"id":5387,"depth":85,"text":5388},{"id":5405,"depth":57,"text":5406},{"id":5475,"depth":57,"text":5476},"Deploy WooNuxt to Netlify, Vercel, or any static host",{},{"icon":5561},"i-lucide-rocket","\u002Fconfiguration\u002Fdeployment",{"title":5217,"description":5558},"3.configuration\u002F1.deployment","SlfnFYHvqwXRGCh2f75QwzbwC1_O6bmFQybrW1g_3LY",{"id":5567,"title":2984,"body":5568,"description":6610,"extension":545,"links":546,"meta":6611,"navigation":6612,"path":6614,"seo":6615,"stem":6616,"__hash__":6617},"docs\u002F3.configuration\u002F2.composables.md",{"type":7,"value":5569,"toc":6595},[5570,5573,5577,5580,5704,5718,5721,5725,5728,5860,5866,5868,5872,5875,5947,5949,5953,5956,6008,6015,6017,6021,6024,6085,6087,6091,6094,6136,6155,6157,6161,6164,6226,6228,6232,6238,6310,6312,6316,6319,6371,6373,6377,6380,6441,6443,6447,6450,6478,6480,6484,6487,6515,6529,6531,6534,6540,6592],[10,5571,5572],{},"WooNuxt provides 13 composables that handle all store logic. They are available globally — no import needed.",[22,5574,5576],{"id":5575},"usecart","useCart",[10,5578,5579],{},"Manages the shopping cart state and all cart mutations.",[39,5581,5583],{"className":41,"code":5582,"language":43,"meta":5,"style":5},"const {\n  cart,              \u002F\u002F Ref\u003CCart> — reactive cart object\n  cartTotals,        \u002F\u002F Computed cart totals\n  cartCount,         \u002F\u002F Computed item count\n  isUpdatingCart,    \u002F\u002F Ref\u003Cboolean> — loading state\n  addToCart,         \u002F\u002F (input: AddToCartInput) => Promise\u003Cvoid>\n  updateItemQuantity,\u002F\u002F (key: string, quantity: number) => Promise\u003Cvoid>\n  removeItem,        \u002F\u002F (key: string) => Promise\u003Cvoid>\n  emptyCart,         \u002F\u002F () => Promise\u003Cvoid>\n  applyCoupon,       \u002F\u002F (code: string) => Promise\u003Cvoid>\n  removeCoupon,      \u002F\u002F (code: string) => Promise\u003Cvoid>\n} = useCart()\n",[34,5584,5585,5592,5602,5612,5622,5632,5642,5652,5662,5672,5682,5692],{"__ignoreMap":5},[47,5586,5587,5590],{"class":49,"line":50},[47,5588,5589],{"class":104},"const",[47,5591,108],{"class":71},[47,5593,5594,5597,5599],{"class":49,"line":57},[47,5595,5596],{"class":64},"  cart",[47,5598,2912],{"class":71},[47,5600,5601],{"class":53},"              \u002F\u002F Ref\u003CCart> — reactive cart object\n",[47,5603,5604,5607,5609],{"class":49,"line":85},[47,5605,5606],{"class":64},"  cartTotals",[47,5608,2912],{"class":71},[47,5610,5611],{"class":53},"        \u002F\u002F Computed cart totals\n",[47,5613,5614,5617,5619],{"class":49,"line":92},[47,5615,5616],{"class":64},"  cartCount",[47,5618,2912],{"class":71},[47,5620,5621],{"class":53},"         \u002F\u002F Computed item count\n",[47,5623,5624,5627,5629],{"class":49,"line":111},[47,5625,5626],{"class":64},"  isUpdatingCart",[47,5628,2912],{"class":71},[47,5630,5631],{"class":53},"    \u002F\u002F Ref\u003Cboolean> — loading state\n",[47,5633,5634,5637,5639],{"class":49,"line":125},[47,5635,5636],{"class":64},"  addToCart",[47,5638,2912],{"class":71},[47,5640,5641],{"class":53},"         \u002F\u002F (input: AddToCartInput) => Promise\u003Cvoid>\n",[47,5643,5644,5647,5649],{"class":49,"line":144},[47,5645,5646],{"class":64},"  updateItemQuantity",[47,5648,2912],{"class":71},[47,5650,5651],{"class":53},"\u002F\u002F (key: string, quantity: number) => Promise\u003Cvoid>\n",[47,5653,5654,5657,5659],{"class":49,"line":161},[47,5655,5656],{"class":64},"  removeItem",[47,5658,2912],{"class":71},[47,5660,5661],{"class":53},"        \u002F\u002F (key: string) => Promise\u003Cvoid>\n",[47,5663,5664,5667,5669],{"class":49,"line":174},[47,5665,5666],{"class":64},"  emptyCart",[47,5668,2912],{"class":71},[47,5670,5671],{"class":53},"         \u002F\u002F () => Promise\u003Cvoid>\n",[47,5673,5674,5677,5679],{"class":49,"line":188},[47,5675,5676],{"class":64},"  applyCoupon",[47,5678,2912],{"class":71},[47,5680,5681],{"class":53},"       \u002F\u002F (code: string) => Promise\u003Cvoid>\n",[47,5683,5684,5687,5689],{"class":49,"line":199},[47,5685,5686],{"class":64},"  removeCoupon",[47,5688,2912],{"class":71},[47,5690,5691],{"class":53},"      \u002F\u002F (code: string) => Promise\u003Cvoid>\n",[47,5693,5694,5696,5699,5702],{"class":49,"line":369},[47,5695,2317],{"class":71},[47,5697,5698],{"class":71}," =",[47,5700,5701],{"class":114}," useCart",[47,5703,2549],{"class":64},[10,5705,5706,5709,5710,5713,5714,5717],{},[562,5707,5708],{},"Modes:"," The cart supports ",[34,5711,5712],{},"optimistic"," (instant UI feedback) and ",[34,5715,5716],{},"safe"," (wait for server confirmation) update modes. Mutations are queued to prevent race conditions.",[5719,5720],"hr",{},[22,5722,5724],{"id":5723},"useauth","useAuth",[10,5726,5727],{},"Handles customer authentication, sessions, and account data.",[39,5729,5731],{"className":41,"code":5730,"language":43,"meta":5,"style":5},"const {\n  customer,          \u002F\u002F Ref\u003CCustomer> — logged-in customer data\n  viewer,            \u002F\u002F Ref\u003CViewer> — current user\n  orders,            \u002F\u002F Ref\u003COrder[]>\n  downloads,         \u002F\u002F Ref\u003CDownload[]>\n  isPending,         \u002F\u002F Ref\u003Cboolean>\n  isLoggedIn,        \u002F\u002F ComputedRef\u003Cboolean>\n  loginUser,         \u002F\u002F (input: LoginInput) => Promise\u003C{ success, error }>\n  logoutUser,        \u002F\u002F () => Promise\u003Cvoid>\n  registerUser,      \u002F\u002F (input: RegisterInput) => Promise\u003C{ success, error }>\n  updateCustomer,    \u002F\u002F (input: UpdateCustomerInput) => Promise\u003Cvoid>\n  refreshCart,       \u002F\u002F () => Promise\u003Cvoid>\n} = useAuth()\n",[34,5732,5733,5739,5749,5759,5769,5779,5789,5799,5809,5819,5829,5839,5849],{"__ignoreMap":5},[47,5734,5735,5737],{"class":49,"line":50},[47,5736,5589],{"class":104},[47,5738,108],{"class":71},[47,5740,5741,5744,5746],{"class":49,"line":57},[47,5742,5743],{"class":64},"  customer",[47,5745,2912],{"class":71},[47,5747,5748],{"class":53},"          \u002F\u002F Ref\u003CCustomer> — logged-in customer data\n",[47,5750,5751,5754,5756],{"class":49,"line":85},[47,5752,5753],{"class":64},"  viewer",[47,5755,2912],{"class":71},[47,5757,5758],{"class":53},"            \u002F\u002F Ref\u003CViewer> — current user\n",[47,5760,5761,5764,5766],{"class":49,"line":92},[47,5762,5763],{"class":64},"  orders",[47,5765,2912],{"class":71},[47,5767,5768],{"class":53},"            \u002F\u002F Ref\u003COrder[]>\n",[47,5770,5771,5774,5776],{"class":49,"line":111},[47,5772,5773],{"class":64},"  downloads",[47,5775,2912],{"class":71},[47,5777,5778],{"class":53},"         \u002F\u002F Ref\u003CDownload[]>\n",[47,5780,5781,5784,5786],{"class":49,"line":125},[47,5782,5783],{"class":64},"  isPending",[47,5785,2912],{"class":71},[47,5787,5788],{"class":53},"         \u002F\u002F Ref\u003Cboolean>\n",[47,5790,5791,5794,5796],{"class":49,"line":144},[47,5792,5793],{"class":64},"  isLoggedIn",[47,5795,2912],{"class":71},[47,5797,5798],{"class":53},"        \u002F\u002F ComputedRef\u003Cboolean>\n",[47,5800,5801,5804,5806],{"class":49,"line":161},[47,5802,5803],{"class":64},"  loginUser",[47,5805,2912],{"class":71},[47,5807,5808],{"class":53},"         \u002F\u002F (input: LoginInput) => Promise\u003C{ success, error }>\n",[47,5810,5811,5814,5816],{"class":49,"line":174},[47,5812,5813],{"class":64},"  logoutUser",[47,5815,2912],{"class":71},[47,5817,5818],{"class":53},"        \u002F\u002F () => Promise\u003Cvoid>\n",[47,5820,5821,5824,5826],{"class":49,"line":188},[47,5822,5823],{"class":64},"  registerUser",[47,5825,2912],{"class":71},[47,5827,5828],{"class":53},"      \u002F\u002F (input: RegisterInput) => Promise\u003C{ success, error }>\n",[47,5830,5831,5834,5836],{"class":49,"line":199},[47,5832,5833],{"class":64},"  updateCustomer",[47,5835,2912],{"class":71},[47,5837,5838],{"class":53},"    \u002F\u002F (input: UpdateCustomerInput) => Promise\u003Cvoid>\n",[47,5840,5841,5844,5846],{"class":49,"line":369},[47,5842,5843],{"class":64},"  refreshCart",[47,5845,2912],{"class":71},[47,5847,5848],{"class":53},"       \u002F\u002F () => Promise\u003Cvoid>\n",[47,5850,5851,5853,5855,5858],{"class":49,"line":379},[47,5852,2317],{"class":71},[47,5854,5698],{"class":71},[47,5856,5857],{"class":114}," useAuth",[47,5859,2549],{"class":64},[10,5861,5862,5863,2179],{},"Authentication uses JWT tokens stored in cookies. Tokens are refreshed automatically on expiry via ",[34,5864,5865],{},"useAuthTokens",[5719,5867],{},[22,5869,5871],{"id":5870},"usecheckout","useCheckout",[10,5873,5874],{},"Controls the checkout flow, shipping, and payment method selection.",[39,5876,5878],{"className":41,"code":5877,"language":43,"meta":5,"style":5},"const {\n  orderInput,        \u002F\u002F Ref — checkout form state\n  isProcessingOrder, \u002F\u002F Ref\u003Cboolean>\n  proccessCheckout,  \u002F\u002F () => Promise\u003Cvoid>\n  paymentGateways,   \u002F\u002F Ref\u003CPaymentGateway[]>\n  shippingMethods,   \u002F\u002F Ref\u003CShippingMethod[]>\n} = useCheckout()\n",[34,5879,5880,5886,5896,5906,5916,5926,5936],{"__ignoreMap":5},[47,5881,5882,5884],{"class":49,"line":50},[47,5883,5589],{"class":104},[47,5885,108],{"class":71},[47,5887,5888,5891,5893],{"class":49,"line":57},[47,5889,5890],{"class":64},"  orderInput",[47,5892,2912],{"class":71},[47,5894,5895],{"class":53},"        \u002F\u002F Ref — checkout form state\n",[47,5897,5898,5901,5903],{"class":49,"line":85},[47,5899,5900],{"class":64},"  isProcessingOrder",[47,5902,2912],{"class":71},[47,5904,5905],{"class":53}," \u002F\u002F Ref\u003Cboolean>\n",[47,5907,5908,5911,5913],{"class":49,"line":92},[47,5909,5910],{"class":64},"  proccessCheckout",[47,5912,2912],{"class":71},[47,5914,5915],{"class":53},"  \u002F\u002F () => Promise\u003Cvoid>\n",[47,5917,5918,5921,5923],{"class":49,"line":111},[47,5919,5920],{"class":64},"  paymentGateways",[47,5922,2912],{"class":71},[47,5924,5925],{"class":53},"   \u002F\u002F Ref\u003CPaymentGateway[]>\n",[47,5927,5928,5931,5933],{"class":49,"line":125},[47,5929,5930],{"class":64},"  shippingMethods",[47,5932,2912],{"class":71},[47,5934,5935],{"class":53},"   \u002F\u002F Ref\u003CShippingMethod[]>\n",[47,5937,5938,5940,5942,5945],{"class":49,"line":144},[47,5939,2317],{"class":71},[47,5941,5698],{"class":71},[47,5943,5944],{"class":114}," useCheckout",[47,5946,2549],{"class":64},[5719,5948],{},[22,5950,5952],{"id":5951},"usefiltering","useFiltering",[10,5954,5955],{},"Manages URL-based product filtering by attributes, price range, and sale status.",[39,5957,5959],{"className":41,"code":5958,"language":43,"meta":5,"style":5},"const {\n  isFiltersActive,   \u002F\u002F ComputedRef\u003Cboolean>\n  activeFilters,     \u002F\u002F ComputedRef\u003CActiveFilters>\n  resetFilters,      \u002F\u002F () => void\n} = useFiltering()\n",[34,5960,5961,5967,5977,5987,5997],{"__ignoreMap":5},[47,5962,5963,5965],{"class":49,"line":50},[47,5964,5589],{"class":104},[47,5966,108],{"class":71},[47,5968,5969,5972,5974],{"class":49,"line":57},[47,5970,5971],{"class":64},"  isFiltersActive",[47,5973,2912],{"class":71},[47,5975,5976],{"class":53},"   \u002F\u002F ComputedRef\u003Cboolean>\n",[47,5978,5979,5982,5984],{"class":49,"line":85},[47,5980,5981],{"class":64},"  activeFilters",[47,5983,2912],{"class":71},[47,5985,5986],{"class":53},"     \u002F\u002F ComputedRef\u003CActiveFilters>\n",[47,5988,5989,5992,5994],{"class":49,"line":92},[47,5990,5991],{"class":64},"  resetFilters",[47,5993,2912],{"class":71},[47,5995,5996],{"class":53},"      \u002F\u002F () => void\n",[47,5998,5999,6001,6003,6006],{"class":49,"line":111},[47,6000,2317],{"class":71},[47,6002,5698],{"class":71},[47,6004,6005],{"class":114}," useFiltering",[47,6007,2549],{"class":64},[10,6009,6010,6011,6014],{},"Filter state is synced with the URL query string so filters are shareable and survive page refresh. Global attributes are configured via the ",[562,6012,6013],{},"WooNuxt Settings"," plugin.",[5719,6016],{},[22,6018,6020],{"id":6019},"useproducts","useProducts",[10,6022,6023],{},"Manages product list state and the full filtering\u002Fsorting pipeline.",[39,6025,6027],{"className":41,"code":6026,"language":43,"meta":5,"style":5},"const {\n  products,          \u002F\u002F Ref\u003CProduct[]>\n  allProducts,       \u002F\u002F Ref\u003CProduct[]> — unfiltered\n  isLoading,         \u002F\u002F Ref\u003Cboolean>\n  loadMore,          \u002F\u002F () => Promise\u003Cvoid>\n} = useProducts()\n",[34,6028,6029,6035,6045,6055,6064,6074],{"__ignoreMap":5},[47,6030,6031,6033],{"class":49,"line":50},[47,6032,5589],{"class":104},[47,6034,108],{"class":71},[47,6036,6037,6040,6042],{"class":49,"line":57},[47,6038,6039],{"class":64},"  products",[47,6041,2912],{"class":71},[47,6043,6044],{"class":53},"          \u002F\u002F Ref\u003CProduct[]>\n",[47,6046,6047,6050,6052],{"class":49,"line":85},[47,6048,6049],{"class":64},"  allProducts",[47,6051,2912],{"class":71},[47,6053,6054],{"class":53},"       \u002F\u002F Ref\u003CProduct[]> — unfiltered\n",[47,6056,6057,6060,6062],{"class":49,"line":92},[47,6058,6059],{"class":64},"  isLoading",[47,6061,2912],{"class":71},[47,6063,5788],{"class":53},[47,6065,6066,6069,6071],{"class":49,"line":111},[47,6067,6068],{"class":64},"  loadMore",[47,6070,2912],{"class":71},[47,6072,6073],{"class":53},"          \u002F\u002F () => Promise\u003Cvoid>\n",[47,6075,6076,6078,6080,6083],{"class":49,"line":125},[47,6077,2317],{"class":71},[47,6079,5698],{"class":71},[47,6081,6082],{"class":114}," useProducts",[47,6084,2549],{"class":64},[5719,6086],{},[22,6088,6090],{"id":6089},"usesorting","useSorting",[10,6092,6093],{},"Controls product sort order.",[39,6095,6097],{"className":41,"code":6096,"language":43,"meta":5,"style":5},"const {\n  sortOrder,         \u002F\u002F Ref\u003Cstring>\n  setSortOrder,      \u002F\u002F (order: string) => void\n} = useSorting()\n",[34,6098,6099,6105,6115,6125],{"__ignoreMap":5},[47,6100,6101,6103],{"class":49,"line":50},[47,6102,5589],{"class":104},[47,6104,108],{"class":71},[47,6106,6107,6110,6112],{"class":49,"line":57},[47,6108,6109],{"class":64},"  sortOrder",[47,6111,2912],{"class":71},[47,6113,6114],{"class":53},"         \u002F\u002F Ref\u003Cstring>\n",[47,6116,6117,6120,6122],{"class":49,"line":85},[47,6118,6119],{"class":64},"  setSortOrder",[47,6121,2912],{"class":71},[47,6123,6124],{"class":53},"      \u002F\u002F (order: string) => void\n",[47,6126,6127,6129,6131,6134],{"class":49,"line":92},[47,6128,2317],{"class":71},[47,6130,5698],{"class":71},[47,6132,6133],{"class":114}," useSorting",[47,6135,2549],{"class":64},[10,6137,6138,6139,6142,6143,6142,6146,6142,6149,6142,6152,2179],{},"Available sort options: ",[34,6140,6141],{},"DATE",", ",[34,6144,6145],{},"PRICE",[34,6147,6148],{},"PRICE_DESC",[34,6150,6151],{},"RATING",[34,6153,6154],{},"POPULARITY",[5719,6156],{},[22,6158,6160],{"id":6159},"usesearch","useSearch",[10,6162,6163],{},"Handles product search queries.",[39,6165,6167],{"className":41,"code":6166,"language":43,"meta":5,"style":5},"const {\n  searchQuery,       \u002F\u002F Ref\u003Cstring>\n  searchResults,     \u002F\u002F Ref\u003CProduct[]>\n  isSearching,       \u002F\u002F Ref\u003Cboolean>\n  clearSearch,       \u002F\u002F () => void\n} = useSearch()\n",[34,6168,6169,6175,6185,6195,6205,6215],{"__ignoreMap":5},[47,6170,6171,6173],{"class":49,"line":50},[47,6172,5589],{"class":104},[47,6174,108],{"class":71},[47,6176,6177,6180,6182],{"class":49,"line":57},[47,6178,6179],{"class":64},"  searchQuery",[47,6181,2912],{"class":71},[47,6183,6184],{"class":53},"       \u002F\u002F Ref\u003Cstring>\n",[47,6186,6187,6190,6192],{"class":49,"line":85},[47,6188,6189],{"class":64},"  searchResults",[47,6191,2912],{"class":71},[47,6193,6194],{"class":53},"     \u002F\u002F Ref\u003CProduct[]>\n",[47,6196,6197,6200,6202],{"class":49,"line":92},[47,6198,6199],{"class":64},"  isSearching",[47,6201,2912],{"class":71},[47,6203,6204],{"class":53},"       \u002F\u002F Ref\u003Cboolean>\n",[47,6206,6207,6210,6212],{"class":49,"line":111},[47,6208,6209],{"class":64},"  clearSearch",[47,6211,2912],{"class":71},[47,6213,6214],{"class":53},"       \u002F\u002F () => void\n",[47,6216,6217,6219,6221,6224],{"class":49,"line":125},[47,6218,2317],{"class":71},[47,6220,5698],{"class":71},[47,6222,6223],{"class":114}," useSearch",[47,6225,2549],{"class":64},[5719,6227],{},[22,6229,6231],{"id":6230},"usewishlist","useWishlist",[10,6233,6234,6235,2179],{},"Persists a wishlist in ",[34,6236,6237],{},"localStorage",[39,6239,6241],{"className":41,"code":6240,"language":43,"meta":5,"style":5},"const {\n  wishlist,          \u002F\u002F Ref\u003Cnumber[]> — array of product IDs\n  addToWishlist,     \u002F\u002F (productId: number) => void\n  removeFromWishlist,\u002F\u002F (productId: number) => void\n  isInWishlist,      \u002F\u002F (productId: number) => boolean\n  toggleWishlist,    \u002F\u002F (productId: number) => void\n} = useWishlist()\n",[34,6242,6243,6249,6259,6269,6279,6289,6299],{"__ignoreMap":5},[47,6244,6245,6247],{"class":49,"line":50},[47,6246,5589],{"class":104},[47,6248,108],{"class":71},[47,6250,6251,6254,6256],{"class":49,"line":57},[47,6252,6253],{"class":64},"  wishlist",[47,6255,2912],{"class":71},[47,6257,6258],{"class":53},"          \u002F\u002F Ref\u003Cnumber[]> — array of product IDs\n",[47,6260,6261,6264,6266],{"class":49,"line":85},[47,6262,6263],{"class":64},"  addToWishlist",[47,6265,2912],{"class":71},[47,6267,6268],{"class":53},"     \u002F\u002F (productId: number) => void\n",[47,6270,6271,6274,6276],{"class":49,"line":92},[47,6272,6273],{"class":64},"  removeFromWishlist",[47,6275,2912],{"class":71},[47,6277,6278],{"class":53},"\u002F\u002F (productId: number) => void\n",[47,6280,6281,6284,6286],{"class":49,"line":111},[47,6282,6283],{"class":64},"  isInWishlist",[47,6285,2912],{"class":71},[47,6287,6288],{"class":53},"      \u002F\u002F (productId: number) => boolean\n",[47,6290,6291,6294,6296],{"class":49,"line":125},[47,6292,6293],{"class":64},"  toggleWishlist",[47,6295,2912],{"class":71},[47,6297,6298],{"class":53},"    \u002F\u002F (productId: number) => void\n",[47,6300,6301,6303,6305,6308],{"class":49,"line":144},[47,6302,2317],{"class":71},[47,6304,5698],{"class":71},[47,6306,6307],{"class":114}," useWishlist",[47,6309,2549],{"class":64},[5719,6311],{},[22,6313,6315],{"id":6314},"usecountry","useCountry",[10,6317,6318],{},"Manages country and state selection for address forms.",[39,6320,6322],{"className":41,"code":6321,"language":43,"meta":5,"style":5},"const {\n  allowedCountries,  \u002F\u002F Ref\u003CCountry[]>\n  states,            \u002F\u002F Ref\u003CState[]>\n  getStates,         \u002F\u002F (countryCode: string) => Promise\u003Cvoid>\n} = useCountry()\n",[34,6323,6324,6330,6340,6350,6360],{"__ignoreMap":5},[47,6325,6326,6328],{"class":49,"line":50},[47,6327,5589],{"class":104},[47,6329,108],{"class":71},[47,6331,6332,6335,6337],{"class":49,"line":57},[47,6333,6334],{"class":64},"  allowedCountries",[47,6336,2912],{"class":71},[47,6338,6339],{"class":53},"  \u002F\u002F Ref\u003CCountry[]>\n",[47,6341,6342,6345,6347],{"class":49,"line":85},[47,6343,6344],{"class":64},"  states",[47,6346,2912],{"class":71},[47,6348,6349],{"class":53},"            \u002F\u002F Ref\u003CState[]>\n",[47,6351,6352,6355,6357],{"class":49,"line":92},[47,6353,6354],{"class":64},"  getStates",[47,6356,2912],{"class":71},[47,6358,6359],{"class":53},"         \u002F\u002F (countryCode: string) => Promise\u003Cvoid>\n",[47,6361,6362,6364,6366,6369],{"class":49,"line":111},[47,6363,2317],{"class":71},[47,6365,5698],{"class":71},[47,6367,6368],{"class":114}," useCountry",[47,6370,2549],{"class":64},[5719,6372],{},[22,6374,6376],{"id":6375},"usehelpers","useHelpers",[10,6378,6379],{},"Utility functions used throughout the app.",[39,6381,6383],{"className":41,"code":6382,"language":43,"meta":5,"style":5},"const {\n  formatPrice,       \u002F\u002F (price: string) => string\n  stripHtml,         \u002F\u002F (html: string) => string\n  scrollToTop,       \u002F\u002F () => void\n  isClient,          \u002F\u002F boolean\n} = useHelpers()\n",[34,6384,6385,6391,6401,6411,6420,6430],{"__ignoreMap":5},[47,6386,6387,6389],{"class":49,"line":50},[47,6388,5589],{"class":104},[47,6390,108],{"class":71},[47,6392,6393,6396,6398],{"class":49,"line":57},[47,6394,6395],{"class":64},"  formatPrice",[47,6397,2912],{"class":71},[47,6399,6400],{"class":53},"       \u002F\u002F (price: string) => string\n",[47,6402,6403,6406,6408],{"class":49,"line":85},[47,6404,6405],{"class":64},"  stripHtml",[47,6407,2912],{"class":71},[47,6409,6410],{"class":53},"         \u002F\u002F (html: string) => string\n",[47,6412,6413,6416,6418],{"class":49,"line":92},[47,6414,6415],{"class":64},"  scrollToTop",[47,6417,2912],{"class":71},[47,6419,6214],{"class":53},[47,6421,6422,6425,6427],{"class":49,"line":111},[47,6423,6424],{"class":64},"  isClient",[47,6426,2912],{"class":71},[47,6428,6429],{"class":53},"          \u002F\u002F boolean\n",[47,6431,6432,6434,6436,6439],{"class":49,"line":125},[47,6433,2317],{"class":71},[47,6435,5698],{"class":71},[47,6437,6438],{"class":114}," useHelpers",[47,6440,2549],{"class":64},[5719,6442],{},[22,6444,6446],{"id":6445},"useseofallbacks","useSEOFallbacks",[10,6448,6449],{},"Provides fallback SEO meta tags when Yoast data is unavailable.",[39,6451,6453],{"className":41,"code":6452,"language":43,"meta":5,"style":5},"const { generateSEO } = useSEOFallbacks()\n\u002F\u002F generateSEO(product) → useSeoMeta()-compatible object\n",[34,6454,6455,6473],{"__ignoreMap":5},[47,6456,6457,6459,6461,6464,6466,6468,6471],{"class":49,"line":50},[47,6458,5589],{"class":104},[47,6460,274],{"class":71},[47,6462,6463],{"class":64}," generateSEO ",[47,6465,2317],{"class":71},[47,6467,5698],{"class":71},[47,6469,6470],{"class":114}," useSEOFallbacks",[47,6472,2549],{"class":64},[47,6474,6475],{"class":49,"line":57},[47,6476,6477],{"class":53},"\u002F\u002F generateSEO(product) → useSeoMeta()-compatible object\n",[5719,6479],{},[22,6481,6483],{"id":6482},"useyoasthead","useYoastHead",[10,6485,6486],{},"Injects full Yoast SEO head tags for a product.",[39,6488,6490],{"className":41,"code":6489,"language":43,"meta":5,"style":5},"const { setYoastHead } = useYoastHead()\n\u002F\u002F setYoastHead(fullYoastHead: string) → void\n",[34,6491,6492,6510],{"__ignoreMap":5},[47,6493,6494,6496,6498,6501,6503,6505,6508],{"class":49,"line":50},[47,6495,5589],{"class":104},[47,6497,274],{"class":71},[47,6499,6500],{"class":64}," setYoastHead ",[47,6502,2317],{"class":71},[47,6504,5698],{"class":71},[47,6506,6507],{"class":114}," useYoastHead",[47,6509,2549],{"class":64},[47,6511,6512],{"class":49,"line":57},[47,6513,6514],{"class":53},"\u002F\u002F setYoastHead(fullYoastHead: string) → void\n",[10,6516,6517,6518,6521,6522,6524,6525,6528],{},"Requires the ",[34,6519,6520],{},"fullYoastHead"," field to be exposed by the ",[562,6523,6013],{}," plugin (",[34,6526,6527],{},"graphql\u002Fyoast.php",").",[5719,6530],{},[22,6532,5865],{"id":6533},"useauthtokens",[10,6535,6536,6537,6539],{},"Low-level JWT token management. Used internally by ",[34,6538,5724],{}," — you should not need to call this directly.",[39,6541,6543],{"className":41,"code":6542,"language":43,"meta":5,"style":5},"const {\n  getAuthToken,      \u002F\u002F () => string | null\n  setAuthToken,      \u002F\u002F (token: string) => void\n  clearAuthToken,    \u002F\u002F () => void\n} = useAuthTokens()\n",[34,6544,6545,6551,6561,6571,6581],{"__ignoreMap":5},[47,6546,6547,6549],{"class":49,"line":50},[47,6548,5589],{"class":104},[47,6550,108],{"class":71},[47,6552,6553,6556,6558],{"class":49,"line":57},[47,6554,6555],{"class":64},"  getAuthToken",[47,6557,2912],{"class":71},[47,6559,6560],{"class":53},"      \u002F\u002F () => string | null\n",[47,6562,6563,6566,6568],{"class":49,"line":85},[47,6564,6565],{"class":64},"  setAuthToken",[47,6567,2912],{"class":71},[47,6569,6570],{"class":53},"      \u002F\u002F (token: string) => void\n",[47,6572,6573,6576,6578],{"class":49,"line":92},[47,6574,6575],{"class":64},"  clearAuthToken",[47,6577,2912],{"class":71},[47,6579,6580],{"class":53},"    \u002F\u002F () => void\n",[47,6582,6583,6585,6587,6590],{"class":49,"line":111},[47,6584,2317],{"class":71},[47,6586,5698],{"class":71},[47,6588,6589],{"class":114}," useAuthTokens",[47,6591,2549],{"class":64},[535,6593,6594],{},"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":5,"searchDepth":57,"depth":57,"links":6596},[6597,6598,6599,6600,6601,6602,6603,6604,6605,6606,6607,6608,6609],{"id":5575,"depth":57,"text":5576},{"id":5723,"depth":57,"text":5724},{"id":5870,"depth":57,"text":5871},{"id":5951,"depth":57,"text":5952},{"id":6019,"depth":57,"text":6020},{"id":6089,"depth":57,"text":6090},{"id":6159,"depth":57,"text":6160},{"id":6230,"depth":57,"text":6231},{"id":6314,"depth":57,"text":6315},{"id":6375,"depth":57,"text":6376},{"id":6445,"depth":57,"text":6446},{"id":6482,"depth":57,"text":6483},{"id":6533,"depth":57,"text":5865},"Reference for all WooNuxt composables",{},{"icon":6613},"i-lucide-puzzle","\u002Fconfiguration\u002Fcomposables",{"title":2984,"description":6610},"3.configuration\u002F2.composables","WcoLoKGBbsXUSkhzRx9477rZ7V6xKMdt6YSvwyVMGIQ",{"id":6619,"title":6620,"body":6621,"description":7067,"extension":545,"links":546,"meta":7068,"navigation":7069,"path":7071,"seo":7072,"stem":7073,"__hash__":7074},"docs\u002F3.configuration\u002F3.performance.md","Performance & ISR",{"type":7,"value":6622,"toc":7055},[6623,6630,6634,6637,6647,6651,6657,6733,6737,6742,6784,6792,6796,6806,6823,6827,6833,6837,6846,6854,6857,6861,6867,6922,6926,6929,7041,7052],[10,6624,6625,6626,6629],{},"WooNuxt is optimized for performance at every layer. For large catalogs, ",[562,6627,6628],{},"Incremental Static Regeneration (ISR)"," lets you cache product pages at the CDN edge while still serving fresh data.",[22,6631,6633],{"id":6632},"isr-incremental-static-regeneration","ISR (Incremental Static Regeneration)",[10,6635,6636],{},"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,6638,6639,6640,6643,6644,6646],{},"This is ideal for catalogs with ",[562,6641,6642],{},"10,000+ products"," where full ",[34,6645,5255],{}," would take too long.",[1388,6648,6650],{"id":6649},"which-routes-use-isr","Which Routes Use ISR",[10,6652,6653,6654,131],{},"The following routes are ISR-enabled by default in ",[34,6655,6656],{},"woonuxt_base\u002Fnuxt.config.ts",[1150,6658,6659,6669],{},[1153,6660,6661],{},[1156,6662,6663,6666],{},[1159,6664,6665],{},"Route Pattern",[1159,6667,6668],{},"Behavior",[1169,6670,6671,6683,6694,6705,6717],{},[1156,6672,6673,6678],{},[1174,6674,6675],{},[34,6676,6677],{},"\u002Fproduct\u002F**",[1174,6679,6680,6681],{},"ISR with ",[34,6682,1216],{},[1156,6684,6685,6690],{},[1174,6686,6687],{},[34,6688,6689],{},"\u002Fproduct-category\u002F**",[1174,6691,6680,6692],{},[34,6693,1216],{},[1156,6695,6696,6701],{},[1174,6697,6698],{},[34,6699,6700],{},"\u002Fproducts",[1174,6702,6680,6703],{},[34,6704,1216],{},[1156,6706,6707,6713],{},[1174,6708,6709,6712],{},[34,6710,6711],{},"\u002Fproducts\u002F**"," (pagination)",[1174,6714,6680,6715],{},[34,6716,1216],{},[1156,6718,6719,6727],{},[1174,6720,6721,6142,6724],{},[34,6722,6723],{},"\u002Fcheckout",[34,6725,6726],{},"\u002Forder-summary",[1174,6728,6729,6732],{},[34,6730,6731],{},"prerender: false"," (always live)",[1388,6734,6736],{"id":6735},"configuring-isr-ttl","Configuring ISR TTL",[10,6738,5303,6739,6741],{},[34,6740,1216],{}," in your environment variables (value in seconds):",[39,6743,6745],{"className":1031,"code":6744,"filename":1027,"language":1033,"meta":5,"style":5},"# 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",[34,6746,6747,6752,6756,6760,6765,6770,6774,6779],{"__ignoreMap":5},[47,6748,6749],{"class":49,"line":50},[47,6750,6751],{},"# Cache product pages for 1 hour (default)\n",[47,6753,6754],{"class":49,"line":57},[47,6755,1102],{},[47,6757,6758],{"class":49,"line":85},[47,6759,89],{"emptyLinePlaceholder":88},[47,6761,6762],{"class":49,"line":92},[47,6763,6764],{},"# Cache for 24 hours (high-traffic stores with infrequent updates)\n",[47,6766,6767],{"class":49,"line":111},[47,6768,6769],{},"CATALOG_ISR_TTL=86400\n",[47,6771,6772],{"class":49,"line":125},[47,6773,89],{"emptyLinePlaceholder":88},[47,6775,6776],{"class":49,"line":144},[47,6777,6778],{},"# Cache for 5 minutes (stores with frequent price\u002Fstock changes)\n",[47,6780,6781],{"class":49,"line":161},[47,6782,6783],{},"CATALOG_ISR_TTL=300\n",[1304,6785,6786],{},[10,6787,6788,6789,6791],{},"After updating a product in WooCommerce, the cache for that product's page will be stale until the TTL expires. Pair ISR with a ",[562,6790,4370],{}," (configured in WooNuxt Settings) to trigger a full rebuild on important changes.",[1388,6793,6795],{"id":6794},"requirements","Requirements",[10,6797,6798,6799,6802,6803,6805],{},"ISR requires a ",[562,6800,6801],{},"server runtime"," — it does not work with pure static output (",[34,6804,5255],{},"). Deploy with:",[574,6807,6808,6811,6814],{},[577,6809,6810],{},"Netlify (serverless functions)",[577,6812,6813],{},"Vercel (edge functions)",[577,6815,6816,6817,6819,6820,194],{},"Node.js server (",[34,6818,5270],{}," + ",[34,6821,6822],{},"node .output\u002Fserver\u002Findex.mjs",[22,6824,6826],{"id":6825},"image-optimization","Image Optimization",[10,6828,2243,6829,6832],{},[34,6830,6831],{},"@nuxt\u002Fimage"," to automatically optimize WooCommerce product images.",[1388,6834,6836],{"id":6835},"configure-allowed-domains","Configure Allowed Domains",[10,6838,6839,6840,6843,6844,131],{},"You ",[562,6841,6842],{},"must"," list all image domains in ",[34,6845,1191],{},[39,6847,6848],{"className":1031,"code":5429,"filename":1027,"language":1033,"meta":5,"style":5},[34,6849,6850],{"__ignoreMap":5},[47,6851,6852],{"class":49,"line":50},[47,6853,5429],{},[10,6855,6856],{},"Multiple domains are comma-separated. Without this, images from those domains will not be optimized.",[1388,6858,6860],{"id":6859},"netlify-image-cdn","Netlify Image CDN",[10,6862,6863,6864,6866],{},"When deploying to Netlify, ",[34,6865,6831],{}," automatically uses Netlify's Image CDN. The base config already ignores Netlify CDN URLs during prerendering to avoid double-optimization:",[39,6868,6870],{"className":41,"code":6869,"language":43,"meta":5,"style":5},"\u002F\u002F Already configured in woonuxt_base\u002Fnuxt.config.ts\nnitro: {\n  prerender: {\n    ignore: ['\u002F_netlify\u002Fimages']\n  }\n}\n",[34,6871,6872,6877,6886,6895,6914,6918],{"__ignoreMap":5},[47,6873,6874],{"class":49,"line":50},[47,6875,6876],{"class":53},"\u002F\u002F Already configured in woonuxt_base\u002Fnuxt.config.ts\n",[47,6878,6879,6882,6884],{"class":49,"line":57},[47,6880,6881],{"class":282},"nitro",[47,6883,131],{"class":71},[47,6885,108],{"class":71},[47,6887,6888,6891,6893],{"class":49,"line":85},[47,6889,6890],{"class":282},"  prerender",[47,6892,131],{"class":71},[47,6894,108],{"class":71},[47,6896,6897,6900,6902,6904,6906,6909,6911],{"class":49,"line":92},[47,6898,6899],{"class":282},"    ignore",[47,6901,131],{"class":71},[47,6903,2294],{"class":118},[47,6905,2297],{"class":71},[47,6907,6908],{"class":75},"\u002F_netlify\u002Fimages",[47,6910,2297],{"class":71},[47,6912,6913],{"class":118},"]\n",[47,6915,6916],{"class":49,"line":111},[47,6917,307],{"class":71},[47,6919,6920],{"class":49,"line":125},[47,6921,1965],{"class":71},[22,6923,6925],{"id":6924},"build-performance","Build Performance",[10,6927,6928],{},"For SSG builds with large catalogs:",[39,6930,6932],{"className":41,"code":6931,"filename":2265,"language":43,"meta":5,"style":5},"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",[34,6933,6934,6946,6964,6973,6982,6996,7011,7027,7031,7035],{"__ignoreMap":5},[47,6935,6936,6938,6940,6942,6944],{"class":49,"line":50},[47,6937,95],{"class":60},[47,6939,98],{"class":60},[47,6941,2280],{"class":114},[47,6943,119],{"class":64},[47,6945,122],{"class":71},[47,6947,6948,6950,6952,6954,6956,6958,6960,6962],{"class":49,"line":57},[47,6949,2289],{"class":118},[47,6951,131],{"class":71},[47,6953,2294],{"class":64},[47,6955,2297],{"class":71},[47,6957,2300],{"class":75},[47,6959,2297],{"class":71},[47,6961,2305],{"class":64},[47,6963,141],{"class":71},[47,6965,6966,6969,6971],{"class":49,"line":85},[47,6967,6968],{"class":118},"  nitro",[47,6970,131],{"class":71},[47,6972,108],{"class":71},[47,6974,6975,6978,6980],{"class":49,"line":92},[47,6976,6977],{"class":118},"    prerender",[47,6979,131],{"class":71},[47,6981,108],{"class":71},[47,6983,6984,6987,6989,6991,6993],{"class":49,"line":111},[47,6985,6986],{"class":118},"      concurrency",[47,6988,131],{"class":71},[47,6990,183],{"class":182},[47,6992,2912],{"class":71},[47,6994,6995],{"class":53},"    \u002F\u002F Pages prerendered in parallel (default)\n",[47,6997,6998,7001,7003,7006,7008],{"class":49,"line":125},[47,6999,7000],{"class":118},"      interval",[47,7002,131],{"class":71},[47,7004,7005],{"class":182}," 1000",[47,7007,2912],{"class":71},[47,7009,7010],{"class":53},"     \u002F\u002F ms between batches (avoids WordPress rate limits)\n",[47,7012,7013,7016,7018,7022,7024],{"class":49,"line":144},[47,7014,7015],{"class":118},"      failOnError",[47,7017,131],{"class":71},[47,7019,7021],{"class":7020},"sbqyR"," false",[47,7023,2912],{"class":71},[47,7025,7026],{"class":53}," \u002F\u002F Continue build if a product page fails\n",[47,7028,7029],{"class":49,"line":161},[47,7030,2840],{"class":71},[47,7032,7033],{"class":49,"line":174},[47,7034,2845],{"class":71},[47,7036,7037,7039],{"class":49,"line":188},[47,7038,2317],{"class":71},[47,7040,2320],{"class":64},[10,7042,7043,7044,7047,7048,7051],{},"Increase ",[34,7045,7046],{},"concurrency"," if your WordPress server can handle more parallel requests. Lower ",[34,7049,7050],{},"interval"," if you hit WordPress rate limiting.",[535,7053,7054],{},"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":5,"searchDepth":57,"depth":57,"links":7056},[7057,7062,7066],{"id":6632,"depth":57,"text":6633,"children":7058},[7059,7060,7061],{"id":6649,"depth":85,"text":6650},{"id":6735,"depth":85,"text":6736},{"id":6794,"depth":85,"text":6795},{"id":6825,"depth":57,"text":6826,"children":7063},[7064,7065],{"id":6835,"depth":85,"text":6836},{"id":6859,"depth":85,"text":6860},{"id":6924,"depth":57,"text":6925},"Caching strategies and ISR configuration for large WooCommerce catalogs",{},{"icon":7070},"i-lucide-gauge","\u002Fconfiguration\u002Fperformance",{"title":6620,"description":7067},"3.configuration\u002F3.performance","EHr8AwBtr_HQhcZ4dXHtInQnYWGIW4xjZ3gQcGOOYMA",{"id":7076,"title":7077,"body":7078,"description":8476,"extension":545,"links":546,"meta":8477,"navigation":8478,"path":8479,"seo":8480,"stem":8481,"__hash__":8482},"docs\u002F3.configuration\u002F4.payment-gateways.md","Payment Gateways",{"type":7,"value":7079,"toc":8465},[7080,7087,7091,7162,7166,7171,7278,7281,7287,7705,7709,7715,7967,7972,7995,7999,8006,8162,8171,8175,8181,8365,8372,8462],[10,7081,7082,7083,7086],{},"WooNuxt uses a plugin-based architecture for payment gateways. Each gateway implements the ",[34,7084,7085],{},"PaymentGatewayPlugin"," interface and registers itself at boot. The checkout page only coordinates which gateway is active — all gateway-specific UI, validation, readiness checks, and payment processing live inside the plugin itself.",[22,7088,7090],{"id":7089},"built-in-gateways","Built-in Gateways",[1150,7092,7093,7106],{},[1153,7094,7095],{},[1156,7096,7097,7100,7103],{},[1159,7098,7099],{},"Plugin file",[1159,7101,7102],{},"Gateway",[1159,7104,7105],{},"Notes",[1169,7107,7108,7121,7137,7150],{},[1156,7109,7110,7115,7118],{},[1174,7111,7112],{},[34,7113,7114],{},"stripe.ts",[1174,7116,7117],{},"Stripe",[1174,7119,7120],{},"Payment Element, saved card support, order metadata",[1156,7122,7123,7128,7131],{},[1174,7124,7125],{},[34,7126,7127],{},"paypal.ts",[1174,7129,7130],{},"PayPal \u002F PPCP",[1174,7132,7133,7134],{},"Redirect-based; redirect handling stays in ",[34,7135,7136],{},"useCheckout()",[1156,7138,7139,7144,7147],{},[1174,7140,7141],{},[34,7142,7143],{},"cod.ts",[1174,7145,7146],{},"Cash on Delivery",[1174,7148,7149],{},"No client-side processing required",[1156,7151,7152,7157,7160],{},[1174,7153,7154],{},[34,7155,7156],{},"cheque.ts",[1174,7158,7159],{},"Cheque",[1174,7161,7149],{},[22,7163,7165],{"id":7164},"enabling-disabling-gateways","Enabling \u002F Disabling Gateways",[10,7167,7168,7169,131],{},"Add or remove plugin entries in ",[34,7170,6656],{},[39,7172,7174],{"className":41,"code":7173,"filename":6656,"language":43,"meta":5,"style":5},"plugins: [\n  resolve('.\u002Fapp\u002Fplugins\u002Finit.ts'),\n  resolve('.\u002Fapp\u002Fplugins\u002Fpayment-gateways\u002Fstripe.ts'),\n  resolve('.\u002Fapp\u002Fplugins\u002Fpayment-gateways\u002Fpaypal.ts'),\n  resolve('.\u002Fapp\u002Fplugins\u002Fpayment-gateways\u002Fcod.ts'),\n  resolve('.\u002Fapp\u002Fplugins\u002Fpayment-gateways\u002Fcheque.ts'),\n],\n",[34,7175,7176,7186,7204,7221,7238,7255,7272],{"__ignoreMap":5},[47,7177,7178,7181,7183],{"class":49,"line":50},[47,7179,7180],{"class":282},"plugins",[47,7182,131],{"class":71},[47,7184,7185],{"class":64}," [\n",[47,7187,7188,7191,7193,7195,7198,7200,7202],{"class":49,"line":57},[47,7189,7190],{"class":114},"  resolve",[47,7192,119],{"class":64},[47,7194,2297],{"class":71},[47,7196,7197],{"class":75},".\u002Fapp\u002Fplugins\u002Finit.ts",[47,7199,2297],{"class":71},[47,7201,194],{"class":64},[47,7203,141],{"class":71},[47,7205,7206,7208,7210,7212,7215,7217,7219],{"class":49,"line":85},[47,7207,7190],{"class":114},[47,7209,119],{"class":64},[47,7211,2297],{"class":71},[47,7213,7214],{"class":75},".\u002Fapp\u002Fplugins\u002Fpayment-gateways\u002Fstripe.ts",[47,7216,2297],{"class":71},[47,7218,194],{"class":64},[47,7220,141],{"class":71},[47,7222,7223,7225,7227,7229,7232,7234,7236],{"class":49,"line":92},[47,7224,7190],{"class":114},[47,7226,119],{"class":64},[47,7228,2297],{"class":71},[47,7230,7231],{"class":75},".\u002Fapp\u002Fplugins\u002Fpayment-gateways\u002Fpaypal.ts",[47,7233,2297],{"class":71},[47,7235,194],{"class":64},[47,7237,141],{"class":71},[47,7239,7240,7242,7244,7246,7249,7251,7253],{"class":49,"line":111},[47,7241,7190],{"class":114},[47,7243,119],{"class":64},[47,7245,2297],{"class":71},[47,7247,7248],{"class":75},".\u002Fapp\u002Fplugins\u002Fpayment-gateways\u002Fcod.ts",[47,7250,2297],{"class":71},[47,7252,194],{"class":64},[47,7254,141],{"class":71},[47,7256,7257,7259,7261,7263,7266,7268,7270],{"class":49,"line":125},[47,7258,7190],{"class":114},[47,7260,119],{"class":64},[47,7262,2297],{"class":71},[47,7264,7265],{"class":75},".\u002Fapp\u002Fplugins\u002Fpayment-gateways\u002Fcheque.ts",[47,7267,2297],{"class":71},[47,7269,194],{"class":64},[47,7271,141],{"class":71},[47,7273,7274,7276],{"class":49,"line":144},[47,7275,2305],{"class":64},[47,7277,141],{"class":71},[10,7279,7280],{},"Remove any line to disable that gateway entirely — no other code changes needed.",[22,7282,1590,7284,7286],{"id":7283},"the-paymentgatewayplugin-interface",[34,7285,7085],{}," Interface",[39,7288,7290],{"className":41,"code":7289,"language":43,"meta":5,"style":5},"type PaymentGatewayPlugin = {\n  id: string;                    \u002F\u002F Must match the WooCommerce gateway ID (e.g. 'stripe')\n  name?: string;                 \u002F\u002F Display name\n  icon?: string | ((gateway: PaymentGateway) => string | null); \u002F\u002F Image URL or resolver\n  iconName?: string;             \u002F\u002F Iconify icon name fallback (e.g. 'ion:card-outline')\n  component?: Component;         \u002F\u002F Vue component rendered below the payment option list\n\n  \u002F\u002F Payment option list — override to return multiple rows (e.g. saved cards + new card)\n  getPaymentOptions?: (gateway: PaymentGateway) => PaymentGatewayOption[];\n\n  \u002F\u002F Lifecycle\n  onSelect?: (gateway?: PaymentGateway | string | null) => void | Promise\u003Cvoid>;\n  onDeselect?: () => void | Promise\u003Cvoid>;\n  reset?: () => void;            \u002F\u002F Called before each checkout attempt\n\n  \u002F\u002F Readiness\n  isReady?: () => boolean;       \u002F\u002F Checkout button is disabled when false\n  getDisabledMessage?: () => string;\n\n  \u002F\u002F Component wiring (used with `component`)\n  getComponentProps?: () => Record\u003Cstring, unknown>;\n  getComponentEvents?: () => Record\u003Cstring, (...args: unknown[]) => void>;\n\n  \u002F\u002F Payment processing\n  processPayment?: () => Promise\u003C{ success: boolean; isPaid: boolean; error?: string }>;\n};\n",[34,7291,7292,7304,7318,7332,7373,7387,7402,7406,7411,7438,7442,7447,7490,7513,7531,7535,7540,7559,7574,7578,7583,7609,7648,7652,7657,7700],{"__ignoreMap":5},[47,7293,7294,7297,7300,7302],{"class":49,"line":50},[47,7295,7296],{"class":104},"type",[47,7298,7299],{"class":282}," PaymentGatewayPlugin",[47,7301,5698],{"class":71},[47,7303,108],{"class":71},[47,7305,7306,7309,7311,7313,7315],{"class":49,"line":57},[47,7307,7308],{"class":118},"  id",[47,7310,131],{"class":71},[47,7312,283],{"class":282},[47,7314,286],{"class":71},[47,7316,7317],{"class":53},"                    \u002F\u002F Must match the WooCommerce gateway ID (e.g. 'stripe')\n",[47,7319,7320,7323,7325,7327,7329],{"class":49,"line":85},[47,7321,7322],{"class":118},"  name",[47,7324,271],{"class":71},[47,7326,283],{"class":282},[47,7328,286],{"class":71},[47,7330,7331],{"class":53},"                 \u002F\u002F Display name\n",[47,7333,7334,7337,7339,7341,7343,7346,7348,7351,7353,7356,7358,7360,7362,7364,7366,7368,7370],{"class":49,"line":92},[47,7335,7336],{"class":118},"  icon",[47,7338,271],{"class":71},[47,7340,283],{"class":282},[47,7342,296],{"class":71},[47,7344,7345],{"class":64}," (",[47,7347,119],{"class":71},[47,7349,7350],{"class":490},"gateway",[47,7352,131],{"class":71},[47,7354,7355],{"class":282}," PaymentGateway",[47,7357,194],{"class":71},[47,7359,105],{"class":104},[47,7361,283],{"class":282},[47,7363,296],{"class":71},[47,7365,299],{"class":282},[47,7367,194],{"class":64},[47,7369,286],{"class":71},[47,7371,7372],{"class":53}," \u002F\u002F Image URL or resolver\n",[47,7374,7375,7378,7380,7382,7384],{"class":49,"line":111},[47,7376,7377],{"class":118},"  iconName",[47,7379,271],{"class":71},[47,7381,283],{"class":282},[47,7383,286],{"class":71},[47,7385,7386],{"class":53},"             \u002F\u002F Iconify icon name fallback (e.g. 'ion:card-outline')\n",[47,7388,7389,7392,7394,7397,7399],{"class":49,"line":125},[47,7390,7391],{"class":118},"  component",[47,7393,271],{"class":71},[47,7395,7396],{"class":282}," Component",[47,7398,286],{"class":71},[47,7400,7401],{"class":53},"         \u002F\u002F Vue component rendered below the payment option list\n",[47,7403,7404],{"class":49,"line":144},[47,7405,89],{"emptyLinePlaceholder":88},[47,7407,7408],{"class":49,"line":161},[47,7409,7410],{"class":53},"  \u002F\u002F Payment option list — override to return multiple rows (e.g. saved cards + new card)\n",[47,7412,7413,7416,7418,7420,7422,7424,7426,7428,7430,7433,7436],{"class":49,"line":174},[47,7414,7415],{"class":118},"  getPaymentOptions",[47,7417,271],{"class":71},[47,7419,7345],{"class":71},[47,7421,7350],{"class":490},[47,7423,131],{"class":71},[47,7425,7355],{"class":282},[47,7427,194],{"class":71},[47,7429,105],{"class":104},[47,7431,7432],{"class":282}," PaymentGatewayOption",[47,7434,7435],{"class":64},"[]",[47,7437,82],{"class":71},[47,7439,7440],{"class":49,"line":188},[47,7441,89],{"emptyLinePlaceholder":88},[47,7443,7444],{"class":49,"line":199},[47,7445,7446],{"class":53},"  \u002F\u002F Lifecycle\n",[47,7448,7449,7452,7454,7456,7458,7460,7462,7464,7466,7468,7470,7472,7474,7477,7479,7482,7484,7487],{"class":49,"line":369},[47,7450,7451],{"class":118},"  onSelect",[47,7453,271],{"class":71},[47,7455,7345],{"class":71},[47,7457,7350],{"class":490},[47,7459,271],{"class":71},[47,7461,7355],{"class":282},[47,7463,296],{"class":71},[47,7465,283],{"class":282},[47,7467,296],{"class":71},[47,7469,299],{"class":282},[47,7471,194],{"class":71},[47,7473,105],{"class":104},[47,7475,7476],{"class":282}," void",[47,7478,296],{"class":71},[47,7480,7481],{"class":282}," Promise",[47,7483,225],{"class":71},[47,7485,7486],{"class":282},"void",[47,7488,7489],{"class":71},">;\n",[47,7491,7492,7495,7497,7499,7501,7503,7505,7507,7509,7511],{"class":49,"line":379},[47,7493,7494],{"class":118},"  onDeselect",[47,7496,271],{"class":71},[47,7498,101],{"class":71},[47,7500,105],{"class":104},[47,7502,7476],{"class":282},[47,7504,296],{"class":71},[47,7506,7481],{"class":282},[47,7508,225],{"class":71},[47,7510,7486],{"class":282},[47,7512,7489],{"class":71},[47,7514,7515,7518,7520,7522,7524,7526,7528],{"class":49,"line":808},[47,7516,7517],{"class":118},"  reset",[47,7519,271],{"class":71},[47,7521,101],{"class":71},[47,7523,105],{"class":104},[47,7525,7476],{"class":282},[47,7527,286],{"class":71},[47,7529,7530],{"class":53},"            \u002F\u002F Called before each checkout attempt\n",[47,7532,7533],{"class":49,"line":814},[47,7534,89],{"emptyLinePlaceholder":88},[47,7536,7537],{"class":49,"line":819},[47,7538,7539],{"class":53},"  \u002F\u002F Readiness\n",[47,7541,7542,7545,7547,7549,7551,7554,7556],{"class":49,"line":825},[47,7543,7544],{"class":118},"  isReady",[47,7546,271],{"class":71},[47,7548,101],{"class":71},[47,7550,105],{"class":104},[47,7552,7553],{"class":282}," boolean",[47,7555,286],{"class":71},[47,7557,7558],{"class":53},"       \u002F\u002F Checkout button is disabled when false\n",[47,7560,7561,7564,7566,7568,7570,7572],{"class":49,"line":836},[47,7562,7563],{"class":118},"  getDisabledMessage",[47,7565,271],{"class":71},[47,7567,101],{"class":71},[47,7569,105],{"class":104},[47,7571,283],{"class":282},[47,7573,82],{"class":71},[47,7575,7576],{"class":49,"line":842},[47,7577,89],{"emptyLinePlaceholder":88},[47,7579,7580],{"class":49,"line":1128},[47,7581,7582],{"class":53},"  \u002F\u002F Component wiring (used with `component`)\n",[47,7584,7585,7588,7590,7592,7594,7597,7599,7602,7604,7607],{"class":49,"line":1134},[47,7586,7587],{"class":118},"  getComponentProps",[47,7589,271],{"class":71},[47,7591,101],{"class":71},[47,7593,105],{"class":104},[47,7595,7596],{"class":282}," Record",[47,7598,225],{"class":71},[47,7600,7601],{"class":282},"string",[47,7603,2912],{"class":71},[47,7605,7606],{"class":282}," unknown",[47,7608,7489],{"class":71},[47,7610,7611,7614,7616,7618,7620,7622,7624,7626,7628,7631,7634,7636,7638,7640,7642,7644,7646],{"class":49,"line":1139},[47,7612,7613],{"class":118},"  getComponentEvents",[47,7615,271],{"class":71},[47,7617,101],{"class":71},[47,7619,105],{"class":104},[47,7621,7596],{"class":282},[47,7623,225],{"class":71},[47,7625,7601],{"class":282},[47,7627,2912],{"class":71},[47,7629,7630],{"class":71}," (...",[47,7632,7633],{"class":490},"args",[47,7635,131],{"class":71},[47,7637,7606],{"class":282},[47,7639,7435],{"class":64},[47,7641,194],{"class":71},[47,7643,105],{"class":104},[47,7645,7476],{"class":282},[47,7647,7489],{"class":71},[47,7649,7650],{"class":49,"line":1145},[47,7651,89],{"emptyLinePlaceholder":88},[47,7653,7654],{"class":49,"line":4622},[47,7655,7656],{"class":53},"  \u002F\u002F Payment processing\n",[47,7658,7659,7662,7664,7666,7668,7670,7672,7675,7677,7679,7681,7684,7686,7688,7690,7693,7695,7697],{"class":49,"line":4627},[47,7660,7661],{"class":118},"  processPayment",[47,7663,271],{"class":71},[47,7665,101],{"class":71},[47,7667,105],{"class":104},[47,7669,7481],{"class":282},[47,7671,2527],{"class":71},[47,7673,7674],{"class":118}," success",[47,7676,131],{"class":71},[47,7678,7553],{"class":282},[47,7680,286],{"class":71},[47,7682,7683],{"class":118}," isPaid",[47,7685,131],{"class":71},[47,7687,7553],{"class":282},[47,7689,286],{"class":71},[47,7691,7692],{"class":118}," error",[47,7694,271],{"class":71},[47,7696,283],{"class":282},[47,7698,7699],{"class":71}," }>;\n",[47,7701,7703],{"class":49,"line":7702},26,[47,7704,202],{"class":71},[22,7706,7708],{"id":7707},"adding-a-custom-gateway","Adding a Custom Gateway",[10,7710,7711,7712,131],{},"Create ",[34,7713,7714],{},"woonuxt_base\u002Fapp\u002Fplugins\u002Fpayment-gateways\u002Fyour-gateway.ts",[39,7716,7719],{"className":41,"code":7717,"filename":7718,"language":43,"meta":5,"style":5},"import type { PaymentGatewayPlugin } from '#types\u002Fpayment-gateway-plugin';\n\nconst myGatewayPlugin: PaymentGatewayPlugin = {\n  id: 'my-gateway',            \u002F\u002F Must match the WooCommerce gateway ID\n  name: 'My Gateway',\n  iconName: 'ion:wallet-outline',\n\n  isReady: () => true,\n\n  processPayment: async () => {\n    \u002F\u002F Run any client-side payment logic here.\n    \u002F\u002F Return isPaid: true if the payment was already captured\n    \u002F\u002F (e.g. Stripe PaymentIntent succeeded).\n    \u002F\u002F Return isPaid: false to let WooCommerce handle capture server-side.\n    return { success: true, isPaid: false };\n  },\n};\n\nexport default defineNuxtPlugin(() => {\n  const { registerGateway } = usePaymentGateways();\n  registerGateway(myGatewayPlugin);\n});\n","your-gateway.ts",[34,7720,7721,7746,7750,7765,7783,7798,7813,7817,7832,7836,7851,7856,7861,7866,7871,7895,7899,7903,7907,7924,7945,7959],{"__ignoreMap":5},[47,7722,7723,7725,7728,7730,7732,7734,7737,7739,7742,7744],{"class":49,"line":50},[47,7724,61],{"class":60},[47,7726,7727],{"class":60}," type",[47,7729,274],{"class":71},[47,7731,7299],{"class":64},[47,7733,2941],{"class":71},[47,7735,7736],{"class":60}," from",[47,7738,2904],{"class":71},[47,7740,7741],{"class":75},"#types\u002Fpayment-gateway-plugin",[47,7743,2297],{"class":71},[47,7745,82],{"class":71},[47,7747,7748],{"class":49,"line":57},[47,7749,89],{"emptyLinePlaceholder":88},[47,7751,7752,7754,7757,7759,7761,7763],{"class":49,"line":85},[47,7753,5589],{"class":104},[47,7755,7756],{"class":64}," myGatewayPlugin",[47,7758,131],{"class":71},[47,7760,7299],{"class":282},[47,7762,5698],{"class":71},[47,7764,108],{"class":71},[47,7766,7767,7769,7771,7773,7776,7778,7780],{"class":49,"line":92},[47,7768,7308],{"class":118},[47,7770,131],{"class":71},[47,7772,2904],{"class":71},[47,7774,7775],{"class":75},"my-gateway",[47,7777,2297],{"class":71},[47,7779,2912],{"class":71},[47,7781,7782],{"class":53},"            \u002F\u002F Must match the WooCommerce gateway ID\n",[47,7784,7785,7787,7789,7791,7794,7796],{"class":49,"line":111},[47,7786,7322],{"class":118},[47,7788,131],{"class":71},[47,7790,2904],{"class":71},[47,7792,7793],{"class":75},"My Gateway",[47,7795,2297],{"class":71},[47,7797,141],{"class":71},[47,7799,7800,7802,7804,7806,7809,7811],{"class":49,"line":125},[47,7801,7377],{"class":118},[47,7803,131],{"class":71},[47,7805,2904],{"class":71},[47,7807,7808],{"class":75},"ion:wallet-outline",[47,7810,2297],{"class":71},[47,7812,141],{"class":71},[47,7814,7815],{"class":49,"line":144},[47,7816,89],{"emptyLinePlaceholder":88},[47,7818,7819,7821,7823,7825,7827,7830],{"class":49,"line":161},[47,7820,7544],{"class":114},[47,7822,131],{"class":71},[47,7824,101],{"class":71},[47,7826,105],{"class":104},[47,7828,7829],{"class":7020}," true",[47,7831,141],{"class":71},[47,7833,7834],{"class":49,"line":174},[47,7835,89],{"emptyLinePlaceholder":88},[47,7837,7838,7840,7842,7845,7847,7849],{"class":49,"line":188},[47,7839,7661],{"class":114},[47,7841,131],{"class":71},[47,7843,7844],{"class":104}," async",[47,7846,101],{"class":71},[47,7848,105],{"class":104},[47,7850,108],{"class":71},[47,7852,7853],{"class":49,"line":199},[47,7854,7855],{"class":53},"    \u002F\u002F Run any client-side payment logic here.\n",[47,7857,7858],{"class":49,"line":369},[47,7859,7860],{"class":53},"    \u002F\u002F Return isPaid: true if the payment was already captured\n",[47,7862,7863],{"class":49,"line":379},[47,7864,7865],{"class":53},"    \u002F\u002F (e.g. Stripe PaymentIntent succeeded).\n",[47,7867,7868],{"class":49,"line":808},[47,7869,7870],{"class":53},"    \u002F\u002F Return isPaid: false to let WooCommerce handle capture server-side.\n",[47,7872,7873,7876,7878,7880,7882,7884,7886,7888,7890,7892],{"class":49,"line":814},[47,7874,7875],{"class":60},"    return",[47,7877,274],{"class":71},[47,7879,7674],{"class":118},[47,7881,131],{"class":71},[47,7883,7829],{"class":7020},[47,7885,2912],{"class":71},[47,7887,7683],{"class":118},[47,7889,131],{"class":71},[47,7891,7021],{"class":7020},[47,7893,7894],{"class":71}," };\n",[47,7896,7897],{"class":49,"line":819},[47,7898,2845],{"class":71},[47,7900,7901],{"class":49,"line":825},[47,7902,202],{"class":71},[47,7904,7905],{"class":49,"line":836},[47,7906,89],{"emptyLinePlaceholder":88},[47,7908,7909,7911,7913,7916,7918,7920,7922],{"class":49,"line":842},[47,7910,95],{"class":60},[47,7912,98],{"class":60},[47,7914,7915],{"class":114}," defineNuxtPlugin",[47,7917,119],{"class":64},[47,7919,315],{"class":71},[47,7921,105],{"class":104},[47,7923,108],{"class":71},[47,7925,7926,7929,7931,7934,7936,7938,7941,7943],{"class":49,"line":1128},[47,7927,7928],{"class":104},"  const",[47,7930,274],{"class":71},[47,7932,7933],{"class":64}," registerGateway",[47,7935,2941],{"class":71},[47,7937,5698],{"class":71},[47,7939,7940],{"class":114}," usePaymentGateways",[47,7942,315],{"class":118},[47,7944,82],{"class":71},[47,7946,7947,7950,7952,7955,7957],{"class":49,"line":1134},[47,7948,7949],{"class":114},"  registerGateway",[47,7951,119],{"class":118},[47,7953,7954],{"class":64},"myGatewayPlugin",[47,7956,194],{"class":118},[47,7958,82],{"class":71},[47,7960,7961,7963,7965],{"class":49,"line":1139},[47,7962,2317],{"class":71},[47,7964,194],{"class":64},[47,7966,82],{"class":71},[10,7968,7969,7970,131],{},"Then register it in ",[34,7971,6656],{},[39,7973,7975],{"className":41,"code":7974,"filename":6656,"language":43,"meta":5,"style":5},"resolve('.\u002Fapp\u002Fplugins\u002Fpayment-gateways\u002Fyour-gateway.ts'),\n",[34,7976,7977],{"__ignoreMap":5},[47,7978,7979,7982,7984,7986,7989,7991,7993],{"class":49,"line":50},[47,7980,7981],{"class":114},"resolve",[47,7983,119],{"class":64},[47,7985,2297],{"class":71},[47,7987,7988],{"class":75},".\u002Fapp\u002Fplugins\u002Fpayment-gateways\u002Fyour-gateway.ts",[47,7990,2297],{"class":71},[47,7992,194],{"class":64},[47,7994,141],{"class":71},[22,7996,7998],{"id":7997},"custom-ui-component","Custom UI Component",[10,8000,8001,8002,8005],{},"If your gateway needs UI rendered at checkout (like a card form), set the ",[34,8003,8004],{},"component"," field:",[39,8007,8009],{"className":41,"code":8008,"language":43,"meta":5,"style":5},"import MyGatewayForm from '..\u002F..\u002Fcomponents\u002Fpayments\u002FMyGatewayForm.vue';\n\nconst myGatewayPlugin: PaymentGatewayPlugin = {\n  id: 'my-gateway',\n  component: MyGatewayForm,\n  getComponentProps: () => ({ apiKey: useRuntimeConfig().public.MY_API_KEY }),\n  getComponentEvents: () => ({\n    ready: () => { \u002F* mark gateway ready *\u002F },\n  }),\n  \u002F\u002F ...\n};\n",[34,8010,8011,8029,8033,8047,8061,8072,8112,8126,8145,8153,8158],{"__ignoreMap":5},[47,8012,8013,8015,8018,8020,8022,8025,8027],{"class":49,"line":50},[47,8014,61],{"class":60},[47,8016,8017],{"class":64}," MyGatewayForm ",[47,8019,68],{"class":60},[47,8021,2904],{"class":71},[47,8023,8024],{"class":75},"..\u002F..\u002Fcomponents\u002Fpayments\u002FMyGatewayForm.vue",[47,8026,2297],{"class":71},[47,8028,82],{"class":71},[47,8030,8031],{"class":49,"line":57},[47,8032,89],{"emptyLinePlaceholder":88},[47,8034,8035,8037,8039,8041,8043,8045],{"class":49,"line":85},[47,8036,5589],{"class":104},[47,8038,7756],{"class":64},[47,8040,131],{"class":71},[47,8042,7299],{"class":282},[47,8044,5698],{"class":71},[47,8046,108],{"class":71},[47,8048,8049,8051,8053,8055,8057,8059],{"class":49,"line":92},[47,8050,7308],{"class":118},[47,8052,131],{"class":71},[47,8054,2904],{"class":71},[47,8056,7775],{"class":75},[47,8058,2297],{"class":71},[47,8060,141],{"class":71},[47,8062,8063,8065,8067,8070],{"class":49,"line":111},[47,8064,7391],{"class":118},[47,8066,131],{"class":71},[47,8068,8069],{"class":64}," MyGatewayForm",[47,8071,141],{"class":71},[47,8073,8074,8076,8078,8080,8082,8084,8086,8089,8091,8094,8096,8098,8101,8103,8106,8108,8110],{"class":49,"line":125},[47,8075,7587],{"class":114},[47,8077,131],{"class":71},[47,8079,101],{"class":71},[47,8081,105],{"class":104},[47,8083,7345],{"class":64},[47,8085,2897],{"class":71},[47,8087,8088],{"class":118}," apiKey",[47,8090,131],{"class":71},[47,8092,8093],{"class":114}," useRuntimeConfig",[47,8095,315],{"class":64},[47,8097,2179],{"class":71},[47,8099,8100],{"class":64},"public",[47,8102,2179],{"class":71},[47,8104,8105],{"class":64},"MY_API_KEY ",[47,8107,2317],{"class":71},[47,8109,194],{"class":64},[47,8111,141],{"class":71},[47,8113,8114,8116,8118,8120,8122,8124],{"class":49,"line":144},[47,8115,7613],{"class":114},[47,8117,131],{"class":71},[47,8119,101],{"class":71},[47,8121,105],{"class":104},[47,8123,7345],{"class":64},[47,8125,122],{"class":71},[47,8127,8128,8131,8133,8135,8137,8139,8142],{"class":49,"line":161},[47,8129,8130],{"class":114},"    ready",[47,8132,131],{"class":71},[47,8134,101],{"class":71},[47,8136,105],{"class":104},[47,8138,274],{"class":71},[47,8140,8141],{"class":53}," \u002F* mark gateway ready *\u002F",[47,8143,8144],{"class":71}," },\n",[47,8146,8147,8149,8151],{"class":49,"line":174},[47,8148,191],{"class":71},[47,8150,194],{"class":64},[47,8152,141],{"class":71},[47,8154,8155],{"class":49,"line":188},[47,8156,8157],{"class":53},"  \u002F\u002F ...\n",[47,8159,8160],{"class":49,"line":199},[47,8161,202],{"class":71},[10,8163,8164,1659,8167,8170],{},[34,8165,8166],{},"\u003CPaymentGatewayComponent>",[34,8168,8169],{},"checkout.vue"," automatically mounts your component when the gateway is selected and passes through props and events.",[22,8172,8174],{"id":8173},"multiple-payment-options-per-gateway","Multiple Payment Options Per Gateway",[10,8176,8177,8180],{},[34,8178,8179],{},"getPaymentOptions()"," lets a single WooCommerce gateway appear as multiple selectable rows — the Stripe plugin uses this to list saved cards alongside the \"Credit \u002F Debit Card\" option:",[39,8182,8184],{"className":41,"code":8183,"language":43,"meta":5,"style":5},"getPaymentOptions: (gateway) => [\n  {\n    id: 'my-gateway-bank',\n    gateway,\n    title: 'Bank Transfer',\n    iconName: 'ion:business-outline',\n    onSelect: () => selectBankTransfer(),\n  },\n  {\n    id: 'my-gateway-wallet',\n    gateway,\n    title: 'Digital Wallet',\n    iconName: 'ion:wallet-outline',\n    onSelect: () => selectWallet(),\n  },\n],\n",[34,8185,8186,8203,8208,8223,8230,8246,8262,8280,8284,8288,8303,8309,8324,8338,8355,8359],{"__ignoreMap":5},[47,8187,8188,8191,8193,8195,8197,8199,8201],{"class":49,"line":50},[47,8189,8190],{"class":282},"getPaymentOptions",[47,8192,131],{"class":71},[47,8194,7345],{"class":71},[47,8196,7350],{"class":490},[47,8198,194],{"class":71},[47,8200,105],{"class":104},[47,8202,7185],{"class":64},[47,8204,8205],{"class":49,"line":57},[47,8206,8207],{"class":71},"  {\n",[47,8209,8210,8212,8214,8216,8219,8221],{"class":49,"line":85},[47,8211,147],{"class":118},[47,8213,131],{"class":71},[47,8215,2904],{"class":71},[47,8217,8218],{"class":75},"my-gateway-bank",[47,8220,2297],{"class":71},[47,8222,141],{"class":71},[47,8224,8225,8228],{"class":49,"line":92},[47,8226,8227],{"class":64},"    gateway",[47,8229,141],{"class":71},[47,8231,8232,8235,8237,8239,8242,8244],{"class":49,"line":111},[47,8233,8234],{"class":118},"    title",[47,8236,131],{"class":71},[47,8238,2904],{"class":71},[47,8240,8241],{"class":75},"Bank Transfer",[47,8243,2297],{"class":71},[47,8245,141],{"class":71},[47,8247,8248,8251,8253,8255,8258,8260],{"class":49,"line":125},[47,8249,8250],{"class":118},"    iconName",[47,8252,131],{"class":71},[47,8254,2904],{"class":71},[47,8256,8257],{"class":75},"ion:business-outline",[47,8259,2297],{"class":71},[47,8261,141],{"class":71},[47,8263,8264,8267,8269,8271,8273,8276,8278],{"class":49,"line":144},[47,8265,8266],{"class":114},"    onSelect",[47,8268,131],{"class":71},[47,8270,101],{"class":71},[47,8272,105],{"class":104},[47,8274,8275],{"class":114}," selectBankTransfer",[47,8277,315],{"class":64},[47,8279,141],{"class":71},[47,8281,8282],{"class":49,"line":161},[47,8283,2845],{"class":71},[47,8285,8286],{"class":49,"line":174},[47,8287,8207],{"class":71},[47,8289,8290,8292,8294,8296,8299,8301],{"class":49,"line":188},[47,8291,147],{"class":118},[47,8293,131],{"class":71},[47,8295,2904],{"class":71},[47,8297,8298],{"class":75},"my-gateway-wallet",[47,8300,2297],{"class":71},[47,8302,141],{"class":71},[47,8304,8305,8307],{"class":49,"line":199},[47,8306,8227],{"class":64},[47,8308,141],{"class":71},[47,8310,8311,8313,8315,8317,8320,8322],{"class":49,"line":369},[47,8312,8234],{"class":118},[47,8314,131],{"class":71},[47,8316,2904],{"class":71},[47,8318,8319],{"class":75},"Digital Wallet",[47,8321,2297],{"class":71},[47,8323,141],{"class":71},[47,8325,8326,8328,8330,8332,8334,8336],{"class":49,"line":379},[47,8327,8250],{"class":118},[47,8329,131],{"class":71},[47,8331,2904],{"class":71},[47,8333,7808],{"class":75},[47,8335,2297],{"class":71},[47,8337,141],{"class":71},[47,8339,8340,8342,8344,8346,8348,8351,8353],{"class":49,"line":808},[47,8341,8266],{"class":114},[47,8343,131],{"class":71},[47,8345,101],{"class":71},[47,8347,105],{"class":104},[47,8349,8350],{"class":114}," selectWallet",[47,8352,315],{"class":64},[47,8354,141],{"class":71},[47,8356,8357],{"class":49,"line":814},[47,8358,2845],{"class":71},[47,8360,8361,8363],{"class":49,"line":819},[47,8362,2305],{"class":64},[47,8364,141],{"class":71},[22,8366,8368,8371],{"id":8367},"usepaymentgateways-composable",[34,8369,8370],{},"usePaymentGateways"," Composable",[39,8373,8375],{"className":41,"code":8374,"language":43,"meta":5,"style":5},"const {\n  registerGateway,              \u002F\u002F (plugin: PaymentGatewayPlugin) => void\n  getGateway,                   \u002F\u002F (id: string) => PaymentGatewayPlugin | undefined\n  setActiveGateway,             \u002F\u002F (gateway) => Promise\u003Cvoid> — triggers onSelect\u002FonDeselect\n  isActiveGatewayReady,         \u002F\u002F ComputedRef\u003Cboolean>\n  getActiveGatewayDisabledMessage, \u002F\u002F () => string\n  resetActiveGateway,           \u002F\u002F () => void — calls plugin.reset()\n  processActiveGatewayPayment,  \u002F\u002F () => Promise\u003C{ success, isPaid, error? }>\n} = usePaymentGateways()\n",[34,8376,8377,8383,8392,8402,8412,8422,8432,8442,8452],{"__ignoreMap":5},[47,8378,8379,8381],{"class":49,"line":50},[47,8380,5589],{"class":104},[47,8382,108],{"class":71},[47,8384,8385,8387,8389],{"class":49,"line":57},[47,8386,7949],{"class":64},[47,8388,2912],{"class":71},[47,8390,8391],{"class":53},"              \u002F\u002F (plugin: PaymentGatewayPlugin) => void\n",[47,8393,8394,8397,8399],{"class":49,"line":85},[47,8395,8396],{"class":64},"  getGateway",[47,8398,2912],{"class":71},[47,8400,8401],{"class":53},"                   \u002F\u002F (id: string) => PaymentGatewayPlugin | undefined\n",[47,8403,8404,8407,8409],{"class":49,"line":92},[47,8405,8406],{"class":64},"  setActiveGateway",[47,8408,2912],{"class":71},[47,8410,8411],{"class":53},"             \u002F\u002F (gateway) => Promise\u003Cvoid> — triggers onSelect\u002FonDeselect\n",[47,8413,8414,8417,8419],{"class":49,"line":111},[47,8415,8416],{"class":64},"  isActiveGatewayReady",[47,8418,2912],{"class":71},[47,8420,8421],{"class":53},"         \u002F\u002F ComputedRef\u003Cboolean>\n",[47,8423,8424,8427,8429],{"class":49,"line":125},[47,8425,8426],{"class":64},"  getActiveGatewayDisabledMessage",[47,8428,2912],{"class":71},[47,8430,8431],{"class":53}," \u002F\u002F () => string\n",[47,8433,8434,8437,8439],{"class":49,"line":144},[47,8435,8436],{"class":64},"  resetActiveGateway",[47,8438,2912],{"class":71},[47,8440,8441],{"class":53},"           \u002F\u002F () => void — calls plugin.reset()\n",[47,8443,8444,8447,8449],{"class":49,"line":161},[47,8445,8446],{"class":64},"  processActiveGatewayPayment",[47,8448,2912],{"class":71},[47,8450,8451],{"class":53},"  \u002F\u002F () => Promise\u003C{ success, isPaid, error? }>\n",[47,8453,8454,8456,8458,8460],{"class":49,"line":174},[47,8455,2317],{"class":71},[47,8457,5698],{"class":71},[47,8459,7940],{"class":114},[47,8461,2549],{"class":64},[535,8463,8464],{},"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 .s0W1g, html code.shiki .s0W1g{--shiki-default:#BABED8}html pre.shiki code .sdLwU, html code.shiki .sdLwU{--shiki-default:#82AAFF}html pre.shiki code .sfyAc, html code.shiki .sfyAc{--shiki-default:#C3E88D}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 .sJ14y, html code.shiki .sJ14y{--shiki-default:#C792EA}html pre.shiki code .s-wAU, html code.shiki .s-wAU{--shiki-default:#F07178}html pre.shiki code .saEQR, html code.shiki .saEQR{--shiki-default:#676E95;--shiki-default-font-style:italic}html pre.shiki code .s7ZW3, html code.shiki .s7ZW3{--shiki-default:#BABED8;--shiki-default-font-style:italic}html pre.shiki code .s6cf3, html code.shiki .s6cf3{--shiki-default:#89DDFF;--shiki-default-font-style:italic}html pre.shiki code .sbqyR, html code.shiki .sbqyR{--shiki-default:#FF9CAC}",{"title":5,"searchDepth":57,"depth":57,"links":8466},[8467,8468,8469,8471,8472,8473,8474],{"id":7089,"depth":57,"text":7090},{"id":7164,"depth":57,"text":7165},{"id":7283,"depth":57,"text":8470},"The PaymentGatewayPlugin Interface",{"id":7707,"depth":57,"text":7708},{"id":7997,"depth":57,"text":7998},{"id":8173,"depth":57,"text":8174},{"id":8367,"depth":57,"text":8475},"usePaymentGateways Composable","How WooNuxt's plugin-based payment gateway system works and how to add your own",{},{"icon":4080},"\u002Fconfiguration\u002Fpayment-gateways",{"title":7077,"description":8476},"3.configuration\u002F4.payment-gateways","l2wmf87gqGHbheiCy_K6ZSM19lJ_UDw-Cl0wREJBEbE",{"id":4,"title":5,"body":8484,"description":12,"extension":545,"links":546,"meta":8883,"navigation":88,"path":548,"seo":8884,"stem":550,"__hash__":551},{"type":7,"value":8485,"toc":8876},[8486,8488,8490,8492,8494,8496,8500,8608,8610,8614,8750,8752,8758,8870,8872,8874],[10,8487,12],{},[14,8489,17],{"id":16},[10,8491,20],{},[22,8493,25],{"id":24},[22,8495,29],{"id":28},[10,8497,32,8498,37],{},[34,8499,36],{},[39,8501,8502],{"className":41,"code":42,"language":43,"meta":5,"style":5},[34,8503,8504,8508,8524,8528,8540,8548,8562,8576,8586,8596,8604],{"__ignoreMap":5},[47,8505,8506],{"class":49,"line":50},[47,8507,54],{"class":53},[47,8509,8510,8512,8514,8516,8518,8520,8522],{"class":49,"line":57},[47,8511,61],{"class":60},[47,8513,65],{"class":64},[47,8515,68],{"class":60},[47,8517,72],{"class":71},[47,8519,76],{"class":75},[47,8521,79],{"class":71},[47,8523,82],{"class":71},[47,8525,8526],{"class":49,"line":85},[47,8527,89],{"emptyLinePlaceholder":88},[47,8529,8530,8532,8534,8536,8538],{"class":49,"line":92},[47,8531,95],{"class":60},[47,8533,98],{"class":60},[47,8535,101],{"class":71},[47,8537,105],{"class":104},[47,8539,108],{"class":71},[47,8541,8542,8544,8546],{"class":49,"line":111},[47,8543,115],{"class":114},[47,8545,119],{"class":118},[47,8547,122],{"class":71},[47,8549,8550,8552,8554,8556,8558,8560],{"class":49,"line":125},[47,8551,128],{"class":118},[47,8553,131],{"class":71},[47,8555,72],{"class":71},[47,8557,136],{"class":75},[47,8559,79],{"class":71},[47,8561,141],{"class":71},[47,8563,8564,8566,8568,8570,8572,8574],{"class":49,"line":144},[47,8565,147],{"class":118},[47,8567,131],{"class":71},[47,8569,72],{"class":71},[47,8571,154],{"class":75},[47,8573,79],{"class":71},[47,8575,141],{"class":71},[47,8577,8578,8580,8582,8584],{"class":49,"line":161},[47,8579,164],{"class":118},[47,8581,131],{"class":71},[47,8583,169],{"class":64},[47,8585,141],{"class":71},[47,8587,8588,8590,8592,8594],{"class":49,"line":174},[47,8589,177],{"class":118},[47,8591,131],{"class":71},[47,8593,183],{"class":182},[47,8595,141],{"class":71},[47,8597,8598,8600,8602],{"class":49,"line":188},[47,8599,191],{"class":71},[47,8601,194],{"class":118},[47,8603,82],{"class":71},[47,8605,8606],{"class":49,"line":199},[47,8607,202],{"class":71},[22,8609,206],{"id":205},[10,8611,209,8612,213],{},[34,8613,212],{},[39,8615,8616],{"className":216,"code":217,"language":218,"meta":5,"style":5},[34,8617,8618,8638,8644,8652,8680,8684,8692,8700,8704,8712,8730,8734,8742],{"__ignoreMap":5},[47,8619,8620,8622,8624,8626,8628,8630,8632,8634,8636],{"class":49,"line":50},[47,8621,225],{"class":71},[47,8623,228],{"class":118},[47,8625,231],{"class":104},[47,8627,234],{"class":104},[47,8629,237],{"class":71},[47,8631,79],{"class":71},[47,8633,43],{"class":75},[47,8635,79],{"class":71},[47,8637,246],{"class":71},[47,8639,8640,8642],{"class":49,"line":57},[47,8641,251],{"class":114},[47,8643,254],{"class":71},[47,8645,8646,8648,8650],{"class":49,"line":85},[47,8647,259],{"class":118},[47,8649,131],{"class":71},[47,8651,108],{"class":71},[47,8653,8654,8656,8658,8660,8662,8664,8666,8668,8670,8672,8674,8676,8678],{"class":49,"line":92},[47,8655,268],{"class":118},[47,8657,271],{"class":71},[47,8659,274],{"class":71},[47,8661,277],{"class":118},[47,8663,271],{"class":71},[47,8665,283],{"class":282},[47,8667,286],{"class":71},[47,8669,289],{"class":118},[47,8671,271],{"class":71},[47,8673,283],{"class":282},[47,8675,296],{"class":71},[47,8677,299],{"class":282},[47,8679,302],{"class":71},[47,8681,8682],{"class":49,"line":111},[47,8683,307],{"class":71},[47,8685,8686,8688,8690],{"class":49,"line":125},[47,8687,312],{"class":71},[47,8689,315],{"class":64},[47,8691,82],{"class":71},[47,8693,8694,8696,8698],{"class":49,"line":144},[47,8695,322],{"class":71},[47,8697,228],{"class":118},[47,8699,246],{"class":71},[47,8701,8702],{"class":49,"line":161},[47,8703,89],{"emptyLinePlaceholder":88},[47,8705,8706,8708,8710],{"class":49,"line":174},[47,8707,225],{"class":71},[47,8709,337],{"class":118},[47,8711,246],{"class":71},[47,8713,8714,8716,8718,8720,8722,8724,8726,8728],{"class":49,"line":188},[47,8715,344],{"class":71},[47,8717,347],{"class":118},[47,8719,350],{"class":104},[47,8721,237],{"class":71},[47,8723,79],{"class":71},[47,8725,357],{"class":75},[47,8727,79],{"class":71},[47,8729,246],{"class":71},[47,8731,8732],{"class":49,"line":199},[47,8733,366],{"class":64},[47,8735,8736,8738,8740],{"class":49,"line":369},[47,8737,372],{"class":71},[47,8739,347],{"class":118},[47,8741,246],{"class":71},[47,8743,8744,8746,8748],{"class":49,"line":379},[47,8745,322],{"class":71},[47,8747,337],{"class":118},[47,8749,246],{"class":71},[22,8751,389],{"id":388},[10,8753,392,8754,396,8756,400],{},[34,8755,395],{},[34,8757,399],{},[39,8759,8760],{"className":41,"code":403,"language":43,"meta":5,"style":5},[34,8761,8762,8774,8782,8796,8810,8820,8830,8858,8866],{"__ignoreMap":5},[47,8763,8764,8766,8768,8770,8772],{"class":49,"line":50},[47,8765,95],{"class":60},[47,8767,98],{"class":60},[47,8769,101],{"class":71},[47,8771,105],{"class":104},[47,8773,108],{"class":71},[47,8775,8776,8778,8780],{"class":49,"line":57},[47,8777,115],{"class":114},[47,8779,119],{"class":118},[47,8781,122],{"class":71},[47,8783,8784,8786,8788,8790,8792,8794],{"class":49,"line":85},[47,8785,128],{"class":118},[47,8787,131],{"class":71},[47,8789,72],{"class":71},[47,8791,436],{"class":75},[47,8793,79],{"class":71},[47,8795,141],{"class":71},[47,8797,8798,8800,8802,8804,8806,8808],{"class":49,"line":92},[47,8799,147],{"class":118},[47,8801,131],{"class":71},[47,8803,72],{"class":71},[47,8805,451],{"class":75},[47,8807,79],{"class":71},[47,8809,141],{"class":71},[47,8811,8812,8814,8816,8818],{"class":49,"line":111},[47,8813,164],{"class":118},[47,8815,131],{"class":71},[47,8817,464],{"class":64},[47,8819,141],{"class":71},[47,8821,8822,8824,8826,8828],{"class":49,"line":125},[47,8823,177],{"class":118},[47,8825,131],{"class":71},[47,8827,475],{"class":182},[47,8829,141],{"class":71},[47,8831,8832,8834,8836,8838,8840,8842,8844,8846,8848,8850,8852,8854,8856],{"class":49,"line":144},[47,8833,482],{"class":114},[47,8835,131],{"class":71},[47,8837,487],{"class":71},[47,8839,491],{"class":490},[47,8841,494],{"class":71},[47,8843,105],{"class":104},[47,8845,499],{"class":114},[47,8847,119],{"class":118},[47,8849,504],{"class":64},[47,8851,507],{"class":71},[47,8853,510],{"class":64},[47,8855,194],{"class":118},[47,8857,141],{"class":71},[47,8859,8860,8862,8864],{"class":49,"line":161},[47,8861,191],{"class":71},[47,8863,194],{"class":118},[47,8865,82],{"class":71},[47,8867,8868],{"class":49,"line":174},[47,8869,202],{"class":71},[22,8871,530],{"id":529},[10,8873,533],{},[535,8875,537],{},{"title":5,"searchDepth":57,"depth":57,"links":8877},[8878,8879,8880,8881,8882],{"id":24,"depth":57,"text":25},{"id":28,"depth":57,"text":29},{"id":205,"depth":57,"text":206},{"id":388,"depth":57,"text":389},{"id":529,"depth":57,"text":530},{},{"description":12},1782424124423]