@aiden-voice/widget 0.5.1 → 0.5.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +48 -14
- package/dist/components/Composer.d.ts +1 -1
- package/dist/components/Launcher.d.ts +1 -1
- package/dist/controller.d.ts +3 -0
- package/dist/sessionToken.d.ts +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/widget.iife.js +7 -7
- package/dist/widget.js +482 -432
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -5,6 +5,15 @@ install the npm package) and get a working, ready-to-use chat bubble in
|
|
|
5
5
|
the corner of your site, backed entirely by whoo-aiden's public widget API
|
|
6
6
|
— no UI code of your own required.
|
|
7
7
|
|
|
8
|
+
This README is for developers working on the widget. If you are embedding
|
|
9
|
+
the widget on a site, read the public documentation instead, starting with
|
|
10
|
+
[Install the widget](https://docs.aidenvoice.com/widget/install/):
|
|
11
|
+
|
|
12
|
+
- [Configuration reference](https://docs.aidenvoice.com/widget/configuration/)
|
|
13
|
+
- [Connection keys and allowed addresses](https://docs.aidenvoice.com/widget/keys-and-origins/)
|
|
14
|
+
- [Troubleshooting](https://docs.aidenvoice.com/widget/troubleshooting/)
|
|
15
|
+
- [Versions](https://docs.aidenvoice.com/widget/versions/)
|
|
16
|
+
|
|
8
17
|
## Installation
|
|
9
18
|
|
|
10
19
|
### Option 1: CDN `<script>` tag
|
|
@@ -13,7 +22,7 @@ the corner of your site, backed entirely by whoo-aiden's public widget API
|
|
|
13
22
|
<script src="https://widget.aidenvoice.com/v0/widget.iife.js"></script>
|
|
14
23
|
<script>
|
|
15
24
|
window.whooAidenWidget.init({
|
|
16
|
-
publishableKey: '
|
|
25
|
+
publishableKey: 'pk_...',
|
|
17
26
|
})
|
|
18
27
|
</script>
|
|
19
28
|
```
|
|
@@ -28,7 +37,7 @@ pnpm add @aiden-voice/widget
|
|
|
28
37
|
import { init } from '@aiden-voice/widget'
|
|
29
38
|
|
|
30
39
|
init({
|
|
31
|
-
publishableKey: '
|
|
40
|
+
publishableKey: 'pk_...',
|
|
32
41
|
})
|
|
33
42
|
```
|
|
34
43
|
|
|
@@ -41,7 +50,7 @@ two — whether you load the widget via the CDN script tag
|
|
|
41
50
|
|
|
42
51
|
```ts
|
|
43
52
|
init({
|
|
44
|
-
publishableKey: '
|
|
53
|
+
publishableKey: 'pk_...', // OR sessionToken -- exactly one, never both
|
|
45
54
|
// sessionToken: '<jwt from your own backend's identify-session call>',
|
|
46
55
|
position: 'bottom-right', // optional theming, all have defaults
|
|
47
56
|
color: '#4f46e5',
|
|
@@ -345,22 +354,47 @@ checklist run before each release.
|
|
|
345
354
|
|
|
346
355
|
The widget distinguishes two deliberately different error tiers:
|
|
347
356
|
|
|
348
|
-
- **Init/auth failures** (an invalid `publishableKey`, an
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
at all. The failure is logged via
|
|
352
|
-
diagnose it, but nothing partial or
|
|
353
|
-
page.
|
|
357
|
+
- **Init/auth failures** (an invalid `publishableKey`, an Origin not on the
|
|
358
|
+
allowlist, a session-minting quota that is used up, or an expired or refused
|
|
359
|
+
`sessionToken`) are entirely silent to the visitor — no launcher bubble
|
|
360
|
+
renders at all. The failure is logged via
|
|
361
|
+
`console.error` with enough detail to diagnose it, but nothing partial or
|
|
362
|
+
broken-looking ever appears on the page.
|
|
354
363
|
- **Failures once the widget is already visible and in an active chat**
|
|
355
|
-
(a network error, an SSE connection dropping mid-stream,
|
|
356
|
-
|
|
357
|
-
the chat panel itself (e.g.
|
|
358
|
-
|
|
364
|
+
(a network error, an SSE connection dropping mid-stream, an error
|
|
365
|
+
response from the server, a session that runs out while the page is open)
|
|
366
|
+
show a short, non-technical inline message in the chat panel itself (e.g.
|
|
367
|
+
"Something went wrong, please try again"), leaving any partial response
|
|
368
|
+
already rendered in place above it.
|
|
369
|
+
|
|
370
|
+
How a bad `sessionToken` is caught at start-up, without the widget ever
|
|
371
|
+
holding a key to check its signature:
|
|
372
|
+
|
|
373
|
+
- If the token is a JWT whose `exp` has already passed, `init()` treats it as
|
|
374
|
+
an init failure straight away, with no network request. A token the widget
|
|
375
|
+
can't read (not a JWT, no `exp`) is never rejected locally.
|
|
376
|
+
- Otherwise, when the widget looks up the agent's branding with the token
|
|
377
|
+
(see above), a `401` or `403` answer is an init failure too. That lookup is
|
|
378
|
+
skipped when you pass every branding value yourself, so in that case only the
|
|
379
|
+
expiry check applies and a token the server would refuse for another reason
|
|
380
|
+
fails on the visitor's first message instead.
|
|
381
|
+
- Any other branding failure (an older backend without the endpoint, a network
|
|
382
|
+
blip, a `5xx`) stays silent: branding is cosmetic, so the widget keeps your
|
|
383
|
+
values and the defaults.
|
|
384
|
+
|
|
385
|
+
The launcher is not drawn until start-up has finished (the session minted in
|
|
386
|
+
`publishableKey` mode, or the checks above in `sessionToken` mode), so it never
|
|
387
|
+
appears for a session that is about to be refused. The branding lookup is
|
|
388
|
+
waited for at most 3 seconds; if it is slower than that the launcher appears
|
|
389
|
+
anyway, and a `401`/`403` that arrives later still removes it.
|
|
390
|
+
|
|
391
|
+
A malformed `init()` call (both or neither of `publishableKey` and
|
|
392
|
+
`sessionToken`) throws synchronously from `init()` itself.
|
|
359
393
|
|
|
360
394
|
## License
|
|
361
395
|
|
|
362
396
|
Proprietary. This package is licensed only for embedding the Aiden service under
|
|
363
|
-
the applicable Aiden terms of service
|
|
397
|
+
the applicable Aiden terms of service. See `LICENSE.md` in the package.
|
|
364
398
|
|
|
365
399
|
## Local development
|
|
366
400
|
|
|
@@ -4,5 +4,5 @@ export declare function Composer({ value, onChange, onSend, disabled, inputRef,
|
|
|
4
4
|
onChange: (value: string) => void;
|
|
5
5
|
onSend: () => void;
|
|
6
6
|
disabled: boolean;
|
|
7
|
-
inputRef?: RefObject<HTMLInputElement>;
|
|
7
|
+
inputRef?: RefObject<HTMLInputElement | null>;
|
|
8
8
|
}): import('preact').JSX.Element;
|
package/dist/controller.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { WidgetConfig } from './types';
|
|
2
2
|
export declare const SLOW_RESPONSE_DELAY_MS = 8000;
|
|
3
|
+
export declare const BRANDING_LOOKUP_WAIT_MS = 3000;
|
|
3
4
|
export interface Message {
|
|
4
5
|
role: 'user' | 'assistant';
|
|
5
6
|
content: string;
|
|
@@ -17,6 +18,7 @@ export interface WidgetState {
|
|
|
17
18
|
messages: Message[];
|
|
18
19
|
isStreaming: boolean;
|
|
19
20
|
initError: string | null;
|
|
21
|
+
isInitializing: boolean;
|
|
20
22
|
runtimeError: string | null;
|
|
21
23
|
messageFeedback: Record<string, MessageFeedbackState>;
|
|
22
24
|
primaryColor: string | null;
|
|
@@ -48,6 +50,7 @@ export declare class WidgetController {
|
|
|
48
50
|
private clearSlowResponse;
|
|
49
51
|
private setState;
|
|
50
52
|
init(): Promise<void>;
|
|
53
|
+
private start;
|
|
51
54
|
private loadBranding;
|
|
52
55
|
open(): void;
|
|
53
56
|
resetConversation(): void;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function isExpiredSessionToken(token: string, nowMs?: number): boolean;
|
package/dist/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const WIDGET_VERSION = "0.5.
|
|
1
|
+
export declare const WIDGET_VERSION = "0.5.3";
|
package/dist/widget.iife.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
var whooAidenWidget=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=2147483e3,n=2147483647;function r(e){return e===void 0?t:Number.isInteger(e)&&Math.abs(e)<=n?e:(console.warn(`whoo-aiden-widget: ignoring zIndex ${String(e)} (expected an integer between -${n} and ${n}); using ${t}.`),t)}var i=`Aiden`;function a(e){return typeof e==`string`?e.trim():``}function o(e){if((typeof e.publishableKey==`string`&&e.publishableKey.length>0)==(typeof e.sessionToken==`string`&&e.sessionToken.length>0))throw Error("whoo-aiden-widget: init() requires exactly one of `publishableKey` or `sessionToken`, not both or neither.")}var s,c,l,u,d,f,p,m,h,g,_,v,y,b,x={},S=[],C=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,ee=Array.isArray;function w(e,t){for(var n in t)e[n]=t[n];return e}function te(e){e&&e.parentNode&&e.parentNode.removeChild(e)}function T(e,t,n){var r,i,a,o={};for(a in t)a==`key`?r=t[a]:a==`ref`?i=t[a]:o[a]=t[a];if(arguments.length>2&&(o.children=arguments.length>3?s.call(arguments,2):n),typeof e==`function`&&e.defaultProps!=null)for(a in e.defaultProps)o[a]===void 0&&(o[a]=e.defaultProps[a]);return E(e,o,r,i,null)}function E(e,t,n,r,i){var a={type:e,props:t,key:n,ref:r,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:i??++l,__i:-1,__u:0};return i==null&&c.vnode!=null&&c.vnode(a),a}function D(e){return e.children}function O(e,t){this.props=e,this.context=t}function k(e,t){if(t==null)return e.__?k(e.__,e.__i+1):null;for(var n;t<e.__k.length;t++)if((n=e.__k[t])!=null&&n.__e!=null)return n.__e;return typeof e.type==`function`?k(e):null}function A(e){if(e.__P&&e.__d){var t=e.__v,n=t.__e,r=[],i=[],a=w({},t);a.__v=t.__v+1,c.vnode&&c.vnode(a),le(e.__P,a,t,e.__n,e.__P.namespaceURI,32&t.__u?[n]:null,r,n??k(t),!!(32&t.__u),i),a.__v=t.__v,a.__.__k[a.__i]=a,de(r,a,i),t.__e=t.__=null,a.__e!=n&&j(a)}}function j(e){if((e=e.__)!=null&&e.__c!=null)return e.__e=e.__c.base=null,e.__k.some(function(t){if(t!=null&&t.__e!=null)return e.__e=e.__c.base=t.__e}),j(e)}function M(e){(!e.__d&&(e.__d=!0)&&u.push(e)&&!ne.__r++||d!=c.debounceRendering)&&((d=c.debounceRendering)||f)(ne)}function ne(){try{for(var e,t=1;u.length;)u.length>t&&u.sort(p),e=u.shift(),t=u.length,A(e)}finally{u.length=ne.__r=0}}function re(e,t,n,r,i,a,o,s,c,l,u){var d,f,p,m,h,g,_=r&&r.__k||S,v=t.length;for(c=ie(n,t,_,c,v),d=0;d<v;d++)(p=n.__k[d])!=null&&(f=p.__i!=-1&&_[p.__i]||x,p.__i=d,g=le(e,p,f,i,a,o,s,c,l,u),m=p.__e,p.ref&&f.ref!=p.ref&&(f.ref&&me(f.ref,null,p),u.push(p.ref,p.__c||m,p)),h==null&&m!=null&&(h=m),4&p.__u?(c=ae(p,c,e),f.__e&&(f.__e=null)):typeof p.type==`function`&&g!==void 0?c=g:m&&(c=m.nextSibling),p.__u&=-7);return n.__e=h,c}function ie(e,t,n,r,i){var a,o,s,c,l,u=n.length,d=u,f=0;for(e.__k=Array(i),a=0;a<i;a++)(o=t[a])!=null&&typeof o!=`boolean`&&typeof o!=`function`?(typeof o==`string`||typeof o==`number`||typeof o==`bigint`||o.constructor==String?o=e.__k[a]=E(null,o,null,null,null):ee(o)?o=e.__k[a]=E(D,{children:o},null,null,null):o.constructor===void 0&&o.__b>0?o=e.__k[a]=E(o.type,o.props,o.key,o.ref?o.ref:null,o.__v):e.__k[a]=o,c=a+f,o.__=e,o.__b=e.__b+1,s=null,(l=o.__i=oe(o,n,c,d))!=-1&&(d--,(s=n[l])&&(s.__u|=2)),s==null||s.__v==null?(l==-1&&(i>u?f--:i<u&&f++),typeof o.type!=`function`&&(o.__u|=4)):l!=c&&(l==c-1?f--:l==c+1?f++:(l>c?f--:f++,o.__u|=4))):e.__k[a]=null;if(d)for(a=0;a<u;a++)(s=n[a])!=null&&!(2&s.__u)&&(s.__e==r&&(r=k(s)),he(s,s));return r}function ae(e,t,n){var r,i;if(typeof e.type==`function`){for(r=e.__k,i=0;r&&i<r.length;i++)r[i]&&(r[i].__=e,t=ae(r[i],t,n));return t}e.__e!=t&&(t&&e.type&&!t.parentNode&&(t=k(e)),t=n.insertBefore(e.__e,t||null));do t&&=t.nextSibling;while(t!=null&&t.nodeType==8);return t}function oe(e,t,n,r){var i,a,o,s=e.key,c=e.type,l=t[n],u=l!=null&&!(2&l.__u);if(l===null&&s==null||u&&s==l.key&&c==l.type)return n;if(r>+!!u){for(i=n-1,a=n+1;i>=0||a<t.length;)if((l=t[o=i>=0?i--:a++])!=null&&!(2&l.__u)&&s==l.key&&c==l.type)return o}return-1}function se(e,t,n){t[0]==`-`?e.setProperty(t,n??``):e[t]=n==null?``:typeof n!=`number`||C.test(t)?n:n+`px`}function N(e,t,n,r,i){var a,o;n:if(t==`style`){if(typeof n==`string`)e.style.cssText=n;else{if(typeof r==`string`&&(e.style.cssText=r=``),r)for(t in r)n&&t in n||se(e.style,t,``);if(n)for(t in n)r&&n[t]==r[t]||se(e.style,t,n[t])}}else if(t[0]==`o`&&t[1]==`n`)a=t!=(t=t.replace(_,`$1`)),o=t.toLowerCase(),t=o in e||t==`onFocusOut`||t==`onFocusIn`?o.slice(2):t.slice(2),e.l||={},e.l[t+a]=n,n?r?n[g]=r[g]:(n[g]=v,e.addEventListener(t,a?b:y,a)):e.removeEventListener(t,a?b:y,a);else{if(i==`http://www.w3.org/2000/svg`)t=t.replace(/xlink(H|:h)/,`h`).replace(/sName$/,`s`);else if(t!=`width`&&t!=`height`&&t!=`href`&&t!=`list`&&t!=`form`&&t!=`tabIndex`&&t!=`download`&&t!=`rowSpan`&&t!=`colSpan`&&t!=`role`&&t!=`popover`&&t in e)try{e[t]=n??``;break n}catch{}typeof n==`function`||(n==null||!1===n&&t[4]!=`-`?e.removeAttribute(t):e.setAttribute(t,t==`popover`&&n==1?``:n))}}function ce(e){return function(t){if(this.l){var n=this.l[t.type+e];if(t[h]==null)t[h]=v++;else if(t[h]<n[g])return;return n(c.event?c.event(t):t)}}}function le(e,t,n,r,i,a,o,s,l,u){var d,f,p,m,h,g,_,v,y,b,x,C,T,E,A,j,M=t.type;if(t.constructor!==void 0)return null;128&n.__u&&(l=!!(32&n.__u),a=[s=t.__e=n.__e]),(d=c.__b)&&d(t);n:if(typeof M==`function`){f=o.length;try{if(y=t.props,b=M.prototype&&M.prototype.render,x=(d=M.contextType)&&r[d.__c],C=d?x?x.props.value:d.__:r,n.__c?v=(p=t.__c=n.__c).__=p.__E:(b?t.__c=p=new M(y,C):(t.__c=p=new O(y,C),p.constructor=M,p.render=ge),x&&x.sub(p),p.state||(p.state={}),p.__n=r,m=p.__d=!0,p.__h=[],p._sb=[]),b&&p.__s==null&&(p.__s=p.state),b&&M.getDerivedStateFromProps!=null&&(p.__s==p.state&&(p.__s=w({},p.__s)),w(p.__s,M.getDerivedStateFromProps(y,p.__s))),h=p.props,g=p.state,p.__v=t,m)b&&M.getDerivedStateFromProps==null&&p.componentWillMount!=null&&p.componentWillMount(),b&&p.componentDidMount!=null&&p.__h.push(p.componentDidMount);else{if(b&&M.getDerivedStateFromProps==null&&y!==h&&p.componentWillReceiveProps!=null&&p.componentWillReceiveProps(y,C),t.__v==n.__v||!p.__e&&p.shouldComponentUpdate!=null&&!1===p.shouldComponentUpdate(y,p.__s,C)){t.__v!=n.__v&&(p.props=y,p.state=p.__s,p.__d=!1),t.__e=n.__e,t.__k=n.__k,t.__k.some(function(e){e&&(e.__=t)}),S.push.apply(p.__h,p._sb),p._sb=[],p.__h.length&&o.push(p),s=k(n);break n}p.componentWillUpdate!=null&&p.componentWillUpdate(y,p.__s,C),b&&p.componentDidUpdate!=null&&p.__h.push(function(){p.componentDidUpdate(h,g,_)})}if(p.context=C,p.props=y,p.__P=e,p.__e=!1,T=c.__r,E=0,b)p.state=p.__s,p.__d=!1,T&&T(t),d=p.render(p.props,p.state,p.context),S.push.apply(p.__h,p._sb),p._sb=[];else do p.__d=!1,T&&T(t),d=p.render(p.props,p.state,p.context),p.state=p.__s;while(p.__d&&++E<25);p.state=p.__s,p.getChildContext!=null&&(r=w(w({},r),p.getChildContext())),b&&!m&&p.getSnapshotBeforeUpdate!=null&&(_=p.getSnapshotBeforeUpdate(h,g)),A=d!=null&&d.type===D&&d.key==null?fe(d.props.children):d,s=re(e,ee(A)?A:[A],t,n,r,i,a,o,s,l,u),p.base=t.__e,t.__u&=-161,p.__h.length&&o.push(p),v&&(p.__E=p.__=null)}catch(e){if(o.length=f,t.__v=null,l||a!=null){if(e.then){for(t.__u|=l?160:128;s&&s.nodeType==8&&s.nextSibling;)s=s.nextSibling;a!=null&&(a[a.indexOf(s)]=null),t.__e=s}else if(a!=null)for(j=a.length;j--;)te(a[j])}else t.__e=n.__e;t.__k??=n.__k||[],e.then||ue(t),c.__e(e,t,n)}}else a==null&&t.__v==n.__v?(t.__k=n.__k,t.__e=n.__e):s=t.__e=pe(n.__e,t,n,r,i,a,o,l,u);return(d=c.diffed)&&d(t),128&t.__u?void 0:s}function ue(e){e&&(e.__c&&(e.__c.__e=!0),e.__k&&e.__k.some(ue))}function de(e,t,n){for(var r=0;r<n.length;r++)me(n[r],n[++r],n[++r]);c.__c&&c.__c(t,e),e.some(function(t){try{e=t.__h,t.__h=[],e.some(function(e){e.call(t)})}catch(e){c.__e(e,t.__v)}})}function fe(e){return typeof e!=`object`||!e||e.__b>0?e:ee(e)?e.map(fe):e.constructor===void 0?w({},e):null}function pe(e,t,n,r,i,a,o,l,u){var d,f,p,m,h,g,_,v=n.props||x,y=t.props,b=t.type;if(b==`svg`?i=`http://www.w3.org/2000/svg`:b==`math`?i=`http://www.w3.org/1998/Math/MathML`:i||=`http://www.w3.org/1999/xhtml`,a!=null){for(d=0;d<a.length;d++)if((h=a[d])&&`setAttribute`in h==!!b&&(b?h.localName==b:h.nodeType==3)){e=h,a[d]=null;break}}if(e==null){if(b==null)return document.createTextNode(y);e=document.createElementNS(i,b,y.is&&y),l&&=(c.__m&&c.__m(t,a),!1),a=null}if(b==null)v===y||l&&e.data==y||(e.data=y);else{if(a=b==`textarea`&&y.defaultValue!=null?null:a&&s.call(e.childNodes),!l&&a!=null)for(v={},d=0;d<e.attributes.length;d++)v[(h=e.attributes[d]).name]=h.value;for(d in v)h=v[d],d==`dangerouslySetInnerHTML`?p=h:d==`children`||d in y||d==`value`&&`defaultValue`in y||d==`checked`&&`defaultChecked`in y||N(e,d,null,h,i);for(d in y)h=y[d],d==`children`?m=h:d==`dangerouslySetInnerHTML`?f=h:d==`value`?g=h:d==`checked`?_=h:l&&typeof h!=`function`||v[d]===h||N(e,d,h,v[d],i);if(f)l||p&&(f.__html==p.__html||f.__html==e.innerHTML)||(e.innerHTML=f.__html),t.__k=[];else if(p&&(e.innerHTML=``),re(t.type==`template`?e.content:e,ee(m)?m:[m],t,n,r,b==`foreignObject`?`http://www.w3.org/1999/xhtml`:i,a,o,a?a[0]:n.__k&&k(n,0),l,u),a!=null)for(d=a.length;d--;)te(a[d]);l&&b!=`textarea`||(d=`value`,b==`progress`&&g==null?e.removeAttribute(`value`):g!=null&&(g!==e[d]||b==`progress`&&!g||b==`option`&&g!=v[d])&&N(e,d,g,v[d],i),d=`checked`,_!=null&&_!=e[d]&&N(e,d,_,v[d],i))}return e}function me(e,t,n){try{if(typeof e==`function`){var r=typeof e.__u==`function`;r&&e.__u(),r&&t==null||(e.__u=e(t))}else e.current=t}catch(e){c.__e(e,n)}}function he(e,t,n){var r,i;if(c.unmount&&c.unmount(e),(r=e.ref)&&(r.current&&r.current!=e.__e||me(r,null,t)),(r=e.__c)!=null){if(r.componentWillUnmount)try{r.componentWillUnmount()}catch(e){c.__e(e,t)}r.base=r.__P=r.__n=null}if(r=e.__k)for(i=0;i<r.length;i++)r[i]&&he(r[i],t,n||typeof e.type!=`function`);n||te(e.__e),e.__c=e.__=e.__e=void 0}function ge(e,t,n){return this.constructor(e,n)}function _e(e,t,n){var r,i,a,o;t==document&&(t=document.documentElement),c.__&&c.__(e,t),i=(r=typeof n==`function`)?null:n&&n.__k||t.__k,a=[],o=[],le(t,e=(!r&&n||t).__k=T(D,null,[e]),i||x,x,t.namespaceURI,!r&&n?[n]:i?null:t.firstChild?s.call(t.childNodes):null,a,!r&&n?n:i?i.__e:t.firstChild,r,o),de(a,e,o),e.props.children=null}s=S.slice,c={__e:function(e,t,n,r){for(var i,a,o;t=t.__;)if((i=t.__c)&&!i.__)try{if((a=i.constructor)&&a.getDerivedStateFromError!=null&&(i.setState(a.getDerivedStateFromError(e)),o=i.__d),i.componentDidCatch!=null&&(i.componentDidCatch(e,r||{}),o=i.__d),o)return i.__E=i}catch(t){e=t}throw e}},l=0,O.prototype.setState=function(e,t){var n=this.__s!=null&&this.__s!=this.state?this.__s:this.__s=w({},this.state);typeof e==`function`&&(e=e(w({},n),this.props)),e&&w(n,e),e!=null&&this.__v&&(t&&this._sb.push(t),M(this))},O.prototype.forceUpdate=function(e){this.__v&&(this.__e=!0,e&&this.__h.push(e),M(this))},O.prototype.render=D,u=[],f=typeof Promise==`function`?Promise.prototype.then.bind(Promise.resolve()):setTimeout,p=function(e,t){return e.__v.__b-t.__v.__b},ne.__r=0,m=Math.random().toString(8),h=`__d`+m,g=`__a`+m,_=/(PointerCapture)$|Capture$/i,v=0,y=ce(!1),b=ce(!0);var P,F,ve,ye,I=0,be=[],L=c,xe=L.__b,Se=L.__r,Ce=L.diffed,we=L.__c,Te=L.unmount,Ee=L.__;function De(e,t){L.__h&&L.__h(F,e,I||t),I=0;var n=F.__H||(F.__H={__:[],__h:[]});return e>=n.__.length&&n.__.push({}),n.__[e]}function Oe(e){return I=1,ke(Ie,e)}function ke(e,t,n){var r=De(P++,2);if(r.t=e,!r.__c&&(r.__=[n?n(t):Ie(void 0,t),function(e){var t=r.__N?r.__N[0]:r.__[0],n=r.t(t,e);t!==n&&(r.__N=[n,r.__[1]],r.__c.setState({}))}],r.__c=F,!F.__f)){var i=function(e,t,n){if(!r.__c.__H)return!0;var i=!1,o=r.__c.props!==e;if(r.__c.__H.__.some(function(e){if(e.__N){i=!0;var t=e.__[0];e.__=e.__N,e.__N=void 0,t!==e.__[0]&&(o=!0)}}),a){var s=a.call(this,e,t,n);return i?s||o:s}return!i||o};F.__f=!0;var a=F.shouldComponentUpdate,o=F.componentWillUpdate;F.componentWillUpdate=function(e,t,n){if(this.__e){var r=a;a=void 0,i(e,t,n),a=r}o&&o.call(this,e,t,n)},F.shouldComponentUpdate=i}return r.__N||r.__}function R(e,t){var n=De(P++,3);!L.__s&&Fe(n.__H,t)&&(n.__=e,n.u=t,F.__H.__h.push(n))}function z(e){return I=5,Ae(function(){return{current:e}},[])}function Ae(e,t){var n=De(P++,7);return Fe(n.__H,t)&&(n.__=e(),n.__H=t,n.__h=e),n.__}function je(){for(var e;e=be.shift();){var t=e.__H;if(e.__P&&t)try{t.__h.some(B),t.__h.some(Pe),t.__h=[]}catch(n){t.__h=[],L.__e(n,e.__v)}}}L.__b=function(e){F=null,xe&&xe(e)},L.__=function(e,t){e&&t.__k&&t.__k.__m&&(e.__m=t.__k.__m),Ee&&Ee(e,t)},L.__r=function(e){Se&&Se(e),P=0;var t=(F=e.__c).__H;t&&(ve===F?(t.__h=[],F.__h=[],t.__.some(function(e){e.__N&&(e.__=e.__N),e.u=e.__N=void 0})):(t.__h.some(B),t.__h.some(Pe),t.__h=[],P=0)),ve=F},L.diffed=function(e){Ce&&Ce(e);var t=e.__c;t&&t.__H&&(t.__H.__h.length&&(be.push(t)!==1&&ye===L.requestAnimationFrame||((ye=L.requestAnimationFrame)||Ne)(je)),t.__H.__.some(function(e){e.u&&=(e.__H=e.u,void 0)})),ve=F=null},L.__c=function(e,t){t.some(function(e){try{e.__h.some(B),e.__h=e.__h.filter(function(e){return!e.__||Pe(e)})}catch(n){t.some(function(e){e.__h&&=[]}),t=[],L.__e(n,e.__v)}}),we&&we(e,t)},L.unmount=function(e){Te&&Te(e);var t,n=e.__c;n&&n.__H&&(n.__H.__.some(function(e){try{B(e)}catch(e){t=e}}),n.__H=void 0,t&&L.__e(t,n.__v))};var Me=typeof requestAnimationFrame==`function`;function Ne(e){var t,n=function(){clearTimeout(r),Me&&cancelAnimationFrame(t),setTimeout(e)},r=setTimeout(n,35);Me&&(t=requestAnimationFrame(n))}function B(e){var t=F,n=e.__c;typeof n==`function`&&(e.__c=void 0,n()),F=t}function Pe(e){var t=F;e.__c=e.__(),F=t}function Fe(e,t){return!e||e.length!==t.length||t.some(function(t,n){return t!==e[n]})}function Ie(e,t){return typeof t==`function`?t(e):t}var Le=0;Array.isArray;function V(e,t,n,r,i,a){t||={};var o,s,l=t;if(`ref`in l)for(s in l={},t)s==`ref`?o=t[s]:l[s]=t[s];var u={type:e,props:l,key:n,ref:o,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:--Le,__i:-1,__u:0,__source:i,__self:a};if(typeof e==`function`&&(o=e.defaultProps))for(s in o)l[s]===void 0&&(l[s]=o[s]);return c.vnode&&c.vnode(u),u}function H({name:e,size:t,children:n}){return V(`svg`,{"data-icon":e,"aria-hidden":`true`,focusable:`false`,width:t,height:t,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,children:n})}function Re({size:e=26}){return V(H,{name:`chat`,size:e,children:[V(`path`,{d:`M4 5.5A2.5 2.5 0 0 1 6.5 3h11A2.5 2.5 0 0 1 20 5.5v8a2.5 2.5 0 0 1-2.5 2.5H10l-4.5 4v-4h0A1.5 1.5 0 0 1 4 14.5z`}),V(`path`,{d:`M8.5 9.5h.01M12 9.5h.01M15.5 9.5h.01`,"stroke-width":`2.5`})]})}function ze({size:e=26}){return V(H,{name:`chevron-down`,size:e,children:V(`path`,{d:`M6 9l6 6 6-6`})})}function Be({size:e=18}){return V(H,{name:`close`,size:e,children:V(`path`,{d:`M6 6l12 12M18 6L6 18`})})}var Ve=`M7 11v9M7 11l3.5-7.2A1.8 1.8 0 0 1 14 4.6V9h4.6a2 2 0 0 1 2 2.3l-1.2 7A2 2 0 0 1 17.4 20H7M7 11H4.5A1.5 1.5 0 0 0 3 12.5v6A1.5 1.5 0 0 0 4.5 20H7`;function He({size:e=16}){return V(H,{name:`thumb-up`,size:e,children:V(`path`,{d:Ve})})}function Ue({size:e=16}){return V(H,{name:`thumb-down`,size:e,children:V(`path`,{d:Ve,transform:`matrix(1 0 0 -1 0 24)`})})}function We({isOpen:e,onClick:t,iconUrl:n,buttonRef:r}){let[i,a]=Oe(`loading`),o=n!==void 0&&i!==`failed`,s=o&&!e&&i===`loaded`;return V(`button`,{type:`button`,class:`whoo-widget-launcher`,onClick:t,"aria-label":e?`Close chat`:`Open chat`,ref:r,children:[e?V(ze,{}):s?null:V(Re,{}),o?V(`img`,{class:`whoo-widget-launcher-icon-image`,src:n,alt:``,referrerpolicy:`no-referrer`,hidden:!s,onLoad:()=>a(`loaded`),onError:()=>a(`failed`)}):null]})}function Ge({value:e,onChange:t,onSend:n,disabled:r,inputRef:i}){return V(`div`,{class:`whoo-widget-composer`,children:[V(`label`,{class:`whoo-widget-sr-only`,for:`whoo-widget-composer-input`,children:`Message`}),V(`input`,{id:`whoo-widget-composer-input`,class:`whoo-widget-composer-input`,value:e,readOnly:r,"aria-disabled":r,ref:i,onInput:e=>t(e.target.value),onKeyDown:e=>{e.key===`Enter`&&n()}}),V(`button`,{type:`button`,class:`whoo-widget-composer-send`,"aria-disabled":r,onClick:()=>{r||n()},children:`Send`})]})}function Ke({message:e}){return V(`div`,{class:`whoo-widget-error-banner`,role:`alert`,children:e})}var U=/\[([^\]]+)\]\((https?:\/\/[^\s)]+)\)/y,W=/\*\*([^*\s](?:[^*]*[^*\s])?)\*\*/y,G=/(?<![A-Za-z0-9_])_([^_\s](?:[^_]*[^_\s])?)_(?![A-Za-z0-9_])/y,K=/\*([^*\s](?:[^*]*[^*\s])?)\*/y,q=/[ \t]*[*+-][ \t]+/y,qe=/https?:\/\/\S+/y,Je=/[.,;:!?)\]}>]+$/;function J(e){let t=[],n=0,r=0,i=n=>{n>r&&t.push({type:`text`,value:e.slice(r,n),start:r,end:n})};for(;n<e.length;){if((n===0||e[n-1]===`
|
|
2
|
-
`)&&(
|
|
1
|
+
var whooAidenWidget=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=2147483e3,n=2147483647;function r(e){return e===void 0?t:Number.isInteger(e)&&Math.abs(e)<=n?e:(console.warn(`whoo-aiden-widget: ignoring zIndex ${String(e)} (expected an integer between -${n} and ${n}); using ${t}.`),t)}var i=`Aiden`;function a(e){return typeof e==`string`?e.trim():``}function o(e){if((typeof e.publishableKey==`string`&&e.publishableKey.length>0)==(typeof e.sessionToken==`string`&&e.sessionToken.length>0))throw Error("whoo-aiden-widget: init() requires exactly one of `publishableKey` or `sessionToken`, not both or neither.")}var s,c,l,u,d,f,p,m,h,g,_,v,y={},b=[],x=/^m(i|n|o|s|text|space)$/,ee=Array.isArray,S=b.slice,C=Object.assign;function w(e){e&&e.parentNode&&e.remove()}function T(e,t,n,r,i){var a={type:e,props:t,key:n,ref:r,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:i||++c,__i:-1,__u:0};return!i&&s.vnode&&s.vnode(a),a}function E(e){return e.children}function D(e,t){this.props=e,this.context=t,this.__g=0}function O(e,t){if(t==null)return e.__?O(e.__,e.__i+1):null;for(var n;t<e.__k.length;t++)if((n=e.__k[t])&&n.__e)return n.__e;return typeof e.type!=`function`||e.props.__P?null:O(e)}function k(e){if((e=e.__)&&e.__c&&!e.props.__P)return e.__e=null,e.__k.some(function(t){return t&&(e.__e=t.__e)}),k(e)}function A(e){(8&e.__g||!(e.__g|=8)||!l.push(e)||d++)&&u==s.debounceRendering||((u=s.debounceRendering)||queueMicrotask)(te)}function te(){var e,t,n,r,i,a,o,c,u;try{for(t=1;l.length;)l.length>t&&l.sort(f),e=l.shift(),t=l.length,8&e.__g&&(r=void 0,i=void 0,a=(i=(n=e).__v).__e,o=[],c=[],(u=n.__P)&&((r=C({constructor:void 0},i)).__v=i.__v+1,s.vnode&&s.vnode(r),re(u,r,i,n.__n,u.namespaceURI,32&i.__u?[a]:null,o,a||O(i),32&i.__u,c),r.__v=i.__v,r.__.__k[r.__i]=r,ae(o,r,c),i.__=i.__e=null,r.__e!=a&&k(r)))}finally{l.length=d=0}}function ne(e,t,n,r,i,a,o,s,c,l,u){var d,f,p,m,h,g,_=r.__k||b,v=t.length;for(c=j(n,t,_,c,v),d=0;d<v;d++)(p=n.__k[d])!=null&&(f=~p.__i&&_[p.__i]||y,p.__i=d,g=re(e,p,f,i,a,o,s,c,l,u),m=p.__e,p.ref&&(f.ref!=p.ref||8&f.__u)&&(f.ref!=p.ref&&f.ref&&se(f.ref,null,p),u.push(p.ref,p.__c||m,p)),h||=m,4&p.__u?(c=M(p,c,e,!f.__v),f.__e&&(f.__e=null)):typeof p.type==`function`&&g!==void 0?c=g:m&&(c=m.nextSibling),p.__u&=-7);return n.__e=h,c}function j(e,t,n,r,i){var a,o,s,c,l,u,d,f,p,m,h=n.length,g=h,_=0,v=!1,y=e.__k=Array(i);for(a=0;a<i;a++)(o=t[a])!=null&&typeof o!=`boolean`&&typeof o!=`function`?(typeof o!=`object`||o.constructor==String?o=y[a]=T(null,o):ee(o)?o=y[a]=T(E,{children:o}):o.constructor===void 0&&o.__b?o=y[a]=T(o.type,o.props,o.key,o.ref,o.__v):y[a]=o,c=a+_,o.__=e,o.__b=e.__b+1,s=null,~(l=o.__i=N(o,n,c,g))&&(g--,(s=n[l])&&(s.__u|=2)),s&&s.__v?(o.__u|=2,l==c-1?_--:l==c+1?_++:l!=c&&(l>c?_--:_++,v=!0)):(~l||(i>h?_--:i<h&&_++),typeof o.type!=`function`&&(o.__u|=4))):y[a]=null;if(v){for(u=[],d=[],a=0;a<i;a++)if((o=y[a])&&2&o.__u){for(f=0,p=u.length;f<p;)u[m=f+p>>1]<o.__i?f=m+1:p=m;u[f]=o.__i,d[a]=f+1}for(_=u.length;a--;)d[a]&&(d[a]==_?_--:y[a].__u|=4)}if(g)for(a=0;a<h;a++)!(s=n[a])||2&s.__u||(s.__e==r&&(r=O(s)),ce(s,s));return r}function M(e,t,n,r){var i,a;if(typeof e.type==`function`){if(e.props.__P)return t;if(i=e.__k)for(a=0;a<i.length;a++)i[a]&&(i[a].__=e,t=M(i[a],t,n,!1));return t}for(t&&!t.parentNode&&(t=O(e))&&!t.parentNode&&(t=null),e.__e!=t&&(!r&&n.moveBefore&&e.__e.parentNode?n.moveBefore(e.__e,t):n.insertBefore(e.__e,t||null)),t=e.__e;(t&&=t.nextSibling)&&t.nodeType==8;);return t}function N(e,t,n,r){var i,a,o,s=e.key,c=e.type,l=t[n],u=l&&!(2&l.__u);if(l===null&&s==null||u&&s==l.key&&c==l.type)return n;if(r>+!!u){for(i=n-1,a=n+1;i>=0||a<t.length;)if((l=t[o=i>=0?i--:a++])&&!(2&l.__u)&&s==l.key&&c==l.type)return o}return-1}function P(e,t,n){n??=``,t[0]==`-`?e.setProperty(t,n):e[t]=n}function F(e,t,n,r,i){var a;n:if(t==`style`){if(typeof n==`string`)e.style.cssText=n;else{if(typeof r==`string`&&(e.style.cssText=r=``),r)for(t in r)n&&t in n||P(e.style,t,``);if(n)for(t in n)r&&n[t]==r[t]||P(e.style,t,n[t])}}else if(t[0]==`o`&&t[1]==`n`)a=t!=(t=t.replace(h,`$1`)),(t=t.slice(2))[0]<`a`&&(t=t.toLowerCase()),(e.__e||={})[t+a]=n,n?r?n[m]=r[m]:(n[m]=g,e.addEventListener(t,a?v:_,a)):e.removeEventListener(t,a?v:_,a);else{if(i==`http://www.w3.org/2000/svg`)t=t.replace(/xlink(H|:h)/,`h`).replace(/sName$/,`s`);else if(t!=`width`&&t!=`height`&&t!=`href`&&t!=`list`&&t!=`form`&&t!=`tabIndex`&&t!=`download`&&t!=`rowSpan`&&t!=`colSpan`&&t!=`role`&&t!=`popover`&&t in e)try{e[t]=n??``;break n}catch{}typeof n==`function`||(n==null||!1===n&&t[4]!=`-`?e.removeAttribute(t):e.setAttribute(t,t==`popover`&&n==1?``:n))}}function I(e){return function(t){if(this.__e){var n=this.__e[t.type+e];if(t[p]==null)t[p]=g++;else if(t[p]<n[m])return;return n(s.event?s.event(t):t)}}}function re(e,t,n,r,i,a,o,c,l,u){var d,f,p,m,h,g,_,v,y,x,S,T,k,A,te,j,M,N,P,F,I=t.type;if(t.constructor!==void 0)return null;if(128&n.__u&&(l=32&n.__u,d=n.__c.__z)){if(t.__u|=l,f=a=[],d.nodeType==8)for(p=1,m=d.nextSibling;m;m=m.nextSibling){if(m.nodeType==8){if(m.data.startsWith(`$s`))p++;else if(m.data.startsWith(`/$s`)&&!--p)break}a.push(m)}else a.push(d);c=a[0]}(d=s.__b)&&d(t);n:if(typeof I==`function`){h=o.length;try{if(x=t.props,S=(d=I.prototype)&&d.render,T=(d=I.contextType)&&r[d.__c],k=d?T?T.props.value:d.__:r,n.__c?2&(g=t.__c=n.__c).__g&&(g.__g|=1):(S?t.__c=g=new I(x,k):(t.__c=g=new D(x,k),g.constructor=I,g.render=le),T&&T.sub(g),g.state||(g.state={}),g.__n=r,g.__g|=8,g.__h=[],g.__k=[]),S&&(g.__s||(g.__s=g.state),I.getDerivedStateFromProps&&(g.__s==g.state&&(g.__s=C({},g.__s)),C(g.__s,I.getDerivedStateFromProps(x,g.__s)))),_=g.props,v=g.state,g.__v=t,n.__c){if(S&&!I.getDerivedStateFromProps&&x!==_&&g.componentWillReceiveProps&&g.componentWillReceiveProps(x,k),t.__v==n.__v&&!(8&g.__g)||!(4&g.__g)&&g.shouldComponentUpdate&&!1===g.shouldComponentUpdate(x,g.__s,k)){t.__v!=n.__v&&(g.props=x,g.state=g.__s,g.__g&=-9),t.__e=n.__e,t.__k=n.__k,t.__k.some(function(e){e&&(e.__=t)}),b.push.apply(g.__h,g.__k),g.__k=[],g.__h.length&&o.push(g),c=O(n);break n}g.componentWillUpdate&&g.componentWillUpdate(x,g.__s,k),S&&g.componentDidUpdate&&g.__h.push(function(){g.componentDidUpdate(_,v,y)})}else S&&!I.getDerivedStateFromProps&&g.componentWillMount&&g.componentWillMount(),S&&g.componentDidMount&&g.__h.push(g.componentDidMount);if(g.context=k,g.props=x,g.__P=e,g.__g&=-5,A=s.__r,te=0,S)g.state=g.__s,g.__g&=-9,A&&A(t),d=g.render(g.props,g.state,g.context),b.push.apply(g.__h,g.__k),g.__k=[];else do g.__g&=-9,A&&A(t),d=g.render(g.props,g.state,g.context),g.state=g.__s;while(8&g.__g&&++te<25);g.state=g.__s,g.getChildContext&&(r=C({},r,g.getChildContext())),S&&n.__c&&g.getSnapshotBeforeUpdate&&(y=g.getSnapshotBeforeUpdate(_,v)),j=d&&d.type===E&&d.key==null?d.props.children:d,x.__P&&(d=c,i=(e=x.__P).namespaceURI,l=a=null,n.props&&n.props.__P!=e&&(n.__k.some(function(e){e&&ce(e,e)}),n.__k=null),c=n.__k?O(n,0):null),c=ne(e,ee(j)?j:[j],t,n,r,i,a,o,c,l,u),x.__P&&(t.__e=null,c=d),t.__u&=-161,128&n.__u&&(g.__z=null),f&&f.some(w),g.__h.length&&o.push(g),1&g.__g&&(g.__g&=-4)}catch(e){if(o.length=h,t.__v=null,l||a){if(e.then){if(M=0,t.__u|=l?160:128,a){for(P=0;P<a.length;P++)if(F=a[P]){if(F.nodeType==8){if(a[P]=null,F.data.startsWith(`$s`))M++||(N=F);else if(F.data.startsWith(`/$s`)&&!--M){c=F;break}}else M&&(a[P]=null)}}if(!N){for(;c&&c.nodeType==8&&c.nextSibling;)c=c.nextSibling;a&&(a[a.indexOf(c)]=null),N=c}t.__c.__z||(t.__c.__z=N),t.__e=c}else a&&a.some(w)}else t.__e=n.__e;t.__k||=n.__k||[],e.then||ie(t),s.__e(e,t,n)}}else c=t.__e=oe(n.__e,t,n,r,i,a,o,l,u,e);return(d=s.diffed)&&d(t),128&t.__u?void 0:c}function ie(e){e&&(e.__c&&(e.__c.__g|=4),e.__k&&e.__k.some(ie))}function ae(e,t,n){for(var r=0;r<n.length;)se(n[r++],n[r++],n[r++]);s.__c&&s.__c(t,e),e.some(function(t){try{e=t.__h,t.__h=[],e.some(function(e){e.call(t)})}catch(e){s.__e(e,t.__v)}})}function oe(e,t,n,r,i,a,o,c,l,u){var d,f,p,m,h,g,_,v,b,C=n.props||y,T=t.props,E=t.type;if(E==`svg`?i=`http://www.w3.org/2000/svg`:E==`math`?i=`http://www.w3.org/1998/Math/MathML`:i||=`http://www.w3.org/1999/xhtml`,a){for(d=0;d<a.length;d++)if((h=a[d])&&(E?h.localName==E:h.nodeType==3)){e=h,a[d]=null;break}}if(!e){if(v=u.ownerDocument||document,!E)return v.createTextNode(T);e=v.createElementNS(i,E,T.is&&T),c&&=(s.__m&&s.__m(t,a),!1),a=null}if(E){if(u=E==`template`?e.content:e,a=E==`textarea`&&T.defaultValue!=null?null:a&&S.call(u.childNodes),!c&&a)for(C={},d=0;d<e.attributes.length;d++)C[(h=e.attributes[d]).name]=h.value;for(d in C)h=C[d],d==`dangerouslySetInnerHTML`?p=h:d==`children`||d in T||d==`value`&&`defaultValue`in T||d==`checked`&&`defaultChecked`in T||F(e,d,null,h,i);for(d in b=1&n.__u,T)h=T[d],d==`children`?m=h:d==`dangerouslySetInnerHTML`?f=h:d==`value`?g=h:d==`checked`?_=h:c&&typeof h!=`function`||!(C[d]!==h||b&&h!=null)||F(e,d,h,C[d],i);f?(c||p&&(f.__html==p.__html||f.__html==e.innerHTML)||(e.innerHTML=f.__html),t.__k=[]):(p&&(e.textContent=``),(E==`foreignObject`||i==`http://www.w3.org/1998/Math/MathML`&&x.test(E))&&(i=`http://www.w3.org/1999/xhtml`),ne(u,ee(m)?m:[m],t,n,r,i,a,o,a?a[0]:n.__k&&O(n,0),c,l),a&&a.some(w)),c&&E!=`textarea`||(d=`value`,E==`progress`&&g==null?e.removeAttribute(d):g==null||g===e[d]&&(E!=`progress`||g)||F(e,d,g,C[d],i),d=`checked`,_!=null&&_!=e[d]&&F(e,d,_,C[d],i))}else C===T||c&&e.data==T||(e.data=T);return e}function se(e,t,n){try{typeof e==`function`?(typeof e.__u==`function`&&e.__u(),(typeof e.__u!=`function`||t)&&(e.__u=e(t))):e.current=t}catch(e){s.__e(e,n)}}function ce(e,t,n){var r,i;if(s.unmount&&s.unmount(e),!(r=e.ref)||r.current&&r.current!=e.__e||se(r,null,t),r=e.__c){if(r.componentWillUnmount)try{r.componentWillUnmount()}catch(e){s.__e(e,t)}r.__P=r.__n=null}if(r=e.__k)for(i=0;i<r.length;i++)r[i]&&ce(r[i],t,typeof e.type!=`function`||n&&!e.props.__P);(r=e.__e)&&(n||w(r),r.__e&&(r.__e=null)),e.__e=e.__c=e.__=null}function le(e,t,n){return this.constructor(e,n)}function ue(e,t){var n,r,i,a;s.__&&s.__(e,t),t.nodeType==9&&(t=t.documentElement),r=(n=e&&32&e.__u)?null:t.__k,t.__k=T(E,{children:[e]}),i=[],a=[],re(t,t.__k,r||y,y,t.namespaceURI,r?null:t.firstChild?S.call(t.childNodes):null,i,r?r.__e:t.firstChild,n,a),ae(i,t.__k,a),t.__k.props.children=null}s={__e:function(e,t,n,r){for(var i,a,o;t=t.__;)if((i=t.__c)&&!(1&i.__g)){i.__g|=4;try{if((a=i.constructor)&&a.getDerivedStateFromError&&(i.setState(a.getDerivedStateFromError(e)),o=8&i.__g),i.componentDidCatch&&(i.componentDidCatch(e,r||{}),o=8&i.__g),o)return void(i.__g|=2)}catch(t){e=t,o=0}}throw d=0,e}},c=0,D.prototype.setState=function(e,t){var n=this.__s;n&&n!=this.state||(n=this.__s=C({},this.state)),typeof e==`function`&&(e=e(C({},n),this.props)),e&&(C(n,e),this.__v&&(t&&this.__k.push(t),A(this)))},D.prototype.forceUpdate=function(e){this.__v&&(this.__g|=4,e&&this.__h.push(e),A(this))},D.prototype.render=E,l=[],d=0,f=function(e,t){return e.__v.__b-t.__v.__b},p=Symbol(),m=Symbol(),h=/(PointerCapture)$|Capture$/i,g=0,_=I(!1),v=I(!0);var L,R,de,fe,pe=Object.is,z=0,me=[],he=[],B=s,ge=B.__b,_e=B.__r,ve=B.diffed,ye=B.__c,be=B.unmount,xe=B.__;function Se(e,t){B.__h&&B.__h(R,e,z||t),z=0;var n=R.__H||(R.__H={__:[],__h:[]});return e>=n.__.length&&n.__.push({}),n.__[e]}function Ce(e){return z=1,we(Me,e)}function we(e,t,n){var r=Se(L++,2);if(r.t=e,!r.__c&&(r.__=[n?n(t):Me(void 0,t),function(e){var t=r.__N?r.__N[0]:r.__[0],n=r.t(t,e);pe(t,n)||(r.__N=[n,r.__[1]],r.__c.setState({}))}],r.__c=R,!R.__f)){R.__f=!0;var i=R.shouldComponentUpdate;R.shouldComponentUpdate=function(e,t,n){var r=this.__H;if(!r)return!0;var a=!1,o=this.props!=e;if(r.__.some(function(e){e.__N&&(a=!0,pe(e.__[0],e.__N[0])||(o=!0))}),i){var s=i.call(this,e,t,n);return a?s||o:s}return!a||o}}return r.__}function V(e,t){var n=Se(L++,3);!B.__s&&je(n.__H,t)&&(n.__P=!0,n.__=e,n.u=t,R.__H.__h.push(n))}function H(e){return z=5,Te(function(){return{current:e}},[])}function Te(e,t){var n=Se(L++,7);return je(n.__H,t)&&(n.__=e(),n.__H=t),n.__}function Ee(){var e;do{for(;e=he.shift();)try{U(e)}catch(t){B.__e(t,{__:(e=e.__P)&&e.__v})}for(;e=me.shift();){var t=e.__H;if(e.__P&&t)try{t.__h.some(U),t.__h.some(Ae),t.__h=[]}catch(n){t.__h=[],B.__e(n,e.__v)}}}while(he.length)}B.__b=function(e){R=null,ge&&ge(e)},B.__=function(e,t){e&&t.__k&&t.__k.__m&&(e.__m=t.__k.__m),xe&&xe(e,t)},B.__r=function(e){_e&&_e(e),L=0;var t=(R=e.__c).__H;t&&(de==R?R.__h=[]:(t.__h.some(U),t.__h.some(Ae),L=0),t.__h=[],t.__.some(function(e){e.__N&&(e.__=e.__N),e.u=e.__N=void 0})),de=R},B.diffed=function(e){ve&&ve(e);var t=e.__c;t&&t.__H&&(t.__H.__h.length&&ke(me.push(t)),t.__H.__.some(function(e){e.u&&(e.__H=e.u)})),de=R=null},B.__c=function(e,t){t.some(function(e){try{e.__h.some(U),e.__h=e.__h.filter(function(e){return!e.__||Ae(e)})}catch(n){t.some(function(e){e.__h&&=[]}),t=[],B.__e(n,e.__v)}}),ye&&ye(e,t)},B.unmount=function(e){be&&be(e);var t,n,r=e.__c;r&&r.__H&&(r.__H.__.some(function(r){try{if(r.__P&&r.__c){if(n===void 0){for(n=e.__;n&&(!n.__c||!n.__c.__P);)n=n.__;n&&=n.__c}r.__P=n,ke(he.push(r))}else U(r)}catch(e){t=e}}),r.__H=void 0,t&&B.__e(t,r.__v))};var De=typeof requestAnimationFrame==`function`;function Oe(e){var t,n=function(){clearTimeout(r),De&&cancelAnimationFrame(t),setTimeout(e)},r=setTimeout(n,35);De&&(t=requestAnimationFrame(n))}function ke(e){e!=1&&fe==B.requestAnimationFrame||((fe=B.requestAnimationFrame)||Oe)(Ee)}function U(e){var t=R,n=e.__c;typeof n==`function`&&(e.__c=void 0,n()),R=t}function Ae(e){var t=R;e.__c=e.__(),R=t}function je(e,t){return!e||e.length!=t.length||t.some(function(t,n){return!pe(t,e[n])})}function Me(e,t){return typeof t==`function`?t(e):t}var Ne=0;Array.isArray;function W(e,t,n,r,i,a){t||={};var o,c,l=t;if(`ref`in l&&typeof e!=`function`)for(c in l={},t)c==`ref`?o=t[c]:l[c]=t[c];var u={type:e,props:l,key:n,ref:o,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:--Ne,__i:-1,__u:0};return(i||a)&&(u.__source=i,u.__self=a),s.vnode&&s.vnode(u),u}function G({name:e,size:t,children:n}){return W(`svg`,{"data-icon":e,"aria-hidden":`true`,focusable:`false`,width:t,height:t,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,children:n})}function Pe({size:e=26}){return W(G,{name:`chat`,size:e,children:[W(`path`,{d:`M4 5.5A2.5 2.5 0 0 1 6.5 3h11A2.5 2.5 0 0 1 20 5.5v8a2.5 2.5 0 0 1-2.5 2.5H10l-4.5 4v-4h0A1.5 1.5 0 0 1 4 14.5z`}),W(`path`,{d:`M8.5 9.5h.01M12 9.5h.01M15.5 9.5h.01`,"stroke-width":`2.5`})]})}function Fe({size:e=26}){return W(G,{name:`chevron-down`,size:e,children:W(`path`,{d:`M6 9l6 6 6-6`})})}function Ie({size:e=18}){return W(G,{name:`close`,size:e,children:W(`path`,{d:`M6 6l12 12M18 6L6 18`})})}var Le=`M7 11v9M7 11l3.5-7.2A1.8 1.8 0 0 1 14 4.6V9h4.6a2 2 0 0 1 2 2.3l-1.2 7A2 2 0 0 1 17.4 20H7M7 11H4.5A1.5 1.5 0 0 0 3 12.5v6A1.5 1.5 0 0 0 4.5 20H7`;function Re({size:e=16}){return W(G,{name:`thumb-up`,size:e,children:W(`path`,{d:Le})})}function ze({size:e=16}){return W(G,{name:`thumb-down`,size:e,children:W(`path`,{d:Le,transform:`matrix(1 0 0 -1 0 24)`})})}function Be({isOpen:e,onClick:t,iconUrl:n,buttonRef:r}){let[i,a]=Ce(`loading`),o=n!==void 0&&i!==`failed`,s=o&&!e&&i===`loaded`;return W(`button`,{type:`button`,class:`whoo-widget-launcher`,onClick:t,"aria-label":e?`Close chat`:`Open chat`,ref:r,children:[e?W(Fe,{}):s?null:W(Pe,{}),o?W(`img`,{class:`whoo-widget-launcher-icon-image`,src:n,alt:``,referrerpolicy:`no-referrer`,hidden:!s,onLoad:()=>a(`loaded`),onError:()=>a(`failed`)}):null]})}function Ve({value:e,onChange:t,onSend:n,disabled:r,inputRef:i}){return W(`div`,{class:`whoo-widget-composer`,children:[W(`label`,{class:`whoo-widget-sr-only`,for:`whoo-widget-composer-input`,children:`Message`}),W(`input`,{id:`whoo-widget-composer-input`,class:`whoo-widget-composer-input`,value:e,readOnly:r,"aria-disabled":r,ref:i,onInput:e=>t(e.target.value),onKeyDown:e=>{e.key===`Enter`&&n()}}),W(`button`,{type:`button`,class:`whoo-widget-composer-send`,"aria-disabled":r,onClick:()=>{r||n()},children:`Send`})]})}function He({message:e}){return W(`div`,{class:`whoo-widget-error-banner`,role:`alert`,children:e})}var K=/\[([^\]]+)\]\((https?:\/\/[^\s)]+)\)/y,q=/\*\*([^*\s](?:[^*]*[^*\s])?)\*\*/y,J=/(?<![A-Za-z0-9_])_([^_\s](?:[^_]*[^_\s])?)_(?![A-Za-z0-9_])/y,Y=/\*([^*\s](?:[^*]*[^*\s])?)\*/y,X=/[ \t]*[*+-][ \t]+/y,Ue=/https?:\/\/\S+/y,We=/[.,;:!?)\]}>]+$/;function Ge(e){let t=[],n=0,r=0,i=n=>{n>r&&t.push({type:`text`,value:e.slice(r,n),start:r,end:n})};for(;n<e.length;){if((n===0||e[n-1]===`
|
|
2
|
+
`)&&(X.lastIndex=n,X.exec(e))){i(n),t.push({type:`text`,value:`• `,start:n,end:X.lastIndex}),n=X.lastIndex,r=n;continue}if(e[n]===`!`&&n+1<e.length&&e[n+1]===`[`){let t=/!\[([^\]]*)\]\(([^)]*)\)/y;t.lastIndex=n;let r=t.exec(e);if(r){n+=r[0].length;continue}}if(e[n-1]!==`!`){K.lastIndex=n;let a=K.exec(e);if(a){i(n),t.push({type:`link`,text:a[1],url:a[2],start:n,end:K.lastIndex}),n=K.lastIndex,r=n;continue}}q.lastIndex=n;let a=q.exec(e);if(a){i(n),t.push({type:`bold`,value:a[1],start:n,end:q.lastIndex}),n=q.lastIndex,r=n;continue}J.lastIndex=n;let o=J.exec(e);if(o){i(n),t.push({type:`italic`,value:o[1],start:n,end:J.lastIndex}),n=J.lastIndex,r=n;continue}Y.lastIndex=n;let s=Y.exec(e);if(s){i(n),t.push({type:`italic`,value:s[1],start:n,end:Y.lastIndex}),n=Y.lastIndex,r=n;continue}Ue.lastIndex=n;let c=Ue.exec(e);if(c){let e=c[0].match(We),a=e?c[0].slice(0,c[0].length-e[0].length):c[0];if(a.length>0){i(n),t.push({type:`link`,text:a,url:a,start:n,end:n+a.length}),n+=a.length,r=n;continue}}n+=1}return i(e.length),t}var Ke=/^[ \t]*[*+-][ \t]+(.*)$/;function qe(e){let t=[],n=[],r=[],i=()=>{n.length>0&&t.push({type:`text`,text:n.join(`
|
|
3
3
|
`)}),n=[]},a=()=>{r.length>0&&t.push({type:`list`,items:r}),r=[]};for(let t of e.split(`
|
|
4
|
-
`)){let e=t.match(
|
|
5
|
-
`),n=
|
|
4
|
+
`)){let e=t.match(Ke);e?(i(),r.push(e[1])):(a(),n.push(t))}return i(),a(),t.some(e=>e.type===`list`)?t.flatMap((e,n)=>{if(e.type===`list`)return[e];let{text:r}=e;return t[n-1]?.type===`list`&&(r=r.replace(/^(?:[ \t]*\n)+/,``)),t[n+1]?.type===`list`&&(r=r.replace(/(?:\n[ \t]*)+$/,``)),r.trim()===``?[]:[{type:`text`,text:r}]}):null}function Z(e){return Ge(e).map((e,t)=>{switch(e.type){case`bold`:return W(`strong`,{children:Z(e.value)},t);case`italic`:return W(`em`,{children:Z(e.value)},t);case`link`:return W(`a`,{href:e.url,target:`_blank`,rel:`noopener noreferrer`,children:[e.text,W(`span`,{class:`whoo-widget-sr-only`,children:` (opens in new tab)`})]},t);default:return e.value}})}function Je(e){let t=e.replace(/\r\n?/g,`
|
|
5
|
+
`),n=qe(t);return n?n.map((e,t)=>e.type===`list`?W(`ul`,{class:`whoo-widget-list`,children:e.items.map((e,t)=>W(`li`,{children:Z(e)},t))},t):W(`span`,{children:Z(e.text)},t)):Z(t)}var Ye=[{value:``,label:`Select a reason (optional)`},{value:`factual`,label:`Factual error`},{value:`incomplete`,label:`Incomplete`},{value:`tone`,label:`Off tone`},{value:`other`,label:`Other`}];function Xe({state:e,containerRef:t,onThumbsUp:n,onThumbsDown:r,onDraftChange:i,onSubmitDetailed:a,onCancel:o}){let s=e.correction??``,c=e.category??``,l=H(e.status);if(V(()=>{let n=l.current;if(l.current=e.status,n===e.status)return;let r=t?.current;if(!r)return;let i=r.getRootNode();r.contains(i.activeElement)||r.focus()},[e.status,t]),e.status===`expanded`)return W(`div`,{class:`whoo-widget-feedback-form`,children:[W(`label`,{children:[W(`span`,{class:`whoo-widget-sr-only`,children:`Additional feedback`}),W(`textarea`,{class:`whoo-widget-feedback-textarea`,value:s,onInput:e=>i(e.target.value,c),placeholder:`What was wrong? (optional)`})]}),W(`select`,{class:`whoo-widget-feedback-select`,"aria-label":`Feedback category`,value:c,onChange:e=>i(s,e.target.value),children:Ye.map(e=>W(`option`,{value:e.value,children:e.label},e.value))}),W(`div`,{class:`whoo-widget-feedback-form-buttons`,children:[W(`button`,{type:`button`,class:`whoo-widget-feedback-submit`,onClick:()=>a(s,c),children:`Submit`}),W(`button`,{type:`button`,class:`whoo-widget-feedback-cancel`,onClick:o,children:`Cancel`})]})]});let u=e.status===`submitting`,d=e.status===`submitted`;return W(`div`,{class:`whoo-widget-feedback`,children:[d?null:W(`div`,{class:`whoo-widget-feedback-buttons`,children:[W(`button`,{type:`button`,"aria-label":`Good response`,disabled:u,onClick:n,children:W(Re,{})}),W(`button`,{type:`button`,"aria-label":`Bad response`,disabled:u,onClick:r,children:W(ze,{})})]}),W(`div`,{role:`status`,class:d?`whoo-widget-feedback-submitted`:e.status===`error`?`whoo-widget-feedback-error`:void 0,children:d?`Thanks for the feedback`:e.status===`error`?`Couldn't send feedback`:null})]})}function Ze({isSlowResponse:e}){return W(`div`,{class:`whoo-widget-pending`,role:`status`,children:[W(`span`,{class:`whoo-widget-typing`,"aria-hidden":`true`,children:[W(`span`,{}),W(`span`,{}),W(`span`,{})]}),e?W(`span`,{class:`whoo-widget-pending-text`,children:`Looking that up for you…`}):null]})}function Qe({url:e,alt:t}){let[n,r]=Ce(!1);return n?null:W(`img`,{class:`whoo-widget-empty-state-image`,src:e,alt:t,referrerpolicy:`no-referrer`,onError:()=>r(!0)})}function $e({message:e,speaker:t,feedbackState:n,showFeedback:r,pending:i,isSlowResponse:a,onThumbsUp:o,onThumbsDown:s,onDraftChange:c,onSubmitDetailed:l,onCancelFeedback:u}){let d=H(null),f=e.id;return W(`div`,{ref:d,tabIndex:-1,class:`whoo-widget-message whoo-widget-message--${e.role}`,children:[W(`span`,{class:`whoo-widget-sr-only`,children:[t,`: `]}),i?W(Ze,{isSlowResponse:a}):Je(e.content),r&&e.role===`assistant`&&f?W(Xe,{state:n,containerRef:d,onThumbsUp:()=>o(f),onThumbsDown:()=>s(f),onDraftChange:(e,t)=>c(f,e,t),onSubmitDetailed:(e,t)=>l(f,e,t),onCancel:()=>u(f)}):null]})}function et({messages:e,messageFeedback:t,announcement:n,emptyStateImage:r,agentName:a=i,showFeedback:o=!1,isStreaming:s=!1,isSlowResponse:c=!1,onThumbsUp:l,onThumbsDown:u,onDraftChange:d=()=>{},onSubmitDetailed:f,onCancelFeedback:p}){let m=H(null);return V(()=>{let e=m.current;e&&(e.scrollTop=e.scrollHeight)},[e,c]),W(E,{children:[W(`section`,{class:`whoo-widget-message-list`,ref:m,"aria-label":`Conversation`,tabIndex:0,children:[r?W(Qe,{...r}):null,e.map((n,r)=>W($e,{message:n,speaker:n.role===`user`?`You`:a,showFeedback:o,feedbackState:n.id?t[n.id]??{status:`idle`}:{status:`idle`},pending:s&&r===e.length-1&&n.role===`assistant`&&n.content===``,isSlowResponse:c,onThumbsUp:l,onThumbsDown:u,onDraftChange:d,onSubmitDetailed:f,onCancelFeedback:p},n.id??r))]}),W(`div`,{class:`whoo-widget-sr-only`,"aria-live":`polite`,"aria-atomic":`true`,children:n??``})]})}var tt=`button:not(:disabled), [href], input:not(:disabled), select:not(:disabled), textarea:not(:disabled), [tabindex]:not([tabindex="-1"])`;function nt(e){return Array.from(e.querySelectorAll(tt)).filter(e=>{let t=getComputedStyle(e);return t.display!==`none`&&t.visibility!==`hidden`})}function rt({state:e,controller:t,greeting:n}){let r=H(null),i=H(null);V(()=>{i.current?.focus()},[]);let o=e=>{if(e.key===`Escape`){t.close();return}if(e.key!==`Tab`)return;let n=r.current;if(!n)return;let i=nt(n);if(i.length===0)return;let a=i[0],o=i[i.length-1],s=n.getRootNode().activeElement;if(!n.contains(s)){e.preventDefault(),a.focus();return}e.shiftKey&&s===a?(e.preventDefault(),o.focus()):!e.shiftKey&&s===o&&(e.preventDefault(),a.focus())},s=()=>{let n=e.draft.trim();n&&!e.isStreaming&&(t.setDraft(``),t.sendMessage(n))},c=a(t.config.name)||e.agentName||`Aiden`,l=`Chat with ${c}`,u=e.messages.length===0&&n?[{role:`assistant`,content:n,id:null}]:e.messages,d=t.emptyStateImageUrl,f=e.messages.length===0&&d?{url:d,alt:t.emptyStateImageAlt}:void 0;return W(`div`,{class:`whoo-widget-panel`,role:`dialog`,"aria-modal":`true`,"aria-label":l,ref:r,onKeyDown:o,children:[W(`div`,{class:`whoo-widget-header`,children:[W(`h2`,{class:`whoo-widget-header-title`,children:l}),W(`div`,{class:`whoo-widget-header-actions`,children:[e.messages.length>0&&W(`button`,{type:`button`,class:`whoo-widget-header-reset`,onClick:()=>{t.resetConversation(),i.current?.focus()},children:`New conversation`}),W(`button`,{type:`button`,class:`whoo-widget-header-close`,"aria-label":`Close chat`,onClick:()=>t.close(),children:W(Ie,{})})]})]}),W(et,{messages:u,messageFeedback:e.messageFeedback,announcement:e.announcement,emptyStateImage:f,agentName:c,showFeedback:t.showFeedback,isStreaming:e.isStreaming,isSlowResponse:e.isSlowResponse,onThumbsUp:e=>t.submitFeedback(e,`up`),onThumbsDown:e=>t.expandFeedback(e),onDraftChange:(e,n,r)=>t.setFeedbackDraft(e,n,r),onSubmitDetailed:(e,n,r)=>t.submitFeedback(e,`down`,n||void 0,r||void 0),onCancelFeedback:e=>t.cancelFeedback(e)}),e.runtimeError&&W(He,{message:e.runtimeError}),W(Ve,{value:e.draft,onChange:e=>t.setDraft(e),onSend:s,disabled:e.isStreaming,inputRef:i})]})}function it({controller:e}){let[t,n]=Ce(e.getState()),r=H(null),i=H(t.isOpen);return V(()=>(n(e.getState()),e.subscribe(n)),[e]),V(()=>{i.current&&!t.isOpen&&r.current?.focus(),i.current=t.isOpen},[t.isOpen]),t.initError||t.isInitializing?null:W(E,{children:[W(Be,{isOpen:t.isOpen,onClick:()=>t.isOpen?e.close():e.open(),iconUrl:e.launcherIconUrl,buttonRef:r}),t.isOpen&&W(rt,{state:t,controller:e,greeting:e.config.greeting})]})}var at=class extends Error{status;constructor(e,t){super(e),this.name=`WidgetApiError`,this.status=t}};function ot(e){if(typeof e!=`string`)return null;let t=e.trim();return t===``?null:t}async function st(e,t){let n=await fetch(`${e}/api/v1/widget/session`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({publishable_key:t})});if(!n.ok)throw new at(`Failed to create widget session (${n.status})`,n.status);let r=await n.json();return{token:r.token,...ct(r)}}function ct(e){return{primaryColor:ot(e.primary_color),name:ot(e.name),accentColor:ot(e.accent_color),inkColor:ot(e.ink_color)}}async function lt(e,t){let n=await fetch(`${e}/api/v1/widget/branding`,{headers:{Authorization:`Bearer ${t}`}});if(!n.ok)throw new at(`Failed to load widget branding (${n.status})`,n.status);return ct(await n.json())}async function ut(e,t,n){let r=await fetch(`${e}/api/v1/widget/feedback`,{method:`POST`,headers:{"Content-Type":`application/json`,Authorization:`Bearer ${t}`},body:JSON.stringify({message_id:n.messageId,rating:n.rating,correction:n.correction??null,category:n.category??null})});if(!r.ok)throw new at(`Feedback submission failed (${r.status})`,r.status)}async function*dt(e,t,n,r,i){let a=await fetch(`${e}/api/v1/widget/chat`,{method:`POST`,headers:{"Content-Type":`application/json`,Authorization:`Bearer ${t}`},body:JSON.stringify({conversation_id:n,message:r}),signal:i});if(!a.ok||!a.body)throw new at(`Chat request failed (${a.status})`,a.status);let o=a.body.getReader(),s=new TextDecoder,c=``;for(;;){let{done:e,value:t}=await o.read();if(e)break;c+=s.decode(t,{stream:!0});let n=c.indexOf(`
|
|
6
6
|
|
|
7
7
|
`);for(;n!==-1;){let e=c.slice(0,n);c=c.slice(n+2);let t=e.split(`
|
|
8
|
-
`).find(e=>e.startsWith(`data: `));t&&(yield
|
|
8
|
+
`).find(e=>e.startsWith(`data: `));t&&(yield ft(JSON.parse(t.slice(6)))),n=c.indexOf(`
|
|
9
9
|
|
|
10
|
-
`)}}}function
|
|
11
|
-
`)).map(e=>{switch(e.type){case`bold`:case`italic`:return ht(e.value);case`link`:return e.text;default:return e.value}}).join(``)}var gt=40,_t=120;function vt(e){let t=[];for(let n of J(e))if(n.type===`text`){let e=n.value.split(/(\s+)/),r=n.start;for(let n of e)r+=n.length,n.trim().length>0&&t.push(r)}else t.push(n.end);return t}function yt(e){let t=null;return e?.addEventListener(`abort`,()=>{t?.()},{once:!0}),function(e){return new Promise(n=>{let r=setTimeout(()=>{t=null,n()},e);t=()=>{clearTimeout(r),t=null,n()}})}}async function bt(e,t,n){let r=n?.wordIntervalMs??gt,i=n?.tokenIntervalMs??_t,a=n?.signal,o=J(e),s=new Set(o.filter(e=>e.type!==`text`).map(e=>e.end)),c=yt(a),l=``;for(let n of vt(e))if(a?.aborted||(l=e.slice(0,n),t(l),await c(s.has(n)?i:r),a?.aborted))return;l!==e&&t(e)}function xt(e){return`whoo-aiden-widget:conversation:${e}`}function St(e){try{return window.sessionStorage.getItem(xt(e))}catch{return null}}function Ct(e,t){try{window.sessionStorage.setItem(xt(e),t)}catch{}}function wt(e){try{window.sessionStorage.removeItem(xt(e))}catch{}}var Tt=/^(inherit|initial|unset|revert|revert-layer)$|\bcurrentcolor\b|\b(var|env|attr|light-dark)\(/i;function Et(e){if(Tt.test(e.trim()))return null;let t=document.createElement(`div`);if(t.style.color=e,t.style.color===``)return null;let n=document.createElement(`div`);n.attachShadow({mode:`open`}).appendChild(t),document.body.appendChild(n);let r=getComputedStyle(t).color;n.remove();let i=r.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*([\d.]+))?/);if(!i)return null;let a=i[4]===void 0?1:Number(i[4]);return{rgb:[Number(i[1]),Number(i[2]),Number(i[3])].map(e=>Math.round(e*a+255*(1-a))),translucent:a<1}}function Dt(e){return Et(e)?.rgb??null}function Q([e,t,n]){let r=e=>{let t=e/255;return t<=.03928?t/12.92:((t+.055)/1.055)**2.4};return .2126*r(e)+.7152*r(t)+.0722*r(n)}function Ot(e,t){let n=Math.max(e,t),r=Math.min(e,t);return(n+.05)/(r+.05)}function kt(e){let t=Dt(e);if(!t)return console.warn(`[whoo-aiden-widget] Could not parse color "${e}" for contrast calculation; defaulting to white text.`),`#ffffff`;let n=Q(t);return Ot(n,Q([0,0,0]))>=Ot(n,Q([255,255,255]))?`#000000`:`#ffffff`}var At=`#4f46e5`,jt=`#ffffff`,Mt=`#f0f0f0`,Nt=`#f3f4f6`,Pt=4.5;function Ft([e,t,n]){return`#${[e,t,n].map(e=>e.toString(16).padStart(2,`0`)).join(``)}`}function It(e,t=jt){let n=Dt(e),r=Dt(t);if(!n||!r)return At;let i=Q(r),a=e=>Ot(Q(e),i)>=Pt;if(a(n))return Ft(n);for(let e=.99;e>0;e-=.01){let t=n.map(t=>Math.round(t*e));if(a(t))return Ft(t)}return`#000000`}var Lt=`#111111`,Rt=`#0000ee`;function $(e){if(typeof e!=`string`||!e)return null;let t=Et(e);return t?Ft(t.rgb):null}function zt({color:e,inkColor:t,accentColor:n}){let r=$(e),i=r??At,a=It(i,Nt),o=$(t),s=o?It(o,Mt):Lt,c=$(n),l=c?It(c,Mt):Rt;return{primary:i,textOnPrimary:kt(i),primaryAsText:a,ink:s,link:l,adjusted:{primary:r!==null&&a!==i,ink:o!==null&&s!==o,link:c!==null&&l!==c}}}function Bt(e){return typeof e==`string`?`"${e}"`:`a ${typeof e} value`}function Vt(e,t,n=At){let r=t;$(t)===null&&(console.warn(`[whoo-aiden-widget] Could not use ${Bt(t)} as the theme color; falling back to ${Bt(n)}.`),r=n);let i=zt({color:r});e.style.setProperty(`--whoo-widget-color`,i.primary),e.style.setProperty(`--whoo-widget-text-on-color`,i.textOnPrimary),e.style.setProperty(`--whoo-widget-color-text`,i.primaryAsText)}function Ht(e,{inkColor:t,accentColor:n}){let r=zt({inkColor:t,accentColor:n});e.style.setProperty(`--whoo-widget-ink`,r.ink),e.style.setProperty(`--whoo-widget-link-color`,r.link)}function Ut(e,t){e&&$(e)===null&&console.warn(`[whoo-aiden-widget] Could not use ${Bt(e)} as the ${t}; using the default.`)}function Wt(e,t){Vt(e,t.color??At),Ut(t.inkColor,`ink color`),Ut(t.accentColor,`accent color`),Ht(e,{inkColor:t.inkColor,accentColor:t.accentColor});let n=t.position===`bottom-left`;e.style.setProperty(`--whoo-widget-inset-left`,n?`20px`:`auto`),e.style.setProperty(`--whoo-widget-inset-right`,n?`auto`:`20px`)}var Gt=8e3,Kt=class{config;state;listeners=new Set;sessionToken=null;conversationId=null;storageIdentifier;activeRequestController=null;slowResponseTimer=null;prefersReducedMotion;launcherIconUrl;emptyStateImageUrl;emptyStateImageAlt;showFeedback;constructor(e){this.config=e,this.launcherIconUrl=mt(e.launcherIconUrl,`launcherIconUrl`),this.emptyStateImageUrl=mt(e.emptyStateImageUrl,`emptyStateImageUrl`),this.emptyStateImageAlt=typeof e.emptyStateImageAlt==`string`?e.emptyStateImageAlt.trim():``,this.showFeedback=e.showFeedback===!0,this.storageIdentifier=e.publishableKey??`session-token-mode`,this.prefersReducedMotion=typeof window.matchMedia==`function`&&window.matchMedia(`(prefers-reduced-motion: reduce)`).matches,this.state={isOpen:!1,messages:[],isStreaming:!1,initError:null,runtimeError:null,messageFeedback:{},primaryColor:null,agentName:null,accentColor:null,inkColor:null,announcement:null,isSlowResponse:!1,draft:``}}getState(){return this.state}subscribe(e){return this.listeners.add(e),()=>this.listeners.delete(e)}clearSlowResponse(){this.slowResponseTimer!==null&&(clearTimeout(this.slowResponseTimer),this.slowResponseTimer=null),this.state.isSlowResponse&&this.setState({isSlowResponse:!1})}setState(e){this.state={...this.state,...e};for(let e of this.listeners)e(this.state)}async init(){let e=this.config.apiBaseUrl??`https://api.aidenvoice.com`;try{if(this.config.sessionToken)this.sessionToken=this.config.sessionToken;else if(this.config.publishableKey){let{token:t,primaryColor:n,name:r,accentColor:i,inkColor:a}=await ct(e,this.config.publishableKey);this.sessionToken=t,this.setState({primaryColor:n,agentName:r,accentColor:i,inkColor:a})}else throw Error(`WidgetConfig must include exactly one of publishableKey or sessionToken`)}catch(e){console.error(`[whoo-aiden-widget] initialization failed:`,e),this.setState({initError:e instanceof Error?e.message:String(e)});return}this.conversationId=St(this.storageIdentifier),this.config.sessionToken&&await this.loadBranding(e,this.config.sessionToken)}async loadBranding(e,t){try{let n=this.config;if($(n.color)&&$(n.inkColor)&&$(n.accentColor)&&a(n.name))return;let{primaryColor:r,name:i,accentColor:o,inkColor:s}=await ut(e,t);this.setState({primaryColor:r,agentName:i,accentColor:o,inkColor:s})}catch{}}open(){this.setState({isOpen:!0})}resetConversation(){this.activeRequestController?.abort(),this.activeRequestController=null,this.clearSlowResponse(),this.conversationId=null,wt(this.storageIdentifier),this.setState({messages:[],messageFeedback:{},runtimeError:null,isStreaming:!1,announcement:`Conversation cleared`})}setDraft(e){this.setState({draft:e})}close(){this.activeRequestController?.abort(),this.activeRequestController=null,this.clearSlowResponse(),this.setState({isOpen:!1})}async sendMessage(e){if(!this.sessionToken)return;let t=this.config.apiBaseUrl??`https://api.aidenvoice.com`,n={role:`user`,content:e,id:null},r={role:`assistant`,content:``,id:null};this.setState({messages:[...this.state.messages,n,r],isStreaming:!0,runtimeError:null,announcement:null});let i=e=>{let t=[...this.state.messages];t[t.length-1]={...t[t.length-1],content:e},this.setState({messages:t})};this.activeRequestController=new AbortController;let{signal:a}=this.activeRequestController;this.slowResponseTimer=setTimeout(()=>{this.slowResponseTimer=null,this.setState({isSlowResponse:!0})},Gt);let o=()=>{this.setState({runtimeError:`Something went wrong, please try again.`,...this.state.draft===``?{draft:e}:{}})},s=``;try{for await(let n of ft(t,this.sessionToken,this.conversationId,e,a))if(n.type===`conversation_id`)this.conversationId=n.conversationId,Ct(this.storageIdentifier,n.conversationId);else if(n.type===`delta`)this.clearSlowResponse(),n.verbatim&&!this.prefersReducedMotion?(await bt(n.delta,e=>i(e),{signal:a}),s=n.delta):n.verbatim?(s=n.delta,i(s)):(s+=n.delta,i(s));else if(n.type===`done`){if(n.conversationId&&(this.conversationId=n.conversationId,Ct(this.storageIdentifier,n.conversationId)),n.messageId){let e=[...this.state.messages];e[e.length-1]={...e[e.length-1],id:n.messageId},this.setState({messages:e})}this.setState({announcement:ht(s)})}else if(n.type===`error`){console.error(`[whoo-aiden-widget] chat error:`,n.error),o(),this.activeRequestController?.abort();break}}catch(e){e?.name===`AbortError`||(console.error(`[whoo-aiden-widget] chat request failed:`,e),o())}finally{this.activeRequestController=null,this.clearSlowResponse(),this.setState({isStreaming:!1})}}expandFeedback(e){let{correction:t,category:n}=this.state.messageFeedback[e]??{};this.setState({messageFeedback:{...this.state.messageFeedback,[e]:{status:`expanded`,correction:t,category:n}}})}setFeedbackDraft(e,t,n){this.setState({messageFeedback:{...this.state.messageFeedback,[e]:{...this.state.messageFeedback[e],correction:t,category:n}}})}cancelFeedback(e){this.setState({messageFeedback:{...this.state.messageFeedback,[e]:{status:`idle`}}})}async submitFeedback(e,t,n,r){if(!this.sessionToken)return;let i=this.config.apiBaseUrl??`https://api.aidenvoice.com`;this.setState({messageFeedback:{...this.state.messageFeedback,[e]:{status:`submitting`,rating:t}}});try{await dt(i,this.sessionToken,{messageId:e,rating:t,correction:n,category:r}),this.setState({messageFeedback:{...this.state.messageFeedback,[e]:{status:`submitted`,rating:t}}})}catch(i){console.error(`[whoo-aiden-widget] feedback submission failed:`,i),this.setState({messageFeedback:{...this.state.messageFeedback,[e]:{status:`error`,rating:t,correction:n,category:r}}})}}},qt=`:host,.whoo-widget-root{all:initial;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}.whoo-widget-launcher{bottom:20px;left:var(--whoo-widget-inset-left,auto);right:var(--whoo-widget-inset-right,20px);background:var(--whoo-widget-color,#4f46e5);width:56px;height:56px;color:var(--whoo-widget-text-on-color,#fff);cursor:pointer;border:none;border-radius:50%;justify-content:center;align-items:center;padding:0;font-size:24px;display:flex;position:fixed;box-shadow:0 2px 8px #0003}.whoo-widget-launcher:focus-visible{box-shadow:0 2px 8px #0003,0 0 0 4px #fff}.whoo-widget-launcher svg{display:block}.whoo-widget-launcher-icon-image{object-fit:cover;border-radius:50%;width:32px;height:32px}.whoo-widget-launcher-icon-image[hidden]{display:none}.whoo-widget-panel{bottom:88px;left:var(--whoo-widget-inset-left,auto);right:var(--whoo-widget-inset-right,20px);background:#fff;border-radius:12px;flex-direction:column;width:360px;max-width:calc(100vw - 40px);height:480px;max-height:calc(100vh - 108px);display:flex;position:fixed;overflow:hidden;box-shadow:0 4px 16px #0003}@media (width<=400px),(height<=420px){.whoo-widget-panel{width:auto;max-width:none;height:auto;max-height:none;inset:8px}}.whoo-widget-header{border-bottom:1px solid #e5e5e5;flex-wrap:wrap;flex-shrink:0;justify-content:space-between;align-items:center;gap:8px;max-height:50%;padding:8px 8px 8px 16px;display:flex;overflow-y:auto}.whoo-widget-header-title{color:var(--whoo-widget-ink,#111);overflow-wrap:anywhere;flex:auto;min-width:0;margin:0;font-size:15px;font-weight:600}.whoo-widget-header-actions{background:#fff;flex-shrink:0;align-items:center;gap:4px;margin-left:auto;display:flex;position:sticky;bottom:0}.whoo-widget-header-close,.whoo-widget-header-reset{color:var(--whoo-widget-color-text,#4f46e5);cursor:pointer;background:0 0;border:none;border-radius:6px;justify-content:center;align-items:center;min-width:24px;min-height:24px;padding:4px 8px;font-size:13px;display:inline-flex}.whoo-widget-header-close{width:32px;height:32px;padding:0}.whoo-widget-header-close:hover,.whoo-widget-header-reset:hover{background:#f3f4f6}.whoo-widget-message-list{flex:1;min-height:0;padding:12px;overflow-y:auto}.whoo-widget-message-list:focus-visible{outline-offset:-2px;outline:2px solid #111827;box-shadow:inset 0 0 0 4px #fff}.whoo-widget-empty-state-image{object-fit:contain;max-width:min(160px,100%);height:auto;max-height:160px;margin:8px auto 16px;display:block}@media (width<=400px),(height<=420px){.whoo-widget-empty-state-image{max-height:64px;margin:0 auto 8px}}.whoo-widget-message{overflow-wrap:anywhere;white-space:pre-line;border-radius:8px;max-width:80%;margin-bottom:8px;padding:8px 12px}.whoo-widget-list{margin:4px 0;padding-left:20px}.whoo-widget-message--user{background:var(--whoo-widget-color,#4f46e5);color:var(--whoo-widget-text-on-color,#fff);margin-left:auto}.whoo-widget-message--user a{color:inherit}.whoo-widget-message--assistant{color:var(--whoo-widget-ink,#111);background:#f0f0f0}.whoo-widget-message--assistant a{color:var(--whoo-widget-link-color,#00e)}.whoo-widget-pending{flex-wrap:wrap;align-items:center;gap:8px;min-height:1.2em;display:flex}.whoo-widget-typing{align-items:center;gap:4px;display:inline-flex}.whoo-widget-typing span{background:#6b7280;border-radius:50%;width:6px;height:6px;animation:1.2s ease-in-out infinite whoo-widget-typing-bounce}.whoo-widget-typing span:nth-child(2){animation-delay:.2s}.whoo-widget-typing span:nth-child(3){animation-delay:.4s}@keyframes whoo-widget-typing-bounce{0%,80%,to{transform:translateY(0)}40%{transform:translateY(-4px)}}@media (prefers-reduced-motion:reduce){.whoo-widget-typing span{animation:none}}.whoo-widget-error-banner{color:#991b1b;background:#fee2e2;padding:8px 12px;font-size:13px}.whoo-widget-composer{border-top:1px solid #e5e5e5;gap:8px;padding:12px;display:flex}.whoo-widget-composer-input{border:1px solid #6b7280;border-radius:6px;flex:1;padding:8px}.whoo-widget-composer-send{background:var(--whoo-widget-color,#4f46e5);color:var(--whoo-widget-text-on-color,#fff);cursor:pointer;border:none;border-radius:6px;padding:8px 16px}.whoo-widget-composer-send[aria-disabled=true],.whoo-widget-composer-input[aria-disabled=true]{opacity:.6;cursor:not-allowed}.whoo-widget-feedback{align-items:center;gap:6px;margin-top:4px;display:flex}.whoo-widget-feedback-buttons{gap:6px;display:flex}.whoo-widget-feedback-buttons button{cursor:pointer;color:#4b5563;background:0 0;border:none;border-radius:4px;justify-content:center;align-items:center;min-width:24px;min-height:24px;padding:4px;display:inline-flex}.whoo-widget-feedback-buttons button:hover:not(:disabled){color:#111;background:#0000000f}.whoo-widget-feedback-buttons button:disabled{opacity:.3;cursor:not-allowed}.whoo-widget-feedback-form{flex-direction:column;gap:6px;margin-top:6px;display:flex}.whoo-widget-feedback-textarea{box-sizing:border-box;resize:vertical;border:1px solid #6b7280;border-radius:6px;width:100%;padding:6px;font-size:12px}.whoo-widget-feedback-select{border:1px solid #6b7280;border-radius:6px;min-height:24px;padding:4px;font-size:12px}.whoo-widget-feedback-form-buttons{gap:6px;display:flex}.whoo-widget-feedback-submit{background:var(--whoo-widget-color,#4f46e5);color:var(--whoo-widget-text-on-color,#fff);cursor:pointer;border:none;border-radius:6px;padding:8px 16px;font-size:13px}.whoo-widget-feedback-cancel{color:#111;cursor:pointer;background:#fff;border:1px solid #6b7280;border-radius:6px;padding:8px 16px;font-size:13px}.whoo-widget-feedback-submitted{color:#4b5563;margin-top:4px;font-size:12px}.whoo-widget-feedback-error{color:#991b1b;font-size:12px}.whoo-widget-sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}button:focus-visible,input:focus-visible,textarea:focus-visible,select:focus-visible,a:focus-visible{outline-offset:2px;outline:2px solid #111827;box-shadow:0 0 0 4px #fff}@media (forced-colors:active){.whoo-widget-launcher,.whoo-widget-header-close,.whoo-widget-header-reset,.whoo-widget-composer-send,.whoo-widget-feedback-submit,.whoo-widget-feedback-buttons button{border:1px solid buttontext}.whoo-widget-panel{box-sizing:border-box;border:1px solid canvastext}}`;function Jt(e){let t=document.createElement(`div`);t.id=`whoo-aiden-widget-host`,t.style.position=`relative`,t.style.zIndex=String(r(e.zIndex));let n=t.attachShadow({mode:`open`}),i=document.createElement(`style`);i.textContent=qt,n.appendChild(i);let a=document.createElement(`div`);n.appendChild(a),Wt(a,e);let o=new Kt(e),s=$(e.color)!==null,c=null,l=``;return o.subscribe(t=>{!s&&t.primaryColor&&t.primaryColor!==c&&(c=t.primaryColor,Vt(a,t.primaryColor,e.color));let n=`${t.inkColor}|${t.accentColor}`;(t.inkColor||t.accentColor)&&n!==l&&(l=n,Ht(a,{inkColor:$(e.inkColor)?e.inkColor:t.inkColor,accentColor:$(e.accentColor)?e.accentColor:t.accentColor}))}),_e(V(st,{controller:o}),a),o.init(),document.body.appendChild(t),{unmount(){_e(null,a),t.remove()}}}function Yt(e){return o(e),Jt(e)}return e.init=Yt,e})({});
|
|
10
|
+
`)}}}function ft(e){return typeof e.error==`string`?{type:`error`,error:e.error,conversationId:e.conversation_id}:e.done===!0?{type:`done`,conversationId:e.conversation_id,messageId:e.message_id??null}:typeof e.delta==`string`?e.verbatim===!0?{type:`delta`,delta:e.delta,verbatim:!0}:{type:`delta`,delta:e.delta}:{type:`conversation_id`,conversationId:e.conversation_id}}function pt(e,t){if(e!=null&&e!==``){if(typeof e==`string`)try{let t=new URL(e);if(t.protocol===`https:`||t.protocol===`data:`&&t.pathname.toLowerCase().startsWith(`image/`))return e}catch{}console.warn(`whoo-aiden-widget: ignoring \`${t}\` -- only https: and data:image/ URLs are allowed.`)}}function mt(e){return Ge(e.replace(/\r\n?/g,`
|
|
11
|
+
`)).map(e=>{switch(e.type){case`bold`:case`italic`:return mt(e.value);case`link`:return e.text;default:return e.value}}).join(``)}var ht=40,gt=120;function _t(e){let t=[];for(let n of Ge(e))if(n.type===`text`){let e=n.value.split(/(\s+)/),r=n.start;for(let n of e)r+=n.length,n.trim().length>0&&t.push(r)}else t.push(n.end);return t}function vt(e){let t=null;return e?.addEventListener(`abort`,()=>{t?.()},{once:!0}),function(e){return new Promise(n=>{let r=setTimeout(()=>{t=null,n()},e);t=()=>{clearTimeout(r),t=null,n()}})}}async function yt(e,t,n){let r=n?.wordIntervalMs??ht,i=n?.tokenIntervalMs??gt,a=n?.signal,o=Ge(e),s=new Set(o.filter(e=>e.type!==`text`).map(e=>e.end)),c=vt(a),l=``;for(let n of _t(e))if(a?.aborted||(l=e.slice(0,n),t(l),await c(s.has(n)?i:r),a?.aborted))return;l!==e&&t(e)}function bt(e,t=Date.now()){let n=e.split(`.`);if(n.length!==3||n.some(e=>e===``))return!1;let r=n[1];try{let e=r.replace(/-/g,`+`).replace(/_/g,`/`),n=JSON.parse(atob(e.padEnd(Math.ceil(e.length/4)*4,`=`)))?.exp;return typeof n==`number`&&Number.isFinite(n)&&n*1e3<=t}catch{return!1}}function xt(e){return`whoo-aiden-widget:conversation:${e}`}function St(e){try{return window.sessionStorage.getItem(xt(e))}catch{return null}}function Ct(e,t){try{window.sessionStorage.setItem(xt(e),t)}catch{}}function wt(e){try{window.sessionStorage.removeItem(xt(e))}catch{}}var Tt=/^(inherit|initial|unset|revert|revert-layer)$|\bcurrentcolor\b|\b(var|env|attr|light-dark)\(/i;function Et(e){if(Tt.test(e.trim()))return null;let t=document.createElement(`div`);if(t.style.color=e,t.style.color===``)return null;let n=document.createElement(`div`);n.attachShadow({mode:`open`}).appendChild(t),document.body.appendChild(n);let r=getComputedStyle(t).color;n.remove();let i=r.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*([\d.]+))?/);if(!i)return null;let a=i[4]===void 0?1:Number(i[4]);return{rgb:[Number(i[1]),Number(i[2]),Number(i[3])].map(e=>Math.round(e*a+255*(1-a))),translucent:a<1}}function Dt(e){return Et(e)?.rgb??null}function Q([e,t,n]){let r=e=>{let t=e/255;return t<=.03928?t/12.92:((t+.055)/1.055)**2.4};return .2126*r(e)+.7152*r(t)+.0722*r(n)}function Ot(e,t){let n=Math.max(e,t),r=Math.min(e,t);return(n+.05)/(r+.05)}function kt(e){let t=Dt(e);if(!t)return console.warn(`[whoo-aiden-widget] Could not parse color "${e}" for contrast calculation; defaulting to white text.`),`#ffffff`;let n=Q(t);return Ot(n,Q([0,0,0]))>=Ot(n,Q([255,255,255]))?`#000000`:`#ffffff`}var At=`#4f46e5`,jt=`#ffffff`,Mt=`#f0f0f0`,Nt=`#f3f4f6`,Pt=4.5;function Ft([e,t,n]){return`#${[e,t,n].map(e=>e.toString(16).padStart(2,`0`)).join(``)}`}function It(e,t=jt){let n=Dt(e),r=Dt(t);if(!n||!r)return At;let i=Q(r),a=e=>Ot(Q(e),i)>=Pt;if(a(n))return Ft(n);for(let e=.99;e>0;e-=.01){let t=n.map(t=>Math.round(t*e));if(a(t))return Ft(t)}return`#000000`}var Lt=`#111111`,Rt=`#0000ee`;function $(e){if(typeof e!=`string`||!e)return null;let t=Et(e);return t?Ft(t.rgb):null}function zt({color:e,inkColor:t,accentColor:n}){let r=$(e),i=r??At,a=It(i,Nt),o=$(t),s=o?It(o,Mt):Lt,c=$(n),l=c?It(c,Mt):Rt;return{primary:i,textOnPrimary:kt(i),primaryAsText:a,ink:s,link:l,adjusted:{primary:r!==null&&a!==i,ink:o!==null&&s!==o,link:c!==null&&l!==c}}}function Bt(e){return typeof e==`string`?`"${e}"`:`a ${typeof e} value`}function Vt(e,t,n=At){let r=t;$(t)===null&&(console.warn(`[whoo-aiden-widget] Could not use ${Bt(t)} as the theme color; falling back to ${Bt(n)}.`),r=n);let i=zt({color:r});e.style.setProperty(`--whoo-widget-color`,i.primary),e.style.setProperty(`--whoo-widget-text-on-color`,i.textOnPrimary),e.style.setProperty(`--whoo-widget-color-text`,i.primaryAsText)}function Ht(e,{inkColor:t,accentColor:n}){let r=zt({inkColor:t,accentColor:n});e.style.setProperty(`--whoo-widget-ink`,r.ink),e.style.setProperty(`--whoo-widget-link-color`,r.link)}function Ut(e,t){e&&$(e)===null&&console.warn(`[whoo-aiden-widget] Could not use ${Bt(e)} as the ${t}; using the default.`)}function Wt(e,t){Vt(e,t.color??At),Ut(t.inkColor,`ink color`),Ut(t.accentColor,`accent color`),Ht(e,{inkColor:t.inkColor,accentColor:t.accentColor});let n=t.position===`bottom-left`;e.style.setProperty(`--whoo-widget-inset-left`,n?`20px`:`auto`),e.style.setProperty(`--whoo-widget-inset-right`,n?`auto`:`20px`)}var Gt=8e3,Kt=3e3;function qt(e,t){return new Promise(n=>{let r=setTimeout(n,t);e.then(()=>{clearTimeout(r),n()})})}var Jt=class{config;state;listeners=new Set;sessionToken=null;conversationId=null;storageIdentifier;activeRequestController=null;slowResponseTimer=null;prefersReducedMotion;launcherIconUrl;emptyStateImageUrl;emptyStateImageAlt;showFeedback;constructor(e){this.config=e,this.launcherIconUrl=pt(e.launcherIconUrl,`launcherIconUrl`),this.emptyStateImageUrl=pt(e.emptyStateImageUrl,`emptyStateImageUrl`),this.emptyStateImageAlt=typeof e.emptyStateImageAlt==`string`?e.emptyStateImageAlt.trim():``,this.showFeedback=e.showFeedback===!0,this.storageIdentifier=e.publishableKey??`session-token-mode`,this.prefersReducedMotion=typeof window.matchMedia==`function`&&window.matchMedia(`(prefers-reduced-motion: reduce)`).matches,this.state={isOpen:!1,messages:[],isStreaming:!1,initError:null,isInitializing:!1,runtimeError:null,messageFeedback:{},primaryColor:null,agentName:null,accentColor:null,inkColor:null,announcement:null,isSlowResponse:!1,draft:``}}getState(){return this.state}subscribe(e){return this.listeners.add(e),()=>this.listeners.delete(e)}clearSlowResponse(){this.slowResponseTimer!==null&&(clearTimeout(this.slowResponseTimer),this.slowResponseTimer=null),this.state.isSlowResponse&&this.setState({isSlowResponse:!1})}setState(e){this.state={...this.state,...e};for(let e of this.listeners)e(this.state)}async init(){this.setState({isInitializing:!0});try{await this.start()}finally{this.setState({isInitializing:!1})}}async start(){let e=this.config.apiBaseUrl??`https://api.aidenvoice.com`;try{if(this.config.sessionToken){if(bt(this.config.sessionToken))throw Error(`The sessionToken has expired.`);this.sessionToken=this.config.sessionToken}else if(this.config.publishableKey){let{token:t,primaryColor:n,name:r,accentColor:i,inkColor:a}=await st(e,this.config.publishableKey);this.sessionToken=t,this.setState({primaryColor:n,agentName:r,accentColor:i,inkColor:a})}else throw Error(`WidgetConfig must include exactly one of publishableKey or sessionToken`)}catch(e){console.error(`[whoo-aiden-widget] initialization failed:`,e),this.setState({initError:e instanceof Error?e.message:String(e)});return}this.conversationId=St(this.storageIdentifier),this.config.sessionToken&&await qt(this.loadBranding(e,this.config.sessionToken),Kt)}async loadBranding(e,t){try{let n=this.config;if($(n.color)&&$(n.inkColor)&&$(n.accentColor)&&a(n.name))return;let{primaryColor:r,name:i,accentColor:o,inkColor:s}=await lt(e,t);this.setState({primaryColor:r,agentName:i,accentColor:o,inkColor:s})}catch(e){let t=e?.status;(t===401||t===403)&&(console.error(`[whoo-aiden-widget] initialization failed:`,e),this.setState({initError:e instanceof Error?e.message:String(e)}))}}open(){this.setState({isOpen:!0})}resetConversation(){this.activeRequestController?.abort(),this.activeRequestController=null,this.clearSlowResponse(),this.conversationId=null,wt(this.storageIdentifier),this.setState({messages:[],messageFeedback:{},runtimeError:null,isStreaming:!1,announcement:`Conversation cleared`})}setDraft(e){this.setState({draft:e})}close(){this.activeRequestController?.abort(),this.activeRequestController=null,this.clearSlowResponse(),this.setState({isOpen:!1})}async sendMessage(e){if(!this.sessionToken)return;let t=this.config.apiBaseUrl??`https://api.aidenvoice.com`,n={role:`user`,content:e,id:null},r={role:`assistant`,content:``,id:null};this.setState({messages:[...this.state.messages,n,r],isStreaming:!0,runtimeError:null,announcement:null});let i=e=>{let t=[...this.state.messages];t[t.length-1]={...t[t.length-1],content:e},this.setState({messages:t})};this.activeRequestController=new AbortController;let{signal:a}=this.activeRequestController;this.slowResponseTimer=setTimeout(()=>{this.slowResponseTimer=null,this.setState({isSlowResponse:!0})},Gt);let o=()=>{this.setState({runtimeError:`Something went wrong, please try again.`,...this.state.draft===``?{draft:e}:{}})},s=``;try{for await(let n of dt(t,this.sessionToken,this.conversationId,e,a))if(n.type===`conversation_id`)this.conversationId=n.conversationId,Ct(this.storageIdentifier,n.conversationId);else if(n.type===`delta`)this.clearSlowResponse(),n.verbatim&&!this.prefersReducedMotion?(await yt(n.delta,e=>i(e),{signal:a}),s=n.delta):n.verbatim?(s=n.delta,i(s)):(s+=n.delta,i(s));else if(n.type===`done`){if(n.conversationId&&(this.conversationId=n.conversationId,Ct(this.storageIdentifier,n.conversationId)),n.messageId){let e=[...this.state.messages];e[e.length-1]={...e[e.length-1],id:n.messageId},this.setState({messages:e})}this.setState({announcement:mt(s)})}else if(n.type===`error`){console.error(`[whoo-aiden-widget] chat error:`,n.error),o(),this.activeRequestController?.abort();break}}catch(e){e?.name===`AbortError`||(console.error(`[whoo-aiden-widget] chat request failed:`,e),o())}finally{this.activeRequestController=null,this.clearSlowResponse(),this.setState({isStreaming:!1})}}expandFeedback(e){let{correction:t,category:n}=this.state.messageFeedback[e]??{};this.setState({messageFeedback:{...this.state.messageFeedback,[e]:{status:`expanded`,correction:t,category:n}}})}setFeedbackDraft(e,t,n){this.setState({messageFeedback:{...this.state.messageFeedback,[e]:{...this.state.messageFeedback[e],correction:t,category:n}}})}cancelFeedback(e){this.setState({messageFeedback:{...this.state.messageFeedback,[e]:{status:`idle`}}})}async submitFeedback(e,t,n,r){if(!this.sessionToken)return;let i=this.config.apiBaseUrl??`https://api.aidenvoice.com`;this.setState({messageFeedback:{...this.state.messageFeedback,[e]:{status:`submitting`,rating:t}}});try{await ut(i,this.sessionToken,{messageId:e,rating:t,correction:n,category:r}),this.setState({messageFeedback:{...this.state.messageFeedback,[e]:{status:`submitted`,rating:t}}})}catch(i){console.error(`[whoo-aiden-widget] feedback submission failed:`,i),this.setState({messageFeedback:{...this.state.messageFeedback,[e]:{status:`error`,rating:t,correction:n,category:r}}})}}},Yt=`:host,.whoo-widget-root{all:initial;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}.whoo-widget-launcher{bottom:20px;left:var(--whoo-widget-inset-left,auto);right:var(--whoo-widget-inset-right,20px);background:var(--whoo-widget-color,#4f46e5);width:56px;height:56px;color:var(--whoo-widget-text-on-color,#fff);cursor:pointer;border:none;border-radius:50%;justify-content:center;align-items:center;padding:0;font-size:24px;display:flex;position:fixed;box-shadow:0 2px 8px #0003}.whoo-widget-launcher:focus-visible{box-shadow:0 2px 8px #0003,0 0 0 4px #fff}.whoo-widget-launcher svg{display:block}.whoo-widget-launcher-icon-image{object-fit:cover;border-radius:50%;width:32px;height:32px}.whoo-widget-launcher-icon-image[hidden]{display:none}.whoo-widget-panel{bottom:88px;left:var(--whoo-widget-inset-left,auto);right:var(--whoo-widget-inset-right,20px);background:#fff;border-radius:12px;flex-direction:column;width:360px;max-width:calc(100vw - 40px);height:480px;max-height:calc(100vh - 108px);display:flex;position:fixed;overflow:hidden;box-shadow:0 4px 16px #0003}@media (width<=400px),(height<=420px){.whoo-widget-panel{width:auto;max-width:none;height:auto;max-height:none;inset:8px}}.whoo-widget-header{border-bottom:1px solid #e5e5e5;flex-wrap:wrap;flex-shrink:0;justify-content:space-between;align-items:center;gap:8px;max-height:50%;padding:8px 8px 8px 16px;display:flex;overflow-y:auto}.whoo-widget-header-title{color:var(--whoo-widget-ink,#111);overflow-wrap:anywhere;flex:auto;min-width:0;margin:0;font-size:15px;font-weight:600}.whoo-widget-header-actions{background:#fff;flex-shrink:0;align-items:center;gap:4px;margin-left:auto;display:flex;position:sticky;bottom:0}.whoo-widget-header-close,.whoo-widget-header-reset{color:var(--whoo-widget-color-text,#4f46e5);cursor:pointer;background:0 0;border:none;border-radius:6px;justify-content:center;align-items:center;min-width:24px;min-height:24px;padding:4px 8px;font-size:13px;display:inline-flex}.whoo-widget-header-close{width:32px;height:32px;padding:0}.whoo-widget-header-close:hover,.whoo-widget-header-reset:hover{background:#f3f4f6}.whoo-widget-message-list{flex:1;min-height:0;padding:12px;overflow-y:auto}.whoo-widget-message-list:focus-visible{outline-offset:-2px;outline:2px solid #111827;box-shadow:inset 0 0 0 4px #fff}.whoo-widget-empty-state-image{object-fit:contain;max-width:min(160px,100%);height:auto;max-height:160px;margin:8px auto 16px;display:block}@media (width<=400px),(height<=420px){.whoo-widget-empty-state-image{max-height:64px;margin:0 auto 8px}}.whoo-widget-message{overflow-wrap:anywhere;white-space:pre-line;border-radius:8px;max-width:80%;margin-bottom:8px;padding:8px 12px}.whoo-widget-list{margin:4px 0;padding-left:20px}.whoo-widget-message--user{background:var(--whoo-widget-color,#4f46e5);color:var(--whoo-widget-text-on-color,#fff);margin-left:auto}.whoo-widget-message--user a{color:inherit}.whoo-widget-message--assistant{color:var(--whoo-widget-ink,#111);background:#f0f0f0}.whoo-widget-message--assistant a{color:var(--whoo-widget-link-color,#00e)}.whoo-widget-pending{flex-wrap:wrap;align-items:center;gap:8px;min-height:1.2em;display:flex}.whoo-widget-typing{align-items:center;gap:4px;display:inline-flex}.whoo-widget-typing span{background:#6b7280;border-radius:50%;width:6px;height:6px;animation:1.2s ease-in-out infinite whoo-widget-typing-bounce}.whoo-widget-typing span:nth-child(2){animation-delay:.2s}.whoo-widget-typing span:nth-child(3){animation-delay:.4s}@keyframes whoo-widget-typing-bounce{0%,80%,to{transform:translateY(0)}40%{transform:translateY(-4px)}}@media (prefers-reduced-motion:reduce){.whoo-widget-typing span{animation:none}}.whoo-widget-error-banner{color:#991b1b;background:#fee2e2;padding:8px 12px;font-size:13px}.whoo-widget-composer{border-top:1px solid #e5e5e5;gap:8px;padding:12px;display:flex}.whoo-widget-composer-input{border:1px solid #6b7280;border-radius:6px;flex:1;padding:8px}.whoo-widget-composer-send{background:var(--whoo-widget-color,#4f46e5);color:var(--whoo-widget-text-on-color,#fff);cursor:pointer;border:none;border-radius:6px;padding:8px 16px}.whoo-widget-composer-send[aria-disabled=true],.whoo-widget-composer-input[aria-disabled=true]{opacity:.6;cursor:not-allowed}.whoo-widget-feedback{align-items:center;gap:6px;margin-top:4px;display:flex}.whoo-widget-feedback-buttons{gap:6px;display:flex}.whoo-widget-feedback-buttons button{cursor:pointer;color:#4b5563;background:0 0;border:none;border-radius:4px;justify-content:center;align-items:center;min-width:24px;min-height:24px;padding:4px;display:inline-flex}.whoo-widget-feedback-buttons button:hover:not(:disabled){color:#111;background:#0000000f}.whoo-widget-feedback-buttons button:disabled{opacity:.3;cursor:not-allowed}.whoo-widget-feedback-form{flex-direction:column;gap:6px;margin-top:6px;display:flex}.whoo-widget-feedback-textarea{box-sizing:border-box;resize:vertical;border:1px solid #6b7280;border-radius:6px;width:100%;padding:6px;font-size:12px}.whoo-widget-feedback-select{border:1px solid #6b7280;border-radius:6px;min-height:24px;padding:4px;font-size:12px}.whoo-widget-feedback-form-buttons{gap:6px;display:flex}.whoo-widget-feedback-submit{background:var(--whoo-widget-color,#4f46e5);color:var(--whoo-widget-text-on-color,#fff);cursor:pointer;border:none;border-radius:6px;padding:8px 16px;font-size:13px}.whoo-widget-feedback-cancel{color:#111;cursor:pointer;background:#fff;border:1px solid #6b7280;border-radius:6px;padding:8px 16px;font-size:13px}.whoo-widget-feedback-submitted{color:#4b5563;margin-top:4px;font-size:12px}.whoo-widget-feedback-error{color:#991b1b;font-size:12px}.whoo-widget-sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}button:focus-visible,input:focus-visible,textarea:focus-visible,select:focus-visible,a:focus-visible{outline-offset:2px;outline:2px solid #111827;box-shadow:0 0 0 4px #fff}@media (forced-colors:active){.whoo-widget-launcher,.whoo-widget-header-close,.whoo-widget-header-reset,.whoo-widget-composer-send,.whoo-widget-feedback-submit,.whoo-widget-feedback-buttons button{border:1px solid buttontext}.whoo-widget-panel{box-sizing:border-box;border:1px solid canvastext}}`;function Xt(e){let t=document.createElement(`div`);t.id=`whoo-aiden-widget-host`,t.style.position=`relative`,t.style.zIndex=String(r(e.zIndex));let n=t.attachShadow({mode:`open`}),i=document.createElement(`style`);i.textContent=Yt,n.appendChild(i);let a=document.createElement(`div`);n.appendChild(a),Wt(a,e);let o=new Jt(e),s=$(e.color)!==null,c=null,l=``;return o.subscribe(t=>{!s&&t.primaryColor&&t.primaryColor!==c&&(c=t.primaryColor,Vt(a,t.primaryColor,e.color));let n=`${t.inkColor}|${t.accentColor}`;(t.inkColor||t.accentColor)&&n!==l&&(l=n,Ht(a,{inkColor:$(e.inkColor)?e.inkColor:t.inkColor,accentColor:$(e.accentColor)?e.accentColor:t.accentColor}))}),o.init(),ue(W(it,{controller:o}),a),document.body.appendChild(t),{unmount(){ue(null,a),t.remove()}}}function Zt(e){return o(e),Xt(e)}return e.init=Zt,e})({});
|