brainerce 1.50.0 → 1.52.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.
@@ -1,5 +1,5 @@
1
- "use strict";(()=>{var D="https://api.brainerce.com",U=new Set(["he","ar"]),L={en:{online:"Online",placeholder:"Ask anything\u2026",error:"Something went wrong \u2014 please try again.",leaveMessage:"Leave a message for the team",yourEmail:"Your email",yourMessage:"Your message",send:"Send",sent:"Thanks! The team will get back to you by email.",close:"Close",expand:"Expand",collapse:"Collapse",searching:"Searching the store\u2026",addToCart:"Add to cart",added:"Added",view:"View",chooseOptions:"View product",results:"From the store",poweredBy:"Powered by Brainerce",addFailed:"I couldn\u2019t add that to the cart \u2014 try the button on the product card."},he:{online:"\u05DE\u05D7\u05D5\u05D1\u05E8",placeholder:"\u05E9\u05D0\u05DC\u05D5 \u05D0\u05D5\u05EA\u05D9 \u05D4\u05DB\u05DC\u2026",error:"\u05DE\u05E9\u05D4\u05D5 \u05D4\u05E9\u05EA\u05D1\u05E9 \u2014 \u05E0\u05E1\u05D5 \u05E9\u05D5\u05D1.",leaveMessage:"\u05D4\u05E9\u05D0\u05D9\u05E8\u05D5 \u05D4\u05D5\u05D3\u05E2\u05D4 \u05DC\u05E6\u05D5\u05D5\u05EA",yourEmail:"\u05D4\u05D0\u05D9\u05DE\u05D9\u05D9\u05DC \u05E9\u05DC\u05DB\u05DD",yourMessage:"\u05D4\u05D4\u05D5\u05D3\u05E2\u05D4 \u05E9\u05DC\u05DB\u05DD",send:"\u05E9\u05DC\u05D9\u05D7\u05D4",sent:"\u05EA\u05D5\u05D3\u05D4! \u05D4\u05E6\u05D5\u05D5\u05EA \u05D9\u05D7\u05D6\u05D5\u05E8 \u05D0\u05DC\u05D9\u05DB\u05DD \u05D1\u05DE\u05D9\u05D9\u05DC.",close:"\u05E1\u05D2\u05D9\u05E8\u05D4",expand:"\u05D4\u05E8\u05D7\u05D1\u05D4",collapse:"\u05DB\u05D9\u05D5\u05D5\u05E5",searching:"\u05DE\u05D7\u05E4\u05E9 \u05D1\u05D7\u05E0\u05D5\u05EA\u2026",addToCart:"\u05D4\u05D5\u05E1\u05E4\u05D4 \u05DC\u05E1\u05DC",added:"\u05E0\u05D5\u05E1\u05E3",view:"\u05E6\u05E4\u05D9\u05D9\u05D4",chooseOptions:"\u05DC\u05E6\u05E4\u05D5\u05EA \u05D1\u05DE\u05D5\u05E6\u05E8",results:"\u05DE\u05EA\u05D5\u05DA \u05D4\u05D7\u05E0\u05D5\u05EA",poweredBy:"\u05DE\u05D5\u05E4\u05E2\u05DC \u05E2\u05DC \u05D9\u05D3\u05D9 Brainerce",addFailed:"\u05DC\u05D0 \u05D4\u05E6\u05DC\u05D7\u05EA\u05D9 \u05DC\u05D4\u05D5\u05E1\u05D9\u05E3 \u05DC\u05E1\u05DC \u2014 \u05E0\u05E1\u05D5 \u05D3\u05E8\u05DA \u05D4\u05DB\u05E4\u05EA\u05D5\u05E8 \u05D1\u05DB\u05E8\u05D8\u05D9\u05E1 \u05D4\u05DE\u05D5\u05E6\u05E8."}},H={chat:'<svg viewBox="0 0 24 24" fill="none"><path d="M12 3C7.03 3 3 6.58 3 11c0 2.04.86 3.9 2.28 5.32-.15 1.23-.62 2.39-1.1 3.21-.13.23.05.52.31.47 1.56-.27 3.07-.93 4.13-1.62A10.6 10.6 0 0 0 12 19c4.97 0 9-3.58 9-8s-4.03-8-9-8Z" fill="currentColor"/></svg>',close:'<svg viewBox="0 0 24 24" fill="none"><path d="M6 6l12 12M18 6L6 18" stroke="currentColor" stroke-width="2" stroke-linecap="round"/></svg>',expand:'<svg viewBox="0 0 24 24" fill="none"><path d="M14 4h6v6M10 20H4v-6M20 4l-7 7M4 20l7-7" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/></svg>',collapse:'<svg viewBox="0 0 24 24" fill="none"><path d="M20 10h-6V4M4 14h6v6M20 4l-6 6M4 20l6-6" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/></svg>',mail:'<svg viewBox="0 0 24 24" fill="none"><rect x="3.5" y="5.5" width="17" height="13" rx="2.5" stroke="currentColor" stroke-width="1.7"/><path d="m4.5 7.5 7.5 5.5 7.5-5.5" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round"/></svg>',send:'<svg viewBox="0 0 24 24" fill="none"><path d="M4.4 11.2 19 4.6c.7-.3 1.4.4 1.1 1.1l-6.6 14.6c-.3.7-1.3.6-1.5-.1l-1.7-5.4a1 1 0 0 0-.6-.6l-5.4-1.7c-.7-.2-.8-1.2-.1-1.5Z" fill="currentColor"/></svg>',cart:'<svg viewBox="0 0 24 24" fill="none"><path d="M3 4h2l2.4 11.2A2 2 0 0 0 9.36 17H17.5a2 2 0 0 0 1.95-1.55L21 8H6" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/><circle cx="10" cy="20.5" r="1.4" fill="currentColor"/><circle cx="17" cy="20.5" r="1.4" fill="currentColor"/></svg>',check:'<svg viewBox="0 0 24 24" fill="none"><path d="m5 12.5 4.5 4.5L19 7.5" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"/></svg>',arrow:'<svg viewBox="0 0 24 24" fill="none"><path d="M7 17 17 7M9 7h8v8" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/></svg>',sparkle:'<svg viewBox="0 0 24 24" fill="none"><path d="M12 3v2M12 19v2M3 12h2M19 12h2M6.34 6.34l1.42 1.42M16.24 16.24l1.42 1.42M6.34 17.66l1.42-1.42M16.24 7.76l1.42-1.42" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"/><circle cx="12" cy="12" r="3.5" fill="currentColor"/></svg>'},j="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAACXBIWXMAAAPoAAAD6AG1e1JrAAARlElEQVR42pVZB1RU19rdM0NvIzAw1GfDDqj0XgQUo0LQDCrGaKLRREHFFqNEYoqap0lejMZn9FmiJv7E3hUMIkUgiJRhCkOZDgIaxUbT+c+5M4Ok/H/Wu2vdhWvOzD377m9/+/vOJ/B/X6xsZJvsQ7ZVLvZxK5HjlIcL7mdwe8hZVI/KgXDsXtSO3wmx/1bUBm60bAxab9cYtIDb4J/ClfvFmkrHu9gIx9raVo7g8quGWtiXe1pZFbgiOp+H5DODkPCDNRIzzIFsNt0L/+XFJuDMzuKAbRlOO4px1q0CN4bfQN24S2gIuARJ+CFI4vZDkXACj+P3oTd+CdRxCaiLGglFhCsaIyLxLGyoSU+QCQHO5Yr9nYY0jTcbIR2DiJphSCn1gOCWE+JzuBDkWCKjH+jfXwIIOIeQbUFZq8I1ZwmuDRWh2LsRwqBSSCZdQeO0WnRNr4du+kXcF2wy/WXRFJNvVh9cKEwvPt750eUjbZtP7Xma4T/0xGJr02Npjtz2WAtbXRh4ymjrOFWMZWJ9CN6S+GKZ0AuZJe5YnuuIdWdtkZlpiehok78F9yUyLSk4IS66yHDVS44SvyaIoqsgnqHE0xQ1dKnbTM5nhtilH+Q5TiuEfajCeWTcr319vXU6/fX84aPfqq08o+rAC5fDIa5oRMCmr+atf5YKjiyWE6t6DQubpiBDHIYssY/5ptKh2HHNGbmEzexsK3ITkLo/h5yElIaVYU6EK66NyB3ZgtvBTaiaIof8DR0Btsvk5PpR3NmX2E6hCjgFdHDcwu7Bwlu785vDRQRYd3d3LwX48stvj9TC1Fth5hmjgukY7b5DJ1Tk85bS2oc7Iza0zkW6bhpnrSYZWyRx2FY/0Xx3iRcu5rggdx8XO3ZYIzr7T0yyjMyJcMq1GdfH3EdZaCPuTutGy+xHUL4zyeb94xynUCWcA9vhHKpiOxN2HEPVTsPjJE8eP1Ea2NO9ePGibaR/ihTcQBWcQjROXgk1XV1dcuP6o87OKtvgFbuxUryQ88XT17FVNBn/Fgfgp1sj+0F+ScItEHD6weWQhCgiCSFEjksTrozqQEWIAiUzdGidW8ouWOXOnVYMZ//7LAKM5USAEaAclwglzH3V67O+ukv2ffbixUu6/9OTp68KYemjMPWMVsJsnCr78z0SPbs9DLunL+Q1w3JcO3vEtHIsvZ6OA52vY7cwEcfvBuHC9RHIN4DMzraAjoQ6h+juGnZYV+A8j2quAyVBapRN10GTdpF97gM7xxgRZY1tAEZuFYvP/FVb8MNkSpWmWffq0vpFpVWAG6Bl8cNVps4hYo2mhWH35Uv9elDMPCFs/ZRsp+A2eMZIsfLkOvzYmYLD5VNxtigAV696ofgHZxz4wpawaEYAfmlZiO/sCThPNYonalA2RYeGuWXsvDVch2ghAXeP7RwmJ2FVGm+Oa7gSVr6aNxdvrCGbdvb1vWB2Ly69KyOfy0w9olSw8FUtTt9STVnt6WW0qfvlZmkFYbeJ7RqhBn2mY2ArA/Lzi5nIk7+BnwsmI/fyRBTkDEVJjgN+WGONyzhq14hzfKq7NlRGP8Td1B5IlwzlTivqZ24AOHqz+GEq2E5srKispQD6DOF9PGve6loCUM1xIwDsJkrr6uoZdnv7+pjsTklbLYHVeBVZVzDPcglrhkNgG0aTcJ+++y6uFAqQdzEW+ae8UfSjG3K3c1GGI47NuDJEi+JABUqTdWifN9Nq+VGiuQ4mEZx+D47tEqaA9QR1ZOI7lL0HLw2xk0ibFGyHQBnbJVwF6/GaxJnL6PpjkjTMukjUoGE5BDaAvBxr4AtTkPYBHZi8hBSnmnm4cnEmCs+FoPz4MJzfx0MNYU+OvLEq/Bqjgyz1EvvnjaY8Qj8/VEUeoPgjewwAKx/51eu3KDsvDOHrzli7tQZm3iomvJY+8txfSkR0oaeHWe9JX7NVBHNvFcc1QvnHZ5JsVxGgKvxrdzaEV+bi5o8JKDs8DgVHXUG110a0p8/ae/MjbOadBz+gjeX859Cy+WFKkgCasSFv0M0fGDPj/v0H7Tyv+EaykRKDArXeoalC8nHbS8N6a2t7i41HpITlEq4hz/jTSzNEDCKhjhBchSJ3AW7vn4lf9weh+NhgCtCLJEcYSYyUAvbFtRaOETLCnlr/ZobbmBxuESpwRsv3H/yZWsdLg3W82LHrsAQm4+SMMZuNUxz+4XQdw66Bvc/+uU8K07Eqjq0fsalgNYuC1D9X9YrFYDXcIuQ4/MVGyA+/gdt7Y1B0YBQ0yB+twm0S3jbBAsu1+0mFuMeib0TsxHAzIJnEcAjSOHvFU2PWGNnr7up6NGzCDCnsA9VwDFJ7jpsq6Xre1WFcf/78eYfb6CkN1h5Rjdu+PljEdY+Uke9qWX9kkk/2tA9ux/y0o3h8OBUluxNRsc8Hjbjpo0HpZB1Ub47izrwJflAbS6891cA3ZKzFbKxq87a9MsqOgT1dzumrcpga2fNWbdm6VzSAvb5j/3OxHvBULk7/mH7+5NfKWqGNe7gUvGBNP0gnQ5jtg+8hKLEY2m8XoGLndFR860cYLPHrRd1rIhQut3WMJaZMfvh7+o1/tSz7AJFKpRUyO+u977eIxLdlxHhp2Ihxh0qJMbcOMO7OiZFzpbCZ0CSRNhrLXdfV3CIR+U0zNfPf7cEjYR4S1YC87FVo+iwZVRuCoUJhiA6KpJMmZ9b3622g9piyRtiz8NHMX7KJ+t5jo/HmF5TVw9K30dQ9Uk2Ne8F7H1FreWJgjxhzWRPRrGJMWCrVJAO8T287j+Yu2lBn8Ex9tOh+vBAaag32Z2xGa3YSataGohlFocT7Xt/O+X4LnII0f5UcLOcwNQb5N1fcEdbT5Ojt1RsvMeZGarwmbpEacP1kVdVikb5h0NflxJRlItj5a4gvyj/4eBcF2W347YuyimolNXuWS/grKdEuyTG0BZ8s2oFHBGDpqkiSxTcJwM7kLNNvtpHwag0Jonjle+QNbcZr4pOWMmXNsLlOImnQYlCAjJQtFTXuqTOXUQAPjWWvTiRrBte/gcWPoOyoTewDGhRKtdYY+96engee42eIib2oCQGKfh06hrbiw/nfoIuE+PaaGIgZi3ma9KHpv7ZSgHBi6q5RvAq2C1N3m6/lFVF2XhqNOX3tNinMfJSmHjG0csiv3ShuHGDMXUvSPxbC3EdN5cGYMzHvI8fO1g8I88PwqYvE5OVUbD4TZoW+PhOAG9N2oeuTmahcF4160loRgDO2mvznI+JFGhgZpOBoltn5q31CBJSd33SvjFdLjFdKHqiixu0bPltMNzSut7W1yy354RLyDA2NCAPQzFv+7d7jTfQljQkWm/SeCFYTaOumB0jJ4ZEQb33zn+jMmomKdZGEwbKAR7g/9Tj7+ko2L7zZIFgGINPzmXkr/nPoJM3cPoN+nm7deUBIOmYlsRYl7Zx37ztRNtBatu88IKPrxrJGNErLY3P+zdLGARn+wDtitgR2fup+Bum+LkTvxxZnoXXd66hcHYa7KJsggmLyDTS9ZeMQX8nokBemILpQwjFYy/OKExJjVhmf2tPdrfEcnSiCfRBjzO5jpkifPn1OLYQR5/Nnzzo8xk0VU92ZukcpTD1I42rhq/UOfuMOrYrG5yhVWi2H9JMEmFrvuyRaPFLBhkeKUZKRgaYNSahdE4g8cr69ivqEOuiSh3DnnIczNerwZo5bpIIW982f7aHJ8dzAXvexE+dp0VeaUvb067UDsrP72I/nJZR1DtEWi2iQ/Fs5KmiWiDS2DHvdPfry+PXuo8y5hYkSU0lIeAcRow6LL8CDdfNxd8001GaOxwVUjjgNYUQJdInxllu2Equ5p28UwtTmLuESjaa1aaDxBkSliYkuVdRk9cbcyvR8hsbgiX/UXBmLF6T8cMsu2YqNO8SHfzxX19PbQxuLPiIB5mudnY9bXEYnSkgUiEZpeMP0AO1D2pA+az96N85C+dp4CDPG4iSKB5+AzO8HdCRkofxNc8eYGhbteC3Gq95+fzPV3mNjU/BLQZmIZJ3cxDWKhk2zYGkWNe4HRuspLK5QAl6KqbPS6TnlseGl+mjP2NPbZ2xufpuZtrqKJIeazbAXprcXpopENuDGskw0r01h9HdnkRd2k/PvHtwZswXSyF3QxQ+3XXQA/OAHhCVJTa2kfkBH/GTGnBU061QmrqRy2PrJqmsk0gFl71nynFUSYIQiv7Cc+R0BpV97wRD8sqen597st9dX0+MAh/qnsSjow9uOlGmn0JeVSuzlNVSv80PtQk9sIKONbOQP+QR1Ez9AS0yadflsWAaK42a8S7XVYmSnVixTwCGgiWhGBZuJ2tjp71L2Hho76to6qYx6nVfgzCr6O2Om6k903Q/PXbkpHxGQIialUck8g6lWlD2aHCEapgYb2av6IAI16aNxew6fHNiP2m0kB/XlqBq5CLXhi8x1MRZIz7qeX6Q1dC0UQd/yNZ83UsEzxmzp03z9RnHzwJ7v3YwtEpI0Gst/RDeGTlkoW7Bsc/X89zcXTZ+7qtbdZ1oDASZn2QVomKSgwPpLKdVeaDtWCPaje5MAZZmJqF7lhzvvDEaJwAGZ5FS3nJxLluHG4FQ0eCdaNEV7oC1aWtd17JUxt7XZuBN9OBFjJpt4hwhqB1pGS0tbq4VLmJQyweIRH7WeqKJVhOhYC4sJKlISqd5UTEdurPMUpAvxXW5IOxKmXsWDDQtwl7BXuz4M1StHMexdTrRDBjLMk8ih/T2cchbgjlekqdzPndMcY25eG9vU9OQ6BfDJ9u/FjDFT9sx8FAeOnKLJ86yru5uR6LavDkhpL2hkh80n5Y0fqdDfEUpy+DKwFvaKPUZ3JGv9JpVDlLkMsjWpRHdxqM70QflsTxROs8e+JVZ0ZMTxIGMPfzL2GM0rcOXZ1o3gkRkfTKSRY321iZWVLUeH+b5Guplg2g5pHIbE1hJjNg6KdGSs0e4xZqoIgwyW8Tsgf3EzWcskRQf84stxO3MFFOtm487aRNSs8UfV4qGomM5DjsCGObjrh4fRJnwyXfgH97i9o+N1N1sCkktA2tg0RYNTlshxn3eCDIraYD6uZdOne2hFaDd21EdPXGgm7Mo5rqSc/RmQoh8Uret84q80IRxIxsYlXYPw06VQ0KxdMxU16wJwZ5kXbs/g4ygNLZkZZr+aGRKQAjNfAtLDLsfB0bGIAWlnJwm0Htk+iROlS8CorC847rElarVWMWCU8Tgo7q162PqrmTDy+jVmaNloS09N3wDMPqgDg8kkIWPJv3Fv90JIPk8lupuMmlUBuL10BMoWuDC6+8PwaADIJaa+DJMX7a1IuO3shF5Ww8X+8JfFYLIugZNcP2t/3sNNHQ+7CmhBuHatgCTDOCL+cDWpo8QuDIwZZjhwDNEykwPHoHsYOkmCpEU5OP/9arTnpKHiSwEqP42HiPgdZa5MQIZG8Vzk9A8y/3IszBpLmPQnc+nB3DOD6EyZ61wzzDRcOh7xjRGYq5mCxObXkCyesfqy7p2gtC2H4TmphuUR3UTPLISlFlIRWuBMgLlFyjF8SjWC5+RicdYenDqbiabi+ag6MQdF3yWh4mAkKveOJ+wNQ1WKMwMumyTFX8wGBzBovJaY8rHGmks0aT00j4/YO4ORJByLeSTkmapYsyz1dCyTJXM++y0FO6ULkZW3Eqt++gjv792O9H3b8cFPH2PHRTK1uvMeyuTzUCFJReENAa6fTcKNU5NQdoSEdP8YFK74B24JnJiwHlpgYQjr3w7UDV/INvEgHukQdNQOc8lkfk6RG9LKh2EpAbqiwd/i88ZI8+31CdjVPBUH22fgWGcyzpCB5CUy77umTMG1hhScq0zGyZszcP7GZFy5EonrlwJwK2csM70q+MoVV4kR02z95r8Yov8eqIBDQ873JWPZBeS/DoxAV94egqzqUfhE7IMdtYH4WhSK3VUR+K4iEgdLI3GsOArHCyPw861gnC2eiAv53si9NBL5Z4Yg/xDR2reOuJxhx/hcdvb/Ozj/X+wq94A9XinEAAAAAElFTkSuQmCC",z=typeof DOMParser<"u"?new DOMParser:null;function m(p){let e=(H[p]??H.chat).replace("<svg ",'<svg xmlns="http://www.w3.org/2000/svg" '),t=z?.parseFromString(e,"image/svg+xml")?.documentElement;return!t||t.nodeName==="parsererror"?document.createTextNode(""):(t.setAttribute("aria-hidden","true"),t.setAttribute("class","bb-ic"),t)}function F(p){let e=new Uint8Array(16);crypto.getRandomValues(e);let n=btoa(String.fromCharCode(...e)).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"");return`${p}${n}`}function T(p){return/^\/(?!\/)/.test(p)||/^https?:\/\//i.test(p)}var R=/\*\*([^*\n]+)\*\*|\[([^\]\n]+)\]\(([^)\s]+)\)/g;function P(p,e){let n=0;R.lastIndex=0;for(let t=R.exec(e);t;t=R.exec(e)){if(t.index>n&&p.appendChild(document.createTextNode(e.slice(n,t.index))),t[1]!==void 0){let s=document.createElement("strong");s.textContent=t[1],p.appendChild(s)}else if(T(t[3])){let s=document.createElement("a");s.href=t[3],s.target="_blank",s.rel="noopener noreferrer",s.textContent=t[2],p.appendChild(s)}else p.appendChild(document.createTextNode(t[2]));n=t.index+t[0].length}n<e.length&&p.appendChild(document.createTextNode(e.slice(n)))}function O(p,e){p.replaceChildren();let n=e.split(`
2
- `),t=null,s=null;for(let o of n){let r=/^\s*[-•*]\s+(.*)$/.exec(o);if(r){s=null,t||(t=document.createElement("ul"),p.appendChild(t));let d=document.createElement("li");P(d,r[1]),t.appendChild(d);continue}if(t=null,!o.trim()){s=null;continue}s?s.appendChild(document.createElement("br")):(s=document.createElement("p"),p.appendChild(s)),P(s,o)}}var A=class p{constructor(e){this.botSessionToken=null;this.botSessionFetchedAt=0;this.settings={enabled:!1};this.locale="en";this.sessionId=null;this.conversationId=null;this.busy=!1;this.opened=!1;this.expanded=!1;this.destroyed=!1;this.pendingText="";this.cardsRow=null;this.cardIds=new Set;this.prevBodyOverflow=null;this.connectionId=e.connectionId,this.baseUrl=(e.baseUrl||D).replace(/\/$/,""),this.storageKey=`brainerce-bot:${this.connectionId}`,this.onAddToCart=e.onAddToCart,this.customerSessionProxyPath=e.customerSessionProxyPath?.replace(/\/$/,"")}static async mount(e){if(!e?.connectionId)return console.warn("[BrainerceBot] connectionId is required"),null;let n=new p(e);return await n.boot(e.target??document.body)?n:null}destroy(){this.destroyed=!0,this.prevBodyOverflow!==null&&(document.body.style.overflow=this.prevBodyOverflow,this.prevBodyOverflow=null),this.host?.remove()}async boot(e){try{let n=await fetch(`${this.baseUrl}/api/storefront-bot/${encodeURIComponent(this.connectionId)}/settings`);if(!n.ok)return!1;this.settings=await n.json()}catch{return!1}return this.settings.enabled?(this.locale=this.settings.languages?.[0]??"en",this.restoreIds(),this.render(e),this.settings.displayMode==="auto_open"&&setTimeout(()=>!this.destroyed&&this.open(),3e3),!0):!1}t(e){return(L[this.locale]??L.en)[e]??L.en[e]??e}restoreIds(){try{let e=localStorage.getItem(this.storageKey);if(e){let n=JSON.parse(e);this.sessionId=n.sessionId??null,this.conversationId=n.conversationId??null}}catch{}}persistIds(){try{localStorage.setItem(this.storageKey,JSON.stringify({sessionId:this.sessionId,conversationId:this.conversationId}))}catch{}}css(e,n,t){let s=this.settings.bubbleShape==="square",o=s?"14px":"22px",r=s?"8px":"15px",d="5px",a=this.settings.displayMode??"floating",l=a==="side_rail",i=a==="full_screen";return`
1
+ "use strict";(()=>{var z="https://api.brainerce.com",j=new Set(["he","ar"]),F=/^#[0-9A-Fa-f]{6}$/,$="#6366F1",N={en:{online:"Online",placeholder:"Ask anything\u2026",error:"Something went wrong \u2014 please try again.",leaveMessage:"Leave a message for the team",yourEmail:"Your email",yourMessage:"Your message",send:"Send",sent:"Thanks! The team will get back to you by email.",close:"Close",expand:"Expand",collapse:"Collapse",searching:"Searching the store\u2026",addToCart:"Add to cart",added:"Added",view:"View",chooseOptions:"View product",results:"From the store",poweredBy:"Powered by Brainerce",addFailed:"I couldn\u2019t add that to the cart \u2014 try the button on the product card."},he:{online:"\u05DE\u05D7\u05D5\u05D1\u05E8",placeholder:"\u05E9\u05D0\u05DC\u05D5 \u05D0\u05D5\u05EA\u05D9 \u05D4\u05DB\u05DC\u2026",error:"\u05DE\u05E9\u05D4\u05D5 \u05D4\u05E9\u05EA\u05D1\u05E9 \u2014 \u05E0\u05E1\u05D5 \u05E9\u05D5\u05D1.",leaveMessage:"\u05D4\u05E9\u05D0\u05D9\u05E8\u05D5 \u05D4\u05D5\u05D3\u05E2\u05D4 \u05DC\u05E6\u05D5\u05D5\u05EA",yourEmail:"\u05D4\u05D0\u05D9\u05DE\u05D9\u05D9\u05DC \u05E9\u05DC\u05DB\u05DD",yourMessage:"\u05D4\u05D4\u05D5\u05D3\u05E2\u05D4 \u05E9\u05DC\u05DB\u05DD",send:"\u05E9\u05DC\u05D9\u05D7\u05D4",sent:"\u05EA\u05D5\u05D3\u05D4! \u05D4\u05E6\u05D5\u05D5\u05EA \u05D9\u05D7\u05D6\u05D5\u05E8 \u05D0\u05DC\u05D9\u05DB\u05DD \u05D1\u05DE\u05D9\u05D9\u05DC.",close:"\u05E1\u05D2\u05D9\u05E8\u05D4",expand:"\u05D4\u05E8\u05D7\u05D1\u05D4",collapse:"\u05DB\u05D9\u05D5\u05D5\u05E5",searching:"\u05DE\u05D7\u05E4\u05E9 \u05D1\u05D7\u05E0\u05D5\u05EA\u2026",addToCart:"\u05D4\u05D5\u05E1\u05E4\u05D4 \u05DC\u05E1\u05DC",added:"\u05E0\u05D5\u05E1\u05E3",view:"\u05E6\u05E4\u05D9\u05D9\u05D4",chooseOptions:"\u05DC\u05E6\u05E4\u05D5\u05EA \u05D1\u05DE\u05D5\u05E6\u05E8",results:"\u05DE\u05EA\u05D5\u05DA \u05D4\u05D7\u05E0\u05D5\u05EA",poweredBy:"\u05DE\u05D5\u05E4\u05E2\u05DC \u05E2\u05DC \u05D9\u05D3\u05D9 Brainerce",addFailed:"\u05DC\u05D0 \u05D4\u05E6\u05DC\u05D7\u05EA\u05D9 \u05DC\u05D4\u05D5\u05E1\u05D9\u05E3 \u05DC\u05E1\u05DC \u2014 \u05E0\u05E1\u05D5 \u05D3\u05E8\u05DA \u05D4\u05DB\u05E4\u05EA\u05D5\u05E8 \u05D1\u05DB\u05E8\u05D8\u05D9\u05E1 \u05D4\u05DE\u05D5\u05E6\u05E8."}},U={chat:'<svg viewBox="0 0 24 24" fill="none"><path d="M12 3C7.03 3 3 6.58 3 11c0 2.04.86 3.9 2.28 5.32-.15 1.23-.62 2.39-1.1 3.21-.13.23.05.52.31.47 1.56-.27 3.07-.93 4.13-1.62A10.6 10.6 0 0 0 12 19c4.97 0 9-3.58 9-8s-4.03-8-9-8Z" fill="currentColor"/></svg>',close:'<svg viewBox="0 0 24 24" fill="none"><path d="M6 6l12 12M18 6L6 18" stroke="currentColor" stroke-width="2" stroke-linecap="round"/></svg>',expand:'<svg viewBox="0 0 24 24" fill="none"><path d="M14 4h6v6M10 20H4v-6M20 4l-7 7M4 20l7-7" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/></svg>',collapse:'<svg viewBox="0 0 24 24" fill="none"><path d="M20 10h-6V4M4 14h6v6M20 4l-6 6M4 20l6-6" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/></svg>',mail:'<svg viewBox="0 0 24 24" fill="none"><rect x="3.5" y="5.5" width="17" height="13" rx="2.5" stroke="currentColor" stroke-width="1.7"/><path d="m4.5 7.5 7.5 5.5 7.5-5.5" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round"/></svg>',send:'<svg viewBox="0 0 24 24" fill="none"><path d="M4.4 11.2 19 4.6c.7-.3 1.4.4 1.1 1.1l-6.6 14.6c-.3.7-1.3.6-1.5-.1l-1.7-5.4a1 1 0 0 0-.6-.6l-5.4-1.7c-.7-.2-.8-1.2-.1-1.5Z" fill="currentColor"/></svg>',cart:'<svg viewBox="0 0 24 24" fill="none"><path d="M3 4h2l2.4 11.2A2 2 0 0 0 9.36 17H17.5a2 2 0 0 0 1.95-1.55L21 8H6" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/><circle cx="10" cy="20.5" r="1.4" fill="currentColor"/><circle cx="17" cy="20.5" r="1.4" fill="currentColor"/></svg>',check:'<svg viewBox="0 0 24 24" fill="none"><path d="m5 12.5 4.5 4.5L19 7.5" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"/></svg>',arrow:'<svg viewBox="0 0 24 24" fill="none"><path d="M7 17 17 7M9 7h8v8" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/></svg>',sparkle:'<svg viewBox="0 0 24 24" fill="none"><path d="M12 3v2M12 19v2M3 12h2M19 12h2M6.34 6.34l1.42 1.42M16.24 16.24l1.42 1.42M6.34 17.66l1.42-1.42M16.24 7.76l1.42-1.42" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"/><circle cx="12" cy="12" r="3.5" fill="currentColor"/></svg>'},D="data:image/png;base64,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",K=typeof DOMParser<"u"?new DOMParser:null;function f(c){let e=(U[c]??U.chat).replace("<svg ",'<svg xmlns="http://www.w3.org/2000/svg" '),t=K?.parseFromString(e,"image/svg+xml")?.documentElement;return!t||t.nodeName==="parsererror"?document.createTextNode(""):(t.setAttribute("aria-hidden","true"),t.setAttribute("class","bb-ic"),t)}function q(c){let e=new Uint8Array(16);crypto.getRandomValues(e);let n=btoa(String.fromCharCode(...e)).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"");return`${c}${n}`}function T(c){return/^\/(?!\/)/.test(c)||/^https?:\/\//i.test(c)}var R=/\*\*([^*\n]+)\*\*|\[([^\]\n]+)\]\(([^)\s]+)\)/g;function H(c,e){let n=0;R.lastIndex=0;for(let t=R.exec(e);t;t=R.exec(e)){if(t.index>n&&c.appendChild(document.createTextNode(e.slice(n,t.index))),t[1]!==void 0){let s=document.createElement("strong");s.textContent=t[1],c.appendChild(s)}else if(T(t[3])){let s=document.createElement("a");s.href=t[3],s.target="_blank",s.rel="noopener noreferrer",s.textContent=t[2],c.appendChild(s)}else c.appendChild(document.createTextNode(t[2]));n=t.index+t[0].length}n<e.length&&c.appendChild(document.createTextNode(e.slice(n)))}function P(c,e){c.replaceChildren();let n=e.split(`
2
+ `),t=null,s=null;for(let o of n){let d=/^\s*[-•*]\s+(.*)$/.exec(o);if(d){s=null,t||(t=document.createElement("ul"),c.appendChild(t));let l=document.createElement("li");H(l,d[1]),t.appendChild(l);continue}if(t=null,!o.trim()){s=null;continue}s?s.appendChild(document.createElement("br")):(s=document.createElement("p"),c.appendChild(s)),H(s,o)}}var B=class c{constructor(e){this.botSessionToken=null;this.botSessionFetchedAt=0;this.settings={enabled:!1};this.locale="en";this.sessionId=null;this.conversationId=null;this.busy=!1;this.opened=!1;this.expanded=!1;this.destroyed=!1;this.pendingText="";this.cardsRow=null;this.cardIds=new Set;this.prevBodyOverflow=null;this.connectionId=e.connectionId,this.baseUrl=(e.baseUrl||z).replace(/\/$/,""),this.storageKey=`brainerce-bot:${this.connectionId}`,this.onAddToCart=e.onAddToCart,this.customerSessionProxyPath=e.customerSessionProxyPath?.replace(/\/$/,"")}static async mount(e){if(!e?.connectionId)return console.warn("[BrainerceBot] connectionId is required"),null;let n=new c(e);return await n.boot(e.target??document.body)?n:null}destroy(){this.destroyed=!0,this.prevBodyOverflow!==null&&(document.body.style.overflow=this.prevBodyOverflow,this.prevBodyOverflow=null),this.host?.remove()}async boot(e){try{let n=await fetch(`${this.baseUrl}/api/storefront-bot/${encodeURIComponent(this.connectionId)}/settings`);if(!n.ok)return!1;this.settings=await n.json()}catch{return!1}return this.settings.enabled?(this.locale=this.settings.languages?.[0]??"en",this.restoreIds(),this.render(e),this.settings.displayMode==="auto_open"&&setTimeout(()=>!this.destroyed&&this.open(),3e3),!0):!1}t(e){return(N[this.locale]??N.en)[e]??N.en[e]??e}restoreIds(){try{let e=localStorage.getItem(this.storageKey);if(e){let n=JSON.parse(e);this.sessionId=n.sessionId??null,this.conversationId=n.conversationId??null}}catch{}}persistIds(){try{localStorage.setItem(this.storageKey,JSON.stringify({sessionId:this.sessionId,conversationId:this.conversationId}))}catch{}}css(e,n,t){let s=this.settings.bubbleShape==="square",o=s?"14px":"22px",d=s?"8px":"15px",l="5px",a=this.settings.displayMode??"floating",r=a==="side_rail",i=a==="full_screen";return`
3
3
  :host { all: initial; }
4
4
  *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0;
5
5
  font-family: -apple-system, "SF Pro Text", "Segoe UI Variable Text", "Segoe UI", system-ui, "Helvetica Neue", sans-serif;
@@ -66,7 +66,7 @@
66
66
  .bb.expanded .bb-window { position: fixed;
67
67
  inset: min(6vh, 60px) max(24px, calc((100vw - 1680px) / 2));
68
68
  width: auto; max-width: none; height: auto; }
69
- ${l?`.bb-window { bottom: 0; top: auto; ${t}: 0; height: calc(100vh - 98px); border-end-start-radius: ${o}; }
69
+ ${r?`.bb-window { bottom: 0; top: auto; ${t}: 0; height: calc(100vh - 98px); border-end-start-radius: ${o}; }
70
70
  .bb.expanded .bb-window { width: min(560px, calc(100vw - 40px)); }`:""}
71
71
  ${i?`.bb.open .bb-window { position: fixed;
72
72
  inset: min(6vh, 60px) max(24px, calc((100vw - 1680px) / 2));
@@ -113,19 +113,19 @@
113
113
  .bb-msg li { margin: 2px 0; }
114
114
  .bb-msg a { color: ${e}; font-weight: 550; text-decoration: underline; text-underline-offset: 2px; }
115
115
  .bb-msg.bot { align-self: flex-start; background: #fff; color: #232633;
116
- border: 1px solid #eceef3; border-radius: ${r}; border-end-start-radius: ${d};
116
+ border: 1px solid #eceef3; border-radius: ${d}; border-end-start-radius: ${l};
117
117
  box-shadow: 0 1px 2px rgba(15,18,34,.04); }
118
118
  .bb-msg.user { align-self: flex-end; background: ${e}; color: #fff;
119
- border-radius: ${r}; border-end-end-radius: ${d};
119
+ border-radius: ${d}; border-end-end-radius: ${l};
120
120
  box-shadow: 0 2px 6px -2px color-mix(in srgb, ${e} 50%, rgba(10,12,30,.3)); }
121
121
  .bb-msg.err { align-self: flex-start; background: #fef2f2; color: #b91c1c;
122
- border: 1px solid #fecaca; border-radius: ${r}; }
122
+ border: 1px solid #fecaca; border-radius: ${d}; }
123
123
  @keyframes bb-in { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }
124
124
 
125
125
  /* typing / tool status */
126
126
  .bb-typing { align-self: flex-start; display: flex; align-items: center; gap: 8px;
127
- background: #fff; border: 1px solid #eceef3; border-radius: ${r};
128
- border-end-start-radius: ${d}; padding: 10px 13px; animation: bb-in .2s ease both; }
127
+ background: #fff; border: 1px solid #eceef3; border-radius: ${d};
128
+ border-end-start-radius: ${l}; padding: 10px 13px; animation: bb-in .2s ease both; }
129
129
  .bb-typing .bb-dots { display: flex; gap: 4px; }
130
130
  .bb-typing .bb-dots i { width: 6px; height: 6px; border-radius: 99px;
131
131
  background: color-mix(in srgb, ${e} 65%, #aab); animation: bb-bounce 1.2s ease-in-out infinite; }
@@ -245,6 +245,6 @@
245
245
  transition: color .12s ease; }
246
246
  .bb-foot a:hover { color: #6b7280; }
247
247
  .bb-foot-mark { width: 14px; height: 14px; border-radius: 3px; display: block; }
248
- `}render(e){let n=this.settings.accentColor||"#6366F1",t=U.has(this.locale)?"rtl":"ltr",s=this.settings.position==="start"?"left":"right",o=t==="rtl"?s==="left"?"right":"left":s,r=this.settings.displayName||"Assistant";this.host=document.createElement("div"),this.host.setAttribute("data-brainerce-bot",this.connectionId),this.root=this.host.attachShadow({mode:"open"});let d=document.createElement("style");d.textContent=this.css(n,t,o),this.root.appendChild(d);let a=document.createElement("div");a.className="bb",this.root.appendChild(a);let l=document.createElement("div");l.className="bb-scrim",l.addEventListener("click",()=>{this.expanded?this.toggleExpand():this.close()}),a.appendChild(l),this.windowEl=document.createElement("div"),this.windowEl.className="bb-window",a.appendChild(this.windowEl);let i=document.createElement("div");i.className="bb-header";let b=document.createElement("span");if(b.className="bb-avatar",this.settings.avatarUrl&&T(this.settings.avatarUrl)){let g=document.createElement("img");g.src=this.settings.avatarUrl,g.alt="",b.appendChild(g)}else b.appendChild(m("sparkle"));let u=document.createElement("span");u.className="bb-head-main";let h=document.createElement("span");h.className="bb-name",h.textContent=r;let w=document.createElement("span");w.className="bb-status",w.textContent=this.t("online"),u.appendChild(h),u.appendChild(w);let v=document.createElement("span");v.className="bb-actions",(this.settings.displayMode??"floating")!=="full_screen"&&this.settings.allowExpand!==!1&&(this.expandBtn=this.iconButton("expand",this.t("expand"),()=>this.toggleExpand()),v.appendChild(this.expandBtn)),v.appendChild(this.iconButton("mail",this.t("leaveMessage"),()=>this.toggleEscalation())),v.appendChild(this.iconButton("close",this.t("close"),()=>this.close())),i.appendChild(b),i.appendChild(u),i.appendChild(v),this.windowEl.appendChild(i),this.messagesEl=document.createElement("div"),this.messagesEl.className="bb-msgs",this.windowEl.appendChild(this.messagesEl),this.chipsEl=document.createElement("div"),this.chipsEl.className="bb-chips";for(let g of this.settings.starterQuestions??[]){let M=document.createElement("button");M.className="bb-chip",M.textContent=g,M.addEventListener("click",()=>this.send(g)),this.chipsEl.appendChild(M)}this.windowEl.appendChild(this.chipsEl);let c=document.createElement("div");c.className="bb-esc";let k=document.createElement("span");k.className="bb-esc-title",k.textContent=this.t("leaveMessage");let E=document.createElement("input");E.type="email",E.name="email",E.placeholder=this.t("yourEmail");let C=document.createElement("textarea");C.name="message",C.rows=2,C.placeholder=this.t("yourMessage");let I=document.createElement("button");I.type="button",I.className="bb-esc-send",I.textContent=this.t("send"),I.addEventListener("click",()=>this.submitEscalation(c)),c.appendChild(k),c.appendChild(E),c.appendChild(C),c.appendChild(I),this.windowEl.appendChild(c);let f=document.createElement("div");f.className="bb-composer",this.inputEl=document.createElement("textarea"),this.inputEl.className="bb-input",this.inputEl.rows=1,this.inputEl.maxLength=4e3,this.inputEl.placeholder=this.t("placeholder"),this.inputEl.addEventListener("keydown",g=>{g.key==="Enter"&&!g.shiftKey&&(g.preventDefault(),this.send(this.inputEl?.value??""))}),this.inputEl.addEventListener("input",()=>this.syncSendState()),this.sendBtn=document.createElement("button"),this.sendBtn.className="bb-send",this.sendBtn.disabled=!0,this.sendBtn.setAttribute("aria-label",this.t("send")),this.sendBtn.appendChild(m("send")),this.sendBtn.addEventListener("click",()=>this.send(this.inputEl?.value??"")),f.appendChild(this.inputEl),f.appendChild(this.sendBtn),this.windowEl.appendChild(f);let B=document.createElement("div");B.className="bb-foot";let x=document.createElement("a");x.href="https://brainerce.com",x.target="_blank",x.rel="noopener noreferrer";let N=document.createElement("img");if(N.src=j,N.alt="",N.className="bb-foot-mark",x.appendChild(N),x.appendChild(document.createTextNode(this.t("poweredBy"))),B.appendChild(x),this.windowEl.appendChild(B),this.launcherEl=document.createElement("button"),this.launcherEl.className="bb-launcher",this.launcherEl.setAttribute("aria-label",r),this.settings.avatarUrl&&T(this.settings.avatarUrl)){let g=document.createElement("img");g.src=this.settings.avatarUrl,g.alt="",this.launcherEl.appendChild(g)}else{let g=m("chat");g.classList.add("bb-l-chat"),this.launcherEl.appendChild(g)}let S=m("close");S.classList.add("bb-l-close"),this.launcherEl.appendChild(S),this.launcherEl.addEventListener("click",()=>this.opened?this.close():this.open()),a.appendChild(this.launcherEl),e.appendChild(this.host)}iconButton(e,n,t){let s=document.createElement("button");return s.className="bb-iconbtn",s.title=n,s.setAttribute("aria-label",n),s.appendChild(m(e)),s.addEventListener("click",t),s}syncSendState(){this.sendBtn&&(this.sendBtn.disabled=!(this.inputEl?.value??"").trim()||this.busy)}open(){if(!this.windowEl||this.opened)return;this.opened=!0;let e=this.root?.querySelector(".bb");e?.classList.add("open");let n=(this.settings.displayMode??"floating")==="full_screen"||window.innerWidth<=520;e?.classList.toggle("big",n||this.expanded),this.syncBodyScroll(),this.messagesEl&&this.messagesEl.childElementCount===0&&this.primeThread(),this.inputEl?.focus()}close(){this.opened=!1;let e=this.root?.querySelector(".bb");e?.classList.remove("open"),this.expanded||e?.classList.remove("big"),this.syncBodyScroll()}syncBodyScroll(){let e=this.opened&&!!this.root?.querySelector(".bb")?.classList.contains("big");e&&this.prevBodyOverflow===null?(this.prevBodyOverflow=document.body.style.overflow||"",document.body.style.overflow="hidden"):!e&&this.prevBodyOverflow!==null&&(document.body.style.overflow=this.prevBodyOverflow,this.prevBodyOverflow=null)}toggleExpand(){if(this.expanded=!this.expanded,this.root?.querySelector(".bb")?.classList.toggle("expanded",this.expanded),this.root?.querySelector(".bb")?.classList.toggle("big",this.expanded),this.syncBodyScroll(),this.expandBtn){this.expandBtn.replaceChildren(m(this.expanded?"collapse":"expand"));let e=this.t(this.expanded?"collapse":"expand");this.expandBtn.title=e,this.expandBtn.setAttribute("aria-label",e)}}async primeThread(){if(this.conversationId&&this.sessionId)try{let e=await fetch(`${this.baseUrl}/api/storefront-bot/${encodeURIComponent(this.connectionId)}/conversations/${encodeURIComponent(this.conversationId)}?limit=50`,{headers:{"X-Bot-Session":this.sessionId}});if(e.ok){let n=await e.json();for(let t of n.data){let s=this.appendMessage(t.role==="assistant"?"bot":"user","");O(s,t.content)}if(n.data.length>0){this.chipsEl?.remove();return}}else this.conversationId=null,this.sessionId=null,this.persistIds()}catch{}if(this.settings.greeting){let e=this.appendMessage("bot","");O(e,this.settings.greeting)}}async refreshCustomerSession(){if(!this.customerSessionProxyPath)return;let e=240*1e3;if(!(this.botSessionToken&&Date.now()-this.botSessionFetchedAt<e))try{let n=await fetch(`${this.customerSessionProxyPath}/api/storefront-bot/${encodeURIComponent(this.connectionId)}/customer-session`,{credentials:"include"});if(!n.ok)return;let t=await n.json();this.botSessionToken=t.loggedIn&&t.botSessionToken?t.botSessionToken:null,this.botSessionFetchedAt=Date.now()}catch{}}async send(e){let n=e.trim();if(!n||this.busy)return;this.busy=!0,this.inputEl&&(this.inputEl.value=""),this.syncSendState(),this.chipsEl?.remove(),this.appendMessage("user",n);let t=this.appendTyping();this.pendingText="",this.cardsRow=null,this.cardIds=new Set;let s=null;try{await this.refreshCustomerSession();let o=await fetch(`${this.baseUrl}/api/storefront-bot/${encodeURIComponent(this.connectionId)}/chat`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({message:n,turnId:F("trn_"),...this.conversationId?{conversationId:this.conversationId}:{},...this.sessionId?{anonymousSessionId:this.sessionId}:{},locale:this.locale,...this.botSessionToken?{botSessionToken:this.botSessionToken}:{}})});if(!o.ok||!o.body)throw new Error(`chat failed (${o.status})`);let r=o.body.getReader(),d=new TextDecoder,a="";for(;;){let{value:l,done:i}=await r.read();if(i)break;a+=d.decode(l,{stream:!0});let b;for(;(b=a.indexOf(`
248
+ `}render(e){let n=this.settings.accentColor,t=n&&F.test(n)?n:$,s=j.has(this.locale)?"rtl":"ltr",o=this.settings.position==="start"?"left":"right",d=s==="rtl"?o==="left"?"right":"left":o,l=this.settings.displayName||"Assistant";this.host=document.createElement("div"),this.host.setAttribute("data-brainerce-bot",this.connectionId),this.root=this.host.attachShadow({mode:"open"});let a=document.createElement("style");a.textContent=this.css(t,s,d),this.root.appendChild(a);let r=document.createElement("div");r.className="bb",this.root.appendChild(r);let i=document.createElement("div");i.className="bb-scrim",i.addEventListener("click",()=>{this.expanded?this.toggleExpand():this.close()}),r.appendChild(i),this.windowEl=document.createElement("div"),this.windowEl.className="bb-window",r.appendChild(this.windowEl);let p=document.createElement("div");p.className="bb-header";let h=document.createElement("span");if(h.className="bb-avatar",this.settings.avatarUrl&&T(this.settings.avatarUrl)){let u=document.createElement("img");u.src=this.settings.avatarUrl,u.alt="",h.appendChild(u)}else h.appendChild(f("sparkle"));let b=document.createElement("span");b.className="bb-head-main";let E=document.createElement("span");E.className="bb-name",E.textContent=l;let k=document.createElement("span");k.className="bb-status",k.textContent=this.t("online"),b.appendChild(E),b.appendChild(k);let x=document.createElement("span");x.className="bb-actions",(this.settings.displayMode??"floating")!=="full_screen"&&this.settings.allowExpand!==!1&&(this.expandBtn=this.iconButton("expand",this.t("expand"),()=>this.toggleExpand()),x.appendChild(this.expandBtn)),x.appendChild(this.iconButton("mail",this.t("leaveMessage"),()=>this.toggleEscalation())),x.appendChild(this.iconButton("close",this.t("close"),()=>this.close())),p.appendChild(h),p.appendChild(b),p.appendChild(x),this.windowEl.appendChild(p),this.messagesEl=document.createElement("div"),this.messagesEl.className="bb-msgs",this.windowEl.appendChild(this.messagesEl),this.chipsEl=document.createElement("div"),this.chipsEl.className="bb-chips";for(let u of this.settings.starterQuestions??[]){let L=document.createElement("button");L.className="bb-chip",L.textContent=u,L.addEventListener("click",()=>this.send(u)),this.chipsEl.appendChild(L)}this.windowEl.appendChild(this.chipsEl);let v=document.createElement("div");v.className="bb-esc";let I=document.createElement("span");I.className="bb-esc-title",I.textContent=this.t("leaveMessage");let S=document.createElement("input");S.type="email",S.name="email",S.placeholder=this.t("yourEmail");let A=document.createElement("textarea");A.name="message",A.rows=2,A.placeholder=this.t("yourMessage");let m=document.createElement("button");m.type="button",m.className="bb-esc-send",m.textContent=this.t("send"),m.addEventListener("click",()=>this.submitEscalation(v)),v.appendChild(I),v.appendChild(S),v.appendChild(A),v.appendChild(m),this.windowEl.appendChild(v);let M=document.createElement("div");M.className="bb-composer",this.inputEl=document.createElement("textarea"),this.inputEl.className="bb-input",this.inputEl.rows=1,this.inputEl.maxLength=4e3,this.inputEl.placeholder=this.t("placeholder"),this.inputEl.addEventListener("keydown",u=>{u.key==="Enter"&&!u.shiftKey&&(u.preventDefault(),this.send(this.inputEl?.value??""))}),this.inputEl.addEventListener("input",()=>this.syncSendState()),this.sendBtn=document.createElement("button"),this.sendBtn.className="bb-send",this.sendBtn.disabled=!0,this.sendBtn.setAttribute("aria-label",this.t("send")),this.sendBtn.appendChild(f("send")),this.sendBtn.addEventListener("click",()=>this.send(this.inputEl?.value??"")),M.appendChild(this.inputEl),M.appendChild(this.sendBtn),this.windowEl.appendChild(M);let C=document.createElement("div");C.className="bb-foot";let w=document.createElement("a");w.href="https://brainerce.com",w.target="_blank",w.rel="noopener noreferrer";let y=document.createElement("img");if(y.src=D,y.alt="",y.className="bb-foot-mark",w.appendChild(y),w.appendChild(document.createTextNode(this.t("poweredBy"))),C.appendChild(w),this.windowEl.appendChild(C),this.launcherEl=document.createElement("button"),this.launcherEl.className="bb-launcher",this.launcherEl.setAttribute("aria-label",l),this.settings.avatarUrl&&T(this.settings.avatarUrl)){let u=document.createElement("img");u.src=this.settings.avatarUrl,u.alt="",this.launcherEl.appendChild(u)}else{let u=f("chat");u.classList.add("bb-l-chat"),this.launcherEl.appendChild(u)}let O=f("close");O.classList.add("bb-l-close"),this.launcherEl.appendChild(O),this.launcherEl.addEventListener("click",()=>this.opened?this.close():this.open()),r.appendChild(this.launcherEl),e.appendChild(this.host)}iconButton(e,n,t){let s=document.createElement("button");return s.className="bb-iconbtn",s.title=n,s.setAttribute("aria-label",n),s.appendChild(f(e)),s.addEventListener("click",t),s}syncSendState(){this.sendBtn&&(this.sendBtn.disabled=!(this.inputEl?.value??"").trim()||this.busy)}open(){if(!this.windowEl||this.opened)return;this.opened=!0;let e=this.root?.querySelector(".bb");e?.classList.add("open");let n=(this.settings.displayMode??"floating")==="full_screen"||window.innerWidth<=520;e?.classList.toggle("big",n||this.expanded),this.syncBodyScroll(),this.messagesEl&&this.messagesEl.childElementCount===0&&this.primeThread(),this.inputEl?.focus()}close(){this.opened=!1;let e=this.root?.querySelector(".bb");e?.classList.remove("open"),this.expanded||e?.classList.remove("big"),this.syncBodyScroll()}syncBodyScroll(){let e=this.opened&&!!this.root?.querySelector(".bb")?.classList.contains("big");e&&this.prevBodyOverflow===null?(this.prevBodyOverflow=document.body.style.overflow||"",document.body.style.overflow="hidden"):!e&&this.prevBodyOverflow!==null&&(document.body.style.overflow=this.prevBodyOverflow,this.prevBodyOverflow=null)}toggleExpand(){if(this.expanded=!this.expanded,this.root?.querySelector(".bb")?.classList.toggle("expanded",this.expanded),this.root?.querySelector(".bb")?.classList.toggle("big",this.expanded),this.syncBodyScroll(),this.expandBtn){this.expandBtn.replaceChildren(f(this.expanded?"collapse":"expand"));let e=this.t(this.expanded?"collapse":"expand");this.expandBtn.title=e,this.expandBtn.setAttribute("aria-label",e)}}async primeThread(){if(this.conversationId&&this.sessionId)try{let e=await fetch(`${this.baseUrl}/api/storefront-bot/${encodeURIComponent(this.connectionId)}/conversations/${encodeURIComponent(this.conversationId)}?limit=50`,{headers:{"X-Bot-Session":this.sessionId}});if(e.ok){let n=await e.json();for(let t of n.data){let s=this.appendMessage(t.role==="assistant"?"bot":"user","");P(s,t.content)}if(n.data.length>0){this.chipsEl?.remove();return}}else this.conversationId=null,this.sessionId=null,this.persistIds()}catch{}if(this.settings.greeting){let e=this.appendMessage("bot","");P(e,this.settings.greeting)}}async refreshCustomerSession(){if(!this.customerSessionProxyPath)return;let e=240*1e3;if(!(this.botSessionToken&&Date.now()-this.botSessionFetchedAt<e))try{let n=await fetch(`${this.customerSessionProxyPath}/api/storefront-bot/${encodeURIComponent(this.connectionId)}/customer-session`,{credentials:"include"});if(!n.ok)return;let t=await n.json();this.botSessionToken=t.loggedIn&&t.botSessionToken?t.botSessionToken:null,this.botSessionFetchedAt=Date.now()}catch{}}async send(e){let n=e.trim();if(!n||this.busy)return;this.busy=!0,this.inputEl&&(this.inputEl.value=""),this.syncSendState(),this.chipsEl?.remove(),this.appendMessage("user",n);let t=this.appendTyping();this.pendingText="",this.cardsRow=null,this.cardIds=new Set;let s=null;try{await this.refreshCustomerSession();let o=await fetch(`${this.baseUrl}/api/storefront-bot/${encodeURIComponent(this.connectionId)}/chat`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({message:n,turnId:q("trn_"),...this.conversationId?{conversationId:this.conversationId}:{},...this.sessionId?{anonymousSessionId:this.sessionId}:{},locale:this.locale,...this.botSessionToken?{botSessionToken:this.botSessionToken}:{}})});if(!o.ok||!o.body)throw new Error(`chat failed (${o.status})`);let d=o.body.getReader(),l=new TextDecoder,a="";for(;;){let{value:r,done:i}=await d.read();if(i)break;a+=l.decode(r,{stream:!0});let p;for(;(p=a.indexOf(`
249
249
 
250
- `))>=0;){let u=a.slice(0,b);if(a=a.slice(b+2),!u.startsWith("data: "))continue;let h;try{h=JSON.parse(u.slice(6))}catch{continue}s=this.handleFrame(h,t,s)}}s&&this.pendingText&&O(s,this.pendingText)}catch{this.appendMessage("err",this.t("error"))}finally{t.remove(),this.busy=!1,this.syncSendState()}}handleFrame(e,n,t){switch(e.type){case"connected":return this.conversationId=e.conversationId||this.conversationId,this.sessionId=e.anonymousSessionId||this.sessionId,this.persistIds(),t;case"token":return t||(n.remove(),t=this.appendMessage("bot","")),this.pendingText+=e.text,t.textContent=this.pendingText,this.scrollDown(),t;case"tool":return n.classList.toggle("searching",e.status==="running"),t;case"card":return this.appendCard(e.card),t;case"action":return this.handleAction(e),t;case"error":return this.appendMessage("err",e.message||this.t("error")),t;case"escalate_offer":return this.openEscalation(),t;case"done":default:return t}}appendCard(e){if(!this.messagesEl||this.cardIds.has(e.productId))return;if(this.cardIds.add(e.productId),!this.cardsRow){let i=document.createElement("div");i.className="bb-shelf";let b=document.createElement("div");b.className="bb-shelf-cap",b.textContent=this.t("results"),this.cardsRow=document.createElement("div"),this.cardsRow.className="bb-cards",i.appendChild(b),i.appendChild(this.cardsRow),this.messagesEl.appendChild(i)}let n=T(e.url)?e.url:null,t=document.createElement("div");t.className="bb-card";let s=()=>{this.beacon(e.botRef),n&&(window.location.href=n)},o=document.createElement("span");if(o.className="bb-card-img",e.imageUrl&&T(e.imageUrl)){let i=document.createElement("img");i.src=e.imageUrl,i.alt="",i.loading="lazy",o.appendChild(i)}else o.appendChild(m("cart"));o.addEventListener("click",s),t.appendChild(o);let r=document.createElement("span");r.className="bb-card-body";let d=document.createElement("span");d.className="bb-card-title",d.textContent=e.title,d.addEventListener("click",s);let a=document.createElement("span");a.className="bb-card-price",a.textContent=e.price.formatted,r.appendChild(d),r.appendChild(a);let l=document.createElement("span");if(l.className="bb-card-cta",e.requiresOptions){let i=document.createElement("button");i.className="bb-btn bb-btn-add",i.setAttribute("aria-label",this.t("addToCart")),i.appendChild(m("cart")),e.variants?.length?i.addEventListener("click",()=>this.togglePicker(r,e,o)):i.addEventListener("click",s),l.appendChild(i)}else{let i=document.createElement("button");i.className="bb-btn bb-btn-add bb-sq",i.setAttribute("aria-label",this.t("addToCart")),i.appendChild(m("cart")),i.addEventListener("click",()=>void this.addToCart(e,i));let b=document.createElement("button");b.className="bb-btn bb-btn-ghost bb-wide",b.appendChild(document.createTextNode(this.t("view"))),b.addEventListener("click",s),l.appendChild(b),l.appendChild(i)}r.appendChild(l),t.appendChild(r),this.cardsRow.appendChild(t),this.scrollDown()}togglePicker(e,n,t){let s=e.parentElement,o=e.querySelector(".bb-pick");if(o){o.remove(),s?.classList.remove("picking");return}s?.classList.add("picking");let r=n.variants??[],d=[];for(let u of r)for(let h of Object.keys(u.attributes))d.includes(h)||d.push(h);let a={},l=document.createElement("span");l.className="bb-pick";let i=()=>r.find(u=>d.every(h=>a[h]&&u.attributes[h]===a[h]))??null,b=()=>{l.replaceChildren();for(let c of d){let k=document.createElement("span");k.className="bb-pick-key",k.textContent=c;let E=document.createElement("span");E.className="bb-pick-vals";let C=new Set;for(let I of r){let f=I.attributes[c];if(!f||C.has(f))continue;C.add(f);let B=r.some(N=>N.attributes[c]===f&&d.every(S=>S===c||!a[S]||N.attributes[S]===a[S])),x=document.createElement("button");x.className=`bb-chipv${a[c]===f?" sel":""}${B?"":" off"}`,x.textContent=f,x.addEventListener("click",()=>{a[c]===f?delete a[c]:a[c]=f,b()}),E.appendChild(x)}l.appendChild(k),l.appendChild(E)}let u=document.createElement("button");u.className="bb-pick-close",u.setAttribute("aria-label",this.t("close")),u.appendChild(m("close")),u.addEventListener("click",()=>{l.remove(),s?.classList.remove("picking")}),l.appendChild(u);let h=i(),w=document.createElement("span");w.className="bb-pick-foot";let v=document.createElement("span");v.className="bb-pick-price",v.textContent=h?h.price.formatted:"";let y=document.createElement("button");if(y.className="bb-btn bb-btn-add bb-sq",y.setAttribute("aria-label",this.t("addToCart")),y.appendChild(m("cart")),h||(y.disabled=!0),y.addEventListener("click",()=>{let c=i();c&&this.addToCart(n,y,c.id)}),w.appendChild(v),w.appendChild(y),l.appendChild(w),h?.imageUrl&&T(h.imageUrl)){let c=t.querySelector("img");c&&(c.src=h.imageUrl)}this.scrollDown()};b(),e.appendChild(l),this.scrollDown()}async addToCart(e,n,t){this.beacon(e.botRef),n.dataset.state="busy",await this.dispatchAdd(e.productId,t??null)?(n.dataset.state="done",n.replaceChildren(m("check"),document.createTextNode(this.t("added"))),setTimeout(()=>{!this.destroyed&&n.isConnected&&(delete n.dataset.state,n.replaceChildren(m("cart"),document.createTextNode(this.t("addToCart"))))},2200)):(delete n.dataset.state,T(e.url)&&(window.location.href=e.url))}async dispatchAdd(e,n){try{if(this.onAddToCart)return await this.onAddToCart({productId:e,variantId:n,quantity:1})!==!1;let t=new CustomEvent("brainerce:bot:add-to-cart",{detail:{productId:e,variantId:n,quantity:1,connectionId:this.connectionId},cancelable:!0,bubbles:!0,composed:!0});return!window.dispatchEvent(t)}catch{return!1}}async handleAction(e){if(e.action!=="add_to_cart")return;e.botRef&&this.beacon(e.botRef),await this.dispatchAdd(e.productId,e.variantId)||this.appendMessage("err",this.t("addFailed"))}beacon(e){try{navigator.sendBeacon?.(`${this.baseUrl}/api/storefront-bot/attribution/click`,new Blob([JSON.stringify({botRef:e})],{type:"application/json"}))}catch{}}toggleEscalation(){this.root?.querySelector(".bb-esc")?.classList.toggle("open")}openEscalation(){this.root?.querySelector(".bb-esc")?.classList.add("open")}async submitEscalation(e){let n=e.querySelector('input[name="email"]')?.value.trim(),t=e.querySelector('textarea[name="message"]')?.value.trim();if(!(!n||!t||!this.conversationId||!this.sessionId))try{if((await fetch(`${this.baseUrl}/api/storefront-bot/${encodeURIComponent(this.connectionId)}/escalate`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:n,message:t,conversationId:this.conversationId,anonymousSessionId:this.sessionId,locale:this.locale})})).ok){let o=document.createElement("span");o.className="bb-esc-note",o.appendChild(m("check")),o.appendChild(document.createTextNode(this.t("sent"))),e.replaceChildren(o)}}catch{}}appendMessage(e,n){let t=document.createElement("div");return t.className=`bb-msg ${e}`,t.setAttribute("dir","auto"),t.textContent=n,this.messagesEl?.appendChild(t),this.scrollDown(),t}appendTyping(){let e=document.createElement("div");e.className="bb-typing";let n=document.createElement("span");n.className="bb-dots";for(let s=0;s<3;s++)n.appendChild(document.createElement("i"));let t=document.createElement("span");return t.className="bb-tool",t.textContent=this.t("searching"),e.appendChild(n),e.appendChild(t),this.messagesEl?.appendChild(e),this.scrollDown(),e}scrollDown(){this.messagesEl&&(this.messagesEl.scrollTop=this.messagesEl.scrollHeight)}};(()=>{let p=document.currentScript,e=p?.dataset.connectionId;if(!e){console.warn("[BrainerceBot] missing data-connection-id on the bot.js script tag");return}let n=p?.dataset.apiBase||void 0,t=()=>void A.mount({connectionId:e,baseUrl:n});document.readyState==="loading"?document.addEventListener("DOMContentLoaded",t,{once:!0}):t()})();})();
250
+ `))>=0;){let h=a.slice(0,p);if(a=a.slice(p+2),!h.startsWith("data: "))continue;let b;try{b=JSON.parse(h.slice(6))}catch{continue}s=this.handleFrame(b,t,s)}}s&&this.pendingText&&P(s,this.pendingText)}catch{this.appendMessage("err",this.t("error"))}finally{t.remove(),this.busy=!1,this.syncSendState()}}handleFrame(e,n,t){switch(e.type){case"connected":return this.conversationId=e.conversationId||this.conversationId,this.sessionId=e.anonymousSessionId||this.sessionId,this.persistIds(),t;case"token":return t||(n.remove(),t=this.appendMessage("bot","")),this.pendingText+=e.text,t.textContent=this.pendingText,this.scrollDown(),t;case"tool":return n.classList.toggle("searching",e.status==="running"),t;case"card":return this.appendCard(e.card),t;case"action":return this.handleAction(e),t;case"error":return this.appendMessage("err",e.message||this.t("error")),t;case"escalate_offer":return this.openEscalation(),t;case"done":default:return t}}appendCard(e){if(!this.messagesEl||this.cardIds.has(e.productId))return;if(this.cardIds.add(e.productId),!this.cardsRow){let i=document.createElement("div");i.className="bb-shelf";let p=document.createElement("div");p.className="bb-shelf-cap",p.textContent=this.t("results"),this.cardsRow=document.createElement("div"),this.cardsRow.className="bb-cards",i.appendChild(p),i.appendChild(this.cardsRow),this.messagesEl.appendChild(i)}let n=T(e.url)?e.url:null,t=document.createElement("div");t.className="bb-card";let s=()=>{this.beacon(e.botRef),n&&(window.location.href=n)},o=document.createElement("span");if(o.className="bb-card-img",e.imageUrl&&T(e.imageUrl)){let i=document.createElement("img");i.src=e.imageUrl,i.alt="",i.loading="lazy",o.appendChild(i)}else o.appendChild(f("cart"));o.addEventListener("click",s),t.appendChild(o);let d=document.createElement("span");d.className="bb-card-body";let l=document.createElement("span");l.className="bb-card-title",l.textContent=e.title,l.addEventListener("click",s);let a=document.createElement("span");a.className="bb-card-price",a.textContent=e.price.formatted,d.appendChild(l),d.appendChild(a);let r=document.createElement("span");if(r.className="bb-card-cta",e.requiresOptions){let i=document.createElement("button");i.className="bb-btn bb-btn-add",i.setAttribute("aria-label",this.t("addToCart")),i.appendChild(f("cart")),e.variants?.length?i.addEventListener("click",()=>this.togglePicker(d,e,o)):i.addEventListener("click",s),r.appendChild(i)}else{let i=document.createElement("button");i.className="bb-btn bb-btn-add bb-sq",i.setAttribute("aria-label",this.t("addToCart")),i.appendChild(f("cart")),i.addEventListener("click",()=>void this.addToCart(e,i));let p=document.createElement("button");p.className="bb-btn bb-btn-ghost bb-wide",p.appendChild(document.createTextNode(this.t("view"))),p.addEventListener("click",s),r.appendChild(p),r.appendChild(i)}d.appendChild(r),t.appendChild(d),this.cardsRow.appendChild(t),this.scrollDown()}togglePicker(e,n,t){let s=e.parentElement,o=e.querySelector(".bb-pick");if(o){o.remove(),s?.classList.remove("picking");return}s?.classList.add("picking");let d=n.variants??[],l=[];for(let h of d)for(let b of Object.keys(h.attributes))l.includes(b)||l.push(b);let a={},r=document.createElement("span");r.className="bb-pick";let i=()=>d.find(h=>l.every(b=>a[b]&&h.attributes[b]===a[b]))??null,p=()=>{r.replaceChildren();for(let g of l){let v=document.createElement("span");v.className="bb-pick-key",v.textContent=g;let I=document.createElement("span");I.className="bb-pick-vals";let S=new Set;for(let A of d){let m=A.attributes[g];if(!m||S.has(m))continue;S.add(m);let M=d.some(w=>w.attributes[g]===m&&l.every(y=>y===g||!a[y]||w.attributes[y]===a[y])),C=document.createElement("button");C.className=`bb-chipv${a[g]===m?" sel":""}${M?"":" off"}`,C.textContent=m,C.addEventListener("click",()=>{a[g]===m?delete a[g]:a[g]=m,p()}),I.appendChild(C)}r.appendChild(v),r.appendChild(I)}let h=document.createElement("button");h.className="bb-pick-close",h.setAttribute("aria-label",this.t("close")),h.appendChild(f("close")),h.addEventListener("click",()=>{r.remove(),s?.classList.remove("picking")}),r.appendChild(h);let b=i(),E=document.createElement("span");E.className="bb-pick-foot";let k=document.createElement("span");k.className="bb-pick-price",k.textContent=b?b.price.formatted:"";let x=document.createElement("button");if(x.className="bb-btn bb-btn-add bb-sq",x.setAttribute("aria-label",this.t("addToCart")),x.appendChild(f("cart")),b||(x.disabled=!0),x.addEventListener("click",()=>{let g=i();g&&this.addToCart(n,x,g.id)}),E.appendChild(k),E.appendChild(x),r.appendChild(E),b?.imageUrl&&T(b.imageUrl)){let g=t.querySelector("img");g&&(g.src=b.imageUrl)}this.scrollDown()};p(),e.appendChild(r),this.scrollDown()}async addToCart(e,n,t){this.beacon(e.botRef),n.dataset.state="busy",await this.dispatchAdd(e.productId,t??null)?(n.dataset.state="done",n.replaceChildren(f("check"),document.createTextNode(this.t("added"))),setTimeout(()=>{!this.destroyed&&n.isConnected&&(delete n.dataset.state,n.replaceChildren(f("cart"),document.createTextNode(this.t("addToCart"))))},2200)):(delete n.dataset.state,T(e.url)&&(window.location.href=e.url))}async dispatchAdd(e,n){try{if(this.onAddToCart)return await this.onAddToCart({productId:e,variantId:n,quantity:1})!==!1;let t=new CustomEvent("brainerce:bot:add-to-cart",{detail:{productId:e,variantId:n,quantity:1,connectionId:this.connectionId},cancelable:!0,bubbles:!0,composed:!0});return!window.dispatchEvent(t)}catch{return!1}}async handleAction(e){if(e.action!=="add_to_cart")return;e.botRef&&this.beacon(e.botRef),await this.dispatchAdd(e.productId,e.variantId)||this.appendMessage("err",this.t("addFailed"))}beacon(e){try{navigator.sendBeacon?.(`${this.baseUrl}/api/storefront-bot/attribution/click`,new Blob([JSON.stringify({botRef:e})],{type:"application/json"}))}catch{}}toggleEscalation(){this.root?.querySelector(".bb-esc")?.classList.toggle("open")}openEscalation(){this.root?.querySelector(".bb-esc")?.classList.add("open")}async submitEscalation(e){let n=e.querySelector('input[name="email"]')?.value.trim(),t=e.querySelector('textarea[name="message"]')?.value.trim();if(!(!n||!t||!this.conversationId||!this.sessionId))try{if((await fetch(`${this.baseUrl}/api/storefront-bot/${encodeURIComponent(this.connectionId)}/escalate`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:n,message:t,conversationId:this.conversationId,anonymousSessionId:this.sessionId,locale:this.locale})})).ok){let o=document.createElement("span");o.className="bb-esc-note",o.appendChild(f("check")),o.appendChild(document.createTextNode(this.t("sent"))),e.replaceChildren(o)}}catch{}}appendMessage(e,n){let t=document.createElement("div");return t.className=`bb-msg ${e}`,t.setAttribute("dir","auto"),t.textContent=n,this.messagesEl?.appendChild(t),this.scrollDown(),t}appendTyping(){let e=document.createElement("div");e.className="bb-typing";let n=document.createElement("span");n.className="bb-dots";for(let s=0;s<3;s++)n.appendChild(document.createElement("i"));let t=document.createElement("span");return t.className="bb-tool",t.textContent=this.t("searching"),e.appendChild(n),e.appendChild(t),this.messagesEl?.appendChild(e),this.scrollDown(),e}scrollDown(){this.messagesEl&&(this.messagesEl.scrollTop=this.messagesEl.scrollHeight)}};(()=>{let c=document.currentScript,e=c?.dataset.connectionId;if(!e){console.warn("[BrainerceBot] missing data-connection-id on the bot.js script tag");return}let n=c?.dataset.apiBase||void 0,t=()=>void B.mount({connectionId:e,baseUrl:n});document.readyState==="loading"?document.addEventListener("DOMContentLoaded",t,{once:!0}):t()})();})();
package/dist/bot/index.js CHANGED
@@ -27,6 +27,8 @@ module.exports = __toCommonJS(index_exports);
27
27
  // src/bot/widget.ts
