{"version":3,"file":"GoogleReviews.CSa4V_Ta.mjs","names":["useRef","__esmMin","init_ssg_sandbox_shims","window","de","init_jsx_runtime","c","p","init_npm_react_18_3_1","ce","init_framer_CaDWdxiz","RenderTarget","ControlType","addPropertyControls","GoogleReviews","props","host","el","mountGoogleReviews","PLACEHOLDER","endpoint","seconds","theme","style","STYLE","SECONDS","cfg","esc","s","G","ARR","d","ago","iso","y","timer","io","shown","render","data","list","h","copies","cardsHtml","av","r","k","wire","track","root","cards","dots","cut","b","rep","i","open","n","dotEls","current","mid","best","bestD","goTo","mark","jumpBy","was","px","copyWidth","recentre","c0","raf","settle","rest","paused","onCard","touching","visible","heldUntil","DEMO_REVIEWS","CACHE","saved","load","loadReviews","j","attempt","reviewsRequest","ctl","limit","done","reviewsPlaceholder","card","now","t","reply","init_GoogleReviews"],"sources":["https:/framerusercontent.com/modules/TFKqULSOKv3o01fo9fH0/wyy6Xu0aL1PxsCAS7sLW/GoogleReviews.js"],"sourcesContent":["// @ts-nocheck\n// Amp Me Up Google reviews section: Framer code component.\n// GENERATED by Google Reviews/build.mjs from src/. Edit the source, rebuild, paste.\n// Which reviews show is chosen in HQ > Reviews, not here.\nimport{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{useEffect,useRef}from\"react\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";const CSS='/* Amp Me Up Google reviews section. Site tokens: orange #F68419, charcoal\\n   #262423, 12px cards, square buttons, Roboto throughout (Outfit dropped 2026-10-24: one font\\n   file fewer on every page). */\\n#amr { --o: #F68419; --c: #262423; --mut: #6b6966; --line: rgba(10,10,10,.1);\\n  font-family: Roboto, -apple-system, \"Segoe UI\", sans-serif; color: var(--c); width: 100%; box-sizing: border-box; }\\n#amr *, #amr *::before, #amr *::after { box-sizing: border-box; }\\n#amr.dark { --c: #fff; --mut: #c9c6c1; --line: rgba(255,255,255,.14); }\\n\\n#amr .sum { display: flex; align-items: center; justify-content: center; gap: 10px 14px; flex-wrap: wrap; margin: 0 16px 22px; text-align: center; }\\n#amr .sum .g { width: 22px; height: 22px; flex: none; }\\n#amr .sum b { font-size: 22px; font-weight: 700; }\\n#amr .stars { color: #FBBC04; letter-spacing: 1px; font-size: 17px; line-height: 1; }\\n#amr .sum .cnt { font-size: 14px; color: var(--mut); }\\n#amr .sum a { font-family: Roboto, sans-serif; font-size: 14px; font-weight: 600; color: var(--o); text-decoration: none; white-space: nowrap; }\\n#amr .sum a:hover { text-decoration: underline; }\\n\\n#amr .rail { position: relative; }\\n#amr .track { display: flex; gap: 18px; overflow-x: auto; scroll-snap-type: x mandatory; scroll-behavior: smooth;\\n  padding: 6px 16px 26px; scrollbar-width: none; -webkit-overflow-scrolling: touch; }\\n#amr .track::-webkit-scrollbar { display: none; }\\n/* Logan, 2026-10-14 (\"Option A\"): calmer. No orange edge on the cards, a fine\\n   outline and soft shadow; orange is kept for \"See all on Google\" and\\n   \"Read more\" only. */\\n#amr .card { flex: 0 0 340px; max-width: calc(100vw - 48px); scroll-snap-align: center; background: #fff; color: #262423;\\n  border-radius: 12px; padding: 20px 20px 18px; border: 1px solid rgba(10,10,10,.08);\\n  box-shadow: 0 1px 3px rgba(0,0,0,.05), 0 10px 30px rgba(0,0,0,.06);\\n  display: flex; flex-direction: column; gap: 10px; }\\n#amr .who { display: flex; align-items: center; gap: 11px; }\\n#amr .av { width: 40px; height: 40px; border-radius: 50%; object-fit: cover; flex: none; background: #f1ede6;\\n  display: grid; place-items: center; font-weight: 700; color: #8a857d; font-size: 16px; }\\n#amr .nm { font-family: Roboto, sans-serif; font-weight: 600; font-size: 15.5px; line-height: 1.2; }\\n#amr .dt { font-size: 12.5px; color: #8a857d; margin-top: 2px; }\\n#amr .who .g { width: 20px; height: 20px; margin-left: auto; flex: none; }\\n#amr .txt { font-size: 14.5px; line-height: 1.55; color: #3d3a37; display: -webkit-box; -webkit-line-clamp: 7; -webkit-box-orient: vertical; overflow: hidden; }\\n#amr .card.open .txt { -webkit-line-clamp: unset; display: block; }\\n#amr .more { align-self: flex-start; background: none; border: 0; padding: 0; font: inherit; font-size: 13px; font-weight: 700; color: var(--o); cursor: pointer; }\\n#amr .rep { font-size: 13px; line-height: 1.5; color: #6b6966; border-left: 3px solid #f1ede6; padding-left: 10px; }\\n#amr .rep b { color: #262423; }\\n\\n/* Quiet round arrows either side of the cards, which fade out at the edges. */\\n#amr .rail { padding: 0 56px; }\\n#amr .track { -webkit-mask-image: linear-gradient(90deg, transparent, #000 4%, #000 96%, transparent);\\n  mask-image: linear-gradient(90deg, transparent, #000 4%, #000 96%, transparent); }\\n#amr .nav { position: absolute; inset: 0; pointer-events: none; display: flex; justify-content: space-between; align-items: center;\\n  padding: 0 8px 20px; margin: 0; }\\n#amr .nav button.arr { pointer-events: auto; width: 40px; height: 40px; border-radius: 50%; background: #fff; color: #262423;\\n  border: 1px solid rgba(10,10,10,.12); box-shadow: 0 2px 8px rgba(0,0,0,.06); cursor: pointer;\\n  display: grid; place-items: center; padding: 0; transition: border-color .15s; }\\n#amr .nav button.arr:hover { border-color: #262423; }\\n#amr .nav button.arr:focus-visible { outline: 2px solid #262423; outline-offset: 2px; }\\n#amr .nav button.arr svg { width: 18px; height: 18px; }\\n/* The dots are still kept up to date, just not shown: 24 of them is clutter. */\\n#amr .dots { display: none; }\\n#amr .dots i { display: block; }\\n#amr .ph { border: 2px dashed #d6d2cb; border-radius: 12px; padding: 28px; text-align: center; color: #8a857d; font-size: 14px; margin: 0 16px; }\\n\\n/* Phones: no arrows, people swipe. */\\n@media (max-width: 560px) {\\n  #amr .card { flex-basis: 84vw; }\\n  #amr .rail { padding: 0; }\\n  #amr .nav { display: none; }\\n  #amr .track { -webkit-mask-image: none; mask-image: none; }\\n}\\n\\n/* Placeholder while the reviews load (2026-10-23). */\\n#amr .sk i { display: block; height: 12px; width: 100%; border-radius: 6px;\\n  background: linear-gradient(90deg, rgba(128,128,128,.14) 25%, rgba(128,128,128,.24) 50%, rgba(128,128,128,.14) 75%);\\n  background-size: 200% 100%; animation: amrSk 1.4s ease-in-out infinite; }\\n#amr .sk .sum i { flex: none; max-width: 80%; }\\n#amr .sk .track { overflow: hidden; }\\n#amr .sk .card { min-height: 280px; }\\n#amr .sk .sk-l { flex: 1; display: grid; gap: 7px; }\\n@keyframes amrSk { from { background-position: 100% 0; } to { background-position: -100% 0; } }\\n';// Handed to <style> as raw text (2026-10-23). As {CSS} children, Framer's\n// server turned every \" in it into &quot;, which broke those rules until the\n// scripts ran and made React redraw the section when they did.\nconst STYLE={__html:CSS};/**\n * @framerSupportedLayoutWidth any-prefer-fixed\n * @framerSupportedLayoutHeight auto\n * @framerIntrinsicWidth 1200\n * @framerIntrinsicHeight 420\n */export default function GoogleReviews(props){const{endpoint,seconds,theme,style}=props;const host=useRef(null);useEffect(()=>{const el=host.current;if(!el)return;mountGoogleReviews(el,{endpoint,seconds,theme,canvas:RenderTarget.current()===RenderTarget.canvas});return()=>{el.innerHTML=PLACEHOLDER.__html;};},[endpoint,seconds,theme]);// The grey placeholder cards are drawn here, so they are in the page\n// Framer sends and show before any script has run. React leaves what is\n// inside alone from then on; mountGoogleReviews replaces them.\nreturn /*#__PURE__*/_jsxs(\"div\",{style:{width:\"100%\",...style},children:[/*#__PURE__*/_jsx(\"style\",{dangerouslySetInnerHTML:STYLE}),/*#__PURE__*/_jsx(\"div\",{id:\"amr\",ref:host,dangerouslySetInnerHTML:PLACEHOLDER})]});}const PLACEHOLDER={__html:reviewsPlaceholder()};addPropertyControls(GoogleReviews,{endpoint:{type:ControlType.String,title:\"Endpoint\",defaultValue:\"https://lsybbheomxkmmyubmkiy.supabase.co/functions/v1/google-reviews\"},seconds:{type:ControlType.Number,title:\"Seconds each\",defaultValue:5,min:3,max:15,step:1,description:\"How long each review rests before the next slides in.\"},theme:{type:ControlType.Enum,title:\"Text on\",options:[\"light\",\"dark\"],optionTitles:[\"Light background\",\"Dark background\"],defaultValue:\"light\"}});// ---- the section itself, from src/reviews.js ----\n/* Amp Me Up Google reviews section (Logan, 3 October 2026).\n *\n * Reads the reviews Logan chose in HQ > Reviews from the google-reviews\n * Supabase function and shows them as cards that scroll by themselves, newest\n * first (pinned ones lead), with when each was posted. Pauses while someone\n * hovers, touches or reads, and while it is off screen. Plain DOM, no\n * libraries, so the same file runs in the Framer component and preview.html.\n *\n * Config:\n *   endpoint    the google-reviews function\n *   seconds     how long each card rests before the next\n *   theme       \"light\" (dark text) or \"dark\" (white text) for the summary line\n *   canvas      true inside the Framer editor: shows a placeholder when empty\n *   demo        preview.html only: sample cards, nothing fetched\n */function mountGoogleReviews(root,cfg){cfg=cfg||{};var SECONDS=Math.max(3,Number(cfg.seconds)||5);root.className=cfg.theme===\"dark\"?\"dark\":\"\";var esc=function(s){return String(s==null?\"\":s).replace(/[&<>\"']/g,function(c){return({\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\"})[c];});};var G='<svg class=\"g\" viewBox=\"0 0 48 48\" aria-label=\"Google\"><path fill=\"#FFC107\" d=\"M43.6 20.5H42V20H24v8h11.3C33.7 32.7 29.2 36 24 36c-6.6 0-12-5.4-12-12s5.4-12 12-12c3.1 0 5.8 1.2 7.9 3l5.7-5.7C34.1 6.1 29.3 4 24 4 12.9 4 4 12.9 4 24s8.9 20 20 20 20-8.9 20-20c0-1.3-.1-2.4-.4-3.5z\"/><path fill=\"#FF3D00\" d=\"m6.3 14.7 6.6 4.8C14.7 15.1 19 12 24 12c3.1 0 5.8 1.2 7.9 3l5.7-5.7C34.1 6.1 29.3 4 24 4 16.3 4 9.7 8.3 6.3 14.7z\"/><path fill=\"#4CAF50\" d=\"M24 44c5.2 0 9.9-2 13.4-5.2l-6.2-5.2C29.2 35.1 26.7 36 24 36c-5.2 0-9.6-3.3-11.3-7.9l-6.5 5C9.5 39.6 16.2 44 24 44z\"/><path fill=\"#1976D2\" d=\"M43.6 20.5H42V20H24v8h11.3c-.8 2.2-2.2 4.2-4.1 5.6l6.2 5.2C37 39.2 44 34 44 24c0-1.3-.1-2.4-.4-3.5z\"/></svg>';var ARR=function(d){return'<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"'+d+'\"/></svg>';};function ago(iso){var d=(Date.now()-Date.parse(iso))/864e5;if(!(d>=0))return\"\";if(d<1)return\"Today\";if(d<2)return\"Yesterday\";if(d<7)return Math.floor(d)+\" days ago\";if(d<14)return\"A week ago\";if(d<31)return Math.floor(d/7)+\" weeks ago\";if(d<60)return\"A month ago\";if(d<365)return Math.floor(d/30.4)+\" months ago\";var y=Math.floor(d/365);return y<2?\"A year ago\":y+\" years ago\";}// The auto scroll timer and the on screen watcher of the cards now showing,\n// stopped when newer reviews replace them so two never run at once.\nvar timer=0,io=null,shown=\"\";function render(data){clearInterval(timer);if(io){io.disconnect();io=null;}shown=data?JSON.stringify(data):\"\";var list=data&&data.reviews||[];if(!list.length){root.innerHTML=cfg.canvas?'<div class=\"ph\">Google reviews show here once Google is connected in HQ &gt; Reviews.<br>On the live site this stays empty until then.</div>':\"\";return;}var h=\"\";if(data.count){h+='<div class=\"sum\">'+G+\"<b>\"+Number(data.rating||5).toFixed(1)+'</b><span class=\"stars\" aria-hidden=\"true\">&#9733;&#9733;&#9733;&#9733;&#9733;</span>'+'<span class=\"cnt\">from '+esc(data.count)+\" Google reviews</span>\"+(data.all_reviews_url?'<a href=\"'+esc(data.all_reviews_url)+'\" target=\"_blank\" rel=\"noopener\">See all on Google &rarr;</a>':\"\")+\"</div>\";}h+='<div class=\"rail\"><div class=\"track\" tabindex=\"0\" aria-label=\"Google reviews\">';// Endless loop (Logan, 2026-10-14): the reviews are laid out three times\n// over and the view stays in the middle copy, so it never visibly ends.\n// The two outer copies are hidden from screen readers.\nvar copies=list.length>1?3:1,cardsHtml=\"\";list.forEach(function(r){var av=r.photo?'<img class=\"av\" src=\"'+esc(String(r.photo).replace(/=s\\d+-/,\"=s96-\"))+'\" alt=\"\" loading=\"lazy\" referrerpolicy=\"no-referrer\" width=\"40\" height=\"40\">':'<span class=\"av\">'+esc(String(r.name||\"?\").charAt(0).toUpperCase())+\"</span>\";cardsHtml+='<article class=\"card\"@@COPY@@>'+'<div class=\"who\">'+av+'<div><div class=\"nm\">'+esc(r.name||\"A Google user\")+'</div><div class=\"dt\">'+esc(ago(r.date))+\"</div></div>\"+G+\"</div>\"+'<div class=\"stars\" aria-label=\"'+r.stars+' out of 5 stars\">'+\"&#9733;\".repeat(r.stars)+\"</div>\"+'<div class=\"txt\">'+esc(r.text)+\"</div>\"+'<button class=\"more\" hidden>Read more</button>'+(r.reply?'<div class=\"rep\" hidden><b>Reply from Amp Me Up:</b> '+esc(r.reply)+\"</div>\":\"\")+\"</article>\";});for(var k=0;k<copies;k++){h+=cardsHtml.split(\"@@COPY@@\").join(copies>1&&k!==1?' aria-hidden=\"true\" data-copy=\"'+k+'\"':\"\");}h+='</div><div class=\"nav\"><button class=\"arr prev\" aria-label=\"Previous review\">'+ARR(\"M15 18l-6-6 6-6\")+'</button><div class=\"dots\"></div>'+'<button class=\"arr next\" aria-label=\"Next review\">'+ARR(\"M9 18l6-6-6-6\")+\"</button></div></div>\";root.innerHTML=h;wire(list.length,copies);}function wire(n,copies){var track=root.querySelector(\".track\");var cards=[].slice.call(root.querySelectorAll(\".card\"));var dots=root.querySelector(\".dots\");// \"Read more\" only where the text is actually cut off. Every card is\n// measured first and changed after: measuring and changing in turn made\n// the phone lay the page out again for each of the 250 odd cards, which\n// froze it for a moment just as the section appeared (2026-10-23).\nvar cut=cards.map(function(c){var t=c.querySelector(\".txt\");return t.scrollHeight>t.clientHeight+2;});cards.forEach(function(c,i){var b=c.querySelector(\".more\"),rep=c.querySelector(\".rep\");if(cut[i]||rep){b.hidden=false;b.onclick=function(){var open=c.classList.toggle(\"open\");if(rep)rep.hidden=!open;b.textContent=open?\"Show less\":\"Read more\";paused=open// someone reading: stop moving\n;};}});// The loop's copies are for the eye only: keyboard Tab skips their buttons.\nroot.querySelectorAll(\".card[data-copy] button\").forEach(function(b){b.tabIndex=-1;});dots.innerHTML=cards.slice(0,n).map(function(){return\"<i></i>\";}).join(\"\");var dotEls=[].slice.call(dots.children);function current(){var mid=track.scrollLeft+track.clientWidth/2,best=0,bestD=Infinity;cards.forEach(function(c,i){var d=Math.abs(c.offsetLeft+c.offsetWidth/2-mid);if(d<bestD){bestD=d;best=i;}});return best;}function goTo(i){var n=cards.length;i=(i%n+n)%n;var c=cards[i];track.scrollTo({left:c.offsetLeft-(track.clientWidth-c.offsetWidth)/2,behavior:\"smooth\"});}function mark(){var i=current()%n;dotEls.forEach(function(d,k){d.classList.toggle(\"on\",k===i);});}// The endless loop. Once the view settles in the first or last copy, move\n// it by exactly one copy's width into the middle one, instantly. The cards\n// in every copy are identical, so nobody sees it happen.\nfunction jumpBy(px){var was=track.style.scrollBehavior;track.style.scrollBehavior=\"auto\";track.scrollLeft+=px;track.style.scrollBehavior=was;}function copyWidth(){return cards[n].offsetLeft-cards[0].offsetLeft;}function recentre(){if(copies<3)return;var i=current();if(i<n)jumpBy(copyWidth());else if(i>=2*n)jumpBy(-copyWidth());}if(copies===3){var c0=cards[n];jumpBy(c0.offsetLeft-(track.clientWidth-c0.offsetWidth)/2-track.scrollLeft);}var raf=0,settle=0;track.addEventListener(\"scroll\",function(){cancelAnimationFrame(raf);raf=requestAnimationFrame(mark);clearTimeout(settle);settle=setTimeout(recentre,180);},{passive:true});mark();root.querySelector(\".prev\").onclick=function(){goTo(current()-1);rest();};root.querySelector(\".next\").onclick=function(){goTo(current()+1);rest();};// Auto scroll (Logan, 2026-10-14): it keeps moving no matter what, EXCEPT\n// while a mouse is on a review card, or a thumb is pressed on one, for as\n// long as that lasts. A mouse elsewhere in the section (the score line,\n// the arrows, the gaps) does not stop it. After the mouse leaves a card,\n// the thumb lifts, an arrow is pressed or someone swipes, the next move\n// waits a full turn so nothing jumps at them.\n// It deliberately does NOT obey the device's \"reduce motion\" setting:\n// Windows with animation effects off was keeping it still for everyone\n// on such a PC, and Logan wants it moving.\nvar paused=false,onCard=false,touching=false,visible=true,heldUntil=0;function rest(){heldUntil=Math.max(heldUntil,Date.now()+SECONDS*1e3);}cards.forEach(function(c){c.addEventListener(\"mouseenter\",function(){onCard=true;});c.addEventListener(\"mouseleave\",function(){onCard=false;rest();});c.addEventListener(\"touchstart\",function(){touching=true;},{passive:true});c.addEventListener(\"touchend\",function(){touching=false;rest();},{passive:true});c.addEventListener(\"touchcancel\",function(){touching=false;rest();},{passive:true});});// A swipe or trackpad scroll between cards: carry on from where they left it.\ntrack.addEventListener(\"touchend\",rest,{passive:true});track.addEventListener(\"wheel\",rest,{passive:true});if(\"IntersectionObserver\"in window){io=new IntersectionObserver(function(e){visible=e[0].isIntersecting;},{threshold:.3});io.observe(track);}if(cards.length>1){timer=setInterval(function(){if(!root.isConnected){clearInterval(timer);return;}// Off screen or in a background tab nobody can see it move, so it\n// waits there and carries on when they scroll back to it.\nif(paused||onCard||touching||!visible||document.hidden||Date.now()<heldUntil)return;// With the loop there is always a next card. A single review (no loop)\n// has nothing to move to.\nif(copies===3)goTo(current()+1);},SECONDS*1e3);}}if(cfg.demo){render(DEMO_REVIEWS());return;}if(!cfg.endpoint){render(null);return;}// Loading (Logan, 2026-10-23: the reviews once never appeared until he\n// refreshed). The reviews this browser saw last time show straight away,\n// then the latest replace them only if anything changed. The request gives\n// up after 10 seconds and tries twice more, so one slow or dropped answer\n// no longer leaves the section empty. Until something arrives the grey\n// placeholder cards stay; only when every try fails with nothing saved does\n// the section close up.\nvar CACHE=\"amu_google_reviews\";try{var saved=JSON.parse(localStorage.getItem(CACHE)||\"null\");if(saved&&saved.ok&&saved.reviews&&saved.reviews.length)render(saved);}catch(e){}(function load(attempt){loadReviews(cfg.endpoint).then(function(j){if(!root.isConnected)return;try{localStorage.setItem(CACHE,JSON.stringify(j));}catch(e){}if(JSON.stringify(j)!==shown)render(j);},function(){if(!root.isConnected)return;if(attempt<2)setTimeout(function(){load(attempt+1);},attempt?6e3:2e3);else if(!shown)render(null);});})(0);}// One request at a time for every copy of the section on the page (Framer\n// keeps one per phone, tablet and computer layout), with a 10 second limit.\nvar reviewsRequest=null;function loadReviews(endpoint){if(reviewsRequest)return reviewsRequest;var ctl=typeof AbortController===\"function\"?new AbortController:null;var limit=setTimeout(function(){if(ctl)ctl.abort();},1e4);reviewsRequest=fetch(endpoint,{method:\"GET\",signal:ctl?ctl.signal:undefined}).then(function(r){if(!r.ok)throw new Error(\"HTTP \"+r.status);return r.json();}).then(function(j){if(!(j&&j.ok&&j.reviews&&j.reviews.length))throw new Error(\"no reviews\");return j;});var done=function(){clearTimeout(limit);reviewsRequest=null;};reviewsRequest.then(done,done);return reviewsRequest;}// Grey cards shaped like the real ones. They are in the page Framer sends,\n// so the section is never a blank gap while the reviews load, and the page\n// does not jump when they arrive.\nfunction reviewsPlaceholder(){var card='<div class=\"card\"><div class=\"who\"><span class=\"av\"></span><div class=\"sk-l\"><i style=\"width:60%\"></i><i style=\"width:35%\"></i></div></div>'+'<i style=\"width:90px\"></i><i></i><i></i><i></i><i style=\"width:70%\"></i></div>';return'<div class=\"sk\" aria-hidden=\"true\"><div class=\"sum\"><i style=\"width:240px;height:22px\"></i></div>'+'<div class=\"rail\"><div class=\"track\">'+card+card+card+card+\"</div></div></div>\";}/* Preview only. Never shipped as content: the Framer component always fetches. */function DEMO_REVIEWS(){var day=864e5,now=Date.now();var r=function(n,d,t,reply){return{name:n,photo:null,stars:5,date:new Date(now-d*day).toISOString(),text:t,reply:reply||null};};return{ok:true,rating:5,count:88,all_reviews_url:\"https://www.google.com/\",reviews:[r(\"Sample Reviewer\",3,\"SAMPLE TEXT for the preview only. Explained every option for our solar and battery, no pressure, and the install was tidy.\"),r(\"Preview Person\",12,\"SAMPLE TEXT. Great communication from quote to install. Turned up when they said they would.\",\"Thanks so much, sample reply.\"),r(\"Demo Customer\",40,\"SAMPLE TEXT. Honest advice, told us what we did not need. A long review to show the read more button. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris.\"),r(\"Test Name\",95,\"SAMPLE TEXT. Professional and thorough. Would recommend.\"),r(\"Another Sample\",400,\"SAMPLE TEXT. The battery has made a huge difference to our power bill.\")]};}\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"GoogleReviews\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutHeight\":\"auto\",\"framerSupportedLayoutWidth\":\"any-prefer-fixed\",\"framerContractVersion\":\"1\",\"framerIntrinsicHeight\":\"420\",\"framerIntrinsicWidth\":\"1200\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./GoogleReviews.map"],"mappings":"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"}