PageSourceSearch

https://www.vaocherapp.com/_nuxt/o7wixnle.js

js vaocherapp.com collected 2026-10-02 05:04:43 UTC 17,020 bytes, 1 lines download raw bytes

1import{o as c,c as m,a as s,B as N,D as I,v as V,F as C,r as B,y as re,e as U,H as E,E as se,I as X,C as r,k as $,a1 as j,b as k,w as W,a7 as D,J as M,t as x,d as G,i as ie,T as le,j as b,K as ue,_ as ce}from"./DBmqPsUc.js";import de from"./BKpVfHEJ.js";import{o as me}from"./DpGD53PG.js";import{X as ve}from"./BXFBIuoO.js";(function(){try{if(typeof document<"u"){var e=document.createElement("style");e.appendChild(document.createTextNode('.vue3-marquee{display:flex!important;position:relative}.vue3-marquee.horizontal{overflow-x:hidden!important;flex-direction:row!important;width:100%;height:max-content}.vue3-marquee.vertical{overflow-y:hidden!important;flex-direction:column!important;height:100%;width:max-content}.vue3-marquee:hover>.marquee{animation-play-state:var(--pauseOnHover)}.vue3-marquee:active>.marquee{animation-play-state:var(--pauseOnClick)}.vue3-marquee>.marquee{flex:0 0 auto;min-width:var(--min-width);min-height:var(--min-height);z-index:1;animation:var(--orientation) var(--duration) linear var(--delay) var(--loops);animation-play-state:var(--pauseAnimation);animation-direction:var(--direction)}.vue3-marquee.horizontal>.marquee{display:flex;flex-direction:row;align-items:center}.vue3-marquee.vertical>.marquee{display:flex;flex-direction:column;align-items:center}@keyframes scrollX{0%{transform:translate(0)}to{transform:translate(-100%)}}@keyframes scrollY{0%{transform:translateY(0)}to{transform:translateY(-100%)}}.vue3-marquee>.overlay{position:absolute;width:100%;height:100%}.vue3-marquee>.transparent-overlay{position:absolute;width:100%;height:100%}.vue3-marquee>.overlay:before,.vue3-marquee>.overlay:after{content:"";position:absolute;z-index:2}.vue3-marquee.horizontal>.overlay:before,.vue3-marquee.horizontal>.overlay:after{background:linear-gradient(to right,var(--gradient-color));height:100%;width:var(--gradient-length)}.vue3-marquee.vertical>.overlay:before,.vue3-marquee.vertical>.overlay:after{background:linear-gradient(to bottom,var(--gradient-color));height:var(--gradient-length);width:100%}.vue3-marquee.horizontal>.overlay:after{transform:rotate(180deg)}.vue3-marquee.vertical>.overlay:after{transform:rotate(-180deg)}.vue3-marquee>.overlay:before{left:0;top:0}.vue3-marquee.horizontal>.overlay:after{right:0;top:0}.vue3-marquee.vertical>.overlay:after{left:0;bottom:0}')),document.head.appendChild(e)}}catch(a){console.error("vite-plugin-css-injected-by-js",a)}})();var he=Object.defineProperty,K=Object.getOwnPropertySymbols,fe=Object.prototype.hasOwnProperty,ge=Object.prototype.propertyIsEnumerable,F=(e,a,t)=>a in e?he(e,a,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[a]=t,Y=(e,a)=>{for(var t in a||(a={}))fe.call(a,t)&&F(e,t,a[t]);if(K)for(var t of K(a))ge.call(a,t)&&F(e,t,a[t]);return e},ye=(e,a)=>{const t=e.__vccOpts||e;for(const[d,o]of a)t[d]=o;return t};const pe=U({props:{vertical:{type:Boolean,default:!1},direction:{type:String,default:"normal"},duration:{type:Number,default:20},delay:{type:Number,default:0},loop:{type:Number,default:0},clone:{type:Boolean,default:!1},gradient:{type:Boolean,default:!1},gradientColor:{type:Array,default:[255,255,255]},gradientWidth:{type:String},gradientLength:{type:String},pauseOnHover:{type:Boolean,default:!1},pauseOnClick:{type:Boolean,default:!1},pause:{type:Boolean,default:!1},animateOnOverflowOnly:{type:Boolean,default:!1}},emits:["onComplete","onLoopComplete","onPause","onResume","onOverflowDetected","onOverflowCleared"],setup(e,{emit:a}){const t=r(0),d=r("100%"),o=r("100%"),S=r(0),i=r(!1),y=r(!0),f=r(0),w=r(0),u=r(0),l=r(0),v=r(!1),p=r(!1),q=r(0),n=r(null),T=r("200px"),g=r(!1),O=r(null),_=r(null),A=async()=>{await L(),S.value++},L=async()=>{e.vertical&&(i.value=!0),setInterval(()=>{if(d.value="0%",o.value="0%",O.value!==null&&_.value!==null&&O.value&&_.value)if(e.vertical&&"clientHeight"in O.value&&"clientHeight"in _.value){l.value=O.value.clientHeight,u.value=_.value.clientHeight;const h=Math.ceil(u.value/l.value);return t.value=e.animateOnOverflowOnly?0:isFinite(h)?h:0,i.value=!1,t.value}else if(!e.vertical&&"clientWidth"in O.value&&"clientWidth"in _.value){if(w.value=O.value.clientWidth,f.value=_.value.clientWidth,e.animateO
1nOverflowOnly&&g.value)return w.value<=f.value?(y.value=!0,a("onOverflowCleared")):(y.value=!1,a("onOverflowDetected")),0;const h=Math.ceil(f.value/w.value);return t.value=isFinite(h)?h:0,t.value}else return d.value="100%",o.value="100%",0;else return d.value="100%",o.value="100%",0},100)};E(w,async()=>{e.clone&&A()}),E(f,async()=>{(e.clone||e.animateOnOverflowOnly)&&A()}),E(()=>e.pause,(h,H)=>{h!==H&&a(h?"onResume":"onPause")});const J=()=>{e.pauseOnHover&&(a("onPause"),v.value=!0)},Q=()=>{e.pauseOnHover&&(a("onResume"),v.value=!1)},Z=()=>{e.pauseOnClick&&(a("onPause"),p.value=!0)},ee=()=>{e.pauseOnClick&&(a("onResume"),p.value=!1)},P=$(()=>e.pause||e.vertical&&i.value||e.animateOnOverflowOnly&&y.value?"paused":"running"),ae=$(()=>e.pauseOnHover&&(v.value||p.value)||!e.pauseOnHover&&P.value==="paused"?"paused":"running"),te=$(()=>e.pauseOnHover&&v.value||e.pauseOnClick&&p.value||!e.pauseOnHover&&P.value==="paused"?"paused":"running"),ne=$(()=>{const h={"--duration":`${e.duration}s`,"--delay":`${e.delay}s`,"--direction":`${e.direction}`,"--pauseOnHover":`${ae.value}`,"--pauseOnClick":`${te.value}`,"--pauseAnimation":`${P.value}`,"--loops":`${e.loop===0?"infinite":e.loop}`,"--gradient-color":`rgba(${e.gradientColor[0]}, ${e.gradientColor[1]}, ${e.gradientColor[2]}, 1), rgba(${e.gradientColor[0]}, ${e.gradientColor[1]}, ${e.gradientColor[2]}, 0)`,"--gradient-length":`${T.value}`,"--min-width":`${d.value}`,"--min-height":`${o.value}`},H={"--orientation":"scrollX",orientation:"horizontal"};return e.vertical&&(H["--orientation"]="scrollY"),Y(Y({},h),H)}),oe=$(()=>!!e.gradient),R=async()=>{e.vertical?(o.value="100%",d.value="auto",e.animateOnOverflowOnly&&console.warn("The `animateOnOverflowOnly` prop is not supported for vertical marquees.")):(o.value="auto",e.animateOnOverflowOnly?d.value="auto":d.value="100%"),e.gradient&&(e.gradientWidth?(console.warn("The `gradientWidth` prop has been deprecated and will be removed in a future release. Please use `gradientLength` instead."),T.value=e.gradientWidth):e.gradientLength&&(T.value=e.gradientLength)),(e.clone||e.animateOnOverflowOnly)&&(await L(),A()),g.value=!0};return se(async()=>{R(),n.value=setInterval(()=>{q.value++,e.loop!==0&&q.value===e.loop&&(a("onComplete"),clearInterval(n.value)),a("onLoopComplete")},e.duration*1e3)}),X(()=>{clearInterval(n.value)}),{ready:g,contentWidth:w,containerWidth:f,contentHeight:l,containerHeight:u,loopCounter:q,loopInterval:n,mouseOverMarquee:v,mouseDownMarquee:p,minWidth:d,minHeight:o,animateOnOverflowPause:y,marqueeContent:O,marqueeOverlayContainer:_,componentKey:S,showGradient:oe,cloneAmount:t,ForcesUpdate:A,checkForClone:L,setupMarquee:R,getCurrentStyle:ne,hoverStarted:J,hoverEnded:Q,mouseDown:Z,mouseUp:ee}}}),be={class:"transparent-overlay",ref:"marqueeOverlayContainer","aria-hidden":!0},we={class:"marquee",ref:"marqueeContent"},Oe={key:1,"aria-hidden":!0,class:"marquee"};function _e(e,a,t,d,o,S){return e.ready?(c(),m("div",{class:N(["vue3-marquee",{vertical:e.vertical,horizontal:!e.vertical}]),style:re(e.getCurrentStyle),key:e.componentKey,onMouseenter:a[0]||(a[0]=(...i)=>e.hoverStarted&&e.hoverStarted(...i)),onMouseleave:a[1]||(a[1]=(...i)=>e.hoverEnded&&e.hoverEnded(...i)),onMousedown:a[2]||(a[2]=(...i)=>e.mouseDown&&e.mouseDown(...i)),onMouseup:a[3]||(a[3]=(...i)=>e.mouseUp&&e.mouseUp(...i))},[s("div",be,null,512),e.showGradient?(c(),m("div",{key:0,"aria-hidden":!0,class:N(["overlay",{vertical:e.vertical,horizontal:!e.vertical}])},null,2)):I("",!0),s("div",we,[V(e.$slots,"default")],512),!e.animateOnOverflowOnly||e.animateOnOverflowOnly&&!e.animateOnOverflowPause?(c(),m("div",Oe,[V(e.$slots,"default")])):I("",!0),(c(!0),m(C,null,B(e.cloneAmount,i=>(c(),m("div",{"aria-hidden":!0,class:"marquee cloned",key:i},[V(e.$slots,"default")]))),128))],38)):I("",!0)}var je=ye(pe,[["render",_e]]);const xe={class:"container mx-auto py-8"},ke={key:0,class:"text-3xl font-bold text-center text-gray-800"},Ce=["role","tabindex","aria-label","onClick","onKeydown"],Se={class:"text-center"},qe={class:"text-lg font-semibold text-gray-900"},Te={class:"mb-3 text-xs text-slate-400"},$e={class:"mb-4 text-sm text-slate-500"},Ie={class:"mt-auto flex"},Ae=["aria-label"],He={class:"flex flex-col items-center text-center"},Me={class:"mt-4 text-xl font-semibold text-gray-900"},Be={class:"mt-1 text-sm text-slate-400"},Le={class:"mt-3 flex","aria-label":"5 out of 5 stars"},Pe={class:"mt-5 max-h-[min(50vh,24rem)] overflow-y-auto text-left text-base leading-relaxed text-slate-600 sm:text-center"},z=220,Ve=U({__name:"TestimonialItemsListing",props:{hideHeader:{type:Boolean}},setup(e){const a=r(null),t=r(null),d={type:"loop",perPage:3,perMove:1,gap:"3rem",padding:"3rem",pagination:!1,autoplay:!0,interval:2500,arrows:!0,breakpoints:{1279:{perPage:2},767:{perPage:1,padding:"1rem"}}};function o(u){return u.length>z}function S(u){if(!o(u))return u;const l=u.slice(0,z),v=l.lastIndexOf(" ");return`${(v>z*.6?l.slice(0,v):l).trimEnd()}… `}function i(u){const l=a.value?.splide?.Components?.Autoplay;l&&(u?l.play():l.pause())}function y(u){t.value=u,i(!1),document.body.style.overflow="hidden"}function f(){t.value=null,i(!0),document.body.style.overflow=""}me("Escape",()=>{t.value&&f()}),X(()=>{document.body.style.overflow=""});const w=[{name:"Heather Stevenson",business:"Subi Sports Massage",image:"/images/testimonials/subi-sports-massage-physio.webp",comment:"Our business, Subi Sports Massage & Physio do all of our vouchers through VaocherApp. We do a high volume of online vouchers, and joining Vaocher has saved us hours in reception time. Additionally Lam is amazing to work with. Some of the best customer service we have ever received. They have customised several things to suit our individual business, and have gone above and beyond with innovating and integrating with our booking system. The vouchers are automatically generated and sent out, money automatically transferred to us, and they keep a record of all vouchers. You can also add them in manually which is handy for the vouchers we sell in person at our clinics. The interface is very intuitive and easy to use. Couldn’t be happier, and would recommend to anyone who sells g
1ift vouchers online."},{name:"Michael Wright",business:"True Thai Massage",image:"/images/testimonials/true-thai-massage.webp",comment:"Support from VaocherApp's team made it very easy for me to get started. When I need help, they always go above and beyond, providing professional and timely service."},{name:"Yasmin Berger",business:"Natures Essence Beauty",image:"/images/testimonials/natures-essence-beauty-salon.webp",comment:"The VaocherApp system provides a very convenient way for our clients to purchase gift certificates for their loved ones."},{name:"Luke Murray",business:"Samadhi Soul Massage Therapies",image:"/images/testimonials/samadhi-soul-massage-therapies.webp",comment:"Excellent, simple to integrate system. We had been looking for an easy way to add downloadable gift vouchers to our website without cumbersome merchant facilities for some time. Staff are quick to respond to queries. Great service."},{name:"Barbara Duckworth",business:"Essence Salon and Spa",image:"/images/testimonials/essence-salon-spa.webp",comment:"The service received from Vaocher is second to none - any query I have had over the last 12 months has been addressed quickly and efficiently, and Lam has gone above and beyond to help me to improve my business. The system itself works impressively and I have never had a problem with voucher delivery - I would highly recommend Vaocher - I have had a fabulous experience."},{name:"Kylie Blackmore",business:"Cielo Massage",image:"/images/testimonials/cielo-massage.webp",comment:"I cannot recommend more highly. The vouchers are professional, the system is extremely user friendly for both the service provider and the client, and the customer service was outstanding in helping me set it up on my website."},{name:"Lisa Beckey",business:"Secrets On The Lake",image:"/images/testimonials/secret-on-the-lake.png",comment:"HIGHLY RECOMMEND VaocherApp. Took me less than a day to have it all set up and operational and on our website. The help/support chat function on the site is outstanding and the team on the other end are SO HELPFUL! So responsive and nothing has been too hard. They go above and beyond. I honestly had low expectations and was sceptical given how well priced they are but cannot fault them at all. This has been a game changer for our Accommodation, Restaurant and Cafe business and I know I'm not even using it to its full capabilities yet. Thank you so much to the VaocherApp Team, have been telling everyone I know how great this service is"},{name:"Adele Arkell",business:"Emerge Dining",image:"/images/testimonials/emerge-dining.png",comment:"We have had VaocherApp now for about a year. I love it! its is so effective and customisable, our Gift Voucher sales have really increased. It is the Gift Voucher module that I have been waiting for :)"},{name:"Tabitha Adamson",business:"Burnt Orange",image:"/images/testimonials/burnt-orange.png",comment:"VaocherApp has streamlined our gift voucher process and made selling gift vouchers much easier. Our customers get gift cards instantly and we have eliminated additional processing time on our end. The support we received during the set up and after has been incredibly helpful. Highly recommended!"},{name:"Johnny Grasso",business:"Cellar 47",image:"/images/testimonials/cellar-47.png",comment:"The app is simple & efficient. The team made it effortless to get me up & going. Really happy with the product & service provided!"},{name:"Rhys Brown",business:"Swan Valley Retreat",image:"/images/testimonials/swan-valley-retreat.png",comment:"These guys have really thought about this product. It is very user friendly and it works perfectly!"}];return(u,l)=>{const v=de,p=j("SplideSlide"),q=j("Splide");return c(),m("div",xe,[e.hideHeader?I("",!0):(c(),m("h2",ke," What Our Client Says ")),k(q,{ref_key:"splideRef",ref:a,options:d,class:"testimonial-splide px-4 lg:px-16 py-8"},{default:W(()=>[(c(),m(C,null,B(w,(n,T)=>k(p,{key:T,class:"pt-2 pb-8"},{default:W(()=>[s("div",{class:N(["flex h-full w-full flex-col items-center rounded-3xl border border-slate-200/90 bg-white p-6 shadow-[0_1px_2px_rgba(15,23,42,0.04),0_8px_24px_rgba(15,23,42,0.06)]",o(n.comment)?"cursor-pointer transition hover:border-slate-300 hover:shadow-[0_1px_2px_rgba(15,23,42,0.05),0_12px_28px_rgba(15,23,42,0.08)]":""]),role:o(n.comment)?"button":void 0,tabindex:o(n.comment)?0:void 0,"aria-label":o(n.comment)?"Show full review from "+n.name:void 0,onClick:g=>o(n.comment)&&y(n),onKeydown:[D(M(g=>o(n.comment)&&y(n),["prevent"]),["enter"]),D(M(g=>o(n.comment)&&y(n),["prevent"]),["space"])]},[s("div",null,[k(v,{src:n.image,alt:n.name,class:"h-20 w-20 rounded-full object-cover ring-1 ring-slate-100"},null,8,["src","alt"])]),s("div",Se,[s("h5",qe,x(n.name),1),s("h5",Te,x(n.business),1),s("p",$e,[o(n.comment)?(c(),m(C,{key:0},[G(x(S(n.comment))+" ",1),l[1]||(l[1]=s("span",{class:"font-semibold text-blue-700"},"[show]",-1))],64)):(c(),m(C,{key:1},[G(x(n.comment),1)],64))])]),s("div",Ie,[(c(),m(C,null,B(5,g=>s("span",{key:g,class:"text-yellow-400"},"★")),64))])],42,Ce)]),_:2},1024)),64))]),_:1},512),(c(),ie(ue,{to:"body"},[k(le,{"enter-active-class":"transition-opacity duration-200 ease-out","enter-from-class":"opacity-0","enter-to-class":"opacity-100","leave-active-class":"transition-opacity duration-150 ease-in","leave-from-class":"opacity-100","leave-to-class":"opacity-0"},{default:W(()=>[b(t)?(c(),m("div",{key:0,role:"dialog","aria-modal":"true","aria-label":"Review from "+b(t).name,class:"fixed inset-0 z-[2147483001] flex items-center justify-center overflow-y-auto bg-slate-900/50 p-4 backdrop-blur-sm sm:p-6",onClick:M(f,["self"])},[s("div",{class:"relative my-auto w-full max-w-lg rounded-2xl border border-slate-200 bg-white p-6 shadow-xl sm:p-8",onClick:l[0]||(l[0]=M(()=>{},["stop"]))},[s("button",{type:"button","aria-label":"Close review",class:"absolute right-3 top-3 inline-flex h-10 w-10 items-center justify-center rounded-full text-slate-500 transition hover:bg-slate-100 hover:text-slate-800 focus:outline-none focus-visible:ring-2 focus-visible:ring-blue-400 sm:right-4 sm:top-4",onClick:f},[k(b(ve),{class:"size-5","aria-hidden":"true"}
1)]),s("div",He,[k(v,{src:b(t).image,alt:b(t).name,class:"h-20 w-20 rounded-full object-cover ring-1 ring-slate-100",width:"80",height:"80"},null,8,["src","alt"]),s("h3",Me,x(b(t).name),1),s("p",Be,x(b(t).business),1),s("div",Le,[(c(),m(C,null,B(5,n=>s("span",{key:n,class:"text-yellow-400"},"★")),64))]),s("p",Pe,x(b(t).comment),1)])])],8,Ae)):I("",!0)]),_:1})]))])}}}),De=Object.assign(ce(Ve,[["__scopeId","data-v-5e3e3a61"]]),{__name:"TestimonialItemsListing"});export{je as V,De as _};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.