[{"data":1,"prerenderedAt":1829},["ShallowReactive",2],{"navigation-en":3,"page-\u002Fen\u002Ftutorials\u002Fappscript-tutorial":134,"\u002Fen\u002Ftutorials\u002Fappscript-tutorial-surround":1824},[4],{"title":5,"path":6,"stem":7,"children":8,"page":26},"En","\u002Fen","en",[9,27,48,77,90,97],{"title":10,"path":11,"stem":12,"children":13,"page":26},"Getting Started","\u002Fen\u002Fgetting-started","en\u002F1.getting-started",[14,18,22],{"title":15,"path":16,"stem":17},"Introduction","\u002Fen\u002Fgetting-started\u002Fintroduction","en\u002F1.getting-started\u002F1.introduction",{"title":19,"path":20,"stem":21},"Installation","\u002Fen\u002Fgetting-started\u002Finstallation","en\u002F1.getting-started\u002F2.installation",{"title":23,"path":24,"stem":25},"Configuration Reference","\u002Fen\u002Fgetting-started\u002Fconfiguration","en\u002F1.getting-started\u002F3.configuration",false,{"title":28,"path":29,"stem":30,"children":31,"page":26},"Composables","\u002Fen\u002Fcomposables","en\u002F2.composables",[32,36,40,44],{"title":33,"path":34,"stem":35},"useGSheet","\u002Fen\u002Fcomposables\u002Fuse-gsheet","en\u002F2.composables\u002F1.use-gsheet",{"title":37,"path":38,"stem":39},"useGSheetAsObject","\u002Fen\u002Fcomposables\u002Fuse-gsheet-as-object","en\u002F2.composables\u002F2.use-gsheet-as-object",{"title":41,"path":42,"stem":43},"useGSheetRow","\u002Fen\u002Fcomposables\u002Fuse-gsheet-row","en\u002F2.composables\u002F3.use-gsheet-row",{"title":45,"path":46,"stem":47},"useGSheetWrite","\u002Fen\u002Fcomposables\u002Fuse-gsheet-write","en\u002F2.composables\u002F4.use-gsheet-write",{"title":49,"path":50,"stem":51,"children":52,"page":26},"Authentication Modes","\u002Fen\u002Fauth-modes","en\u002F3.auth-modes",[53,57,61,65,69,73],{"title":54,"path":55,"stem":56},"Authentication Modes Overview","\u002Fen\u002Fauth-modes\u002Foverview","en\u002F3.auth-modes\u002F1.overview",{"title":58,"path":59,"stem":60},"GViz Mode (Google Visualization API)","\u002Fen\u002Fauth-modes\u002Fgviz","en\u002F3.auth-modes\u002F2.gviz",{"title":62,"path":63,"stem":64},"CSV Export Mode","\u002Fen\u002Fauth-modes\u002Fcsv","en\u002F3.auth-modes\u002F3.csv",{"title":66,"path":67,"stem":68},"Google Apps Script Mode","\u002Fen\u002Fauth-modes\u002Fappscript","en\u002F3.auth-modes\u002F4.appscript",{"title":70,"path":71,"stem":72},"API Key Mode","\u002Fen\u002Fauth-modes\u002Fapikey","en\u002F3.auth-modes\u002F5.apikey",{"title":74,"path":75,"stem":76},"Service Account Mode","\u002Fen\u002Fauth-modes\u002Fservice-account","en\u002F3.auth-modes\u002F6.service-account",{"title":78,"path":79,"stem":80,"children":81,"page":26},"AI","\u002Fen\u002Fai","en\u002F4.ai",[82,86],{"title":83,"path":84,"stem":85},"Agent Skills (AI Integration)","\u002Fen\u002Fai\u002Fagent-skills","en\u002F4.ai\u002F1.agent-skills",{"title":87,"path":88,"stem":89},"Model Context Protocol (MCP)","\u002Fen\u002Fai\u002Fmcp","en\u002F4.ai\u002F2.mcp",{"title":91,"path":92,"stem":93,"children":94},"Demos","\u002Fen\u002Fdemos","en\u002F5.demos\u002Findex",[95],{"title":96,"path":92,"stem":93},"Live Demos",{"title":98,"path":99,"stem":100,"children":101,"page":26},"Tutorials","\u002Fen\u002Ftutorials","en\u002F6.tutorials",[102,106,110,114,118,122,126,130],{"title":103,"path":104,"stem":105},"Tutorials Overview","\u002Fen\u002Ftutorials\u002Foverview","en\u002F6.tutorials\u002F0.overview",{"title":107,"path":108,"stem":109},"Apps Script Web App Tutorial","\u002Fen\u002Ftutorials\u002Fappscript-tutorial","en\u002F6.tutorials\u002F1.appscript-tutorial",{"title":111,"path":112,"stem":113},"Complete Step-by-Step Tutorial","\u002Fen\u002Ftutorials\u002Fstep-by-step","en\u002F6.tutorials\u002F1.step-by-step",{"title":115,"path":116,"stem":117},"GViz SQL Analytics Tutorial","\u002Fen\u002Ftutorials\u002Fgviz-sql-tutorial","en\u002F6.tutorials\u002F2.gviz-sql-tutorial",{"title":119,"path":120,"stem":121},"CSV Product Catalog Tutorial","\u002Fen\u002Ftutorials\u002Fcsv-catalog-tutorial","en\u002F6.tutorials\u002F3.csv-catalog-tutorial",{"title":123,"path":124,"stem":125},"API Key Inventory Tutorial","\u002Fen\u002Ftutorials\u002Fapikey-tutorial","en\u002F6.tutorials\u002F4.apikey-tutorial",{"title":127,"path":128,"stem":129},"Service Account HR & Payroll Tutorial","\u002Fen\u002Ftutorials\u002Fservice-account-tutorial","en\u002F6.tutorials\u002F5.service-account-tutorial",{"title":131,"path":132,"stem":133},"Sheet Routing Map Tutorial","\u002Fen\u002Ftutorials\u002Fsheets-routing-tutorial","en\u002F6.tutorials\u002F6.sheets-routing-tutorial",{"id":135,"title":107,"body":136,"description":1818,"extension":1819,"icon":1820,"links":1820,"meta":1821,"navigation":1820,"path":108,"seo":1822,"stem":109,"__hash__":1823},"docs_en\u002Fen\u002F6.tutorials\u002F1.appscript-tutorial.md",{"type":137,"value":138,"toc":1814},"minimark",[139,143,146,151,203,641,670,681,683,687,1810],[140,141,142],"p",{},"Learn how to build a full-stack feedback submission portal using Google Apps Script without GCP credentials or API limits.",[144,145],"hr",{},[147,148,150],"h2",{"id":149},"_1-google-sheets-apps-script-setup","1. Google Sheets & Apps Script Setup",[152,153,154,163,172,188],"ol",{},[155,156,157,158,162],"li",{},"Create a Google Sheet named ",[159,160,161],"strong",{},"User Feedback",".",[155,164,165,166,162],{},"Name the sheet tab ",[159,167,168],{},[169,170,171],"code",{},"feedback",[155,173,174,175,178,179,178,182,178,185,162],{},"Add column headers in Row 1: ",[169,176,177],{},"id",", ",[169,180,181],{},"author",[169,183,184],{},"rating",[169,186,187],{},"comment",[155,189,190,191,194,195,198,199,202],{},"Open ",[159,192,193],{},"Extensions"," -> ",[159,196,197],{},"Apps Script"," and paste ",[169,200,201],{},"Code.gs",":",[204,205,210],"pre",{"className":206,"code":207,"filename":201,"language":208,"meta":209,"style":209},"language-javascript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","function doGet(e) {\n  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(e.parameter.sheet || 'feedback');\n  const values = sheet.getRange(e.parameter.range || 'A1:Z100').getValues();\n  return ContentService.createTextOutput(JSON.stringify(values)).setMimeType(ContentService.MimeType.JSON);\n}\n\nfunction doPost(e) {\n  const data = JSON.parse(e.postData.contents);\n  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(data.sheet || 'feedback');\n  if (data.values) {\n    data.values.forEach(r => sheet.appendRow(r));\n  }\n  return ContentService.createTextOutput(JSON.stringify({ success: true })).setMimeType(ContentService.MimeType.JSON);\n}\n","javascript","",[169,211,212,239,300,350,406,412,419,435,471,513,534,572,578,636],{"__ignoreMap":209},[213,214,217,221,225,229,233,236],"span",{"class":215,"line":216},"line",1,[213,218,220],{"class":219},"spNyl","function",[213,222,224],{"class":223},"s2Zo4"," doGet",[213,226,228],{"class":227},"sMK4o","(",[213,230,232],{"class":231},"sHdIc","e",[213,234,235],{"class":227},")",[213,237,238],{"class":227}," {\n",[213,240,242,245,249,252,255,257,260,264,266,269,271,273,275,278,280,283,286,289,292,295,297],{"class":215,"line":241},2,[213,243,244],{"class":219},"  const",[213,246,248],{"class":247},"sTEyZ"," sheet",[213,250,251],{"class":227}," =",[213,253,254],{"class":247}," SpreadsheetApp",[213,256,162],{"class":227},[213,258,259],{"class":223},"getActiveSpreadsheet",[213,261,263],{"class":262},"swJcz","()",[213,265,162],{"class":227},[213,267,268],{"class":223},"getSheetByName",[213,270,228],{"class":262},[213,272,232],{"class":247},[213,274,162],{"class":227},[213,276,277],{"class":247},"parameter",[213,279,162],{"class":227},[213,281,282],{"class":247},"sheet",[213,284,285],{"class":227}," ||",[213,287,288],{"class":227}," '",[213,290,171],{"class":291},"sfazB",[213,293,294],{"class":227},"'",[213,296,235],{"class":262},[213,298,299],{"class":227},";\n",[213,301,303,305,308,310,312,314,317,319,321,323,325,327,330,332,334,337,339,341,343,346,348],{"class":215,"line":302},3,[213,304,244],{"class":219},[213,306,307],{"class":247}," values",[213,309,251],{"class":227},[213,311,248],{"class":247},[213,313,162],{"class":227},[213,315,316],{"class":223},"getRange",[213,318,228],{"class":262},[213,320,232],{"class":247},[213,322,162],{"class":227},[213,324,277],{"class":247},[213,326,162],{"class":227},[213,328,329],{"class":247},"range",[213,331,285],{"class":227},[213,333,288],{"class":227},[213,335,336],{"class":291},"A1:Z100",[213,338,294],{"class":227},[213,340,235],{"class":262},[213,342,162],{"class":227},[213,344,345],{"class":223},"getValues",[213,347,263],{"class":262},[213,349,299],{"class":227},[213,351,353,357,360,362,365,367,370,372,375,377,380,383,385,388,390,393,395,398,400,402,404],{"class":215,"line":352},4,[213,354,356],{"class":355},"s7zQu","  return",[213,358,359],{"class":247}," ContentService",[213,361,162],{"class":227},[213,363,364],{"class":223},"createTextOutput",[213,366,228],{"class":262},[213,368,369],{"class":247},"JSON",[213,371,162],{"class":227},[213,373,374],{"class":223},"stringify",[213,376,228],{"class":262},[213,378,379],{"class":247},"values",[213,381,382],{"class":262},"))",[213,384,162],{"class":227},[213,386,387],{"class":223},"setMimeType",[213,389,228],{"class":262},[213,391,392],{"class":247},"ContentService",[213,394,162],{"class":227},[213,396,397],{"class":247},"MimeType",[213,399,162],{"class":227},[213,401,369],{"class":247},[213,403,235],{"class":262},[213,405,299],{"class":227},[213,407,409],{"class":215,"line":408},5,[213,410,411],{"class":227},"}\n",[213,413,415],{"class":215,"line":414},6,[213,416,418],{"emptyLinePlaceholder":417},true,"\n",[213,420,422,424,427,429,431,433],{"class":215,"line":421},7,[213,423,220],{"class":219},[213,425,426],{"class":223}," doPost",[213,428,228],{"class":227},[213,430,232],{"class":231},[213,432,235],{"class":227},[213,434,238],{"class":227},[213,436,438,440,443,445,448,450,453,455,457,459,462,464,467,469],{"class":215,"line":437},8,[213,439,244],{"class":219},[213,441,442],{"class":247}," data",[213,444,251],{"class":227},[213,446,447],{"class":247}," JSON",[213,449,162],{"class":227},[213,451,452],{"class":223},"parse",[213,454,228],{"class":262},[213,456,232],{"class":247},[213,458,162],{"class":227},[213,460,461],{"class":247},"postData",[213,463,162],{"class":227},[213,465,466],{"class":247},"contents",[213,468,235],{"class":262},[213,470,299],{"class":227},[213,472,474,476,478,480,482,484,486,488,490,492,494,497,499,501,503,505,507,509,511],{"class":215,"line":473},9,[213,475,244],{"class":219},[213,477,248],{"class":247},[213,479,251],{"class":227},[213,481,254],{"class":247},[213,483,162],{"class":227},[213,485,259],{"class":223},[213,487,263],{"class":262},[213,489,162],{"class":227},[213,491,268],{"class":223},[213,493,228],{"class":262},[213,495,496],{"class":247},"data",[213,498,162],{"class":227},[213,500,282],{"class":247},[213,502,285],{"class":227},[213,504,288],{"class":227},[213,506,171],{"class":291},[213,508,294],{"class":227},[213,510,235],{"class":262},[213,512,299],{"class":227},[213,514,516,519,522,524,526,528,531],{"class":215,"line":515},10,[213,517,518],{"class":355},"  if",[213,520,521],{"class":262}," (",[213,523,496],{"class":247},[213,525,162],{"class":227},[213,527,379],{"class":247},[213,529,530],{"class":262},") ",[213,532,533],{"class":227},"{\n",[213,535,537,540,542,544,546,549,551,554,557,559,561,564,566,568,570],{"class":215,"line":536},11,[213,538,539],{"class":247},"    data",[213,541,162],{"class":227},[213,543,379],{"class":247},[213,545,162],{"class":227},[213,547,548],{"class":223},"forEach",[213,550,228],{"class":262},[213,552,553],{"class":231},"r",[213,555,556],{"class":219}," =>",[213,558,248],{"class":247},[213,560,162],{"class":227},[213,562,563],{"class":223},"appendRow",[213,565,228],{"class":262},[213,567,553],{"class":247},[213,569,382],{"class":262},[213,571,299],{"class":227},[213,573,575],{"class":215,"line":574},12,[213,576,577],{"class":227},"  }\n",[213,579,581,583,585,587,589,591,593,595,597,599,602,605,607,611,614,616,618,620,622,624,626,628,630,632,634],{"class":215,"line":580},13,[213,582,356],{"class":355},[213,584,359],{"class":247},[213,586,162],{"class":227},[213,588,364],{"class":223},[213,590,228],{"class":262},[213,592,369],{"class":247},[213,594,162],{"class":227},[213,596,374],{"class":223},[213,598,228],{"class":262},[213,600,601],{"class":227},"{",[213,603,604],{"class":262}," success",[213,606,202],{"class":227},[213,608,610],{"class":609},"sfNiH"," true",[213,612,613],{"class":227}," }",[213,615,382],{"class":262},[213,617,162],{"class":227},[213,619,387],{"class":223},[213,621,228],{"class":262},[213,623,392],{"class":247},[213,625,162],{"class":227},[213,627,397],{"class":247},[213,629,162],{"class":227},[213,631,369],{"class":247},[213,633,235],{"class":262},[213,635,299],{"class":227},[213,637,639],{"class":215,"line":638},14,[213,640,411],{"class":227},[152,642,643,664],{"start":408},[155,644,645,646,194,649,652,653,521,656,178,660,663],{},"Click ",[159,647,648],{},"Deploy",[159,650,651],{},"New Deployment"," -> Select ",[159,654,655],{},"Web App",[657,658,659],"em",{},"Execute as: Me",[657,661,662],{},"Who has access: Anyone",").",[155,665,666,667,202],{},"Copy Web App URL into ",[169,668,669],{},".env",[204,671,675],{"className":672,"code":673,"filename":669,"language":674,"meta":209,"style":209},"language-env shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","GSHEET_APPSCRIPT_URL=https:\u002F\u002Fscript.google.com\u002Fmacros\u002Fs\u002FAKfycb...\u002Fexec\n","env",[169,676,677],{"__ignoreMap":209},[213,678,679],{"class":215,"line":216},[213,680,673],{},[144,682],{},[147,684,686],{"id":685},"_2-vue-component-implementation","2. Vue Component Implementation",[204,688,693],{"className":689,"code":690,"filename":691,"language":692,"meta":209,"style":209},"language-vue shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003Cscript setup lang=\"ts\">\ninterface FeedbackItem {\n  id: string\n  author: string\n  rating: string\n  comment: string\n}\n\n\u002F\u002F Read data\nconst { data: items, pending, refresh } = await useGSheetAsObject\u003CFeedbackItem[]>('A1:D50', {\n  sheet: 'feedback'\n})\n\n\u002F\u002F Write data\nconst { append } = useGSheetWrite({ sheet: 'feedback' })\n\nconst author = ref('')\nconst rating = ref('5')\nconst comment = ref('')\nconst isSaving = ref(false)\n\nconst submitComment = async () => {\n  if (!author.value || !comment.value) return\n  isSaving.value = true\n\n  try {\n    await append('A1:D1', [\n      [String(Date.now()), author.value, rating.value, comment.value]\n    ])\n    author.value = ''\n    comment.value = ''\n    await refresh()\n  }\n  finally {\n    isSaving.value = false\n  }\n}\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003Cdiv class=\"feedback-page\">\n    \u003Ch1>Submit User Feedback\u003C\u002Fh1>\n\n    \u003Cform @submit.prevent=\"submitComment\">\n      \u003Cinput\n        v-model=\"author\"\n        placeholder=\"Your Name\"\n        required\n      >\n      \u003Cselect v-model=\"rating\">\n        \u003Coption value=\"5\">\n          5 Stars\n        \u003C\u002Foption>\n        \u003Coption value=\"4\">\n          4 Stars\n        \u003C\u002Foption>\n        \u003Coption value=\"3\">\n          3 Stars\n        \u003C\u002Foption>\n      \u003C\u002Fselect>\n      \u003Ctextarea\n        v-model=\"comment\"\n        placeholder=\"Comment\"\n        required\n      \u002F>\n      \u003Cbutton\n        :disabled=\"isSaving\"\n        type=\"submit\"\n      >\n        {{ isSaving ? 'Sending...' : 'Submit Feedback' }}\n      \u003C\u002Fbutton>\n    \u003C\u002Fform>\n\n    \u003Chr>\n\n    \u003Cdiv v-if=\"pending\">\n      Loading comments...\n    \u003C\u002Fdiv>\n    \u003Cul v-else>\n      \u003Cli\n        v-for=\"item in items\"\n        :key=\"item.id\"\n      >\n        \u003Cstrong>{{ item.author }}\u003C\u002Fstrong> ({{ item.rating }} Stars): {{ item.comment }}\n      \u003C\u002Fli>\n    \u003C\u002Ful>\n  \u003C\u002Fdiv>\n\u003C\u002Ftemplate>\n","pages\u002Ffeedback.vue","vue",[169,694,695,723,734,744,753,762,771,775,779,785,846,860,867,871,876,911,916,936,959,977,996,1001,1021,1054,1069,1074,1082,1105,1157,1163,1178,1192,1203,1208,1216,1231,1236,1241,1251,1256,1266,1289,1309,1314,1336,1345,1360,1375,1381,1387,1408,1430,1436,1446,1466,1472,1481,1501,1507,1516,1526,1534,1547,1561,1566,1572,1580,1595,1610,1615,1621,1631,1641,1646,1655,1660,1681,1687,1696,1709,1717,1732,1747,1752,1773,1782,1791,1801],{"__ignoreMap":209},[213,696,697,700,703,706,709,712,715,718,720],{"class":215,"line":216},[213,698,699],{"class":227},"\u003C",[213,701,702],{"class":262},"script",[213,704,705],{"class":219}," setup",[213,707,708],{"class":219}," lang",[213,710,711],{"class":227},"=",[213,713,714],{"class":227},"\"",[213,716,717],{"class":291},"ts",[213,719,714],{"class":227},[213,721,722],{"class":227},">\n",[213,724,725,728,732],{"class":215,"line":241},[213,726,727],{"class":219},"interface",[213,729,731],{"class":730},"sBMFI"," FeedbackItem",[213,733,238],{"class":227},[213,735,736,739,741],{"class":215,"line":302},[213,737,738],{"class":262},"  id",[213,740,202],{"class":227},[213,742,743],{"class":730}," string\n",[213,745,746,749,751],{"class":215,"line":352},[213,747,748],{"class":262},"  author",[213,750,202],{"class":227},[213,752,743],{"class":730},[213,754,755,758,760],{"class":215,"line":408},[213,756,757],{"class":262},"  rating",[213,759,202],{"class":227},[213,761,743],{"class":730},[213,763,764,767,769],{"class":215,"line":414},[213,765,766],{"class":262},"  comment",[213,768,202],{"class":227},[213,770,743],{"class":730},[213,772,773],{"class":215,"line":421},[213,774,411],{"class":227},[213,776,777],{"class":215,"line":437},[213,778,418],{"emptyLinePlaceholder":417},[213,780,781],{"class":215,"line":473},[213,782,784],{"class":783},"sHwdD","\u002F\u002F Read data\n",[213,786,787,790,793,795,797,800,803,806,808,811,814,816,819,822,824,827,830,833,835,837,840,842,844],{"class":215,"line":515},[213,788,789],{"class":219},"const",[213,791,792],{"class":227}," {",[213,794,442],{"class":262},[213,796,202],{"class":227},[213,798,799],{"class":247}," items",[213,801,802],{"class":227},",",[213,804,805],{"class":247}," pending",[213,807,802],{"class":227},[213,809,810],{"class":247}," refresh ",[213,812,813],{"class":227},"}",[213,815,251],{"class":227},[213,817,818],{"class":355}," await",[213,820,821],{"class":223}," useGSheetAsObject",[213,823,699],{"class":227},[213,825,826],{"class":730},"FeedbackItem",[213,828,829],{"class":247},"[]",[213,831,832],{"class":227},">",[213,834,228],{"class":247},[213,836,294],{"class":227},[213,838,839],{"class":291},"A1:D50",[213,841,294],{"class":227},[213,843,802],{"class":227},[213,845,238],{"class":227},[213,847,848,851,853,855,857],{"class":215,"line":536},[213,849,850],{"class":262},"  sheet",[213,852,202],{"class":227},[213,854,288],{"class":227},[213,856,171],{"class":291},[213,858,859],{"class":227},"'\n",[213,861,862,864],{"class":215,"line":574},[213,863,813],{"class":227},[213,865,866],{"class":247},")\n",[213,868,869],{"class":215,"line":580},[213,870,418],{"emptyLinePlaceholder":417},[213,872,873],{"class":215,"line":638},[213,874,875],{"class":783},"\u002F\u002F Write data\n",[213,877,879,881,883,886,888,890,893,895,897,899,901,903,905,907,909],{"class":215,"line":878},15,[213,880,789],{"class":219},[213,882,792],{"class":227},[213,884,885],{"class":247}," append ",[213,887,813],{"class":227},[213,889,251],{"class":227},[213,891,892],{"class":223}," useGSheetWrite",[213,894,228],{"class":247},[213,896,601],{"class":227},[213,898,248],{"class":262},[213,900,202],{"class":227},[213,902,288],{"class":227},[213,904,171],{"class":291},[213,906,294],{"class":227},[213,908,613],{"class":227},[213,910,866],{"class":247},[213,912,914],{"class":215,"line":913},16,[213,915,418],{"emptyLinePlaceholder":417},[213,917,919,921,924,926,929,931,934],{"class":215,"line":918},17,[213,920,789],{"class":219},[213,922,923],{"class":247}," author ",[213,925,711],{"class":227},[213,927,928],{"class":223}," ref",[213,930,228],{"class":247},[213,932,933],{"class":227},"''",[213,935,866],{"class":247},[213,937,939,941,944,946,948,950,952,955,957],{"class":215,"line":938},18,[213,940,789],{"class":219},[213,942,943],{"class":247}," rating ",[213,945,711],{"class":227},[213,947,928],{"class":223},[213,949,228],{"class":247},[213,951,294],{"class":227},[213,953,954],{"class":291},"5",[213,956,294],{"class":227},[213,958,866],{"class":247},[213,960,962,964,967,969,971,973,975],{"class":215,"line":961},19,[213,963,789],{"class":219},[213,965,966],{"class":247}," comment ",[213,968,711],{"class":227},[213,970,928],{"class":223},[213,972,228],{"class":247},[213,974,933],{"class":227},[213,976,866],{"class":247},[213,978,980,982,985,987,989,991,994],{"class":215,"line":979},20,[213,981,789],{"class":219},[213,983,984],{"class":247}," isSaving ",[213,986,711],{"class":227},[213,988,928],{"class":223},[213,990,228],{"class":247},[213,992,993],{"class":609},"false",[213,995,866],{"class":247},[213,997,999],{"class":215,"line":998},21,[213,1000,418],{"emptyLinePlaceholder":417},[213,1002,1004,1006,1009,1011,1014,1017,1019],{"class":215,"line":1003},22,[213,1005,789],{"class":219},[213,1007,1008],{"class":247}," submitComment ",[213,1010,711],{"class":227},[213,1012,1013],{"class":219}," async",[213,1015,1016],{"class":227}," ()",[213,1018,556],{"class":219},[213,1020,238],{"class":227},[213,1022,1024,1026,1028,1031,1033,1035,1038,1040,1043,1045,1047,1049,1051],{"class":215,"line":1023},23,[213,1025,518],{"class":355},[213,1027,521],{"class":262},[213,1029,1030],{"class":227},"!",[213,1032,181],{"class":247},[213,1034,162],{"class":227},[213,1036,1037],{"class":247},"value",[213,1039,285],{"class":227},[213,1041,1042],{"class":227}," !",[213,1044,187],{"class":247},[213,1046,162],{"class":227},[213,1048,1037],{"class":247},[213,1050,530],{"class":262},[213,1052,1053],{"class":355},"return\n",[213,1055,1057,1060,1062,1064,1066],{"class":215,"line":1056},24,[213,1058,1059],{"class":247},"  isSaving",[213,1061,162],{"class":227},[213,1063,1037],{"class":247},[213,1065,251],{"class":227},[213,1067,1068],{"class":609}," true\n",[213,1070,1072],{"class":215,"line":1071},25,[213,1073,418],{"emptyLinePlaceholder":417},[213,1075,1077,1080],{"class":215,"line":1076},26,[213,1078,1079],{"class":355},"  try",[213,1081,238],{"class":227},[213,1083,1085,1088,1091,1093,1095,1098,1100,1102],{"class":215,"line":1084},27,[213,1086,1087],{"class":355},"    await",[213,1089,1090],{"class":223}," append",[213,1092,228],{"class":262},[213,1094,294],{"class":227},[213,1096,1097],{"class":291},"A1:D1",[213,1099,294],{"class":227},[213,1101,802],{"class":227},[213,1103,1104],{"class":262}," [\n",[213,1106,1108,1111,1114,1116,1119,1121,1124,1127,1129,1132,1134,1136,1138,1141,1143,1145,1147,1150,1152,1154],{"class":215,"line":1107},28,[213,1109,1110],{"class":262},"      [",[213,1112,1113],{"class":223},"String",[213,1115,228],{"class":262},[213,1117,1118],{"class":247},"Date",[213,1120,162],{"class":227},[213,1122,1123],{"class":223},"now",[213,1125,1126],{"class":262},"())",[213,1128,802],{"class":227},[213,1130,1131],{"class":247}," author",[213,1133,162],{"class":227},[213,1135,1037],{"class":247},[213,1137,802],{"class":227},[213,1139,1140],{"class":247}," rating",[213,1142,162],{"class":227},[213,1144,1037],{"class":247},[213,1146,802],{"class":227},[213,1148,1149],{"class":247}," comment",[213,1151,162],{"class":227},[213,1153,1037],{"class":247},[213,1155,1156],{"class":262},"]\n",[213,1158,1160],{"class":215,"line":1159},29,[213,1161,1162],{"class":262},"    ])\n",[213,1164,1166,1169,1171,1173,1175],{"class":215,"line":1165},30,[213,1167,1168],{"class":247},"    author",[213,1170,162],{"class":227},[213,1172,1037],{"class":247},[213,1174,251],{"class":227},[213,1176,1177],{"class":227}," ''\n",[213,1179,1181,1184,1186,1188,1190],{"class":215,"line":1180},31,[213,1182,1183],{"class":247},"    comment",[213,1185,162],{"class":227},[213,1187,1037],{"class":247},[213,1189,251],{"class":227},[213,1191,1177],{"class":227},[213,1193,1195,1197,1200],{"class":215,"line":1194},32,[213,1196,1087],{"class":355},[213,1198,1199],{"class":223}," refresh",[213,1201,1202],{"class":262},"()\n",[213,1204,1206],{"class":215,"line":1205},33,[213,1207,577],{"class":227},[213,1209,1211,1214],{"class":215,"line":1210},34,[213,1212,1213],{"class":355},"  finally",[213,1215,238],{"class":227},[213,1217,1219,1222,1224,1226,1228],{"class":215,"line":1218},35,[213,1220,1221],{"class":247},"    isSaving",[213,1223,162],{"class":227},[213,1225,1037],{"class":247},[213,1227,251],{"class":227},[213,1229,1230],{"class":609}," false\n",[213,1232,1234],{"class":215,"line":1233},36,[213,1235,577],{"class":227},[213,1237,1239],{"class":215,"line":1238},37,[213,1240,411],{"class":227},[213,1242,1244,1247,1249],{"class":215,"line":1243},38,[213,1245,1246],{"class":227},"\u003C\u002F",[213,1248,702],{"class":262},[213,1250,722],{"class":227},[213,1252,1254],{"class":215,"line":1253},39,[213,1255,418],{"emptyLinePlaceholder":417},[213,1257,1259,1261,1264],{"class":215,"line":1258},40,[213,1260,699],{"class":227},[213,1262,1263],{"class":262},"template",[213,1265,722],{"class":227},[213,1267,1269,1272,1275,1278,1280,1282,1285,1287],{"class":215,"line":1268},41,[213,1270,1271],{"class":227},"  \u003C",[213,1273,1274],{"class":262},"div",[213,1276,1277],{"class":219}," class",[213,1279,711],{"class":227},[213,1281,714],{"class":227},[213,1283,1284],{"class":291},"feedback-page",[213,1286,714],{"class":227},[213,1288,722],{"class":227},[213,1290,1292,1295,1298,1300,1303,1305,1307],{"class":215,"line":1291},42,[213,1293,1294],{"class":227},"    \u003C",[213,1296,1297],{"class":262},"h1",[213,1299,832],{"class":227},[213,1301,1302],{"class":247},"Submit User Feedback",[213,1304,1246],{"class":227},[213,1306,1297],{"class":262},[213,1308,722],{"class":227},[213,1310,1312],{"class":215,"line":1311},43,[213,1313,418],{"emptyLinePlaceholder":417},[213,1315,1317,1319,1322,1325,1327,1329,1332,1334],{"class":215,"line":1316},44,[213,1318,1294],{"class":227},[213,1320,1321],{"class":262},"form",[213,1323,1324],{"class":219}," @submit.prevent",[213,1326,711],{"class":227},[213,1328,714],{"class":227},[213,1330,1331],{"class":291},"submitComment",[213,1333,714],{"class":227},[213,1335,722],{"class":227},[213,1337,1339,1342],{"class":215,"line":1338},45,[213,1340,1341],{"class":227},"      \u003C",[213,1343,1344],{"class":262},"input\n",[213,1346,1348,1351,1353,1355,1357],{"class":215,"line":1347},46,[213,1349,1350],{"class":219},"        v-model",[213,1352,711],{"class":227},[213,1354,714],{"class":227},[213,1356,181],{"class":291},[213,1358,1359],{"class":227},"\"\n",[213,1361,1363,1366,1368,1370,1373],{"class":215,"line":1362},47,[213,1364,1365],{"class":219},"        placeholder",[213,1367,711],{"class":227},[213,1369,714],{"class":227},[213,1371,1372],{"class":291},"Your Name",[213,1374,1359],{"class":227},[213,1376,1378],{"class":215,"line":1377},48,[213,1379,1380],{"class":219},"        required\n",[213,1382,1384],{"class":215,"line":1383},49,[213,1385,1386],{"class":227},"      >\n",[213,1388,1390,1392,1395,1398,1400,1402,1404,1406],{"class":215,"line":1389},50,[213,1391,1341],{"class":227},[213,1393,1394],{"class":262},"select",[213,1396,1397],{"class":219}," v-model",[213,1399,711],{"class":227},[213,1401,714],{"class":227},[213,1403,184],{"class":291},[213,1405,714],{"class":227},[213,1407,722],{"class":227},[213,1409,1411,1414,1417,1420,1422,1424,1426,1428],{"class":215,"line":1410},51,[213,1412,1413],{"class":227},"        \u003C",[213,1415,1416],{"class":262},"option",[213,1418,1419],{"class":219}," value",[213,1421,711],{"class":227},[213,1423,714],{"class":227},[213,1425,954],{"class":291},[213,1427,714],{"class":227},[213,1429,722],{"class":227},[213,1431,1433],{"class":215,"line":1432},52,[213,1434,1435],{"class":247},"          5 Stars\n",[213,1437,1439,1442,1444],{"class":215,"line":1438},53,[213,1440,1441],{"class":227},"        \u003C\u002F",[213,1443,1416],{"class":262},[213,1445,722],{"class":227},[213,1447,1449,1451,1453,1455,1457,1459,1462,1464],{"class":215,"line":1448},54,[213,1450,1413],{"class":227},[213,1452,1416],{"class":262},[213,1454,1419],{"class":219},[213,1456,711],{"class":227},[213,1458,714],{"class":227},[213,1460,1461],{"class":291},"4",[213,1463,714],{"class":227},[213,1465,722],{"class":227},[213,1467,1469],{"class":215,"line":1468},55,[213,1470,1471],{"class":247},"          4 Stars\n",[213,1473,1475,1477,1479],{"class":215,"line":1474},56,[213,1476,1441],{"class":227},[213,1478,1416],{"class":262},[213,1480,722],{"class":227},[213,1482,1484,1486,1488,1490,1492,1494,1497,1499],{"class":215,"line":1483},57,[213,1485,1413],{"class":227},[213,1487,1416],{"class":262},[213,1489,1419],{"class":219},[213,1491,711],{"class":227},[213,1493,714],{"class":227},[213,1495,1496],{"class":291},"3",[213,1498,714],{"class":227},[213,1500,722],{"class":227},[213,1502,1504],{"class":215,"line":1503},58,[213,1505,1506],{"class":247},"          3 Stars\n",[213,1508,1510,1512,1514],{"class":215,"line":1509},59,[213,1511,1441],{"class":227},[213,1513,1416],{"class":262},[213,1515,722],{"class":227},[213,1517,1519,1522,1524],{"class":215,"line":1518},60,[213,1520,1521],{"class":227},"      \u003C\u002F",[213,1523,1394],{"class":262},[213,1525,722],{"class":227},[213,1527,1529,1531],{"class":215,"line":1528},61,[213,1530,1341],{"class":227},[213,1532,1533],{"class":262},"textarea\n",[213,1535,1537,1539,1541,1543,1545],{"class":215,"line":1536},62,[213,1538,1350],{"class":219},[213,1540,711],{"class":227},[213,1542,714],{"class":227},[213,1544,187],{"class":291},[213,1546,1359],{"class":227},[213,1548,1550,1552,1554,1556,1559],{"class":215,"line":1549},63,[213,1551,1365],{"class":219},[213,1553,711],{"class":227},[213,1555,714],{"class":227},[213,1557,1558],{"class":291},"Comment",[213,1560,1359],{"class":227},[213,1562,1564],{"class":215,"line":1563},64,[213,1565,1380],{"class":219},[213,1567,1569],{"class":215,"line":1568},65,[213,1570,1571],{"class":227},"      \u002F>\n",[213,1573,1575,1577],{"class":215,"line":1574},66,[213,1576,1341],{"class":227},[213,1578,1579],{"class":262},"button\n",[213,1581,1583,1586,1588,1590,1593],{"class":215,"line":1582},67,[213,1584,1585],{"class":219},"        :disabled",[213,1587,711],{"class":227},[213,1589,714],{"class":227},[213,1591,1592],{"class":291},"isSaving",[213,1594,1359],{"class":227},[213,1596,1598,1601,1603,1605,1608],{"class":215,"line":1597},68,[213,1599,1600],{"class":219},"        type",[213,1602,711],{"class":227},[213,1604,714],{"class":227},[213,1606,1607],{"class":291},"submit",[213,1609,1359],{"class":227},[213,1611,1613],{"class":215,"line":1612},69,[213,1614,1386],{"class":227},[213,1616,1618],{"class":215,"line":1617},70,[213,1619,1620],{"class":247},"        {{ isSaving ? 'Sending...' : 'Submit Feedback' }}\n",[213,1622,1624,1626,1629],{"class":215,"line":1623},71,[213,1625,1521],{"class":227},[213,1627,1628],{"class":262},"button",[213,1630,722],{"class":227},[213,1632,1634,1637,1639],{"class":215,"line":1633},72,[213,1635,1636],{"class":227},"    \u003C\u002F",[213,1638,1321],{"class":262},[213,1640,722],{"class":227},[213,1642,1644],{"class":215,"line":1643},73,[213,1645,418],{"emptyLinePlaceholder":417},[213,1647,1649,1651,1653],{"class":215,"line":1648},74,[213,1650,1294],{"class":227},[213,1652,144],{"class":262},[213,1654,722],{"class":227},[213,1656,1658],{"class":215,"line":1657},75,[213,1659,418],{"emptyLinePlaceholder":417},[213,1661,1663,1665,1667,1670,1672,1674,1677,1679],{"class":215,"line":1662},76,[213,1664,1294],{"class":227},[213,1666,1274],{"class":262},[213,1668,1669],{"class":219}," v-if",[213,1671,711],{"class":227},[213,1673,714],{"class":227},[213,1675,1676],{"class":291},"pending",[213,1678,714],{"class":227},[213,1680,722],{"class":227},[213,1682,1684],{"class":215,"line":1683},77,[213,1685,1686],{"class":247},"      Loading comments...\n",[213,1688,1690,1692,1694],{"class":215,"line":1689},78,[213,1691,1636],{"class":227},[213,1693,1274],{"class":262},[213,1695,722],{"class":227},[213,1697,1699,1701,1704,1707],{"class":215,"line":1698},79,[213,1700,1294],{"class":227},[213,1702,1703],{"class":262},"ul",[213,1705,1706],{"class":219}," v-else",[213,1708,722],{"class":227},[213,1710,1712,1714],{"class":215,"line":1711},80,[213,1713,1341],{"class":227},[213,1715,1716],{"class":262},"li\n",[213,1718,1720,1723,1725,1727,1730],{"class":215,"line":1719},81,[213,1721,1722],{"class":219},"        v-for",[213,1724,711],{"class":227},[213,1726,714],{"class":227},[213,1728,1729],{"class":291},"item in items",[213,1731,1359],{"class":227},[213,1733,1735,1738,1740,1742,1745],{"class":215,"line":1734},82,[213,1736,1737],{"class":219},"        :key",[213,1739,711],{"class":227},[213,1741,714],{"class":227},[213,1743,1744],{"class":291},"item.id",[213,1746,1359],{"class":227},[213,1748,1750],{"class":215,"line":1749},83,[213,1751,1386],{"class":227},[213,1753,1755,1757,1759,1761,1764,1766,1768,1770],{"class":215,"line":1754},84,[213,1756,1413],{"class":227},[213,1758,159],{"class":262},[213,1760,832],{"class":227},[213,1762,1763],{"class":247},"{{ item.author }}",[213,1765,1246],{"class":227},[213,1767,159],{"class":262},[213,1769,832],{"class":227},[213,1771,1772],{"class":247}," ({{ item.rating }} Stars): {{ item.comment }}\n",[213,1774,1776,1778,1780],{"class":215,"line":1775},85,[213,1777,1521],{"class":227},[213,1779,155],{"class":262},[213,1781,722],{"class":227},[213,1783,1785,1787,1789],{"class":215,"line":1784},86,[213,1786,1636],{"class":227},[213,1788,1703],{"class":262},[213,1790,722],{"class":227},[213,1792,1794,1797,1799],{"class":215,"line":1793},87,[213,1795,1796],{"class":227},"  \u003C\u002F",[213,1798,1274],{"class":262},[213,1800,722],{"class":227},[213,1802,1804,1806,1808],{"class":215,"line":1803},88,[213,1805,1246],{"class":227},[213,1807,1263],{"class":262},[213,1809,722],{"class":227},[1811,1812,1813],"style",{},"html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}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 .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":209,"searchDepth":216,"depth":241,"links":1815},[1816,1817],{"id":149,"depth":241,"text":150},{"id":685,"depth":241,"text":686},"Build a live feedback and submission portal using Google Apps Script Web App URL.","md",null,{},{"title":107,"description":1818},"DgH8Q__h0uNI3vSM2o7GuM7tjztAxsMGs0oIsN2AWjk",[1825,1827],{"title":103,"path":104,"stem":105,"description":1826,"children":-1},"Hands-on tutorials for Apps Script, GViz SQL, CSV, API Keys, Service Accounts, and Sheet Routing.",{"title":111,"path":112,"stem":113,"description":1828,"children":-1},"End-to-end tutorial covering Apps Script, GCP Console, and Nuxt Admin Portal.",1786088230175]