PageSourceSearch

https://www.vwthemes.com/cdn/shop/t/41/assets/chat-button.js?v=152380422456435578871789562913

js vwthemes.com collected 2026-10-02 03:21:22 UTC 4,146 bytes, 48 lines download raw bytes

1(()=>{const roots=new WeakSet,animationCSS=`
2  @keyframes waveHand {
3    0%, 55%, 100% {
4      transform: rotate(0deg);
5    }
6
7    60% {
8      transform: rotate(12deg);
9    }
10
11    65% {
12      transform: rotate(-10deg);
13    }
14
15    70% {
16      transform: rotate(12deg);
17    }
18
19    75% {
20      transform: rotate(-7deg);
21    }
22
23    80% {
24      transform: rotate(0deg);
25    }
26  }
27
28  .activator {
29    border: 4px solid transparent !important;
30    border-radius: 10px !important;
31    overflow: hidden !important;
32
33    background:
34      linear-gradient(var(--activator-bg), var(--activator-bg)) padding-box,
35      linear-gradient(
36        315deg,
37        rgba(40, 167, 69, 1) 40%,
38        rgba(0, 123, 255, 1) 80%
39      ) border-box !important;
40  }
41
42  .activator__icon,
43  .activator__icon svg {
44    transform-origin: 70% 85% !important;
45    animation: waveHand 3s ease-in-out infinite !important;
46  }
47`,addAnimation=root=>{if(!root||!root.querySelector||root.querySelector("#chat-animation-style"))return;const style=document.createElement("style");style.id="chat-animation-style",style.textContent=animationCSS,root===document||root.nodeType===9?(document.head||document.documentElement).appendChild(style):root.appendChild(style)},applyStyles=root=>{if(!root||!root.querySelector)return;addAnimation(root);const label=root.querySelector(".activator__label"),icon=root.querySelector(".activator__icon"),button=root.querySelector(".activator"),chatIcon=root.querySelector("shopify-chat-icon");if(label&&(label.style.setProperty("font-size","24px","important"),label.style.setProperty("font-weight","900","important")),icon){icon.style.setProperty("width","30px","important"),icon.style.setProperty("height","30px","important");const svg=icon.querySelector("svg");svg&&(svg.style.setProperty("width","30px","important"),svg.style.setProperty("height","30px","important"))}chatIcon&&(chatIcon.style.setProperty("width","30px","important"),chatIcon.style.setProperty("height","30px","important"))},watchRoot=root=>{if(!(!root||roots.has(root))&&(roots.add(root),applyStyles(root),new MutationObserver(()=>{if(applyStyles(root),root.querySelectorAll){const children=root.querySelectorAll("*");for(let i=0;i<children.length;i++)children[i].shadowRoot&&watchRoot(children[i].shadowRoot)}}).observe(root,{childList:!0,subtree:!0}),root.querySelectorAll)){const children=root.querySelectorAll("*");for(let i=0;i<children.length;i++)children[i].shadowRoot&&watchRoot(children[i].shadowRoot)}},setupChatHost=host=>{host&&(host.shadowRoot&&watchRoot(host.shadowRoot),watchRoot(host),applyStyles(host))},init=()=>{addAnimation(document),document.querySelectorAll("shopify-chat, #shopify-chat, .chatbot-container-sdk").forEach(setupChatHost),window.customElements&&customElements.whenDefined&&customElements.whenDefined("shopify-chat").then(()=>{const chat=document.querySelector("shopify-chat, #shopify-chat, .chatbot-container-sdk");chat&&setupChatHost(chat)}),document.addEventListener("click",e=>{const target=e.target;target&&(target.tagName==="SHOPIFY-CHAT"||target.closest&&target.closest("shopify-chat, #shopify-chat, .chatbot-container-sdk"))&&setTimeout(()=>{const chat=document.querySelector("shopify-chat, #shopify-chat, .chatbot-container-sdk");chat&&setupChatHost(chat)},100)},{passive:!0});const bodyObserver=new MutationObserver(mutations=>{for(let i=0;i<mutations.length;i++){const nodes=mutations[i].addedNodes;for(let j=0;j<nodes.length;j++){const node=nodes[j];if(node.nodeType===1){if(node.tagName==="SHOPIFY-CHAT"||node.id==="shopify-chat"||node.classList?.contains("chatbot-container-sdk"))setupChatHost(node),bodyObserver.disconnect();else if(node.querySelector){const chat=node.querySelector("shopify-chat, #shopify-chat, .chatbot-container-sdk");chat&&(setupChatHost(chat),bodyObserver.disconnect())}}}}});bodyObserver.observe(document.body||document.documentElement,{childList:!0,subtree:!1}),setTimeout(()=>bodyObserver.disconnect(),8e3)};document.readyState==="loading"?document.addEventListener("DOMContentLoaded",init,{once:!0}):init()})();
48//# sourceMappingURL=/cdn/shop/t/41/assets/chat-button.js.map?v=152380422456435578871789562913

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.