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