@bitpalm/ai-agents 0.5.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -56,6 +56,20 @@ To set it yourself:
56
56
  widget.setTheme("dark"); // "light", "dark" or "auto"
57
57
  ```
58
58
 
59
+ ## Your own chat button
60
+
61
+ In an app or PWA the chat can open from a button of your own, like a tab in the bottom navigation, and a proactive message can show as a dot on it:
62
+
63
+ ```js
64
+ const widget = createWidget({ slug: "your-agent-slug", launcher: false, triggers: "events" });
65
+
66
+ chatTab.onclick = () => widget.open(); // opens with the waiting message, if there is one
67
+ widget.on("trigger_shown", () => (dot.hidden = false));
68
+ widget.on("trigger_hidden", () => (dot.hidden = true));
69
+ ```
70
+
71
+ `triggers: false` switches proactive messages off, `widget.disableTriggers()` and `enableTriggers()` do it at runtime. The widget's elements carry `data-bitpalm-launcher`, `data-bitpalm-trigger` and `data-bitpalm-chat`. In React, `<BitPalmAgent onReady={(widget) => …} />` hands you the instance.
72
+
59
73
  ## Full documentation
60
74
 
61
75
  📚 **[agents.bitpalm.ai/docs](https://agents.bitpalm.ai/docs)**
@@ -68,6 +82,7 @@ widget.setTheme("dark"); // "light", "dark" or "auto"
68
82
  - [Identify logged-in users](https://agents.bitpalm.ai/docs/identify)
69
83
  - [Custom Context (cart, listings, account data)](https://agents.bitpalm.ai/docs/context)
70
84
  - [Events (lead capture, conversation start)](https://agents.bitpalm.ai/docs/events)
85
+ - [Own chat button (apps, PWAs)](https://agents.bitpalm.ai/docs/own-chat-button)
71
86
  - [API Reference](https://agents.bitpalm.ai/docs/api-reference)
72
87
  - [Common Errors](https://agents.bitpalm.ai/docs/common-errors)
73
88
 
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var ve=Object.defineProperty;var mt=Object.getOwnPropertyDescriptor;var ut=Object.getOwnPropertyNames;var ft=Object.prototype.hasOwnProperty;var pt=(t,n)=>{for(var r in n)ve(t,r,{get:n[r],enumerable:!0})},gt=(t,n,r,a)=>{if(n&&typeof n=="object"||typeof n=="function")for(let m of ut(n))!ft.call(t,m)&&m!==r&&ve(t,m,{get:()=>n[m],enumerable:!(a=mt(n,m))||a.enumerable});return t};var ht=t=>gt(ve({},"__esModule",{value:!0}),t);var Pt={};pt(Pt,{createWidget:()=>oe,detectHostTheme:()=>H});module.exports=ht(Pt);var yt=["dark","dark-mode","dark-theme","theme-dark"],bt=["light","light-mode","light-theme","theme-light"],et=["data-theme","data-color-scheme","data-color-mode","data-mode","data-bs-theme"],tt="(prefers-color-scheme: dark)";function R(t){return t==="light"||t==="dark"?t:"auto"}function Ze(t){if(!t)return null;if(yt.some(n=>t.classList.contains(n)))return"dark";if(bt.some(n=>t.classList.contains(n)))return"light";for(let n of et){let r=(t.getAttribute(n)||"").toLowerCase();if(r.includes("dark"))return"dark";if(r.includes("light"))return"light"}return null}function we(t){let n=t/255;return n<=.03928?n/12.92:((n+.055)/1.055)**2.4}function Qe(t,n){if(!t)return null;let r=n.getComputedStyle(t).backgroundColor.match(/rgba?\(([^)]+)\)/);if(!r)return null;let[a,m,y,p=1]=r[1].split(/[\s,/]+/).filter(Boolean).map(Number);return[a,m,y,p].some(g=>Number.isNaN(g))||p<.5?null:.2126*we(a)+.7152*we(m)+.0722*we(y)<.2?"dark":"light"}function vt(t,n){let r=n.getComputedStyle(t.documentElement).colorScheme||"",a=t.querySelector('meta[name="color-scheme"]')?.getAttribute("content")||"",m=`${r} ${a}`.toLowerCase();return m.includes("dark")?m.includes("light")?n.matchMedia?.(tt).matches?"dark":"light":"dark":null}function H(t=document,n=window){return Ze(t.documentElement)??Ze(t.body)??Qe(t.body,n)??Qe(t.documentElement,n)??vt(t,n)??"light"}function Ee(t,n=document,r=window){let a=H(n,r),m=!1,y=()=>{m=!1;let c=H(n,r);c!==a&&(a=c,t(c))},p=()=>{m||(m=!0,typeof r.requestAnimationFrame=="function"?r.requestAnimationFrame(y):setTimeout(y,16))},l=typeof MutationObserver<"u"?new MutationObserver(p):null,g={attributes:!0,attributeFilter:["class","style",...et]};l?.observe(n.documentElement,g),n.body&&l?.observe(n.body,g);let b=typeof r.matchMedia=="function"?r.matchMedia(tt):null;return b?.addEventListener?.("change",p),()=>{l?.disconnect(),b?.removeEventListener?.("change",p)}}var wt="https://agents.bitpalm.ai",v="_bp_",Et=new Set(["password","file","checkbox","radio","submit","button","reset","image"]),xt=8e3,nt=4096,ot=`${v}identify_signature`,it=`${v}identify_fingerprint`,st=`${v}identify_sent_at`,at="0 4px 14px rgba(0,0,0,0.18)";function Tt(t){return[t.external_user_id||"",t.email||"",t.phone||"",t.name||"",t.company||"",t.signature||"",t.signed_at!=null?String(t.signed_at):"",t.signature_version||"",t.identify_source||""].join("|").toLowerCase()}function d(t,n=180){return t?t.replace(/\s+/g," ").trim().slice(0,n):""}function St(t){return t?` ${t.toLowerCase().replace(/[_-]+/g," ").replace(/[^a-z0-9\s@.]/g," ").replace(/\s+/g," ").trim()} `:""}function D(t,n){for(let r of n)if(t.includes(r))return!0;return!1}function A(t){return/^[^\s@]+@[^\s@]+\.[^\s@]{2,}$/i.test(t)}function _(t){let n=d(t,50);if(!n)return"";let r=n.startsWith("+"),a=n.replace(/\D/g,"");return a.length<6?"":`${r?"+":""}${a.slice(0,20)}`}function rt(t){let n=d(t,140).toLowerCase();return!n||!A(n)?"":n}function F(t,n){for(let r of n){let a=t.querySelector(r),m=d(a?.value);if(m)return m}return""}function Lt(t){return d(t.getAttribute("data-bp-field")||t.getAttribute("data-bitpalm-field"),64).toLowerCase().replace(/[_\s]+/g,"-")}function It(t){return t.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}function _t(t,n){let r=[],a=(g,b=140)=>{let c=d(g,b);c&&r.push(c)};a(n.name),a(n.id),a(n.getAttribute("autocomplete")),a(n.getAttribute("placeholder")),a(n.getAttribute("aria-label")),a(n.getAttribute("data-field")),a(n.getAttribute("data-name")),a(n.getAttribute("data-label")),a(n.getAttribute("data-bp-field")),a(n.getAttribute("data-bitpalm-field"));let m=new Set,y=g=>{let b=d(g,200);!b||m.has(b)||(m.add(b),r.push(b))};for(let g of Array.from(n.labels||[]))y(g.textContent);if(n.id){let g=t.querySelector(`label[for="${It(n.id)}"]`);y(g?.textContent)}let p=n.closest("label");y(p?.textContent);let l=n.getAttribute("aria-labelledby");if(l)for(let g of l.split(/\s+/)){if(!g)continue;let b=t.ownerDocument.getElementById(g);y(b?.textContent)}return r}function At(t){let n=d(F(t,["[data-bp-email]","[data-bitpalm-email]"]),140).toLowerCase(),r=_(F(t,["[data-bp-phone]","[data-bitpalm-phone]"])),a=d(F(t,["[data-bp-name]","[data-bitpalm-name]","[data-bp-full-name]","[data-bitpalm-full-name]"])),m=d(F(t,["[data-bp-first-name]","[data-bitpalm-first-name]"])),y=d(F(t,["[data-bp-last-name]","[data-bitpalm-last-name]"])),p=d(F(t,["[data-bp-company]","[data-bitpalm-company]"]));for(let c of Array.from(t.elements)){if(!(c instanceof HTMLInputElement||c instanceof HTMLTextAreaElement||c instanceof HTMLSelectElement)||c.disabled||c instanceof HTMLInputElement&&Et.has(c.type.toLowerCase()))continue;let i=Lt(c),ie=c.hasAttribute("data-bp-email")||c.hasAttribute("data-bitpalm-email")||c.hasAttribute("data-bp-phone")||c.hasAttribute("data-bitpalm-phone")||c.hasAttribute("data-bp-name")||c.hasAttribute("data-bitpalm-name")||c.hasAttribute("data-bp-full-name")||c.hasAttribute("data-bitpalm-full-name")||c.hasAttribute("data-bp-first-name")||c.hasAttribute("data-bitpalm-first-name")||c.hasAttribute("data-bp-last-name")||c.hasAttribute("data-bitpalm-last-name")||c.hasAttribute("data-bp-company")||c.hasAttribute("data-bitpalm-company")||!!i;if(c instanceof HTMLInputElement&&c.type.toLowerCase()==="hidden"&&!ie)continue;let f=d(c.value);if(!f)continue;let J=c instanceof HTMLInputElement?c.type.toLowerCase():"",u=St(_t(t,c).join(" "));if(!n&&i==="email"&&A(f)){n=f.toLowerCase();continue}if(!r&&(i==="phone"||i==="tel"||i==="mobile"||i==="whatsapp")){let S=_(f);if(S){r=S;continue}}if(!p&&i==="company"){p=d(f,160);continue}if(!m&&(i==="first-name"||i==="firstname")){m=d(f,100);continue}if(!y&&(i==="last-name"||i==="lastname"||i==="surname")){y=d(f,100);continue}if(!a&&(i==="name"||i==="full-name"||i==="fullname")){!A(f)&&!_(f)&&(a=d(f,140));continue}let T=J==="email"||D(u,[" email "," e mail "," mail "," email adresse "," mailadresse "," correo "]),$=J==="tel"||D(u,[" phone "," phone number "," mobile "," tel "," telefon "," telefonnummer "," whatsapp "," handy "," kontakt "," nummer "]),U=D(u,[" company "," company name "," firma "," firmenname "," organization "," organisation "," business "," unternehmen "," agency "," brokerage "]),G=D(u,[" first name "," firstname "," given name "," givenname "," vorname "," fname "]),j=D(u,[" last name "," lastname "," family name "," familyname "," surname "," nachname "," lname "]),O=D(u,[" full name "," fullname "," contact name "," name "])&&!T&&!$;if(!n&&T&&A(f)){n=f.toLowerCase();continue}if(!r&&$){let S=_(f);if(S){r=S;continue}}if(!p&&U){p=d(f,160);continue}if(!m&&G){m=d(f,100);continue}if(!y&&j){y=d(f,100);continue}if(!a&&O&&!A(f)&&!_(f)){a=d(f,140);continue}!n&&A(f)&&(n=f.toLowerCase())}if(a&&(A(a)||_(a))&&(a=""),p&&(A(p)||_(p))&&(p=""),a||(a=d([m,y].filter(Boolean).join(" "),140)),a&&n&&a.toLowerCase()===n.toLowerCase()&&(a=""),!!!(n||r)&&!!!(a&&p))return null;let b={...a?{name:a}:{},...n?{email:n}:{},...r?{phone:r}:{},...p?{company:p}:{}};return Object.keys(b).length>0?b:null}function Ct(){if(typeof document<"u"){let t=document.documentElement.lang;if(t)return t.slice(0,2).toLowerCase()}return"en"}function xe(t,n=1200){if(typeof window<"u"&&"requestIdleCallback"in window){window.requestIdleCallback(t,{timeout:n});return}setTimeout(t,Math.min(n,300))}function Te(){if(typeof window>"u")return!1;let t=typeof navigator<"u"?navigator.userAgent:"";if(/Android|iPhone|iPad|iPod|IEMobile|Windows Phone|Mobile/i.test(t))return!0;let r=window.matchMedia("(pointer: coarse)").matches,a=window.matchMedia("(hover: none)").matches,m=Math.min(window.screen?.width||window.innerWidth,window.screen?.height||window.innerHeight);return r&&a&&m<=900}function oe(t){let{slug:n,locale:r=Ct(),baseUrl:a=wt,token:m,zIndex:y=9999,autoIdentify:p=!0}=t,l=document,g=R(t.theme),b=g==="auto"?H():g,c=null,i=l.createElement("iframe"),ie=`${a}/t/${n}/widget`,f=new URLSearchParams({locale:r,theme:b});m&&f.set("token",m),i.src=`${ie}?${f.toString()}`,i.allow="clipboard-write; microphone",i.setAttribute("allowtransparency","true"),i.loading="lazy",i.style.cssText=`position:fixed;bottom:0;right:0;width:1px;height:1px;border:none;z-index:${y};background:transparent;color-scheme:normal;opacity:0;pointer-events:none;`;let J=new URL(i.src).origin,u=l.createElement("div");if(u.setAttribute("role","button"),u.setAttribute("aria-label","Chat"),u.style.cssText=`position:fixed;bottom:24px;right:24px;width:56px;height:56px;border-radius:50%;display:none;align-items:center;justify-content:center;cursor:pointer;z-index:${y-1};background:#171717;box-shadow:${at};transition:transform .2s,opacity .3s;opacity:0;`,u.innerHTML='<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M7.9 20A9 9 0 1 0 4 16.1L2 22Z"/></svg>',u.onmouseenter=()=>{u.style.transform="scale(1.05)"},u.onmouseleave=()=>{u.style.transform="scale(1)"},u.onclick=()=>q(),l.body.appendChild(u),!l.getElementById("_bp_fade")){let e=l.createElement("style");e.id="_bp_fade",e.textContent="@keyframes _bp_fade{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}",l.head.appendChild(e)}let T=null,$=!1,U=!1,G=!1,j=!1,O=!1,S=()=>{G||(G=!0,l.body.appendChild(i))},K=!1,se=0,V={overflow:"",overscrollBehavior:""},E={overflow:"",overscrollBehavior:"",position:"",top:"",left:"",right:"",width:""},Se=()=>{if(K||!Te())return;let s=l.documentElement,o=l.body;se=window.scrollY||window.pageYOffset||0,V.overflow=s.style.overflow,V.overscrollBehavior=s.style.overscrollBehavior,E.overflow=o.style.overflow,E.overscrollBehavior=o.style.overscrollBehavior,E.position=o.style.position,E.top=o.style.top,E.left=o.style.left,E.right=o.style.right,E.width=o.style.width,s.style.overflow="hidden",s.style.overscrollBehavior="none",o.style.overflow="hidden",o.style.overscrollBehavior="none",o.style.position="fixed",o.style.top=`-${se}px`,o.style.left="0",o.style.right="0",o.style.width="100%",K=!0},N=()=>{if(!K)return;let e=l.documentElement,s=l.body;e.style.overflow=V.overflow,e.style.overscrollBehavior=V.overscrollBehavior,s.style.overflow=E.overflow,s.style.overscrollBehavior=E.overscrollBehavior,s.style.position=E.position,s.style.top=E.top,s.style.left=E.left,s.style.right=E.right,s.style.width=E.width,window.scrollTo(0,se),K=!1},Le=()=>{let e=Te();i.style.display==="none"&&(i.style.display=""),e?(i.style.width="100vw",i.style.height="100dvh",i.style.left="0",i.style.top="0",i.style.bottom="0",i.style.right="0",Se()):(i.style.width="420px",i.style.height="620px",i.style.bottom="24px",i.style.right="24px",i.style.left="",i.style.top="",N()),i.style.opacity="1",i.style.pointerEvents="auto"},C=()=>{T&&(T.remove(),T=null)},X=()=>{},ae=()=>{},W=!1,k=new Map;function re(e,s){let o=k.get(e);if(o)for(let h of o)try{h(s)}catch{}}let Ie=e=>{if(e.origin===J){if(e.data?.type==="bitpalm-widget-config"){U=!1,$=!0,i.style.display==="none"&&(i.style.display=""),e.data.primaryColor&&(u.style.background=e.data.primaryColor,u.style.boxShadow=e.data.chatShadow==="none"?"none":at);let s=e.data.chatButtonIconColor||"black";if(e.data.chatButtonIconSvg){u.innerHTML="";let o=l.createElement("span");o.style.cssText=`display:flex;align-items:center;justify-content:center;width:24px;height:24px;color:${s}`;let w=new DOMParser().parseFromString(e.data.chatButtonIconSvg,"image/svg+xml").querySelector("svg");w?(w.querySelectorAll("script,foreignObject").forEach(B=>B.remove()),w.querySelectorAll("*").forEach(B=>{for(let M of[...B.attributes])(M.name.startsWith("on")||M.value&&M.value.includes("javascript:"))&&B.removeAttribute(M.name)}),w.setAttribute("width","24"),w.setAttribute("height","24"),w.style.display="block",o.appendChild(w)):o.innerHTML='<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M7.9 20A9 9 0 1 0 4 16.1L2 22Z"/></svg>',u.appendChild(o)}else{let o=u.querySelector("svg");o&&(o.style.stroke=s)}u.style.display="flex",requestAnimationFrame(()=>{u.style.opacity="1"})}if(e.data?.type==="bitpalm-widget-resize"){let s=e.data.width>0,o=W;W=s,s&&!o&&re("widget_opened"),!s&&o&&re("widget_closed");let h=Te();s?(i.style.width=h?"100vw":`${e.data.width}px`,i.style.height=h?"100dvh":`${e.data.height}px`,h?(i.style.left="0",i.style.top="0",i.style.bottom="0",i.style.right="0",Se()):N(),i.style.opacity="1",i.style.pointerEvents="auto"):(N(),i.style.width="1px",i.style.height="1px",i.style.left="",i.style.top="",i.style.opacity="0",i.style.pointerEvents="none"),u.style.display=s?"none":"flex"}if(e.data?.type==="bitpalm-trigger-show"){if(U||!$)return;C(),T=l.createElement("div"),T.style.cssText=`position:fixed;bottom:90px;right:24px;max-width:240px;background:#fff;border-radius:16px;padding:12px 32px 12px 12px;box-shadow:0 2px 20px rgba(0,0,0,0.08);cursor:pointer;z-index:${y-1};font-family:system-ui,sans-serif;animation:_bp_fade .3s;`;let s=(e.data.message||"").replace(/</g,"&lt;");T.innerHTML=`<p style="font-size:14px;color:#1f2937;margin:0;">${s}</p><div style="position:absolute;bottom:-8px;right:20px;width:0;height:0;border-left:8px solid transparent;border-right:8px solid transparent;border-top:8px solid #fff;"></div>`;let o=l.createElement("button");o.style.cssText="position:absolute;top:-8px;right:-8px;width:28px;height:28px;border-radius:50%;background:#fff;border:none;box-shadow:0 1px 4px rgba(0,0,0,0.1);cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:14px;color:#9ca3af;",o.innerHTML="&#10005;",o.onclick=h=>{h.stopPropagation(),C(),i.contentWindow?.postMessage({type:"bitpalm-trigger-dismiss"},"*")},T.onclick=()=>{if(C(),u.style.display="none",Le(),S(),!j){O=!0;return}i.contentWindow?.postMessage({type:"bitpalm-trigger-engaged",message:s},"*")},T.appendChild(o),l.body.appendChild(T)}e.data?.type==="bitpalm-trigger-hide"&&C(),e.data?.type==="bitpalm-request-context"&&X(),e.data?.type==="bitpalm-chat-event"&&e.data.event&&re(e.data.event,e.data.data),e.data?.type==="bitpalm-widget-blocked"&&(U=!0,$=!1,u.style.display="none",C(),N(),i.style.display="none")}};window.addEventListener("message",Ie);let L=!1;try{L=localStorage.getItem(`${v}optout`)==="1"}catch{}let Z=`${v}vid`,x="";if(!L){try{x=localStorage.getItem(Z)||""}catch{}if(!x){let e=l.cookie.match(new RegExp(`(?:^|; )${Z}=([^;]+)`));x=e?decodeURIComponent(e[1]):""}x||(x=crypto.randomUUID?crypto.randomUUID():`${Date.now()}-${Math.random().toString(36).slice(2,11)}`);try{localStorage.setItem(Z,x)}catch{}try{l.cookie=`${Z}=${encodeURIComponent(x)};path=/;max-age=31536000;SameSite=Lax`}catch{}}L||xe(()=>{try{let e=new URLSearchParams(location.search),s={};for(let I of["utm_source","utm_medium","utm_campaign","utm_term","utm_content"]){let w=e.get(I);w&&(s[I]=w)}let o=JSON.stringify({tenant_slug:n,visitor_id:x,url:location.href,referrer:l.referrer||void 0,...Object.keys(s).length>0?{utm:s}:{}}),h=`${a}/api/widget/impression`;typeof navigator.sendBeacon=="function"?navigator.sendBeacon(h,new Blob([o],{type:"application/json"})):fetch(h,{method:"POST",body:o,headers:{"Content-Type":"application/json"},keepalive:!0}).catch(()=>{})}catch{}},2e3);let le="",ce="",de=0;try{le=sessionStorage.getItem(ot)||"",ce=sessionStorage.getItem(it)||"";let e=parseInt(sessionStorage.getItem(st)||"0",10);Number.isFinite(e)&&e>0&&(de=e)}catch{}let _e=(e,s="")=>{if(L||!x)return;let o={},h=d(e.name,140),I=rt(e.email),w=_(e.phone),B=d(e.company,160),M=d(e.external_user_id,140),Ke=d(e.signature,260),he=Number(e.signed_at);if(h&&(o.name=h),I&&(o.email=I),w&&(o.phone=w),B&&(o.company=B),M&&(o.external_user_id=M),Ke&&(o.signature=Ke),Number.isFinite(he)&&he>0&&(o.signed_at=Math.floor(he)),(e.signature_version==="v1"||o.signature)&&(o.signature_version="v1"),(e.identify_source==="manual"||e.identify_source==="form")&&(o.identify_source=e.identify_source),!o.name&&!o.email&&!o.phone&&!o.company&&!o.external_user_id)return;let ne=Tt(o),ye=[s.toLowerCase(),ne].filter(Boolean).join("|"),be=Date.now();if(!(be-de<xt&&(ye===le||ne===ce))){le=ye,ce=ne,de=be;try{sessionStorage.setItem(ot,ye),sessionStorage.setItem(it,ne),sessionStorage.setItem(st,String(be))}catch{}try{let Ve=JSON.stringify({tenant_slug:n,visitor_id:x,url:location.href,referrer:l.referrer||void 0,...o}),Xe=`${a}/api/widget/identify`;typeof navigator.sendBeacon=="function"?navigator.sendBeacon(Xe,new Blob([Ve],{type:"application/json"})):fetch(Xe,{method:"POST",body:Ve,headers:{"Content-Type":"application/json"},keepalive:!0}).catch(()=>{})}catch{}}},Ae=e=>{if(L||!p||!x)return;let s=e.target instanceof HTMLFormElement?e.target:e.target instanceof Element?e.target.closest("form"):null;if(!(s instanceof HTMLFormElement))return;let o=(s.getAttribute("data-bp-identify")||s.getAttribute("data-bitpalm-identify")||"").toLowerCase();if(o==="off"||o==="false"||o==="0")return;let h=At(s);if(!h)return;let I=[s.getAttribute("id")||"",s.getAttribute("name")||"",s.getAttribute("action")||""].join("|");_e({...h,identify_source:"form"},I)};!L&&p&&l.addEventListener("submit",Ae,!0);let z=parseInt(sessionStorage.getItem(`${v}pages`)||"0")+1;sessionStorage.setItem(`${v}pages`,String(z));let P=JSON.parse(sessionStorage.getItem(`${v}hist`)||"[]");P.push(location.href),P.length>20&&(P=P.slice(-20)),sessionStorage.setItem(`${v}hist`,JSON.stringify(P));let Ce=Date.now(),Q=parseInt(sessionStorage.getItem(`${v}site_start`)||"0");Q||(Q=Ce,sessionStorage.setItem(`${v}site_start`,String(Q)));let ke=[];X=()=>{let e=!1;try{e=!!localStorage.getItem(`${v}visited`)}catch{e=!1}if(i.contentWindow?.postMessage({type:"bitpalm-parent-context",url:location.href,title:l.title,returning:e,pageCount:z,pageHistory:P,loadedAt:Ce,siteStart:Q,locale:r,visitorId:L?"":x},"*"),De(),!e&&!L)try{localStorage.setItem(`${v}visited`,"1")}catch{}},i.addEventListener("load",()=>{j=!0,X(),[120,450,1100].forEach(e=>{let s=setTimeout(()=>X(),e);ke.push(s)}),O&&(O=!1,ae())}),l.readyState==="loading"?l.addEventListener("DOMContentLoaded",()=>xe(S,1600),{once:!0}):xe(S,1600);let Pe=history.pushState.bind(history),Be=history.replaceState.bind(history),ee=()=>{z++,sessionStorage.setItem(`${v}pages`,String(z));let e=JSON.parse(sessionStorage.getItem(`${v}hist`)||"[]");if(e.push(location.href),e.length>20&&e.splice(0,e.length-20),P=e,sessionStorage.setItem(`${v}hist`,JSON.stringify(e)),i.contentWindow?.postMessage({type:"bitpalm-page-change",url:location.href,title:l.title,pageCount:z,pageHistory:e,loadedAt:Date.now()},"*"),!L)try{let s=JSON.stringify({tenant_slug:n,visitor_id:x,url:location.href}),o=`${a}/api/widget/impression`;typeof navigator.sendBeacon=="function"?navigator.sendBeacon(o,new Blob([s],{type:"application/json"})):fetch(o,{method:"POST",body:s,headers:{"Content-Type":"application/json"},keepalive:!0}).catch(()=>{})}catch{}};history.pushState=function(...e){Pe(...e),ee()},history.replaceState=function(...e){Be(...e),ee()},window.addEventListener("popstate",ee);let Me=-1,me,He=()=>{clearTimeout(me),me=setTimeout(()=>{let e=Math.max(l.documentElement.scrollHeight,l.body.scrollHeight)-window.innerHeight,s=e>0?Math.round(window.scrollY/e*100):100;s!==Me&&(Me=s,i.contentWindow?.postMessage({type:"bitpalm-scroll-depth",percent:s},"*"))},500)};window.addEventListener("scroll",He,{passive:!0});let $e=e=>{e.clientY<=0&&i.contentWindow?.postMessage({type:"bitpalm-exit-intent"},"*")};l.addEventListener("mouseout",$e);let ue,Oe=!1,fe=()=>{clearTimeout(ue),!Oe&&(ue=setTimeout(()=>{Oe=!0,i.contentWindow?.postMessage({type:"bitpalm-inactivity"},"*")},15e3))},Ne=["mousemove","keydown","scroll","touchstart"];Ne.forEach(e=>l.addEventListener(e,fe,{passive:!0})),fe(),ae=()=>{i.contentWindow?.postMessage({type:"bitpalm-open"},"*");let e=i.src.split("#")[0];i.src=`${e}#bp-open-${Date.now()}`};let q=()=>{if(u.style.display="none",C(),Le(),S(),!j){O=!0;return}ae()},pe=()=>{N(),i.contentWindow?.postMessage({type:"bitpalm-close"},"*")},We=e=>{!e||typeof e!="object"||_e({external_user_id:d(e.externalUserId,140)||void 0,name:d(e.name,140)||void 0,email:rt(e.email)||void 0,phone:_(e.phone)||void 0,company:d(e.company,160)||void 0,signature:d(e.signature,260)||void 0,signed_at:Number.isFinite(Number(e.signedAt))?Math.floor(Number(e.signedAt)):void 0,signature_version:e.signatureVersion==="v1"?"v1":void 0,identify_source:"manual"},"manual")},lt=()=>{W?pe():q()},ct=()=>W,Re=e=>{if(!e||typeof e!="string")return;let s=e.trim().slice(0,1e4);s&&(W||q(),setTimeout(()=>{i.contentWindow?.postMessage({type:"bitpalm-send-message",message:s},"*")},W?50:500))};function De(){i.contentWindow?.postMessage({type:"bitpalm-theme",theme:b},"*")}let te=e=>{e!==b&&(b=e,De())},Fe=e=>{g=R(e),c?.(),c=null,g==="auto"?(c=Ee(te),te(H())):te(g)};g==="auto"&&(c=Ee(te));let Ue=e=>{let s=e.detail;if(!s||typeof s!="object")return;let o=d(s.slug,120);o&&o!==n||Fe(R(s.theme))};window.addEventListener("bitpalm-theme",Ue);let Y={},je=e=>{if(!e||typeof e!="object"||Array.isArray(e))return;Y={...Y,...e};let s=JSON.stringify(Y);s.length>nt&&console.warn(`[BitPalm] Custom context exceeds ${nt} bytes (${s.length}). It may be truncated.`),i.contentWindow?.postMessage({type:"bitpalm-custom-context",data:Y},"*")},dt=()=>{Y={},i.contentWindow?.postMessage({type:"bitpalm-custom-context",data:{}},"*")},ze=e=>{let o=e.detail;if(!o||typeof o!="object")return;let h=d(o.slug,120);if(h&&h!==n)return;let{slug:I,...w}=o;je(w)};window.addEventListener("bitpalm-context",ze);let qe=e=>{let o=e.detail;if(!o||typeof o!="object")return;let h=d(o.slug,120);h&&h!==n||We(o)};window.addEventListener("bitpalm-identify",qe);let ge=e=>{let s=e.detail,o=d(s?.slug,120);return!o||o===n},Ye=e=>{ge(e)&&q()},Je=e=>{ge(e)&&pe()},Ge=e=>{if(!ge(e))return;let s=e.detail?.message;typeof s=="string"&&Re(s)};return window.addEventListener("bitpalm-open",Ye),window.addEventListener("bitpalm-close",Je),window.addEventListener("bitpalm-send",Ge),{open:q,close:pe,toggle:lt,isOpen:ct,identify:We,context:je,resetContext:dt,send:Re,on:(e,s)=>(k.has(e)||k.set(e,new Set),k.get(e).add(s),()=>k.get(e)?.delete(s)),off:(e,s)=>{k.get(e)?.delete(s)},setTheme:Fe,destroy:()=>{window.removeEventListener("message",Ie),window.removeEventListener("scroll",He),window.removeEventListener("popstate",ee),l.removeEventListener("mouseout",$e),l.removeEventListener("submit",Ae,!0),Ne.forEach(e=>l.removeEventListener(e,fe)),clearTimeout(me),clearTimeout(ue),ke.forEach(e=>clearTimeout(e)),history.pushState=Pe,history.replaceState=Be,window.removeEventListener("bitpalm-identify",qe),window.removeEventListener("bitpalm-context",ze),window.removeEventListener("bitpalm-theme",Ue),window.removeEventListener("bitpalm-open",Ye),window.removeEventListener("bitpalm-close",Je),window.removeEventListener("bitpalm-send",Ge),c?.(),k.clear(),N(),C(),u.remove(),i.remove()}}}function kt(t){if(t==null)return;let n=t.trim().toLowerCase();if(["1","true","yes","on"].includes(n))return!0;if(["0","false","no","off"].includes(n))return!1}if(typeof document<"u"){let t=document.currentScript;if(t?.dataset.slug){let n=()=>{oe({slug:t.dataset.slug,locale:t.dataset.locale,baseUrl:t.dataset.baseUrl,token:t.dataset.token,zIndex:t.dataset.zIndex?Number(t.dataset.zIndex):void 0,autoIdentify:kt(t.dataset.autoIdentify),theme:R(t.dataset.theme)})};document.readyState==="loading"?document.addEventListener("DOMContentLoaded",n):n()}}0&&(module.exports={createWidget,detectHostTheme});
1
+ "use strict";var Se=Object.defineProperty;var St=Object.getOwnPropertyDescriptor;var Lt=Object.getOwnPropertyNames;var It=Object.prototype.hasOwnProperty;var _t=(t,n)=>{for(var a in n)Se(t,a,{get:n[a],enumerable:!0})},At=(t,n,a,r)=>{if(n&&typeof n=="object"||typeof n=="function")for(let d of Lt(n))!It.call(t,d)&&d!==a&&Se(t,d,{get:()=>n[d],enumerable:!(r=St(n,d))||r.enumerable});return t};var Ct=t=>At(Se({},"__esModule",{value:!0}),t);var zt={};_t(zt,{createWidget:()=>le,detectHostTheme:()=>O});module.exports=Ct(zt);function ae(t){if(t===!1)return"off";if(typeof t=="string"){let n=t.trim().toLowerCase();if(["false","off","0","no","none"].includes(n))return"off";if(n==="events")return"events"}return"bubble"}function rt(t){return t==="off"?!1:t==="events"?"events":!0}function at(t,n){let a=t.createElement("div");a.setAttribute("data-bitpalm-trigger",""),a.style.cssText=`max-width:240px;background:#fff;border-radius:16px;padding:12px 32px 12px 12px;box-shadow:0 2px 20px rgba(0,0,0,0.08);cursor:pointer;z-index:${n.zIndex-1};font-family:system-ui,sans-serif;animation:_bp_fade .3s;`,a.style.position="fixed",a.style.right="24px",a.style.bottom=`${n.bottom}px`;let r=t.createElement("p");r.style.cssText="font-size:14px;color:#1f2937;margin:0;",r.textContent=n.message;let d=t.createElement("div");d.style.cssText="position:absolute;bottom:-8px;right:20px;width:0;height:0;border-left:8px solid transparent;border-right:8px solid transparent;border-top:8px solid #fff;";let u=t.createElement("button");return u.type="button",u.setAttribute("aria-label","Close"),u.style.cssText="position:absolute;top:-8px;right:-8px;width:28px;height:28px;border-radius:50%;background:#fff;border:none;box-shadow:0 1px 4px rgba(0,0,0,0.1);cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:14px;color:#9ca3af;",u.textContent="\u2715",u.onclick=g=>{g.stopPropagation(),n.onDismiss()},a.onclick=()=>n.onEngage(),a.append(r,d,u),a}var Mt=["dark","dark-mode","dark-theme","theme-dark"],kt=["light","light-mode","light-theme","theme-light"],dt=["data-theme","data-color-scheme","data-color-mode","data-mode","data-bs-theme"],mt="(prefers-color-scheme: dark)";function R(t){return t==="light"||t==="dark"?t:"auto"}function lt(t){if(!t)return null;if(Mt.some(n=>t.classList.contains(n)))return"dark";if(kt.some(n=>t.classList.contains(n)))return"light";for(let n of dt){let a=(t.getAttribute(n)||"").toLowerCase();if(a.includes("dark"))return"dark";if(a.includes("light"))return"light"}return null}function Le(t){let n=t/255;return n<=.03928?n/12.92:((n+.055)/1.055)**2.4}function ct(t,n){if(!t)return null;let a=n.getComputedStyle(t).backgroundColor.match(/rgba?\(([^)]+)\)/);if(!a)return null;let[r,d,u,g=1]=a[1].split(/[\s,/]+/).filter(Boolean).map(Number);return[r,d,u,g].some(l=>Number.isNaN(l))||g<.5?null:.2126*Le(r)+.7152*Le(d)+.0722*Le(u)<.2?"dark":"light"}function Bt(t,n){let a=n.getComputedStyle(t.documentElement).colorScheme||"",r=t.querySelector('meta[name="color-scheme"]')?.getAttribute("content")||"",d=`${a} ${r}`.toLowerCase();return d.includes("dark")?d.includes("light")?n.matchMedia?.(mt).matches?"dark":"light":"dark":null}function O(t=document,n=window){return lt(t.documentElement)??lt(t.body)??ct(t.body,n)??ct(t.documentElement,n)??Bt(t,n)??"light"}function Ie(t,n=document,a=window){let r=O(n,a),d=!1,u=()=>{d=!1;let c=O(n,a);c!==r&&(r=c,t(c))},g=()=>{d||(d=!0,typeof a.requestAnimationFrame=="function"?a.requestAnimationFrame(u):setTimeout(u,16))},T=typeof MutationObserver<"u"?new MutationObserver(g):null,l={attributes:!0,attributeFilter:["class","style",...dt]};T?.observe(n.documentElement,l),n.body&&T?.observe(n.body,l);let h=typeof a.matchMedia=="function"?a.matchMedia(mt):null;return h?.addEventListener?.("change",g),()=>{T?.disconnect(),h?.removeEventListener?.("change",g)}}var Pt="https://agents.bitpalm.ai",v="_bp_",Ht=new Set(["password","file","checkbox","radio","submit","button","reset","image"]),$t=8e3,ut=4096,ft=`${v}identify_signature`,gt=`${v}identify_fingerprint`,pt=`${v}identify_sent_at`,ht="0 4px 14px rgba(0,0,0,0.18)";function Ot(t){return[t.external_user_id||"",t.email||"",t.phone||"",t.name||"",t.company||"",t.signature||"",t.signed_at!=null?String(t.signed_at):"",t.signature_version||"",t.identify_source||""].join("|").toLowerCase()}function m(t,n=180){return t?t.replace(/\s+/g," ").trim().slice(0,n):""}function Dt(t){return t?` ${t.toLowerCase().replace(/[_-]+/g," ").replace(/[^a-z0-9\s@.]/g," ").replace(/\s+/g," ").trim()} `:""}function F(t,n){for(let a of n)if(t.includes(a))return!0;return!1}function M(t){return/^[^\s@]+@[^\s@]+\.[^\s@]{2,}$/i.test(t)}function _(t){let n=m(t,50);if(!n)return"";let a=n.startsWith("+"),r=n.replace(/\D/g,"");return r.length<6?"":`${a?"+":""}${r.slice(0,20)}`}function yt(t){let n=m(t,140).toLowerCase();return!n||!M(n)?"":n}function U(t,n){for(let a of n){let r=t.querySelector(a),d=m(r?.value);if(d)return d}return""}function Nt(t){return m(t.getAttribute("data-bp-field")||t.getAttribute("data-bitpalm-field"),64).toLowerCase().replace(/[_\s]+/g,"-")}function Wt(t){return t.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}function Rt(t,n){let a=[],r=(l,h=140)=>{let c=m(l,h);c&&a.push(c)};r(n.name),r(n.id),r(n.getAttribute("autocomplete")),r(n.getAttribute("placeholder")),r(n.getAttribute("aria-label")),r(n.getAttribute("data-field")),r(n.getAttribute("data-name")),r(n.getAttribute("data-label")),r(n.getAttribute("data-bp-field")),r(n.getAttribute("data-bitpalm-field"));let d=new Set,u=l=>{let h=m(l,200);!h||d.has(h)||(d.add(h),a.push(h))};for(let l of Array.from(n.labels||[]))u(l.textContent);if(n.id){let l=t.querySelector(`label[for="${Wt(n.id)}"]`);u(l?.textContent)}let g=n.closest("label");u(g?.textContent);let T=n.getAttribute("aria-labelledby");if(T)for(let l of T.split(/\s+/)){if(!l)continue;let h=t.ownerDocument.getElementById(l);u(h?.textContent)}return a}function Ft(t){let n=m(U(t,["[data-bp-email]","[data-bitpalm-email]"]),140).toLowerCase(),a=_(U(t,["[data-bp-phone]","[data-bitpalm-phone]"])),r=m(U(t,["[data-bp-name]","[data-bitpalm-name]","[data-bp-full-name]","[data-bitpalm-full-name]"])),d=m(U(t,["[data-bp-first-name]","[data-bitpalm-first-name]"])),u=m(U(t,["[data-bp-last-name]","[data-bitpalm-last-name]"])),g=m(U(t,["[data-bp-company]","[data-bitpalm-company]"]));for(let c of Array.from(t.elements)){if(!(c instanceof HTMLInputElement||c instanceof HTMLTextAreaElement||c instanceof HTMLSelectElement)||c.disabled||c instanceof HTMLInputElement&&Ht.has(c.type.toLowerCase()))continue;let y=Nt(c),z=c.hasAttribute("data-bp-email")||c.hasAttribute("data-bitpalm-email")||c.hasAttribute("data-bp-phone")||c.hasAttribute("data-bitpalm-phone")||c.hasAttribute("data-bp-name")||c.hasAttribute("data-bitpalm-name")||c.hasAttribute("data-bp-full-name")||c.hasAttribute("data-bitpalm-full-name")||c.hasAttribute("data-bp-first-name")||c.hasAttribute("data-bitpalm-first-name")||c.hasAttribute("data-bp-last-name")||c.hasAttribute("data-bitpalm-last-name")||c.hasAttribute("data-bp-company")||c.hasAttribute("data-bitpalm-company")||!!y;if(c instanceof HTMLInputElement&&c.type.toLowerCase()==="hidden"&&!z)continue;let f=m(c.value);if(!f)continue;let A=c instanceof HTMLInputElement?c.type.toLowerCase():"",s=Dt(Rt(t,c).join(" "));if(!n&&y==="email"&&M(f)){n=f.toLowerCase();continue}if(!a&&(y==="phone"||y==="tel"||y==="mobile"||y==="whatsapp")){let S=_(f);if(S){a=S;continue}}if(!g&&y==="company"){g=m(f,160);continue}if(!d&&(y==="first-name"||y==="firstname")){d=m(f,100);continue}if(!u&&(y==="last-name"||y==="lastname"||y==="surname")){u=m(f,100);continue}if(!r&&(y==="name"||y==="full-name"||y==="fullname")){!M(f)&&!_(f)&&(r=m(f,140));continue}let K=A==="email"||F(s,[" email "," e mail "," mail "," email adresse "," mailadresse "," correo "]),D=A==="tel"||F(s,[" phone "," phone number "," mobile "," tel "," telefon "," telefonnummer "," whatsapp "," handy "," kontakt "," nummer "]),ce=F(s,[" company "," company name "," firma "," firmenname "," organization "," organisation "," business "," unternehmen "," agency "," brokerage "]),p=F(s,[" first name "," firstname "," given name "," givenname "," vorname "," fname "]),k=F(s,[" last name "," lastname "," family name "," familyname "," surname "," nachname "," lname "]),j=F(s,[" full name "," fullname "," contact name "," name "])&&!K&&!D;if(!n&&K&&M(f)){n=f.toLowerCase();continue}if(!a&&D){let S=_(f);if(S){a=S;continue}}if(!g&&ce){g=m(f,160);continue}if(!d&&p){d=m(f,100);continue}if(!u&&k){u=m(f,100);continue}if(!r&&j&&!M(f)&&!_(f)){r=m(f,140);continue}!n&&M(f)&&(n=f.toLowerCase())}if(r&&(M(r)||_(r))&&(r=""),g&&(M(g)||_(g))&&(g=""),r||(r=m([d,u].filter(Boolean).join(" "),140)),r&&n&&r.toLowerCase()===n.toLowerCase()&&(r=""),!!!(n||a)&&!!!(r&&g))return null;let h={...r?{name:r}:{},...n?{email:n}:{},...a?{phone:a}:{},...g?{company:g}:{}};return Object.keys(h).length>0?h:null}function Ut(){if(typeof document<"u"){let t=document.documentElement.lang;if(t)return t.slice(0,2).toLowerCase()}return"en"}function _e(t,n=1200){if(typeof window<"u"&&"requestIdleCallback"in window){window.requestIdleCallback(t,{timeout:n});return}setTimeout(t,Math.min(n,300))}function Ae(){if(typeof window>"u")return!1;let t=typeof navigator<"u"?navigator.userAgent:"";if(/Android|iPhone|iPad|iPod|IEMobile|Windows Phone|Mobile/i.test(t))return!0;let a=window.matchMedia("(pointer: coarse)").matches,r=window.matchMedia("(hover: none)").matches,d=Math.min(window.screen?.width||window.innerWidth,window.screen?.height||window.innerHeight);return a&&r&&d<=900}function le(t){let{slug:n,locale:a=Ut(),baseUrl:r=Pt,token:d,zIndex:u=9999,autoIdentify:g=!0,launcher:T=!0}=t,l=document,h=R(t.theme),c=h==="auto"?O():h,y=null,z=ae(t.triggers),f=z,A=null,s=l.createElement("iframe");s.setAttribute("data-bitpalm-chat","");let K=`${r}/t/${n}/widget`,D=new URLSearchParams({locale:a,theme:c});d&&D.set("token",d),f==="off"&&D.set("triggers","off"),s.src=`${K}?${D.toString()}`,s.allow="clipboard-write; microphone",s.setAttribute("allowtransparency","true"),s.loading="lazy",s.style.cssText=`position:fixed;bottom:0;right:0;width:1px;height:1px;border:none;z-index:${u};background:transparent;color-scheme:normal;opacity:0;pointer-events:none;`;let ce=new URL(s.src).origin,p=l.createElement("div");if(p.setAttribute("role","button"),p.setAttribute("aria-label","Chat"),p.setAttribute("data-bitpalm-launcher",""),p.style.cssText=`position:fixed;bottom:24px;right:24px;width:56px;height:56px;border-radius:50%;display:none;align-items:center;justify-content:center;cursor:pointer;z-index:${u-1};background:#171717;box-shadow:${ht};transition:transform .2s,opacity .3s;opacity:0;`,p.innerHTML='<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M7.9 20A9 9 0 1 0 4 16.1L2 22Z"/></svg>',p.onmouseenter=()=>{p.style.transform="scale(1.05)"},p.onmouseleave=()=>{p.style.transform="scale(1)"},p.onclick=()=>J(),T&&l.body.appendChild(p),!l.getElementById("_bp_fade")){let e=l.createElement("style");e.id="_bp_fade",e.textContent="@keyframes _bp_fade{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}",l.head.appendChild(e)}let k=null,j=!1,S=!1,Ce=!1,de=!1,V=!1,X=()=>{Ce||(Ce=!0,l.body.appendChild(s))},Z=!1,me=0,Q={overflow:"",overscrollBehavior:""},E={overflow:"",overscrollBehavior:"",position:"",top:"",left:"",right:"",width:""},Me=()=>{if(Z||!Ae())return;let o=l.documentElement,i=l.body;me=window.scrollY||window.pageYOffset||0,Q.overflow=o.style.overflow,Q.overscrollBehavior=o.style.overscrollBehavior,E.overflow=i.style.overflow,E.overscrollBehavior=i.style.overscrollBehavior,E.position=i.style.position,E.top=i.style.top,E.left=i.style.left,E.right=i.style.right,E.width=i.style.width,o.style.overflow="hidden",o.style.overscrollBehavior="none",i.style.overflow="hidden",i.style.overscrollBehavior="none",i.style.position="fixed",i.style.top=`-${me}px`,i.style.left="0",i.style.right="0",i.style.width="100%",Z=!0},N=()=>{if(!Z)return;let e=l.documentElement,o=l.body;e.style.overflow=Q.overflow,e.style.overscrollBehavior=Q.overscrollBehavior,o.style.overflow=E.overflow,o.style.overscrollBehavior=E.overscrollBehavior,o.style.position=E.position,o.style.top=E.top,o.style.left=E.left,o.style.right=E.right,o.style.width=E.width,window.scrollTo(0,me),Z=!1},ke=()=>{let e=Ae();s.style.display==="none"&&(s.style.display=""),e?(s.style.width="100vw",s.style.height="100dvh",s.style.left="0",s.style.top="0",s.style.bottom="0",s.style.right="0",Me()):(s.style.width="420px",s.style.height="620px",s.style.bottom="24px",s.style.right="24px",s.style.left="",s.style.top="",N()),s.style.opacity="1",s.style.pointerEvents="auto"},C=()=>{k&&(k.remove(),k=null)},ee=()=>{A!==null&&(A=null,q("trigger_hidden"))},Be=()=>{s.contentWindow?.postMessage({type:"bitpalm-triggers",enabled:f!=="off"},"*")},te=()=>{},ue=()=>{},W=!1,B=new Map;function q(e,o){let i=B.get(e);if(i)for(let b of i)try{b(o)}catch{}}let Pe=e=>{if(e.origin===ce){if(e.data?.type==="bitpalm-widget-config"){S=!1,j=!0,s.style.display==="none"&&(s.style.display=""),e.data.primaryColor&&(p.style.background=e.data.primaryColor,p.style.boxShadow=e.data.chatShadow==="none"?"none":ht);let o=e.data.chatButtonIconColor||"black";if(e.data.chatButtonIconSvg){p.innerHTML="";let i=l.createElement("span");i.style.cssText=`display:flex;align-items:center;justify-content:center;width:24px;height:24px;color:${o}`;let w=new DOMParser().parseFromString(e.data.chatButtonIconSvg,"image/svg+xml").querySelector("svg");w?(w.querySelectorAll("script,foreignObject").forEach(H=>H.remove()),w.querySelectorAll("*").forEach(H=>{for(let $ of[...H.attributes])($.name.startsWith("on")||$.value&&$.value.includes("javascript:"))&&H.removeAttribute($.name)}),w.setAttribute("width","24"),w.setAttribute("height","24"),w.style.display="block",i.appendChild(w)):i.innerHTML='<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M7.9 20A9 9 0 1 0 4 16.1L2 22Z"/></svg>',p.appendChild(i)}else{let i=p.querySelector("svg");i&&(i.style.stroke=o)}T&&(p.style.display="flex",requestAnimationFrame(()=>{p.style.opacity="1"})),Be()}if(e.data?.type==="bitpalm-widget-resize"){let o=e.data.width>0,i=W;W=o,o&&!i&&q("widget_opened"),!o&&i&&q("widget_closed");let b=Ae();o?(s.style.width=b?"100vw":`${e.data.width}px`,s.style.height=b?"100dvh":`${e.data.height}px`,b?(s.style.left="0",s.style.top="0",s.style.bottom="0",s.style.right="0",Me()):N(),s.style.opacity="1",s.style.pointerEvents="auto"):(N(),s.style.width="1px",s.style.height="1px",s.style.left="",s.style.top="",s.style.opacity="0",s.style.pointerEvents="none"),p.style.display=o||!T?"none":"flex"}if(e.data?.type==="bitpalm-trigger-show"){if(S||!j||f==="off")return;let o=typeof e.data.message=="string"?e.data.message:"";if(!o)return;if(f==="events"){A=o,q("trigger_shown",{message:o,triggerId:e.data.triggerId,triggerType:e.data.triggerType});return}C(),k=at(l,{message:o,zIndex:u,bottom:T?90:24,onDismiss:()=>{C(),s.contentWindow?.postMessage({type:"bitpalm-trigger-dismiss"},"*")},onEngage:()=>{if(C(),p.style.display="none",ke(),X(),!de){V=!0;return}s.contentWindow?.postMessage({type:"bitpalm-trigger-engaged",message:o},"*")}}),l.body.appendChild(k)}e.data?.type==="bitpalm-trigger-hide"&&(C(),ee()),e.data?.type==="bitpalm-request-context"&&te(),e.data?.type==="bitpalm-chat-event"&&e.data.event&&q(e.data.event,e.data.data),e.data?.type==="bitpalm-widget-blocked"&&(S=!0,j=!1,p.style.display="none",C(),ee(),N(),s.style.display="none")}};window.addEventListener("message",Pe);let L=!1;try{L=localStorage.getItem(`${v}optout`)==="1"}catch{}let ne=`${v}vid`,x="";if(!L){try{x=localStorage.getItem(ne)||""}catch{}if(!x){let e=l.cookie.match(new RegExp(`(?:^|; )${ne}=([^;]+)`));x=e?decodeURIComponent(e[1]):""}x||(x=crypto.randomUUID?crypto.randomUUID():`${Date.now()}-${Math.random().toString(36).slice(2,11)}`);try{localStorage.setItem(ne,x)}catch{}try{l.cookie=`${ne}=${encodeURIComponent(x)};path=/;max-age=31536000;SameSite=Lax`}catch{}}L||_e(()=>{try{let e=new URLSearchParams(location.search),o={};for(let I of["utm_source","utm_medium","utm_campaign","utm_term","utm_content"]){let w=e.get(I);w&&(o[I]=w)}let i=JSON.stringify({tenant_slug:n,visitor_id:x,url:location.href,referrer:l.referrer||void 0,...Object.keys(o).length>0?{utm:o}:{}}),b=`${r}/api/widget/impression`;typeof navigator.sendBeacon=="function"?navigator.sendBeacon(b,new Blob([i],{type:"application/json"})):fetch(b,{method:"POST",body:i,headers:{"Content-Type":"application/json"},keepalive:!0}).catch(()=>{})}catch{}},2e3);let fe="",ge="",pe=0;try{fe=sessionStorage.getItem(ft)||"",ge=sessionStorage.getItem(gt)||"";let e=parseInt(sessionStorage.getItem(pt)||"0",10);Number.isFinite(e)&&e>0&&(pe=e)}catch{}let He=(e,o="")=>{if(L||!x)return;let i={},b=m(e.name,140),I=yt(e.email),w=_(e.phone),H=m(e.company,160),$=m(e.external_user_id,140),ot=m(e.signature,260),Ee=Number(e.signed_at);if(b&&(i.name=b),I&&(i.email=I),w&&(i.phone=w),H&&(i.company=H),$&&(i.external_user_id=$),ot&&(i.signature=ot),Number.isFinite(Ee)&&Ee>0&&(i.signed_at=Math.floor(Ee)),(e.signature_version==="v1"||i.signature)&&(i.signature_version="v1"),(e.identify_source==="manual"||e.identify_source==="form")&&(i.identify_source=e.identify_source),!i.name&&!i.email&&!i.phone&&!i.company&&!i.external_user_id)return;let re=Ot(i),Te=[o.toLowerCase(),re].filter(Boolean).join("|"),xe=Date.now();if(!(xe-pe<$t&&(Te===fe||re===ge))){fe=Te,ge=re,pe=xe;try{sessionStorage.setItem(ft,Te),sessionStorage.setItem(gt,re),sessionStorage.setItem(pt,String(xe))}catch{}try{let it=JSON.stringify({tenant_slug:n,visitor_id:x,url:location.href,referrer:l.referrer||void 0,...i}),st=`${r}/api/widget/identify`;typeof navigator.sendBeacon=="function"?navigator.sendBeacon(st,new Blob([it],{type:"application/json"})):fetch(st,{method:"POST",body:it,headers:{"Content-Type":"application/json"},keepalive:!0}).catch(()=>{})}catch{}}},$e=e=>{if(L||!g||!x)return;let o=e.target instanceof HTMLFormElement?e.target:e.target instanceof Element?e.target.closest("form"):null;if(!(o instanceof HTMLFormElement))return;let i=(o.getAttribute("data-bp-identify")||o.getAttribute("data-bitpalm-identify")||"").toLowerCase();if(i==="off"||i==="false"||i==="0")return;let b=Ft(o);if(!b)return;let I=[o.getAttribute("id")||"",o.getAttribute("name")||"",o.getAttribute("action")||""].join("|");He({...b,identify_source:"form"},I)};!L&&g&&l.addEventListener("submit",$e,!0);let Y=parseInt(sessionStorage.getItem(`${v}pages`)||"0")+1;sessionStorage.setItem(`${v}pages`,String(Y));let P=JSON.parse(sessionStorage.getItem(`${v}hist`)||"[]");P.push(location.href),P.length>20&&(P=P.slice(-20)),sessionStorage.setItem(`${v}hist`,JSON.stringify(P));let Oe=Date.now(),oe=parseInt(sessionStorage.getItem(`${v}site_start`)||"0");oe||(oe=Oe,sessionStorage.setItem(`${v}site_start`,String(oe)));let De=[];te=()=>{let e=!1;try{e=!!localStorage.getItem(`${v}visited`)}catch{e=!1}if(s.contentWindow?.postMessage({type:"bitpalm-parent-context",url:location.href,title:l.title,returning:e,pageCount:Y,pageHistory:P,loadedAt:Oe,siteStart:oe,locale:a,visitorId:L?"":x},"*"),Ge(),!e&&!L)try{localStorage.setItem(`${v}visited`,"1")}catch{}},s.addEventListener("load",()=>{de=!0,te(),[120,450,1100].forEach(e=>{let o=setTimeout(()=>te(),e);De.push(o)}),V&&(V=!1,ue())}),l.readyState==="loading"?l.addEventListener("DOMContentLoaded",()=>_e(X,1600),{once:!0}):_e(X,1600);let Ne=history.pushState.bind(history),We=history.replaceState.bind(history),ie=()=>{Y++,sessionStorage.setItem(`${v}pages`,String(Y));let e=JSON.parse(sessionStorage.getItem(`${v}hist`)||"[]");if(e.push(location.href),e.length>20&&e.splice(0,e.length-20),P=e,sessionStorage.setItem(`${v}hist`,JSON.stringify(e)),s.contentWindow?.postMessage({type:"bitpalm-page-change",url:location.href,title:l.title,pageCount:Y,pageHistory:e,loadedAt:Date.now()},"*"),!L)try{let o=JSON.stringify({tenant_slug:n,visitor_id:x,url:location.href}),i=`${r}/api/widget/impression`;typeof navigator.sendBeacon=="function"?navigator.sendBeacon(i,new Blob([o],{type:"application/json"})):fetch(i,{method:"POST",body:o,headers:{"Content-Type":"application/json"},keepalive:!0}).catch(()=>{})}catch{}};history.pushState=function(...e){Ne(...e),ie()},history.replaceState=function(...e){We(...e),ie()},window.addEventListener("popstate",ie);let Re=-1,he,Fe=()=>{clearTimeout(he),he=setTimeout(()=>{let e=Math.max(l.documentElement.scrollHeight,l.body.scrollHeight)-window.innerHeight,o=e>0?Math.round(window.scrollY/e*100):100;o!==Re&&(Re=o,s.contentWindow?.postMessage({type:"bitpalm-scroll-depth",percent:o},"*"))},500)};window.addEventListener("scroll",Fe,{passive:!0});let Ue=e=>{e.clientY<=0&&s.contentWindow?.postMessage({type:"bitpalm-exit-intent"},"*")};l.addEventListener("mouseout",Ue);let ye,ze=!1,be=()=>{clearTimeout(ye),!ze&&(ye=setTimeout(()=>{ze=!0,s.contentWindow?.postMessage({type:"bitpalm-inactivity"},"*")},15e3))},je=["mousemove","keydown","scroll","touchstart"];je.forEach(e=>l.addEventListener(e,be,{passive:!0})),be(),ue=()=>{s.contentWindow?.postMessage({type:"bitpalm-open"},"*");let e=s.src.split("#")[0];s.src=`${e}#bp-open-${Date.now()}`};let J=()=>{if(p.style.display="none",C(),ke(),X(),!de){V=!0;return}if(A!==null){let e=A;ee(),s.contentWindow?.postMessage({type:"bitpalm-trigger-engaged",message:e},"*");return}ue()},qe=e=>{f=e,e==="off"&&(C(),ee()),Be()},vt=()=>qe("off"),wt=()=>qe(z==="off"?"bubble":z),ve=()=>{N(),s.contentWindow?.postMessage({type:"bitpalm-close"},"*")},Ye=e=>{!e||typeof e!="object"||He({external_user_id:m(e.externalUserId,140)||void 0,name:m(e.name,140)||void 0,email:yt(e.email)||void 0,phone:_(e.phone)||void 0,company:m(e.company,160)||void 0,signature:m(e.signature,260)||void 0,signed_at:Number.isFinite(Number(e.signedAt))?Math.floor(Number(e.signedAt)):void 0,signature_version:e.signatureVersion==="v1"?"v1":void 0,identify_source:"manual"},"manual")},Et=()=>{W?ve():J()},Tt=()=>W,Je=e=>{if(!e||typeof e!="string")return;let o=e.trim().slice(0,1e4);o&&(W||J(),setTimeout(()=>{s.contentWindow?.postMessage({type:"bitpalm-send-message",message:o},"*")},W?50:500))};function Ge(){s.contentWindow?.postMessage({type:"bitpalm-theme",theme:c},"*")}let se=e=>{e!==c&&(c=e,Ge())},Ke=e=>{h=R(e),y?.(),y=null,h==="auto"?(y=Ie(se),se(O())):se(h)};h==="auto"&&(y=Ie(se));let Ve=e=>{let o=e.detail;if(!o||typeof o!="object")return;let i=m(o.slug,120);i&&i!==n||Ke(R(o.theme))};window.addEventListener("bitpalm-theme",Ve);let G={},Xe=e=>{if(!e||typeof e!="object"||Array.isArray(e))return;G={...G,...e};let o=JSON.stringify(G);o.length>ut&&console.warn(`[BitPalm] Custom context exceeds ${ut} bytes (${o.length}). It may be truncated.`),s.contentWindow?.postMessage({type:"bitpalm-custom-context",data:G},"*")},xt=()=>{G={},s.contentWindow?.postMessage({type:"bitpalm-custom-context",data:{}},"*")},Ze=e=>{let i=e.detail;if(!i||typeof i!="object")return;let b=m(i.slug,120);if(b&&b!==n)return;let{slug:I,...w}=i;Xe(w)};window.addEventListener("bitpalm-context",Ze);let Qe=e=>{let i=e.detail;if(!i||typeof i!="object")return;let b=m(i.slug,120);b&&b!==n||Ye(i)};window.addEventListener("bitpalm-identify",Qe);let we=e=>{let o=e.detail,i=m(o?.slug,120);return!i||i===n},et=e=>{we(e)&&J()},tt=e=>{we(e)&&ve()},nt=e=>{if(!we(e))return;let o=e.detail?.message;typeof o=="string"&&Je(o)};return window.addEventListener("bitpalm-open",et),window.addEventListener("bitpalm-close",tt),window.addEventListener("bitpalm-send",nt),{open:J,close:ve,toggle:Et,isOpen:Tt,identify:Ye,context:Xe,resetContext:xt,send:Je,on:(e,o)=>(B.has(e)||B.set(e,new Set),B.get(e).add(o),()=>B.get(e)?.delete(o)),off:(e,o)=>{B.get(e)?.delete(o)},setTheme:Ke,disableTriggers:vt,enableTriggers:wt,destroy:()=>{window.removeEventListener("message",Pe),window.removeEventListener("scroll",Fe),window.removeEventListener("popstate",ie),l.removeEventListener("mouseout",Ue),l.removeEventListener("submit",$e,!0),je.forEach(e=>l.removeEventListener(e,be)),clearTimeout(he),clearTimeout(ye),De.forEach(e=>clearTimeout(e)),history.pushState=Ne,history.replaceState=We,window.removeEventListener("bitpalm-identify",Qe),window.removeEventListener("bitpalm-context",Ze),window.removeEventListener("bitpalm-theme",Ve),window.removeEventListener("bitpalm-open",et),window.removeEventListener("bitpalm-close",tt),window.removeEventListener("bitpalm-send",nt),y?.(),B.clear(),N(),C(),p.remove(),s.remove()}}}function bt(t){if(t==null)return;let n=t.trim().toLowerCase();if(["1","true","yes","on"].includes(n))return!0;if(["0","false","no","off"].includes(n))return!1}if(typeof document<"u"){let t=document.currentScript;if(t?.dataset.slug){let n=()=>{le({slug:t.dataset.slug,locale:t.dataset.locale,baseUrl:t.dataset.baseUrl,token:t.dataset.token,zIndex:t.dataset.zIndex?Number(t.dataset.zIndex):void 0,autoIdentify:bt(t.dataset.autoIdentify),theme:R(t.dataset.theme),launcher:bt(t.dataset.launcher),triggers:t.dataset.triggers===void 0?void 0:rt(ae(t.dataset.triggers))})};document.readyState==="loading"?document.addEventListener("DOMContentLoaded",n):n()}}0&&(module.exports={createWidget,detectHostTheme});
2
2
  //# sourceMappingURL=index.cjs.map