"),S(D(this.panel),this.clsMode));const{body:t,scrollingElement:e}=document;S(t,this.clsContainer,this.clsFlip),h(t,"touch-action","pan-y pinch-zoom"),h(this.$el,"display","block"),h(this.panel,"maxWidth",e.clientWidth),S(this.$el,this.clsOverlay),S(this.panel,this.clsSidebarAnimation,this.mode==="reveal"?"":this.clsMode),et(t),S(t,this.clsContainerAnimation),this.clsContainerAnimation&&oh()}},{name:"hide",self:!0,handler(){_(document.body,this.clsContainerAnimation),h(document.body,"touch-action","")}},{name:"hidden",self:!0,handler(){this.clsContainerAnimation&&rh(),this.mode==="reveal"&&Me(this.panel),_(this.panel,this.clsSidebarAnimation,this.clsMode),_(this.$el,this.clsOverlay),h(this.$el,"display",""),h(this.panel,"maxWidth",""),_(document.body,this.clsContainer,this.clsFlip)}},{name:"swipeLeft swipeRight",handler(t){this.isToggled()&&Qt(t.type,"Left")^this.flip&&this.hide()}}]};function oh(){Xo().content+=",user-scalable=0"}function rh(){const t=Xo();t.content=t.content.replace(/,user-scalable=0$/,"")}function Xo(){return y('meta[name="viewport"]',document.head)||q(document.head,'
')}var ah={mixins:[it],props:{selContainer:String,selContent:String,minHeight:Number},data:{selContainer:".uk-modal",selContent:".uk-modal-dialog",minHeight:150},computed:{container:({selContainer:t},e)=>e.closest(t),content:({selContent:t},e)=>e.closest(t)},observe:ut({target:({container:t,content:e})=>[t,e]}),update:{read(){return!this.content||!this.container||!R(this.$el)?!1:{max:Math.max(this.minHeight,et(this.container)-(m(this.content).height-et(this.$el)))}},write({max:t}){h(this.$el,{minHeight:this.minHeight,maxHeight:t})},events:["resize"]}},lh={props:["width","height"],connected(){S(this.$el,"uk-responsive-width"),h(this.$el,"aspectRatio",`${this.width}/${this.height}`)}},ch={props:{offset:Number},data:{offset:0},connected(){hh(this)},disconnected(){uh(this)},methods:{async scrollTo(t){t=t&&y(t)||document.body,b(this.$el,"beforescroll",[this,t])&&(await pn(t,{offset:this.offset}),b(this.$el,"scrolled",[this,t]))}}};const Ke=new Set;function hh(t){Ke.size||$(document,"click",Jo),Ke.add(t)}function uh(t){Ke.delete(t),Ke.size||Tt(document,"click",Jo)}function Jo(t){if(!t.defaultPrevented)for(const e of Ke)e.$el.contains(t.target)&&re(e.$el)&&(t.preventDefault(),window.location.href!==e.$el.href&&window.history.pushState({},"",e.$el.href),e.scrollTo(Yi(e.$el)))}const Ns="uk-scrollspy-inview";var fh={args:"cls",props:{cls:String,target:String,hidden:Boolean,margin:String,repeat:Boolean,delay:Number},data:()=>({cls:"",target:!1,hidden:!0,margin:"-1px",repeat:!1,delay:0}),computed:{elements:({target:t},e)=>t?N(t,e):[e]},watch:{elements(t){this.hidden&&h(Pe(t,`:not(.${Ns})`),"opacity",0)}},connected(){this.elementData=new Map},disconnected(){for(const[t,e]of this.elementData.entries())_(t,Ns,(e==null?void 0:e.cls)||"");delete this.elementData},observe:ue({target:({elements:t})=>t,handler(t){const e=this.elementData;for(const{target:i,isIntersecting:s}of t){e.has(i)||e.set(i,{cls:J(i,"uk-scrollspy-class")||this.cls});const n=e.get(i);!this.repeat&&n.show||(n.show=s)}this.$emit()},options:({margin:t})=>({rootMargin:t}),args:{intersecting:!1}}),update:[{write(t){for(const[e,i]of this.elementData.entries())i.show&&!i.inview&&!i.queued?(i.queued=!0,t.promise=(t.promise||Promise.resolve()).then(()=>new Promise(s=>setTimeout(s,this.delay))).then(()=>{this.toggle(e,!0),setTimeout(()=>{i.queued=!1,this.$emit()},300)})):!i.show&&i.inview&&!i.queued&&this.repeat&&this.toggle(e,!1)}}],methods:{toggle(t,e){var i,s;const n=(i=this.elementData)==null?void 0:i.get(t);if(!n)return;(s=n.off)==null||s.call(n),h(t,"opacity",!e&&this.hidden?0:""),j(t,Ns,e),j(t,n.cls);let o;if(o=n.cls.match(/\buk-animation-[\w-]+/g)){const r=()=>_(t,o);e?n.off=F(t,"animationcancel animationend",r,{self:!0}):r()}b(t,e?"inview":"outview"),n.inview=e}}},dh={props:{cls:String,closest:Boolean,scroll:Boolean,target:String,offset:Number},data:{cls:"uk-active",closest:!1,scroll:!1,target:'a[href]:not([role="button"])',offset:0},computed:{links:({target:t},e)=>N(t,e).filter(i=>re(i)),elements({closest:t}){return this.links.map(e=>e.closest(t||"*"))}},watch:{links(t){this.scroll&&this.$create("scroll",t,{offset:this.offset})}},observe:[ue(),Le()],update:[{read(){const t=this.links.map(l=>Yi(l)||l.ownerDocument),{length:e}=t;if(!e||!R(this.$el))return!1;const i=Ot(t,!0),{scrollTop:s,scrollHeight:n}=i,o=rt(i),r=n-o.height;let a=!1;if(s>=r)a=e-1;else{const l=this.offset+m(us()).height+o.height*.1;for(let c=0;c
0);c++)a=+c}return{active:a}},write({active:t}){const e=t!==!1&&!x(this.elements[t],this.cls);this.links.forEach(i=>i.blur());for(let i=0;it&&y(t,e)||e},connected(){this.start=Ko(this.start||this.top),this.end=Ko(this.end||this.bottom),this.placeholder=y("+ .uk-sticky-placeholder",this.$el)||y(''),this.isFixed=!1,this.setActive(!1)},beforeDisconnect(){this.isFixed&&(this.hide(),_(this.target,this.clsInactive)),Qo(this.$el),ot(this.placeholder),this.placeholder=null},observe:[vs(),Le({target:()=>document.scrollingElement}),ut({target:({$el:t})=>[t,Fi(t),document.scrollingElement],handler(t){this.$emit(this._data.resized&&t.some(({target:e})=>e===Fi(this.$el))?"update":"resize"),this._data.resized=!0}})],events:[{name:"load hashchange popstate",el:()=>window,filter:({targetOffset:t})=>t!==!1,handler(){const{scrollingElement:t}=document;!location.hash||t.scrollTop===0||setTimeout(()=>{const e=E(y(location.hash)),i=E(this.$el);this.isFixed&&ei(e,i)&&(t.scrollTop=Math.ceil(e.top-i.height-Y(this.targetOffset,"height",this.placeholder)-Y(this.offset,"height",this.placeholder)))})}}],update:[{read({height:t,width:e,margin:i,sticky:s},n){if(this.inactive=!this.matchMedia||!R(this.$el)||!this.$el.offsetHeight,this.inactive)return;const o=this.isFixed&&n.has("update");o&&(Hs(this.target),this.hide()),this.active||({height:t,width:e}=m(this.$el),i=h(this.$el,"margin")),o&&this.show();const r=Y("100vh","height"),a=et(window),l=Math.max(0,document.scrollingElement.scrollHeight-r);let c=this.position;this.overflowFlip&&t>r&&(c=c==="top"?"bottom":"top");const u=this.isFixed?this.placeholder:this.$el;let f=Y(this.offset,"height",s?this.$el:u);c==="bottom"&&(tE(d).top+(l?Math.min(a,r):a),offsetParentTop:E(d.offsetParent).top,overflowScroll:Q(s+Q(u,n,o)-Q(t,n,o),0,i)}},write(t,e){const i=e.has("scroll"),{initTimestamp:s=0,dir:n,prevDir:o,scroll:r,prevScroll:a=0,top:l,start:c,below:u}=t;if(r<0||r===a&&i||this.showOnUp&&!i&&!this.isFixed)return;const f=Date.now();if((f-s>300||n!==o)&&(t.initScroll=r,t.initTimestamp=f),!(this.showOnUp&&!this.isFixed&&Math.abs(t.initScroll-r)<=30&&Math.abs(a-r)<=10))if(this.inactive||rr&&(Ct.cancel(this.$el),this.hide());return}if(this.animation&&u){if(x(this.$el,"uk-animation-leave"))return;Ct.out(this.$el,this.animation).then(()=>this.hide(),A)}else this.hide()}else this.isFixed?this.update():this.animation&&u?(this.show(),Ct.in(this.$el,this.animation).catch(A)):(Hs(this.target),this.show())},events:["resize","resizeViewport","scroll"]}],methods:{show(){this.isFixed=!0,this.update(),this.placeholder.hidden=!1},hide(){const{offset:t,sticky:e}=this._data;this.setActive(!1),_(this.$el,this.clsFixed,this.clsBelow),e?h(this.$el,"top",t):h(this.$el,{position:"",top:"",width:"",marginTop:""}),this.placeholder.hidden=!0,this.isFixed=!1},update(){let{width:t,scroll:e=0,overflow:i,overflowScroll:s=0,start:n,end:o,offset:r,offsetParentTop:a,sticky:l,below:c}=this._data;const u=n!==0||e>n;if(!l){let f="fixed";e>o&&(r+=o-a+s-i,f="absolute"),h(this.$el,{position:f,width:t,marginTop:0},"important")}h(this.$el,"top",r-s),this.setActive(u),j(this.$el,this.clsBelow,c),S(this.$el,this.clsFixed)},setActive(t){const e=this.active;this.active=t,t?(si(this.target,this.clsInactive,this.clsActive),e!==t&&b(this.$el,"active")):(si(this.target,this.clsActive,this.clsInactive),e!==t&&(Hs(this.target),b(this.$el,"inactive")))}}};function zs(t,e,i,s){if(!t)return 0;if(mt(t)||z(t)&&t.match(/^-?\d/))return i+Y(t,"height",e,!0);{const n=t===!0?Fi(e):Z(t,e);return E(n).bottom-(s&&(n!=null&&n.contains(e))?k(h(n,"paddingBottom")):0)}}function Ko(t){return t==="true"?!0:t==="false"?!1:t}function Qo(t){h(t,{position:"",top:"",marginTop:"",width:""})}const Fs="uk-transition-disable";function Hs(t){x(t,Fs)||(S(t,Fs),requestAnimationFrame(()=>_(t,Fs)))}function Fi(t){for(;t=D(t);)if(R(t))return t}const Ls=".uk-disabled *, .uk-disabled, [disabled]";var Zo={mixins:[qt],args:"connect",props:{connect:String,toggle:String,itemNav:String,active:Number,followFocus:Boolean,swiping:Boolean},data:{connect:"~.uk-switcher",toggle:"> * > :first-child",itemNav:!1,active:0,cls:"uk-active",attrItem:"uk-switcher-item",selVertical:".uk-nav",followFocus:!1,swiping:!0},computed:{connects:{get:({connect:t},e)=>Ae(t,e),observe:({connect:t})=>t},connectChildren(){return this.connects.map(t=>M(t)).flat()},toggles:({toggle:t},e)=>N(t,e),children(t,e){return M(e).filter(i=>this.toggles.some(s=>i.contains(s)))}},watch:{connects(t){this.swiping&&h(t,"touchAction","pan-y pinch-zoom"),this.$emit()},connectChildren(){let t=Math.max(0,this.index());for(const e of this.connects)M(e).forEach((i,s)=>j(i,this.cls,s===t));this.$emit()},toggles(t){this.$emit();const e=this.index();this.show(~e?e:t[this.active]||t[0])}},connected(){g(this.$el,"role","tablist")},observe:[Si({targets:({connectChildren:t})=>t}),In({target:({connects:t})=>t,filter:({swiping:t})=>t})],events:[{name:"click keydown",delegate:({toggle:t})=>t,handler(t){!C(t.current,Ls)&&(t.type==="click"||t.keyCode===O.SPACE)&&(t.preventDefault(),this.show(t.current))}},{name:"keydown",delegate:({toggle:t})=>t,handler(t){const{current:e,keyCode:i}=t,s=C(this.$el,this.selVertical);let n=i===O.HOME?0:i===O.END?"last":i===O.LEFT&&!s||i===O.UP&&s?"previous":i===O.RIGHT&&!s||i===O.DOWN&&s?"next":-1;if(~n){t.preventDefault();const o=this.toggles.filter(a=>!C(a,Ls)),r=o[nt(n,o,o.indexOf(e))];r.focus(),this.followFocus&&this.show(r)}}},{name:"click",el:({$el:t,connects:e,itemNav:i})=>e.concat(i?Ae(i,t):[]),delegate:({attrItem:t})=>`[${t}],[data-${t}]`,handler(t){t.target.closest("a,button")&&(t.preventDefault(),this.show(J(t.current,this.attrItem)))}},{name:"swipeRight swipeLeft",filter:({swiping:t})=>t,el:({connects:t})=>t,handler({type:t}){this.show(Qt(t,"Left")?"next":"previous")}}],update(){var t;for(const e of this.connects)H(e,"ul")&&g(e,"role","presentation");g(M(this.$el),"role","presentation");for(const e in this.toggles){const i=this.toggles[e],s=(t=this.connects[0])==null?void 0:t.children[e];g(i,"role","tab"),s&&(i.id=Yt(this,i),s.id=Yt(this,s),g(i,"aria-controls",s.id),g(s,{role:"tabpanel","aria-labelledby":i.id}))}g(this.$el,"aria-orientation",C(this.$el,this.selVertical)?"vertical":null)},methods:{index(){return wt(this.children,t=>x(t,this.cls))},show(t){const e=this.toggles.filter(r=>!C(r,Ls)),i=this.index(),s=nt(!Ze(t)||v(e,t)?t:0,e,nt(this.toggles[i],e)),n=nt(e[s],this.toggles);this.children.forEach((r,a)=>{j(r,this.cls,n===a),g(this.toggles[a],{"aria-selected":n===a,tabindex:n===a?null:-1})});const o=i>=0&&i!==s;this.connects.forEach(async({children:r})=>{const a=Zt(r).filter((l,c)=>c!==n&&x(l,this.cls));await this.toggleElement(a,!1,o)&&await this.toggleElement(r[n],!0,o)})}}},gh={mixins:[it],extends:Zo,props:{media:Boolean},data:{media:960,attrItem:"uk-tab-item",selVertical:".uk-tab-left,.uk-tab-right"},connected(){const t=x(this.$el,"uk-tab-left")?"uk-tab-left":x(this.$el,"uk-tab-right")?"uk-tab-right":!1;t&&this.$create("toggle",this.$el,{cls:t,mode:"media",media:this.media})}};const mh=32;var vh={mixins:[Ci,qt],args:"target",props:{href:String,target:null,mode:"list",queued:Boolean},data:{href:!1,target:!1,mode:"click",queued:!0},computed:{target:{get:({target:t},e)=>(t=Ae(t||e.hash,e),t.length?t:[e]),observe:({target:t})=>t}},connected(){v(this.mode,"media")||(ai(this.$el)||g(this.$el,"tabindex","0"),!this.cls&&H(this.$el,"a")&&g(this.$el,"role","button"))},observe:Si({targets:({target:t})=>t}),events:[{name:ht,filter:({mode:t})=>v(t,"hover"),handler(t){this._preventClick=null,!(!dt(t)||ee(this._showState)||this.$el.disabled)&&(b(this.$el,"focus"),F(document,ht,()=>b(this.$el,"blur"),!0,e=>!this.$el.contains(e.target)),v(this.mode,"click")&&(this._preventClick=!0))}},{name:`mouseenter mouseleave ${Ht} ${oe} focus blur`,filter:({mode:t})=>v(t,"hover"),handler(t){if(dt(t)||this.$el.disabled)return;const e=v(["mouseenter",Ht,"focus"],t.type),i=this.isToggled(this.target);if(!e&&(!ee(this._showState)||t.type!=="blur"&&C(this.$el,":focus")||t.type==="blur"&&C(this.$el,":hover"))){i===this._showState&&(this._showState=null);return}e&&ee(this._showState)&&i!==this._showState||(this._showState=e?i:null,this.toggle(`toggle${e?"show":"hide"}`))}},{name:"keydown",filter:({$el:t,mode:e})=>v(e,"click")&&!H(t,"input"),handler(t){t.keyCode===mh&&(t.preventDefault(),this.$el.click())}},{name:"click",filter:({mode:t})=>["click","hover"].some(e=>v(t,e)),handler(t){let e;(this._preventClick||t.target.closest('a[href="#"], a[href=""]')||(e=t.target.closest("a[href]"))&&(!this.isToggled(this.target)||e.hash&&C(this.target,e.hash)))&&t.preventDefault(),!this._preventClick&&v(this.mode,"click")&&this.toggle()}},{name:"mediachange",filter:({mode:t})=>v(t,"media"),el:({target:t})=>t,handler(t,e){e.matches^this.isToggled(this.target)&&this.toggle()}}],methods:{async toggle(t){if(!b(this.target,t||"toggle",[this]))return;if(It(this.$el,"aria-expanded")&&g(this.$el,"aria-expanded",!this.isToggled(this.target)),!this.queued)return this.toggleElement(this.target);const e=this.target.filter(s=>x(s,this.clsLeave));if(e.length){for(const s of this.target){const n=v(e,s);this.toggleElement(s,n,n)}return}const i=this.target.filter(this.isToggled);await this.toggleElement(i,!1)&&await this.toggleElement(this.target.filter(s=>!v(i,s)),!0)}}},bh=Object.freeze({__proto__:null,Accordion:Do,Alert:Hl,Close:Bc,Cover:jl,Drop:No,DropParentIcon:Xt,Dropdown:No,Dropnav:Fo,FormCustom:Xl,Grid:Jl,HeightMatch:tc,HeightPlaceholder:sc,HeightViewport:nc,Icon:Os,Img:qc,Inverse:Xc,Leader:Qc,Margin:En,Marker:Nc,Modal:Zc,Nav:eh,NavParentIcon:Ac,Navbar:ih,NavbarParentIcon:Xt,NavbarToggleIcon:Mc,Offcanvas:nh,OverflowAuto:ah,OverlayIcon:Xt,PaginationNext:Fc,PaginationPrevious:Hc,Responsive:lh,Scroll:ch,Scrollspy:fh,ScrollspyNav:dh,SearchIcon:Oc,SlidenavNext:Yo,SlidenavPrevious:Yo,Spinner:Dc,Sticky:ph,Svg:Ec,Switcher:Zo,Tab:gh,Toggle:vh,Totop:zc,Video:Mo});return ie(bh,(t,e)=>lt.component(e,t)),Dl(lt),ie(Ol,(t,e)=>lt.component(e,t)),lt});THAI BODY WORKSTHE BEST THAI MASSAGE
TO REJUVENATE AND RE-ENERGIZE
SPECIAL OFFERS
5 PACKAGES/60 mins/$350
10 PACKAGES/60 mins/$680
5 PACKAGES/90 mins/$480
10 PACKAGES/90 mins/$950
SPECIAL OFFERS
5 PACKAGES/60 mins/$350
10 PACKAGES/60 mins/$680
5 PACKAGES/90 mins/$480
10 PACKAGES/90 mins/$950
SPECIAL OFFERS
5 PACKAGES/60 mins/$350
10 PACKAGES/60 mins/$680
5 PACKAGES/90 mins/$480
10 PACKAGES/90 mins/$950
SPECIAL OFFERS
5 PACKAGES/60 mins/$350
10 PACKAGES/60 mins/$680
5 PACKAGES/90 mins/$480
10 PACKAGES/90 mins/$950
SPECIAL OFFERS
5 PACKAGES/60 mins/$350
10 PACKAGES/60 mins/$680
5 PACKAGES/90 mins/$480
10 PACKAGES/90 mins/$950
SPECIAL OFFERS
5 PACKAGES/60 mins/$350
10 PACKAGES/60 mins/$680
5 PACKAGES/90 mins/$480
10 PACKAGES/90 mins/$950
INVIGORATING & RELAXING
THAI MASSAGE
With over 19 years of experience, THAI BODY WORKS offers you superb service with an attention to fine detail and your satisfaction at all of our ten convenient locations.
Your energizing massage will always be customized to your specific needs.
Our massage therapists work with you to ensure you get the treatment you want and need.
Re-energizing Massage
Help your muscles deeply relax and re-energize your body with a Thai massage from Thai Body Works.
Reasonably Priced Service
While our settings are luxurious, our services are priced at the same level as ordinary massage facilities.
10 Convenient Locations
You're sure to find a location and a time convenient for you at one of our ten sites.
THAI MASSAGEINTRODUCTION
Licensed by the state of California, family-owned Thai Body Works has been in business for 19 years, providing soothing massages in a friendly and comfortable setting.
Thai Massage is one of the ancient healing arts of traditional Thai medicine, the others being herbal medicine and spiritual meditation.
Effective and Invigorating Massages
The term 'massage' conjures up images of something quite different from Thai massage, which even at its most basic, is a very complex sequence of:
- Soft tissue pressing
- Stretching
- Twisting
- Joint manipulation
Enjoy the Subtle Massage Differences
Thai Body Works has been in a process of constant evolution for over 1,000 years. Therefore it is not surprising to find many subtle variations in the techniques used by different practitioners.
Even greater differences are apparent between the styles of body work characteristic of the north and south of Thailand. Call us today to set up an appointment.
'I've been getting massages for decades and Thai Body Works in Dana Point is among my best experiences. The blend of a firm massage, therapeutic oils, moist heat and deep stretching enables better mobility. You will move much better after your treatment!'
- Cheryl M, Irvine, CA
THAI MASSAGESERVICE PACKAGES
Personal Touch Massage Services Designed Just for You
With the stress of daily life, exercise injuries, and personal troubles, you may find your body tense and strained. Work with the massage therapists at Thai Body Works to find the best technique for pain relief.
The massage actions result in a complete full-body treatment that relieves your muscular tension, boosts your immune system, improves your circulation, balances your body energetically and increases your overall well-being. Thai massage is performed on a mat on the floor.
Thai Massage
60 Mins | $75 |
90 Mins | $105 |
120 Mins | $150 |
Swedish Massage
60 Mins | $75 |
90 Mins | $105 |
120 Mins | $150 |
Fusion Massage
60 Mins | $75 |
90 Mins | $105 |
120 Mins | $150 |
Foot Scrub and Reflexology
THAI BODY WORKSGALLERY
THAI BODY WORKSREVIEWS
This was such a beautiful experience. Nicely decorated, friendly staff and atmosphere. Would definitely recommend this place.
Really decent massage! Prices are reasonable and the fruit and tea provided at the end are a nice touch.
Been coming here for the past few months. I always ask for Pamela. Chronic back pains are always relieved and always leave like I can run a marathon!
Been coming here for years. Always incredible massages at reasonable prices. Lana is my favorite but all the girls do a great job. They serve you complementary tea and pineapple at the end, which is a bonus. Highly recommend Thai Body Works!
What an authentic massage. I had never had Thai massage but I get massages often. This place was decorated to the nines and so clean. They wrote down my reservation for the wrong day but accommodated us despite the mix up. The whole massage was relaxing and full of beautiful aromas and music.....
5+ star experience! From booking an appointment to experience the massage to relax at check out area, every moment was excellent and exceed your expectations. Kim is really talented. She knows what she is doing and does it extremely well. I don't know about other masseuse but definitely recommend her!