@bitpalm/ai-agents 0.5.0 → 0.7.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 +28 -0
- package/dist/headless.cjs +13 -0
- package/dist/headless.cjs.map +1 -0
- package/dist/headless.d.cts +123 -0
- package/dist/headless.d.ts +123 -0
- package/dist/headless.js +13 -0
- package/dist/headless.js.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +20 -1
- package/dist/index.d.ts +20 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/react.cjs +12 -1
- package/dist/react.cjs.map +1 -1
- package/dist/react.d.cts +175 -3
- package/dist/react.d.ts +175 -3
- package/dist/react.js +12 -1
- package/dist/react.js.map +1 -1
- package/dist/widget.global.js +1 -1
- package/dist/widget.global.js.map +1 -1
- package/package.json +6 -1
package/dist/react.cjs
CHANGED
|
@@ -1,2 +1,13 @@
|
|
|
1
|
-
"use strict";var ve=Object.defineProperty;var ut=Object.getOwnPropertyDescriptor;var ft=Object.getOwnPropertyNames;var pt=Object.prototype.hasOwnProperty;var gt=(n,t)=>{for(var r in t)ve(n,r,{get:t[r],enumerable:!0})},ht=(n,t,r,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let m of ft(t))!pt.call(n,m)&&m!==r&&ve(n,m,{get:()=>t[m],enumerable:!(a=ut(t,m))||a.enumerable});return n};var yt=n=>ht(ve({},"__esModule",{value:!0}),n);var Bt={};gt(Bt,{BitPalmAgent:()=>kt});module.exports=yt(Bt);var D=require("react");var bt=["dark","dark-mode","dark-theme","theme-dark"],vt=["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 oe(n){return n==="light"||n==="dark"?n:"auto"}function Ze(n){if(!n)return null;if(bt.some(t=>n.classList.contains(t)))return"dark";if(vt.some(t=>n.classList.contains(t)))return"light";for(let t of et){let r=(n.getAttribute(t)||"").toLowerCase();if(r.includes("dark"))return"dark";if(r.includes("light"))return"light"}return null}function we(n){let t=n/255;return t<=.03928?t/12.92:((t+.055)/1.055)**2.4}function Qe(n,t){if(!n)return null;let r=t.getComputedStyle(n).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 wt(n,t){let r=t.getComputedStyle(n.documentElement).colorScheme||"",a=n.querySelector('meta[name="color-scheme"]')?.getAttribute("content")||"",m=`${r} ${a}`.toLowerCase();return m.includes("dark")?m.includes("light")?t.matchMedia?.(tt).matches?"dark":"light":"dark":null}function Y(n=document,t=window){return Ze(n.documentElement)??Ze(n.body)??Qe(n.body,t)??Qe(n.documentElement,t)??wt(n,t)??"light"}function Ee(n,t=document,r=window){let a=Y(t,r),m=!1,y=()=>{m=!1;let c=Y(t,r);c!==a&&(a=c,n(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(t.documentElement,g),t.body&&l?.observe(t.body,g);let b=typeof r.matchMedia=="function"?r.matchMedia(tt):null;return b?.addEventListener?.("change",p),()=>{l?.disconnect(),b?.removeEventListener?.("change",p)}}var Et="https://agents.bitpalm.ai",v="_bp_",xt=new Set(["password","file","checkbox","radio","submit","button","reset","image"]),Tt=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 St(n){return[n.external_user_id||"",n.email||"",n.phone||"",n.name||"",n.company||"",n.signature||"",n.signed_at!=null?String(n.signed_at):"",n.signature_version||"",n.identify_source||""].join("|").toLowerCase()}function d(n,t=180){return n?n.replace(/\s+/g," ").trim().slice(0,t):""}function Lt(n){return n?` ${n.toLowerCase().replace(/[_-]+/g," ").replace(/[^a-z0-9\s@.]/g," ").replace(/\s+/g," ").trim()} `:""}function N(n,t){for(let r of t)if(n.includes(r))return!0;return!1}function I(n){return/^[^\s@]+@[^\s@]+\.[^\s@]{2,}$/i.test(n)}function _(n){let t=d(n,50);if(!t)return"";let r=t.startsWith("+"),a=t.replace(/\D/g,"");return a.length<6?"":`${r?"+":""}${a.slice(0,20)}`}function rt(n){let t=d(n,140).toLowerCase();return!t||!I(t)?"":t}function W(n,t){for(let r of t){let a=n.querySelector(r),m=d(a?.value);if(m)return m}return""}function At(n){return d(n.getAttribute("data-bp-field")||n.getAttribute("data-bitpalm-field"),64).toLowerCase().replace(/[_\s]+/g,"-")}function _t(n){return n.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}function It(n,t){let r=[],a=(g,b=140)=>{let c=d(g,b);c&&r.push(c)};a(t.name),a(t.id),a(t.getAttribute("autocomplete")),a(t.getAttribute("placeholder")),a(t.getAttribute("aria-label")),a(t.getAttribute("data-field")),a(t.getAttribute("data-name")),a(t.getAttribute("data-label")),a(t.getAttribute("data-bp-field")),a(t.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(t.labels||[]))y(g.textContent);if(t.id){let g=n.querySelector(`label[for="${_t(t.id)}"]`);y(g?.textContent)}let p=t.closest("label");y(p?.textContent);let l=t.getAttribute("aria-labelledby");if(l)for(let g of l.split(/\s+/)){if(!g)continue;let b=n.ownerDocument.getElementById(g);y(b?.textContent)}return r}function Ct(n){let t=d(W(n,["[data-bp-email]","[data-bitpalm-email]"]),140).toLowerCase(),r=_(W(n,["[data-bp-phone]","[data-bitpalm-phone]"])),a=d(W(n,["[data-bp-name]","[data-bitpalm-name]","[data-bp-full-name]","[data-bitpalm-full-name]"])),m=d(W(n,["[data-bp-first-name]","[data-bitpalm-first-name]"])),y=d(W(n,["[data-bp-last-name]","[data-bitpalm-last-name]"])),p=d(W(n,["[data-bp-company]","[data-bitpalm-company]"]));for(let c of Array.from(n.elements)){if(!(c instanceof HTMLInputElement||c instanceof HTMLTextAreaElement||c instanceof HTMLSelectElement)||c.disabled||c instanceof HTMLInputElement&&xt.has(c.type.toLowerCase()))continue;let i=At(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=Lt(It(n,c).join(" "));if(!t&&i==="email"&&I(f)){t=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")){!I(f)&&!_(f)&&(a=d(f,140));continue}let T=J==="email"||N(u,[" email "," e mail "," mail "," email adresse "," mailadresse "," correo "]),H=J==="tel"||N(u,[" phone "," phone number "," mobile "," tel "," telefon "," telefonnummer "," whatsapp "," handy "," kontakt "," nummer "]),F=N(u,[" company "," company name "," firma "," firmenname "," organization "," organisation "," business "," unternehmen "," agency "," brokerage "]),G=N(u,[" first name "," firstname "," given name "," givenname "," vorname "," fname "]),U=N(u,[" last name "," lastname "," family name "," familyname "," surname "," nachname "," lname "]),$=N(u,[" full name "," fullname "," contact name "," name "])&&!T&&!H;if(!t&&T&&I(f)){t=f.toLowerCase();continue}if(!r&&H){let S=_(f);if(S){r=S;continue}}if(!p&&F){p=d(f,160);continue}if(!m&&G){m=d(f,100);continue}if(!y&&U){y=d(f,100);continue}if(!a&&$&&!I(f)&&!_(f)){a=d(f,140);continue}!t&&I(f)&&(t=f.toLowerCase())}if(a&&(I(a)||_(a))&&(a=""),p&&(I(p)||_(p))&&(p=""),a||(a=d([m,y].filter(Boolean).join(" "),140)),a&&t&&a.toLowerCase()===t.toLowerCase()&&(a=""),!!!(t||r)&&!!!(a&&p))return null;let b={...a?{name:a}:{},...t?{email:t}:{},...r?{phone:r}:{},...p?{company:p}:{}};return Object.keys(b).length>0?b:null}function Pt(){if(typeof document<"u"){let n=document.documentElement.lang;if(n)return n.slice(0,2).toLowerCase()}return"en"}function xe(n,t=1200){if(typeof window<"u"&&"requestIdleCallback"in window){window.requestIdleCallback(n,{timeout:t});return}setTimeout(n,Math.min(t,300))}function Te(){if(typeof window>"u")return!1;let n=typeof navigator<"u"?navigator.userAgent:"";if(/Android|iPhone|iPad|iPod|IEMobile|Windows Phone|Mobile/i.test(n))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 lt(n){let{slug:t,locale:r=Pt(),baseUrl:a=Et,token:m,zIndex:y=9999,autoIdentify:p=!0}=n,l=document,g=oe(n.theme),b=g==="auto"?Y():g,c=null,i=l.createElement("iframe"),ie=`${a}/t/${t}/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,H=!1,F=!1,G=!1,U=!1,$=!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},O=()=>{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="",O()),i.style.opacity="1",i.style.pointerEvents="auto"},C=()=>{T&&(T.remove(),T=null)},X=()=>{},ae=()=>{},R=!1,P=new Map;function re(e,s){let o=P.get(e);if(o)for(let h of o)try{h(s)}catch{}}let Ae=e=>{if(e.origin===J){if(e.data?.type==="bitpalm-widget-config"){F=!1,H=!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=R;R=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()):O(),i.style.opacity="1",i.style.pointerEvents="auto"):(O(),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(F||!H)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,"<");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="✕",o.onclick=h=>{h.stopPropagation(),C(),i.contentWindow?.postMessage({type:"bitpalm-trigger-dismiss"},"*")},T.onclick=()=>{if(C(),u.style.display="none",Le(),S(),!U){$=!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"&&(F=!0,H=!1,u.style.display="none",C(),O(),i.style.display="none")}};window.addEventListener("message",Ae);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 A of["utm_source","utm_medium","utm_campaign","utm_term","utm_content"]){let w=e.get(A);w&&(s[A]=w)}let o=JSON.stringify({tenant_slug:t,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),A=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),A&&(o.email=A),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=St(o),ye=[s.toLowerCase(),ne].filter(Boolean).join("|"),be=Date.now();if(!(be-de<Tt&&(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:t,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{}}},Ie=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=Ct(s);if(!h)return;let A=[s.getAttribute("id")||"",s.getAttribute("name")||"",s.getAttribute("action")||""].join("|");_e({...h,identify_source:"form"},A)};!L&&p&&l.addEventListener("submit",Ie,!0);let j=parseInt(sessionStorage.getItem(`${v}pages`)||"0")+1;sessionStorage.setItem(`${v}pages`,String(j));let k=JSON.parse(sessionStorage.getItem(`${v}hist`)||"[]");k.push(location.href),k.length>20&&(k=k.slice(-20)),sessionStorage.setItem(`${v}hist`,JSON.stringify(k));let Ce=Date.now(),Q=parseInt(sessionStorage.getItem(`${v}site_start`)||"0");Q||(Q=Ce,sessionStorage.setItem(`${v}site_start`,String(Q)));let Pe=[];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:j,pageHistory:k,loadedAt:Ce,siteStart:Q,locale:r,visitorId:L?"":x},"*"),De(),!e&&!L)try{localStorage.setItem(`${v}visited`,"1")}catch{}},i.addEventListener("load",()=>{U=!0,X(),[120,450,1100].forEach(e=>{let s=setTimeout(()=>X(),e);Pe.push(s)}),$&&($=!1,ae())}),l.readyState==="loading"?l.addEventListener("DOMContentLoaded",()=>xe(S,1600),{once:!0}):xe(S,1600);let ke=history.pushState.bind(history),Be=history.replaceState.bind(history),ee=()=>{j++,sessionStorage.setItem(`${v}pages`,String(j));let e=JSON.parse(sessionStorage.getItem(`${v}hist`)||"[]");if(e.push(location.href),e.length>20&&e.splice(0,e.length-20),k=e,sessionStorage.setItem(`${v}hist`,JSON.stringify(e)),i.contentWindow?.postMessage({type:"bitpalm-page-change",url:location.href,title:l.title,pageCount:j,pageHistory:e,loadedAt:Date.now()},"*"),!L)try{let s=JSON.stringify({tenant_slug:t,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){ke(...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))},Re=["mousemove","keydown","scroll","touchstart"];Re.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(),!U){$=!0;return}ae()},pe=()=>{O(),i.contentWindow?.postMessage({type:"bitpalm-close"},"*")},Ne=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")},ct=()=>{R?pe():q()},dt=()=>R,We=e=>{if(!e||typeof e!="string")return;let s=e.trim().slice(0,1e4);s&&(R||q(),setTimeout(()=>{i.contentWindow?.postMessage({type:"bitpalm-send-message",message:s},"*")},R?50:500))};function De(){i.contentWindow?.postMessage({type:"bitpalm-theme",theme:b},"*")}let te=e=>{e!==b&&(b=e,De())},Fe=e=>{g=oe(e),c?.(),c=null,g==="auto"?(c=Ee(te),te(Y())):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!==t||Fe(oe(s.theme))};window.addEventListener("bitpalm-theme",Ue);let z={},je=e=>{if(!e||typeof e!="object"||Array.isArray(e))return;z={...z,...e};let s=JSON.stringify(z);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:z},"*")},mt=()=>{z={},i.contentWindow?.postMessage({type:"bitpalm-custom-context",data:{}},"*")},qe=e=>{let o=e.detail;if(!o||typeof o!="object")return;let h=d(o.slug,120);if(h&&h!==t)return;let{slug:A,...w}=o;je(w)};window.addEventListener("bitpalm-context",qe);let ze=e=>{let o=e.detail;if(!o||typeof o!="object")return;let h=d(o.slug,120);h&&h!==t||Ne(o)};window.addEventListener("bitpalm-identify",ze);let ge=e=>{let s=e.detail,o=d(s?.slug,120);return!o||o===t},Ye=e=>{ge(e)&&q()},Je=e=>{ge(e)&&pe()},Ge=e=>{if(!ge(e))return;let s=e.detail?.message;typeof s=="string"&&We(s)};return window.addEventListener("bitpalm-open",Ye),window.addEventListener("bitpalm-close",Je),window.addEventListener("bitpalm-send",Ge),{open:q,close:pe,toggle:ct,isOpen:dt,identify:Ne,context:je,resetContext:mt,send:We,on:(e,s)=>(P.has(e)||P.set(e,new Set),P.get(e).add(s),()=>P.get(e)?.delete(s)),off:(e,s)=>{P.get(e)?.delete(s)},setTheme:Fe,destroy:()=>{window.removeEventListener("message",Ae),window.removeEventListener("scroll",He),window.removeEventListener("popstate",ee),l.removeEventListener("mouseout",$e),l.removeEventListener("submit",Ie,!0),Re.forEach(e=>l.removeEventListener(e,fe)),clearTimeout(me),clearTimeout(ue),Pe.forEach(e=>clearTimeout(e)),history.pushState=ke,history.replaceState=Be,window.removeEventListener("bitpalm-identify",ze),window.removeEventListener("bitpalm-context",qe),window.removeEventListener("bitpalm-theme",Ue),window.removeEventListener("bitpalm-open",Ye),window.removeEventListener("bitpalm-close",Je),window.removeEventListener("bitpalm-send",Ge),c?.(),P.clear(),O(),C(),u.remove(),i.remove()}}}function kt(n){let t=(0,D.useRef)(null),r=(0,D.useRef)(!1);return(0,D.useEffect)(()=>{t.current?.setTheme(n.theme??"auto")},[n.theme]),(0,D.useEffect)(()=>{if(!r.current)return r.current=!0,t.current=lt(n),()=>{t.current?.destroy(),t.current=null,r.current=!1}},[]),null}0&&(module.exports={BitPalmAgent});
|
|
1
|
+
"use strict";var Ie=Object.defineProperty;var kt=Object.getOwnPropertyDescriptor;var Pt=Object.getOwnPropertyNames;var _t=Object.prototype.hasOwnProperty;var Mt=(n,t)=>{for(var r in t)Ie(n,r,{get:t[r],enumerable:!0})},Bt=(n,t,r,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let u of Pt(t))!_t.call(n,u)&&u!==r&&Ie(n,u,{get:()=>t[u],enumerable:!(i=kt(t,u))||i.enumerable});return n};var $t=n=>Bt(Ie({},"__esModule",{value:!0}),n);var tn={};Mt(tn,{BitPalmAgent:()=>Zt,BitPalmApiError:()=>B,useBitPalmChat:()=>en});module.exports=$t(tn);var E=require("react");function at(n){if(n===!1)return"off";if(typeof n=="string"){let t=n.trim().toLowerCase();if(["false","off","0","no","none"].includes(t))return"off";if(t==="events")return"events"}return"bubble"}function lt(n,t){let r=n.createElement("div");r.setAttribute("data-bitpalm-trigger",""),r.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:${t.zIndex-1};font-family:system-ui,sans-serif;animation:_bp_fade .3s;`,r.style.position="fixed",r.style.right="24px",r.style.bottom=`${t.bottom}px`;let i=n.createElement("p");i.style.cssText="font-size:14px;color:#1f2937;margin:0;",i.textContent=t.message;let u=n.createElement("div");u.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 g=n.createElement("button");return g.type="button",g.setAttribute("aria-label","Close"),g.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;",g.textContent="\u2715",g.onclick=p=>{p.stopPropagation(),t.onDismiss()},r.onclick=()=>t.onEngage(),r.append(i,u,g),r}var Ot=["dark","dark-mode","dark-theme","theme-dark"],Rt=["light","light-mode","light-theme","theme-light"],ut=["data-theme","data-color-scheme","data-color-mode","data-mode","data-bs-theme"],mt="(prefers-color-scheme: dark)";function ue(n){return n==="light"||n==="dark"?n:"auto"}function ct(n){if(!n)return null;if(Ot.some(t=>n.classList.contains(t)))return"dark";if(Rt.some(t=>n.classList.contains(t)))return"light";for(let t of ut){let r=(n.getAttribute(t)||"").toLowerCase();if(r.includes("dark"))return"dark";if(r.includes("light"))return"light"}return null}function Ae(n){let t=n/255;return t<=.03928?t/12.92:((t+.055)/1.055)**2.4}function dt(n,t){if(!n)return null;let r=t.getComputedStyle(n).backgroundColor.match(/rgba?\(([^)]+)\)/);if(!r)return null;let[i,u,g,p=1]=r[1].split(/[\s,/]+/).filter(Boolean).map(Number);return[i,u,g,p].some(c=>Number.isNaN(c))||p<.5?null:.2126*Ae(i)+.7152*Ae(u)+.0722*Ae(g)<.2?"dark":"light"}function Ht(n,t){let r=t.getComputedStyle(n.documentElement).colorScheme||"",i=n.querySelector('meta[name="color-scheme"]')?.getAttribute("content")||"",u=`${r} ${i}`.toLowerCase();return u.includes("dark")?u.includes("light")?t.matchMedia?.(mt).matches?"dark":"light":"dark":null}function Z(n=document,t=window){return ct(n.documentElement)??ct(n.body)??dt(n.body,t)??dt(n.documentElement,t)??Ht(n,t)??"light"}function Le(n,t=document,r=window){let i=Z(t,r),u=!1,g=()=>{u=!1;let d=Z(t,r);d!==i&&(i=d,n(d))},p=()=>{u||(u=!0,typeof r.requestAnimationFrame=="function"?r.requestAnimationFrame(g):setTimeout(g,16))},b=typeof MutationObserver<"u"?new MutationObserver(p):null,c={attributes:!0,attributeFilter:["class","style",...ut]};b?.observe(t.documentElement,c),t.body&&b?.observe(t.body,c);let w=typeof r.matchMedia=="function"?r.matchMedia(mt):null;return w?.addEventListener?.("change",p),()=>{b?.disconnect(),w?.removeEventListener?.("change",p)}}var Dt="https://agents.bitpalm.ai",A="_bp_",Ut=new Set(["password","file","checkbox","radio","submit","button","reset","image"]),Nt=8e3,ft=4096,gt=`${A}identify_signature`,pt=`${A}identify_fingerprint`,ht=`${A}identify_sent_at`,yt="0 4px 14px rgba(0,0,0,0.18)";function Wt(n){return[n.external_user_id||"",n.email||"",n.phone||"",n.name||"",n.company||"",n.signature||"",n.signed_at!=null?String(n.signed_at):"",n.signature_version||"",n.identify_source||""].join("|").toLowerCase()}function h(n,t=180){return n?n.replace(/\s+/g," ").trim().slice(0,t):""}function jt(n){return n?` ${n.toLowerCase().replace(/[_-]+/g," ").replace(/[^a-z0-9\s@.]/g," ").replace(/\s+/g," ").trim()} `:""}function Y(n,t){for(let r of t)if(n.includes(r))return!0;return!1}function D(n){return/^[^\s@]+@[^\s@]+\.[^\s@]{2,}$/i.test(n)}function R(n){let t=h(n,50);if(!t)return"";let r=t.startsWith("+"),i=t.replace(/\D/g,"");return i.length<6?"":`${r?"+":""}${i.slice(0,20)}`}function bt(n){let t=h(n,140).toLowerCase();return!t||!D(t)?"":t}function J(n,t){for(let r of t){let i=n.querySelector(r),u=h(i?.value);if(u)return u}return""}function Ft(n){return h(n.getAttribute("data-bp-field")||n.getAttribute("data-bitpalm-field"),64).toLowerCase().replace(/[_\s]+/g,"-")}function qt(n){return n.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}function zt(n,t){let r=[],i=(c,w=140)=>{let d=h(c,w);d&&r.push(d)};i(t.name),i(t.id),i(t.getAttribute("autocomplete")),i(t.getAttribute("placeholder")),i(t.getAttribute("aria-label")),i(t.getAttribute("data-field")),i(t.getAttribute("data-name")),i(t.getAttribute("data-label")),i(t.getAttribute("data-bp-field")),i(t.getAttribute("data-bitpalm-field"));let u=new Set,g=c=>{let w=h(c,200);!w||u.has(w)||(u.add(w),r.push(w))};for(let c of Array.from(t.labels||[]))g(c.textContent);if(t.id){let c=n.querySelector(`label[for="${qt(t.id)}"]`);g(c?.textContent)}let p=t.closest("label");g(p?.textContent);let b=t.getAttribute("aria-labelledby");if(b)for(let c of b.split(/\s+/)){if(!c)continue;let w=n.ownerDocument.getElementById(c);g(w?.textContent)}return r}function Yt(n){let t=h(J(n,["[data-bp-email]","[data-bitpalm-email]"]),140).toLowerCase(),r=R(J(n,["[data-bp-phone]","[data-bitpalm-phone]"])),i=h(J(n,["[data-bp-name]","[data-bitpalm-name]","[data-bp-full-name]","[data-bitpalm-full-name]"])),u=h(J(n,["[data-bp-first-name]","[data-bitpalm-first-name]"])),g=h(J(n,["[data-bp-last-name]","[data-bitpalm-last-name]"])),p=h(J(n,["[data-bp-company]","[data-bitpalm-company]"]));for(let d of Array.from(n.elements)){if(!(d instanceof HTMLInputElement||d instanceof HTMLTextAreaElement||d instanceof HTMLSelectElement)||d.disabled||d instanceof HTMLInputElement&&Ut.has(d.type.toLowerCase()))continue;let y=Ft(d),k=d.hasAttribute("data-bp-email")||d.hasAttribute("data-bitpalm-email")||d.hasAttribute("data-bp-phone")||d.hasAttribute("data-bitpalm-phone")||d.hasAttribute("data-bp-name")||d.hasAttribute("data-bitpalm-name")||d.hasAttribute("data-bp-full-name")||d.hasAttribute("data-bitpalm-full-name")||d.hasAttribute("data-bp-first-name")||d.hasAttribute("data-bitpalm-first-name")||d.hasAttribute("data-bp-last-name")||d.hasAttribute("data-bitpalm-last-name")||d.hasAttribute("data-bp-company")||d.hasAttribute("data-bitpalm-company")||!!y;if(d instanceof HTMLInputElement&&d.type.toLowerCase()==="hidden"&&!k)continue;let l=h(d.value);if(!l)continue;let m=d instanceof HTMLInputElement?d.type.toLowerCase():"",o=jt(zt(n,d).join(" "));if(!t&&y==="email"&&D(l)){t=l.toLowerCase();continue}if(!r&&(y==="phone"||y==="tel"||y==="mobile"||y==="whatsapp")){let I=R(l);if(I){r=I;continue}}if(!p&&y==="company"){p=h(l,160);continue}if(!u&&(y==="first-name"||y==="firstname")){u=h(l,100);continue}if(!g&&(y==="last-name"||y==="lastname"||y==="surname")){g=h(l,100);continue}if(!i&&(y==="name"||y==="full-name"||y==="fullname")){!D(l)&&!R(l)&&(i=h(l,140));continue}let v=m==="email"||Y(o,[" email "," e mail "," mail "," email adresse "," mailadresse "," correo "]),M=m==="tel"||Y(o,[" phone "," phone number "," mobile "," tel "," telefon "," telefonnummer "," whatsapp "," handy "," kontakt "," nummer "]),C=Y(o,[" company "," company name "," firma "," firmenname "," organization "," organisation "," business "," unternehmen "," agency "," brokerage "]),f=Y(o,[" first name "," firstname "," given name "," givenname "," vorname "," fname "]),T=Y(o,[" last name "," lastname "," family name "," familyname "," surname "," nachname "," lname "]),S=Y(o,[" full name "," fullname "," contact name "," name "])&&!v&&!M;if(!t&&v&&D(l)){t=l.toLowerCase();continue}if(!r&&M){let I=R(l);if(I){r=I;continue}}if(!p&&C){p=h(l,160);continue}if(!u&&f){u=h(l,100);continue}if(!g&&T){g=h(l,100);continue}if(!i&&S&&!D(l)&&!R(l)){i=h(l,140);continue}!t&&D(l)&&(t=l.toLowerCase())}if(i&&(D(i)||R(i))&&(i=""),p&&(D(p)||R(p))&&(p=""),i||(i=h([u,g].filter(Boolean).join(" "),140)),i&&t&&i.toLowerCase()===t.toLowerCase()&&(i=""),!!!(t||r)&&!!!(i&&p))return null;let w={...i?{name:i}:{},...t?{email:t}:{},...r?{phone:r}:{},...p?{company:p}:{}};return Object.keys(w).length>0?w:null}function Jt(){if(typeof document<"u"){let n=document.documentElement.lang;if(n)return n.slice(0,2).toLowerCase()}return"en"}function ke(n,t=1200){if(typeof window<"u"&&"requestIdleCallback"in window){window.requestIdleCallback(n,{timeout:t});return}setTimeout(n,Math.min(t,300))}function Pe(){if(typeof window>"u")return!1;let n=typeof navigator<"u"?navigator.userAgent:"";if(/Android|iPhone|iPad|iPod|IEMobile|Windows Phone|Mobile/i.test(n))return!0;let r=window.matchMedia("(pointer: coarse)").matches,i=window.matchMedia("(hover: none)").matches,u=Math.min(window.screen?.width||window.innerWidth,window.screen?.height||window.innerHeight);return r&&i&&u<=900}function vt(n){let{slug:t,locale:r=Jt(),baseUrl:i=Dt,token:u,zIndex:g=9999,autoIdentify:p=!0,launcher:b=!0}=n,c=document,w=ue(n.theme),d=w==="auto"?Z():w,y=null,k=at(n.triggers),l=k,m=null,o=c.createElement("iframe");o.setAttribute("data-bitpalm-chat","");let v=`${i}/t/${t}/widget`,M=new URLSearchParams({locale:r,theme:d});u&&M.set("token",u),l==="off"&&M.set("triggers","off"),o.src=`${v}?${M.toString()}`,o.allow="clipboard-write; microphone",o.setAttribute("allowtransparency","true"),o.loading="lazy",o.style.cssText=`position:fixed;bottom:0;right:0;width:1px;height:1px;border:none;z-index:${g};background:transparent;color-scheme:normal;opacity:0;pointer-events:none;`;let C=new URL(o.src).origin,f=c.createElement("div");if(f.setAttribute("role","button"),f.setAttribute("aria-label","Chat"),f.setAttribute("data-bitpalm-launcher",""),f.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:${g-1};background:#171717;box-shadow:${yt};transition:transform .2s,opacity .3s;opacity:0;`,f.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>',f.onmouseenter=()=>{f.style.transform="scale(1.05)"},f.onmouseleave=()=>{f.style.transform="scale(1)"},f.onclick=()=>Q(),b&&c.body.appendChild(f),!c.getElementById("_bp_fade")){let e=c.createElement("style");e.id="_bp_fade",e.textContent="@keyframes _bp_fade{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}",c.head.appendChild(e)}let T=null,S=!1,I=!1,U=!1,G=!1,ee=!1,te=()=>{U||(U=!0,c.body.appendChild(o))},ne=!1,fe=0,oe={overflow:"",overscrollBehavior:""},P={overflow:"",overscrollBehavior:"",position:"",top:"",left:"",right:"",width:""},_e=()=>{if(ne||!Pe())return;let s=c.documentElement,a=c.body;fe=window.scrollY||window.pageYOffset||0,oe.overflow=s.style.overflow,oe.overscrollBehavior=s.style.overscrollBehavior,P.overflow=a.style.overflow,P.overscrollBehavior=a.style.overscrollBehavior,P.position=a.style.position,P.top=a.style.top,P.left=a.style.left,P.right=a.style.right,P.width=a.style.width,s.style.overflow="hidden",s.style.overscrollBehavior="none",a.style.overflow="hidden",a.style.overscrollBehavior="none",a.style.position="fixed",a.style.top=`-${fe}px`,a.style.left="0",a.style.right="0",a.style.width="100%",ne=!0},q=()=>{if(!ne)return;let e=c.documentElement,s=c.body;e.style.overflow=oe.overflow,e.style.overscrollBehavior=oe.overscrollBehavior,s.style.overflow=P.overflow,s.style.overscrollBehavior=P.overscrollBehavior,s.style.position=P.position,s.style.top=P.top,s.style.left=P.left,s.style.right=P.right,s.style.width=P.width,window.scrollTo(0,fe),ne=!1},Me=()=>{let e=Pe();o.style.display==="none"&&(o.style.display=""),e?(o.style.width="100vw",o.style.height="100dvh",o.style.left="0",o.style.top="0",o.style.bottom="0",o.style.right="0",_e()):(o.style.width="420px",o.style.height="620px",o.style.bottom="24px",o.style.right="24px",o.style.left="",o.style.top="",q()),o.style.opacity="1",o.style.pointerEvents="auto"},H=()=>{T&&(T.remove(),T=null)},re=()=>{m!==null&&(m=null,K("trigger_hidden"))},Be=()=>{o.contentWindow?.postMessage({type:"bitpalm-triggers",enabled:l!=="off"},"*")},ie=()=>{},ge=()=>{},z=!1,N=new Map;function K(e,s){let a=N.get(e);if(a)for(let x of a)try{x(s)}catch{}}let $e=e=>{if(e.origin===C){if(e.data?.type==="bitpalm-widget-config"){I=!1,S=!0,o.style.display==="none"&&(o.style.display=""),e.data.primaryColor&&(f.style.background=e.data.primaryColor,f.style.boxShadow=e.data.chatShadow==="none"?"none":yt);let s=e.data.chatButtonIconColor||"black";if(e.data.chatButtonIconSvg){f.innerHTML="";let a=c.createElement("span");a.style.cssText=`display:flex;align-items:center;justify-content:center;width:24px;height:24px;color:${s}`;let L=new DOMParser().parseFromString(e.data.chatButtonIconSvg,"image/svg+xml").querySelector("svg");L?(L.querySelectorAll("script,foreignObject").forEach(j=>j.remove()),L.querySelectorAll("*").forEach(j=>{for(let F of[...j.attributes])(F.name.startsWith("on")||F.value&&F.value.includes("javascript:"))&&j.removeAttribute(F.name)}),L.setAttribute("width","24"),L.setAttribute("height","24"),L.style.display="block",a.appendChild(L)):a.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>',f.appendChild(a)}else{let a=f.querySelector("svg");a&&(a.style.stroke=s)}b&&(f.style.display="flex",requestAnimationFrame(()=>{f.style.opacity="1"})),Be()}if(e.data?.type==="bitpalm-widget-resize"){let s=e.data.width>0,a=z;z=s,s&&!a&&K("widget_opened"),!s&&a&&K("widget_closed");let x=Pe();s?(o.style.width=x?"100vw":`${e.data.width}px`,o.style.height=x?"100dvh":`${e.data.height}px`,x?(o.style.left="0",o.style.top="0",o.style.bottom="0",o.style.right="0",_e()):q(),o.style.opacity="1",o.style.pointerEvents="auto"):(q(),o.style.width="1px",o.style.height="1px",o.style.left="",o.style.top="",o.style.opacity="0",o.style.pointerEvents="none"),f.style.display=s||!b?"none":"flex"}if(e.data?.type==="bitpalm-trigger-show"){if(I||!S||l==="off")return;let s=typeof e.data.message=="string"?e.data.message:"";if(!s)return;if(l==="events"){m=s,K("trigger_shown",{message:s,triggerId:e.data.triggerId,triggerType:e.data.triggerType});return}H(),T=lt(c,{message:s,zIndex:g,bottom:b?90:24,onDismiss:()=>{H(),o.contentWindow?.postMessage({type:"bitpalm-trigger-dismiss"},"*")},onEngage:()=>{if(H(),f.style.display="none",Me(),te(),!G){ee=!0;return}o.contentWindow?.postMessage({type:"bitpalm-trigger-engaged",message:s},"*")}}),c.body.appendChild(T)}e.data?.type==="bitpalm-trigger-hide"&&(H(),re()),e.data?.type==="bitpalm-request-context"&&ie(),e.data?.type==="bitpalm-chat-event"&&e.data.event&&K(e.data.event,e.data.data),e.data?.type==="bitpalm-widget-blocked"&&(I=!0,S=!1,f.style.display="none",H(),re(),q(),o.style.display="none")}};window.addEventListener("message",$e);let $=!1;try{$=localStorage.getItem(`${A}optout`)==="1"}catch{}let se=`${A}vid`,_="";if(!$){try{_=localStorage.getItem(se)||""}catch{}if(!_){let e=c.cookie.match(new RegExp(`(?:^|; )${se}=([^;]+)`));_=e?decodeURIComponent(e[1]):""}_||(_=crypto.randomUUID?crypto.randomUUID():`${Date.now()}-${Math.random().toString(36).slice(2,11)}`);try{localStorage.setItem(se,_)}catch{}try{c.cookie=`${se}=${encodeURIComponent(_)};path=/;max-age=31536000;SameSite=Lax`}catch{}}$||ke(()=>{try{let e=new URLSearchParams(location.search),s={};for(let O of["utm_source","utm_medium","utm_campaign","utm_term","utm_content"]){let L=e.get(O);L&&(s[O]=L)}let a=JSON.stringify({tenant_slug:t,visitor_id:_,url:location.href,referrer:c.referrer||void 0,...Object.keys(s).length>0?{utm:s}:{}}),x=`${i}/api/widget/impression`;typeof navigator.sendBeacon=="function"?navigator.sendBeacon(x,new Blob([a],{type:"application/json"})):fetch(x,{method:"POST",body:a,headers:{"Content-Type":"application/json"},keepalive:!0}).catch(()=>{})}catch{}},2e3);let pe="",he="",ye=0;try{pe=sessionStorage.getItem(gt)||"",he=sessionStorage.getItem(pt)||"";let e=parseInt(sessionStorage.getItem(ht)||"0",10);Number.isFinite(e)&&e>0&&(ye=e)}catch{}let Oe=(e,s="")=>{if($||!_)return;let a={},x=h(e.name,140),O=bt(e.email),L=R(e.phone),j=h(e.company,160),F=h(e.external_user_id,140),rt=h(e.signature,260),Se=Number(e.signed_at);if(x&&(a.name=x),O&&(a.email=O),L&&(a.phone=L),j&&(a.company=j),F&&(a.external_user_id=F),rt&&(a.signature=rt),Number.isFinite(Se)&&Se>0&&(a.signed_at=Math.floor(Se)),(e.signature_version==="v1"||a.signature)&&(a.signature_version="v1"),(e.identify_source==="manual"||e.identify_source==="form")&&(a.identify_source=e.identify_source),!a.name&&!a.email&&!a.phone&&!a.company&&!a.external_user_id)return;let de=Wt(a),Te=[s.toLowerCase(),de].filter(Boolean).join("|"),Ce=Date.now();if(!(Ce-ye<Nt&&(Te===pe||de===he))){pe=Te,he=de,ye=Ce;try{sessionStorage.setItem(gt,Te),sessionStorage.setItem(pt,de),sessionStorage.setItem(ht,String(Ce))}catch{}try{let it=JSON.stringify({tenant_slug:t,visitor_id:_,url:location.href,referrer:c.referrer||void 0,...a}),st=`${i}/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{}}},Re=e=>{if($||!p||!_)return;let s=e.target instanceof HTMLFormElement?e.target:e.target instanceof Element?e.target.closest("form"):null;if(!(s instanceof HTMLFormElement))return;let a=(s.getAttribute("data-bp-identify")||s.getAttribute("data-bitpalm-identify")||"").toLowerCase();if(a==="off"||a==="false"||a==="0")return;let x=Yt(s);if(!x)return;let O=[s.getAttribute("id")||"",s.getAttribute("name")||"",s.getAttribute("action")||""].join("|");Oe({...x,identify_source:"form"},O)};!$&&p&&c.addEventListener("submit",Re,!0);let V=parseInt(sessionStorage.getItem(`${A}pages`)||"0")+1;sessionStorage.setItem(`${A}pages`,String(V));let W=JSON.parse(sessionStorage.getItem(`${A}hist`)||"[]");W.push(location.href),W.length>20&&(W=W.slice(-20)),sessionStorage.setItem(`${A}hist`,JSON.stringify(W));let He=Date.now(),ae=parseInt(sessionStorage.getItem(`${A}site_start`)||"0");ae||(ae=He,sessionStorage.setItem(`${A}site_start`,String(ae)));let De=[];ie=()=>{let e=!1;try{e=!!localStorage.getItem(`${A}visited`)}catch{e=!1}if(o.contentWindow?.postMessage({type:"bitpalm-parent-context",url:location.href,title:c.title,returning:e,pageCount:V,pageHistory:W,loadedAt:He,siteStart:ae,locale:r,visitorId:$?"":_},"*"),Ke(),!e&&!$)try{localStorage.setItem(`${A}visited`,"1")}catch{}},o.addEventListener("load",()=>{G=!0,ie(),[120,450,1100].forEach(e=>{let s=setTimeout(()=>ie(),e);De.push(s)}),ee&&(ee=!1,ge())}),c.readyState==="loading"?c.addEventListener("DOMContentLoaded",()=>ke(te,1600),{once:!0}):ke(te,1600);let Ue=history.pushState.bind(history),Ne=history.replaceState.bind(history),le=()=>{V++,sessionStorage.setItem(`${A}pages`,String(V));let e=JSON.parse(sessionStorage.getItem(`${A}hist`)||"[]");if(e.push(location.href),e.length>20&&e.splice(0,e.length-20),W=e,sessionStorage.setItem(`${A}hist`,JSON.stringify(e)),o.contentWindow?.postMessage({type:"bitpalm-page-change",url:location.href,title:c.title,pageCount:V,pageHistory:e,loadedAt:Date.now()},"*"),!$)try{let s=JSON.stringify({tenant_slug:t,visitor_id:_,url:location.href}),a=`${i}/api/widget/impression`;typeof navigator.sendBeacon=="function"?navigator.sendBeacon(a,new Blob([s],{type:"application/json"})):fetch(a,{method:"POST",body:s,headers:{"Content-Type":"application/json"},keepalive:!0}).catch(()=>{})}catch{}};history.pushState=function(...e){Ue(...e),le()},history.replaceState=function(...e){Ne(...e),le()},window.addEventListener("popstate",le);let We=-1,be,je=()=>{clearTimeout(be),be=setTimeout(()=>{let e=Math.max(c.documentElement.scrollHeight,c.body.scrollHeight)-window.innerHeight,s=e>0?Math.round(window.scrollY/e*100):100;s!==We&&(We=s,o.contentWindow?.postMessage({type:"bitpalm-scroll-depth",percent:s},"*"))},500)};window.addEventListener("scroll",je,{passive:!0});let Fe=e=>{e.clientY<=0&&o.contentWindow?.postMessage({type:"bitpalm-exit-intent"},"*")};c.addEventListener("mouseout",Fe);let ve,qe=!1,we=()=>{clearTimeout(ve),!qe&&(ve=setTimeout(()=>{qe=!0,o.contentWindow?.postMessage({type:"bitpalm-inactivity"},"*")},15e3))},ze=["mousemove","keydown","scroll","touchstart"];ze.forEach(e=>c.addEventListener(e,we,{passive:!0})),we(),ge=()=>{o.contentWindow?.postMessage({type:"bitpalm-open"},"*");let e=o.src.split("#")[0];o.src=`${e}#bp-open-${Date.now()}`};let Q=()=>{if(f.style.display="none",H(),Me(),te(),!G){ee=!0;return}if(m!==null){let e=m;re(),o.contentWindow?.postMessage({type:"bitpalm-trigger-engaged",message:e},"*");return}ge()},Ye=e=>{l=e,e==="off"&&(H(),re()),Be()},Tt=()=>Ye("off"),Ct=()=>Ye(k==="off"?"bubble":k),xe=()=>{q(),o.contentWindow?.postMessage({type:"bitpalm-close"},"*")},Je=e=>{!e||typeof e!="object"||Oe({external_user_id:h(e.externalUserId,140)||void 0,name:h(e.name,140)||void 0,email:bt(e.email)||void 0,phone:R(e.phone)||void 0,company:h(e.company,160)||void 0,signature:h(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")},It=()=>{z?xe():Q()},At=()=>z,Ge=e=>{if(!e||typeof e!="string")return;let s=e.trim().slice(0,1e4);s&&(z||Q(),setTimeout(()=>{o.contentWindow?.postMessage({type:"bitpalm-send-message",message:s},"*")},z?50:500))};function Ke(){o.contentWindow?.postMessage({type:"bitpalm-theme",theme:d},"*")}let ce=e=>{e!==d&&(d=e,Ke())},Ve=e=>{w=ue(e),y?.(),y=null,w==="auto"?(y=Le(ce),ce(Z())):ce(w)};w==="auto"&&(y=Le(ce));let Qe=e=>{let s=e.detail;if(!s||typeof s!="object")return;let a=h(s.slug,120);a&&a!==t||Ve(ue(s.theme))};window.addEventListener("bitpalm-theme",Qe);let X={},Xe=e=>{if(!e||typeof e!="object"||Array.isArray(e))return;X={...X,...e};let s=JSON.stringify(X);s.length>ft&&console.warn(`[BitPalm] Custom context exceeds ${ft} bytes (${s.length}). It may be truncated.`),o.contentWindow?.postMessage({type:"bitpalm-custom-context",data:X},"*")},Lt=()=>{X={},o.contentWindow?.postMessage({type:"bitpalm-custom-context",data:{}},"*")},Ze=e=>{let a=e.detail;if(!a||typeof a!="object")return;let x=h(a.slug,120);if(x&&x!==t)return;let{slug:O,...L}=a;Xe(L)};window.addEventListener("bitpalm-context",Ze);let et=e=>{let a=e.detail;if(!a||typeof a!="object")return;let x=h(a.slug,120);x&&x!==t||Je(a)};window.addEventListener("bitpalm-identify",et);let Ee=e=>{let s=e.detail,a=h(s?.slug,120);return!a||a===t},tt=e=>{Ee(e)&&Q()},nt=e=>{Ee(e)&&xe()},ot=e=>{if(!Ee(e))return;let s=e.detail?.message;typeof s=="string"&&Ge(s)};return window.addEventListener("bitpalm-open",tt),window.addEventListener("bitpalm-close",nt),window.addEventListener("bitpalm-send",ot),{open:Q,close:xe,toggle:It,isOpen:At,identify:Je,context:Xe,resetContext:Lt,send:Ge,on:(e,s)=>(N.has(e)||N.set(e,new Set),N.get(e).add(s),()=>N.get(e)?.delete(s)),off:(e,s)=>{N.get(e)?.delete(s)},setTheme:Ve,disableTriggers:Tt,enableTriggers:Ct,destroy:()=>{window.removeEventListener("message",$e),window.removeEventListener("scroll",je),window.removeEventListener("popstate",le),c.removeEventListener("mouseout",Fe),c.removeEventListener("submit",Re,!0),ze.forEach(e=>c.removeEventListener(e,we)),clearTimeout(be),clearTimeout(ve),De.forEach(e=>clearTimeout(e)),history.pushState=Ue,history.replaceState=Ne,window.removeEventListener("bitpalm-identify",et),window.removeEventListener("bitpalm-context",Ze),window.removeEventListener("bitpalm-theme",Qe),window.removeEventListener("bitpalm-open",tt),window.removeEventListener("bitpalm-close",nt),window.removeEventListener("bitpalm-send",ot),y?.(),N.clear(),q(),H(),f.remove(),o.remove()}}}function Gt(n){let t=n.split(`
|
|
2
|
+
`).filter(r=>r.startsWith("data:")).map(r=>r.slice(5).trimStart()).join(`
|
|
3
|
+
`);if(!t)return null;try{let r=JSON.parse(t);return r&&typeof r.type=="string"?r:null}catch{return null}}function me(n){let t=[],r=n.replace(/\r\n/g,`
|
|
4
|
+
`),i=r.indexOf(`
|
|
5
|
+
|
|
6
|
+
`);for(;i>=0;){let u=Gt(r.slice(0,i));u&&t.push(u),r=r.slice(i+2),i=r.indexOf(`
|
|
7
|
+
|
|
8
|
+
`)}return{events:t,rest:r}}function wt(n){return me(`${n}
|
|
9
|
+
|
|
10
|
+
`).events}var B=class extends Error{constructor(r,i,u){super(i);this.code=r;this.status=u;this.name="BitPalmApiError"}},Kt="https://agents.bitpalm.ai";function Vt(){try{return typeof localStorage>"u"?null:localStorage}catch{return null}}function Qt(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():`v-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,12)}`}async function Xt(n){let t=await n.json().catch(()=>null);return new B(t?.error?.code??"server_error",t?.error?.message??`Request failed (${n.status})`,n.status)}function xt(n){if(!n?.key?.startsWith("bp_pk_"))throw new Error("createChatClient needs an app key (bp_pk_\u2026) from the BitPalm dashboard.");let t=(n.baseUrl??Kt).replace(/\/+$/,""),r=n.storage===void 0?Vt():n.storage,i=`bitpalm:${n.key.slice(0,14)}`,u=l=>{try{return r?.getItem(`${i}:${l}`)??null}catch{return null}},g=(l,m)=>{try{m===null?r?.removeItem(`${i}:${l}`):r?.setItem(`${i}:${l}`,m)}catch{}},p=n.visitorId??u("visitor")??Qt();n.visitorId||g("visitor",p);let b=u("conversation"),c=!1,w={Authorization:`Bearer ${n.key}`},d=async(l,m)=>{let o=await fetch(`${t}${l}`,{...m,headers:{...w,...m?.headers??{}}});if(!o.ok)throw await Xt(o);return o},y=l=>{b=l,g("conversation",l)},k=(l,m,o)=>{for(let v of l)if(v.type==="delta")m.text+=v.text,o?.(v.text,m.text);else if(v.type==="replace")m.text=v.text,o?.("",m.text);else if(v.type==="done")m.result={text:m.text,conversationId:v.conversationId,...v.cards?{cards:v.cards}:{},...v.handoff?{handoff:!0}:{}};else if(v.type==="error")throw new B("server_error",v.message,500)};return{visitorId:p,get conversationId(){return b},get handoff(){return c},async agent(l){let m=new URLSearchParams({locale:n.locale??"en"});return l?.url&&m.set("url",l.url),(await d(`/api/v1/agent?${m.toString()}`)).json()},async send(l,m={}){let o=await d("/api/v1/chat",{method:"POST",headers:{"Content-Type":"application/json"},signal:m.signal,body:JSON.stringify({message:l,visitorId:p,conversationId:b??void 0,context:m.context,fileIds:m.fileIds})}),v={text:"",result:null},M=o.body&&typeof o.body.getReader=="function"?o.body.getReader():null;if(M){let f=new TextDecoder,T="";for(;;){let{done:S,value:I}=await M.read();if(S)break;let U=me(T+f.decode(I,{stream:!0}));T=U.rest,k(U.events,v,m.onDelta)}k(me(`${T}
|
|
11
|
+
|
|
12
|
+
`).events,v,m.onDelta)}else k(wt(await o.text()),v,m.onDelta);let C=v.result??{text:v.text,conversationId:b??""};return C.conversationId&&y(C.conversationId),c=C.handoff===!0,C},async history(){let l=new URLSearchParams({visitorId:p});b&&l.set("conversationId",b);let m=await(await d(`/api/v1/chat/history?${l.toString()}`)).json();return m.conversationId&&y(m.conversationId),c=m.handoff===!0,m.messages},async identify(l){await d("/api/v1/identify",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...l,visitorId:p})})},async upload(l,m="photo.jpg"){let o=new FormData;o.append("file",l,m),o.append("visitorId",p),b&&o.append("conversationId",b);let v=await(await d("/api/v1/chat/upload",{method:"POST",body:o})).json();return{id:v.id,url:v.url}},async feedback(l,m){if(!b)throw new B("bad_request","There is no conversation yet.",400);await d("/api/v1/chat/feedback",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({visitorId:p,conversationId:b,messageIndex:l,feedback:m})})},reset(){y(null),c=!1}}}function Zt(n){let t=(0,E.useRef)(null),r=(0,E.useRef)(!1);return(0,E.useEffect)(()=>{t.current?.setTheme(n.theme??"auto")},[n.theme]),(0,E.useEffect)(()=>{if(r.current)return;r.current=!0;let{onReady:i,...u}=n;return t.current=vt(u),i?.(t.current),()=>{t.current?.destroy(),t.current=null,r.current=!1}},[]),null}function Et(n,t){return[...n.slice(0,-1),t]}function St(n){let t=n[n.length-1];return t?.role==="assistant"&&!t.text&&!t.cards?.length?n.slice(0,-1):n}function en(n){let[t]=(0,E.useState)(()=>xt(n)),[r,i]=(0,E.useState)([]),[u,g]=(0,E.useState)("idle"),[p,b]=(0,E.useState)(null),[c,w]=(0,E.useState)(null),[d,y]=(0,E.useState)(!1),k=(0,E.useRef)(!1),l=(0,E.useRef)(0),m=n.loadHistory!==!1;(0,E.useEffect)(()=>{let C=!0;return t.agent().then(f=>C&&w(f)).catch(()=>{}),m&&t.history().then(f=>{C&&(i(T=>T.length?T:f),y(t.handoff))}).catch(()=>{}),()=>{C=!1}},[t,m]);let o=(0,E.useCallback)(async(C,f={})=>{let T=C.trim();if(!T&&!f.fileIds?.length)return null;i(S=>[...S,{role:"user",text:T},{role:"assistant",text:""}]),g("streaming"),b(null),k.current=!0,l.current+=1;try{let S=await t.send(T,{...f,onDelta:(I,U)=>i(G=>Et(G,{role:"assistant",text:U}))});return i(I=>St(Et(I,{role:"assistant",text:S.text,...S.cards?{cards:S.cards}:{}}))),y(S.handoff===!0),g("idle"),S}catch(S){let I=S instanceof B?S:new B("network_error",String(S),0);return i(St),b(I),g("error"),null}finally{k.current=!1}},[t]),v=(0,E.useCallback)(async()=>{if(k.current)return;let C=l.current,f=await t.history();k.current||l.current!==C||(i(f),y(t.handoff))},[t]),M=(0,E.useCallback)(()=>{t.reset(),i([]),b(null),y(!1),g("idle")},[t]);return{messages:r,send:o,status:u,error:p,agent:c,handoff:d,refresh:v,reset:M,client:t}}0&&(module.exports={BitPalmAgent,BitPalmApiError,useBitPalmChat});
|
|
2
13
|
//# sourceMappingURL=react.cjs.map
|