@zabbu/chat-widget 0.9.2 → 0.10.1

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/CHANGELOG.md ADDED
@@ -0,0 +1,146 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project are documented in this file.
4
+
5
+ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this
6
+ project adheres to [Semantic Versioning](https://semver.org/). Versions before `0.1.0`
7
+ below were not formally tracked; `0.1.0` is the baseline this file starts from.
8
+
9
+ ## [0.10.1] - 2026-08-26
10
+
11
+ ### Added
12
+ - This changelog now ships with the package (was backfilled through 0.10.0 but hadn't
13
+ been republished yet), and a README exists for the first time — the npm package page
14
+ was blank before this.
15
+
16
+ ## [0.10.0] - 2026-08-26
17
+
18
+ ### Added
19
+ - `window.Zabbu`, a programmatic API (`init`, `open`, `close`, `toggle`, `on`/`off`) for
20
+ host pages that want to control the widget from their own code instead of only through
21
+ data-* attributes read once at auto-init.
22
+ - `primaryColor`, `position`, `welcomeText`, and `colorScheme` overrides — via data-*
23
+ attributes or the `init()` config object — that take precedence over the Site's own
24
+ saved config, so customizing the widget no longer requires portal-web access.
25
+ - `ready`, `open`, `close`, and `message` events via `Zabbu.on()`.
26
+ - Bottom-left placement (`data-position="bottom-left"` / `position: "bottom-left"`) —
27
+ `widgetPosition` was already returned by the public config endpoint but never applied
28
+ by the loader.
29
+
30
+ ### Changed
31
+ - A script tag with no `data-site-key` no longer throws on load — it stays inert until
32
+ something calls `Zabbu.init()`.
33
+
34
+ ## [0.9.2] - 2026-08-26
35
+
36
+ ### Fixed
37
+ - The iframe's own files (`index.html`, `chat-ui.js`/`.css`) now resolve relative to the
38
+ script's actual directory instead of just its origin. On a shared CDN like
39
+ jsDelivr/unpkg, where every package lives under the same domain, resolving by origin
40
+ alone pointed at a file that doesn't exist there.
41
+
42
+ ## [0.9.1] - 2026-08-26
43
+
44
+ ### Fixed
45
+ - Republished pointing at the production backend — the previous publish's `npm run
46
+ build` hook ran without `API_BASE_URL` set and picked up the localhost default
47
+ instead.
48
+
49
+ ## [0.9.0] - 2026-08-25
50
+
51
+ ### Added
52
+ - Per-site shadow style (soft, elevated, brand-glow) and a brand-color glow option for
53
+ the launcher.
54
+ - An unread-message badge on the launcher.
55
+ - A live agent-presence indicator, a CTA-button opening style, a dark color scheme, and
56
+ slash/at-command autocomplete in the chat panel.
57
+
58
+ ### Changed
59
+ - Rebranded from `conex-chat-widget` to `zabbu-chat-widget` — DOM ids, CSS
60
+ classes/custom properties, and the localStorage key prefix.
61
+
62
+ ## [0.8.0] - 2026-08-24
63
+
64
+ ### Added
65
+ - Gradient backgrounds, configurable opening styles, and a proactive teaser bubble.
66
+ - An SVG icon set for the floating launcher button, selectable per site.
67
+
68
+ ## [0.7.0] - 2026-08-22
69
+
70
+ ### Added
71
+ - The loader now notifies the backend once per session (`chat-opened`) when the visitor
72
+ opens the panel, so an event-triggered rule/command can respond proactively — the
73
+ reply arrives as a normal bot message, no typing required.
74
+ - Sound config is now per-event (5 events: chat opened, bot reply, agent message, rule
75
+ triggered, command executed) instead of one style for 3 hardcoded triggers — the two
76
+ new events (rule/command) get their own distinct tones per style.
77
+
78
+ ### Changed
79
+ - **BREAKING:** `ChatSoundPlayer.playOpen/playReply/playAgent` replaced by a single
80
+ `play(event)`; `bot-reply` payloads now carry an `event` field the sound engine reads
81
+ to pick the right style.
82
+
83
+ ## [0.6.0] - 2026-08-22
84
+
85
+ ### Added
86
+ - Three notification sound styles — Suave, Clásico, Campanita — each with its own
87
+ waveform, gain, and tone set for the open/reply/agent triggers, selected via the
88
+ site's `soundStyle` config.
89
+
90
+ ## [0.5.0] - 2026-08-22
91
+
92
+ ### Added
93
+ - Notification sounds, synthesized via Web Audio (no audio assets): a chime when the
94
+ chat opens, a shorter tone on a bot reply, and a distinct two-note tone when a human
95
+ agent's message arrives. Gated by the site's `soundEnabled` config; playback lives in
96
+ the loader, not the iframe, since only its launcher click carries a genuine user
97
+ gesture the autoplay policy will accept.
98
+
99
+ ## [0.4.0] - 2026-08-22
100
+
101
+ ### Added
102
+ - The visitor's own typing activity is now relayed to the admin portal (debounced the
103
+ same way the admin's own typing signal already was), so an agent can see someone is
104
+ drafting a reply.
105
+
106
+ ## [0.3.2] - 2026-08-22
107
+
108
+ ### Fixed
109
+ - `server.mjs` now serves `fixtures/` under `/fixtures/` too, not just `dist/` at the
110
+ root — the demo fixtures need to be opened from this server's own origin for the
111
+ backend's Origin check to pass, so opening them as `file://` (or 404ing) silently
112
+ dropped every message: no bot reply, nothing saved, nothing visible from any admin view.
113
+
114
+ ## [0.3.1] - 2026-08-22
115
+
116
+ ### Fixed
117
+ - `fixtures/demo-sites/*.html` had stale API keys and mismatched business names from
118
+ before the backend's realistic-10-tenant reseed — each now points at its real,
119
+ currently-valid counterpart.
120
+
121
+ ## [0.3.0] - 2026-08-22
122
+
123
+ ### Added
124
+ - Launcher icon, send-button label, and emoji picker visibility now come from the site's
125
+ own config instead of being fixed.
126
+ - Visitors can attach a file to their own message when the site enables it — relayed
127
+ through loader.ts (the only context with the api key and a real Origin) via a new
128
+ postMessage exchange, not made directly from the sandboxed iframe.
129
+
130
+ ## [0.2.0] - 2026-08-21
131
+
132
+ ### Added
133
+ - Admin replies rendered as a distinct bubble from automated bot replies, with their
134
+ attachment (image thumbnail or file link) when present.
135
+ - A typing-dots indicator while the admin is drafting a reply.
136
+ - A self-contained emoji picker in the composer (no new dependency).
137
+
138
+ ### Fixed
139
+ - The iframe's CSP `img-src` now allows the API's own origin, so admin-attachment
140
+ images actually load instead of being blocked.
141
+
142
+ ## [0.1.0] - 2026-08-20
143
+
144
+ Baseline — formal versioning and changelog tracking starts here. Prior history (chat
145
+ history restore on reload, demo site fixtures) is available via `git log` but not
146
+ itemized in this file.
package/README.md ADDED
@@ -0,0 +1,90 @@
1
+ # @zabbu/chat-widget
2
+
3
+ Embeddable chat widget — loader script + sandboxed chat UI — for a site backed by
4
+ [Zabbu](https://github.com/zabbu-app/zabbu-chat-portal). Ships as a single
5
+ self-contained script; no build step or framework required on the host page.
6
+
7
+ ## Install
8
+
9
+ Add the script tag anywhere on your page, with the site key from your Zabbu admin panel:
10
+
11
+ ```html
12
+ <script
13
+ async
14
+ src="https://unpkg.com/@zabbu/chat-widget/dist/loader.js"
15
+ data-site-key="YOUR_SITE_KEY"
16
+ ></script>
17
+ ```
18
+
19
+ That's it — the launcher appears bottom-right, styled with whatever your site's admin
20
+ panel has configured (color, welcome text, shadow style, etc).
21
+
22
+ > Use unpkg, not jsDelivr, for this package — jsDelivr serves `.html` as `text/plain`
23
+ > (an anti-phishing measure on their end, not something this package can opt out of),
24
+ > which breaks the widget's iframe. unpkg serves it correctly.
25
+
26
+ ## Configuring without the admin panel
27
+
28
+ Every `data-*` attribute below overrides the site's saved config for visitors of *this*
29
+ particular embed, without touching the admin panel:
30
+
31
+ | Attribute | Values | |
32
+ |---|---|---|
33
+ | `data-primary-color` | any CSS color, e.g. `#16a34a` | Launcher, panel, and header accent |
34
+ | `data-position` | `bottom-right` (default) \| `bottom-left` | Which corner the widget docks to |
35
+ | `data-welcome-text` | any string | First message shown to a new visitor |
36
+ | `data-color-scheme` | `light` (default) \| `dark` | Panel theme |
37
+ | `data-api-base` | a URL | Overrides the backend this build was published against (rarely needed) |
38
+
39
+ ## Programmatic API
40
+
41
+ For host pages that want to control the widget from their own code — open it from a
42
+ custom button, wait for it to be ready, react to a reply arriving — a script tag with no
43
+ `data-site-key` stays inert until you call `init()` yourself:
44
+
45
+ ```html
46
+ <script async src="https://unpkg.com/@zabbu/chat-widget/dist/loader.js"></script>
47
+ <script>
48
+ window.addEventListener("load", () => {
49
+ const widget = Zabbu.init({
50
+ siteKey: "YOUR_SITE_KEY",
51
+ primaryColor: "#16a34a",
52
+ position: "bottom-left",
53
+ welcomeText: "Hey, need a hand?",
54
+ });
55
+
56
+ widget.on("message", ({ text }) => console.log("new reply:", text));
57
+ });
58
+ </script>
59
+ ```
60
+
61
+ `Zabbu.init()` is idempotent — safe to call again later (e.g. once you know a logged-in
62
+ user's preferred color); it returns the existing widget instead of creating a second one.
63
+
64
+ ### Methods
65
+
66
+ | | |
67
+ |---|---|
68
+ | `Zabbu.init(config)` | Creates the widget if it doesn't exist yet; returns it either way. `config.siteKey` is required. |
69
+ | `Zabbu.open()` / `.close()` / `.toggle()` | Control the panel. No-ops (with a console warning) before `init()`. |
70
+ | `Zabbu.on(event, handler)` / `.off(event, handler)` | Subscribe/unsubscribe. |
71
+
72
+ ### Events
73
+
74
+ | Event | Payload | Fires when |
75
+ |---|---|---|
76
+ | `ready` | — | The widget's DOM and appearance are set up. Replays immediately if you subscribe after it already fired. |
77
+ | `open` / `close` | — | The panel is toggled — by the visitor, or by `Zabbu.open()`/`.close()`. |
78
+ | `message` | `{ text: string }` | A bot or admin reply arrives. |
79
+
80
+ If the widget auto-inited via `data-site-key` and you need to call a method on it later
81
+ from unrelated code, call `Zabbu.init()` again with the same `siteKey` — it's idempotent
82
+ and returns the existing instance rather than creating a second one.
83
+
84
+ ## Version history
85
+
86
+ See [CHANGELOG.md](./CHANGELOG.md).
87
+
88
+ ## License
89
+
90
+ MIT
package/dist/chat-ui.js CHANGED
@@ -1 +1 @@
1
- "use strict";(()=>{var Z=["\u{1F600}","\u{1F602}","\u{1F609}","\u{1F60A}","\u{1F60D}","\u{1F914}","\u{1F605}","\u{1F622}","\u{1F62E}","\u{1F60E}","\u{1F64F}","\u{1F44D}","\u{1F44E}","\u{1F44F}","\u{1F64C}","\u{1F389}","\u2764\uFE0F","\u{1F525}","\u2705","\u274C","\u26A0\uFE0F","\u{1F4A1}","\u{1F4CE}","\u23F3"];function J(n){return!!n&&n.startsWith("image/")}function P(n,o,t){let e=document.createElement("div");if(e.className=`chat-bubble chat-bubble--${o}`,o==="admin"){let a=document.createElement("div");a.className="chat-bubble-label",a.textContent="Agente",e.appendChild(a)}if(n){let a=document.createElement("div");a.textContent=n,e.appendChild(a)}return t?.attachmentUrl&&e.appendChild(X(t)),e}function X(n){let{attachmentUrl:o,attachmentName:t,attachmentMime:e}=n;if(J(e)){let r=document.createElement("a");r.href=o,r.target="_blank",r.rel="noopener noreferrer",r.className="chat-attachment-image-link";let u=document.createElement("img");return u.src=o,u.alt=t??"",u.className="chat-attachment-image",r.appendChild(u),r}let a=document.createElement("a");return a.href=o,a.target="_blank",a.rel="noopener noreferrer",a.className="chat-attachment-file",a.textContent=`\u{1F4CE} ${t??"Archivo adjunto"}`,a}function L(){let n=document.createElement("div");n.className="chat-bubble chat-bubble--admin chat-typing-indicator",n.setAttribute("aria-live","polite"),n.setAttribute("aria-label","El agente est\xE1 escribiendo");for(let o=0;o<3;o++){let t=document.createElement("span");t.className="chat-typing-dot",n.appendChild(t)}return n}function R(n){let o=document.createElement("div");o.className="chat-emoji-wrapper";let t=document.createElement("button");t.type="button",t.className="chat-emoji-toggle",t.setAttribute("aria-label","Insertar emoji"),t.textContent="\u{1F642}";let e=document.createElement("div");return e.className="chat-emoji-panel",e.hidden=!0,Z.forEach(a=>{let r=document.createElement("button");r.type="button",r.className="chat-emoji-option",r.textContent=a,r.addEventListener("click",()=>{n(a),e.hidden=!0}),e.appendChild(r)}),t.addEventListener("click",()=>{e.hidden=!e.hidden}),document.addEventListener("click",a=>{o.contains(a.target)||(e.hidden=!0)}),o.appendChild(t),o.appendChild(e),{wrapper:o,toggleButton:t}}var ee={SOFT_TINT:"linear-gradient(180deg, color-mix(in srgb, var(--chat-primary-color) 8%, white) 0%, white 100%)",DIAGONAL_WASH:"linear-gradient(135deg, color-mix(in srgb, var(--chat-primary-color) 14%, white) 0%, white 55%, color-mix(in srgb, var(--chat-primary-color) 6%, white) 100%)",RADIAL_GLOW:"radial-gradient(120% 60% at 50% 0%, color-mix(in srgb, var(--chat-primary-color) 18%, white) 0%, white 65%)",DUOTONE_SOFT:"linear-gradient(160deg, color-mix(in srgb, var(--chat-primary-color) 20%, white) 0%, color-mix(in srgb, var(--chat-primary-color) 5%, white) 100%)",MESH_SOFT:"radial-gradient(60% 50% at 15% 10%, color-mix(in srgb, var(--chat-primary-color) 20%, white) 0%, transparent 60%), radial-gradient(50% 45% at 90% 20%, color-mix(in srgb, var(--chat-primary-color) 14%, white) 0%, transparent 60%), radial-gradient(70% 60% at 50% 100%, color-mix(in srgb, var(--chat-primary-color) 10%, white) 0%, transparent 60%), white"},te={SOFT_TINT:"linear-gradient(180deg, color-mix(in srgb, var(--chat-primary-color) 14%, #17181f) 0%, #17181f 100%)",DIAGONAL_WASH:"linear-gradient(135deg, color-mix(in srgb, var(--chat-primary-color) 22%, #17181f) 0%, #17181f 55%, color-mix(in srgb, var(--chat-primary-color) 10%, #17181f) 100%)",RADIAL_GLOW:"radial-gradient(120% 60% at 50% 0%, color-mix(in srgb, var(--chat-primary-color) 26%, #17181f) 0%, #17181f 65%)",DUOTONE_SOFT:"linear-gradient(160deg, color-mix(in srgb, var(--chat-primary-color) 28%, #17181f) 0%, color-mix(in srgb, var(--chat-primary-color) 8%, #17181f) 100%)",MESH_SOFT:"radial-gradient(60% 50% at 15% 10%, color-mix(in srgb, var(--chat-primary-color) 28%, #17181f) 0%, transparent 60%), radial-gradient(50% 45% at 90% 20%, color-mix(in srgb, var(--chat-primary-color) 20%, #17181f) 0%, transparent 60%), radial-gradient(70% 60% at 50% 100%, color-mix(in srgb, var(--chat-primary-color) 16%, #17181f) 0%, transparent 60%), #17181f"};function I(n){n.primaryColor&&document.documentElement.style.setProperty("--chat-primary-color",n.primaryColor);let o=n.colorScheme==="DARK";document.body.dataset.theme=o?"dark":"light";let t=o?te:ee,e=n.backgroundStyle&&t[n.backgroundStyle];e&&document.documentElement.style.setProperty("--chat-bg",e)}function M(n,o){let t=document.createElement("div");t.className="chat-welcome-card";let e=document.createElement("div");e.className="chat-welcome-card-icon",e.textContent="\u{1F4AC}",t.appendChild(e);let a=document.createElement("h4");a.className="chat-welcome-card-heading",a.textContent=`\xA1Hola! Bienvenido a ${n}`,t.appendChild(a);let r=document.createElement("p");return r.className="chat-welcome-card-body",r.textContent=o,t.appendChild(r),t}function O(n){return n==="SLASH"?"/":"@"}function w(n,o,t){let e=document.createElement("div");e.className="chat-autocomplete-panel",e.hidden=!0;let a=0,r=[];function u(){e.replaceChildren(),r.forEach((i,p)=>{let d=document.createElement("button");d.type="button",d.className=p===a?"chat-autocomplete-option chat-autocomplete-option--active":"chat-autocomplete-option";let m=document.createElement("span");m.className="chat-autocomplete-trigger",m.textContent=`${O(i.symbol)}${i.trigger}`;let y=document.createElement("span");y.className="chat-autocomplete-label",y.textContent=i.label,d.appendChild(m),d.appendChild(y),d.addEventListener("mousedown",h=>{h.preventDefault(),f(i)}),e.appendChild(d)})}function f(i){t(`${O(i.symbol)}${i.trigger} `),g()}function g(){e.hidden=!0,r=[]}function E(){let i=/^([/@])(\S*)$/.exec(n.value);if(!i){g();return}let[,p,d]=i,m=p==="/"?"SLASH":"AT";if(r=o.filter(y=>y.symbol===m&&y.trigger.toLowerCase().startsWith(d.toLowerCase())),r.length===0){g();return}a=0,e.hidden=!1,u()}return n.addEventListener("input",E),n.addEventListener("keydown",i=>{e.hidden||r.length===0||(i.key==="ArrowDown"?(i.preventDefault(),a=(a+1)%r.length,u()):i.key==="ArrowUp"?(i.preventDefault(),a=(a-1+r.length)%r.length,u()):i.key==="Enter"||i.key==="Tab"?(i.preventDefault(),f(r[a])):i.key==="Escape"&&g())}),document.addEventListener("click",i=>{!e.contains(i.target)&&i.target!==n&&g()}),e}var ne={TICKET_CREATE:"\u{1F3AB}",TICKET_LOOKUP:"\u{1F50D}",SHOW_MENU:"\u{1F4CB}",CANNED_REPLY:"\u{1F4AC}",RUN_WORKFLOW:"\u26A1"};function D(n){return n&&ne[n]||"\u{1F4AC}"}function U(n,o){let t=document.createElement("div");return t.className="chat-quick-replies",n.forEach(e=>{let a=document.createElement("button");a.type="button",a.className="chat-quick-reply-chip";let r=e.symbol==="SLASH"?"/":"@";a.textContent=`${D(e.action)} ${e.label}`,a.addEventListener("click",()=>o(`${r}${e.trigger}`)),t.appendChild(a)}),t}function k(n,o,t,e){let a=document.createElement("button");a.type="button",a.className="chat-cta-button";let r=o?D(o.action):"\u{1F4AC}";return a.textContent=`${r} ${n}`,a.addEventListener("click",()=>{if(o){let u=o.symbol==="SLASH"?"/":"@";t(`${u}${o.trigger}`)}else e()}),a}var B="chat:ready";var G="chat:close",$="chat:toggle";var N="chat:send",Y="chat:bot-reply",j="chat:connect-error",W="chat:history",F="chat:admin-message",K="chat:admin-typing",q="chat:agent-presence",_="chat:typing",V="chat:upload-attachment",Q="chat:attachment-uploaded",z="chat:attachment-upload-error";function ae(){let n=new URLSearchParams(location.hash.replace(/^#/,""));return{prefix:n.get("prefix"),apiBase:n.get("api")}}function b(n){window.parent.postMessage(n,"*")}async function oe(n,o){let t=await fetch(`${n}/public/sites/${o}`);if(!t.ok)throw new Error("site config unavailable");return t.json()}function re(n){let o=document.getElementById("app");for(;o.firstChild;)o.removeChild(o.firstChild);let t=document.createElement("div");t.className="chat-shell";let e=document.createElement("div");e.className="chat-header";let a=document.createElement("div");a.className="chat-header-title";let r=document.createElement("span");if(r.className="chat-header-avatar-wrap",n.logoUrl){let h=document.createElement("img");h.src=n.logoUrl,h.alt="",r.appendChild(h)}else{let h=document.createElement("span");h.className="chat-header-avatar",h.textContent=n.name.slice(0,1).toUpperCase(),r.appendChild(h)}a.appendChild(r);let u=document.createElement("div");u.className="chat-header-text";let f=document.createElement("span");f.className="chat-header-name",f.textContent=n.name,u.appendChild(f),a.appendChild(u),e.appendChild(a);let g=document.createElement("button");g.className="chat-close-button",g.type="button",g.setAttribute("aria-label","Cerrar"),g.textContent="\u2715",g.addEventListener("click",()=>b({type:G})),e.appendChild(g);let E=document.createElement("div");E.className="chat-messages";let i=document.createElement("form");i.className="chat-input-row";let p=document.createElement("input");p.type="text",p.placeholder="Escribe un mensaje o /menu",p.autocomplete="off";let d,m;if(n.attachmentsEnabled){d=document.createElement("button"),d.type="button",d.className="chat-attach-button",d.setAttribute("aria-label","Adjuntar archivo"),d.textContent="\u{1F4CE}",m=document.createElement("input"),m.type="file",m.accept="image/png,image/jpeg,image/gif,image/webp,application/pdf",m.style.display="none";let h=m;d.addEventListener("click",()=>h.click()),i.appendChild(d),i.appendChild(m)}if(n.emojiPickerEnabled!==!1){let{wrapper:h}=R(v=>{let A=p.selectionStart??p.value.length,C=p.selectionEnd??p.value.length;p.value=p.value.slice(0,A)+v+p.value.slice(C),p.focus(),p.selectionStart=p.selectionEnd=A+v.length});i.appendChild(h)}let y=document.createElement("button");if(y.type="submit",y.textContent=n.sendButtonText||"Enviar",n.commands?.length){let h=w(p,n.commands,v=>{p.value=v,p.focus()});i.appendChild(h)}return i.appendChild(p),i.appendChild(y),t.appendChild(e),t.appendChild(E),t.appendChild(i),o.appendChild(t),{messages:E,inputRow:i,input:p,attachButton:d,attachInput:m,avatarWrap:r,textCol:u}}function ie(n){let o=Date.now()-new Date(n).getTime(),t=Math.round(o/6e4);if(t<1)return"justo ahora";if(t<60)return`hace ${t} min`;let e=Math.round(t/60);return e<24?`hace ${e} h`:`hace ${Math.round(e/24)} d`}function le(n,o,t){if(n.querySelector(".chat-header-presence")?.remove(),o.querySelector(".chat-header-subtitle")?.remove(),!!t){if(t.viewing){let e=document.createElement("span");e.className="chat-header-presence",e.setAttribute("aria-hidden","true"),n.appendChild(e);let a=document.createElement("span");a.className="chat-header-subtitle",a.textContent=t.agentName?`${t.agentName} est\xE1 en l\xEDnea`:"En l\xEDnea",o.appendChild(a)}else if(t.lastActiveAt){let e=document.createElement("span");e.className="chat-header-subtitle",e.textContent=`\xDAltima vez activo ${ie(t.lastActiveAt)}`,o.appendChild(e)}}}async function ce(){let{prefix:n,apiBase:o}=ae();if(!n||!o){document.body.textContent="Configuraci\xF3n inv\xE1lida.";return}let t;try{t=await oe(o,n)}catch{document.body.textContent="No se pudo cargar el chat.";return}I(t);let{messages:e,inputRow:a,input:r,attachInput:u,avatarWrap:f,textCol:g}=re(t),E=new Map;function i(c){let s=crypto.randomUUID();return new Promise((l,T)=>{E.set(s,{resolve:l,reject:T}),b({type:V,payload:{requestId:s,file:c}})})}function p(c){return c?.attachmentUrl?.startsWith("/")?{...c,attachmentUrl:`${o}${c.attachmentUrl}`}:c}function d(c,s,l){e.appendChild(P(c,s,p(l))),e.scrollTop=e.scrollHeight}let m=null;function y(c){c&&!m?(m=L(),e.appendChild(m),e.scrollTop=e.scrollHeight):!c&&m&&(m.remove(),m=null)}function h(c){return c==="VISITOR"?"visitor":c==="ADMIN"?"admin":"bot"}function v(){let c=t.openingStyle??"SIMPLE";if(c!=="RULE_DRIVEN"&&t.welcomeText){if(c==="CARD"){e.appendChild(M(t.name,t.welcomeText)),e.scrollTop=e.scrollHeight;return}if(d(t.welcomeText,"bot"),c==="QUICK_REPLIES"&&t.commands?.length&&(e.appendChild(U(t.commands,x)),e.scrollTop=e.scrollHeight),c==="CTA_BUTTON"){let s=t.commands?.[0]??null,l=s?.label||"Iniciar conversaci\xF3n";e.appendChild(k(l,s,x,()=>r.focus())),e.scrollTop=e.scrollHeight}}}window.addEventListener("message",c=>{let s=c.data;if(!(!s||typeof s.type!="string")){if(s.type===Y){let l=s.payload?.text;l&&d(l,"bot")}else if(s.type===F){let l=s.payload;l&&(y(!1),d(l.text,"admin",l))}else if(s.type===K){let l=s.payload;y(!!l?.isTyping)}else if(s.type===Q){let l=s.payload;l&&(E.get(l.requestId)?.resolve(l),E.delete(l.requestId))}else if(s.type===z){let l=s.payload;l&&(E.get(l.requestId)?.reject(new Error(l.message)),E.delete(l.requestId))}else if(s.type===j)d(t.fallbackMessage,"bot");else if(s.type===W){let l=s.payload?.messages??[];l.length===0?v():l.forEach(T=>d(T.text,h(T.sender),T))}else if(s.type===$&&s.payload?.open)r.focus();else if(s.type===q){let l=s.payload?.presence??null;le(f,g,l)}}});let A=!1,C;function S(){C&&(clearTimeout(C),C=void 0),A&&(A=!1,b({type:_,payload:{isTyping:!1}}))}r.addEventListener("input",()=>{A||(A=!0,b({type:_,payload:{isTyping:!0}})),C&&clearTimeout(C),C=setTimeout(S,2e3)});function x(c){c&&(S(),d(c,"visitor"),b({type:N,payload:{text:c}}),r.value="")}a.addEventListener("submit",c=>{c.preventDefault(),x(r.value.trim())}),u?.addEventListener("change",async()=>{let c=u.files?.[0];if(!c)return;u.value="";let s=r.value.trim();try{let{url:l,name:T,mime:H}=await i(c);d(s,"visitor",{attachmentUrl:l,attachmentName:T,attachmentMime:H}),b({type:N,payload:{text:s,attachmentUrl:l,attachmentName:T,attachmentMime:H}}),r.value=""}catch{d("No se pudo subir el archivo. Intenta de nuevo.","bot")}}),b({type:B,payload:{triggerIcon:t.triggerIcon,soundEnabled:t.soundEnabled,soundTriggers:t.soundTriggers,autoOpenAfterSeconds:t.autoOpenAfterSeconds}})}ce();})();
1
+ "use strict";(()=>{var ee=["\u{1F600}","\u{1F602}","\u{1F609}","\u{1F60A}","\u{1F60D}","\u{1F914}","\u{1F605}","\u{1F622}","\u{1F62E}","\u{1F60E}","\u{1F64F}","\u{1F44D}","\u{1F44E}","\u{1F44F}","\u{1F64C}","\u{1F389}","\u2764\uFE0F","\u{1F525}","\u2705","\u274C","\u26A0\uFE0F","\u{1F4A1}","\u{1F4CE}","\u23F3"];function te(e){return!!e&&e.startsWith("image/")}function R(e,r,n){let t=document.createElement("div");if(t.className=`chat-bubble chat-bubble--${r}`,r==="admin"){let a=document.createElement("div");a.className="chat-bubble-label",a.textContent="Agente",t.appendChild(a)}if(e){let a=document.createElement("div");a.textContent=e,t.appendChild(a)}return n?.attachmentUrl&&t.appendChild(ne(n)),t}function ne(e){let{attachmentUrl:r,attachmentName:n,attachmentMime:t}=e;if(te(t)){let o=document.createElement("a");o.href=r,o.target="_blank",o.rel="noopener noreferrer",o.className="chat-attachment-image-link";let c=document.createElement("img");return c.src=r,c.alt=n??"",c.className="chat-attachment-image",o.appendChild(c),o}let a=document.createElement("a");return a.href=r,a.target="_blank",a.rel="noopener noreferrer",a.className="chat-attachment-file",a.textContent=`\u{1F4CE} ${n??"Archivo adjunto"}`,a}function I(){let e=document.createElement("div");e.className="chat-bubble chat-bubble--admin chat-typing-indicator",e.setAttribute("aria-live","polite"),e.setAttribute("aria-label","El agente est\xE1 escribiendo");for(let r=0;r<3;r++){let n=document.createElement("span");n.className="chat-typing-dot",e.appendChild(n)}return e}function M(e){let r=document.createElement("div");r.className="chat-emoji-wrapper";let n=document.createElement("button");n.type="button",n.className="chat-emoji-toggle",n.setAttribute("aria-label","Insertar emoji"),n.textContent="\u{1F642}";let t=document.createElement("div");return t.className="chat-emoji-panel",t.hidden=!0,ee.forEach(a=>{let o=document.createElement("button");o.type="button",o.className="chat-emoji-option",o.textContent=a,o.addEventListener("click",()=>{e(a),t.hidden=!0}),t.appendChild(o)}),n.addEventListener("click",()=>{t.hidden=!t.hidden}),document.addEventListener("click",a=>{r.contains(a.target)||(t.hidden=!0)}),r.appendChild(n),r.appendChild(t),{wrapper:r,toggleButton:n}}var ae={SOFT_TINT:"linear-gradient(180deg, color-mix(in srgb, var(--chat-primary-color) 8%, white) 0%, white 100%)",DIAGONAL_WASH:"linear-gradient(135deg, color-mix(in srgb, var(--chat-primary-color) 14%, white) 0%, white 55%, color-mix(in srgb, var(--chat-primary-color) 6%, white) 100%)",RADIAL_GLOW:"radial-gradient(120% 60% at 50% 0%, color-mix(in srgb, var(--chat-primary-color) 18%, white) 0%, white 65%)",DUOTONE_SOFT:"linear-gradient(160deg, color-mix(in srgb, var(--chat-primary-color) 20%, white) 0%, color-mix(in srgb, var(--chat-primary-color) 5%, white) 100%)",MESH_SOFT:"radial-gradient(60% 50% at 15% 10%, color-mix(in srgb, var(--chat-primary-color) 20%, white) 0%, transparent 60%), radial-gradient(50% 45% at 90% 20%, color-mix(in srgb, var(--chat-primary-color) 14%, white) 0%, transparent 60%), radial-gradient(70% 60% at 50% 100%, color-mix(in srgb, var(--chat-primary-color) 10%, white) 0%, transparent 60%), white"},oe={SOFT_TINT:"linear-gradient(180deg, color-mix(in srgb, var(--chat-primary-color) 14%, #17181f) 0%, #17181f 100%)",DIAGONAL_WASH:"linear-gradient(135deg, color-mix(in srgb, var(--chat-primary-color) 22%, #17181f) 0%, #17181f 55%, color-mix(in srgb, var(--chat-primary-color) 10%, #17181f) 100%)",RADIAL_GLOW:"radial-gradient(120% 60% at 50% 0%, color-mix(in srgb, var(--chat-primary-color) 26%, #17181f) 0%, #17181f 65%)",DUOTONE_SOFT:"linear-gradient(160deg, color-mix(in srgb, var(--chat-primary-color) 28%, #17181f) 0%, color-mix(in srgb, var(--chat-primary-color) 8%, #17181f) 100%)",MESH_SOFT:"radial-gradient(60% 50% at 15% 10%, color-mix(in srgb, var(--chat-primary-color) 28%, #17181f) 0%, transparent 60%), radial-gradient(50% 45% at 90% 20%, color-mix(in srgb, var(--chat-primary-color) 20%, #17181f) 0%, transparent 60%), radial-gradient(70% 60% at 50% 100%, color-mix(in srgb, var(--chat-primary-color) 16%, #17181f) 0%, transparent 60%), #17181f"};function w(e){e.primaryColor&&document.documentElement.style.setProperty("--chat-primary-color",e.primaryColor);let r=e.colorScheme==="DARK";document.body.dataset.theme=r?"dark":"light";let n=r?oe:ae,t=e.backgroundStyle&&n[e.backgroundStyle];t&&document.documentElement.style.setProperty("--chat-bg",t)}function D(e,r){let n=document.createElement("div");n.className="chat-welcome-card";let t=document.createElement("div");t.className="chat-welcome-card-icon",t.textContent="\u{1F4AC}",n.appendChild(t);let a=document.createElement("h4");a.className="chat-welcome-card-heading",a.textContent=`\xA1Hola! Bienvenido a ${e}`,n.appendChild(a);let o=document.createElement("p");return o.className="chat-welcome-card-body",o.textContent=r,n.appendChild(o),n}function L(e){return e==="SLASH"?"/":"@"}function U(e,r,n){let t=document.createElement("div");t.className="chat-autocomplete-panel",t.hidden=!0;let a=0,o=[];function c(){t.replaceChildren(),o.forEach((i,p)=>{let u=document.createElement("button");u.type="button",u.className=p===a?"chat-autocomplete-option chat-autocomplete-option--active":"chat-autocomplete-option";let g=document.createElement("span");g.className="chat-autocomplete-trigger",g.textContent=`${L(i.symbol)}${i.trigger}`;let y=document.createElement("span");y.className="chat-autocomplete-label",y.textContent=i.label,u.appendChild(g),u.appendChild(y),u.addEventListener("mousedown",m=>{m.preventDefault(),C(i)}),t.appendChild(u)})}function C(i){n(`${L(i.symbol)}${i.trigger} `),h()}function h(){t.hidden=!0,o=[]}function T(){let i=/^([/@])(\S*)$/.exec(e.value);if(!i){h();return}let[,p,u]=i,g=p==="/"?"SLASH":"AT";if(o=r.filter(y=>y.symbol===g&&y.trigger.toLowerCase().startsWith(u.toLowerCase())),o.length===0){h();return}a=0,t.hidden=!1,c()}return e.addEventListener("input",T),e.addEventListener("keydown",i=>{t.hidden||o.length===0||(i.key==="ArrowDown"?(i.preventDefault(),a=(a+1)%o.length,c()):i.key==="ArrowUp"?(i.preventDefault(),a=(a-1+o.length)%o.length,c()):i.key==="Enter"||i.key==="Tab"?(i.preventDefault(),C(o[a])):i.key==="Escape"&&h())}),document.addEventListener("click",i=>{!t.contains(i.target)&&i.target!==e&&h()}),t}var re={TICKET_CREATE:"\u{1F3AB}",TICKET_LOOKUP:"\u{1F50D}",SHOW_MENU:"\u{1F4CB}",CANNED_REPLY:"\u{1F4AC}",RUN_WORKFLOW:"\u26A1"};function k(e){return e&&re[e]||"\u{1F4AC}"}function B(e,r){let n=document.createElement("div");return n.className="chat-quick-replies",e.forEach(t=>{let a=document.createElement("button");a.type="button",a.className="chat-quick-reply-chip";let o=t.symbol==="SLASH"?"/":"@";a.textContent=`${k(t.action)} ${t.label}`,a.addEventListener("click",()=>r(`${o}${t.trigger}`)),n.appendChild(a)}),n}function G(e,r,n,t){let a=document.createElement("button");a.type="button",a.className="chat-cta-button";let o=r?k(r.action):"\u{1F4AC}";return a.textContent=`${o} ${e}`,a.addEventListener("click",()=>{if(r){let c=r.symbol==="SLASH"?"/":"@";n(`${c}${r.trigger}`)}else t()}),a}var $="chat:ready";var Y="chat:close",j="chat:toggle";var _="chat:send",W="chat:bot-reply",F="chat:connect-error",K="chat:history",q="chat:admin-message",V="chat:admin-typing",Q="chat:agent-presence",H="chat:typing",z="chat:upload-attachment",Z="chat:attachment-uploaded",J="chat:attachment-upload-error";function ie(){let e=new URLSearchParams(location.hash.replace(/^#/,""));return{prefix:e.get("prefix"),apiBase:e.get("api"),welcomeText:e.get("welcome"),primaryColor:e.get("color"),colorScheme:e.get("scheme")}}function A(e){window.parent.postMessage(e,"*")}async function le(e,r){let n=await fetch(`${e}/public/sites/${r}`);if(!n.ok)throw new Error("site config unavailable");return n.json()}function ce(e){let r=document.getElementById("app");for(;r.firstChild;)r.removeChild(r.firstChild);let n=document.createElement("div");n.className="chat-shell";let t=document.createElement("div");t.className="chat-header";let a=document.createElement("div");a.className="chat-header-title";let o=document.createElement("span");if(o.className="chat-header-avatar-wrap",e.logoUrl){let m=document.createElement("img");m.src=e.logoUrl,m.alt="",o.appendChild(m)}else{let m=document.createElement("span");m.className="chat-header-avatar",m.textContent=e.name.slice(0,1).toUpperCase(),o.appendChild(m)}a.appendChild(o);let c=document.createElement("div");c.className="chat-header-text";let C=document.createElement("span");C.className="chat-header-name",C.textContent=e.name,c.appendChild(C),a.appendChild(c),t.appendChild(a);let h=document.createElement("button");h.className="chat-close-button",h.type="button",h.setAttribute("aria-label","Cerrar"),h.textContent="\u2715",h.addEventListener("click",()=>A({type:Y})),t.appendChild(h);let T=document.createElement("div");T.className="chat-messages";let i=document.createElement("form");i.className="chat-input-row";let p=document.createElement("input");p.type="text",p.placeholder="Escribe un mensaje o /menu",p.autocomplete="off";let u,g;if(e.attachmentsEnabled){u=document.createElement("button"),u.type="button",u.className="chat-attach-button",u.setAttribute("aria-label","Adjuntar archivo"),u.textContent="\u{1F4CE}",g=document.createElement("input"),g.type="file",g.accept="image/png,image/jpeg,image/gif,image/webp,application/pdf",g.style.display="none";let m=g;u.addEventListener("click",()=>m.click()),i.appendChild(u),i.appendChild(g)}if(e.emojiPickerEnabled!==!1){let{wrapper:m}=M(E=>{let x=p.selectionStart??p.value.length,N=p.selectionEnd??p.value.length;p.value=p.value.slice(0,x)+E+p.value.slice(N),p.focus(),p.selectionStart=p.selectionEnd=x+E.length});i.appendChild(m)}let y=document.createElement("button");if(y.type="submit",y.textContent=e.sendButtonText||"Enviar",e.commands?.length){let m=U(p,e.commands,E=>{p.value=E,p.focus()});i.appendChild(m)}return i.appendChild(p),i.appendChild(y),n.appendChild(t),n.appendChild(T),n.appendChild(i),r.appendChild(n),{messages:T,inputRow:i,input:p,attachButton:u,attachInput:g,avatarWrap:o,textCol:c}}function se(e){let r=Date.now()-new Date(e).getTime(),n=Math.round(r/6e4);if(n<1)return"justo ahora";if(n<60)return`hace ${n} min`;let t=Math.round(n/60);return t<24?`hace ${t} h`:`hace ${Math.round(t/24)} d`}function de(e,r,n){if(e.querySelector(".chat-header-presence")?.remove(),r.querySelector(".chat-header-subtitle")?.remove(),!!n){if(n.viewing){let t=document.createElement("span");t.className="chat-header-presence",t.setAttribute("aria-hidden","true"),e.appendChild(t);let a=document.createElement("span");a.className="chat-header-subtitle",a.textContent=n.agentName?`${n.agentName} est\xE1 en l\xEDnea`:"En l\xEDnea",r.appendChild(a)}else if(n.lastActiveAt){let t=document.createElement("span");t.className="chat-header-subtitle",t.textContent=`\xDAltima vez activo ${se(n.lastActiveAt)}`,r.appendChild(t)}}}async function pe(){let{prefix:e,apiBase:r,welcomeText:n,primaryColor:t,colorScheme:a}=ie();if(!e||!r){document.body.textContent="Configuraci\xF3n inv\xE1lida.";return}let o;try{o=await le(r,e)}catch{document.body.textContent="No se pudo cargar el chat.";return}n&&(o.welcomeText=n),t&&(o.primaryColor=t),(a==="LIGHT"||a==="DARK")&&(o.colorScheme=a),w(o);let{messages:c,inputRow:C,input:h,attachInput:T,avatarWrap:i,textCol:p}=ce(o),u=new Map;function g(s){let d=crypto.randomUUID();return new Promise((l,f)=>{u.set(d,{resolve:l,reject:f}),A({type:z,payload:{requestId:d,file:s}})})}function y(s){return s?.attachmentUrl?.startsWith("/")?{...s,attachmentUrl:`${r}${s.attachmentUrl}`}:s}function m(s,d,l){c.appendChild(R(s,d,y(l))),c.scrollTop=c.scrollHeight}let E=null;function x(s){s&&!E?(E=I(),c.appendChild(E),c.scrollTop=c.scrollHeight):!s&&E&&(E.remove(),E=null)}function N(s){return s==="VISITOR"?"visitor":s==="ADMIN"?"admin":"bot"}function X(){let s=o.openingStyle??"SIMPLE";if(s!=="RULE_DRIVEN"&&o.welcomeText){if(s==="CARD"){c.appendChild(D(o.name,o.welcomeText)),c.scrollTop=c.scrollHeight;return}if(m(o.welcomeText,"bot"),s==="QUICK_REPLIES"&&o.commands?.length&&(c.appendChild(B(o.commands,S)),c.scrollTop=c.scrollHeight),s==="CTA_BUTTON"){let d=o.commands?.[0]??null,l=d?.label||"Iniciar conversaci\xF3n";c.appendChild(G(l,d,S,()=>h.focus())),c.scrollTop=c.scrollHeight}}}window.addEventListener("message",s=>{let d=s.data;if(!(!d||typeof d.type!="string")){if(d.type===W){let l=d.payload?.text;l&&m(l,"bot")}else if(d.type===q){let l=d.payload;l&&(x(!1),m(l.text,"admin",l))}else if(d.type===V){let l=d.payload;x(!!l?.isTyping)}else if(d.type===Z){let l=d.payload;l&&(u.get(l.requestId)?.resolve(l),u.delete(l.requestId))}else if(d.type===J){let l=d.payload;l&&(u.get(l.requestId)?.reject(new Error(l.message)),u.delete(l.requestId))}else if(d.type===F)m(o.fallbackMessage,"bot");else if(d.type===K){let l=d.payload?.messages??[];l.length===0?X():l.forEach(f=>m(f.text,N(f.sender),f))}else if(d.type===j&&d.payload?.open)h.focus();else if(d.type===Q){let l=d.payload?.presence??null;de(i,p,l)}}});let v=!1,b;function O(){b&&(clearTimeout(b),b=void 0),v&&(v=!1,A({type:H,payload:{isTyping:!1}}))}h.addEventListener("input",()=>{v||(v=!0,A({type:H,payload:{isTyping:!0}})),b&&clearTimeout(b),b=setTimeout(O,2e3)});function S(s){s&&(O(),m(s,"visitor"),A({type:_,payload:{text:s}}),h.value="")}C.addEventListener("submit",s=>{s.preventDefault(),S(h.value.trim())}),T?.addEventListener("change",async()=>{let s=T.files?.[0];if(!s)return;T.value="";let d=h.value.trim();try{let{url:l,name:f,mime:P}=await g(s);m(d,"visitor",{attachmentUrl:l,attachmentName:f,attachmentMime:P}),A({type:_,payload:{text:d,attachmentUrl:l,attachmentName:f,attachmentMime:P}}),h.value=""}catch{m("No se pudo subir el archivo. Intenta de nuevo.","bot")}}),A({type:$,payload:{triggerIcon:o.triggerIcon,soundEnabled:o.soundEnabled,soundTriggers:o.soundTriggers,autoOpenAfterSeconds:o.autoOpenAfterSeconds}})}pe();})();
package/dist/loader.js CHANGED
@@ -1,5 +1,5 @@
1
- "use strict";(()=>{var Lt=Object.defineProperty;var Pt=(r,e)=>{for(var t in e)Lt(r,t,{get:e[t],enumerable:!0})};var x=Object.create(null);x.open="0";x.close="1";x.ping="2";x.pong="3";x.message="4";x.upgrade="5";x.noop="6";var U=Object.create(null);Object.keys(x).forEach(r=>{U[x[r]]=r});var V={type:"error",data:"parser error"};var Ie=typeof Blob=="function"||typeof Blob<"u"&&Object.prototype.toString.call(Blob)==="[object BlobConstructor]",De=typeof ArrayBuffer=="function",qe=r=>typeof ArrayBuffer.isView=="function"?ArrayBuffer.isView(r):r&&r.buffer instanceof ArrayBuffer,F=({type:r,data:e},t,n)=>Ie&&e instanceof Blob?t?n(e):Be(e,n):De&&(e instanceof ArrayBuffer||qe(e))?t?n(e):Be(new Blob([e]),n):n(x[r]+(e||"")),Be=(r,e)=>{let t=new FileReader;return t.onload=function(){let n=t.result.split(",")[1];e("b"+(n||""))},t.readAsDataURL(r)};function He(r){return r instanceof Uint8Array?r:r instanceof ArrayBuffer?new Uint8Array(r):new Uint8Array(r.buffer,r.byteOffset,r.byteLength)}var le;function Ue(r,e){if(Ie&&r.data instanceof Blob)return r.data.arrayBuffer().then(He).then(e);if(De&&(r.data instanceof ArrayBuffer||qe(r.data)))return e(He(r.data));F(r,!1,t=>{le||(le=new TextEncoder),e(le.encode(t))})}var Ve="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",G=typeof Uint8Array>"u"?[]:new Uint8Array(256);for(let r=0;r<Ve.length;r++)G[Ve.charCodeAt(r)]=r;var Fe=r=>{let e=r.length*.75,t=r.length,n,s=0,i,o,a,c;r[r.length-1]==="="&&(e--,r[r.length-2]==="="&&e--);let f=new ArrayBuffer(e),u=new Uint8Array(f);for(n=0;n<t;n+=4)i=G[r.charCodeAt(n)],o=G[r.charCodeAt(n+1)],a=G[r.charCodeAt(n+2)],c=G[r.charCodeAt(n+3)],u[s++]=i<<2|o>>4,u[s++]=(o&15)<<4|a>>2,u[s++]=(a&3)<<6|c&63;return f};var Mt=typeof ArrayBuffer=="function",z=(r,e)=>{if(typeof r!="string")return{type:"message",data:Ge(r,e)};let t=r.charAt(0);return t==="b"?{type:"message",data:Bt(r.substring(1),e)}:U[t]?r.length>1?{type:U[t],data:r.substring(1)}:{type:U[t]}:V},Bt=(r,e)=>{if(Mt){let t=Fe(r);return Ge(t,e)}else return{base64:!0,data:r}},Ge=(r,e)=>{switch(e){case"blob":return r instanceof Blob?r:new Blob([r]);case"arraybuffer":default:return r instanceof ArrayBuffer?r:r.buffer}};var ze="",Ye=(r,e)=>{let t=r.length,n=new Array(t),s=0;r.forEach((i,o)=>{F(i,!1,a=>{n[o]=a,++s===t&&e(n.join(ze))})})},$e=(r,e)=>{let t=r.split(ze),n=[];for(let s=0;s<t.length;s++){let i=z(t[s],e);if(n.push(i),i.type==="error")break}return n};function Ke(){return new TransformStream({transform(r,e){Ue(r,t=>{let n=t.length,s;if(n<126)s=new Uint8Array(1),new DataView(s.buffer).setUint8(0,n);else if(n<65536){s=new Uint8Array(3);let i=new DataView(s.buffer);i.setUint8(0,126),i.setUint16(1,n)}else{s=new Uint8Array(9);let i=new DataView(s.buffer);i.setUint8(0,127),i.setBigUint64(1,BigInt(n))}r.data&&typeof r.data!="string"&&(s[0]|=128),e.enqueue(s),e.enqueue(t)})}})}var pe;function J(r){return r.reduce((e,t)=>e+t.length,0)}function Q(r,e){if(r[0].length===e)return r.shift();let t=new Uint8Array(e),n=0;for(let s=0;s<e;s++)t[s]=r[0][n++],n===r[0].length&&(r.shift(),n=0);return r.length&&n<r[0].length&&(r[0]=r[0].slice(n)),t}function Ze(r,e){pe||(pe=new TextDecoder);let t=[],n=0,s=-1,i=!1;return new TransformStream({transform(o,a){for(t.push(o);;){if(n===0){if(J(t)<1)break;let c=Q(t,1);i=(c[0]&128)===128,s=c[0]&127,s<126?n=3:s===126?n=1:n=2}else if(n===1){if(J(t)<2)break;let c=Q(t,2);s=new DataView(c.buffer,c.byteOffset,c.length).getUint16(0),n=3}else if(n===2){if(J(t)<8)break;let c=Q(t,8),f=new DataView(c.buffer,c.byteOffset,c.length),u=f.getUint32(0);if(u>Math.pow(2,21)-1){a.enqueue(V);break}s=u*Math.pow(2,32)+f.getUint32(4),n=3}else{if(J(t)<s)break;let c=Q(t,s);a.enqueue(z(i?c:pe.decode(c),e)),n=0}if(s===0||s>r){a.enqueue(V);break}}}})}var ue=4;function p(r){if(r)return Ht(r)}function Ht(r){for(var e in p.prototype)r[e]=p.prototype[e];return r}p.prototype.on=p.prototype.addEventListener=function(r,e){return this._callbacks=this._callbacks||{},(this._callbacks["$"+r]=this._callbacks["$"+r]||[]).push(e),this};p.prototype.once=function(r,e){function t(){this.off(r,t),e.apply(this,arguments)}return t.fn=e,this.on(r,t),this};p.prototype.off=p.prototype.removeListener=p.prototype.removeAllListeners=p.prototype.removeEventListener=function(r,e){if(this._callbacks=this._callbacks||{},arguments.length==0)return this._callbacks={},this;var t=this._callbacks["$"+r];if(!t)return this;if(arguments.length==1)return delete this._callbacks["$"+r],this;for(var n,s=0;s<t.length;s++)if(n=t[s],n===e||n.fn===e){t.splice(s,1);break}return t.length===0&&delete this._callbacks["$"+r],this};p.prototype.emit=function(r){this._callbacks=this._callbacks||{};for(var e=new Array(arguments.length-1),t=this._callbacks["$"+r],n=1;n<arguments.length;n++)e[n-1]=arguments[n];if(t){t=t.slice(0);for(var n=0,s=t.length;n<s;++n)t[n].apply(this,e)}return this};p.prototype.emitReserved=p.prototype.emit;p.prototype.listeners=function(r){return this._callbacks=this._callbacks||{},this._callbacks["$"+r]||[]};p.prototype.hasListeners=function(r){return!!this.listeners(r).length};var T=typeof Promise=="function"&&typeof Promise.resolve=="function"?e=>Promise.resolve().then(e):(e,t)=>t(e,0),g=typeof self<"u"?self:typeof window<"u"?window:Function("return this")(),We="arraybuffer";function j(r,...e){return e.reduce((t,n)=>(r.hasOwnProperty(n)&&(t[n]=r[n]),t),{})}var It=g.setTimeout,Dt=g.clearTimeout;function A(r,e){e.useNativeTimers?(r.setTimeoutFn=It.bind(g),r.clearTimeoutFn=Dt.bind(g)):(r.setTimeoutFn=g.setTimeout.bind(g),r.clearTimeoutFn=g.clearTimeout.bind(g))}var qt=1.33;function Xe(r){return typeof r=="string"?Ut(r):Math.ceil((r.byteLength||r.size)*qt)}function Ut(r){let e=0,t=0;for(let n=0,s=r.length;n<s;n++)e=r.charCodeAt(n),e<128?t+=1:e<2048?t+=2:e<55296||e>=57344?t+=3:(n++,t+=4);return t}function ee(){return Date.now().toString(36).substring(3)+Math.random().toString(36).substring(2,5)}function Je(r){let e="";for(let t in r)r.hasOwnProperty(t)&&(e.length&&(e+="&"),e+=encodeURIComponent(t)+"="+encodeURIComponent(r[t]));return e}function Qe(r){let e={},t=r.split("&");for(let n=0,s=t.length;n<s;n++){let i=t[n].split("=");e[decodeURIComponent(i[0])]=decodeURIComponent(i[1])}return e}var te=class extends Error{constructor(e,t,n){super(e),this.description=t,this.context=n,this.type="TransportError"}},w=class extends p{constructor(e){super(),this.writable=!1,A(this,e),this.opts=e,this.query=e.query,this.socket=e.socket,this.supportsBinary=!e.forceBase64}onError(e,t,n){return super.emitReserved("error",new te(e,t,n)),this}open(){return this.readyState="opening",this.doOpen(),this}close(){return(this.readyState==="opening"||this.readyState==="open")&&(this.doClose(),this.onClose()),this}send(e){this.readyState==="open"&&this.write(e)}onOpen(){this.readyState="open",this.writable=!0,super.emitReserved("open")}onData(e){let t=z(e,this.socket.binaryType);this.onPacket(t)}onPacket(e){super.emitReserved("packet",e)}onClose(e){this.readyState="closed",super.emitReserved("close",e)}pause(e){}createUri(e,t={}){return e+"://"+this._hostname()+this._port()+this.opts.path+this._query(t)}_hostname(){let e=this.opts.hostname;return e.indexOf(":")===-1?e:"["+e+"]"}_port(){return this.opts.port&&(this.opts.secure&&Number(this.opts.port)!==443||!this.opts.secure&&Number(this.opts.port)!==80)?":"+this.opts.port:""}_query(e){let t=Je(e);return t.length?"?"+t:""}};var Y=class extends w{constructor(){super(...arguments),this._polling=!1}get name(){return"polling"}doOpen(){this._poll()}pause(e){this.readyState="pausing";let t=()=>{this.readyState="paused",e()};if(this._polling||!this.writable){let n=0;this._polling&&(n++,this.once("pollComplete",function(){--n||t()})),this.writable||(n++,this.once("drain",function(){--n||t()}))}else t()}_poll(){this._polling=!0,this.doPoll(),this.emitReserved("poll")}onData(e){let t=n=>{if(this.readyState==="opening"&&n.type==="open"&&this.onOpen(),n.type==="close")return this.onClose({description:"transport closed by the server"}),!1;this.onPacket(n)};$e(e,this.socket.binaryType).forEach(t),this.readyState!=="closed"&&(this._polling=!1,this.emitReserved("pollComplete"),this.readyState==="open"&&this._poll())}doClose(){let e=()=>{this.write([{type:"close"}])};this.readyState==="open"?e():this.once("open",e)}write(e){this.writable=!1,Ye(e,t=>{this.doWrite(t,()=>{this.writable=!0,this.emitReserved("drain")})})}uri(){let e=this.opts.secure?"https":"http",t=this.query||{};return this.opts.timestampRequests!==!1&&(t[this.opts.timestampParam]=ee()),!this.supportsBinary&&!t.sid&&(t.b64=1),this.createUri(e,t)}};var je=!1;try{je=typeof XMLHttpRequest<"u"&&"withCredentials"in new XMLHttpRequest}catch{}var et=je;function Vt(){}var fe=class extends Y{constructor(e){if(super(e),typeof location<"u"){let t=location.protocol==="https:",n=location.port;n||(n=t?"443":"80"),this.xd=typeof location<"u"&&e.hostname!==location.hostname||n!==e.port}}doWrite(e,t){let n=this.request({method:"POST",data:e});n.on("success",t),n.on("error",(s,i)=>{this.onError("xhr post error",s,i)})}doPoll(){let e=this.request();e.on("data",this.onData.bind(this)),e.on("error",(t,n)=>{this.onError("xhr poll error",t,n)}),this.pollXhr=e}},v=class r extends p{constructor(e,t,n){super(),this.createRequest=e,A(this,n),this._opts=n,this._method=n.method||"GET",this._uri=t,this._data=n.data!==void 0?n.data:null,this._create()}_create(){var e;let t=j(this._opts,"agent","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","autoUnref");t.xdomain=!!this._opts.xd;let n=this._xhr=this.createRequest(t);try{n.open(this._method,this._uri,!0);try{if(this._opts.extraHeaders){n.setDisableHeaderCheck&&n.setDisableHeaderCheck(!0);for(let s in this._opts.extraHeaders)this._opts.extraHeaders.hasOwnProperty(s)&&n.setRequestHeader(s,this._opts.extraHeaders[s])}}catch{}if(this._method==="POST")try{n.setRequestHeader("Content-type","text/plain;charset=UTF-8")}catch{}try{n.setRequestHeader("Accept","*/*")}catch{}(e=this._opts.cookieJar)===null||e===void 0||e.addCookies(n),"withCredentials"in n&&(n.withCredentials=this._opts.withCredentials),this._opts.requestTimeout&&(n.timeout=this._opts.requestTimeout),n.onreadystatechange=()=>{var s;n.readyState===3&&((s=this._opts.cookieJar)===null||s===void 0||s.parseCookies(n.getResponseHeader("set-cookie"))),n.readyState===4&&(n.status===200||n.status===1223?this._onLoad():this.setTimeoutFn(()=>{this._onError(typeof n.status=="number"?n.status:0)},0))},n.send(this._data)}catch(s){this.setTimeoutFn(()=>{this._onError(s)},0);return}typeof document<"u"&&(this._index=r.requestsCount++,r.requests[this._index]=this)}_onError(e){this.emitReserved("error",e,this._xhr),this._cleanup(!0)}_cleanup(e){if(!(typeof this._xhr>"u"||this._xhr===null)){if(this._xhr.onreadystatechange=Vt,e)try{this._xhr.abort()}catch{}typeof document<"u"&&delete r.requests[this._index],this._xhr=null}}_onLoad(){let e=this._xhr.responseText;e!==null&&(this.emitReserved("data",e),this.emitReserved("success"),this._cleanup())}abort(){this._cleanup()}};v.requestsCount=0;v.requests={};if(typeof document<"u"){if(typeof attachEvent=="function")attachEvent("onunload",tt);else if(typeof addEventListener=="function"){let r="onpagehide"in g?"pagehide":"unload";addEventListener(r,tt,!1)}}function tt(){for(let r in v.requests)v.requests.hasOwnProperty(r)&&v.requests[r].abort()}var Ft=function(){let r=rt({xdomain:!1});return r&&r.responseType!==null}(),S=class extends fe{constructor(e){super(e);let t=e&&e.forceBase64;this.supportsBinary=Ft&&!t}request(e={}){return Object.assign(e,{xd:this.xd},this.opts),new v(rt,this.uri(),e)}};function rt(r){let e=r.xdomain;try{if(typeof XMLHttpRequest<"u"&&(!e||et))return new XMLHttpRequest}catch{}if(!e)try{return new g[["Active"].concat("Object").join("X")]("Microsoft.XMLHTTP")}catch{}}var nt=typeof navigator<"u"&&typeof navigator.product=="string"&&navigator.product.toLowerCase()==="reactnative",me=class extends w{get name(){return"websocket"}doOpen(){let e=this.uri(),t=this.opts.protocols,n=nt?{}:j(this.opts,"agent","perMessageDeflate","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","localAddress","protocolVersion","origin","maxPayload","family","checkServerIdentity");this.opts.extraHeaders&&(n.headers=this.opts.extraHeaders);try{this.ws=this.createSocket(e,t,n)}catch(s){return this.emitReserved("error",s)}this.ws.binaryType=this.socket.binaryType,this.addEventListeners()}addEventListeners(){this.ws.onopen=()=>{this.opts.autoUnref&&this.ws._socket.unref(),this.onOpen()},this.ws.onclose=e=>this.onClose({description:"websocket connection closed",context:e}),this.ws.onmessage=e=>this.onData(e.data),this.ws.onerror=e=>this.onError("websocket error",e)}write(e){this.writable=!1;for(let t=0;t<e.length;t++){let n=e[t],s=t===e.length-1;F(n,this.supportsBinary,i=>{try{this.doWrite(n,i)}catch{}s&&T(()=>{this.writable=!0,this.emitReserved("drain")},this.setTimeoutFn)})}}doClose(){typeof this.ws<"u"&&(this.ws.onerror=()=>{},this.ws.close(),this.ws=null)}uri(){let e=this.opts.secure?"wss":"ws",t=this.query||{};return this.opts.timestampRequests&&(t[this.opts.timestampParam]=ee()),this.supportsBinary||(t.b64=1),this.createUri(e,t)}},de=g.WebSocket||g.MozWebSocket,k=class extends me{createSocket(e,t,n){return nt?new de(e,t,n):t?new de(e,t):new de(e)}doWrite(e,t){this.ws.send(t)}};var P=class extends w{get name(){return"webtransport"}doOpen(){try{this._transport=new WebTransport(this.createUri("https"),this.opts.transportOptions[this.name])}catch(e){return this.emitReserved("error",e)}this._transport.closed.then(()=>{this.onClose()}).catch(e=>{this.onError("webtransport error",e)}),this._transport.ready.then(()=>{this._transport.createBidirectionalStream().then(e=>{let t=Ze(Number.MAX_SAFE_INTEGER,this.socket.binaryType),n=e.readable.pipeThrough(t).getReader(),s=Ke();s.readable.pipeTo(e.writable),this._writer=s.writable.getWriter();let i=()=>{n.read().then(({done:a,value:c})=>{a||(this.onPacket(c),i())}).catch(a=>{})};i();let o={type:"open"};this.query.sid&&(o.data=`{"sid":"${this.query.sid}"}`),this._writer.write(o).then(()=>this.onOpen())})})}write(e){this.writable=!1;for(let t=0;t<e.length;t++){let n=e[t],s=t===e.length-1;this._writer.write(n).then(()=>{s&&T(()=>{this.writable=!0,this.emitReserved("drain")},this.setTimeoutFn)})}}doClose(){var e;(e=this._transport)===null||e===void 0||e.close()}};var ye={websocket:k,webtransport:P,polling:S};var Gt=/^(?:(?![^:@\/?#]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@\/?#]*)(?::([^:@\/?#]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/,zt=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"];function M(r){if(r.length>8e3)throw"URI too long";let e=r,t=r.indexOf("["),n=r.indexOf("]");t!=-1&&n!=-1&&(r=r.substring(0,t)+r.substring(t,n).replace(/:/g,";")+r.substring(n,r.length));let s=Gt.exec(r||""),i={},o=14;for(;o--;)i[zt[o]]=s[o]||"";return t!=-1&&n!=-1&&(i.source=e,i.host=i.host.substring(1,i.host.length-1).replace(/;/g,":"),i.authority=i.authority.replace("[","").replace("]","").replace(/;/g,":"),i.ipv6uri=!0),i.pathNames=Yt(i,i.path),i.queryKey=$t(i,i.query),i}function Yt(r,e){let t=/\/{2,9}/g,n=e.replace(t,"/").split("/");return(e.slice(0,1)=="/"||e.length===0)&&n.splice(0,1),e.slice(-1)=="/"&&n.splice(n.length-1,1),n}function $t(r,e){let t={};return e.replace(/(?:^|&)([^&=]*)=?([^&]*)/g,function(n,s,i){s&&(t[s]=i)}),t}var ge=typeof addEventListener=="function"&&typeof removeEventListener=="function",re=[];ge&&addEventListener("offline",()=>{re.forEach(r=>r())},!1);var N=class r extends p{constructor(e,t){if(super(),this.binaryType=We,this.writeBuffer=[],this._prevBufferLen=0,this._pingInterval=-1,this._pingTimeout=-1,this._maxPayload=-1,this._pingTimeoutTime=1/0,e&&typeof e=="object"&&(t=e,e=null),e){let n=M(e);t.hostname=n.host,t.secure=n.protocol==="https"||n.protocol==="wss",t.port=n.port,n.query&&(t.query=n.query)}else t.host&&(t.hostname=M(t.host).host);A(this,t),this.secure=t.secure!=null?t.secure:typeof location<"u"&&location.protocol==="https:",t.hostname&&!t.port&&(t.port=this.secure?"443":"80"),this.hostname=t.hostname||(typeof location<"u"?location.hostname:"localhost"),this.port=t.port||(typeof location<"u"&&location.port?location.port:this.secure?"443":"80"),this.transports=[],this._transportsByName={},t.transports.forEach(n=>{let s=n.prototype.name;this.transports.push(s),this._transportsByName[s]=n}),this.opts=Object.assign({path:"/engine.io",agent:!1,withCredentials:!1,upgrade:!0,timestampParam:"t",rememberUpgrade:!1,addTrailingSlash:!0,rejectUnauthorized:!0,perMessageDeflate:{threshold:1024},transportOptions:{},closeOnBeforeunload:!1},t),this.opts.path=this.opts.path.replace(/\/$/,"")+(this.opts.addTrailingSlash?"/":""),typeof this.opts.query=="string"&&(this.opts.query=Qe(this.opts.query)),ge&&(this.opts.closeOnBeforeunload&&(this._beforeunloadEventListener=()=>{this.transport&&(this.transport.removeAllListeners(),this.transport.close())},addEventListener("beforeunload",this._beforeunloadEventListener,!1)),this.hostname!=="localhost"&&(this._offlineEventListener=()=>{this._onClose("transport close",{description:"network connection lost"})},re.push(this._offlineEventListener))),this.opts.withCredentials&&(this._cookieJar=void 0),this._open()}createTransport(e){let t=Object.assign({},this.opts.query);t.EIO=ue,t.transport=e,this.id&&(t.sid=this.id);let n=Object.assign({},this.opts,{query:t,socket:this,hostname:this.hostname,secure:this.secure,port:this.port},this.opts.transportOptions[e]);return new this._transportsByName[e](n)}_open(){if(this.transports.length===0){this.setTimeoutFn(()=>{this.emitReserved("error","No transports available")},0);return}let e=this.opts.rememberUpgrade&&r.priorWebsocketSuccess&&this.transports.indexOf("websocket")!==-1?"websocket":this.transports[0];this.readyState="opening";let t=this.createTransport(e);t.open(),this.setTransport(t)}setTransport(e){this.transport&&this.transport.removeAllListeners(),this.transport=e,e.on("drain",this._onDrain.bind(this)).on("packet",this._onPacket.bind(this)).on("error",this._onError.bind(this)).on("close",t=>this._onClose("transport close",t))}onOpen(){this.readyState="open",r.priorWebsocketSuccess=this.transport.name==="websocket",this.emitReserved("open"),this.flush()}_onPacket(e){if(this.readyState==="opening"||this.readyState==="open"||this.readyState==="closing")switch(this.emitReserved("packet",e),this.emitReserved("heartbeat"),e.type){case"open":this.onHandshake(JSON.parse(e.data));break;case"ping":this._sendPacket("pong"),this.emitReserved("ping"),this.emitReserved("pong"),this._resetPingTimeout();break;case"error":let t=new Error("server error");t.code=e.data,this._onError(t);break;case"message":this.emitReserved("data",e.data),this.emitReserved("message",e.data);break}}onHandshake(e){this.emitReserved("handshake",e),this.id=e.sid,this.transport.query.sid=e.sid,this._pingInterval=e.pingInterval,this._pingTimeout=e.pingTimeout,this._maxPayload=e.maxPayload,this.onOpen(),this.readyState!=="closed"&&this._resetPingTimeout()}_resetPingTimeout(){this.clearTimeoutFn(this._pingTimeoutTimer);let e=this._pingInterval+this._pingTimeout;this._pingTimeoutTime=Date.now()+e,this._pingTimeoutTimer=this.setTimeoutFn(()=>{this._onClose("ping timeout")},e),this.opts.autoUnref&&this._pingTimeoutTimer.unref()}_onDrain(){this.writeBuffer.splice(0,this._prevBufferLen),this._prevBufferLen=0,this.writeBuffer.length===0?this.emitReserved("drain"):this.flush()}flush(){if(this.readyState!=="closed"&&this.transport.writable&&!this.upgrading&&this.writeBuffer.length){let e=this._getWritablePackets();this.transport.send(e),this._prevBufferLen=e.length,this.emitReserved("flush")}}_getWritablePackets(){if(!(this._maxPayload&&this.transport.name==="polling"&&this.writeBuffer.length>1))return this.writeBuffer;let t=1;for(let n=0;n<this.writeBuffer.length;n++){let s=this.writeBuffer[n].data;if(s&&(t+=Xe(s)),n>0&&t>this._maxPayload)return this.writeBuffer.slice(0,n);t+=2}return this.writeBuffer}_hasPingExpired(){if(!this._pingTimeoutTime)return!0;let e=Date.now()>this._pingTimeoutTime;return e&&(this._pingTimeoutTime=0,T(()=>{this._onClose("ping timeout")},this.setTimeoutFn)),e}write(e,t,n){return this._sendPacket("message",e,t,n),this}send(e,t,n){return this._sendPacket("message",e,t,n),this}_sendPacket(e,t,n,s){if(typeof t=="function"&&(s=t,t=void 0),typeof n=="function"&&(s=n,n=null),this.readyState==="closing"||this.readyState==="closed")return;n=n||{},n.compress=n.compress!==!1;let i={type:e,data:t,options:n};this.emitReserved("packetCreate",i),this.writeBuffer.push(i),s&&this.once("flush",s),this.flush()}close(){let e=()=>{this._onClose("forced close"),this.transport.close()},t=()=>{this.off("upgrade",t),this.off("upgradeError",t),e()},n=()=>{this.once("upgrade",t),this.once("upgradeError",t)};return(this.readyState==="opening"||this.readyState==="open")&&(this.readyState="closing",this.writeBuffer.length?this.once("drain",()=>{this.upgrading?n():e()}):this.upgrading?n():e()),this}_onError(e){if(r.priorWebsocketSuccess=!1,this.opts.tryAllTransports&&this.transports.length>1&&this.readyState==="opening")return this.transports.shift(),this._open();this.emitReserved("error",e),this._onClose("transport error",e)}_onClose(e,t){if(this.readyState==="opening"||this.readyState==="open"||this.readyState==="closing"){if(this.clearTimeoutFn(this._pingTimeoutTimer),this.transport.removeAllListeners("close"),this.transport.close(),this.transport.removeAllListeners(),ge&&(this._beforeunloadEventListener&&removeEventListener("beforeunload",this._beforeunloadEventListener,!1),this._offlineEventListener)){let n=re.indexOf(this._offlineEventListener);n!==-1&&re.splice(n,1)}this.readyState="closed",this.id=null,this.emitReserved("close",e,t),this.writeBuffer=[],this._prevBufferLen=0}}};N.protocol=ue;var ne=class extends N{constructor(){super(...arguments),this._upgrades=[]}onOpen(){if(super.onOpen(),this.readyState==="open"&&this.opts.upgrade)for(let e=0;e<this._upgrades.length;e++)this._probe(this._upgrades[e])}_probe(e){let t=this.createTransport(e),n=!1;N.priorWebsocketSuccess=!1;let s=()=>{n||(t.send([{type:"ping",data:"probe"}]),t.once("packet",d=>{if(!n)if(d.type==="pong"&&d.data==="probe"){if(this.upgrading=!0,this.emitReserved("upgrading",t),!t)return;N.priorWebsocketSuccess=t.name==="websocket",this.transport.pause(()=>{n||this.readyState!=="closed"&&(u(),this.setTransport(t),t.send([{type:"upgrade"}]),this.emitReserved("upgrade",t),t=null,this.upgrading=!1,this.flush())})}else{let b=new Error("probe error");b.transport=t.name,this.emitReserved("upgradeError",b)}}))};function i(){n||(n=!0,u(),t.close(),t=null)}let o=d=>{let b=new Error("probe error: "+d);b.transport=t.name,i(),this.emitReserved("upgradeError",b)};function a(){o("transport closed")}function c(){o("socket closed")}function f(d){t&&d.name!==t.name&&i()}let u=()=>{t.removeListener("open",s),t.removeListener("error",o),t.removeListener("close",a),this.off("close",c),this.off("upgrading",f)};t.once("open",s),t.once("error",o),t.once("close",a),this.once("close",c),this.once("upgrading",f),this._upgrades.indexOf("webtransport")!==-1&&e!=="webtransport"?this.setTimeoutFn(()=>{n||t.open()},200):t.open()}onHandshake(e){this._upgrades=this._filterUpgrades(e.upgrades),super.onHandshake(e)}_filterUpgrades(e){let t=[];for(let n=0;n<e.length;n++)~this.transports.indexOf(e[n])&&t.push(e[n]);return t}},B=class extends ne{constructor(e,t={}){let n=typeof e=="object",s=n?{...e}:{...t};(!s.transports||s.transports&&typeof s.transports[0]=="string")&&(s.transports=(s.transports||["polling","websocket","webtransport"]).map(i=>ye[i]).filter(i=>!!i)),super(n?s:e,s)}};var xn=B.protocol;function st(r,e="",t){let n=r;t=t||typeof location<"u"&&location,r==null&&(r=t.protocol+"//"+t.host),typeof r=="string"&&(r.charAt(0)==="/"&&(r.charAt(1)==="/"?r=t.protocol+r:r=t.host+r),/^(https?|wss?):\/\//.test(r)||(typeof t<"u"?r=t.protocol+"//"+r:r="https://"+r),n=M(r)),n.port||(/^(http|ws)$/.test(n.protocol)?n.port="80":/^(http|ws)s$/.test(n.protocol)&&(n.port="443")),n.path=n.path||"/";let i=n.host.indexOf(":")!==-1?"["+n.host+"]":n.host;return n.id=n.protocol+"://"+i+":"+n.port+e,n.href=n.protocol+"://"+i+(t&&t.port===n.port?"":":"+n.port),n}var Te={};Pt(Te,{Decoder:()=>xe,Encoder:()=>be,PacketType:()=>h,isPacketValid:()=>tr,protocol:()=>ht});var Zt=typeof ArrayBuffer=="function",Wt=r=>typeof ArrayBuffer.isView=="function"?ArrayBuffer.isView(r):r.buffer instanceof ArrayBuffer,it=Object.prototype.toString,Xt=typeof Blob=="function"||typeof Blob<"u"&&it.call(Blob)==="[object BlobConstructor]",Jt=typeof File=="function"||typeof File<"u"&&it.call(File)==="[object FileConstructor]";function K(r){return Zt&&(r instanceof ArrayBuffer||Wt(r))||Xt&&r instanceof Blob||Jt&&r instanceof File}function $(r,e){if(!r||typeof r!="object")return!1;if(Array.isArray(r)){for(let t=0,n=r.length;t<n;t++)if($(r[t]))return!0;return!1}if(K(r))return!0;if(r.toJSON&&typeof r.toJSON=="function"&&arguments.length===1)return $(r.toJSON(),!0);for(let t in r)if(Object.prototype.hasOwnProperty.call(r,t)&&$(r[t]))return!0;return!1}function ot(r){let e=[],t=r.data,n=r;return n.data=se(t,e),n.attachments=e.length,{packet:n,buffers:e}}function se(r,e,t){if(!r)return r;if(K(r)){let n={_placeholder:!0,num:e.length};return e.push(r),n}else if(Array.isArray(r)){let n=new Array(r.length);for(let s=0;s<r.length;s++)n[s]=se(r[s],e);return n}else if(typeof r=="object"&&!(r instanceof Date)){if(r.toJSON&&typeof r.toJSON=="function"&&!t)return se(r.toJSON(),e,!0);let n={};for(let s in r)Object.prototype.hasOwnProperty.call(r,s)&&(n[s]=se(r[s],e));return n}return r}function at(r,e){return r.data=_e(r.data,e),delete r.attachments,r}function _e(r,e){if(!r)return r;if(r&&r._placeholder===!0){if(typeof r.num=="number"&&r.num>=0&&r.num<e.length)return e[r.num];throw new Error("illegal attachments")}else if(Array.isArray(r))for(let t=0;t<r.length;t++)r[t]=_e(r[t],e);else if(typeof r=="object")for(let t in r)Object.prototype.hasOwnProperty.call(r,t)&&(r[t]=_e(r[t],e));return r}var ct=["connect","connect_error","disconnect","disconnecting","newListener","removeListener"],ht=5,h;(function(r){r[r.CONNECT=0]="CONNECT",r[r.DISCONNECT=1]="DISCONNECT",r[r.EVENT=2]="EVENT",r[r.ACK=3]="ACK",r[r.CONNECT_ERROR=4]="CONNECT_ERROR",r[r.BINARY_EVENT=5]="BINARY_EVENT",r[r.BINARY_ACK=6]="BINARY_ACK"})(h||(h={}));var be=class{constructor(e){this.replacer=e}encode(e){return(e.type===h.EVENT||e.type===h.ACK)&&$(e)?this.encodeAsBinary({type:e.type===h.EVENT?h.BINARY_EVENT:h.BINARY_ACK,nsp:e.nsp,data:e.data,id:e.id}):[this.encodeAsString(e)]}encodeAsString(e){let t=""+e.type;return(e.type===h.BINARY_EVENT||e.type===h.BINARY_ACK)&&(t+=e.attachments+"-"),e.nsp&&e.nsp!=="/"&&(t+=e.nsp+","),e.id!=null&&(t+=e.id),e.data!=null&&(t+=JSON.stringify(e.data,this.replacer)),t}encodeAsBinary(e){let t=ot(e),n=this.encodeAsString(t.packet),s=t.buffers;return s.unshift(n),s}},xe=class r extends p{constructor(e){super(),this.opts=Object.assign({reviver:void 0,maxAttachments:10},typeof e=="function"?{reviver:e}:e)}add(e){let t;if(typeof e=="string"){if(this.reconstructor)throw new Error("got plaintext data when reconstructing a packet");t=this.decodeString(e);let n=t.type===h.BINARY_EVENT;n||t.type===h.BINARY_ACK?(t.type=n?h.EVENT:h.ACK,this.reconstructor=new Ee(t)):super.emitReserved("decoded",t)}else if(K(e)||e.base64)if(this.reconstructor)t=this.reconstructor.takeBinaryData(e),t&&(this.reconstructor=null,super.emitReserved("decoded",t));else throw new Error("got binary data when not reconstructing a packet");else throw new Error("Unknown type: "+e)}decodeString(e){let t=0,n={type:Number(e.charAt(0))};if(h[n.type]===void 0)throw new Error("unknown packet type "+n.type);if(n.type===h.BINARY_EVENT||n.type===h.BINARY_ACK){let i=t+1;for(;e.charAt(++t)!=="-"&&t!=e.length;);let o=e.substring(i,t);if(o!=Number(o)||e.charAt(t)!=="-")throw new Error("Illegal attachments");let a=Number(o);if(!lt(a)||a<1)throw new Error("Illegal attachments");if(a>this.opts.maxAttachments)throw new Error("too many attachments");n.attachments=a}if(e.charAt(t+1)==="/"){let i=t+1;for(;++t&&!(e.charAt(t)===","||t===e.length););n.nsp=e.substring(i,t)}else n.nsp="/";let s=e.charAt(t+1);if(s!==""&&Number(s)==s){let i=t+1;for(;++t;){let o=e.charAt(t);if(o==null||Number(o)!=o){--t;break}if(t===e.length)break}n.id=Number(e.substring(i,t+1))}if(e.charAt(++t)){let i=this.tryParse(e.substr(t));if(r.isPayloadValid(n.type,i))n.data=i;else throw new Error("invalid payload")}return n}tryParse(e){try{return JSON.parse(e,this.opts.reviver)}catch{return!1}}static isPayloadValid(e,t){switch(e){case h.CONNECT:return ie(t);case h.DISCONNECT:return t===void 0;case h.CONNECT_ERROR:return typeof t=="string"||ie(t);case h.EVENT:case h.BINARY_EVENT:return Array.isArray(t)&&(typeof t[0]=="number"||typeof t[0]=="string"&&ct.indexOf(t[0])===-1);case h.ACK:case h.BINARY_ACK:return Array.isArray(t)}}destroy(){this.reconstructor&&(this.reconstructor.finishedReconstruction(),this.reconstructor=null)}},Ee=class{constructor(e){this.packet=e,this.buffers=[],this.reconPack=e}takeBinaryData(e){if(this.buffers.push(e),this.buffers.length===this.reconPack.attachments){let t=at(this.reconPack,this.buffers);return this.finishedReconstruction(),t}return null}finishedReconstruction(){this.reconPack=null,this.buffers=[]}};function Qt(r){return typeof r=="string"}var lt=Number.isInteger||function(r){return typeof r=="number"&&isFinite(r)&&Math.floor(r)===r};function jt(r){return r===void 0||lt(r)}function ie(r){return Object.prototype.toString.call(r)==="[object Object]"}function er(r,e){switch(r){case h.CONNECT:return e===void 0||ie(e);case h.DISCONNECT:return e===void 0;case h.EVENT:return Array.isArray(e)&&(typeof e[0]=="number"||typeof e[0]=="string"&&ct.indexOf(e[0])===-1);case h.ACK:return Array.isArray(e);case h.CONNECT_ERROR:return typeof e=="string"||ie(e);default:return!1}}function tr(r){return Qt(r.nsp)&&jt(r.id)&&er(r.type,r.data)}function _(r,e,t){return r.on(e,t),function(){r.off(e,t)}}var rr=Object.freeze({connect:1,connect_error:1,disconnect:1,disconnecting:1,newListener:1,removeListener:1}),H=class extends p{constructor(e,t,n){super(),this.connected=!1,this.recovered=!1,this.receiveBuffer=[],this.sendBuffer=[],this._queue=[],this._queueSeq=0,this.ids=0,this.acks={},this.flags={},this.io=e,this.nsp=t,n&&n.auth&&(this.auth=n.auth),this._opts=Object.assign({},n),this.io._autoConnect&&this.open()}get disconnected(){return!this.connected}subEvents(){if(this.subs)return;let e=this.io;this.subs=[_(e,"open",this.onopen.bind(this)),_(e,"packet",this.onpacket.bind(this)),_(e,"error",this.onerror.bind(this)),_(e,"close",this.onclose.bind(this))]}get active(){return!!this.subs}connect(){return this.connected?this:(this.subEvents(),this.io._reconnecting||this.io.open(),this.io._readyState==="open"&&this.onopen(),this)}open(){return this.connect()}send(...e){return e.unshift("message"),this.emit.apply(this,e),this}emit(e,...t){var n,s,i;if(rr.hasOwnProperty(e))throw new Error('"'+e.toString()+'" is a reserved event name');if(t.unshift(e),this._opts.retries&&!this.flags.fromQueue&&!this.flags.volatile)return this._addToQueue(t),this;let o={type:h.EVENT,data:t};if(o.options={},o.options.compress=this.flags.compress!==!1,typeof t[t.length-1]=="function"){let u=this.ids++,d=t.pop();this._registerAckCallback(u,d),o.id=u}let a=(s=(n=this.io.engine)===null||n===void 0?void 0:n.transport)===null||s===void 0?void 0:s.writable,c=this.connected&&!(!((i=this.io.engine)===null||i===void 0)&&i._hasPingExpired());return this.flags.volatile&&!a||(c?(this.notifyOutgoingListeners(o),this.packet(o)):this.sendBuffer.push(o)),this.flags={},this}_registerAckCallback(e,t){var n;let s=(n=this.flags.timeout)!==null&&n!==void 0?n:this._opts.ackTimeout;if(s===void 0){this.acks[e]=t;return}let i=this.io.setTimeoutFn(()=>{delete this.acks[e];for(let a=0;a<this.sendBuffer.length;a++)this.sendBuffer[a].id===e&&this.sendBuffer.splice(a,1);t.call(this,new Error("operation has timed out"))},s),o=(...a)=>{this.io.clearTimeoutFn(i),t.apply(this,a)};o.withError=!0,this.acks[e]=o}emitWithAck(e,...t){return new Promise((n,s)=>{let i=(o,a)=>o?s(o):n(a);i.withError=!0,t.push(i),this.emit(e,...t)})}_addToQueue(e){let t;typeof e[e.length-1]=="function"&&(t=e.pop());let n={id:this._queueSeq++,tryCount:0,pending:!1,args:e,flags:Object.assign({fromQueue:!0},this.flags)};e.push((s,...i)=>(this._queue[0],s!==null?n.tryCount>this._opts.retries&&(this._queue.shift(),t&&t(s)):(this._queue.shift(),t&&t(null,...i)),n.pending=!1,this._drainQueue())),this._queue.push(n),this._drainQueue()}_drainQueue(e=!1){if(!this.connected||this._queue.length===0)return;let t=this._queue[0];t.pending&&!e||(t.pending=!0,t.tryCount++,this.flags=t.flags,this.emit.apply(this,t.args))}packet(e){e.nsp=this.nsp,this.io._packet(e)}onopen(){typeof this.auth=="function"?this.auth(e=>{this._sendConnectPacket(e)}):this._sendConnectPacket(this.auth)}_sendConnectPacket(e){this.packet({type:h.CONNECT,data:this._pid?Object.assign({pid:this._pid,offset:this._lastOffset},e):e})}onerror(e){this.connected||this.emitReserved("connect_error",e)}onclose(e,t){this.connected=!1,delete this.id,this.emitReserved("disconnect",e,t),this._clearAcks()}_clearAcks(){Object.keys(this.acks).forEach(e=>{if(!this.sendBuffer.some(n=>String(n.id)===e)){let n=this.acks[e];delete this.acks[e],n.withError&&n.call(this,new Error("socket has been disconnected"))}})}onpacket(e){if(e.nsp===this.nsp)switch(e.type){case h.CONNECT:e.data&&e.data.sid?this.onconnect(e.data.sid,e.data.pid):this.emitReserved("connect_error",new Error("It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)"));break;case h.EVENT:case h.BINARY_EVENT:this.onevent(e);break;case h.ACK:case h.BINARY_ACK:this.onack(e);break;case h.DISCONNECT:this.ondisconnect();break;case h.CONNECT_ERROR:this.destroy();let n=new Error(e.data.message);n.data=e.data.data,this.emitReserved("connect_error",n);break}}onevent(e){let t=e.data||[];e.id!=null&&t.push(this.ack(e.id)),this.connected?this.emitEvent(t):this.receiveBuffer.push(Object.freeze(t))}emitEvent(e){if(this._anyListeners&&this._anyListeners.length){let t=this._anyListeners.slice();for(let n of t)n.apply(this,e)}super.emit.apply(this,e),this._pid&&e.length&&typeof e[e.length-1]=="string"&&(this._lastOffset=e[e.length-1])}ack(e){let t=this,n=!1;return function(...s){n||(n=!0,t.packet({type:h.ACK,id:e,data:s}))}}onack(e){let t=this.acks[e.id];typeof t=="function"&&(delete this.acks[e.id],t.withError&&e.data.unshift(null),t.apply(this,e.data))}onconnect(e,t){this.id=e,this.recovered=t&&this._pid===t,this._pid=t,this.connected=!0,this.emitBuffered(),this._drainQueue(!0),this.emitReserved("connect")}emitBuffered(){this.receiveBuffer.forEach(e=>this.emitEvent(e)),this.receiveBuffer=[],this.sendBuffer.forEach(e=>{this.notifyOutgoingListeners(e),this.packet(e)}),this.sendBuffer=[]}ondisconnect(){this.destroy(),this.onclose("io server disconnect")}destroy(){this.subs&&(this.subs.forEach(e=>e()),this.subs=void 0),this.io._destroy(this)}disconnect(){return this.connected&&this.packet({type:h.DISCONNECT}),this.destroy(),this.connected&&this.onclose("io client disconnect"),this}close(){return this.disconnect()}compress(e){return this.flags.compress=e,this}get volatile(){return this.flags.volatile=!0,this}timeout(e){return this.flags.timeout=e,this}onAny(e){return this._anyListeners=this._anyListeners||[],this._anyListeners.push(e),this}prependAny(e){return this._anyListeners=this._anyListeners||[],this._anyListeners.unshift(e),this}offAny(e){if(!this._anyListeners)return this;if(e){let t=this._anyListeners;for(let n=0;n<t.length;n++)if(e===t[n])return t.splice(n,1),this}else this._anyListeners=[];return this}listenersAny(){return this._anyListeners||[]}onAnyOutgoing(e){return this._anyOutgoingListeners=this._anyOutgoingListeners||[],this._anyOutgoingListeners.push(e),this}prependAnyOutgoing(e){return this._anyOutgoingListeners=this._anyOutgoingListeners||[],this._anyOutgoingListeners.unshift(e),this}offAnyOutgoing(e){if(!this._anyOutgoingListeners)return this;if(e){let t=this._anyOutgoingListeners;for(let n=0;n<t.length;n++)if(e===t[n])return t.splice(n,1),this}else this._anyOutgoingListeners=[];return this}listenersAnyOutgoing(){return this._anyOutgoingListeners||[]}notifyOutgoingListeners(e){if(this._anyOutgoingListeners&&this._anyOutgoingListeners.length){let t=this._anyOutgoingListeners.slice();for(let n of t)n.apply(this,e.data)}}};function L(r){r=r||{},this.ms=r.min||100,this.max=r.max||1e4,this.factor=r.factor||2,this.jitter=r.jitter>0&&r.jitter<=1?r.jitter:0,this.attempts=0}L.prototype.duration=function(){var r=this.ms*Math.pow(this.factor,this.attempts++);if(this.jitter){var e=Math.random(),t=Math.floor(e*this.jitter*r);r=Math.floor(e*10)&1?r+t:r-t}return Math.min(r,this.max)|0};L.prototype.reset=function(){this.attempts=0};L.prototype.setMin=function(r){this.ms=r};L.prototype.setMax=function(r){this.max=r};L.prototype.setJitter=function(r){this.jitter=r};var I=class extends p{constructor(e,t){var n;super(),this.nsps={},this.subs=[],e&&typeof e=="object"&&(t=e,e=void 0),t=t||{},t.path=t.path||"/socket.io",this.opts=t,A(this,t),this.reconnection(t.reconnection!==!1),this.reconnectionAttempts(t.reconnectionAttempts||1/0),this.reconnectionDelay(t.reconnectionDelay||1e3),this.reconnectionDelayMax(t.reconnectionDelayMax||5e3),this.randomizationFactor((n=t.randomizationFactor)!==null&&n!==void 0?n:.5),this.backoff=new L({min:this.reconnectionDelay(),max:this.reconnectionDelayMax(),jitter:this.randomizationFactor()}),this.timeout(t.timeout==null?2e4:t.timeout),this._readyState="closed",this.uri=e;let s=t.parser||Te;this.encoder=new s.Encoder,this.decoder=new s.Decoder,this._autoConnect=t.autoConnect!==!1,this._autoConnect&&this.open()}reconnection(e){return arguments.length?(this._reconnection=!!e,e||(this.skipReconnect=!0),this):this._reconnection}reconnectionAttempts(e){return e===void 0?this._reconnectionAttempts:(this._reconnectionAttempts=e,this)}reconnectionDelay(e){var t;return e===void 0?this._reconnectionDelay:(this._reconnectionDelay=e,(t=this.backoff)===null||t===void 0||t.setMin(e),this)}randomizationFactor(e){var t;return e===void 0?this._randomizationFactor:(this._randomizationFactor=e,(t=this.backoff)===null||t===void 0||t.setJitter(e),this)}reconnectionDelayMax(e){var t;return e===void 0?this._reconnectionDelayMax:(this._reconnectionDelayMax=e,(t=this.backoff)===null||t===void 0||t.setMax(e),this)}timeout(e){return arguments.length?(this._timeout=e,this):this._timeout}maybeReconnectOnOpen(){!this._reconnecting&&this._reconnection&&this.backoff.attempts===0&&this.reconnect()}open(e){if(~this._readyState.indexOf("open"))return this;this.engine=new B(this.uri,this.opts);let t=this.engine,n=this;this._readyState="opening",this.skipReconnect=!1;let s=_(t,"open",function(){n.onopen(),e&&e()}),i=a=>{this.cleanup(),this._readyState="closed",this.emitReserved("error",a),e?e(a):this.maybeReconnectOnOpen()},o=_(t,"error",i);if(this._timeout!==!1){let a=this._timeout,c=this.setTimeoutFn(()=>{s(),i(new Error("timeout")),t.close()},a);this.opts.autoUnref&&c.unref(),this.subs.push(()=>{this.clearTimeoutFn(c)})}return this.subs.push(s),this.subs.push(o),this}connect(e){return this.open(e)}onopen(){this.cleanup(),this._readyState="open",this.emitReserved("open");let e=this.engine;this.subs.push(_(e,"ping",this.onping.bind(this)),_(e,"data",this.ondata.bind(this)),_(e,"error",this.onerror.bind(this)),_(e,"close",this.onclose.bind(this)),_(this.decoder,"decoded",this.ondecoded.bind(this)))}onping(){this.emitReserved("ping")}ondata(e){try{this.decoder.add(e)}catch(t){this.onclose("parse error",t)}}ondecoded(e){T(()=>{this.emitReserved("packet",e)},this.setTimeoutFn)}onerror(e){this.emitReserved("error",e)}socket(e,t){let n=this.nsps[e];return n?this._autoConnect&&!n.active&&n.connect():(n=new H(this,e,t),this.nsps[e]=n),n}_destroy(e){let t=Object.keys(this.nsps);for(let n of t)if(this.nsps[n].active)return;this._close()}_packet(e){let t=this.encoder.encode(e);for(let n=0;n<t.length;n++)this.engine.write(t[n],e.options)}cleanup(){this.subs.forEach(e=>e()),this.subs.length=0,this.decoder.destroy()}_close(){this.skipReconnect=!0,this._reconnecting=!1,this.onclose("forced close")}disconnect(){return this._close()}onclose(e,t){var n;this.cleanup(),(n=this.engine)===null||n===void 0||n.close(),this.backoff.reset(),this._readyState="closed",this.emitReserved("close",e,t),this._reconnection&&!this.skipReconnect&&this.reconnect()}reconnect(){if(this._reconnecting||this.skipReconnect)return this;let e=this;if(this.backoff.attempts>=this._reconnectionAttempts)this.backoff.reset(),this.emitReserved("reconnect_failed"),this._reconnecting=!1;else{let t=this.backoff.duration();this._reconnecting=!0;let n=this.setTimeoutFn(()=>{e.skipReconnect||(this.emitReserved("reconnect_attempt",e.backoff.attempts),!e.skipReconnect&&e.open(s=>{s?(e._reconnecting=!1,e.reconnect(),this.emitReserved("reconnect_error",s)):e.onreconnect()}))},t);this.opts.autoUnref&&n.unref(),this.subs.push(()=>{this.clearTimeoutFn(n)})}}onreconnect(){let e=this.backoff.attempts;this._reconnecting=!1,this.backoff.reset(),this.emitReserved("reconnect",e)}};var Z={};function W(r,e){typeof r=="object"&&(e=r,r=void 0),e=e||{};let t=st(r,e.path||"/socket.io"),n=t.source,s=t.id,i=t.path,o=Z[s]&&i in Z[s].nsps,a=e.forceNew||e["force new connection"]||e.multiplex===!1||o,c;return a?c=new I(n,e):(Z[s]||(Z[s]=new I(n,e)),c=Z[s]),t.query&&!e.query&&(e.query=t.queryKey),c.socket(t.path,e)}Object.assign(W,{Manager:I,Socket:H,io:W,connect:W});function pt(r,e,t){return W(`${r}/chat`,{auth:{apiKey:e,visitorId:t??void 0},transports:["websocket"]})}var nr="chat",ut={chat:'<path d="M4 5h16v11H9l-4 3.5V16H4V5Z"/><path d="M8 9h8M8 12h5"/>',"chat-round":'<path d="M12 4c4.97 0 9 3.36 9 7.5S16.97 19 12 19c-1 0-1.96-.14-2.85-.4L5 20l1.2-3.6C4.8 15 4 13.3 4 11.5 4 7.36 7.03 4 12 4Z"/>',"chat-dots":'<path d="M12 4c4.97 0 9 3.36 9 7.5S16.97 19 12 19c-1 0-1.96-.14-2.85-.4L5 20l1.2-3.6C4.8 15 4 13.3 4 11.5 4 7.36 7.03 4 12 4Z"/><circle cx="9" cy="11.5" r=".9" fill="currentColor" stroke="none"/><circle cx="12" cy="11.5" r=".9" fill="currentColor" stroke="none"/><circle cx="15" cy="11.5" r=".9" fill="currentColor" stroke="none"/>',"chat-two":'<path d="M4 5.5h10v7h-4l-2.5 2V12.5H4V5.5Z"/><path d="M10 10.5h10v7h-3.5L14 20v-2.5h-4v-7Z"/>',thought:'<path d="M8 5.5a5 5 0 0 1 9 3 4 4 0 0 1-1 7.9H8.5A4.5 4.5 0 0 1 8 5.5Z"/><circle cx="7" cy="18" r="1" fill="currentColor" stroke="none"/><circle cx="5" cy="20.5" r=".6" fill="currentColor" stroke="none"/>',mail:'<rect x="3.5" y="6" width="17" height="12" rx="1.5"/><path d="M4 7l8 6 8-6"/>',"mail-open":'<rect x="3.5" y="8" width="17" height="10" rx="1.5"/><path d="M3.5 8 12 3l8.5 5"/><path d="M3.5 8 10 13M20.5 8 14 13"/>',send:'<path d="M4 12 20 4l-4 16-5-6-6-2Z"/><path d="M20 4 9.5 14"/>',robot:'<rect x="5" y="8" width="14" height="10" rx="2.5"/><path d="M12 8V5"/><circle cx="12" cy="4" r="1.1" fill="currentColor" stroke="none"/><circle cx="9" cy="13" r="1.1" fill="currentColor" stroke="none"/><circle cx="15" cy="13" r="1.1" fill="currentColor" stroke="none"/><path d="M9 16.5h6"/>',brain:'<path d="M9 4.5a3 3 0 0 0-3 3 3 3 0 0 0-1 5.6 3 3 0 0 0 3.6 4A3 3 0 0 0 12 19V6a2.5 2.5 0 0 0-3-1.5Z"/><path d="M15 4.5a3 3 0 0 1 3 3 3 3 0 0 1 1 5.6 3 3 0 0 1-3.6 4A3 3 0 0 1 12 19V6a2.5 2.5 0 0 1 3-1.5Z"/>',bulb:'<path d="M9 16.5h6M10 19.5h4"/><path d="M12 3.5a6 6 0 0 0-3.2 11.1c.6.4 1 1.1 1 1.9h4.4c0-.8.4-1.5 1-1.9A6 6 0 0 0 12 3.5Z"/>',bolt:'<path d="M12.5 3 5 13.5h5.5L11 21l7.5-10.5H13l-.5-7.5Z"/>',sparkles:'<path d="M12 3.5c.5 3 1.7 4.2 4.7 4.7-3 .5-4.2 1.7-4.7 4.7-.5-3-1.7-4.2-4.7-4.7 3-.5 4.2-1.7 4.7-4.7Z"/><path d="M18.5 14c.3 1.7 1 2.4 2.7 2.7-1.7.3-2.4 1-2.7 2.7-.3-1.7-1-2.4-2.7-2.7 1.7-.3 2.4-1 2.7-2.7Z"/>',orbit:'<circle cx="12" cy="12" r="1.6" fill="currentColor" stroke="none"/><ellipse cx="12" cy="12" rx="9" ry="3.6"/><ellipse cx="12" cy="12" rx="9" ry="3.6" transform="rotate(60 12 12)"/><ellipse cx="12" cy="12" rx="9" ry="3.6" transform="rotate(120 12 12)"/>',rocket:'<path d="M12 3c2.5 1.5 4 4.5 4 8.5 0 2-1 4-1 4H9s-1-2-1-4c0-4 1.5-7 4-8.5Z"/><circle cx="12" cy="9" r="1.4"/><path d="M9 15l-2.5 2.5M15 15l2.5 2.5M10 19l2 2 2-2"/>',wand:'<path d="M4 20 15 9"/><path d="M17 4l.8 1.9L19.7 6.7 17.8 7.5 17 9.4 16.2 7.5 14.3 6.7 16.2 5.9 17 4Z"/><path d="M6 13.5l.5 1.2 1.2.5-1.2.5-.5 1.2-.5-1.2L4.3 15l1.2-.5.5-1.2Z"/>',wave:'<path d="M9 13V6a1.5 1.5 0 0 1 3 0v5"/><path d="M12 11V4.5a1.5 1.5 0 0 1 3 0V11"/><path d="M15 11V6a1.5 1.5 0 0 1 3 0v8c0 3-2 6-6 6s-6-2.5-6.5-5L4 12.5a1.4 1.4 0 0 1 2.3-1.6L9 14"/>',"raised-hand":'<path d="M7 20V10a1.2 1.2 0 0 1 2.4 0v3"/><path d="M9.4 12.5V6a1.2 1.2 0 0 1 2.4 0v6.5"/><path d="M11.8 12.5V5a1.2 1.2 0 0 1 2.4 0v7.5"/><path d="M14.2 12.5V7a1.2 1.2 0 0 1 2.4 0v7c0 3.3-2.3 6-6 6-2.5 0-4-1.2-5-3l-2-3.6a1.3 1.3 0 0 1 2.2-1.3l1.6 2.4"/>',smile:'<circle cx="12" cy="12" r="8.5"/><path d="M8.5 14c1 1.3 2.2 2 3.5 2s2.5-.7 3.5-2"/><circle cx="9" cy="10" r=".9" fill="currentColor" stroke="none"/><circle cx="15" cy="10" r=".9" fill="currentColor" stroke="none"/>',"smile-chat":'<path d="M12 4c4.97 0 9 3.36 9 7.5S16.97 19 12 19c-1 0-1.96-.14-2.85-.4L5 20l1.2-3.6C4.8 15 4 13.3 4 11.5 4 7.36 7.03 4 12 4Z"/><circle cx="9.5" cy="11" r=".8" fill="currentColor" stroke="none"/><circle cx="14.5" cy="11" r=".8" fill="currentColor" stroke="none"/><path d="M9.5 13.5c.7.8 1.5 1.2 2.5 1.2s1.8-.4 2.5-1.2"/>',handshake:'<path d="M3 12l4-3 3.5 2-1.5 2"/><path d="M21 12l-4-3-3.5 2 1.5 2"/><path d="M9 13l2.5 2.2a1.4 1.4 0 0 0 2-2l-3-2.7"/><path d="M15 13l-2.5 2.2"/>',"heart-chat":'<path d="M12 20s-7-4.4-9.3-8.8C1.3 8 3 5 6.2 5c2 0 3.4 1.2 4.3 2.4C11.4 6.2 12.8 5 14.8 5 18 5 19.7 8 17.3 11.2 15 15.6 12 20 12 20Z"/>',"thumbs-up":'<path d="M7 11v9H4v-9h3Z"/><path d="M7 11l3.5-6.5a1.6 1.6 0 0 1 3 1l-1 4.5H17a2 2 0 0 1 2 2.4l-1.3 6A2 2 0 0 1 15.7 20H10a3 3 0 0 1-3-3v-6Z"/>',wink:'<circle cx="12" cy="12" r="8.5"/><path d="M8.5 14c1 1.3 2.2 2 3.5 2s2.5-.7 3.5-2"/><path d="M7.5 10h3"/><circle cx="15" cy="10" r=".9" fill="currentColor" stroke="none"/>',headset:'<path d="M4 13a8 8 0 0 1 16 0"/><rect x="3" y="13" width="4" height="6" rx="1.5"/><rect x="17" y="13" width="4" height="6" rx="1.5"/><path d="M19 19v1a3 3 0 0 1-3 3h-3"/>',bell:'<path d="M6 17V11a6 6 0 0 1 12 0v6l1.5 2h-15L6 17Z"/><path d="M10 20.5a2 2 0 0 0 4 0"/>',megaphone:'<path d="M3 10v4h3l6 4V6L6 10H3Z"/><path d="M14 9a4 4 0 0 1 0 6"/><path d="M17 6.5a8 8 0 0 1 0 11"/>',broadcast:'<circle cx="12" cy="12" r="2"/><path d="M8.5 8.5a5 5 0 0 0 0 7M15.5 8.5a5 5 0 0 1 0 7"/><path d="M5.5 5.5a9.5 9.5 0 0 0 0 13M18.5 5.5a9.5 9.5 0 0 1 0 13"/>',"life-ring":'<circle cx="12" cy="12" r="8.5"/><circle cx="12" cy="12" r="3.5"/><path d="M6 6l3.5 3.5M18 6l-3.5 3.5M6 18l3.5-3.5M18 18l-3.5-3.5"/>',question:'<circle cx="12" cy="12" r="8.5"/><path d="M9.5 9.3a2.5 2.5 0 1 1 3.6 2.3c-.8.5-1.1.9-1.1 1.9"/><circle cx="12" cy="16.5" r=".9" fill="currentColor" stroke="none"/>',info:'<circle cx="12" cy="12" r="8.5"/><circle cx="12" cy="8" r=".9" fill="currentColor" stroke="none"/><path d="M12 11v6"/>',"phone-support":'<path d="M6.5 4.5h3L11 8l-2 1.5a11 11 0 0 0 5.5 5.5L16 13l3.5 1.5v3a2 2 0 0 1-2.2 2A15.5 15.5 0 0 1 4.5 6.7a2 2 0 0 1 2-2.2Z"/>',star:'<path d="M12 3.5l2.4 5.1 5.6.6-4.2 3.8 1.2 5.5L12 15.7l-5 2.8 1.2-5.5-4.2-3.8 5.6-.6L12 3.5Z"/>',"star-fill":'<path d="M12 3.5l2.4 5.1 5.6.6-4.2 3.8 1.2 5.5L12 15.7l-5 2.8 1.2-5.5-4.2-3.8 5.6-.6L12 3.5Z" fill="currentColor"/>',"check-circle":'<circle cx="12" cy="12" r="8.5"/><path d="M8.5 12.3 11 15l4.5-5.5"/>',target:'<circle cx="12" cy="12" r="8.5"/><circle cx="12" cy="12" r="5"/><circle cx="12" cy="12" r="1.4" fill="currentColor" stroke="none"/>',flame:'<path d="M12 3.5c1 2.5-.5 3.5-1.5 5C9 10 8 11.5 8 13.5A4 4 0 0 0 12 17.5a4 4 0 0 0 4-4c0-1.5-.7-2.3-1.3-3 .3 1.2-.2 2-1 2.3.3-2-1-2.7-1.7-4.3Z"/>',"shield-check":'<path d="M12 3.5 19 6.5V11c0 5-3 8.2-7 9.5-4-1.3-7-4.5-7-9.5V6.5L12 3.5Z"/><path d="M9 12l2 2 4-4.5"/>',crown:'<path d="M4 17l-1.5-8L7 12l5-6 5 6 4.5-3L20 17H4Z"/><path d="M4 19.5h16"/>',gift:'<rect x="4" y="9.5" width="16" height="10" rx="1"/><path d="M4 13h16"/><path d="M12 9.5v10"/><path d="M12 9.5c-1-2.5-2.8-4-4.3-4A2 2 0 0 0 6 7.5c0 1.3 1.2 2 2.5 2H12Z"/><path d="M12 9.5c1-2.5 2.8-4 4.3-4A2 2 0 0 1 18 7.5c0 1.3-1.2 2-2.5 2H12Z"/>'};function Ae(r){return`<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round">${r&&ut[r]||ut[nr]}</svg>`}var oe={SOFT:{waveform:"sine",gain:.12,tones:{CHAT_OPENED:[{freq:523,start:0,duration:.14}],BOT_REPLY:[{freq:659,start:0,duration:.16}],AGENT_MESSAGE:[{freq:494,start:0,duration:.14},{freq:587,start:.12,duration:.2}],RULE_TRIGGERED:[{freq:587,start:0,duration:.13}],COMMAND_EXECUTED:[{freq:440,start:0,duration:.18}]}},CLASSIC:{waveform:"sine",gain:.2,tones:{CHAT_OPENED:[{freq:660,start:0,duration:.09}],BOT_REPLY:[{freq:880,start:0,duration:.12}],AGENT_MESSAGE:[{freq:587,start:0,duration:.1},{freq:784,start:.1,duration:.14}],RULE_TRIGGERED:[{freq:740,start:0,duration:.08},{freq:740,start:.12,duration:.08}],COMMAND_EXECUTED:[{freq:784,start:0,duration:.1},{freq:660,start:.1,duration:.14}]}},BELL:{waveform:"triangle",gain:.15,tones:{CHAT_OPENED:[{freq:784,start:0,duration:.1},{freq:988,start:.05,duration:.12}],BOT_REPLY:[{freq:1046,start:0,duration:.18}],AGENT_MESSAGE:[{freq:659,start:0,duration:.12},{freq:784,start:.1,duration:.12},{freq:988,start:.2,duration:.22}],RULE_TRIGGERED:[{freq:1174,start:0,duration:.14}],COMMAND_EXECUTED:[{freq:880,start:0,duration:.1},{freq:1046,start:.1,duration:.16}]}}},sr={enabled:!0,soundStyle:"CLASSIC"},ae=class{constructor(){this.triggers={}}setTriggers(e){this.triggers=e}prime(){if(this.context){this.context.state==="suspended"&&this.context.resume();return}let e=window.AudioContext??window.webkitAudioContext;if(e)try{this.context=new e}catch{}}play(e){let t=this.context;if(!t)return;let n=this.triggers[e]??sr;if(!n.enabled)return;let{waveform:s,gain:i}=oe[n.soundStyle]??oe.CLASSIC,o=(oe[n.soundStyle]??oe.CLASSIC).tones[e],a=t.currentTime;for(let c of o){let f=t.createOscillator(),u=t.createGain();f.type=s,f.frequency.value=c.freq;let d=a+c.start,b=d+c.duration;u.gain.setValueAtTime(0,d),u.gain.linearRampToValueAtTime(i,d+.01),u.gain.linearRampToValueAtTime(0,b),f.connect(u),u.connect(t.destination),f.start(d),f.stop(b+.02)}}};var ft="chat:ready";var dt="chat:close",mt="chat:toggle",yt="chat:resize",gt="chat:send",_t="chat:bot-reply",bt="chat:connect-error",xt="chat:history",Et="chat:admin-message",Tt="chat:admin-typing",we="chat:agent-presence",At="chat:typing",wt="chat:upload-attachment",Ct="chat:attachment-uploaded",vt="chat:attachment-upload-error";var Ce="zabbu-chat-widget-launcher",ve="zabbu-chat-widget-panel",kt="zabbu-chat-widget-iframe",X="zabbu-chat-widget-teaser",Se="zabbu-chat-widget-badge",Rt="#2563eb";function ir(r,e){switch(r){case"NONE":return{launcher:"none",panel:"none",teaser:"none"};case"ELEVATED":return{launcher:"0 16px 40px -8px rgba(0, 0, 0, 0.45), 0 6px 16px rgba(0, 0, 0, 0.25)",panel:"0 30px 80px -16px rgba(0, 0, 0, 0.5), 0 12px 32px rgba(0, 0, 0, 0.3)",teaser:"0 20px 50px -12px rgba(0, 0, 0, 0.4), 0 8px 20px rgba(0, 0, 0, 0.2)"};case"BRAND_GLOW":{let t=ke(e,.5),n=ke(e,.3);return{launcher:`0 10px 26px -4px ${t}, 0 3px 10px ${n}`,panel:`0 26px 64px -12px ${t}, 0 10px 28px ${n}`,teaser:`0 18px 42px -8px ${t}, 0 6px 16px ${n}`}}case"SOFT":default:return{launcher:"0 4px 12px rgba(0, 0, 0, 0.2)",panel:"0 8px 30px rgba(0, 0, 0, 0.25)",teaser:"0 6px 20px rgba(0, 0, 0, 0.15)"}}}function ke(r,e){let t=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(r);if(!t)return ke(Rt,e);let[n,s,i]=t.slice(1).map(o=>parseInt(o,16));return`rgba(${n}, ${s}, ${i}, ${e})`}function or(r,e,t){let n=r||Rt,s=ir(e,n),i=document.documentElement.style;i.setProperty("--zabbu-chat-primary",n),i.setProperty("--zabbu-chat-shadow-launcher",s.launcher),i.setProperty("--zabbu-chat-shadow-panel",s.panel),i.setProperty("--zabbu-chat-shadow-teaser",s.teaser),document.getElementById(X)?.classList.toggle("zabbu-chat-teaser-dark",t==="DARK")}async function ar(r,e){try{let t=await fetch(`${r}/public/sites/${e}`);if(!t.ok)return;let n=await t.json();or(n.primaryColor??null,n.shadowStyle??"SOFT",n.colorScheme??"LIGHT")}catch{}}function cr(){let r=document.currentScript;if(!r)throw new Error("zabbu-chat-widget: loader.js must run as a plain <script> tag");return r}function hr(r){let e=r.dataset.apiBase;return e?e.replace(/\/$/,""):"https://api-production-e565.up.railway.app"}function lr(r){return new URL(r.src).href.replace(/\/[^/]*$/,"")}function St(r){return`zabbu-chat-visitor:${r}`}function pr(){let r=document.createElement("style");r.textContent=`
2
- #${Ce} {
1
+ "use strict";(()=>{var Kt=Object.defineProperty;var zt=(r,e)=>{for(var t in e)Kt(r,t,{get:e[t],enumerable:!0})};var T=Object.create(null);T.open="0";T.close="1";T.ping="2";T.pong="3";T.message="4";T.upgrade="5";T.noop="6";var z=Object.create(null);Object.keys(T).forEach(r=>{z[T[r]]=r});var W={type:"error",data:"parser error"};var Ke=typeof Blob=="function"||typeof Blob<"u"&&Object.prototype.toString.call(Blob)==="[object BlobConstructor]",ze=typeof ArrayBuffer=="function",We=r=>typeof ArrayBuffer.isView=="function"?ArrayBuffer.isView(r):r&&r.buffer instanceof ArrayBuffer,Z=({type:r,data:e},t,n)=>Ke&&e instanceof Blob?t?n(e):Ve(e,n):ze&&(e instanceof ArrayBuffer||We(e))?t?n(e):Ve(new Blob([e]),n):n(T[r]+(e||"")),Ve=(r,e)=>{let t=new FileReader;return t.onload=function(){let n=t.result.split(",")[1];e("b"+(n||""))},t.readAsDataURL(r)};function Ge(r){return r instanceof Uint8Array?r:r instanceof ArrayBuffer?new Uint8Array(r):new Uint8Array(r.buffer,r.byteOffset,r.byteLength)}var Ee;function Ze(r,e){if(Ke&&r.data instanceof Blob)return r.data.arrayBuffer().then(Ge).then(e);if(ze&&(r.data instanceof ArrayBuffer||We(r.data)))return e(Ge(r.data));Z(r,!1,t=>{Ee||(Ee=new TextEncoder),e(Ee.encode(t))})}var $e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",$=typeof Uint8Array>"u"?[]:new Uint8Array(256);for(let r=0;r<$e.length;r++)$[$e.charCodeAt(r)]=r;var Ye=r=>{let e=r.length*.75,t=r.length,n,s=0,i,o,a,c;r[r.length-1]==="="&&(e--,r[r.length-2]==="="&&e--);let d=new ArrayBuffer(e),f=new Uint8Array(d);for(n=0;n<t;n+=4)i=$[r.charCodeAt(n)],o=$[r.charCodeAt(n+1)],a=$[r.charCodeAt(n+2)],c=$[r.charCodeAt(n+3)],f[s++]=i<<2|o>>4,f[s++]=(o&15)<<4|a>>2,f[s++]=(a&3)<<6|c&63;return d};var Wt=typeof ArrayBuffer=="function",Y=(r,e)=>{if(typeof r!="string")return{type:"message",data:Xe(r,e)};let t=r.charAt(0);return t==="b"?{type:"message",data:Zt(r.substring(1),e)}:z[t]?r.length>1?{type:z[t],data:r.substring(1)}:{type:z[t]}:W},Zt=(r,e)=>{if(Wt){let t=Ye(r);return Xe(t,e)}else return{base64:!0,data:r}},Xe=(r,e)=>{switch(e){case"blob":return r instanceof Blob?r:new Blob([r]);case"arraybuffer":default:return r instanceof ArrayBuffer?r:r.buffer}};var Je="",je=(r,e)=>{let t=r.length,n=new Array(t),s=0;r.forEach((i,o)=>{Z(i,!1,a=>{n[o]=a,++s===t&&e(n.join(Je))})})},Qe=(r,e)=>{let t=r.split(Je),n=[];for(let s=0;s<t.length;s++){let i=Y(t[s],e);if(n.push(i),i.type==="error")break}return n};function et(){return new TransformStream({transform(r,e){Ze(r,t=>{let n=t.length,s;if(n<126)s=new Uint8Array(1),new DataView(s.buffer).setUint8(0,n);else if(n<65536){s=new Uint8Array(3);let i=new DataView(s.buffer);i.setUint8(0,126),i.setUint16(1,n)}else{s=new Uint8Array(9);let i=new DataView(s.buffer);i.setUint8(0,127),i.setBigUint64(1,BigInt(n))}r.data&&typeof r.data!="string"&&(s[0]|=128),e.enqueue(s),e.enqueue(t)})}})}var xe;function oe(r){return r.reduce((e,t)=>e+t.length,0)}function ae(r,e){if(r[0].length===e)return r.shift();let t=new Uint8Array(e),n=0;for(let s=0;s<e;s++)t[s]=r[0][n++],n===r[0].length&&(r.shift(),n=0);return r.length&&n<r[0].length&&(r[0]=r[0].slice(n)),t}function tt(r,e){xe||(xe=new TextDecoder);let t=[],n=0,s=-1,i=!1;return new TransformStream({transform(o,a){for(t.push(o);;){if(n===0){if(oe(t)<1)break;let c=ae(t,1);i=(c[0]&128)===128,s=c[0]&127,s<126?n=3:s===126?n=1:n=2}else if(n===1){if(oe(t)<2)break;let c=ae(t,2);s=new DataView(c.buffer,c.byteOffset,c.length).getUint16(0),n=3}else if(n===2){if(oe(t)<8)break;let c=ae(t,8),d=new DataView(c.buffer,c.byteOffset,c.length),f=d.getUint32(0);if(f>Math.pow(2,21)-1){a.enqueue(W);break}s=f*Math.pow(2,32)+d.getUint32(4),n=3}else{if(oe(t)<s)break;let c=ae(t,s);a.enqueue(Y(i?c:xe.decode(c),e)),n=0}if(s===0||s>r){a.enqueue(W);break}}}})}var Te=4;function p(r){if(r)return $t(r)}function $t(r){for(var e in p.prototype)r[e]=p.prototype[e];return r}p.prototype.on=p.prototype.addEventListener=function(r,e){return this._callbacks=this._callbacks||{},(this._callbacks["$"+r]=this._callbacks["$"+r]||[]).push(e),this};p.prototype.once=function(r,e){function t(){this.off(r,t),e.apply(this,arguments)}return t.fn=e,this.on(r,t),this};p.prototype.off=p.prototype.removeListener=p.prototype.removeAllListeners=p.prototype.removeEventListener=function(r,e){if(this._callbacks=this._callbacks||{},arguments.length==0)return this._callbacks={},this;var t=this._callbacks["$"+r];if(!t)return this;if(arguments.length==1)return delete this._callbacks["$"+r],this;for(var n,s=0;s<t.length;s++)if(n=t[s],n===e||n.fn===e){t.splice(s,1);break}return t.length===0&&delete this._callbacks["$"+r],this};p.prototype.emit=function(r){this._callbacks=this._callbacks||{};for(var e=new Array(arguments.length-1),t=this._callbacks["$"+r],n=1;n<arguments.length;n++)e[n-1]=arguments[n];if(t){t=t.slice(0);for(var n=0,s=t.length;n<s;++n)t[n].apply(this,e)}return this};p.prototype.emitReserved=p.prototype.emit;p.prototype.listeners=function(r){return this._callbacks=this._callbacks||{},this._callbacks["$"+r]||[]};p.prototype.hasListeners=function(r){return!!this.listeners(r).length};var w=typeof Promise=="function"&&typeof Promise.resolve=="function"?e=>Promise.resolve().then(e):(e,t)=>t(e,0),b=typeof self<"u"?self:typeof window<"u"?window:Function("return this")(),rt="arraybuffer";function ce(r,...e){return e.reduce((t,n)=>(r.hasOwnProperty(n)&&(t[n]=r[n]),t),{})}var Yt=b.setTimeout,Xt=b.clearTimeout;function C(r,e){e.useNativeTimers?(r.setTimeoutFn=Yt.bind(b),r.clearTimeoutFn=Xt.bind(b)):(r.setTimeoutFn=b.setTimeout.bind(b),r.clearTimeoutFn=b.clearTimeout.bind(b))}var Jt=1.33;function nt(r){return typeof r=="string"?jt(r):Math.ceil((r.byteLength||r.size)*Jt)}function jt(r){let e=0,t=0;for(let n=0,s=r.length;n<s;n++)e=r.charCodeAt(n),e<128?t+=1:e<2048?t+=2:e<55296||e>=57344?t+=3:(n++,t+=4);return t}function he(){return Date.now().toString(36).substring(3)+Math.random().toString(36).substring(2,5)}function st(r){let e="";for(let t in r)r.hasOwnProperty(t)&&(e.length&&(e+="&"),e+=encodeURIComponent(t)+"="+encodeURIComponent(r[t]));return e}function it(r){let e={},t=r.split("&");for(let n=0,s=t.length;n<s;n++){let i=t[n].split("=");e[decodeURIComponent(i[0])]=decodeURIComponent(i[1])}return e}var le=class extends Error{constructor(e,t,n){super(e),this.description=t,this.context=n,this.type="TransportError"}},v=class extends p{constructor(e){super(),this.writable=!1,C(this,e),this.opts=e,this.query=e.query,this.socket=e.socket,this.supportsBinary=!e.forceBase64}onError(e,t,n){return super.emitReserved("error",new le(e,t,n)),this}open(){return this.readyState="opening",this.doOpen(),this}close(){return(this.readyState==="opening"||this.readyState==="open")&&(this.doClose(),this.onClose()),this}send(e){this.readyState==="open"&&this.write(e)}onOpen(){this.readyState="open",this.writable=!0,super.emitReserved("open")}onData(e){let t=Y(e,this.socket.binaryType);this.onPacket(t)}onPacket(e){super.emitReserved("packet",e)}onClose(e){this.readyState="closed",super.emitReserved("close",e)}pause(e){}createUri(e,t={}){return e+"://"+this._hostname()+this._port()+this.opts.path+this._query(t)}_hostname(){let e=this.opts.hostname;return e.indexOf(":")===-1?e:"["+e+"]"}_port(){return this.opts.port&&(this.opts.secure&&Number(this.opts.port)!==443||!this.opts.secure&&Number(this.opts.port)!==80)?":"+this.opts.port:""}_query(e){let t=st(e);return t.length?"?"+t:""}};var X=class extends v{constructor(){super(...arguments),this._polling=!1}get name(){return"polling"}doOpen(){this._poll()}pause(e){this.readyState="pausing";let t=()=>{this.readyState="paused",e()};if(this._polling||!this.writable){let n=0;this._polling&&(n++,this.once("pollComplete",function(){--n||t()})),this.writable||(n++,this.once("drain",function(){--n||t()}))}else t()}_poll(){this._polling=!0,this.doPoll(),this.emitReserved("poll")}onData(e){let t=n=>{if(this.readyState==="opening"&&n.type==="open"&&this.onOpen(),n.type==="close")return this.onClose({description:"transport closed by the server"}),!1;this.onPacket(n)};Qe(e,this.socket.binaryType).forEach(t),this.readyState!=="closed"&&(this._polling=!1,this.emitReserved("pollComplete"),this.readyState==="open"&&this._poll())}doClose(){let e=()=>{this.write([{type:"close"}])};this.readyState==="open"?e():this.once("open",e)}write(e){this.writable=!1,je(e,t=>{this.doWrite(t,()=>{this.writable=!0,this.emitReserved("drain")})})}uri(){let e=this.opts.secure?"https":"http",t=this.query||{};return this.opts.timestampRequests!==!1&&(t[this.opts.timestampParam]=he()),!this.supportsBinary&&!t.sid&&(t.b64=1),this.createUri(e,t)}};var ot=!1;try{ot=typeof XMLHttpRequest<"u"&&"withCredentials"in new XMLHttpRequest}catch{}var at=ot;function Qt(){}var Ae=class extends X{constructor(e){if(super(e),typeof location<"u"){let t=location.protocol==="https:",n=location.port;n||(n=t?"443":"80"),this.xd=typeof location<"u"&&e.hostname!==location.hostname||n!==e.port}}doWrite(e,t){let n=this.request({method:"POST",data:e});n.on("success",t),n.on("error",(s,i)=>{this.onError("xhr post error",s,i)})}doPoll(){let e=this.request();e.on("data",this.onData.bind(this)),e.on("error",(t,n)=>{this.onError("xhr poll error",t,n)}),this.pollXhr=e}},S=class r extends p{constructor(e,t,n){super(),this.createRequest=e,C(this,n),this._opts=n,this._method=n.method||"GET",this._uri=t,this._data=n.data!==void 0?n.data:null,this._create()}_create(){var e;let t=ce(this._opts,"agent","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","autoUnref");t.xdomain=!!this._opts.xd;let n=this._xhr=this.createRequest(t);try{n.open(this._method,this._uri,!0);try{if(this._opts.extraHeaders){n.setDisableHeaderCheck&&n.setDisableHeaderCheck(!0);for(let s in this._opts.extraHeaders)this._opts.extraHeaders.hasOwnProperty(s)&&n.setRequestHeader(s,this._opts.extraHeaders[s])}}catch{}if(this._method==="POST")try{n.setRequestHeader("Content-type","text/plain;charset=UTF-8")}catch{}try{n.setRequestHeader("Accept","*/*")}catch{}(e=this._opts.cookieJar)===null||e===void 0||e.addCookies(n),"withCredentials"in n&&(n.withCredentials=this._opts.withCredentials),this._opts.requestTimeout&&(n.timeout=this._opts.requestTimeout),n.onreadystatechange=()=>{var s;n.readyState===3&&((s=this._opts.cookieJar)===null||s===void 0||s.parseCookies(n.getResponseHeader("set-cookie"))),n.readyState===4&&(n.status===200||n.status===1223?this._onLoad():this.setTimeoutFn(()=>{this._onError(typeof n.status=="number"?n.status:0)},0))},n.send(this._data)}catch(s){this.setTimeoutFn(()=>{this._onError(s)},0);return}typeof document<"u"&&(this._index=r.requestsCount++,r.requests[this._index]=this)}_onError(e){this.emitReserved("error",e,this._xhr),this._cleanup(!0)}_cleanup(e){if(!(typeof this._xhr>"u"||this._xhr===null)){if(this._xhr.onreadystatechange=Qt,e)try{this._xhr.abort()}catch{}typeof document<"u"&&delete r.requests[this._index],this._xhr=null}}_onLoad(){let e=this._xhr.responseText;e!==null&&(this.emitReserved("data",e),this.emitReserved("success"),this._cleanup())}abort(){this._cleanup()}};S.requestsCount=0;S.requests={};if(typeof document<"u"){if(typeof attachEvent=="function")attachEvent("onunload",ct);else if(typeof addEventListener=="function"){let r="onpagehide"in b?"pagehide":"unload";addEventListener(r,ct,!1)}}function ct(){for(let r in S.requests)S.requests.hasOwnProperty(r)&&S.requests[r].abort()}var er=function(){let r=ht({xdomain:!1});return r&&r.responseType!==null}(),k=class extends Ae{constructor(e){super(e);let t=e&&e.forceBase64;this.supportsBinary=er&&!t}request(e={}){return Object.assign(e,{xd:this.xd},this.opts),new S(ht,this.uri(),e)}};function ht(r){let e=r.xdomain;try{if(typeof XMLHttpRequest<"u"&&(!e||at))return new XMLHttpRequest}catch{}if(!e)try{return new b[["Active"].concat("Object").join("X")]("Microsoft.XMLHTTP")}catch{}}var lt=typeof navigator<"u"&&typeof navigator.product=="string"&&navigator.product.toLowerCase()==="reactnative",Ce=class extends v{get name(){return"websocket"}doOpen(){let e=this.uri(),t=this.opts.protocols,n=lt?{}:ce(this.opts,"agent","perMessageDeflate","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","localAddress","protocolVersion","origin","maxPayload","family","checkServerIdentity");this.opts.extraHeaders&&(n.headers=this.opts.extraHeaders);try{this.ws=this.createSocket(e,t,n)}catch(s){return this.emitReserved("error",s)}this.ws.binaryType=this.socket.binaryType,this.addEventListeners()}addEventListeners(){this.ws.onopen=()=>{this.opts.autoUnref&&this.ws._socket.unref(),this.onOpen()},this.ws.onclose=e=>this.onClose({description:"websocket connection closed",context:e}),this.ws.onmessage=e=>this.onData(e.data),this.ws.onerror=e=>this.onError("websocket error",e)}write(e){this.writable=!1;for(let t=0;t<e.length;t++){let n=e[t],s=t===e.length-1;Z(n,this.supportsBinary,i=>{try{this.doWrite(n,i)}catch{}s&&w(()=>{this.writable=!0,this.emitReserved("drain")},this.setTimeoutFn)})}}doClose(){typeof this.ws<"u"&&(this.ws.onerror=()=>{},this.ws.close(),this.ws=null)}uri(){let e=this.opts.secure?"wss":"ws",t=this.query||{};return this.opts.timestampRequests&&(t[this.opts.timestampParam]=he()),this.supportsBinary||(t.b64=1),this.createUri(e,t)}},we=b.WebSocket||b.MozWebSocket,R=class extends Ce{createSocket(e,t,n){return lt?new we(e,t,n):t?new we(e,t):new we(e)}doWrite(e,t){this.ws.send(t)}};var B=class extends v{get name(){return"webtransport"}doOpen(){try{this._transport=new WebTransport(this.createUri("https"),this.opts.transportOptions[this.name])}catch(e){return this.emitReserved("error",e)}this._transport.closed.then(()=>{this.onClose()}).catch(e=>{this.onError("webtransport error",e)}),this._transport.ready.then(()=>{this._transport.createBidirectionalStream().then(e=>{let t=tt(Number.MAX_SAFE_INTEGER,this.socket.binaryType),n=e.readable.pipeThrough(t).getReader(),s=et();s.readable.pipeTo(e.writable),this._writer=s.writable.getWriter();let i=()=>{n.read().then(({done:a,value:c})=>{a||(this.onPacket(c),i())}).catch(a=>{})};i();let o={type:"open"};this.query.sid&&(o.data=`{"sid":"${this.query.sid}"}`),this._writer.write(o).then(()=>this.onOpen())})})}write(e){this.writable=!1;for(let t=0;t<e.length;t++){let n=e[t],s=t===e.length-1;this._writer.write(n).then(()=>{s&&w(()=>{this.writable=!0,this.emitReserved("drain")},this.setTimeoutFn)})}}doClose(){var e;(e=this._transport)===null||e===void 0||e.close()}};var ve={websocket:R,webtransport:B,polling:k};var tr=/^(?:(?![^:@\/?#]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@\/?#]*)(?::([^:@\/?#]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/,rr=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"];function I(r){if(r.length>8e3)throw"URI too long";let e=r,t=r.indexOf("["),n=r.indexOf("]");t!=-1&&n!=-1&&(r=r.substring(0,t)+r.substring(t,n).replace(/:/g,";")+r.substring(n,r.length));let s=tr.exec(r||""),i={},o=14;for(;o--;)i[rr[o]]=s[o]||"";return t!=-1&&n!=-1&&(i.source=e,i.host=i.host.substring(1,i.host.length-1).replace(/;/g,":"),i.authority=i.authority.replace("[","").replace("]","").replace(/;/g,":"),i.ipv6uri=!0),i.pathNames=nr(i,i.path),i.queryKey=sr(i,i.query),i}function nr(r,e){let t=/\/{2,9}/g,n=e.replace(t,"/").split("/");return(e.slice(0,1)=="/"||e.length===0)&&n.splice(0,1),e.slice(-1)=="/"&&n.splice(n.length-1,1),n}function sr(r,e){let t={};return e.replace(/(?:^|&)([^&=]*)=?([^&]*)/g,function(n,s,i){s&&(t[s]=i)}),t}var Se=typeof addEventListener=="function"&&typeof removeEventListener=="function",pe=[];Se&&addEventListener("offline",()=>{pe.forEach(r=>r())},!1);var M=class r extends p{constructor(e,t){if(super(),this.binaryType=rt,this.writeBuffer=[],this._prevBufferLen=0,this._pingInterval=-1,this._pingTimeout=-1,this._maxPayload=-1,this._pingTimeoutTime=1/0,e&&typeof e=="object"&&(t=e,e=null),e){let n=I(e);t.hostname=n.host,t.secure=n.protocol==="https"||n.protocol==="wss",t.port=n.port,n.query&&(t.query=n.query)}else t.host&&(t.hostname=I(t.host).host);C(this,t),this.secure=t.secure!=null?t.secure:typeof location<"u"&&location.protocol==="https:",t.hostname&&!t.port&&(t.port=this.secure?"443":"80"),this.hostname=t.hostname||(typeof location<"u"?location.hostname:"localhost"),this.port=t.port||(typeof location<"u"&&location.port?location.port:this.secure?"443":"80"),this.transports=[],this._transportsByName={},t.transports.forEach(n=>{let s=n.prototype.name;this.transports.push(s),this._transportsByName[s]=n}),this.opts=Object.assign({path:"/engine.io",agent:!1,withCredentials:!1,upgrade:!0,timestampParam:"t",rememberUpgrade:!1,addTrailingSlash:!0,rejectUnauthorized:!0,perMessageDeflate:{threshold:1024},transportOptions:{},closeOnBeforeunload:!1},t),this.opts.path=this.opts.path.replace(/\/$/,"")+(this.opts.addTrailingSlash?"/":""),typeof this.opts.query=="string"&&(this.opts.query=it(this.opts.query)),Se&&(this.opts.closeOnBeforeunload&&(this._beforeunloadEventListener=()=>{this.transport&&(this.transport.removeAllListeners(),this.transport.close())},addEventListener("beforeunload",this._beforeunloadEventListener,!1)),this.hostname!=="localhost"&&(this._offlineEventListener=()=>{this._onClose("transport close",{description:"network connection lost"})},pe.push(this._offlineEventListener))),this.opts.withCredentials&&(this._cookieJar=void 0),this._open()}createTransport(e){let t=Object.assign({},this.opts.query);t.EIO=Te,t.transport=e,this.id&&(t.sid=this.id);let n=Object.assign({},this.opts,{query:t,socket:this,hostname:this.hostname,secure:this.secure,port:this.port},this.opts.transportOptions[e]);return new this._transportsByName[e](n)}_open(){if(this.transports.length===0){this.setTimeoutFn(()=>{this.emitReserved("error","No transports available")},0);return}let e=this.opts.rememberUpgrade&&r.priorWebsocketSuccess&&this.transports.indexOf("websocket")!==-1?"websocket":this.transports[0];this.readyState="opening";let t=this.createTransport(e);t.open(),this.setTransport(t)}setTransport(e){this.transport&&this.transport.removeAllListeners(),this.transport=e,e.on("drain",this._onDrain.bind(this)).on("packet",this._onPacket.bind(this)).on("error",this._onError.bind(this)).on("close",t=>this._onClose("transport close",t))}onOpen(){this.readyState="open",r.priorWebsocketSuccess=this.transport.name==="websocket",this.emitReserved("open"),this.flush()}_onPacket(e){if(this.readyState==="opening"||this.readyState==="open"||this.readyState==="closing")switch(this.emitReserved("packet",e),this.emitReserved("heartbeat"),e.type){case"open":this.onHandshake(JSON.parse(e.data));break;case"ping":this._sendPacket("pong"),this.emitReserved("ping"),this.emitReserved("pong"),this._resetPingTimeout();break;case"error":let t=new Error("server error");t.code=e.data,this._onError(t);break;case"message":this.emitReserved("data",e.data),this.emitReserved("message",e.data);break}}onHandshake(e){this.emitReserved("handshake",e),this.id=e.sid,this.transport.query.sid=e.sid,this._pingInterval=e.pingInterval,this._pingTimeout=e.pingTimeout,this._maxPayload=e.maxPayload,this.onOpen(),this.readyState!=="closed"&&this._resetPingTimeout()}_resetPingTimeout(){this.clearTimeoutFn(this._pingTimeoutTimer);let e=this._pingInterval+this._pingTimeout;this._pingTimeoutTime=Date.now()+e,this._pingTimeoutTimer=this.setTimeoutFn(()=>{this._onClose("ping timeout")},e),this.opts.autoUnref&&this._pingTimeoutTimer.unref()}_onDrain(){this.writeBuffer.splice(0,this._prevBufferLen),this._prevBufferLen=0,this.writeBuffer.length===0?this.emitReserved("drain"):this.flush()}flush(){if(this.readyState!=="closed"&&this.transport.writable&&!this.upgrading&&this.writeBuffer.length){let e=this._getWritablePackets();this.transport.send(e),this._prevBufferLen=e.length,this.emitReserved("flush")}}_getWritablePackets(){if(!(this._maxPayload&&this.transport.name==="polling"&&this.writeBuffer.length>1))return this.writeBuffer;let t=1;for(let n=0;n<this.writeBuffer.length;n++){let s=this.writeBuffer[n].data;if(s&&(t+=nt(s)),n>0&&t>this._maxPayload)return this.writeBuffer.slice(0,n);t+=2}return this.writeBuffer}_hasPingExpired(){if(!this._pingTimeoutTime)return!0;let e=Date.now()>this._pingTimeoutTime;return e&&(this._pingTimeoutTime=0,w(()=>{this._onClose("ping timeout")},this.setTimeoutFn)),e}write(e,t,n){return this._sendPacket("message",e,t,n),this}send(e,t,n){return this._sendPacket("message",e,t,n),this}_sendPacket(e,t,n,s){if(typeof t=="function"&&(s=t,t=void 0),typeof n=="function"&&(s=n,n=null),this.readyState==="closing"||this.readyState==="closed")return;n=n||{},n.compress=n.compress!==!1;let i={type:e,data:t,options:n};this.emitReserved("packetCreate",i),this.writeBuffer.push(i),s&&this.once("flush",s),this.flush()}close(){let e=()=>{this._onClose("forced close"),this.transport.close()},t=()=>{this.off("upgrade",t),this.off("upgradeError",t),e()},n=()=>{this.once("upgrade",t),this.once("upgradeError",t)};return(this.readyState==="opening"||this.readyState==="open")&&(this.readyState="closing",this.writeBuffer.length?this.once("drain",()=>{this.upgrading?n():e()}):this.upgrading?n():e()),this}_onError(e){if(r.priorWebsocketSuccess=!1,this.opts.tryAllTransports&&this.transports.length>1&&this.readyState==="opening")return this.transports.shift(),this._open();this.emitReserved("error",e),this._onClose("transport error",e)}_onClose(e,t){if(this.readyState==="opening"||this.readyState==="open"||this.readyState==="closing"){if(this.clearTimeoutFn(this._pingTimeoutTimer),this.transport.removeAllListeners("close"),this.transport.close(),this.transport.removeAllListeners(),Se&&(this._beforeunloadEventListener&&removeEventListener("beforeunload",this._beforeunloadEventListener,!1),this._offlineEventListener)){let n=pe.indexOf(this._offlineEventListener);n!==-1&&pe.splice(n,1)}this.readyState="closed",this.id=null,this.emitReserved("close",e,t),this.writeBuffer=[],this._prevBufferLen=0}}};M.protocol=Te;var de=class extends M{constructor(){super(...arguments),this._upgrades=[]}onOpen(){if(super.onOpen(),this.readyState==="open"&&this.opts.upgrade)for(let e=0;e<this._upgrades.length;e++)this._probe(this._upgrades[e])}_probe(e){let t=this.createTransport(e),n=!1;M.priorWebsocketSuccess=!1;let s=()=>{n||(t.send([{type:"ping",data:"probe"}]),t.once("packet",u=>{if(!n)if(u.type==="pong"&&u.data==="probe"){if(this.upgrading=!0,this.emitReserved("upgrading",t),!t)return;M.priorWebsocketSuccess=t.name==="websocket",this.transport.pause(()=>{n||this.readyState!=="closed"&&(f(),this.setTransport(t),t.send([{type:"upgrade"}]),this.emitReserved("upgrade",t),t=null,this.upgrading=!1,this.flush())})}else{let g=new Error("probe error");g.transport=t.name,this.emitReserved("upgradeError",g)}}))};function i(){n||(n=!0,f(),t.close(),t=null)}let o=u=>{let g=new Error("probe error: "+u);g.transport=t.name,i(),this.emitReserved("upgradeError",g)};function a(){o("transport closed")}function c(){o("socket closed")}function d(u){t&&u.name!==t.name&&i()}let f=()=>{t.removeListener("open",s),t.removeListener("error",o),t.removeListener("close",a),this.off("close",c),this.off("upgrading",d)};t.once("open",s),t.once("error",o),t.once("close",a),this.once("close",c),this.once("upgrading",d),this._upgrades.indexOf("webtransport")!==-1&&e!=="webtransport"?this.setTimeoutFn(()=>{n||t.open()},200):t.open()}onHandshake(e){this._upgrades=this._filterUpgrades(e.upgrades),super.onHandshake(e)}_filterUpgrades(e){let t=[];for(let n=0;n<e.length;n++)~this.transports.indexOf(e[n])&&t.push(e[n]);return t}},H=class extends de{constructor(e,t={}){let n=typeof e=="object",s=n?{...e}:{...t};(!s.transports||s.transports&&typeof s.transports[0]=="string")&&(s.transports=(s.transports||["polling","websocket","webtransport"]).map(i=>ve[i]).filter(i=>!!i)),super(n?s:e,s)}};var Pn=H.protocol;function pt(r,e="",t){let n=r;t=t||typeof location<"u"&&location,r==null&&(r=t.protocol+"//"+t.host),typeof r=="string"&&(r.charAt(0)==="/"&&(r.charAt(1)==="/"?r=t.protocol+r:r=t.host+r),/^(https?|wss?):\/\//.test(r)||(typeof t<"u"?r=t.protocol+"//"+r:r="https://"+r),n=I(r)),n.port||(/^(http|ws)$/.test(n.protocol)?n.port="80":/^(http|ws)s$/.test(n.protocol)&&(n.port="443")),n.path=n.path||"/";let i=n.host.indexOf(":")!==-1?"["+n.host+"]":n.host;return n.id=n.protocol+"://"+i+":"+n.port+e,n.href=n.protocol+"://"+i+(t&&t.port===n.port?"":":"+n.port),n}var Me={};zt(Me,{Decoder:()=>Oe,Encoder:()=>Re,PacketType:()=>l,isPacketValid:()=>fr,protocol:()=>yt});var or=typeof ArrayBuffer=="function",ar=r=>typeof ArrayBuffer.isView=="function"?ArrayBuffer.isView(r):r.buffer instanceof ArrayBuffer,dt=Object.prototype.toString,cr=typeof Blob=="function"||typeof Blob<"u"&&dt.call(Blob)==="[object BlobConstructor]",hr=typeof File=="function"||typeof File<"u"&&dt.call(File)==="[object FileConstructor]";function j(r){return or&&(r instanceof ArrayBuffer||ar(r))||cr&&r instanceof Blob||hr&&r instanceof File}function J(r,e){if(!r||typeof r!="object")return!1;if(Array.isArray(r)){for(let t=0,n=r.length;t<n;t++)if(J(r[t]))return!0;return!1}if(j(r))return!0;if(r.toJSON&&typeof r.toJSON=="function"&&arguments.length===1)return J(r.toJSON(),!0);for(let t in r)if(Object.prototype.hasOwnProperty.call(r,t)&&J(r[t]))return!0;return!1}function ft(r){let e=[],t=r.data,n=r;return n.data=fe(t,e),n.attachments=e.length,{packet:n,buffers:e}}function fe(r,e,t){if(!r)return r;if(j(r)){let n={_placeholder:!0,num:e.length};return e.push(r),n}else if(Array.isArray(r)){let n=new Array(r.length);for(let s=0;s<r.length;s++)n[s]=fe(r[s],e);return n}else if(typeof r=="object"&&!(r instanceof Date)){if(r.toJSON&&typeof r.toJSON=="function"&&!t)return fe(r.toJSON(),e,!0);let n={};for(let s in r)Object.prototype.hasOwnProperty.call(r,s)&&(n[s]=fe(r[s],e));return n}return r}function ut(r,e){return r.data=ke(r.data,e),delete r.attachments,r}function ke(r,e){if(!r)return r;if(r&&r._placeholder===!0){if(typeof r.num=="number"&&r.num>=0&&r.num<e.length)return e[r.num];throw new Error("illegal attachments")}else if(Array.isArray(r))for(let t=0;t<r.length;t++)r[t]=ke(r[t],e);else if(typeof r=="object")for(let t in r)Object.prototype.hasOwnProperty.call(r,t)&&(r[t]=ke(r[t],e));return r}var mt=["connect","connect_error","disconnect","disconnecting","newListener","removeListener"],yt=5,l;(function(r){r[r.CONNECT=0]="CONNECT",r[r.DISCONNECT=1]="DISCONNECT",r[r.EVENT=2]="EVENT",r[r.ACK=3]="ACK",r[r.CONNECT_ERROR=4]="CONNECT_ERROR",r[r.BINARY_EVENT=5]="BINARY_EVENT",r[r.BINARY_ACK=6]="BINARY_ACK"})(l||(l={}));var Re=class{constructor(e){this.replacer=e}encode(e){return(e.type===l.EVENT||e.type===l.ACK)&&J(e)?this.encodeAsBinary({type:e.type===l.EVENT?l.BINARY_EVENT:l.BINARY_ACK,nsp:e.nsp,data:e.data,id:e.id}):[this.encodeAsString(e)]}encodeAsString(e){let t=""+e.type;return(e.type===l.BINARY_EVENT||e.type===l.BINARY_ACK)&&(t+=e.attachments+"-"),e.nsp&&e.nsp!=="/"&&(t+=e.nsp+","),e.id!=null&&(t+=e.id),e.data!=null&&(t+=JSON.stringify(e.data,this.replacer)),t}encodeAsBinary(e){let t=ft(e),n=this.encodeAsString(t.packet),s=t.buffers;return s.unshift(n),s}},Oe=class r extends p{constructor(e){super(),this.opts=Object.assign({reviver:void 0,maxAttachments:10},typeof e=="function"?{reviver:e}:e)}add(e){let t;if(typeof e=="string"){if(this.reconstructor)throw new Error("got plaintext data when reconstructing a packet");t=this.decodeString(e);let n=t.type===l.BINARY_EVENT;n||t.type===l.BINARY_ACK?(t.type=n?l.EVENT:l.ACK,this.reconstructor=new Le(t)):super.emitReserved("decoded",t)}else if(j(e)||e.base64)if(this.reconstructor)t=this.reconstructor.takeBinaryData(e),t&&(this.reconstructor=null,super.emitReserved("decoded",t));else throw new Error("got binary data when not reconstructing a packet");else throw new Error("Unknown type: "+e)}decodeString(e){let t=0,n={type:Number(e.charAt(0))};if(l[n.type]===void 0)throw new Error("unknown packet type "+n.type);if(n.type===l.BINARY_EVENT||n.type===l.BINARY_ACK){let i=t+1;for(;e.charAt(++t)!=="-"&&t!=e.length;);let o=e.substring(i,t);if(o!=Number(o)||e.charAt(t)!=="-")throw new Error("Illegal attachments");let a=Number(o);if(!gt(a)||a<1)throw new Error("Illegal attachments");if(a>this.opts.maxAttachments)throw new Error("too many attachments");n.attachments=a}if(e.charAt(t+1)==="/"){let i=t+1;for(;++t&&!(e.charAt(t)===","||t===e.length););n.nsp=e.substring(i,t)}else n.nsp="/";let s=e.charAt(t+1);if(s!==""&&Number(s)==s){let i=t+1;for(;++t;){let o=e.charAt(t);if(o==null||Number(o)!=o){--t;break}if(t===e.length)break}n.id=Number(e.substring(i,t+1))}if(e.charAt(++t)){let i=this.tryParse(e.substr(t));if(r.isPayloadValid(n.type,i))n.data=i;else throw new Error("invalid payload")}return n}tryParse(e){try{return JSON.parse(e,this.opts.reviver)}catch{return!1}}static isPayloadValid(e,t){switch(e){case l.CONNECT:return ue(t);case l.DISCONNECT:return t===void 0;case l.CONNECT_ERROR:return typeof t=="string"||ue(t);case l.EVENT:case l.BINARY_EVENT:return Array.isArray(t)&&(typeof t[0]=="number"||typeof t[0]=="string"&&mt.indexOf(t[0])===-1);case l.ACK:case l.BINARY_ACK:return Array.isArray(t)}}destroy(){this.reconstructor&&(this.reconstructor.finishedReconstruction(),this.reconstructor=null)}},Le=class{constructor(e){this.packet=e,this.buffers=[],this.reconPack=e}takeBinaryData(e){if(this.buffers.push(e),this.buffers.length===this.reconPack.attachments){let t=ut(this.reconPack,this.buffers);return this.finishedReconstruction(),t}return null}finishedReconstruction(){this.reconPack=null,this.buffers=[]}};function lr(r){return typeof r=="string"}var gt=Number.isInteger||function(r){return typeof r=="number"&&isFinite(r)&&Math.floor(r)===r};function pr(r){return r===void 0||gt(r)}function ue(r){return Object.prototype.toString.call(r)==="[object Object]"}function dr(r,e){switch(r){case l.CONNECT:return e===void 0||ue(e);case l.DISCONNECT:return e===void 0;case l.EVENT:return Array.isArray(e)&&(typeof e[0]=="number"||typeof e[0]=="string"&&mt.indexOf(e[0])===-1);case l.ACK:return Array.isArray(e);case l.CONNECT_ERROR:return typeof e=="string"||ue(e);default:return!1}}function fr(r){return lr(r.nsp)&&pr(r.id)&&dr(r.type,r.data)}function _(r,e,t){return r.on(e,t),function(){r.off(e,t)}}var ur=Object.freeze({connect:1,connect_error:1,disconnect:1,disconnecting:1,newListener:1,removeListener:1}),D=class extends p{constructor(e,t,n){super(),this.connected=!1,this.recovered=!1,this.receiveBuffer=[],this.sendBuffer=[],this._queue=[],this._queueSeq=0,this.ids=0,this.acks={},this.flags={},this.io=e,this.nsp=t,n&&n.auth&&(this.auth=n.auth),this._opts=Object.assign({},n),this.io._autoConnect&&this.open()}get disconnected(){return!this.connected}subEvents(){if(this.subs)return;let e=this.io;this.subs=[_(e,"open",this.onopen.bind(this)),_(e,"packet",this.onpacket.bind(this)),_(e,"error",this.onerror.bind(this)),_(e,"close",this.onclose.bind(this))]}get active(){return!!this.subs}connect(){return this.connected?this:(this.subEvents(),this.io._reconnecting||this.io.open(),this.io._readyState==="open"&&this.onopen(),this)}open(){return this.connect()}send(...e){return e.unshift("message"),this.emit.apply(this,e),this}emit(e,...t){var n,s,i;if(ur.hasOwnProperty(e))throw new Error('"'+e.toString()+'" is a reserved event name');if(t.unshift(e),this._opts.retries&&!this.flags.fromQueue&&!this.flags.volatile)return this._addToQueue(t),this;let o={type:l.EVENT,data:t};if(o.options={},o.options.compress=this.flags.compress!==!1,typeof t[t.length-1]=="function"){let f=this.ids++,u=t.pop();this._registerAckCallback(f,u),o.id=f}let a=(s=(n=this.io.engine)===null||n===void 0?void 0:n.transport)===null||s===void 0?void 0:s.writable,c=this.connected&&!(!((i=this.io.engine)===null||i===void 0)&&i._hasPingExpired());return this.flags.volatile&&!a||(c?(this.notifyOutgoingListeners(o),this.packet(o)):this.sendBuffer.push(o)),this.flags={},this}_registerAckCallback(e,t){var n;let s=(n=this.flags.timeout)!==null&&n!==void 0?n:this._opts.ackTimeout;if(s===void 0){this.acks[e]=t;return}let i=this.io.setTimeoutFn(()=>{delete this.acks[e];for(let a=0;a<this.sendBuffer.length;a++)this.sendBuffer[a].id===e&&this.sendBuffer.splice(a,1);t.call(this,new Error("operation has timed out"))},s),o=(...a)=>{this.io.clearTimeoutFn(i),t.apply(this,a)};o.withError=!0,this.acks[e]=o}emitWithAck(e,...t){return new Promise((n,s)=>{let i=(o,a)=>o?s(o):n(a);i.withError=!0,t.push(i),this.emit(e,...t)})}_addToQueue(e){let t;typeof e[e.length-1]=="function"&&(t=e.pop());let n={id:this._queueSeq++,tryCount:0,pending:!1,args:e,flags:Object.assign({fromQueue:!0},this.flags)};e.push((s,...i)=>(this._queue[0],s!==null?n.tryCount>this._opts.retries&&(this._queue.shift(),t&&t(s)):(this._queue.shift(),t&&t(null,...i)),n.pending=!1,this._drainQueue())),this._queue.push(n),this._drainQueue()}_drainQueue(e=!1){if(!this.connected||this._queue.length===0)return;let t=this._queue[0];t.pending&&!e||(t.pending=!0,t.tryCount++,this.flags=t.flags,this.emit.apply(this,t.args))}packet(e){e.nsp=this.nsp,this.io._packet(e)}onopen(){typeof this.auth=="function"?this.auth(e=>{this._sendConnectPacket(e)}):this._sendConnectPacket(this.auth)}_sendConnectPacket(e){this.packet({type:l.CONNECT,data:this._pid?Object.assign({pid:this._pid,offset:this._lastOffset},e):e})}onerror(e){this.connected||this.emitReserved("connect_error",e)}onclose(e,t){this.connected=!1,delete this.id,this.emitReserved("disconnect",e,t),this._clearAcks()}_clearAcks(){Object.keys(this.acks).forEach(e=>{if(!this.sendBuffer.some(n=>String(n.id)===e)){let n=this.acks[e];delete this.acks[e],n.withError&&n.call(this,new Error("socket has been disconnected"))}})}onpacket(e){if(e.nsp===this.nsp)switch(e.type){case l.CONNECT:e.data&&e.data.sid?this.onconnect(e.data.sid,e.data.pid):this.emitReserved("connect_error",new Error("It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)"));break;case l.EVENT:case l.BINARY_EVENT:this.onevent(e);break;case l.ACK:case l.BINARY_ACK:this.onack(e);break;case l.DISCONNECT:this.ondisconnect();break;case l.CONNECT_ERROR:this.destroy();let n=new Error(e.data.message);n.data=e.data.data,this.emitReserved("connect_error",n);break}}onevent(e){let t=e.data||[];e.id!=null&&t.push(this.ack(e.id)),this.connected?this.emitEvent(t):this.receiveBuffer.push(Object.freeze(t))}emitEvent(e){if(this._anyListeners&&this._anyListeners.length){let t=this._anyListeners.slice();for(let n of t)n.apply(this,e)}super.emit.apply(this,e),this._pid&&e.length&&typeof e[e.length-1]=="string"&&(this._lastOffset=e[e.length-1])}ack(e){let t=this,n=!1;return function(...s){n||(n=!0,t.packet({type:l.ACK,id:e,data:s}))}}onack(e){let t=this.acks[e.id];typeof t=="function"&&(delete this.acks[e.id],t.withError&&e.data.unshift(null),t.apply(this,e.data))}onconnect(e,t){this.id=e,this.recovered=t&&this._pid===t,this._pid=t,this.connected=!0,this.emitBuffered(),this._drainQueue(!0),this.emitReserved("connect")}emitBuffered(){this.receiveBuffer.forEach(e=>this.emitEvent(e)),this.receiveBuffer=[],this.sendBuffer.forEach(e=>{this.notifyOutgoingListeners(e),this.packet(e)}),this.sendBuffer=[]}ondisconnect(){this.destroy(),this.onclose("io server disconnect")}destroy(){this.subs&&(this.subs.forEach(e=>e()),this.subs=void 0),this.io._destroy(this)}disconnect(){return this.connected&&this.packet({type:l.DISCONNECT}),this.destroy(),this.connected&&this.onclose("io client disconnect"),this}close(){return this.disconnect()}compress(e){return this.flags.compress=e,this}get volatile(){return this.flags.volatile=!0,this}timeout(e){return this.flags.timeout=e,this}onAny(e){return this._anyListeners=this._anyListeners||[],this._anyListeners.push(e),this}prependAny(e){return this._anyListeners=this._anyListeners||[],this._anyListeners.unshift(e),this}offAny(e){if(!this._anyListeners)return this;if(e){let t=this._anyListeners;for(let n=0;n<t.length;n++)if(e===t[n])return t.splice(n,1),this}else this._anyListeners=[];return this}listenersAny(){return this._anyListeners||[]}onAnyOutgoing(e){return this._anyOutgoingListeners=this._anyOutgoingListeners||[],this._anyOutgoingListeners.push(e),this}prependAnyOutgoing(e){return this._anyOutgoingListeners=this._anyOutgoingListeners||[],this._anyOutgoingListeners.unshift(e),this}offAnyOutgoing(e){if(!this._anyOutgoingListeners)return this;if(e){let t=this._anyOutgoingListeners;for(let n=0;n<t.length;n++)if(e===t[n])return t.splice(n,1),this}else this._anyOutgoingListeners=[];return this}listenersAnyOutgoing(){return this._anyOutgoingListeners||[]}notifyOutgoingListeners(e){if(this._anyOutgoingListeners&&this._anyOutgoingListeners.length){let t=this._anyOutgoingListeners.slice();for(let n of t)n.apply(this,e.data)}}};function N(r){r=r||{},this.ms=r.min||100,this.max=r.max||1e4,this.factor=r.factor||2,this.jitter=r.jitter>0&&r.jitter<=1?r.jitter:0,this.attempts=0}N.prototype.duration=function(){var r=this.ms*Math.pow(this.factor,this.attempts++);if(this.jitter){var e=Math.random(),t=Math.floor(e*this.jitter*r);r=Math.floor(e*10)&1?r+t:r-t}return Math.min(r,this.max)|0};N.prototype.reset=function(){this.attempts=0};N.prototype.setMin=function(r){this.ms=r};N.prototype.setMax=function(r){this.max=r};N.prototype.setJitter=function(r){this.jitter=r};var q=class extends p{constructor(e,t){var n;super(),this.nsps={},this.subs=[],e&&typeof e=="object"&&(t=e,e=void 0),t=t||{},t.path=t.path||"/socket.io",this.opts=t,C(this,t),this.reconnection(t.reconnection!==!1),this.reconnectionAttempts(t.reconnectionAttempts||1/0),this.reconnectionDelay(t.reconnectionDelay||1e3),this.reconnectionDelayMax(t.reconnectionDelayMax||5e3),this.randomizationFactor((n=t.randomizationFactor)!==null&&n!==void 0?n:.5),this.backoff=new N({min:this.reconnectionDelay(),max:this.reconnectionDelayMax(),jitter:this.randomizationFactor()}),this.timeout(t.timeout==null?2e4:t.timeout),this._readyState="closed",this.uri=e;let s=t.parser||Me;this.encoder=new s.Encoder,this.decoder=new s.Decoder,this._autoConnect=t.autoConnect!==!1,this._autoConnect&&this.open()}reconnection(e){return arguments.length?(this._reconnection=!!e,e||(this.skipReconnect=!0),this):this._reconnection}reconnectionAttempts(e){return e===void 0?this._reconnectionAttempts:(this._reconnectionAttempts=e,this)}reconnectionDelay(e){var t;return e===void 0?this._reconnectionDelay:(this._reconnectionDelay=e,(t=this.backoff)===null||t===void 0||t.setMin(e),this)}randomizationFactor(e){var t;return e===void 0?this._randomizationFactor:(this._randomizationFactor=e,(t=this.backoff)===null||t===void 0||t.setJitter(e),this)}reconnectionDelayMax(e){var t;return e===void 0?this._reconnectionDelayMax:(this._reconnectionDelayMax=e,(t=this.backoff)===null||t===void 0||t.setMax(e),this)}timeout(e){return arguments.length?(this._timeout=e,this):this._timeout}maybeReconnectOnOpen(){!this._reconnecting&&this._reconnection&&this.backoff.attempts===0&&this.reconnect()}open(e){if(~this._readyState.indexOf("open"))return this;this.engine=new H(this.uri,this.opts);let t=this.engine,n=this;this._readyState="opening",this.skipReconnect=!1;let s=_(t,"open",function(){n.onopen(),e&&e()}),i=a=>{this.cleanup(),this._readyState="closed",this.emitReserved("error",a),e?e(a):this.maybeReconnectOnOpen()},o=_(t,"error",i);if(this._timeout!==!1){let a=this._timeout,c=this.setTimeoutFn(()=>{s(),i(new Error("timeout")),t.close()},a);this.opts.autoUnref&&c.unref(),this.subs.push(()=>{this.clearTimeoutFn(c)})}return this.subs.push(s),this.subs.push(o),this}connect(e){return this.open(e)}onopen(){this.cleanup(),this._readyState="open",this.emitReserved("open");let e=this.engine;this.subs.push(_(e,"ping",this.onping.bind(this)),_(e,"data",this.ondata.bind(this)),_(e,"error",this.onerror.bind(this)),_(e,"close",this.onclose.bind(this)),_(this.decoder,"decoded",this.ondecoded.bind(this)))}onping(){this.emitReserved("ping")}ondata(e){try{this.decoder.add(e)}catch(t){this.onclose("parse error",t)}}ondecoded(e){w(()=>{this.emitReserved("packet",e)},this.setTimeoutFn)}onerror(e){this.emitReserved("error",e)}socket(e,t){let n=this.nsps[e];return n?this._autoConnect&&!n.active&&n.connect():(n=new D(this,e,t),this.nsps[e]=n),n}_destroy(e){let t=Object.keys(this.nsps);for(let n of t)if(this.nsps[n].active)return;this._close()}_packet(e){let t=this.encoder.encode(e);for(let n=0;n<t.length;n++)this.engine.write(t[n],e.options)}cleanup(){this.subs.forEach(e=>e()),this.subs.length=0,this.decoder.destroy()}_close(){this.skipReconnect=!0,this._reconnecting=!1,this.onclose("forced close")}disconnect(){return this._close()}onclose(e,t){var n;this.cleanup(),(n=this.engine)===null||n===void 0||n.close(),this.backoff.reset(),this._readyState="closed",this.emitReserved("close",e,t),this._reconnection&&!this.skipReconnect&&this.reconnect()}reconnect(){if(this._reconnecting||this.skipReconnect)return this;let e=this;if(this.backoff.attempts>=this._reconnectionAttempts)this.backoff.reset(),this.emitReserved("reconnect_failed"),this._reconnecting=!1;else{let t=this.backoff.duration();this._reconnecting=!0;let n=this.setTimeoutFn(()=>{e.skipReconnect||(this.emitReserved("reconnect_attempt",e.backoff.attempts),!e.skipReconnect&&e.open(s=>{s?(e._reconnecting=!1,e.reconnect(),this.emitReserved("reconnect_error",s)):e.onreconnect()}))},t);this.opts.autoUnref&&n.unref(),this.subs.push(()=>{this.clearTimeoutFn(n)})}}onreconnect(){let e=this.backoff.attempts;this._reconnecting=!1,this.backoff.reset(),this.emitReserved("reconnect",e)}};var Q={};function ee(r,e){typeof r=="object"&&(e=r,r=void 0),e=e||{};let t=pt(r,e.path||"/socket.io"),n=t.source,s=t.id,i=t.path,o=Q[s]&&i in Q[s].nsps,a=e.forceNew||e["force new connection"]||e.multiplex===!1||o,c;return a?c=new q(n,e):(Q[s]||(Q[s]=new q(n,e)),c=Q[s]),t.query&&!e.query&&(e.query=t.queryKey),c.socket(t.path,e)}Object.assign(ee,{Manager:q,Socket:D,io:ee,connect:ee});function bt(r,e,t){return ee(`${r}/chat`,{auth:{apiKey:e,visitorId:t??void 0},transports:["websocket"]})}var mr="chat",_t={chat:'<path d="M4 5h16v11H9l-4 3.5V16H4V5Z"/><path d="M8 9h8M8 12h5"/>',"chat-round":'<path d="M12 4c4.97 0 9 3.36 9 7.5S16.97 19 12 19c-1 0-1.96-.14-2.85-.4L5 20l1.2-3.6C4.8 15 4 13.3 4 11.5 4 7.36 7.03 4 12 4Z"/>',"chat-dots":'<path d="M12 4c4.97 0 9 3.36 9 7.5S16.97 19 12 19c-1 0-1.96-.14-2.85-.4L5 20l1.2-3.6C4.8 15 4 13.3 4 11.5 4 7.36 7.03 4 12 4Z"/><circle cx="9" cy="11.5" r=".9" fill="currentColor" stroke="none"/><circle cx="12" cy="11.5" r=".9" fill="currentColor" stroke="none"/><circle cx="15" cy="11.5" r=".9" fill="currentColor" stroke="none"/>',"chat-two":'<path d="M4 5.5h10v7h-4l-2.5 2V12.5H4V5.5Z"/><path d="M10 10.5h10v7h-3.5L14 20v-2.5h-4v-7Z"/>',thought:'<path d="M8 5.5a5 5 0 0 1 9 3 4 4 0 0 1-1 7.9H8.5A4.5 4.5 0 0 1 8 5.5Z"/><circle cx="7" cy="18" r="1" fill="currentColor" stroke="none"/><circle cx="5" cy="20.5" r=".6" fill="currentColor" stroke="none"/>',mail:'<rect x="3.5" y="6" width="17" height="12" rx="1.5"/><path d="M4 7l8 6 8-6"/>',"mail-open":'<rect x="3.5" y="8" width="17" height="10" rx="1.5"/><path d="M3.5 8 12 3l8.5 5"/><path d="M3.5 8 10 13M20.5 8 14 13"/>',send:'<path d="M4 12 20 4l-4 16-5-6-6-2Z"/><path d="M20 4 9.5 14"/>',robot:'<rect x="5" y="8" width="14" height="10" rx="2.5"/><path d="M12 8V5"/><circle cx="12" cy="4" r="1.1" fill="currentColor" stroke="none"/><circle cx="9" cy="13" r="1.1" fill="currentColor" stroke="none"/><circle cx="15" cy="13" r="1.1" fill="currentColor" stroke="none"/><path d="M9 16.5h6"/>',brain:'<path d="M9 4.5a3 3 0 0 0-3 3 3 3 0 0 0-1 5.6 3 3 0 0 0 3.6 4A3 3 0 0 0 12 19V6a2.5 2.5 0 0 0-3-1.5Z"/><path d="M15 4.5a3 3 0 0 1 3 3 3 3 0 0 1 1 5.6 3 3 0 0 1-3.6 4A3 3 0 0 1 12 19V6a2.5 2.5 0 0 1 3-1.5Z"/>',bulb:'<path d="M9 16.5h6M10 19.5h4"/><path d="M12 3.5a6 6 0 0 0-3.2 11.1c.6.4 1 1.1 1 1.9h4.4c0-.8.4-1.5 1-1.9A6 6 0 0 0 12 3.5Z"/>',bolt:'<path d="M12.5 3 5 13.5h5.5L11 21l7.5-10.5H13l-.5-7.5Z"/>',sparkles:'<path d="M12 3.5c.5 3 1.7 4.2 4.7 4.7-3 .5-4.2 1.7-4.7 4.7-.5-3-1.7-4.2-4.7-4.7 3-.5 4.2-1.7 4.7-4.7Z"/><path d="M18.5 14c.3 1.7 1 2.4 2.7 2.7-1.7.3-2.4 1-2.7 2.7-.3-1.7-1-2.4-2.7-2.7 1.7-.3 2.4-1 2.7-2.7Z"/>',orbit:'<circle cx="12" cy="12" r="1.6" fill="currentColor" stroke="none"/><ellipse cx="12" cy="12" rx="9" ry="3.6"/><ellipse cx="12" cy="12" rx="9" ry="3.6" transform="rotate(60 12 12)"/><ellipse cx="12" cy="12" rx="9" ry="3.6" transform="rotate(120 12 12)"/>',rocket:'<path d="M12 3c2.5 1.5 4 4.5 4 8.5 0 2-1 4-1 4H9s-1-2-1-4c0-4 1.5-7 4-8.5Z"/><circle cx="12" cy="9" r="1.4"/><path d="M9 15l-2.5 2.5M15 15l2.5 2.5M10 19l2 2 2-2"/>',wand:'<path d="M4 20 15 9"/><path d="M17 4l.8 1.9L19.7 6.7 17.8 7.5 17 9.4 16.2 7.5 14.3 6.7 16.2 5.9 17 4Z"/><path d="M6 13.5l.5 1.2 1.2.5-1.2.5-.5 1.2-.5-1.2L4.3 15l1.2-.5.5-1.2Z"/>',wave:'<path d="M9 13V6a1.5 1.5 0 0 1 3 0v5"/><path d="M12 11V4.5a1.5 1.5 0 0 1 3 0V11"/><path d="M15 11V6a1.5 1.5 0 0 1 3 0v8c0 3-2 6-6 6s-6-2.5-6.5-5L4 12.5a1.4 1.4 0 0 1 2.3-1.6L9 14"/>',"raised-hand":'<path d="M7 20V10a1.2 1.2 0 0 1 2.4 0v3"/><path d="M9.4 12.5V6a1.2 1.2 0 0 1 2.4 0v6.5"/><path d="M11.8 12.5V5a1.2 1.2 0 0 1 2.4 0v7.5"/><path d="M14.2 12.5V7a1.2 1.2 0 0 1 2.4 0v7c0 3.3-2.3 6-6 6-2.5 0-4-1.2-5-3l-2-3.6a1.3 1.3 0 0 1 2.2-1.3l1.6 2.4"/>',smile:'<circle cx="12" cy="12" r="8.5"/><path d="M8.5 14c1 1.3 2.2 2 3.5 2s2.5-.7 3.5-2"/><circle cx="9" cy="10" r=".9" fill="currentColor" stroke="none"/><circle cx="15" cy="10" r=".9" fill="currentColor" stroke="none"/>',"smile-chat":'<path d="M12 4c4.97 0 9 3.36 9 7.5S16.97 19 12 19c-1 0-1.96-.14-2.85-.4L5 20l1.2-3.6C4.8 15 4 13.3 4 11.5 4 7.36 7.03 4 12 4Z"/><circle cx="9.5" cy="11" r=".8" fill="currentColor" stroke="none"/><circle cx="14.5" cy="11" r=".8" fill="currentColor" stroke="none"/><path d="M9.5 13.5c.7.8 1.5 1.2 2.5 1.2s1.8-.4 2.5-1.2"/>',handshake:'<path d="M3 12l4-3 3.5 2-1.5 2"/><path d="M21 12l-4-3-3.5 2 1.5 2"/><path d="M9 13l2.5 2.2a1.4 1.4 0 0 0 2-2l-3-2.7"/><path d="M15 13l-2.5 2.2"/>',"heart-chat":'<path d="M12 20s-7-4.4-9.3-8.8C1.3 8 3 5 6.2 5c2 0 3.4 1.2 4.3 2.4C11.4 6.2 12.8 5 14.8 5 18 5 19.7 8 17.3 11.2 15 15.6 12 20 12 20Z"/>',"thumbs-up":'<path d="M7 11v9H4v-9h3Z"/><path d="M7 11l3.5-6.5a1.6 1.6 0 0 1 3 1l-1 4.5H17a2 2 0 0 1 2 2.4l-1.3 6A2 2 0 0 1 15.7 20H10a3 3 0 0 1-3-3v-6Z"/>',wink:'<circle cx="12" cy="12" r="8.5"/><path d="M8.5 14c1 1.3 2.2 2 3.5 2s2.5-.7 3.5-2"/><path d="M7.5 10h3"/><circle cx="15" cy="10" r=".9" fill="currentColor" stroke="none"/>',headset:'<path d="M4 13a8 8 0 0 1 16 0"/><rect x="3" y="13" width="4" height="6" rx="1.5"/><rect x="17" y="13" width="4" height="6" rx="1.5"/><path d="M19 19v1a3 3 0 0 1-3 3h-3"/>',bell:'<path d="M6 17V11a6 6 0 0 1 12 0v6l1.5 2h-15L6 17Z"/><path d="M10 20.5a2 2 0 0 0 4 0"/>',megaphone:'<path d="M3 10v4h3l6 4V6L6 10H3Z"/><path d="M14 9a4 4 0 0 1 0 6"/><path d="M17 6.5a8 8 0 0 1 0 11"/>',broadcast:'<circle cx="12" cy="12" r="2"/><path d="M8.5 8.5a5 5 0 0 0 0 7M15.5 8.5a5 5 0 0 1 0 7"/><path d="M5.5 5.5a9.5 9.5 0 0 0 0 13M18.5 5.5a9.5 9.5 0 0 1 0 13"/>',"life-ring":'<circle cx="12" cy="12" r="8.5"/><circle cx="12" cy="12" r="3.5"/><path d="M6 6l3.5 3.5M18 6l-3.5 3.5M6 18l3.5-3.5M18 18l-3.5-3.5"/>',question:'<circle cx="12" cy="12" r="8.5"/><path d="M9.5 9.3a2.5 2.5 0 1 1 3.6 2.3c-.8.5-1.1.9-1.1 1.9"/><circle cx="12" cy="16.5" r=".9" fill="currentColor" stroke="none"/>',info:'<circle cx="12" cy="12" r="8.5"/><circle cx="12" cy="8" r=".9" fill="currentColor" stroke="none"/><path d="M12 11v6"/>',"phone-support":'<path d="M6.5 4.5h3L11 8l-2 1.5a11 11 0 0 0 5.5 5.5L16 13l3.5 1.5v3a2 2 0 0 1-2.2 2A15.5 15.5 0 0 1 4.5 6.7a2 2 0 0 1 2-2.2Z"/>',star:'<path d="M12 3.5l2.4 5.1 5.6.6-4.2 3.8 1.2 5.5L12 15.7l-5 2.8 1.2-5.5-4.2-3.8 5.6-.6L12 3.5Z"/>',"star-fill":'<path d="M12 3.5l2.4 5.1 5.6.6-4.2 3.8 1.2 5.5L12 15.7l-5 2.8 1.2-5.5-4.2-3.8 5.6-.6L12 3.5Z" fill="currentColor"/>',"check-circle":'<circle cx="12" cy="12" r="8.5"/><path d="M8.5 12.3 11 15l4.5-5.5"/>',target:'<circle cx="12" cy="12" r="8.5"/><circle cx="12" cy="12" r="5"/><circle cx="12" cy="12" r="1.4" fill="currentColor" stroke="none"/>',flame:'<path d="M12 3.5c1 2.5-.5 3.5-1.5 5C9 10 8 11.5 8 13.5A4 4 0 0 0 12 17.5a4 4 0 0 0 4-4c0-1.5-.7-2.3-1.3-3 .3 1.2-.2 2-1 2.3.3-2-1-2.7-1.7-4.3Z"/>',"shield-check":'<path d="M12 3.5 19 6.5V11c0 5-3 8.2-7 9.5-4-1.3-7-4.5-7-9.5V6.5L12 3.5Z"/><path d="M9 12l2 2 4-4.5"/>',crown:'<path d="M4 17l-1.5-8L7 12l5-6 5 6 4.5-3L20 17H4Z"/><path d="M4 19.5h16"/>',gift:'<rect x="4" y="9.5" width="16" height="10" rx="1"/><path d="M4 13h16"/><path d="M12 9.5v10"/><path d="M12 9.5c-1-2.5-2.8-4-4.3-4A2 2 0 0 0 6 7.5c0 1.3 1.2 2 2.5 2H12Z"/><path d="M12 9.5c1-2.5 2.8-4 4.3-4A2 2 0 0 1 18 7.5c0 1.3-1.2 2-2.5 2H12Z"/>'};function Ne(r){return`<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round">${r&&_t[r]||_t[mr]}</svg>`}var me={SOFT:{waveform:"sine",gain:.12,tones:{CHAT_OPENED:[{freq:523,start:0,duration:.14}],BOT_REPLY:[{freq:659,start:0,duration:.16}],AGENT_MESSAGE:[{freq:494,start:0,duration:.14},{freq:587,start:.12,duration:.2}],RULE_TRIGGERED:[{freq:587,start:0,duration:.13}],COMMAND_EXECUTED:[{freq:440,start:0,duration:.18}]}},CLASSIC:{waveform:"sine",gain:.2,tones:{CHAT_OPENED:[{freq:660,start:0,duration:.09}],BOT_REPLY:[{freq:880,start:0,duration:.12}],AGENT_MESSAGE:[{freq:587,start:0,duration:.1},{freq:784,start:.1,duration:.14}],RULE_TRIGGERED:[{freq:740,start:0,duration:.08},{freq:740,start:.12,duration:.08}],COMMAND_EXECUTED:[{freq:784,start:0,duration:.1},{freq:660,start:.1,duration:.14}]}},BELL:{waveform:"triangle",gain:.15,tones:{CHAT_OPENED:[{freq:784,start:0,duration:.1},{freq:988,start:.05,duration:.12}],BOT_REPLY:[{freq:1046,start:0,duration:.18}],AGENT_MESSAGE:[{freq:659,start:0,duration:.12},{freq:784,start:.1,duration:.12},{freq:988,start:.2,duration:.22}],RULE_TRIGGERED:[{freq:1174,start:0,duration:.14}],COMMAND_EXECUTED:[{freq:880,start:0,duration:.1},{freq:1046,start:.1,duration:.16}]}}},yr={enabled:!0,soundStyle:"CLASSIC"},ye=class{constructor(){this.triggers={}}setTriggers(e){this.triggers=e}prime(){if(this.context){this.context.state==="suspended"&&this.context.resume();return}let e=window.AudioContext??window.webkitAudioContext;if(e)try{this.context=new e}catch{}}play(e){let t=this.context;if(!t)return;let n=this.triggers[e]??yr;if(!n.enabled)return;let{waveform:s,gain:i}=me[n.soundStyle]??me.CLASSIC,o=(me[n.soundStyle]??me.CLASSIC).tones[e],a=t.currentTime;for(let c of o){let d=t.createOscillator(),f=t.createGain();d.type=s,d.frequency.value=c.freq;let u=a+c.start,g=u+c.duration;f.gain.setValueAtTime(0,u),f.gain.linearRampToValueAtTime(i,u+.01),f.gain.linearRampToValueAtTime(0,g),d.connect(f),f.connect(t.destination),d.start(u),d.stop(g+.02)}}};var Et="chat:ready";var xt="chat:close",Tt="chat:toggle",At="chat:resize",wt="chat:send",Ct="chat:bot-reply",vt="chat:connect-error",St="chat:history",kt="chat:admin-message",Rt="chat:admin-typing",Pe="chat:agent-presence",Ot="chat:typing",Lt="chat:upload-attachment",Mt="chat:attachment-uploaded",Nt="chat:attachment-upload-error";var re="zabbu-chat-widget-launcher",ne="zabbu-chat-widget-panel",It="zabbu-chat-widget-iframe",P="zabbu-chat-widget-teaser",se="zabbu-chat-widget-badge",Ht="#2563eb";function gr(r,e){switch(r){case"NONE":return{launcher:"none",panel:"none",teaser:"none"};case"ELEVATED":return{launcher:"0 16px 40px -8px rgba(0, 0, 0, 0.45), 0 6px 16px rgba(0, 0, 0, 0.25)",panel:"0 30px 80px -16px rgba(0, 0, 0, 0.5), 0 12px 32px rgba(0, 0, 0, 0.3)",teaser:"0 20px 50px -12px rgba(0, 0, 0, 0.4), 0 8px 20px rgba(0, 0, 0, 0.2)"};case"BRAND_GLOW":{let t=Be(e,.5),n=Be(e,.3);return{launcher:`0 10px 26px -4px ${t}, 0 3px 10px ${n}`,panel:`0 26px 64px -12px ${t}, 0 10px 28px ${n}`,teaser:`0 18px 42px -8px ${t}, 0 6px 16px ${n}`}}case"SOFT":default:return{launcher:"0 4px 12px rgba(0, 0, 0, 0.2)",panel:"0 8px 30px rgba(0, 0, 0, 0.25)",teaser:"0 6px 20px rgba(0, 0, 0, 0.15)"}}}function Be(r,e){let t=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(r);if(!t)return Be(Ht,e);let[n,s,i]=t.slice(1).map(o=>parseInt(o,16));return`rgba(${n}, ${s}, ${i}, ${e})`}function Dt(r){if(r==="bottom-left"||r==="BOTTOM_LEFT")return"BOTTOM_LEFT";if(r==="bottom-right"||r==="BOTTOM_RIGHT")return"BOTTOM_RIGHT"}function qt(r){if(r==="dark"||r==="DARK")return"DARK";if(r==="light"||r==="LIGHT")return"LIGHT"}function br(){let r=new Map;return{on(e,t){let n=r.get(e);n||(n=new Set,r.set(e,n)),n.add(t)},off(e,t){r.get(e)?.delete(t)},emit(e,t){r.get(e)?.forEach(n=>n(t))}}}function _r(r,e,t,n){let s=r||Ht,i=gr(e,s),o=document.documentElement.style;o.setProperty("--zabbu-chat-primary",s),o.setProperty("--zabbu-chat-shadow-launcher",i.launcher),o.setProperty("--zabbu-chat-shadow-panel",i.panel),o.setProperty("--zabbu-chat-shadow-teaser",i.teaser),document.getElementById(P)?.classList.toggle("zabbu-chat-teaser-dark",t==="DARK");let a=n==="BOTTOM_LEFT";for(let c of[re,ne,P,se])document.getElementById(c)?.classList.toggle("zabbu-chat-position-left",a)}async function Er(r,e,t){let n=null,s="SOFT",i="LIGHT",o="BOTTOM_RIGHT";try{let a=await fetch(`${r}/public/sites/${e}`);if(a.ok){let c=await a.json();n=c.primaryColor??null,s=c.shadowStyle??"SOFT",i=c.colorScheme??"LIGHT",o=c.widgetPosition??"BOTTOM_RIGHT"}}catch{}_r(t.primaryColor??n,s,t.colorScheme??i,t.position??o)}function xr(){let r=document.currentScript;if(!r)throw new Error("zabbu-chat-widget: loader.js must run as a plain <script> tag");return r}function Tr(r){let e=r.dataset.apiBase;return e?e.replace(/\/$/,""):"https://api-production-e565.up.railway.app"}function Ar(r){return new URL(r.src).href.replace(/\/[^/]*$/,"")}function Pt(r){return`zabbu-chat-visitor:${r}`}function wr(){let r=document.createElement("style");r.textContent=`
2
+ #${re} {
3
3
  position: fixed;
4
4
  bottom: 20px;
5
5
  right: 20px;
@@ -17,11 +17,11 @@
17
17
  transition: box-shadow 0.3s ease;
18
18
  z-index: 2147483000;
19
19
  }
20
- #${Ce} svg {
20
+ #${re} svg {
21
21
  width: 26px;
22
22
  height: 26px;
23
23
  }
24
- #${ve} {
24
+ #${ne} {
25
25
  position: fixed;
26
26
  bottom: 88px;
27
27
  right: 20px;
@@ -36,15 +36,15 @@
36
36
  z-index: 2147483000;
37
37
  display: none;
38
38
  }
39
- #${ve}.zabbu-chat-open {
39
+ #${ne}.zabbu-chat-open {
40
40
  display: block;
41
41
  }
42
- #${kt} {
42
+ #${It} {
43
43
  width: 100%;
44
44
  height: 100%;
45
45
  border: 0;
46
46
  }
47
- #${X} {
47
+ #${P} {
48
48
  position: fixed;
49
49
  bottom: 32px;
50
50
  right: 88px;
@@ -64,17 +64,17 @@
64
64
  background-color 0.3s ease, color 0.3s ease, border-color 0.3s ease;
65
65
  pointer-events: none;
66
66
  }
67
- #${X}.zabbu-chat-teaser-visible {
67
+ #${P}.zabbu-chat-teaser-visible {
68
68
  opacity: 1;
69
69
  transform: translateY(0) scale(1);
70
70
  pointer-events: auto;
71
71
  }
72
- #${X}.zabbu-chat-teaser-dark {
72
+ #${P}.zabbu-chat-teaser-dark {
73
73
  background: #1f2028;
74
74
  color: #f1eff8;
75
75
  border-color: rgba(255, 255, 255, 0.1);
76
76
  }
77
- #${Se} {
77
+ #${se} {
78
78
  /* Sibling of the launcher, not a child \u2014 launcher.innerHTML gets fully replaced
79
79
  when the trigger icon updates (see the CHAT_READY handler below), which would
80
80
  silently delete a badge nested inside it. Positioned to overlap the launcher's
@@ -95,7 +95,22 @@
95
95
  pointer-events: none;
96
96
  display: none;
97
97
  }
98
- #${Se}.zabbu-chat-badge-visible {
98
+ #${se}.zabbu-chat-badge-visible {
99
99
  display: block;
100
100
  }
101
- `,document.head.appendChild(r)}function ur(r,e,t){let n=new URL(`${r}/index.html`),s=new URLSearchParams({prefix:t,api:e});return n.hash=s.toString(),n.toString()}function fr(){let r=cr(),e=r.dataset.siteKey;if(!e)throw new Error("zabbu-chat-widget: missing data-site-key attribute");let t=e.split(".")[0],n=hr(r),s=lr(r);pr();let i=document.createElement("button");i.id=Ce,i.type="button",i.setAttribute("aria-label","Abrir chat"),i.innerHTML=Ae(null);let o=document.createElement("div");o.id=ve;let a=document.createElement("iframe");a.id=kt,a.sandbox.add("allow-scripts","allow-forms","allow-same-origin"),a.src=ur(s,n,t),o.appendChild(a);let c=document.createElement("button");c.id=X,c.type="button",c.textContent="\xBFNecesit\xE1s ayuda? \u{1F44B}";let f=document.createElement("span");f.id=Se,f.setAttribute("aria-hidden","true"),document.body.appendChild(o),document.body.appendChild(i),document.body.appendChild(c),document.body.appendChild(f),ar(n,t);let u=!0,d=new ae,b=0;function ce(l){b=l,f.textContent=l>9?"9+":String(l),f.classList.toggle("zabbu-chat-badge-visible",l>0)}let C=!1;function Re(l){C=l,o.classList.toggle("zabbu-chat-open",C),D({type:mt,payload:{open:C}}),C&&ce(0)}function D(l){a.contentWindow?.postMessage(l,new URL(a.src).origin)}function Oe(){c.classList.remove("zabbu-chat-teaser-visible")}c.addEventListener("click",()=>{Oe(),i.click()});let Ne=!1;i.addEventListener("click",()=>{d.prime(),Oe();let l=!C;Re(l),l&&u&&d.play("CHAT_OPENED"),l&&!Ne&&(Ne=!0,E.emit("chat-opened"))});let Ot=localStorage.getItem(St(t)),E=pt(n,e,Ot),Le=!1,Pe=[];function R(l){Le?D(l):Pe.push(l)}let Me=!1;E.on("session",l=>{localStorage.setItem(St(t),l.visitorId),Me||(Me=!0,R({type:xt,payload:{messages:l.history}})),l.agentPresence!==void 0&&R({type:we,payload:{presence:l.agentPresence}})}),E.on("agent-presence",l=>{R({type:we,payload:{presence:l}})}),E.on("bot-reply",l=>{R({type:_t,payload:{text:l.text}}),u&&d.play(l.event??"BOT_REPLY"),C||ce(b+1)}),E.on("admin-message",l=>{R({type:Et,payload:{...l}}),u&&d.play("AGENT_MESSAGE"),C||ce(b+1)}),E.on("admin-typing",l=>{R({type:Tt,payload:{...l}})}),E.on("connect_error",()=>{R({type:bt})}),window.addEventListener("message",l=>{if(l.source!==a.contentWindow)return;let y=l.data;if(!(!y||typeof y.type!="string")){if(y.type===dt)Re(!1);else if(y.type===yt){let m=!!y.payload?.fullscreen;o.classList.toggle("zabbu-chat-fullscreen",m)}else if(y.type===gt){let m=y.payload;(m?.text||m?.attachmentUrl)&&E.emit("message",m)}else if(y.type===At){let m=y.payload;E.emit("typing",{isTyping:!!m?.isTyping})}else if(y.type===wt){let m=y.payload;m&&Nt(m,e)}else if(y.type===ft){i.disabled=!1;let m=y.payload,O=m?.triggerIcon;typeof O=="string"&&O&&(i.innerHTML=Ae(O)),u=m?.soundEnabled!==!1,d.setTriggers(Object.fromEntries((m?.soundTriggers??[]).map(he=>[he.event,{enabled:he.enabled,soundStyle:he.soundStyle}]))),Le=!0,Pe.splice(0).forEach(D);let q=m?.autoOpenAfterSeconds;typeof q=="number"&&q>0&&setTimeout(()=>{C||c.classList.add("zabbu-chat-teaser-visible")},q*1e3)}}});async function Nt(l,y){let m=new FormData;m.append("file",l.file);try{let O=await fetch(`${n}/public/sites/${t}/attachments`,{method:"POST",headers:{"X-Api-Key":y},body:m});if(!O.ok)throw new Error(`upload failed with status ${O.status}`);let q=await O.json();D({type:Ct,payload:{requestId:l.requestId,...q}})}catch{D({type:vt,payload:{requestId:l.requestId,message:"upload failed"}})}}}fr();})();
101
+ /* Mirror image of the default (bottom-right) placement above, toggled by
102
+ ZabbuConfig.position / data-position \u2014 same offsets, opposite side. */
103
+ #${re}.zabbu-chat-position-left,
104
+ #${ne}.zabbu-chat-position-left {
105
+ right: auto;
106
+ left: 20px;
107
+ }
108
+ #${P}.zabbu-chat-position-left {
109
+ right: auto;
110
+ left: 88px;
111
+ }
112
+ #${se}.zabbu-chat-position-left {
113
+ right: auto;
114
+ left: 11px;
115
+ }
116
+ `,document.head.appendChild(r)}function Cr(r,e,t,n){let s=new URL(`${r}/index.html`),i=new URLSearchParams({prefix:t,api:e});return n.welcomeText&&i.set("welcome",n.welcomeText),n.primaryColor&&i.set("color",n.primaryColor),n.colorScheme&&i.set("scheme",n.colorScheme),s.hash=i.toString(),s.toString()}function vr(r,e){let t=e.siteKey,n=t.split(".")[0],s=e.apiBase?.replace(/\/$/,"")??Tr(r),i=Ar(r),o=Dt(e.position),a=qt(e.colorScheme),c=br();wr();let d=document.createElement("button");d.id=re,d.type="button",d.setAttribute("aria-label","Abrir chat"),d.innerHTML=Ne(null);let f=document.createElement("div");f.id=ne;let u=document.createElement("iframe");u.id=It,u.sandbox.add("allow-scripts","allow-forms","allow-same-origin"),u.src=Cr(i,s,n,{welcomeText:e.welcomeText,primaryColor:e.primaryColor,colorScheme:a}),f.appendChild(u);let g=document.createElement("button");g.id=P,g.type="button",g.textContent="\xBFNecesit\xE1s ayuda? \u{1F44B}";let U=document.createElement("span");U.id=se,U.setAttribute("aria-hidden","true"),document.body.appendChild(f),document.body.appendChild(d),document.body.appendChild(g),document.body.appendChild(U),Er(s,n,{primaryColor:e.primaryColor,position:o,colorScheme:a});let ie=!0,F=new ye,ge=0;function be(h){ge=h,U.textContent=h>9?"9+":String(h),U.classList.toggle("zabbu-chat-badge-visible",h>0)}let x=!1;function V(h){h!==x&&(x=h,f.classList.toggle("zabbu-chat-open",x),G({type:Tt,payload:{open:x}}),x&&be(0),c.emit(x?"open":"close",void 0))}function G(h){u.contentWindow?.postMessage(h,new URL(u.src).origin)}function Ie(){g.classList.remove("zabbu-chat-teaser-visible")}g.addEventListener("click",()=>{Ie(),d.click()});let He=!1;d.addEventListener("click",()=>{F.prime(),Ie();let h=!x;V(h),h&&ie&&F.play("CHAT_OPENED"),h&&!He&&(He=!0,A.emit("chat-opened"))});let Vt=localStorage.getItem(Pt(n)),A=bt(s,t,Vt),De=!1,qe=[];function O(h){De?G(h):qe.push(h)}let Ue=!1;A.on("session",h=>{localStorage.setItem(Pt(n),h.visitorId),Ue||(Ue=!0,O({type:St,payload:{messages:h.history}})),h.agentPresence!==void 0&&O({type:Pe,payload:{presence:h.agentPresence}})}),A.on("agent-presence",h=>{O({type:Pe,payload:{presence:h}})}),A.on("bot-reply",h=>{O({type:Ct,payload:{text:h.text}}),ie&&F.play(h.event??"BOT_REPLY"),x||be(ge+1),c.emit("message",{text:h.text})}),A.on("admin-message",h=>{O({type:kt,payload:{...h}}),ie&&F.play("AGENT_MESSAGE"),x||be(ge+1),c.emit("message",{text:h.text})}),A.on("admin-typing",h=>{O({type:Rt,payload:{...h}})}),A.on("connect_error",()=>{O({type:vt})}),window.addEventListener("message",h=>{if(h.source!==u.contentWindow)return;let m=h.data;if(!(!m||typeof m.type!="string")){if(m.type===xt)V(!1);else if(m.type===At){let y=!!m.payload?.fullscreen;f.classList.toggle("zabbu-chat-fullscreen",y)}else if(m.type===wt){let y=m.payload;(y?.text||y?.attachmentUrl)&&A.emit("message",y)}else if(m.type===Ot){let y=m.payload;A.emit("typing",{isTyping:!!y?.isTyping})}else if(m.type===Lt){let y=m.payload;y&&Gt(y,t)}else if(m.type===Et){d.disabled=!1;let y=m.payload,L=y?.triggerIcon;typeof L=="string"&&L&&(d.innerHTML=Ne(L)),ie=y?.soundEnabled!==!1,F.setTriggers(Object.fromEntries((y?.soundTriggers??[]).map(_e=>[_e.event,{enabled:_e.enabled,soundStyle:_e.soundStyle}]))),De=!0,qe.splice(0).forEach(G);let K=y?.autoOpenAfterSeconds;typeof K=="number"&&K>0&&setTimeout(()=>{x||g.classList.add("zabbu-chat-teaser-visible")},K*1e3)}}});async function Gt(h,m){let y=new FormData;y.append("file",h.file);try{let L=await fetch(`${s}/public/sites/${n}/attachments`,{method:"POST",headers:{"X-Api-Key":m},body:y});if(!L.ok)throw new Error(`upload failed with status ${L.status}`);let K=await L.json();G({type:Mt,payload:{requestId:h.requestId,...K}})}catch{G({type:Nt,payload:{requestId:h.requestId,message:"upload failed"}})}}let Fe=!1;return queueMicrotask(()=>{Fe=!0,c.emit("ready",void 0)}),{open:()=>V(!0),close:()=>V(!1),toggle:()=>V(!x),on(h,m){if(h==="ready"&&Fe){m(void 0);return}c.on(h,m)},off:(h,m)=>c.off(h,m)}}function Sr(r){let e=r.dataset.siteKey;if(!e)return null;let t=Dt(r.dataset.position),n=qt(r.dataset.colorScheme);return{siteKey:e,apiBase:r.dataset.apiBase,primaryColor:r.dataset.primaryColor,welcomeText:r.dataset.welcomeText,position:t==="BOTTOM_LEFT"?"bottom-left":t==="BOTTOM_RIGHT"?"bottom-right":void 0,colorScheme:n==="DARK"?"dark":n==="LIGHT"?"light":void 0}}var Ut=xr(),E=null;function te(r){console.warn(`zabbu-chat-widget: Zabbu.${r}() called before Zabbu.init()`)}var Ft={init(r){if(!E){if(!r?.siteKey)throw new Error("zabbu-chat-widget: Zabbu.init() requires a siteKey");E=vr(Ut,r)}return E},open(){E?E.open():te("open")},close(){E?E.close():te("close")},toggle(){E?E.toggle():te("toggle")},on(r,e){E?E.on(r,e):te("on")},off(r,e){E?E.off(r,e):te("off")}};window.Zabbu=Ft;var Bt=Sr(Ut);Bt&&Ft.init(Bt);})();
package/package.json CHANGED
@@ -1,13 +1,14 @@
1
1
  {
2
2
  "name": "@zabbu/chat-widget",
3
- "version": "0.9.2",
4
- "description": "Embeddable chat widget (loader.js + chat UI) for the chat portal backend (zabbu-chat-portal). Served standalone see server.mjs and Dockerfile.",
3
+ "version": "0.10.1",
4
+ "description": "Embeddable, multi-tenant chat widget a single <script> tag, with a programmatic JS API and per-embed config overrides.",
5
5
  "private": false,
6
6
  "publishConfig": {
7
7
  "access": "public"
8
8
  },
9
9
  "files": [
10
- "dist"
10
+ "dist",
11
+ "CHANGELOG.md"
11
12
  ],
12
13
  "main": "dist/loader.js",
13
14
  "license": "MIT",