@aiden-voice/widget 0.2.0 → 0.3.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/README.md +19 -0
- package/dist/index.d.ts +2 -0
- package/dist/theme.d.ts +33 -2
- package/dist/types.d.ts +12 -0
- package/dist/version.d.ts +1 -1
- package/dist/widget.iife.js +3 -2
- package/dist/widget.js +111 -75
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -79,6 +79,8 @@ throws synchronously, at call time, if you pass both or neither.
|
|
|
79
79
|
| `sessionToken` | A pre-minted session JWT from your own backend. Mutually exclusive with `publishableKey`. | none (required unless `publishableKey` is set) |
|
|
80
80
|
| `position` | Launcher/panel corner: `'bottom-right'` or `'bottom-left'`. | `'bottom-right'` |
|
|
81
81
|
| `color` | Primary accent color (any valid CSS color). | `'#4f46e5'` |
|
|
82
|
+
| `inkColor` | Body text color (chat title and replies). Darkened automatically if needed to stay readable. In `publishableKey` mode the color configured in whoo-aiden takes precedence. | `'#111111'` |
|
|
83
|
+
| `accentColor` | Link color in replies. Darkened automatically if needed to stay readable. In `publishableKey` mode the color configured in whoo-aiden takes precedence. | `'#0000ee'` |
|
|
82
84
|
| `name` | Agent name for the panel header and the dialog's screen-reader label ("Chat with {name}"). In `publishableKey` mode the name configured in whoo-aiden takes precedence; in `sessionToken` mode this is the only source. | `'Aiden'` |
|
|
83
85
|
| `greeting` | Welcome text shown in the panel before the first message. | none |
|
|
84
86
|
| `launcherIconUrl` | Image shown on the launcher bubble instead of the default chat icon. `https:` or `data:image/` only. Until it loads, and permanently if it fails, the default icon shows. | none (default icon) |
|
|
@@ -86,6 +88,23 @@ throws synchronously, at call time, if you pass both or neither.
|
|
|
86
88
|
| `emptyStateImageAlt` | Alt text for `emptyStateImageUrl`. Set it when the image carries meaning (e.g. your brand name); omit it for a purely decorative image. | none (decorative) |
|
|
87
89
|
| `apiBaseUrl` | Override the whoo-aiden API host the widget talks to. | `'https://api.aidenvoice.com'` |
|
|
88
90
|
|
|
91
|
+
## Theme helper
|
|
92
|
+
|
|
93
|
+
`resolveTheme` (npm package only) returns the exact colors the widget will render for a set of brand colors, the same computation the widget runs internally. Use it to preview branding without mounting the widget:
|
|
94
|
+
|
|
95
|
+
```ts
|
|
96
|
+
import { resolveTheme } from '@aiden-voice/widget'
|
|
97
|
+
|
|
98
|
+
const theme = resolveTheme({ color: '#3b82f6', inkColor: '#1f2937', accentColor: '#f97316' })
|
|
99
|
+
// theme.primary, theme.textOnPrimary, theme.primaryAsText, theme.ink, theme.link:
|
|
100
|
+
// normalized #rrggbb values.
|
|
101
|
+
// theme.adjusted.{primary,ink,link}: true only when a supplied, usable color
|
|
102
|
+
// was darkened to stay readable -- flattening a translucent color to its
|
|
103
|
+
// opaque look over white doesn't count.
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
It needs a DOM (a browser, or jsdom in tests).
|
|
107
|
+
|
|
89
108
|
## Versions
|
|
90
109
|
|
|
91
110
|
The widget is published to a CDN under `https://widget.aidenvoice.com/<version>/`, plus
|
package/dist/index.d.ts
CHANGED
package/dist/theme.d.ts
CHANGED
|
@@ -2,9 +2,40 @@ import { WidgetConfig } from './types';
|
|
|
2
2
|
export declare function pickTextColor(cssColor: string): '#000000' | '#ffffff';
|
|
3
3
|
export declare function contrastRatio(cssColorA: string, cssColorB: string): number;
|
|
4
4
|
export declare function textSafeColor(cssColor: string, background?: string): string;
|
|
5
|
+
export interface ThemeInput {
|
|
6
|
+
color?: string | null;
|
|
7
|
+
inkColor?: string | null;
|
|
8
|
+
accentColor?: string | null;
|
|
9
|
+
}
|
|
10
|
+
export interface ResolvedTheme {
|
|
11
|
+
/** Launcher, visitor bubbles, Send and Submit button fill. */
|
|
12
|
+
primary: string;
|
|
13
|
+
/** Black or white text/icons on `primary`. */
|
|
14
|
+
textOnPrimary: string;
|
|
15
|
+
/** Header "New conversation" and X, on the white panel. */
|
|
16
|
+
primaryAsText: string;
|
|
17
|
+
/** Header title and reply text. */
|
|
18
|
+
ink: string;
|
|
19
|
+
/** Links in replies. */
|
|
20
|
+
link: string;
|
|
21
|
+
/**
|
|
22
|
+
* True only when a supplied, usable color was darkened to stay readable.
|
|
23
|
+
* Flattening a translucent color to its opaque look over white doesn't
|
|
24
|
+
* count -- that's compositing, not a readability adjustment, and it
|
|
25
|
+
* lightens rather than darkens, so a "shown a little darker" note would
|
|
26
|
+
* be wrong for it.
|
|
27
|
+
*/
|
|
28
|
+
adjusted: {
|
|
29
|
+
primary: boolean;
|
|
30
|
+
ink: boolean;
|
|
31
|
+
link: boolean;
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
export declare function usableHex(color: string | null | undefined): string | null;
|
|
35
|
+
export declare function resolveTheme({ color, inkColor, accentColor }: ThemeInput): ResolvedTheme;
|
|
5
36
|
export declare function applyThemeColor(root: HTMLElement, color: string, fallback?: string): void;
|
|
6
37
|
export declare function applyPalette(root: HTMLElement, { inkColor, accentColor }: {
|
|
7
|
-
inkColor
|
|
8
|
-
accentColor
|
|
38
|
+
inkColor?: string | null;
|
|
39
|
+
accentColor?: string | null;
|
|
9
40
|
}): void;
|
|
10
41
|
export declare function applyTheme(root: HTMLElement, config: WidgetConfig): void;
|
package/dist/types.d.ts
CHANGED
|
@@ -3,6 +3,18 @@ export interface WidgetConfig {
|
|
|
3
3
|
sessionToken?: string;
|
|
4
4
|
position?: 'bottom-right' | 'bottom-left';
|
|
5
5
|
color?: string;
|
|
6
|
+
/**
|
|
7
|
+
* Body text color (header title and replies). Darkened if needed to stay
|
|
8
|
+
* readable. In publishableKey mode, a usable `ink_color` from the session
|
|
9
|
+
* mint takes precedence.
|
|
10
|
+
*/
|
|
11
|
+
inkColor?: string;
|
|
12
|
+
/**
|
|
13
|
+
* Link color in replies. Darkened if needed to stay readable. In
|
|
14
|
+
* publishableKey mode, a usable `accent_color` from the session mint takes
|
|
15
|
+
* precedence.
|
|
16
|
+
*/
|
|
17
|
+
accentColor?: string;
|
|
6
18
|
name?: string;
|
|
7
19
|
greeting?: string;
|
|
8
20
|
/** Image shown on the launcher bubble instead of the default chat icon. */
|
package/dist/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const WIDGET_VERSION = "0.
|
|
1
|
+
export declare const WIDGET_VERSION = "0.3.1";
|
package/dist/widget.iife.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
var whooAidenWidget=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});function t(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 n,r,i,a,o,s,c,l,u,d,f,p,m,h,g={},_=[],v=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,y=Array.isArray;function b(e,t){for(var n in t)e[n]=t[n];return e}function ee(e){e&&e.parentNode&&e.parentNode.removeChild(e)}function x(e,t,r){var i,a,o,s={};for(o in t)o==`key`?i=t[o]:o==`ref`?a=t[o]:s[o]=t[o];if(arguments.length>2&&(s.children=arguments.length>3?n.call(arguments,2):r),typeof e==`function`&&e.defaultProps!=null)for(o in e.defaultProps)s[o]===void 0&&(s[o]=e.defaultProps[o]);return S(e,s,i,a,null)}function S(e,t,n,a,o){var s={type:e,props:t,key:n,ref:a,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:o??++i,__i:-1,__u:0};return o==null&&r.vnode!=null&&r.vnode(s),s}function C(e){return e.children}function w(e,t){this.props=e,this.context=t}function T(e,t){if(t==null)return e.__?T(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`?T(e):null}function E(e){if(e.__P&&e.__d){var t=e.__v,n=t.__e,i=[],a=[],o=b({},t);o.__v=t.__v+1,r.vnode&&r.vnode(o),ie(e.__P,o,t,e.__n,e.__P.namespaceURI,32&t.__u?[n]:null,i,n??T(t),!!(32&t.__u),a),o.__v=t.__v,o.__.__k[o.__i]=o,oe(i,o,a),t.__e=t.__=null,o.__e!=n&&D(o)}}function D(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}),D(e)}function O(e){(!e.__d&&(e.__d=!0)&&a.push(e)&&!k.__r++||o!=r.debounceRendering)&&((o=r.debounceRendering)||s)(k)}function k(){try{for(var e,t=1;a.length;)a.length>t&&a.sort(c),e=a.shift(),t=a.length,E(e)}finally{a.length=k.__r=0}}function te(e,t,n,r,i,a,o,s,c,l,u){var d,f,p,m,h,v,y=r&&r.__k||_,b=t.length;for(c=ne(n,t,y,c,b),d=0;d<b;d++)(p=n.__k[d])!=null&&(f=p.__i!=-1&&y[p.__i]||g,p.__i=d,v=ie(e,p,f,i,a,o,s,c,l,u),m=p.__e,p.ref&&f.ref!=p.ref&&(f.ref&&P(f.ref,null,p),u.push(p.ref,p.__c||m,p)),h==null&&m!=null&&(h=m),4&p.__u?(c=A(p,c,e),f.__e&&(f.__e=null)):typeof p.type==`function`&&v!==void 0?c=v:m&&(c=m.nextSibling),p.__u&=-7);return n.__e=h,c}function ne(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]=S(null,o,null,null,null):y(o)?o=e.__k[a]=S(C,{children:o},null,null,null):o.constructor===void 0&&o.__b>0?o=e.__k[a]=S(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=j(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=T(s)),le(s,s));return r}function A(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=A(r[i],t,n));return t}e.__e!=t&&(t&&e.type&&!t.parentNode&&(t=T(e)),t=n.insertBefore(e.__e,t||null));do t&&=t.nextSibling;while(t!=null&&t.nodeType==8);return t}function j(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 M(e,t,n){t[0]==`-`?e.setProperty(t,n??``):e[t]=n==null?``:typeof n!=`number`||v.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||M(e.style,t,``);if(n)for(t in n)r&&n[t]==r[t]||M(e.style,t,n[t])}}else if(t[0]==`o`&&t[1]==`n`)a=t!=(t=t.replace(f,`$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[d]=r[d]:(n[d]=p,e.addEventListener(t,a?h:m,a)):e.removeEventListener(t,a?h:m,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 re(e){return function(t){if(this.l){var n=this.l[t.type+e];if(t[u]==null)t[u]=p++;else if(t[u]<n[d])return;return n(r.event?r.event(t):t)}}}function ie(e,t,n,i,a,o,s,c,l,u){var d,f,p,m,h,g,v,x,S,E,D,O,k,ne,A,j,M=t.type;if(t.constructor!==void 0)return null;128&n.__u&&(l=!!(32&n.__u),o=[c=t.__e=n.__e]),(d=r.__b)&&d(t);n:if(typeof M==`function`){f=s.length;try{if(S=t.props,E=M.prototype&&M.prototype.render,D=(d=M.contextType)&&i[d.__c],O=d?D?D.props.value:d.__:i,n.__c?x=(p=t.__c=n.__c).__=p.__E:(E?t.__c=p=new M(S,O):(t.__c=p=new w(S,O),p.constructor=M,p.render=ue),D&&D.sub(p),p.state||(p.state={}),p.__n=i,m=p.__d=!0,p.__h=[],p._sb=[]),E&&p.__s==null&&(p.__s=p.state),E&&M.getDerivedStateFromProps!=null&&(p.__s==p.state&&(p.__s=b({},p.__s)),b(p.__s,M.getDerivedStateFromProps(S,p.__s))),h=p.props,g=p.state,p.__v=t,m)E&&M.getDerivedStateFromProps==null&&p.componentWillMount!=null&&p.componentWillMount(),E&&p.componentDidMount!=null&&p.__h.push(p.componentDidMount);else{if(E&&M.getDerivedStateFromProps==null&&S!==h&&p.componentWillReceiveProps!=null&&p.componentWillReceiveProps(S,O),t.__v==n.__v||!p.__e&&p.shouldComponentUpdate!=null&&!1===p.shouldComponentUpdate(S,p.__s,O)){t.__v!=n.__v&&(p.props=S,p.state=p.__s,p.__d=!1),t.__e=n.__e,t.__k=n.__k,t.__k.some(function(e){e&&(e.__=t)}),_.push.apply(p.__h,p._sb),p._sb=[],p.__h.length&&s.push(p),c=T(n);break n}p.componentWillUpdate!=null&&p.componentWillUpdate(S,p.__s,O),E&&p.componentDidUpdate!=null&&p.__h.push(function(){p.componentDidUpdate(h,g,v)})}if(p.context=O,p.props=S,p.__P=e,p.__e=!1,k=r.__r,ne=0,E)p.state=p.__s,p.__d=!1,k&&k(t),d=p.render(p.props,p.state,p.context),_.push.apply(p.__h,p._sb),p._sb=[];else do p.__d=!1,k&&k(t),d=p.render(p.props,p.state,p.context),p.state=p.__s;while(p.__d&&++ne<25);p.state=p.__s,p.getChildContext!=null&&(i=b(b({},i),p.getChildContext())),E&&!m&&p.getSnapshotBeforeUpdate!=null&&(v=p.getSnapshotBeforeUpdate(h,g)),A=d!=null&&d.type===C&&d.key==null?se(d.props.children):d,c=te(e,y(A)?A:[A],t,n,i,a,o,s,c,l,u),p.base=t.__e,t.__u&=-161,p.__h.length&&s.push(p),x&&(p.__E=p.__=null)}catch(e){if(s.length=f,t.__v=null,l||o!=null){if(e.then){for(t.__u|=l?160:128;c&&c.nodeType==8&&c.nextSibling;)c=c.nextSibling;o!=null&&(o[o.indexOf(c)]=null),t.__e=c}else if(o!=null)for(j=o.length;j--;)ee(o[j])}else t.__e=n.__e;t.__k??=n.__k||[],e.then||ae(t),r.__e(e,t,n)}}else o==null&&t.__v==n.__v?(t.__k=n.__k,t.__e=n.__e):c=t.__e=ce(n.__e,t,n,i,a,o,s,l,u);return(d=r.diffed)&&d(t),128&t.__u?void 0:c}function ae(e){e&&(e.__c&&(e.__c.__e=!0),e.__k&&e.__k.some(ae))}function oe(e,t,n){for(var i=0;i<n.length;i++)P(n[i],n[++i],n[++i]);r.__c&&r.__c(t,e),e.some(function(t){try{e=t.__h,t.__h=[],e.some(function(e){e.call(t)})}catch(e){r.__e(e,t.__v)}})}function se(e){return typeof e!=`object`||!e||e.__b>0?e:y(e)?e.map(se):e.constructor===void 0?b({},e):null}function ce(e,t,i,a,o,s,c,l,u){var d,f,p,m,h,_,v,b=i.props||g,x=t.props,S=t.type;if(S==`svg`?o=`http://www.w3.org/2000/svg`:S==`math`?o=`http://www.w3.org/1998/Math/MathML`:o||=`http://www.w3.org/1999/xhtml`,s!=null){for(d=0;d<s.length;d++)if((h=s[d])&&`setAttribute`in h==!!S&&(S?h.localName==S:h.nodeType==3)){e=h,s[d]=null;break}}if(e==null){if(S==null)return document.createTextNode(x);e=document.createElementNS(o,S,x.is&&x),l&&=(r.__m&&r.__m(t,s),!1),s=null}if(S==null)b===x||l&&e.data==x||(e.data=x);else{if(s=S==`textarea`&&x.defaultValue!=null?null:s&&n.call(e.childNodes),!l&&s!=null)for(b={},d=0;d<e.attributes.length;d++)b[(h=e.attributes[d]).name]=h.value;for(d in b)h=b[d],d==`dangerouslySetInnerHTML`?p=h:d==`children`||d in x||d==`value`&&`defaultValue`in x||d==`checked`&&`defaultChecked`in x||N(e,d,null,h,o);for(d in x)h=x[d],d==`children`?m=h:d==`dangerouslySetInnerHTML`?f=h:d==`value`?_=h:d==`checked`?v=h:l&&typeof h!=`function`||b[d]===h||N(e,d,h,b[d],o);if(f)l||p&&(f.__html==p.__html||f.__html==e.innerHTML)||(e.innerHTML=f.__html),t.__k=[];else if(p&&(e.innerHTML=``),te(t.type==`template`?e.content:e,y(m)?m:[m],t,i,a,S==`foreignObject`?`http://www.w3.org/1999/xhtml`:o,s,c,s?s[0]:i.__k&&T(i,0),l,u),s!=null)for(d=s.length;d--;)ee(s[d]);l&&S!=`textarea`||(d=`value`,S==`progress`&&_==null?e.removeAttribute(`value`):_!=null&&(_!==e[d]||S==`progress`&&!_||S==`option`&&_!=b[d])&&N(e,d,_,b[d],o),d=`checked`,v!=null&&v!=e[d]&&N(e,d,v,b[d],o))}return e}function P(e,t,n){try{if(typeof e==`function`){var i=typeof e.__u==`function`;i&&e.__u(),i&&t==null||(e.__u=e(t))}else e.current=t}catch(e){r.__e(e,n)}}function le(e,t,n){var i,a;if(r.unmount&&r.unmount(e),(i=e.ref)&&(i.current&&i.current!=e.__e||P(i,null,t)),(i=e.__c)!=null){if(i.componentWillUnmount)try{i.componentWillUnmount()}catch(e){r.__e(e,t)}i.base=i.__P=i.__n=null}if(i=e.__k)for(a=0;a<i.length;a++)i[a]&&le(i[a],t,n||typeof e.type!=`function`);n||ee(e.__e),e.__c=e.__=e.__e=void 0}function ue(e,t,n){return this.constructor(e,n)}function de(e,t,i){var a,o,s,c;t==document&&(t=document.documentElement),r.__&&r.__(e,t),o=(a=typeof i==`function`)?null:i&&i.__k||t.__k,s=[],c=[],ie(t,e=(!a&&i||t).__k=x(C,null,[e]),o||g,g,t.namespaceURI,!a&&i?[i]:o?null:t.firstChild?n.call(t.childNodes):null,s,!a&&i?i:o?o.__e:t.firstChild,a,c),oe(s,e,c),e.props.children=null}n=_.slice,r={__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}},i=0,w.prototype.setState=function(e,t){var n=this.__s!=null&&this.__s!=this.state?this.__s:this.__s=b({},this.state);typeof e==`function`&&(e=e(b({},n),this.props)),e&&b(n,e),e!=null&&this.__v&&(t&&this._sb.push(t),O(this))},w.prototype.forceUpdate=function(e){this.__v&&(this.__e=!0,e&&this.__h.push(e),O(this))},w.prototype.render=C,a=[],s=typeof Promise==`function`?Promise.prototype.then.bind(Promise.resolve()):setTimeout,c=function(e,t){return e.__v.__b-t.__v.__b},k.__r=0,l=Math.random().toString(8),u=`__d`+l,d=`__a`+l,f=/(PointerCapture)$|Capture$/i,p=0,m=re(!1),h=re(!0);var F,I,fe,pe,L=0,me=[],R=r,he=R.__b,ge=R.__r,_e=R.diffed,ve=R.__c,ye=R.unmount,be=R.__;function xe(e,t){R.__h&&R.__h(I,e,L||t),L=0;var n=I.__H||(I.__H={__:[],__h:[]});return e>=n.__.length&&n.__.push({}),n.__[e]}function z(e){return L=1,Se(ke,e)}function Se(e,t,n){var r=xe(F++,2);if(r.t=e,!r.__c&&(r.__=[n?n(t):ke(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=I,!I.__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};I.__f=!0;var a=I.shouldComponentUpdate,o=I.componentWillUpdate;I.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)},I.shouldComponentUpdate=i}return r.__N||r.__}function B(e,t){var n=xe(F++,3);!R.__s&&Oe(n.__H,t)&&(n.__=e,n.u=t,I.__H.__h.push(n))}function V(e){return L=5,Ce(function(){return{current:e}},[])}function Ce(e,t){var n=xe(F++,7);return Oe(n.__H,t)&&(n.__=e(),n.__H=t,n.__h=e),n.__}function we(){for(var e;e=me.shift();){var t=e.__H;if(e.__P&&t)try{t.__h.some(H),t.__h.some(De),t.__h=[]}catch(n){t.__h=[],R.__e(n,e.__v)}}}R.__b=function(e){I=null,he&&he(e)},R.__=function(e,t){e&&t.__k&&t.__k.__m&&(e.__m=t.__k.__m),be&&be(e,t)},R.__r=function(e){ge&&ge(e),F=0;var t=(I=e.__c).__H;t&&(fe===I?(t.__h=[],I.__h=[],t.__.some(function(e){e.__N&&(e.__=e.__N),e.u=e.__N=void 0})):(t.__h.some(H),t.__h.some(De),t.__h=[],F=0)),fe=I},R.diffed=function(e){_e&&_e(e);var t=e.__c;t&&t.__H&&(t.__H.__h.length&&(me.push(t)!==1&&pe===R.requestAnimationFrame||((pe=R.requestAnimationFrame)||Ee)(we)),t.__H.__.some(function(e){e.u&&=(e.__H=e.u,void 0)})),fe=I=null},R.__c=function(e,t){t.some(function(e){try{e.__h.some(H),e.__h=e.__h.filter(function(e){return!e.__||De(e)})}catch(n){t.some(function(e){e.__h&&=[]}),t=[],R.__e(n,e.__v)}}),ve&&ve(e,t)},R.unmount=function(e){ye&&ye(e);var t,n=e.__c;n&&n.__H&&(n.__H.__.some(function(e){try{H(e)}catch(e){t=e}}),n.__H=void 0,t&&R.__e(t,n.__v))};var Te=typeof requestAnimationFrame==`function`;function Ee(e){var t,n=function(){clearTimeout(r),Te&&cancelAnimationFrame(t),setTimeout(e)},r=setTimeout(n,35);Te&&(t=requestAnimationFrame(n))}function H(e){var t=I,n=e.__c;typeof n==`function`&&(e.__c=void 0,n()),I=t}function De(e){var t=I;e.__c=e.__(),I=t}function Oe(e,t){return!e||e.length!==t.length||t.some(function(t,n){return t!==e[n]})}function ke(e,t){return typeof t==`function`?t(e):t}var Ae=0;Array.isArray;function U(e,t,n,i,a,o){t||={};var s,c,l=t;if(`ref`in l)for(c in l={},t)c==`ref`?s=t[c]:l[c]=t[c];var u={type:e,props:l,key:n,ref:s,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:--Ae,__i:-1,__u:0,__source:a,__self:o};if(typeof e==`function`&&(s=e.defaultProps))for(c in s)l[c]===void 0&&(l[c]=s[c]);return r.vnode&&r.vnode(u),u}function W({name:e,size:t,children:n}){return U(`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 je({size:e=26}){return U(W,{name:`chat`,size:e,children:[U(`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`}),U(`path`,{d:`M8.5 9.5h.01M12 9.5h.01M15.5 9.5h.01`,"stroke-width":`2.5`})]})}function Me({size:e=26}){return U(W,{name:`chevron-down`,size:e,children:U(`path`,{d:`M6 9l6 6 6-6`})})}function Ne({size:e=18}){return U(W,{name:`close`,size:e,children:U(`path`,{d:`M6 6l12 12M18 6L6 18`})})}var Pe=`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 Fe({size:e=16}){return U(W,{name:`thumb-up`,size:e,children:U(`path`,{d:Pe})})}function Ie({size:e=16}){return U(W,{name:`thumb-down`,size:e,children:U(`path`,{d:Pe,transform:`matrix(1 0 0 -1 0 24)`})})}function Le({isOpen:e,onClick:t,iconUrl:n,buttonRef:r}){let[i,a]=z(`loading`),o=n!==void 0&&i!==`failed`,s=o&&!e&&i===`loaded`;return U(`button`,{type:`button`,class:`whoo-widget-launcher`,onClick:t,"aria-label":e?`Close chat`:`Open chat`,ref:r,children:[e?U(Me,{}):s?null:U(je,{}),o?U(`img`,{class:`whoo-widget-launcher-icon-image`,src:n,alt:``,referrerpolicy:`no-referrer`,hidden:!s,onLoad:()=>a(`loaded`),onError:()=>a(`failed`)}):null]})}function Re({value:e,onChange:t,onSend:n,disabled:r,inputRef:i}){return U(`div`,{class:`whoo-widget-composer`,children:[U(`label`,{class:`whoo-widget-sr-only`,for:`whoo-widget-composer-input`,children:`Message`}),U(`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()}}),U(`button`,{type:`button`,class:`whoo-widget-composer-send`,onClick:n,disabled:r,children:`Send`})]})}function ze({message:e}){return U(`div`,{class:`whoo-widget-error-banner`,role:`alert`,children:e})}var G=/\[([^\]]+)\]\((https?:\/\/[^\s)]+)\)/y,K=/\*\*([^*]+)\*\*/y,q=/(?<![A-Za-z0-9_])_([^_\s](?:[^_]*[^_\s])?)_(?![A-Za-z0-9_])/y,J=/\*([^*]+)\*/y,Be=/https?:\/\/\S+/y,Ve=/[.,;:!?)\]}>]+$/;function He(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(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]!==`!`){G.lastIndex=n;let a=G.exec(e);if(a){i(n),t.push({type:`link`,text:a[1],url:a[2],start:n,end:G.lastIndex}),n=G.lastIndex,r=n;continue}}K.lastIndex=n;let a=K.exec(e);if(a){i(n),t.push({type:`bold`,value:a[1],start:n,end:K.lastIndex}),n=K.lastIndex,r=n;continue}q.lastIndex=n;let o=q.exec(e);if(o){i(n),t.push({type:`italic`,value:o[1],start:n,end:q.lastIndex}),n=q.lastIndex,r=n;continue}J.lastIndex=n;let s=J.exec(e);if(s){i(n),t.push({type:`italic`,value:s[1],start:n,end:J.lastIndex}),n=J.lastIndex,r=n;continue}Be.lastIndex=n;let c=Be.exec(e);if(c){let e=c[0].match(Ve),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}function Ue(e){return He(e).map((e,t)=>{switch(e.type){case`bold`:return U(`strong`,{children:e.value},t);case`italic`:return U(`em`,{children:e.value},t);case`link`:return U(`a`,{href:e.url,target:`_blank`,rel:`noopener noreferrer`,children:[e.text,U(`span`,{class:`whoo-widget-sr-only`,children:` (opens in new tab)`})]},t);default:return e.value}})}var We=[{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 Ge({state:e,containerRef:t,onThumbsUp:n,onThumbsDown:r,onSubmitDetailed:i,onCancel:a}){let[o,s]=z(``),[c,l]=z(``),u=V(e.status);if(B(()=>{let n=u.current;if(u.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===`submitted`)return U(`div`,{class:`whoo-widget-feedback-submitted`,role:`status`,children:`Thanks for the feedback`});if(e.status===`expanded`)return U(`div`,{class:`whoo-widget-feedback-form`,children:[U(`label`,{children:[U(`span`,{class:`whoo-widget-sr-only`,children:`Additional feedback`}),U(`textarea`,{class:`whoo-widget-feedback-textarea`,value:o,onInput:e=>s(e.target.value),placeholder:`What was wrong? (optional)`})]}),U(`select`,{class:`whoo-widget-feedback-select`,"aria-label":`Feedback category`,value:c,onChange:e=>l(e.target.value),children:We.map(e=>U(`option`,{value:e.value,children:e.label},e.value))}),U(`div`,{class:`whoo-widget-feedback-form-buttons`,children:[U(`button`,{type:`button`,class:`whoo-widget-feedback-submit`,onClick:()=>i(o,c),children:`Submit`}),U(`button`,{type:`button`,class:`whoo-widget-feedback-cancel`,onClick:a,children:`Cancel`})]})]});let d=e.status===`submitting`;return U(`div`,{class:`whoo-widget-feedback`,children:[U(`div`,{class:`whoo-widget-feedback-buttons`,children:[U(`button`,{type:`button`,"aria-label":`Good response`,disabled:d,onClick:n,children:U(Fe,{})}),U(`button`,{type:`button`,"aria-label":`Bad response`,disabled:d,onClick:r,children:U(Ie,{})})]}),e.status===`error`?U(`div`,{class:`whoo-widget-feedback-error`,role:`status`,children:`Couldn't send feedback`}):null]})}function Ke({isSlowResponse:e}){return U(`div`,{class:`whoo-widget-pending`,role:`status`,children:[U(`span`,{class:`whoo-widget-typing`,"aria-hidden":`true`,children:[U(`span`,{}),U(`span`,{}),U(`span`,{})]}),e?U(`span`,{class:`whoo-widget-pending-text`,children:`Looking that up for you…`}):null]})}function qe({url:e,alt:t}){let[n,r]=z(!1);return n?null:U(`img`,{class:`whoo-widget-empty-state-image`,src:e,alt:t,referrerpolicy:`no-referrer`,onError:()=>r(!0)})}function Je({message:e,feedbackState:t,pending:n,isSlowResponse:r,onThumbsUp:i,onThumbsDown:a,onSubmitDetailed:o,onCancelFeedback:s}){let c=V(null),l=e.id;return U(`div`,{ref:c,tabIndex:-1,class:`whoo-widget-message whoo-widget-message--${e.role}`,children:[n?U(Ke,{isSlowResponse:r}):Ue(e.content),e.role===`assistant`&&l?U(Ge,{state:t,containerRef:c,onThumbsUp:()=>i(l),onThumbsDown:()=>a(l),onSubmitDetailed:(e,t)=>o(l,e,t),onCancel:()=>s(l)}):null]})}function Ye({messages:e,messageFeedback:t,lastCompletedMessageText:n,emptyStateImage:r,isStreaming:i=!1,isSlowResponse:a=!1,onThumbsUp:o,onThumbsDown:s,onSubmitDetailed:c,onCancelFeedback:l}){let u=V(null);return B(()=>{let e=u.current;e&&(e.scrollTop=e.scrollHeight)},[e,a]),U(C,{children:[U(`div`,{class:`whoo-widget-message-list`,ref:u,children:[r?U(qe,{...r}):null,e.map((n,r)=>U(Je,{message:n,feedbackState:n.id?t[n.id]??{status:`idle`}:{status:`idle`},pending:i&&r===e.length-1&&n.role===`assistant`&&n.content===``,isSlowResponse:a,onThumbsUp:o,onThumbsDown:s,onSubmitDetailed:c,onCancelFeedback:l},n.id??r))]}),U(`div`,{class:`whoo-widget-sr-only`,"aria-live":`polite`,"aria-atomic":`true`,children:n??``})]})}var Xe=`button:not(:disabled), [href], input:not(:disabled), select:not(:disabled), textarea:not(:disabled), [tabindex]:not([tabindex="-1"])`;function Ze(e){return Array.from(e.querySelectorAll(Xe)).filter(e=>{let t=getComputedStyle(e);return t.display!==`none`&&t.visibility!==`hidden`})}function Qe({state:e,controller:t,greeting:n}){let r=V(null),i=V(null);B(()=>{i.current?.focus()},[]);let a=e=>{if(e.key===`Escape`){t.close();return}if(e.key!==`Tab`)return;let n=r.current;if(!n)return;let i=Ze(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())},o=()=>{let n=e.draft.trim();n&&!e.isStreaming&&(t.setDraft(``),t.sendMessage(n))},s=`Chat with ${e.agentName??(t.config.name?.trim()||`Aiden`)}`,c=e.messages.length===0&&n?[{role:`assistant`,content:n,id:null}]:e.messages,l=t.emptyStateImageUrl,u=e.messages.length===0&&l?{url:l,alt:t.emptyStateImageAlt}:void 0;return U(`div`,{class:`whoo-widget-panel`,role:`dialog`,"aria-modal":`true`,"aria-label":s,ref:r,onKeyDown:a,children:[U(`div`,{class:`whoo-widget-header`,children:[U(`h2`,{class:`whoo-widget-header-title`,children:s}),U(`div`,{class:`whoo-widget-header-actions`,children:[e.messages.length>0&&U(`button`,{type:`button`,class:`whoo-widget-header-reset`,onClick:()=>t.resetConversation(),children:`New conversation`}),U(`button`,{type:`button`,class:`whoo-widget-header-close`,"aria-label":`Close chat`,onClick:()=>t.close(),children:U(Ne,{})})]})]}),U(Ye,{messages:c,messageFeedback:e.messageFeedback,lastCompletedMessageText:e.lastCompletedMessageText,emptyStateImage:u,isStreaming:e.isStreaming,isSlowResponse:e.isSlowResponse,onThumbsUp:e=>t.submitFeedback(e,`up`),onThumbsDown:e=>t.expandFeedback(e),onSubmitDetailed:(e,n,r)=>t.submitFeedback(e,`down`,n||void 0,r||void 0),onCancelFeedback:e=>t.cancelFeedback(e)}),e.runtimeError&&U(ze,{message:e.runtimeError}),U(Re,{value:e.draft,onChange:e=>t.setDraft(e),onSend:o,disabled:e.isStreaming,inputRef:i})]})}function $e({controller:e}){let[t,n]=z(e.getState()),r=V(null),i=V(t.isOpen);return B(()=>(n(e.getState()),e.subscribe(n)),[e]),B(()=>{i.current&&!t.isOpen&&r.current?.focus(),i.current=t.isOpen},[t.isOpen]),t.initError?null:U(C,{children:[U(Le,{isOpen:t.isOpen,onClick:()=>t.isOpen?e.close():e.open(),iconUrl:e.launcherIconUrl,buttonRef:r}),t.isOpen&&U(Qe,{state:t,controller:e,greeting:e.config.greeting})]})}var et=class extends Error{status;constructor(e,t){super(e),this.name=`WidgetApiError`,this.status=t}};function tt(e){if(typeof e!=`string`)return null;let t=e.trim();return t===``?null:t}async function nt(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 et(`Failed to create widget session (${n.status})`,n.status);let r=await n.json();return{token:r.token,primaryColor:r.primary_color??null,name:tt(r.name),accentColor:tt(r.accent_color),inkColor:tt(r.ink_color)}}async function rt(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 et(`Feedback submission failed (${r.status})`,r.status)}async function*it(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 et(`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(`
|
|
1
|
+
var whooAidenWidget=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});function t(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 n,r,i,a,o,s,c,l,u,d,f,p,m,h,g={},_=[],v=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,y=Array.isArray;function b(e,t){for(var n in t)e[n]=t[n];return e}function x(e){e&&e.parentNode&&e.parentNode.removeChild(e)}function S(e,t,r){var i,a,o,s={};for(o in t)o==`key`?i=t[o]:o==`ref`?a=t[o]:s[o]=t[o];if(arguments.length>2&&(s.children=arguments.length>3?n.call(arguments,2):r),typeof e==`function`&&e.defaultProps!=null)for(o in e.defaultProps)s[o]===void 0&&(s[o]=e.defaultProps[o]);return C(e,s,i,a,null)}function C(e,t,n,a,o){var s={type:e,props:t,key:n,ref:a,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:o??++i,__i:-1,__u:0};return o==null&&r.vnode!=null&&r.vnode(s),s}function w(e){return e.children}function T(e,t){this.props=e,this.context=t}function E(e,t){if(t==null)return e.__?E(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`?E(e):null}function D(e){if(e.__P&&e.__d){var t=e.__v,n=t.__e,i=[],a=[],o=b({},t);o.__v=t.__v+1,r.vnode&&r.vnode(o),re(e.__P,o,t,e.__n,e.__P.namespaceURI,32&t.__u?[n]:null,i,n??E(t),!!(32&t.__u),a),o.__v=t.__v,o.__.__k[o.__i]=o,ae(i,o,a),t.__e=t.__=null,o.__e!=n&&O(o)}}function O(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}),O(e)}function k(e){(!e.__d&&(e.__d=!0)&&a.push(e)&&!A.__r++||o!=r.debounceRendering)&&((o=r.debounceRendering)||s)(A)}function A(){try{for(var e,t=1;a.length;)a.length>t&&a.sort(c),e=a.shift(),t=a.length,D(e)}finally{a.length=A.__r=0}}function ee(e,t,n,r,i,a,o,s,c,l,u){var d,f,p,m,h,v,y=r&&r.__k||_,b=t.length;for(c=te(n,t,y,c,b),d=0;d<b;d++)(p=n.__k[d])!=null&&(f=p.__i!=-1&&y[p.__i]||g,p.__i=d,v=re(e,p,f,i,a,o,s,c,l,u),m=p.__e,p.ref&&f.ref!=p.ref&&(f.ref&&ce(f.ref,null,p),u.push(p.ref,p.__c||m,p)),h==null&&m!=null&&(h=m),4&p.__u?(c=j(p,c,e),f.__e&&(f.__e=null)):typeof p.type==`function`&&v!==void 0?c=v:m&&(c=m.nextSibling),p.__u&=-7);return n.__e=h,c}function te(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]=C(null,o,null,null,null):y(o)?o=e.__k[a]=C(w,{children:o},null,null,null):o.constructor===void 0&&o.__b>0?o=e.__k[a]=C(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=M(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=E(s)),le(s,s));return r}function j(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=j(r[i],t,n));return t}e.__e!=t&&(t&&e.type&&!t.parentNode&&(t=E(e)),t=n.insertBefore(e.__e,t||null));do t&&=t.nextSibling;while(t!=null&&t.nodeType==8);return t}function M(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 N(e,t,n){t[0]==`-`?e.setProperty(t,n??``):e[t]=n==null?``:typeof n!=`number`||v.test(t)?n:n+`px`}function P(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||N(e.style,t,``);if(n)for(t in n)r&&n[t]==r[t]||N(e.style,t,n[t])}}else if(t[0]==`o`&&t[1]==`n`)a=t!=(t=t.replace(f,`$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[d]=r[d]:(n[d]=p,e.addEventListener(t,a?h:m,a)):e.removeEventListener(t,a?h:m,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 ne(e){return function(t){if(this.l){var n=this.l[t.type+e];if(t[u]==null)t[u]=p++;else if(t[u]<n[d])return;return n(r.event?r.event(t):t)}}}function re(e,t,n,i,a,o,s,c,l,u){var d,f,p,m,h,g,v,S,C,D,O,k,A,te,j,M,N=t.type;if(t.constructor!==void 0)return null;128&n.__u&&(l=!!(32&n.__u),o=[c=t.__e=n.__e]),(d=r.__b)&&d(t);n:if(typeof N==`function`){f=s.length;try{if(C=t.props,D=N.prototype&&N.prototype.render,O=(d=N.contextType)&&i[d.__c],k=d?O?O.props.value:d.__:i,n.__c?S=(p=t.__c=n.__c).__=p.__E:(D?t.__c=p=new N(C,k):(t.__c=p=new T(C,k),p.constructor=N,p.render=ue),O&&O.sub(p),p.state||(p.state={}),p.__n=i,m=p.__d=!0,p.__h=[],p._sb=[]),D&&p.__s==null&&(p.__s=p.state),D&&N.getDerivedStateFromProps!=null&&(p.__s==p.state&&(p.__s=b({},p.__s)),b(p.__s,N.getDerivedStateFromProps(C,p.__s))),h=p.props,g=p.state,p.__v=t,m)D&&N.getDerivedStateFromProps==null&&p.componentWillMount!=null&&p.componentWillMount(),D&&p.componentDidMount!=null&&p.__h.push(p.componentDidMount);else{if(D&&N.getDerivedStateFromProps==null&&C!==h&&p.componentWillReceiveProps!=null&&p.componentWillReceiveProps(C,k),t.__v==n.__v||!p.__e&&p.shouldComponentUpdate!=null&&!1===p.shouldComponentUpdate(C,p.__s,k)){t.__v!=n.__v&&(p.props=C,p.state=p.__s,p.__d=!1),t.__e=n.__e,t.__k=n.__k,t.__k.some(function(e){e&&(e.__=t)}),_.push.apply(p.__h,p._sb),p._sb=[],p.__h.length&&s.push(p),c=E(n);break n}p.componentWillUpdate!=null&&p.componentWillUpdate(C,p.__s,k),D&&p.componentDidUpdate!=null&&p.__h.push(function(){p.componentDidUpdate(h,g,v)})}if(p.context=k,p.props=C,p.__P=e,p.__e=!1,A=r.__r,te=0,D)p.state=p.__s,p.__d=!1,A&&A(t),d=p.render(p.props,p.state,p.context),_.push.apply(p.__h,p._sb),p._sb=[];else do p.__d=!1,A&&A(t),d=p.render(p.props,p.state,p.context),p.state=p.__s;while(p.__d&&++te<25);p.state=p.__s,p.getChildContext!=null&&(i=b(b({},i),p.getChildContext())),D&&!m&&p.getSnapshotBeforeUpdate!=null&&(v=p.getSnapshotBeforeUpdate(h,g)),j=d!=null&&d.type===w&&d.key==null?oe(d.props.children):d,c=ee(e,y(j)?j:[j],t,n,i,a,o,s,c,l,u),p.base=t.__e,t.__u&=-161,p.__h.length&&s.push(p),S&&(p.__E=p.__=null)}catch(e){if(s.length=f,t.__v=null,l||o!=null){if(e.then){for(t.__u|=l?160:128;c&&c.nodeType==8&&c.nextSibling;)c=c.nextSibling;o!=null&&(o[o.indexOf(c)]=null),t.__e=c}else if(o!=null)for(M=o.length;M--;)x(o[M])}else t.__e=n.__e;t.__k??=n.__k||[],e.then||ie(t),r.__e(e,t,n)}}else o==null&&t.__v==n.__v?(t.__k=n.__k,t.__e=n.__e):c=t.__e=se(n.__e,t,n,i,a,o,s,l,u);return(d=r.diffed)&&d(t),128&t.__u?void 0:c}function ie(e){e&&(e.__c&&(e.__c.__e=!0),e.__k&&e.__k.some(ie))}function ae(e,t,n){for(var i=0;i<n.length;i++)ce(n[i],n[++i],n[++i]);r.__c&&r.__c(t,e),e.some(function(t){try{e=t.__h,t.__h=[],e.some(function(e){e.call(t)})}catch(e){r.__e(e,t.__v)}})}function oe(e){return typeof e!=`object`||!e||e.__b>0?e:y(e)?e.map(oe):e.constructor===void 0?b({},e):null}function se(e,t,i,a,o,s,c,l,u){var d,f,p,m,h,_,v,b=i.props||g,S=t.props,C=t.type;if(C==`svg`?o=`http://www.w3.org/2000/svg`:C==`math`?o=`http://www.w3.org/1998/Math/MathML`:o||=`http://www.w3.org/1999/xhtml`,s!=null){for(d=0;d<s.length;d++)if((h=s[d])&&`setAttribute`in h==!!C&&(C?h.localName==C:h.nodeType==3)){e=h,s[d]=null;break}}if(e==null){if(C==null)return document.createTextNode(S);e=document.createElementNS(o,C,S.is&&S),l&&=(r.__m&&r.__m(t,s),!1),s=null}if(C==null)b===S||l&&e.data==S||(e.data=S);else{if(s=C==`textarea`&&S.defaultValue!=null?null:s&&n.call(e.childNodes),!l&&s!=null)for(b={},d=0;d<e.attributes.length;d++)b[(h=e.attributes[d]).name]=h.value;for(d in b)h=b[d],d==`dangerouslySetInnerHTML`?p=h:d==`children`||d in S||d==`value`&&`defaultValue`in S||d==`checked`&&`defaultChecked`in S||P(e,d,null,h,o);for(d in S)h=S[d],d==`children`?m=h:d==`dangerouslySetInnerHTML`?f=h:d==`value`?_=h:d==`checked`?v=h:l&&typeof h!=`function`||b[d]===h||P(e,d,h,b[d],o);if(f)l||p&&(f.__html==p.__html||f.__html==e.innerHTML)||(e.innerHTML=f.__html),t.__k=[];else if(p&&(e.innerHTML=``),ee(t.type==`template`?e.content:e,y(m)?m:[m],t,i,a,C==`foreignObject`?`http://www.w3.org/1999/xhtml`:o,s,c,s?s[0]:i.__k&&E(i,0),l,u),s!=null)for(d=s.length;d--;)x(s[d]);l&&C!=`textarea`||(d=`value`,C==`progress`&&_==null?e.removeAttribute(`value`):_!=null&&(_!==e[d]||C==`progress`&&!_||C==`option`&&_!=b[d])&&P(e,d,_,b[d],o),d=`checked`,v!=null&&v!=e[d]&&P(e,d,v,b[d],o))}return e}function ce(e,t,n){try{if(typeof e==`function`){var i=typeof e.__u==`function`;i&&e.__u(),i&&t==null||(e.__u=e(t))}else e.current=t}catch(e){r.__e(e,n)}}function le(e,t,n){var i,a;if(r.unmount&&r.unmount(e),(i=e.ref)&&(i.current&&i.current!=e.__e||ce(i,null,t)),(i=e.__c)!=null){if(i.componentWillUnmount)try{i.componentWillUnmount()}catch(e){r.__e(e,t)}i.base=i.__P=i.__n=null}if(i=e.__k)for(a=0;a<i.length;a++)i[a]&&le(i[a],t,n||typeof e.type!=`function`);n||x(e.__e),e.__c=e.__=e.__e=void 0}function ue(e,t,n){return this.constructor(e,n)}function de(e,t,i){var a,o,s,c;t==document&&(t=document.documentElement),r.__&&r.__(e,t),o=(a=typeof i==`function`)?null:i&&i.__k||t.__k,s=[],c=[],re(t,e=(!a&&i||t).__k=S(w,null,[e]),o||g,g,t.namespaceURI,!a&&i?[i]:o?null:t.firstChild?n.call(t.childNodes):null,s,!a&&i?i:o?o.__e:t.firstChild,a,c),ae(s,e,c),e.props.children=null}n=_.slice,r={__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}},i=0,T.prototype.setState=function(e,t){var n=this.__s!=null&&this.__s!=this.state?this.__s:this.__s=b({},this.state);typeof e==`function`&&(e=e(b({},n),this.props)),e&&b(n,e),e!=null&&this.__v&&(t&&this._sb.push(t),k(this))},T.prototype.forceUpdate=function(e){this.__v&&(this.__e=!0,e&&this.__h.push(e),k(this))},T.prototype.render=w,a=[],s=typeof Promise==`function`?Promise.prototype.then.bind(Promise.resolve()):setTimeout,c=function(e,t){return e.__v.__b-t.__v.__b},A.__r=0,l=Math.random().toString(8),u=`__d`+l,d=`__a`+l,f=/(PointerCapture)$|Capture$/i,p=0,m=ne(!1),h=ne(!0);var F,I,fe,pe,L=0,me=[],R=r,he=R.__b,ge=R.__r,_e=R.diffed,ve=R.__c,ye=R.unmount,be=R.__;function xe(e,t){R.__h&&R.__h(I,e,L||t),L=0;var n=I.__H||(I.__H={__:[],__h:[]});return e>=n.__.length&&n.__.push({}),n.__[e]}function z(e){return L=1,Se(ke,e)}function Se(e,t,n){var r=xe(F++,2);if(r.t=e,!r.__c&&(r.__=[n?n(t):ke(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=I,!I.__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};I.__f=!0;var a=I.shouldComponentUpdate,o=I.componentWillUpdate;I.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)},I.shouldComponentUpdate=i}return r.__N||r.__}function B(e,t){var n=xe(F++,3);!R.__s&&Oe(n.__H,t)&&(n.__=e,n.u=t,I.__H.__h.push(n))}function V(e){return L=5,Ce(function(){return{current:e}},[])}function Ce(e,t){var n=xe(F++,7);return Oe(n.__H,t)&&(n.__=e(),n.__H=t,n.__h=e),n.__}function we(){for(var e;e=me.shift();){var t=e.__H;if(e.__P&&t)try{t.__h.some(H),t.__h.some(De),t.__h=[]}catch(n){t.__h=[],R.__e(n,e.__v)}}}R.__b=function(e){I=null,he&&he(e)},R.__=function(e,t){e&&t.__k&&t.__k.__m&&(e.__m=t.__k.__m),be&&be(e,t)},R.__r=function(e){ge&&ge(e),F=0;var t=(I=e.__c).__H;t&&(fe===I?(t.__h=[],I.__h=[],t.__.some(function(e){e.__N&&(e.__=e.__N),e.u=e.__N=void 0})):(t.__h.some(H),t.__h.some(De),t.__h=[],F=0)),fe=I},R.diffed=function(e){_e&&_e(e);var t=e.__c;t&&t.__H&&(t.__H.__h.length&&(me.push(t)!==1&&pe===R.requestAnimationFrame||((pe=R.requestAnimationFrame)||Ee)(we)),t.__H.__.some(function(e){e.u&&=(e.__H=e.u,void 0)})),fe=I=null},R.__c=function(e,t){t.some(function(e){try{e.__h.some(H),e.__h=e.__h.filter(function(e){return!e.__||De(e)})}catch(n){t.some(function(e){e.__h&&=[]}),t=[],R.__e(n,e.__v)}}),ve&&ve(e,t)},R.unmount=function(e){ye&&ye(e);var t,n=e.__c;n&&n.__H&&(n.__H.__.some(function(e){try{H(e)}catch(e){t=e}}),n.__H=void 0,t&&R.__e(t,n.__v))};var Te=typeof requestAnimationFrame==`function`;function Ee(e){var t,n=function(){clearTimeout(r),Te&&cancelAnimationFrame(t),setTimeout(e)},r=setTimeout(n,35);Te&&(t=requestAnimationFrame(n))}function H(e){var t=I,n=e.__c;typeof n==`function`&&(e.__c=void 0,n()),I=t}function De(e){var t=I;e.__c=e.__(),I=t}function Oe(e,t){return!e||e.length!==t.length||t.some(function(t,n){return t!==e[n]})}function ke(e,t){return typeof t==`function`?t(e):t}var Ae=0;Array.isArray;function U(e,t,n,i,a,o){t||={};var s,c,l=t;if(`ref`in l)for(c in l={},t)c==`ref`?s=t[c]:l[c]=t[c];var u={type:e,props:l,key:n,ref:s,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:--Ae,__i:-1,__u:0,__source:a,__self:o};if(typeof e==`function`&&(s=e.defaultProps))for(c in s)l[c]===void 0&&(l[c]=s[c]);return r.vnode&&r.vnode(u),u}function W({name:e,size:t,children:n}){return U(`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 je({size:e=26}){return U(W,{name:`chat`,size:e,children:[U(`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`}),U(`path`,{d:`M8.5 9.5h.01M12 9.5h.01M15.5 9.5h.01`,"stroke-width":`2.5`})]})}function Me({size:e=26}){return U(W,{name:`chevron-down`,size:e,children:U(`path`,{d:`M6 9l6 6 6-6`})})}function Ne({size:e=18}){return U(W,{name:`close`,size:e,children:U(`path`,{d:`M6 6l12 12M18 6L6 18`})})}var Pe=`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 Fe({size:e=16}){return U(W,{name:`thumb-up`,size:e,children:U(`path`,{d:Pe})})}function Ie({size:e=16}){return U(W,{name:`thumb-down`,size:e,children:U(`path`,{d:Pe,transform:`matrix(1 0 0 -1 0 24)`})})}function Le({isOpen:e,onClick:t,iconUrl:n,buttonRef:r}){let[i,a]=z(`loading`),o=n!==void 0&&i!==`failed`,s=o&&!e&&i===`loaded`;return U(`button`,{type:`button`,class:`whoo-widget-launcher`,onClick:t,"aria-label":e?`Close chat`:`Open chat`,ref:r,children:[e?U(Me,{}):s?null:U(je,{}),o?U(`img`,{class:`whoo-widget-launcher-icon-image`,src:n,alt:``,referrerpolicy:`no-referrer`,hidden:!s,onLoad:()=>a(`loaded`),onError:()=>a(`failed`)}):null]})}function Re({value:e,onChange:t,onSend:n,disabled:r,inputRef:i}){return U(`div`,{class:`whoo-widget-composer`,children:[U(`label`,{class:`whoo-widget-sr-only`,for:`whoo-widget-composer-input`,children:`Message`}),U(`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()}}),U(`button`,{type:`button`,class:`whoo-widget-composer-send`,onClick:n,disabled:r,children:`Send`})]})}function ze({message:e}){return U(`div`,{class:`whoo-widget-error-banner`,role:`alert`,children:e})}var G=/\[([^\]]+)\]\((https?:\/\/[^\s)]+)\)/y,K=/\*\*([^*\s](?:[^*]*[^*\s])?)\*\*/y,q=/(?<![A-Za-z0-9_])_([^_\s](?:[^_]*[^_\s])?)_(?![A-Za-z0-9_])/y,J=/\*([^*\s](?:[^*]*[^*\s])?)\*/y,Y=/[ \t]*[*+-][ \t]+/y,Be=/https?:\/\/\S+/y,Ve=/[.,;:!?)\]}>]+$/;function He(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
|
+
`)&&(Y.lastIndex=n,Y.exec(e))){i(n),t.push({type:`text`,value:`• `,start:n,end:Y.lastIndex}),n=Y.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]!==`!`){G.lastIndex=n;let a=G.exec(e);if(a){i(n),t.push({type:`link`,text:a[1],url:a[2],start:n,end:G.lastIndex}),n=G.lastIndex,r=n;continue}}K.lastIndex=n;let a=K.exec(e);if(a){i(n),t.push({type:`bold`,value:a[1],start:n,end:K.lastIndex}),n=K.lastIndex,r=n;continue}q.lastIndex=n;let o=q.exec(e);if(o){i(n),t.push({type:`italic`,value:o[1],start:n,end:q.lastIndex}),n=q.lastIndex,r=n;continue}J.lastIndex=n;let s=J.exec(e);if(s){i(n),t.push({type:`italic`,value:s[1],start:n,end:J.lastIndex}),n=J.lastIndex,r=n;continue}Be.lastIndex=n;let c=Be.exec(e);if(c){let e=c[0].match(Ve),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}function Ue(e){return He(e).map((e,t)=>{switch(e.type){case`bold`:return U(`strong`,{children:Ue(e.value)},t);case`italic`:return U(`em`,{children:Ue(e.value)},t);case`link`:return U(`a`,{href:e.url,target:`_blank`,rel:`noopener noreferrer`,children:[e.text,U(`span`,{class:`whoo-widget-sr-only`,children:` (opens in new tab)`})]},t);default:return e.value}})}var We=[{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 Ge({state:e,containerRef:t,onThumbsUp:n,onThumbsDown:r,onSubmitDetailed:i,onCancel:a}){let[o,s]=z(``),[c,l]=z(``),u=V(e.status);if(B(()=>{let n=u.current;if(u.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===`submitted`)return U(`div`,{class:`whoo-widget-feedback-submitted`,role:`status`,children:`Thanks for the feedback`});if(e.status===`expanded`)return U(`div`,{class:`whoo-widget-feedback-form`,children:[U(`label`,{children:[U(`span`,{class:`whoo-widget-sr-only`,children:`Additional feedback`}),U(`textarea`,{class:`whoo-widget-feedback-textarea`,value:o,onInput:e=>s(e.target.value),placeholder:`What was wrong? (optional)`})]}),U(`select`,{class:`whoo-widget-feedback-select`,"aria-label":`Feedback category`,value:c,onChange:e=>l(e.target.value),children:We.map(e=>U(`option`,{value:e.value,children:e.label},e.value))}),U(`div`,{class:`whoo-widget-feedback-form-buttons`,children:[U(`button`,{type:`button`,class:`whoo-widget-feedback-submit`,onClick:()=>i(o,c),children:`Submit`}),U(`button`,{type:`button`,class:`whoo-widget-feedback-cancel`,onClick:a,children:`Cancel`})]})]});let d=e.status===`submitting`;return U(`div`,{class:`whoo-widget-feedback`,children:[U(`div`,{class:`whoo-widget-feedback-buttons`,children:[U(`button`,{type:`button`,"aria-label":`Good response`,disabled:d,onClick:n,children:U(Fe,{})}),U(`button`,{type:`button`,"aria-label":`Bad response`,disabled:d,onClick:r,children:U(Ie,{})})]}),e.status===`error`?U(`div`,{class:`whoo-widget-feedback-error`,role:`status`,children:`Couldn't send feedback`}):null]})}function Ke({isSlowResponse:e}){return U(`div`,{class:`whoo-widget-pending`,role:`status`,children:[U(`span`,{class:`whoo-widget-typing`,"aria-hidden":`true`,children:[U(`span`,{}),U(`span`,{}),U(`span`,{})]}),e?U(`span`,{class:`whoo-widget-pending-text`,children:`Looking that up for you…`}):null]})}function qe({url:e,alt:t}){let[n,r]=z(!1);return n?null:U(`img`,{class:`whoo-widget-empty-state-image`,src:e,alt:t,referrerpolicy:`no-referrer`,onError:()=>r(!0)})}function Je({message:e,feedbackState:t,pending:n,isSlowResponse:r,onThumbsUp:i,onThumbsDown:a,onSubmitDetailed:o,onCancelFeedback:s}){let c=V(null),l=e.id;return U(`div`,{ref:c,tabIndex:-1,class:`whoo-widget-message whoo-widget-message--${e.role}`,children:[n?U(Ke,{isSlowResponse:r}):Ue(e.content),e.role===`assistant`&&l?U(Ge,{state:t,containerRef:c,onThumbsUp:()=>i(l),onThumbsDown:()=>a(l),onSubmitDetailed:(e,t)=>o(l,e,t),onCancel:()=>s(l)}):null]})}function Ye({messages:e,messageFeedback:t,lastCompletedMessageText:n,emptyStateImage:r,isStreaming:i=!1,isSlowResponse:a=!1,onThumbsUp:o,onThumbsDown:s,onSubmitDetailed:c,onCancelFeedback:l}){let u=V(null);return B(()=>{let e=u.current;e&&(e.scrollTop=e.scrollHeight)},[e,a]),U(w,{children:[U(`div`,{class:`whoo-widget-message-list`,ref:u,children:[r?U(qe,{...r}):null,e.map((n,r)=>U(Je,{message:n,feedbackState:n.id?t[n.id]??{status:`idle`}:{status:`idle`},pending:i&&r===e.length-1&&n.role===`assistant`&&n.content===``,isSlowResponse:a,onThumbsUp:o,onThumbsDown:s,onSubmitDetailed:c,onCancelFeedback:l},n.id??r))]}),U(`div`,{class:`whoo-widget-sr-only`,"aria-live":`polite`,"aria-atomic":`true`,children:n??``})]})}var Xe=`button:not(:disabled), [href], input:not(:disabled), select:not(:disabled), textarea:not(:disabled), [tabindex]:not([tabindex="-1"])`;function Ze(e){return Array.from(e.querySelectorAll(Xe)).filter(e=>{let t=getComputedStyle(e);return t.display!==`none`&&t.visibility!==`hidden`})}function Qe({state:e,controller:t,greeting:n}){let r=V(null),i=V(null);B(()=>{i.current?.focus()},[]);let a=e=>{if(e.key===`Escape`){t.close();return}if(e.key!==`Tab`)return;let n=r.current;if(!n)return;let i=Ze(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())},o=()=>{let n=e.draft.trim();n&&!e.isStreaming&&(t.setDraft(``),t.sendMessage(n))},s=`Chat with ${e.agentName??(t.config.name?.trim()||`Aiden`)}`,c=e.messages.length===0&&n?[{role:`assistant`,content:n,id:null}]:e.messages,l=t.emptyStateImageUrl,u=e.messages.length===0&&l?{url:l,alt:t.emptyStateImageAlt}:void 0;return U(`div`,{class:`whoo-widget-panel`,role:`dialog`,"aria-modal":`true`,"aria-label":s,ref:r,onKeyDown:a,children:[U(`div`,{class:`whoo-widget-header`,children:[U(`h2`,{class:`whoo-widget-header-title`,children:s}),U(`div`,{class:`whoo-widget-header-actions`,children:[e.messages.length>0&&U(`button`,{type:`button`,class:`whoo-widget-header-reset`,onClick:()=>t.resetConversation(),children:`New conversation`}),U(`button`,{type:`button`,class:`whoo-widget-header-close`,"aria-label":`Close chat`,onClick:()=>t.close(),children:U(Ne,{})})]})]}),U(Ye,{messages:c,messageFeedback:e.messageFeedback,lastCompletedMessageText:e.lastCompletedMessageText,emptyStateImage:u,isStreaming:e.isStreaming,isSlowResponse:e.isSlowResponse,onThumbsUp:e=>t.submitFeedback(e,`up`),onThumbsDown:e=>t.expandFeedback(e),onSubmitDetailed:(e,n,r)=>t.submitFeedback(e,`down`,n||void 0,r||void 0),onCancelFeedback:e=>t.cancelFeedback(e)}),e.runtimeError&&U(ze,{message:e.runtimeError}),U(Re,{value:e.draft,onChange:e=>t.setDraft(e),onSend:o,disabled:e.isStreaming,inputRef:i})]})}function $e({controller:e}){let[t,n]=z(e.getState()),r=V(null),i=V(t.isOpen);return B(()=>(n(e.getState()),e.subscribe(n)),[e]),B(()=>{i.current&&!t.isOpen&&r.current?.focus(),i.current=t.isOpen},[t.isOpen]),t.initError?null:U(w,{children:[U(Le,{isOpen:t.isOpen,onClick:()=>t.isOpen?e.close():e.open(),iconUrl:e.launcherIconUrl,buttonRef:r}),t.isOpen&&U(Qe,{state:t,controller:e,greeting:e.config.greeting})]})}var et=class extends Error{status;constructor(e,t){super(e),this.name=`WidgetApiError`,this.status=t}};function tt(e){if(typeof e!=`string`)return null;let t=e.trim();return t===``?null:t}async function nt(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 et(`Failed to create widget session (${n.status})`,n.status);let r=await n.json();return{token:r.token,primaryColor:r.primary_color??null,name:tt(r.name),accentColor:tt(r.accent_color),inkColor:tt(r.ink_color)}}async function rt(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 et(`Feedback submission failed (${r.status})`,r.status)}async function*it(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 et(`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(`
|
|
2
3
|
|
|
3
4
|
`);for(;n!==-1;){let e=c.slice(0,n);c=c.slice(n+2);let t=e.split(`
|
|
4
5
|
`).find(e=>e.startsWith(`data: `));t&&(yield at(JSON.parse(t.slice(6)))),n=c.indexOf(`
|
|
5
6
|
|
|
6
|
-
`)}}}function at(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 ot(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.`)}}var st=40,ct=120;function lt(e){let t=[];for(let n of He(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 ut(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 dt(e,t,n){let r=n?.wordIntervalMs??st,i=n?.tokenIntervalMs??ct,a=n?.signal,o=He(e),s=new Set(o.filter(e=>e.type!==`text`).map(e=>e.end)),c=ut(a),l=``;for(let n of lt(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 ft(e){return`whoo-aiden-widget:conversation:${e}`}function pt(e){try{return window.sessionStorage.getItem(ft(e))}catch{return null}}function mt(e,t){try{window.sessionStorage.setItem(ft(e),t)}catch{}}function ht(e){try{window.sessionStorage.removeItem(ft(e))}catch{}}var gt=8e3,_t=class{config;state;listeners=new Set;sessionToken=null;conversationId=null;storageIdentifier;activeRequestController=null;slowResponseTimer=null;prefersReducedMotion;launcherIconUrl;emptyStateImageUrl;emptyStateImageAlt;constructor(e){this.config=e,this.launcherIconUrl=ot(e.launcherIconUrl,`launcherIconUrl`),this.emptyStateImageUrl=ot(e.emptyStateImageUrl,`emptyStateImageUrl`),this.emptyStateImageAlt=typeof e.emptyStateImageAlt==`string`?e.emptyStateImageAlt.trim():``,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,lastCompletedMessageText: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 nt(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=pt(this.storageIdentifier)}open(){this.setState({isOpen:!0})}resetConversation(){this.activeRequestController?.abort(),this.activeRequestController=null,this.clearSlowResponse(),this.conversationId=null,ht(this.storageIdentifier),this.setState({messages:[],messageFeedback:{},runtimeError:null,isStreaming:!1,lastCompletedMessageText:null})}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});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 it(t,this.sessionToken,this.conversationId,e,a))if(n.type===`conversation_id`)this.conversationId=n.conversationId,mt(this.storageIdentifier,n.conversationId);else if(n.type===`delta`)this.clearSlowResponse(),n.verbatim&&!this.prefersReducedMotion?(await dt(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,mt(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({lastCompletedMessageText: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){this.setState({messageFeedback:{...this.state.messageFeedback,[e]:{status:`expanded`}}})}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 rt(i,this.sessionToken,{messageId:e,rating:t,correction:n,category:r}),this.setState({messageFeedback:{...this.state.messageFeedback,[e]:{status:`submitted`,rating:t}}})}catch(n){console.error(`[whoo-aiden-widget] feedback submission failed:`,n),this.setState({messageFeedback:{...this.state.messageFeedback,[e]:{status:`error`,rating:t}}})}}},vt=`: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-shrink:0;justify-content:space-between;align-items:center;gap:8px;padding:8px 8px 8px 16px;display:flex}.whoo-widget-header-title{color:var(--whoo-widget-ink,#111);text-overflow:ellipsis;white-space:nowrap;margin:0;font-size:15px;font-weight:600;overflow:hidden}.whoo-widget-header-actions{flex-shrink:0;align-items:center;gap:4px;display:flex}.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:100px;padding:12px;overflow-y:auto}.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{border-radius:8px;max-width:80%;margin-bottom:8px;padding:8px 12px}.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,LinkText)}.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:disabled,.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:#6b7280;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}`,yt=/^(inherit|initial|unset|revert|revert-layer)$|\bcurrentcolor\b|\b(var|env|attr|light-dark)\(/i;function Y(e){if(yt.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 bt(e){return Y(e)?.rgb??null}function X([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 Z(e,t){let n=Math.max(e,t),r=Math.min(e,t);return(n+.05)/(r+.05)}function xt(e){let t=bt(e);if(!t)return console.warn(`[whoo-aiden-widget] Could not parse color "${e}" for contrast calculation; defaulting to white text.`),`#ffffff`;let n=X(t);return Z(n,X([0,0,0]))>=Z(n,X([255,255,255]))?`#000000`:`#ffffff`}var Q=`#4f46e5`,St=`#ffffff`,Ct=`#f0f0f0`,wt=4.5;function $([e,t,n]){return`#${[e,t,n].map(e=>e.toString(16).padStart(2,`0`)).join(``)}`}function Tt(e,t=St){let n=bt(e),r=bt(t);if(!n||!r)return Q;let i=X(r),a=e=>Z(X(e),i)>=wt;if(a(n))return $(n);for(let e=.99;e>0;e-=.01){let t=n.map(t=>Math.round(t*e));if(a(t))return $(t)}return`#000000`}function Et(e,t,n=Q){let r=Y(t);r||=(console.warn(`[whoo-aiden-widget] Could not use "${t}" as the theme color; falling back to "${n}".`),Y(n));let i=r?$(r.rgb):Q;e.style.setProperty(`--whoo-widget-color`,i),e.style.setProperty(`--whoo-widget-text-on-color`,xt(i)),e.style.setProperty(`--whoo-widget-color-text`,Tt(i))}function Dt(e,{inkColor:t,accentColor:n}){let r=e=>{let t=e===null?null:Y(e);return t?Tt($(t.rgb),Ct):null},i=r(t),a=r(n);i&&e.style.setProperty(`--whoo-widget-ink`,i),a&&e.style.setProperty(`--whoo-widget-link-color`,a)}function Ot(e,t){Et(e,t.color??Q);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`)}function kt(e){let t=document.createElement(`div`);t.id=`whoo-aiden-widget-host`;let n=t.attachShadow({mode:`open`}),r=document.createElement(`style`);r.textContent=vt,n.appendChild(r);let i=document.createElement(`div`);n.appendChild(i),Ot(i,e);let a=new _t(e),o=null,s=``;return a.subscribe(t=>{t.primaryColor&&t.primaryColor!==o&&(o=t.primaryColor,Et(i,t.primaryColor,e.color));let n=`${t.inkColor}|${t.accentColor}`;(t.inkColor||t.accentColor)&&n!==s&&(s=n,Dt(i,{inkColor:t.inkColor,accentColor:t.accentColor}))}),de(U($e,{controller:a}),i),a.init(),document.body.appendChild(t),{unmount(){de(null,i),t.remove()}}}function At(e){return t(e),kt(e)}return e.init=At,e})({});
|
|
7
|
+
`)}}}function at(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 ot(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.`)}}var st=40,ct=120;function lt(e){let t=[];for(let n of He(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 ut(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 dt(e,t,n){let r=n?.wordIntervalMs??st,i=n?.tokenIntervalMs??ct,a=n?.signal,o=He(e),s=new Set(o.filter(e=>e.type!==`text`).map(e=>e.end)),c=ut(a),l=``;for(let n of lt(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 ft(e){return`whoo-aiden-widget:conversation:${e}`}function pt(e){try{return window.sessionStorage.getItem(ft(e))}catch{return null}}function mt(e,t){try{window.sessionStorage.setItem(ft(e),t)}catch{}}function ht(e){try{window.sessionStorage.removeItem(ft(e))}catch{}}var gt=8e3,_t=class{config;state;listeners=new Set;sessionToken=null;conversationId=null;storageIdentifier;activeRequestController=null;slowResponseTimer=null;prefersReducedMotion;launcherIconUrl;emptyStateImageUrl;emptyStateImageAlt;constructor(e){this.config=e,this.launcherIconUrl=ot(e.launcherIconUrl,`launcherIconUrl`),this.emptyStateImageUrl=ot(e.emptyStateImageUrl,`emptyStateImageUrl`),this.emptyStateImageAlt=typeof e.emptyStateImageAlt==`string`?e.emptyStateImageAlt.trim():``,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,lastCompletedMessageText: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 nt(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=pt(this.storageIdentifier)}open(){this.setState({isOpen:!0})}resetConversation(){this.activeRequestController?.abort(),this.activeRequestController=null,this.clearSlowResponse(),this.conversationId=null,ht(this.storageIdentifier),this.setState({messages:[],messageFeedback:{},runtimeError:null,isStreaming:!1,lastCompletedMessageText:null})}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});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 it(t,this.sessionToken,this.conversationId,e,a))if(n.type===`conversation_id`)this.conversationId=n.conversationId,mt(this.storageIdentifier,n.conversationId);else if(n.type===`delta`)this.clearSlowResponse(),n.verbatim&&!this.prefersReducedMotion?(await dt(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,mt(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({lastCompletedMessageText: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){this.setState({messageFeedback:{...this.state.messageFeedback,[e]:{status:`expanded`}}})}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 rt(i,this.sessionToken,{messageId:e,rating:t,correction:n,category:r}),this.setState({messageFeedback:{...this.state.messageFeedback,[e]:{status:`submitted`,rating:t}}})}catch(n){console.error(`[whoo-aiden-widget] feedback submission failed:`,n),this.setState({messageFeedback:{...this.state.messageFeedback,[e]:{status:`error`,rating:t}}})}}},vt=`: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-shrink:0;justify-content:space-between;align-items:center;gap:8px;padding:8px 8px 8px 16px;display:flex}.whoo-widget-header-title{color:var(--whoo-widget-ink,#111);text-overflow:ellipsis;white-space:nowrap;margin:0;font-size:15px;font-weight:600;overflow:hidden}.whoo-widget-header-actions{flex-shrink:0;align-items:center;gap:4px;display:flex}.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:100px;padding:12px;overflow-y:auto}.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{white-space:pre-line;border-radius:8px;max-width:80%;margin-bottom:8px;padding:8px 12px}.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:disabled,.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:#6b7280;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}`,yt=/^(inherit|initial|unset|revert|revert-layer)$|\bcurrentcolor\b|\b(var|env|attr|light-dark)\(/i;function bt(e){if(yt.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 xt(e){return bt(e)?.rgb??null}function X([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 St(e,t){let n=Math.max(e,t),r=Math.min(e,t);return(n+.05)/(r+.05)}function Ct(e){let t=xt(e);if(!t)return console.warn(`[whoo-aiden-widget] Could not parse color "${e}" for contrast calculation; defaulting to white text.`),`#ffffff`;let n=X(t);return St(n,X([0,0,0]))>=St(n,X([255,255,255]))?`#000000`:`#ffffff`}var Z=`#4f46e5`,wt=`#ffffff`,Tt=`#f0f0f0`,Et=4.5;function Dt([e,t,n]){return`#${[e,t,n].map(e=>e.toString(16).padStart(2,`0`)).join(``)}`}function Q(e,t=wt){let n=xt(e),r=xt(t);if(!n||!r)return Z;let i=X(r),a=e=>St(X(e),i)>=Et;if(a(n))return Dt(n);for(let e=.99;e>0;e-=.01){let t=n.map(t=>Math.round(t*e));if(a(t))return Dt(t)}return`#000000`}var Ot=`#111111`,kt=`#0000ee`;function $(e){if(!e)return null;let t=bt(e);return t?Dt(t.rgb):null}function At({color:e,inkColor:t,accentColor:n}){let r=$(e),i=r??Z,a=Q(i),o=$(t),s=o?Q(o,Tt):Ot,c=$(n),l=c?Q(c,Tt):kt;return{primary:i,textOnPrimary:Ct(i),primaryAsText:a,ink:s,link:l,adjusted:{primary:r!==null&&a!==i,ink:o!==null&&s!==o,link:c!==null&&l!==c}}}function jt(e,t,n=Z){let r=t;$(t)===null&&(console.warn(`[whoo-aiden-widget] Could not use "${t}" as the theme color; falling back to "${n}".`),r=n);let i=At({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 Mt(e,{inkColor:t,accentColor:n}){let r=At({inkColor:t,accentColor:n});e.style.setProperty(`--whoo-widget-ink`,r.ink),e.style.setProperty(`--whoo-widget-link-color`,r.link)}function Nt(e,t){e&&$(e)===null&&console.warn(`[whoo-aiden-widget] Could not use "${e}" as the ${t}; using the default.`)}function Pt(e,t){jt(e,t.color??Z),Nt(t.inkColor,`ink color`),Nt(t.accentColor,`accent color`),Mt(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`)}function Ft(e){let t=document.createElement(`div`);t.id=`whoo-aiden-widget-host`;let n=t.attachShadow({mode:`open`}),r=document.createElement(`style`);r.textContent=vt,n.appendChild(r);let i=document.createElement(`div`);n.appendChild(i),Pt(i,e);let a=new _t(e),o=null,s=``;return a.subscribe(t=>{t.primaryColor&&t.primaryColor!==o&&(o=t.primaryColor,jt(i,t.primaryColor,e.color));let n=`${t.inkColor}|${t.accentColor}`;(t.inkColor||t.accentColor)&&n!==s&&(s=n,Mt(i,{inkColor:$(t.inkColor)?t.inkColor:e.inkColor,accentColor:$(t.accentColor)?t.accentColor:e.accentColor}))}),de(U($e,{controller:a}),i),a.init(),document.body.appendChild(t),{unmount(){de(null,i),t.remove()}}}function It(e){return t(e),Ft(e)}return e.init=It,e})({});
|
package/dist/widget.js
CHANGED
|
@@ -69,13 +69,13 @@ function k() {
|
|
|
69
69
|
}
|
|
70
70
|
function ee(e, t, n, r, i, a, o, s, c, l, u) {
|
|
71
71
|
var d, f, p, m, _, v, y = r && r.__k || g, b = t.length;
|
|
72
|
-
for (c = A(n, t, y, c, b), d = 0; d < b; d++) (p = n.__k[d]) != null && (f = p.__i != -1 && y[p.__i] || h, p.__i = d, v = ne(e, p, f, i, a, o, s, c, l, u), m = p.__e, p.ref && f.ref != p.ref && (f.ref &&
|
|
72
|
+
for (c = A(n, t, y, c, b), d = 0; d < b; d++) (p = n.__k[d]) != null && (f = p.__i != -1 && y[p.__i] || h, p.__i = d, v = ne(e, p, f, i, a, o, s, c, l, u), m = p.__e, p.ref && f.ref != p.ref && (f.ref && se(f.ref, null, p), u.push(p.ref, p.__c || m, p)), _ == null && m != null && (_ = m), 4 & p.__u ? (c = j(p, c, e), f.__e && (f.__e = null)) : typeof p.type == "function" && v !== void 0 ? c = v : m && (c = m.nextSibling), p.__u &= -7);
|
|
73
73
|
return n.__e = _, c;
|
|
74
74
|
}
|
|
75
75
|
function A(e, t, n, r, i) {
|
|
76
76
|
var a, o, s, c, l, u = n.length, d = u, f = 0;
|
|
77
77
|
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] = S(null, o, null, null, null) : v(o) ? o = e.__k[a] = S(C, { children: o }, null, null, null) : o.constructor === void 0 && o.__b > 0 ? o = e.__k[a] = S(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 = M(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;
|
|
78
|
-
if (d) for (a = 0; a < u; a++) (s = n[a]) != null && !(2 & s.__u) && (s.__e == r && (r = T(s)),
|
|
78
|
+
if (d) for (a = 0; a < u; a++) (s = n[a]) != null && !(2 & s.__u) && (s.__e == r && (r = T(s)), ce(s, s));
|
|
79
79
|
return r;
|
|
80
80
|
}
|
|
81
81
|
function j(e, t, n) {
|
|
@@ -136,7 +136,7 @@ function ne(e, t, r, i, a, o, s, c, l, u) {
|
|
|
136
136
|
n: if (typeof P == "function") {
|
|
137
137
|
f = s.length;
|
|
138
138
|
try {
|
|
139
|
-
if (E = t.props, D = P.prototype && P.prototype.render, O = (d = P.contextType) && i[d.__c], k = d ? O ? O.props.value : d.__ : i, r.__c ? S = (p = t.__c = r.__c).__ = p.__E : (D ? t.__c = p = new P(E, k) : (t.__c = p = new w(E, k), p.constructor = P, p.render =
|
|
139
|
+
if (E = t.props, D = P.prototype && P.prototype.render, O = (d = P.contextType) && i[d.__c], k = d ? O ? O.props.value : d.__ : i, r.__c ? S = (p = t.__c = r.__c).__ = p.__E : (D ? t.__c = p = new P(E, k) : (t.__c = p = new w(E, k), p.constructor = P, p.render = le), O && O.sub(p), p.state || (p.state = {}), p.__n = i, m = p.__d = !0, p.__h = [], p._sb = []), D && p.__s == null && (p.__s = p.state), D && P.getDerivedStateFromProps != null && (p.__s == p.state && (p.__s = y({}, p.__s)), y(p.__s, P.getDerivedStateFromProps(E, p.__s))), h = p.props, _ = p.state, p.__v = t, m) D && P.getDerivedStateFromProps == null && p.componentWillMount != null && p.componentWillMount(), D && p.componentDidMount != null && p.__h.push(p.componentDidMount);
|
|
140
140
|
else {
|
|
141
141
|
if (D && P.getDerivedStateFromProps == null && E !== h && p.componentWillReceiveProps != null && p.componentWillReceiveProps(E, k), t.__v == r.__v || !p.__e && p.shouldComponentUpdate != null && !1 === p.shouldComponentUpdate(E, p.__s, k)) {
|
|
142
142
|
t.__v != r.__v && (p.props = E, p.state = p.__s, p.__d = !1), t.__e = r.__e, t.__k = r.__k, t.__k.some(function(e) {
|
|
@@ -169,7 +169,7 @@ function re(e) {
|
|
|
169
169
|
e && (e.__c && (e.__c.__e = !0), e.__k && e.__k.some(re));
|
|
170
170
|
}
|
|
171
171
|
function ie(e, t, r) {
|
|
172
|
-
for (var i = 0; i < r.length; i++)
|
|
172
|
+
for (var i = 0; i < r.length; i++) se(r[i], r[++i], r[++i]);
|
|
173
173
|
n.__c && n.__c(t, e), e.some(function(t) {
|
|
174
174
|
try {
|
|
175
175
|
e = t.__h, t.__h = [], e.some(function(e) {
|
|
@@ -206,7 +206,7 @@ function oe(e, r, i, a, o, s, c, l, u) {
|
|
|
206
206
|
}
|
|
207
207
|
return e;
|
|
208
208
|
}
|
|
209
|
-
function
|
|
209
|
+
function se(e, t, r) {
|
|
210
210
|
try {
|
|
211
211
|
if (typeof e == "function") {
|
|
212
212
|
var i = typeof e.__u == "function";
|
|
@@ -216,9 +216,9 @@ function F(e, t, r) {
|
|
|
216
216
|
n.__e(e, r);
|
|
217
217
|
}
|
|
218
218
|
}
|
|
219
|
-
function
|
|
219
|
+
function ce(e, t, r) {
|
|
220
220
|
var i, a;
|
|
221
|
-
if (n.unmount && n.unmount(e), (i = e.ref) && (i.current && i.current != e.__e ||
|
|
221
|
+
if (n.unmount && n.unmount(e), (i = e.ref) && (i.current && i.current != e.__e || se(i, null, t)), (i = e.__c) != null) {
|
|
222
222
|
if (i.componentWillUnmount) try {
|
|
223
223
|
i.componentWillUnmount();
|
|
224
224
|
} catch (e) {
|
|
@@ -226,13 +226,13 @@ function se(e, t, r) {
|
|
|
226
226
|
}
|
|
227
227
|
i.base = i.__P = i.__n = null;
|
|
228
228
|
}
|
|
229
|
-
if (i = e.__k) for (a = 0; a < i.length; a++) i[a] &&
|
|
229
|
+
if (i = e.__k) for (a = 0; a < i.length; a++) i[a] && ce(i[a], t, r || typeof e.type != "function");
|
|
230
230
|
r || b(e.__e), e.__c = e.__ = e.__e = void 0;
|
|
231
231
|
}
|
|
232
|
-
function
|
|
232
|
+
function le(e, t, n) {
|
|
233
233
|
return this.constructor(e, n);
|
|
234
234
|
}
|
|
235
|
-
function
|
|
235
|
+
function ue(e, r, i) {
|
|
236
236
|
var a, o, s, c;
|
|
237
237
|
r == document && (r = document.documentElement), n.__ && n.__(e, r), o = (a = typeof i == "function") ? null : i && i.__k || r.__k, s = [], c = [], ne(r, e = (!a && i || r).__k = x(C, null, [e]), o || h, h, r.namespaceURI, !a && i ? [i] : o ? null : r.firstChild ? t.call(r.childNodes) : null, s, !a && i ? i : o ? o.__e : r.firstChild, a, c), ie(s, e, c), e.props.children = null;
|
|
238
238
|
}
|
|
@@ -253,10 +253,10 @@ t = g.slice, n = { __e: function(e, t, n, r) {
|
|
|
253
253
|
}, k.__r = 0, c = Math.random().toString(8), l = "__d" + c, u = "__a" + c, d = /(PointerCapture)$|Capture$/i, f = 0, p = te(!1), m = te(!0);
|
|
254
254
|
//#endregion
|
|
255
255
|
//#region node_modules/.pnpm/preact@10.29.8/node_modules/preact/hooks/dist/hooks.module.js
|
|
256
|
-
var I, L,
|
|
256
|
+
var F, I, L, de, R = 0, fe = [], z = n, pe = z.__b, me = z.__r, he = z.diffed, ge = z.__c, _e = z.unmount, ve = z.__;
|
|
257
257
|
function ye(e, t) {
|
|
258
|
-
z.__h && z.__h(
|
|
259
|
-
var n =
|
|
258
|
+
z.__h && z.__h(I, e, R || t), R = 0;
|
|
259
|
+
var n = I.__H || (I.__H = {
|
|
260
260
|
__: [],
|
|
261
261
|
__h: []
|
|
262
262
|
});
|
|
@@ -266,11 +266,11 @@ function B(e) {
|
|
|
266
266
|
return R = 1, be(De, e);
|
|
267
267
|
}
|
|
268
268
|
function be(e, t, n) {
|
|
269
|
-
var r = ye(
|
|
269
|
+
var r = ye(F++, 2);
|
|
270
270
|
if (r.t = e, !r.__c && (r.__ = [n ? n(t) : De(void 0, t), function(e) {
|
|
271
271
|
var t = r.__N ? r.__N[0] : r.__[0], n = r.t(t, e);
|
|
272
272
|
t !== n && (r.__N = [n, r.__[1]], r.__c.setState({}));
|
|
273
|
-
}], r.__c =
|
|
273
|
+
}], r.__c = I, !I.__f)) {
|
|
274
274
|
var i = function(e, t, n) {
|
|
275
275
|
if (!r.__c.__H) return !0;
|
|
276
276
|
var i = !1, o = r.__c.props !== e;
|
|
@@ -286,21 +286,21 @@ function be(e, t, n) {
|
|
|
286
286
|
}
|
|
287
287
|
return !i || o;
|
|
288
288
|
};
|
|
289
|
-
|
|
290
|
-
var a =
|
|
291
|
-
|
|
289
|
+
I.__f = !0;
|
|
290
|
+
var a = I.shouldComponentUpdate, o = I.componentWillUpdate;
|
|
291
|
+
I.componentWillUpdate = function(e, t, n) {
|
|
292
292
|
if (this.__e) {
|
|
293
293
|
var r = a;
|
|
294
294
|
a = void 0, i(e, t, n), a = r;
|
|
295
295
|
}
|
|
296
296
|
o && o.call(this, e, t, n);
|
|
297
|
-
},
|
|
297
|
+
}, I.shouldComponentUpdate = i;
|
|
298
298
|
}
|
|
299
299
|
return r.__N || r.__;
|
|
300
300
|
}
|
|
301
301
|
function V(e, t) {
|
|
302
|
-
var n = ye(
|
|
303
|
-
!z.__s && Ee(n.__H, t) && (n.__ = e, n.u = t,
|
|
302
|
+
var n = ye(F++, 3);
|
|
303
|
+
!z.__s && Ee(n.__H, t) && (n.__ = e, n.u = t, I.__H.__h.push(n));
|
|
304
304
|
}
|
|
305
305
|
function H(e) {
|
|
306
306
|
return R = 5, xe(function() {
|
|
@@ -308,7 +308,7 @@ function H(e) {
|
|
|
308
308
|
}, []);
|
|
309
309
|
}
|
|
310
310
|
function xe(e, t) {
|
|
311
|
-
var n = ye(
|
|
311
|
+
var n = ye(F++, 7);
|
|
312
312
|
return Ee(n.__H, t) && (n.__ = e(), n.__H = t, n.__h = e), n.__;
|
|
313
313
|
}
|
|
314
314
|
function Se() {
|
|
@@ -322,21 +322,21 @@ function Se() {
|
|
|
322
322
|
}
|
|
323
323
|
}
|
|
324
324
|
z.__b = function(e) {
|
|
325
|
-
|
|
325
|
+
I = null, pe && pe(e);
|
|
326
326
|
}, z.__ = function(e, t) {
|
|
327
327
|
e && t.__k && t.__k.__m && (e.__m = t.__k.__m), ve && ve(e, t);
|
|
328
328
|
}, z.__r = function(e) {
|
|
329
|
-
me && me(e),
|
|
330
|
-
var t = (
|
|
331
|
-
t && (
|
|
329
|
+
me && me(e), F = 0;
|
|
330
|
+
var t = (I = e.__c).__H;
|
|
331
|
+
t && (L === I ? (t.__h = [], I.__h = [], t.__.some(function(e) {
|
|
332
332
|
e.__N && (e.__ = e.__N), e.u = e.__N = void 0;
|
|
333
|
-
})) : (t.__h.some(U), t.__h.some(Te), t.__h = [],
|
|
333
|
+
})) : (t.__h.some(U), t.__h.some(Te), t.__h = [], F = 0)), L = I;
|
|
334
334
|
}, z.diffed = function(e) {
|
|
335
335
|
he && he(e);
|
|
336
336
|
var t = e.__c;
|
|
337
337
|
t && t.__H && (t.__H.__h.length && (fe.push(t) !== 1 && de === z.requestAnimationFrame || ((de = z.requestAnimationFrame) || we)(Se)), t.__H.__.some(function(e) {
|
|
338
338
|
e.u &&= (e.__H = e.u, void 0);
|
|
339
|
-
})),
|
|
339
|
+
})), L = I = null;
|
|
340
340
|
}, z.__c = function(e, t) {
|
|
341
341
|
t.some(function(e) {
|
|
342
342
|
try {
|
|
@@ -368,12 +368,12 @@ function we(e) {
|
|
|
368
368
|
Ce && (t = requestAnimationFrame(n));
|
|
369
369
|
}
|
|
370
370
|
function U(e) {
|
|
371
|
-
var t =
|
|
372
|
-
typeof n == "function" && (e.__c = void 0, n()),
|
|
371
|
+
var t = I, n = e.__c;
|
|
372
|
+
typeof n == "function" && (e.__c = void 0, n()), I = t;
|
|
373
373
|
}
|
|
374
374
|
function Te(e) {
|
|
375
|
-
var t =
|
|
376
|
-
e.__c = e.__(),
|
|
375
|
+
var t = I;
|
|
376
|
+
e.__c = e.__(), I = t;
|
|
377
377
|
}
|
|
378
378
|
function Ee(e, t) {
|
|
379
379
|
return !e || e.length !== t.length || t.some(function(t, n) {
|
|
@@ -536,7 +536,7 @@ function Le({ message: e }) {
|
|
|
536
536
|
}
|
|
537
537
|
//#endregion
|
|
538
538
|
//#region src/markdown/tokenizer.ts
|
|
539
|
-
var K = /\[([^\]]+)\]\((https?:\/\/[^\s)]+)\)/y, q = /\*\*([^*]
|
|
539
|
+
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, Re = /https?:\/\/\S+/y, ze = /[.,;:!?)\]}>]+$/;
|
|
540
540
|
function Be(e) {
|
|
541
541
|
let t = [], n = 0, r = 0, i = (n) => {
|
|
542
542
|
n > r && t.push({
|
|
@@ -547,6 +547,15 @@ function Be(e) {
|
|
|
547
547
|
});
|
|
548
548
|
};
|
|
549
549
|
for (; n < e.length;) {
|
|
550
|
+
if ((n === 0 || e[n - 1] === "\n") && (X.lastIndex = n, X.exec(e))) {
|
|
551
|
+
i(n), t.push({
|
|
552
|
+
type: "text",
|
|
553
|
+
value: "• ",
|
|
554
|
+
start: n,
|
|
555
|
+
end: X.lastIndex
|
|
556
|
+
}), n = X.lastIndex, r = n;
|
|
557
|
+
continue;
|
|
558
|
+
}
|
|
550
559
|
if (e[n] === "!" && n + 1 < e.length && e[n + 1] === "[") {
|
|
551
560
|
let t = /!\[([^\]]*)\]\(([^)]*)\)/y;
|
|
552
561
|
t.lastIndex = n;
|
|
@@ -627,8 +636,8 @@ function Be(e) {
|
|
|
627
636
|
function Ve(e) {
|
|
628
637
|
return Be(e).map((e, t) => {
|
|
629
638
|
switch (e.type) {
|
|
630
|
-
case "bold": return /* @__PURE__ */ W("strong", { children: e.value }, t);
|
|
631
|
-
case "italic": return /* @__PURE__ */ W("em", { children: e.value }, t);
|
|
639
|
+
case "bold": return /* @__PURE__ */ W("strong", { children: Ve(e.value) }, t);
|
|
640
|
+
case "italic": return /* @__PURE__ */ W("em", { children: Ve(e.value) }, t);
|
|
632
641
|
case "link": return /* @__PURE__ */ W("a", {
|
|
633
642
|
href: e.url,
|
|
634
643
|
target: "_blank",
|
|
@@ -1274,8 +1283,8 @@ var mt = 8e3, ht = class {
|
|
|
1274
1283
|
} });
|
|
1275
1284
|
}
|
|
1276
1285
|
}
|
|
1277
|
-
}, gt = ":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-shrink:0;justify-content:space-between;align-items:center;gap:8px;padding:8px 8px 8px 16px;display:flex}.whoo-widget-header-title{color:var(--whoo-widget-ink,#111);text-overflow:ellipsis;white-space:nowrap;margin:0;font-size:15px;font-weight:600;overflow:hidden}.whoo-widget-header-actions{flex-shrink:0;align-items:center;gap:4px;display:flex}.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:100px;padding:12px;overflow-y:auto}.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{border-radius:8px;max-width:80%;margin-bottom:8px;padding:8px 12px}.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
|
|
1278
|
-
function
|
|
1286
|
+
}, gt = ":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-shrink:0;justify-content:space-between;align-items:center;gap:8px;padding:8px 8px 8px 16px;display:flex}.whoo-widget-header-title{color:var(--whoo-widget-ink,#111);text-overflow:ellipsis;white-space:nowrap;margin:0;font-size:15px;font-weight:600;overflow:hidden}.whoo-widget-header-actions{flex-shrink:0;align-items:center;gap:4px;display:flex}.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:100px;padding:12px;overflow-y:auto}.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{white-space:pre-line;border-radius:8px;max-width:80%;margin-bottom:8px;padding:8px 12px}.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:disabled,.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:#6b7280;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}", _t = /^(inherit|initial|unset|revert|revert-layer)$|\bcurrentcolor\b|\b(var|env|attr|light-dark)\(/i;
|
|
1287
|
+
function vt(e) {
|
|
1279
1288
|
if (_t.test(e.trim())) return null;
|
|
1280
1289
|
let t = document.createElement("div");
|
|
1281
1290
|
if (t.style.color = e, t.style.color === "") return null;
|
|
@@ -1295,8 +1304,8 @@ function X(e) {
|
|
|
1295
1304
|
translucent: a < 1
|
|
1296
1305
|
};
|
|
1297
1306
|
}
|
|
1298
|
-
function
|
|
1299
|
-
return
|
|
1307
|
+
function yt(e) {
|
|
1308
|
+
return vt(e)?.rgb ?? null;
|
|
1300
1309
|
}
|
|
1301
1310
|
function Z([e, t, n]) {
|
|
1302
1311
|
let r = (e) => {
|
|
@@ -1305,86 +1314,113 @@ function Z([e, t, n]) {
|
|
|
1305
1314
|
};
|
|
1306
1315
|
return .2126 * r(e) + .7152 * r(t) + .0722 * r(n);
|
|
1307
1316
|
}
|
|
1308
|
-
function
|
|
1317
|
+
function bt(e, t) {
|
|
1309
1318
|
let n = Math.max(e, t), r = Math.min(e, t);
|
|
1310
1319
|
return (n + .05) / (r + .05);
|
|
1311
1320
|
}
|
|
1312
|
-
function
|
|
1313
|
-
let t =
|
|
1321
|
+
function xt(e) {
|
|
1322
|
+
let t = yt(e);
|
|
1314
1323
|
if (!t) return console.warn(`[whoo-aiden-widget] Could not parse color "${e}" for contrast calculation; defaulting to white text.`), "#ffffff";
|
|
1315
1324
|
let n = Z(t);
|
|
1316
|
-
return
|
|
1325
|
+
return bt(n, Z([
|
|
1317
1326
|
0,
|
|
1318
1327
|
0,
|
|
1319
1328
|
0
|
|
1320
|
-
])) >=
|
|
1329
|
+
])) >= bt(n, Z([
|
|
1321
1330
|
255,
|
|
1322
1331
|
255,
|
|
1323
1332
|
255
|
|
1324
1333
|
])) ? "#000000" : "#ffffff";
|
|
1325
1334
|
}
|
|
1326
|
-
var Q = "#4f46e5",
|
|
1327
|
-
function
|
|
1335
|
+
var Q = "#4f46e5", St = "#ffffff", Ct = "#f0f0f0", wt = 4.5;
|
|
1336
|
+
function Tt([e, t, n]) {
|
|
1328
1337
|
return `#${[
|
|
1329
1338
|
e,
|
|
1330
1339
|
t,
|
|
1331
1340
|
n
|
|
1332
1341
|
].map((e) => e.toString(16).padStart(2, "0")).join("")}`;
|
|
1333
1342
|
}
|
|
1334
|
-
function
|
|
1335
|
-
let n =
|
|
1343
|
+
function Et(e, t = St) {
|
|
1344
|
+
let n = yt(e), r = yt(t);
|
|
1336
1345
|
if (!n || !r) return Q;
|
|
1337
|
-
let i = Z(r), a = (e) =>
|
|
1338
|
-
if (a(n)) return
|
|
1346
|
+
let i = Z(r), a = (e) => bt(Z(e), i) >= wt;
|
|
1347
|
+
if (a(n)) return Tt(n);
|
|
1339
1348
|
for (let e = .99; e > 0; e -= .01) {
|
|
1340
1349
|
let t = n.map((t) => Math.round(t * e));
|
|
1341
|
-
if (a(t)) return
|
|
1350
|
+
if (a(t)) return Tt(t);
|
|
1342
1351
|
}
|
|
1343
1352
|
return "#000000";
|
|
1344
1353
|
}
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
|
|
1348
|
-
let
|
|
1349
|
-
|
|
1354
|
+
var Dt = "#111111", Ot = "#0000ee";
|
|
1355
|
+
function $(e) {
|
|
1356
|
+
if (!e) return null;
|
|
1357
|
+
let t = vt(e);
|
|
1358
|
+
return t ? Tt(t.rgb) : null;
|
|
1350
1359
|
}
|
|
1351
|
-
function
|
|
1352
|
-
let r = (e)
|
|
1353
|
-
|
|
1354
|
-
|
|
1355
|
-
|
|
1356
|
-
|
|
1360
|
+
function kt({ color: e, inkColor: t, accentColor: n }) {
|
|
1361
|
+
let r = $(e), i = r ?? Q, a = Et(i), o = $(t), s = o ? Et(o, Ct) : Dt, c = $(n), l = c ? Et(c, Ct) : Ot;
|
|
1362
|
+
return {
|
|
1363
|
+
primary: i,
|
|
1364
|
+
textOnPrimary: xt(i),
|
|
1365
|
+
primaryAsText: a,
|
|
1366
|
+
ink: s,
|
|
1367
|
+
link: l,
|
|
1368
|
+
adjusted: {
|
|
1369
|
+
primary: r !== null && a !== i,
|
|
1370
|
+
ink: o !== null && s !== o,
|
|
1371
|
+
link: c !== null && l !== c
|
|
1372
|
+
}
|
|
1373
|
+
};
|
|
1374
|
+
}
|
|
1375
|
+
function At(e, t, n = Q) {
|
|
1376
|
+
let r = t;
|
|
1377
|
+
$(t) === null && (console.warn(`[whoo-aiden-widget] Could not use "${t}" as the theme color; falling back to "${n}".`), r = n);
|
|
1378
|
+
let i = kt({ color: r });
|
|
1379
|
+
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);
|
|
1357
1380
|
}
|
|
1358
|
-
function
|
|
1359
|
-
|
|
1381
|
+
function jt(e, { inkColor: t, accentColor: n }) {
|
|
1382
|
+
let r = kt({
|
|
1383
|
+
inkColor: t,
|
|
1384
|
+
accentColor: n
|
|
1385
|
+
});
|
|
1386
|
+
e.style.setProperty("--whoo-widget-ink", r.ink), e.style.setProperty("--whoo-widget-link-color", r.link);
|
|
1387
|
+
}
|
|
1388
|
+
function Mt(e, t) {
|
|
1389
|
+
e && $(e) === null && console.warn(`[whoo-aiden-widget] Could not use "${e}" as the ${t}; using the default.`);
|
|
1390
|
+
}
|
|
1391
|
+
function Nt(e, t) {
|
|
1392
|
+
At(e, t.color ?? Q), Mt(t.inkColor, "ink color"), Mt(t.accentColor, "accent color"), jt(e, {
|
|
1393
|
+
inkColor: t.inkColor,
|
|
1394
|
+
accentColor: t.accentColor
|
|
1395
|
+
});
|
|
1360
1396
|
let n = t.position === "bottom-left";
|
|
1361
1397
|
e.style.setProperty("--whoo-widget-inset-left", n ? "20px" : "auto"), e.style.setProperty("--whoo-widget-inset-right", n ? "auto" : "20px");
|
|
1362
1398
|
}
|
|
1363
1399
|
//#endregion
|
|
1364
1400
|
//#region src/mount.tsx
|
|
1365
|
-
function
|
|
1401
|
+
function Pt(e) {
|
|
1366
1402
|
let t = document.createElement("div");
|
|
1367
1403
|
t.id = "whoo-aiden-widget-host";
|
|
1368
1404
|
let n = t.attachShadow({ mode: "open" }), r = document.createElement("style");
|
|
1369
1405
|
r.textContent = gt, n.appendChild(r);
|
|
1370
1406
|
let i = document.createElement("div");
|
|
1371
|
-
n.appendChild(i),
|
|
1407
|
+
n.appendChild(i), Nt(i, e);
|
|
1372
1408
|
let a = new ht(e), o = null, s = "";
|
|
1373
1409
|
return a.subscribe((t) => {
|
|
1374
|
-
t.primaryColor && t.primaryColor !== o && (o = t.primaryColor,
|
|
1410
|
+
t.primaryColor && t.primaryColor !== o && (o = t.primaryColor, At(i, t.primaryColor, e.color));
|
|
1375
1411
|
let n = `${t.inkColor}|${t.accentColor}`;
|
|
1376
|
-
(t.inkColor || t.accentColor) && n !== s && (s = n,
|
|
1377
|
-
inkColor: t.inkColor,
|
|
1378
|
-
accentColor: t.accentColor
|
|
1412
|
+
(t.inkColor || t.accentColor) && n !== s && (s = n, jt(i, {
|
|
1413
|
+
inkColor: $(t.inkColor) ? t.inkColor : e.inkColor,
|
|
1414
|
+
accentColor: $(t.accentColor) ? t.accentColor : e.accentColor
|
|
1379
1415
|
}));
|
|
1380
|
-
}),
|
|
1381
|
-
|
|
1416
|
+
}), ue(/* @__PURE__ */ W(Ze, { controller: a }), i), a.init(), document.body.appendChild(t), { unmount() {
|
|
1417
|
+
ue(null, i), t.remove();
|
|
1382
1418
|
} };
|
|
1383
1419
|
}
|
|
1384
1420
|
//#endregion
|
|
1385
1421
|
//#region src/index.ts
|
|
1386
|
-
function
|
|
1387
|
-
return e(t),
|
|
1422
|
+
function Ft(t) {
|
|
1423
|
+
return e(t), Pt(t);
|
|
1388
1424
|
}
|
|
1389
1425
|
//#endregion
|
|
1390
|
-
export {
|
|
1426
|
+
export { Ft as init, kt as resolveTheme };
|