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