28
28
  var DEFAULT_BASE_URL = "https://api.brainerce.com";
29
29
  var RTL_LOCALES = /* @__PURE__ */ new Set(["he", "ar"]);
30
+ var HEX_COLOR = /^#[0-9A-Fa-f]{6}$/;
31
+ var DEFAULT_ACCENT = "#6366F1";
30
32
  var CHROME = {
31
33
  en: {
32
34
  online: "Online",
@@ -83,7 +85,7 @@ var ICONS = {
83
85
  arrow: '<svg viewBox="0 0 24 24" fill="none"><path d="M7 17 17 7M9 7h8v8" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/></svg>',
84
86
  sparkle: '<svg viewBox="0 0 24 24" fill="none"><path d="M12 3v2M12 19v2M3 12h2M19 12h2M6.34 6.34l1.42 1.42M16.24 16.24l1.42 1.42M6.34 17.66l1.42-1.42M16.24 7.76l1.42-1.42" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"/><circle cx="12" cy="12" r="3.5" fill="currentColor"/></svg>'
85
87
  };
86
- var BRAND_MARK = "data:image/png;base64,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";
88
+ var BRAND_MARK = "data:image/png;base64,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";
87
89
  var svgParser = typeof DOMParser !== "undefined" ? new DOMParser() : null;
88
90
  function icon(name) {
89
91
  const markup = (ICONS[name] ?? ICONS.chat).replace(
@@ -512,7 +514,8 @@ var BrainerceBot = class _BrainerceBot {
512
514
  `;
513
515
  }
514
516
  render(target) {
515
- const accent = this.settings.accentColor || "#6366F1";
517
+ const rawAccent = this.settings.accentColor;
518
+ const accent = rawAccent && HEX_COLOR.test(rawAccent) ? rawAccent : DEFAULT_ACCENT;
516
519
  const dir = RTL_LOCALES.has(this.locale) ? "rtl" : "ltr";
517
520
  const side = this.settings.position === "start" ? "left" : "right";
518
521
  const sideRtlAware = dir === "rtl" ? side === "left" ? "right" : "left" : side;
@@ -1,6 +1,8 @@
1
1
  // src/bot/widget.ts
2
2
  var DEFAULT_BASE_URL = "https://api.brainerce.com";
3
3
  var RTL_LOCALES = /* @__PURE__ */ new Set(["he", "ar"]);
4
+ var HEX_COLOR = /^#[0-9A-Fa-f]{6}$/;
5
+ var DEFAULT_ACCENT = "#6366F1";
4
6
  var CHROME = {
5
7
  en: {
6
8
  online: "Online",
@@ -57,7 +59,7 @@ var ICONS = {
57
59
  arrow: '<svg viewBox="0 0 24 24" fill="none"><path d="M7 17 17 7M9 7h8v8" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/></svg>',
58
60
  sparkle: '<svg viewBox="0 0 24 24" fill="none"><path d="M12 3v2M12 19v2M3 12h2M19 12h2M6.34 6.34l1.42 1.42M16.24 16.24l1.42 1.42M6.34 17.66l1.42-1.42M16.24 7.76l1.42-1.42" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"/><circle cx="12" cy="12" r="3.5" fill="currentColor"/></svg>'
59
61
  };
60
- var BRAND_MARK = "data:image/png;base64,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";
62
+ var BRAND_MARK = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAACXBIWXMAADsOAAA7DgHMtqGDAAAJ8klEQVR4nK1YeVDT1xa+ogLDH1UcOmMJWh8aSMQFXLE+N/QhSpQ1ZAGaKryouFDqhqCN2lpRUdAuiiCIS1XqCgoqaFArIiQgayCtRpGgRB4JS0Tc7pvzY4i5kASwnpnzT86dc7+c+7vfOd9FqI+GEe6HEe4vEeKB8tVyi3Sh0ipb2Dgoj42HiFnNNuBpbDwkYV7joAQhtspcjS0ShHhgGsL9EcL9+rpfn4CJER4gFigsxQL14Bx2A+02p9Yhm6tyyea8mH2V38i67K9hX2Q3+5/nv2Id92qbncJvd07mvaIfZGtpcQI8WCzAliKEB3xioB0VUwgUlkUe8s/v8pSMvIDn8+4G1IfdClDFHF1UcmqTe5r4YmKh4sKxgtrzqQW1Zw8XKrbysm/v8ZL/nhzQtjMhQBt2iNM2N5bXzIhlYZsUAbb8JBUVIZFZuQib3+E/sZYG1zELOHW++dxn2/fNz8xYPDm60t7Jt2UowwOHhv+I9a2puRWPmuiDITbCybclNPDgX4e2l9yNC2rZvidY6xsT3MyM5GNrkQibIyQy+0hw2AyqVhL41O4+5/lcKb9uc5x7+uVJ45coYWN9LyiqIAD+kpRGxC9cyaV+f1Dy9+u4HflF2wUvo0VBbW5RbC1NIMCWCGGzPoOTCJVW0qCaUUVsJS/TuzTRbcKqh12BDWV44IUB4QS412/eYJfZQbr4hNnB1G/6xhfsq13DfZS4YWkLNyJEM0okxFa9BgnHCuBK2LWORbya0ETPa2ftnbypozTklzJvEZufS79JxKGa+lZYXEn9PmyMb4uv1/WLq4Xq0OVLmxxFol6AhJsKx0pVjlcTGj//Yrodw7PdGLjJcwX4zdu3BAB3v9W6OHyH8D3qW8iaH3VxWwarneWTmSFcrg4NidCMEqRQx2304vQrR9gcvrkidg0v1VN8Zjhz0Utj4MAPp14gNs8rKCXim3ccJOKKJ3WY5rSQWPMFw/P1fE72BUGEhsuO0NIQdXEMgAQqyWPXDJFyns/N9CtNpDv5NZkC5zDZD7e0viQACMK26uIA5HHNMyIOgA3lshvr3+y7pjrRd0vLHM9IjTVKAwrqcrRAwFJOA1PKrds8f1JEtSlw4Nv3JBGbP1TUYtvRC3RxQ9QzckIH9Rhy+vRVj31/0kQvjGtmCsRdjho6RJFH3ef3eE/9gEqGMjzemwI3bAwL1z17QQDYuO3nPlGPIZ+64mKWx89qn1kJzTZIBB2no3795KuxBXQIIGHnsV/X95RoxdoYYvNGdRP+l7OXLu7J+dYk9Rjz4VME9f9Jato2LeUFA2ViC6qKwHligWIwtK+98zMyekoCXlxaTQCIP3SKiGdcvUPEz2WQ1GPKXTZduTLvlHquV4p6MBJhMwRTCdX4A+vDPKdGyXpKsDhwLbF5e/trPO7fvB6pBy7N6fPXsav7EpP57X22VE4+37jCNa2BhhLwQAQj0z2ein6Lr4rp7K2mPDP7LrH572ev9Yp6gP/AVA2NeBZrmdH8ts6+rVOyGncyr6voSC63QNQ8x1W5JLIKzvQEDv7927fvdJu/f/8ez160vFfUI3kg0/2mfKbSDROGfEyK5DT9T7UzSldaIRg2YZ6LdEu70RPAIycuEZvfvF1IxLftTiTifz96SlHPJLev8bt374nYweSzRvcZuTMtx7lANQtlNw5CMAlf5Texls74Ld8UOMZUNta+bCM2YX8TSVAPVEbf1osO6OI7449240V7F2+De9mFxxfaljWyULlmCIIRPZOr9g+cfqDQFMAde5OJDSqqHpmknob/afAI58W6+BfMBfjREyWxhrM0yjDAlbuLaA/q/VCV0oYCeI7b7M+f/otRgMPGsvCz5w1E8vBNe4k1D8rkRHzvrye75fk16Q9izZafDhkGuGpXEa2s3g8plTYIBA5oiOAZh40e8aoNe4jE9S8a8fBxi3Rxr8B13ahn7PQP1NPpu/YfI9ZBuzQIcG1soW3lYxYqrxmCEubhQSBwwt2uZBsDWC57SCSO2Z/aJ+oZaoTAV27YbfjE4o7fGFH5aBaSyz9DIA2TuK0uu71kpwwt9v9mI5G0ra0dj54WoItPc19K3FCgnjmLP1CP/rpXr9qJXF95hBgEaJ9+8wy9utoZSSRWCHQrSMMjAdqYEU7s5q6Ls3PvE0mPnb5iknpy/5R229B5ZiB1qfTt7v0SwxfSxVtLL5XFMCsq6Ahjc6jgwKNsLQ2k4Zxp2yr0F8/0FFIV6TSo1PQFobq44xR/3KoliZn3383UjV27JR5HRO/DiccudiNvsKBl3xsESAteJ3OUyZa7FlfTEJYMpIYFENWgW8MWZF/WX3wiLYtIeu1mPpHshz1HiHjVX48pcJyQKGzKjp/JNEpnIw8eyxxXVe6GiosHI0xJUtxv/2psAaIadOvo8SF1sNDpKw71vembT/B6kzPhd9FxVAw6jDH741JOt7G/021n8lX06pJtjrISR6oPY9QxtMJzRCyr2WZHsNY30DMjyxAllJTLiWRh63YR8RcNavzl+MXdPotOgy6zJjLWaOWoy3Eg4RqzqtgbKatskFjcObB2DK3wHLE9+BVzq+BltOuMdQrgOn0LW7+LSAaA9W33gWPU72Omc6npOvlkOnWU8QdPUd8bVNwUOLtFIU+YMmk0veweEykUlgh3EU7wVhLJ11iD4v/h29rj9apGXRngKPU38A4iibmtrZ36JEwBMOnOXlrHG1lJ42XFc1DpHWuEu4imzirCW0nUMi0NFP/W7yW5ncNBV8bPyskjAJ5Iy/pocLZjPd84JCZnOFQVcFyr82iovNwcJLAx6U4ddWSIZtRKoTp0V6z0vqpB/R7mPFPEPNNT+FHghrt4vXFJOnrVoSo/xKlMMhIpxN2P1gBIM3iGWL68yREU/7LvpJcdpvJajRHzjVvkTNhb/9KV3Tox9WQmgGNU3naguoao1y9d2EwowlYhEfWjgtZquIEbZKkT3TcooJJdiTlgyaY+g5sYFKGccCsnmV5dwHWSS0YiSXpfwH0ACU9j7CgtjStSu4GoDv5RfLtC/kT3VFVZraCIubfA7ObwVRMSUnOcZNLNcCGobw6Ote/gOk0Ex23Oj9RYL4xrYIKonp/csm3jccn9K3dKmsI3x7/uEZiLtxbaF3QIIGFGpcSHohK4reVp5v8AnK6S/eCtBJ4jQPGDqJ52Sj138nnNCtdrjTEOh/LP2otO5MKYTlsTK6WF75HardtbOCzuRI59Ru5pell1jH1FxQpoXw6lEgZFwh0811/XKT6NgcrHA5BYYQmiGnQr83oTnS5WO4PAsX2gYsGY7lRW72dbWcuCeQ5GJphKXKuLaVRvpW6peEAvbuo/BAqvT5SoxhaUNMxv+IwSOKAhwGs0Q6hhU6K0onqqRDKwo2J9B/Z/Z137VmhbzzcAAAAASUVORK5CYII=";
61
63
  var svgParser = typeof DOMParser !== "undefined" ? new DOMParser() : null;
62
64
  function icon(name) {
63
65
  const markup = (ICONS[name] ?? ICONS.chat).replace(
@@ -486,7 +488,8 @@ var BrainerceBot = class _BrainerceBot {
486
488
  `;
487
489
  }
488
490
  render(target) {
489
- const accent = this.settings.accentColor || "#6366F1";
491
+ const rawAccent = this.settings.accentColor;
492
+ const accent = rawAccent && HEX_COLOR.test(rawAccent) ? rawAccent : DEFAULT_ACCENT;
490
493
  const dir = RTL_LOCALES.has(this.locale) ? "rtl" : "ltr";
491
494
  const side = this.settings.position === "start" ? "left" : "right";
492
495
  const sideRtlAware = dir === "rtl" ? side === "left" ? "right" : "left" : side;