@telia-ace/widget-conversation 1.1.7-rc.0 → 1.1.7-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("react/jsx-runtime"),l=require("@emotion/styled"),n=require("@telia-ace/widget-ui"),L=require("@telia-ace/widget-utilities"),p=require("@emotion/react"),y=require("react"),G=require("@telia-ace/widget-forms"),j=require("./index.js");require("@telia-ace/widget-core");require("@telia-ace/widget-services");require("@telia-ace/widget-plugins");const J=({className:t})=>{const[e,r]=y.useState(""),[o,a]=y.useState(0),[i,u]=y.useState(0),m=n.useIsTabbing(),d=n.useDispatch(),{inputPlaceholder:b="Type your message",inputHidden:$=!1,inputDisabled:c=!1,sendButtonLabel:h="Send message",inputMultiline:v=!0,secondaryAction:x}=n.useProperties(),[S,f]=n.useScroll(!0),T=n.useContainer();y.useEffect(()=>{if(f.current){const{lineHeight:g,maxHeight:w}=getComputedStyle(f.current);if(g&&g.indexOf("px")>-1){const z=g.split("px"),Y=parseInt(z[0],10);a(Y);const X=w.split("px");u(parseInt(X[0],10))}}},[f.current]);const M=g=>{!g.shiftKey||!v?(g.preventDefault(),e&&e.length>0&&(d("user-submit",{text:e}),r(""),I(""))):e.length<1&&g.preventDefault()},V=g=>{if(!x)return;g.preventDefault(),d("action",{actionKey:x.action,...x});const{events:w}=T.get("$widget");w.dispatch("tracking:secondary-clicked",{})},_=g=>{if(v&&f.current){const w=f.current.scrollHeight;if(w>o){f.current.style.height="auto";let z=w;g.length<1&&(z=o),f.current.style.height=`${z}px`,z>=i?f.current.style.overflowY="scroll":f.current.style.overflowY="hidden"}}},I=g=>{_(g),r(g),g&&g.length>0&&d("user-typing",{textLength:g.length})};return $?null:s.jsxs(te,{grow:v,className:L.appendClassNames("humany-conversation-input",t),scrollableCss:S,isTabbing:m,children:[x&&s.jsx(ee,{disabled:c,onClick:V,title:x.label,"aria-label":x.label,children:s.jsx(n.SymbolBadge,{size:24,symbol:{type:"Svg",content:x.icon||"browse"}})}),v?s.jsx(Q,{value:e,onChange:I,onEnter:M,disabled:c,"aria-label":b,placeholder:b,type:"textarea",rows:1,ref:f}):s.jsx(Z,{value:e,onChange:I,onEnter:M,disabled:c,"aria-label":b,placeholder:b}),s.jsx(P,{disabled:!1,onClick:M,title:h,"aria-label":h,children:s.jsx(se,{size:22,symbol:{type:"Svg",content:"send"},hasContent:!!e&&!!e.length})})]})},Q=l(n.Input)`
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("react/jsx-runtime"),l=require("@emotion/styled"),n=require("@telia-ace/widget-ui"),k=require("@telia-ace/widget-utilities"),f=require("@emotion/react"),y=require("react"),J=require("@telia-ace/widget-forms"),j=require("./index.js");require("@telia-ace/widget-core");require("@telia-ace/widget-services");require("@telia-ace/widget-plugins");const Q=({className:t})=>{const[e,o]=y.useState(""),[a,i]=y.useState(0),[r,m]=y.useState(0),d=n.useIsTabbing(),u=n.useDispatch(),{inputPlaceholder:p="Type your message",inputHidden:$=!1,inputDisabled:c=!1,sendButtonLabel:h="Send message",inputMultiline:v=!0,secondaryAction:x}=n.useProperties(),[w,b]=n.useScroll(!0),T=n.useContainer();y.useEffect(()=>{if(b.current){const{lineHeight:g,maxHeight:C}=getComputedStyle(b.current);if(g&&g.indexOf("px")>-1){const z=g.split("px"),X=parseInt(z[0],10);i(X);const G=C.split("px");m(parseInt(G[0],10))}}},[b.current]);const I=g=>{!g.shiftKey||!v?(g.preventDefault(),e&&e.length>0&&(u("user-submit",{text:e}),o(""),B(""))):e.length<1&&g.preventDefault()},_=g=>{if(!x)return;g.preventDefault(),u("action",{actionKey:x.action,...x});const{events:C}=T.get("$widget");C.dispatch("tracking:secondary-clicked",{})},Y=g=>{if(v&&b.current){const C=b.current.scrollHeight;if(C>a){b.current.style.height="auto";let z=C;g.length<1&&(z=a),b.current.style.height=`${z}px`,z>=r?b.current.style.overflowY="scroll":b.current.style.overflowY="hidden"}}},B=g=>{Y(g),o(g),g&&g.length>0&&u("user-typing",{textLength:g.length})};return $?null:s.jsxs(se,{grow:v,className:k.appendClassNames("humany-conversation-input",t),scrollableCss:w,isTabbing:d,children:[x&&s.jsx(te,{className:"humany-secondary-button",disabled:c,onClick:_,title:x.label,"aria-label":x.label,children:s.jsx(n.SymbolBadge,{size:24,symbol:{type:"Svg",content:x.icon||"browse"}})}),v?s.jsx(Z,{value:e,onChange:B,onEnter:I,disabled:c,"aria-label":p,placeholder:p,type:"textarea",rows:1,ref:b}):s.jsx(ee,{value:e,onChange:B,onEnter:I,disabled:c,"aria-label":p,placeholder:p}),s.jsx(F,{className:"humany-send-button",disabled:!1,onClick:I,title:h,"aria-label":h,children:s.jsx(ne,{size:22,symbol:{type:"Svg",content:"send"},hasContent:!!e&&!!e.length})})]})},Z=l(n.Input)`
2
2
  resize: none;
3
3
  flex: 1;
4
4
  flex-shrink: 1;
@@ -16,7 +16,7 @@
16
16
  ${n.borderTabStyle};
17
17
  outline-offset: 12px;
18
18
  }
19
- `,Z=l(n.Input)`
19
+ `,ee=l(n.Input)`
20
20
  flex: 1;
21
21
  border: none;
22
22
  background-color: transparent;
@@ -30,7 +30,7 @@
30
30
  color: ${t=>{var e;return(e=t.theme.colors)==null?void 0:e.textLight}};
31
31
  font-style: italic;
32
32
  }
33
- `,P=l(n.Button)`
33
+ `,F=l(n.Button)`
34
34
  flex: 0 0 50px;
35
35
  align-self: stretch;
36
36
  background-color: transparent;
@@ -42,14 +42,14 @@
42
42
  &:focus-visible {
43
43
  ${n.borderTabStyle};
44
44
  }
45
- `,ee=l(P)`
45
+ `,te=l(F)`
46
46
  border-right: ${t=>t.theme.border};
47
47
  margin: ${t=>{var e;return(e=t.theme.sizes)==null?void 0:e.normal}} 0;
48
- `,te=l.div`
49
- ${t=>t.grow?p.css`
48
+ `,se=l.div`
49
+ ${t=>t.grow?f.css`
50
50
  min-height: 50px;
51
51
  max-height: 150px;
52
- `:p.css`
52
+ `:f.css`
53
53
  height: 50px;
54
54
  `}
55
55
  flex: 0 0 auto;
@@ -61,13 +61,13 @@
61
61
  textarea {
62
62
  ${t=>!!t.scrollableCss&&t.scrollableCss}
63
63
  }
64
- `,se=l(({hasContent:t,...e})=>s.jsx(n.SymbolBadge,{...e}))`
64
+ `,ne=l(({hasContent:t,...e})=>s.jsx(n.SymbolBadge,{...e}))`
65
65
  line,
66
66
  path {
67
67
  stroke: ${t=>{var e;return t.hasContent?(e=t.theme.colors)==null?void 0:e.primary:"#a6a6a6"}};
68
68
  fill: ${t=>{var e;return t.hasContent?(e=t.theme.colors)==null?void 0:e.primary:"#a6a6a6"}};
69
69
  }
70
- `,ne=l.div`
70
+ `,re=l.div`
71
71
  width: ${t=>t.avatarSize||"32px"};
72
72
  height: ${t=>t.avatarSize||"32px"};
73
73
  border-radius: 50%;
@@ -102,7 +102,7 @@
102
102
  stroke: ${t=>{var e;return(e=t.theme.colors)==null?void 0:e.text}};
103
103
  }
104
104
  }
105
- `,re=p.keyframes`
105
+ `,oe=f.keyframes`
106
106
  0% {
107
107
  opacity: 0;
108
108
  }
@@ -112,7 +112,7 @@
112
112
  100% {
113
113
  opacity: 0;
114
114
  }
115
- `,oe=l.div`
115
+ `,ae=l.div`
116
116
  display: flex;
117
117
  justify-content: center;
118
118
  > div {
@@ -121,7 +121,7 @@
121
121
  border-radius: 50%;
122
122
  margin: 5px;
123
123
  background-color: ${t=>{var e;return(e=t.theme.colors)==null?void 0:e.text}};
124
- animation: ${re} 1s infinite;
124
+ animation: ${oe} 1s infinite;
125
125
  }
126
126
  > div:nth-of-type(2) {
127
127
  animation-delay: 100ms;
@@ -129,23 +129,23 @@
129
129
  > div:nth-of-type(3) {
130
130
  animation-delay: 200ms;
131
131
  }
132
- `,A=l.div`
132
+ `,O=l.div`
133
133
  grid-area: content;
134
134
  max-width: 100%;
135
135
  overflow: hidden;
136
- `,ae=l(n.Typography)`
136
+ `,ie=l(n.Typography)`
137
137
  font-size: ${t=>{var e;return(e=t.theme.fonts)==null?void 0:e.normal}};
138
138
  font-weight: normal;
139
139
  margin: 0;
140
- `,O=l.div`
140
+ `,R=l.div`
141
141
  display: flex;
142
142
  ${t=>t.left&&"justify-content: start;"};
143
143
  ${t=>t.center&&"justify-content: center;"};
144
144
  ${t=>t.right&&"justify-content: end;"};
145
- `,R=l.div`
145
+ `,E=l.div`
146
146
  ${t=>{var e;return t.padded&&`padding: ${(e=t.theme.sizes)==null?void 0:e.medium};`}}
147
- ${t=>!t.user&&t.stacked&&ie(t.stacked,t.theme)}
148
- ${t=>t.user&&t.stacked&&le(t.stacked,t.theme)}
147
+ ${t=>!t.user&&t.stacked&&le(t.stacked,t.theme)}
148
+ ${t=>t.user&&t.stacked&&ce(t.stacked,t.theme)}
149
149
 
150
150
  display: inline-block;
151
151
  margin-top: ${t=>{var e;return(e=t.theme.sizes)==null?void 0:e.normal}};
@@ -158,12 +158,12 @@
158
158
  }
159
159
  max-width: 100%;
160
160
  ${t=>t.fullWidth&&"width: 100%;"}
161
- `,ie=(t,e)=>{var o,a;const r=p.css`
162
- background-color: ${(o=e.colors)==null?void 0:o.accent};
163
- color: ${(a=e.colors)==null?void 0:a.text};
161
+ `,le=(t,e)=>{var a,i;const o=f.css`
162
+ background-color: ${(a=e.colors)==null?void 0:a.accent};
163
+ color: ${(i=e.colors)==null?void 0:i.text};
164
164
  ${e.border&&`border: ${e.border};`};
165
- `;return e.borderRadius?p.css`
166
- ${r}
165
+ `;return e.borderRadius?f.css`
166
+ ${o}
167
167
 
168
168
  border-top-right-radius: ${e.borderRadius};
169
169
  border-bottom-right-radius: ${e.borderRadius};
@@ -175,11 +175,11 @@
175
175
  ${t==="last"&&`
176
176
  border-bottom-left-radius: ${e.borderRadius};
177
177
  `}
178
- `:r},le=(t,e)=>{var o,a;const r=p.css`
179
- background-color: ${(o=e.colors)==null?void 0:o.primary};
180
- color: ${(a=e.colors)==null?void 0:a.accent};
181
- `;return e.borderRadius?p.css`
182
- ${r}
178
+ `:o},ce=(t,e)=>{var a,i;const o=f.css`
179
+ background-color: ${(a=e.colors)==null?void 0:a.primary};
180
+ color: ${(i=e.colors)==null?void 0:i.accent};
181
+ `;return e.borderRadius?f.css`
182
+ ${o}
183
183
 
184
184
  border-top-left-radius: ${e.borderRadius};
185
185
  border-bottom-left-radius: ${e.borderRadius};
@@ -191,17 +191,17 @@
191
191
  ${t==="last"&&`
192
192
  border-bottom-right-radius: ${e.borderRadius};
193
193
  `}
194
- `:r},N=l.div`
194
+ `:o},N=l.div`
195
195
  margin-bottom: ${t=>{var e;return(e=t.theme.sizes)==null?void 0:e.normal}};
196
196
  &:last-child {
197
197
  margin-bottom: 0;
198
198
  }
199
- `,k=t=>{var e,r;return p.css`
199
+ `,S=t=>{var e,o;return f.css`
200
200
  margin: ${(e=t.theme.sizes)==null?void 0:e.medium} 0;
201
- padding: 0 ${(r=t.theme.sizes)==null?void 0:r.medium};
202
- `},ce=l(G.FormComponent)`
201
+ padding: 0 ${(o=t.theme.sizes)==null?void 0:o.medium};
202
+ `},de=l(J.FormComponent)`
203
203
  & button.humany-form-component-button {
204
- ${t=>{var e,r,o,a;return((e=t.theme.colors)==null?void 0:e.primary)&&((r=t.theme.colors)==null?void 0:r.accent)&&n.invertedHoverButton({active:!1,primaryColor:(o=t.theme.colors)==null?void 0:o.primary,secondaryColor:(a=t.theme.colors)==null?void 0:a.accent,theme:t.theme})}};
204
+ ${t=>{var e,o,a,i;return((e=t.theme.colors)==null?void 0:e.primary)&&((o=t.theme.colors)==null?void 0:o.accent)&&n.invertedHoverButton({active:!1,primaryColor:(a=t.theme.colors)==null?void 0:a.primary,secondaryColor:(i=t.theme.colors)==null?void 0:i.accent,theme:t.theme})}};
205
205
  display: block;
206
206
  width: 100%;
207
207
  margin-bottom: ${t=>{var e;return(e=t.theme.sizes)==null?void 0:e.normal}};
@@ -213,7 +213,7 @@
213
213
  margin-bottom: ${t=>{var e;return(e=t.theme.sizes)==null?void 0:e.normal}};
214
214
  }
215
215
  }
216
- `,de=l(n.Html)`
216
+ `,ue=l(n.Html)`
217
217
  white-space: pre-wrap;
218
218
  a {
219
219
  color: ${t=>t.theme.colors.link};
@@ -228,7 +228,7 @@
228
228
  > li {
229
229
  margin: ${t=>{var e;return(e=t.theme.sizes)==null?void 0:e.normal}};
230
230
  }
231
- `,ue=l.button`
231
+ `,he=l.button`
232
232
  ${t=>n.buttonCss(t)};
233
233
  display: block;
234
234
  background-color: ${t=>{var e;return(e=t.theme.colors)==null?void 0:e.primary}};
@@ -238,7 +238,7 @@
238
238
  ${n.borderTabStyle}
239
239
  background-color: transparent;
240
240
  }
241
- `,D=y.forwardRef(({boxed:t,className:e,agentData:r},o)=>s.jsx(A,{ref:o,children:s.jsx(O,{left:t,center:!t,children:s.jsx(R,{padded:!!t,stacked:t?"first":void 0,children:s.jsxs(oe,{children:[s.jsx("div",{}),s.jsx("div",{}),s.jsx("div",{})]})})})})),F=y.createContext(null),he=l.p`
241
+ `,D=y.forwardRef(({boxed:t,className:e,agentData:o},a)=>s.jsx(O,{ref:a,children:s.jsx(R,{left:t,center:!t,children:s.jsx(E,{padded:!!t,stacked:t?"first":void 0,children:s.jsxs(ae,{children:[s.jsx("div",{}),s.jsx("div",{}),s.jsx("div",{})]})})})})),W=y.createContext(null),ge=l.p`
242
242
  && {
243
243
  font-size: ${t=>{var e;return(e=t.theme.fonts)==null?void 0:e.small}};
244
244
  font-weight: 300;
@@ -247,28 +247,28 @@
247
247
  line-height: 1.5em;
248
248
  grid-area: info;
249
249
  color: ${t=>{var e;return(e=t.theme.colors)==null?void 0:e.text}};
250
- `,K=(t,e)=>new Date(t).toLocaleTimeString(e||[],{hour:"numeric",minute:"2-digit"}),C=({className:t,name:e,timestamp:r,ariaHidden:o=!1})=>{const a=y.useContext(F);if(!e&&!r)return null;let i="";return e?r?i=`${e}: ${K(r,a)}`:i=e:r&&(i=K(r,a)),s.jsx(he,{"aria-hidden":o,children:i})},W=({className:t,children:e,sender:r,timestamp:o})=>{const{avatar:a,name:i}=r,{avatarSize:u}=n.useProperties();return s.jsxs(ge,{hasAvatar:!!a,className:L.appendClassNames(t,"humany-conversation-agent-message"),children:[a&&s.jsx(ne,{avatarSize:u,children:typeof a=="string"?s.jsx("img",{src:a}):s.jsx(n.SymbolBadge,{symbol:a})}),e,s.jsx(C,{name:i,timestamp:o,ariaHidden:!0})]})},ge=l.div`
250
+ `,q=(t,e)=>new Date(t).toLocaleTimeString(e||[],{hour:"numeric",minute:"2-digit"}),L=({className:t,name:e,timestamp:o,ariaHidden:a=!1})=>{const i=y.useContext(W);if(!e&&!o)return null;let r="";return e?o?r=`${e}: ${q(o,i)}`:r=e:o&&(r=q(o,i)),s.jsx(ge,{"aria-hidden":a,children:r})},U=({className:t,children:e,sender:o,timestamp:a})=>{const{avatar:i,name:r}=o,{avatarSize:m}=n.useProperties();return s.jsxs(ye,{hasAvatar:!!i,className:k.appendClassNames(t,"humany-conversation-agent-message"),children:[i&&s.jsx(re,{className:"humany-agent-avatar",avatarSize:m,children:typeof i=="string"?s.jsx("img",{src:i}):s.jsx(n.SymbolBadge,{symbol:i})}),e,s.jsx(L,{name:r,timestamp:a,ariaHidden:!0})]})},ye=l.div`
251
251
  display: grid;
252
252
  margin-right: 10%;
253
253
  width: 90%;
254
- ${t=>t.hasAvatar?p.css`
254
+ ${t=>t.hasAvatar?f.css`
255
255
  grid-template-columns: auto 1fr;
256
256
  grid-template-rows: 1fr auto;
257
257
  grid-template-areas:
258
258
  'avatar content'
259
259
  '. info';
260
- `:p.css`
260
+ `:f.css`
261
261
  grid-template-columns: 1fr;
262
262
  grid-template-rows: 1fr auto;
263
263
  grid-template-areas:
264
264
  'content'
265
265
  'info';
266
266
  `};
267
- `,ye=y.forwardRef(({className:t,children:e,timestamp:r,discrete:o,fullWidth:a},i)=>s.jsx(be,{ref:i,className:L.appendClassNames(t,"humany-conversation-system-message"),fullWidth:a,children:o?s.jsxs(pe,{className:"humany-conversation-discrete-message",children:[e,s.jsx(C,{timestamp:r})]}):s.jsxs(s.Fragment,{children:[e,s.jsx(C,{timestamp:r})]})})),be=l.div`
267
+ `,pe=y.forwardRef(({className:t,children:e,timestamp:o,discrete:a,fullWidth:i},r)=>s.jsx(fe,{ref:r,className:k.appendClassNames(t,"humany-conversation-system-message"),fullWidth:i,children:a?s.jsxs(be,{className:"humany-conversation-discrete-message",children:[e,s.jsx(L,{timestamp:o})]}):s.jsxs(s.Fragment,{children:[e,s.jsx(L,{timestamp:o})]})})),fe=l.div`
268
268
  ${t=>t.fullWidth&&"width: 100%"};
269
269
  padding: 0 ${t=>{var e;return(e=t.theme.sizes)==null?void 0:e.large}};
270
270
  overflow: auto;
271
- `,pe=l.div`
271
+ `,be=l.div`
272
272
  text-align: center;
273
273
  word-wrap: break-word;
274
274
  font-size: ${t=>{var e;return(e=t.theme.fonts)==null?void 0:e.normal}};
@@ -276,13 +276,13 @@
276
276
  > p {
277
277
  margin: 0;
278
278
  }
279
- `,fe=({className:t,children:e,timestamp:r})=>{const{userLabel:o=""}=n.useProperties();return s.jsxs(xe,{className:L.appendClassNames(t,"humany-conversation-user-message"),children:[e,s.jsx(C,{name:o,timestamp:r,ariaHidden:!0})]})},xe=l.div`
279
+ `,xe=({className:t,children:e,timestamp:o})=>{const{userLabel:a=""}=n.useProperties();return s.jsxs(ve,{className:k.appendClassNames(t,"humany-conversation-user-message"),children:[e,s.jsx(L,{name:a,timestamp:o,ariaHidden:!0})]})},ve=l.div`
280
280
  margin-left: 10%;
281
281
  width: 90%;
282
282
  display: flex;
283
283
  flex-direction: column;
284
284
  align-items: flex-end;
285
- `,E=t=>Array.isArray(t)?t:Object.keys(t).map(e=>({label:t[e],actionKey:e})),ve=({header:t,actions:e,dispatch:r})=>{const o=n.useContainer(),{events:a}=o.get("$widget");return s.jsx($e,{className:"humany-conversation-button-list",header:t,items:E(e),renderItem:i=>{var m;const u=!!((m=i==null?void 0:i.data)!=null&&m.href);return s.jsx("li",{children:u?s.jsxs(je,{onClick:()=>{r("action",i),a.dispatch("tracking:button-list-item-clicked",i)},href:i.data.href,target:i.data.target,"aria-label":i.label,title:i.label,children:[s.jsx(n.SymbolBadge,{symbol:i.symbol}),i.label]}):s.jsxs(ke,{onClick:()=>{r("action",i),a.dispatch("tracking:button-list-item-clicked",i)},"aria-label":i.label,title:i.label,children:[s.jsx(n.SymbolBadge,{symbol:i.symbol}),i.label]})},i.actionKey)}})},$e=l(n.ItemList)`
285
+ `,K=t=>Array.isArray(t)?t:Object.keys(t).map(e=>({label:t[e],actionKey:e})),$e=({header:t,actions:e,dispatch:o})=>{const a=n.useContainer(),{events:i}=a.get("$widget");return s.jsx(je,{className:"humany-conversation-button-list",header:t,items:K(e),renderItem:r=>{var d;const m=!!((d=r==null?void 0:r.data)!=null&&d.href);return s.jsx("li",{children:m?s.jsxs(ke,{onClick:()=>{o("action",r),i.dispatch("tracking:button-list-item-clicked",r)},href:r.data.href,target:r.data.target,"aria-label":r.label,title:r.label,children:[s.jsx(n.SymbolBadge,{symbol:r.symbol}),r.label]}):s.jsxs(Se,{onClick:()=>{o("action",r),i.dispatch("tracking:button-list-item-clicked",r)},"aria-label":r.label,title:r.label,children:[s.jsx(n.SymbolBadge,{symbol:r.symbol}),r.label]})},r.actionKey)}})},je=l(n.ItemList)`
286
286
  ${n.itemList}
287
287
  > ul {
288
288
  display: flex;
@@ -292,8 +292,8 @@
292
292
  margin: 0;
293
293
  }
294
294
  }
295
- ${k}
296
- `,je=l(n.Link)`
295
+ ${S}
296
+ `,ke=l(n.Link)`
297
297
  ${n.buttonCss};
298
298
 
299
299
  display: block;
@@ -312,7 +312,7 @@
312
312
  svg {
313
313
  margin-right: ${t=>{var e;return(e=t.theme.sizes)==null?void 0:e.small}};
314
314
  }
315
- `,ke=l(n.Button)`
315
+ `,Se=l(n.Button)`
316
316
  ${n.buttonCss};
317
317
 
318
318
  display: block;
@@ -331,22 +331,25 @@
331
331
  svg {
332
332
  margin-right: ${t=>{var e;return(e=t.theme.sizes)==null?void 0:e.small}};
333
333
  }
334
- `,Se=({type:t,content:e={}})=>{const r=n.useComponent(t);return!r||!t?null:s.jsx(y.Suspense,{fallback:null,children:s.jsx(r,{...e})})},we=({body:t})=>s.jsx(Ce,{html:t}),Ce=l(n.Html)`
334
+ `,we=({type:t,content:e={}})=>{const o=n.useComponent(t);return!o||!t?null:s.jsx(y.Suspense,{fallback:null,children:s.jsx(o,{...e})})},Ce=({body:t})=>s.jsx(Le,{className:"humany-html",html:t}),Le=l(n.Html)`
335
335
  ${n.genericHtml}
336
336
  color: inherit;
337
- white-space: pre-wrap;
338
- ${k}
337
+ white-space: normal;
338
+ ${S}
339
339
  a {
340
340
  color: ${t=>t.theme.colors.link};
341
341
  &:focus-visible {
342
342
  ${n.borderTabStyle};
343
343
  }
344
344
  }
345
- `,Le=({header:t,actions:e,dispatch:r})=>s.jsx(ze,{className:"humany-conversation-item-list",header:t,items:E(e),renderItem:o=>{var a;return s.jsx("li",{children:s.jsxs(Te,{children:[((a=o.symbol)==null?void 0:a.content)&&s.jsx("div",{className:"item-icon",children:s.jsx(n.SymbolBadge,{size:22,symbol:{type:o.symbol.type,content:o.symbol.content}})}),s.jsxs("div",{className:"item-body",children:[s.jsx(n.Button,{onClick:()=>{r("action",o)},"aria-label":o.label,title:o.label,children:o.label}),o.description&&s.jsx("p",{children:o.description})]})]})},o.actionKey)}}),ze=l(n.ItemList)`
345
+ p {
346
+ word-break: auto-phrase;
347
+ }
348
+ `,ze=({header:t,actions:e,dispatch:o})=>s.jsx(Te,{className:"humany-conversation-item-list",header:t,items:K(e),renderItem:a=>{var i;return s.jsx("li",{children:s.jsxs(Ne,{children:[((i=a.symbol)==null?void 0:i.content)&&s.jsx("div",{className:"item-icon",children:s.jsx(n.SymbolBadge,{size:22,symbol:{type:a.symbol.type,content:a.symbol.content}})}),s.jsxs("div",{className:"item-body",children:[s.jsx(n.Button,{onClick:()=>{o("action",a)},"aria-label":a.label,title:a.label,children:a.label}),a.description&&s.jsx("p",{children:a.description})]})]})},a.actionKey)}}),Te=l(n.ItemList)`
346
349
  ${n.itemList}
347
350
 
348
351
  > .humany-paragraph {
349
- ${k}
352
+ ${S}
350
353
  margin-bottom: 0;
351
354
 
352
355
  h1 {
@@ -354,7 +357,7 @@
354
357
  }
355
358
  }
356
359
 
357
- ${t=>n.headingElement(t)("h1",p.css`
360
+ ${t=>n.headingElement(t)("h1",f.css`
358
361
  white-space: normal;
359
362
  `)}
360
363
 
@@ -374,10 +377,10 @@
374
377
  border-bottom: none;
375
378
  }
376
379
  }
377
- `,Te=l.div`
380
+ `,Ne=l.div`
378
381
  display: flex;
379
382
  gap: ${t=>{var e;return(e=t.theme.sizes)==null?void 0:e.medium}};
380
- ${k}
383
+ ${S}
381
384
 
382
385
  .item-icon {
383
386
  }
@@ -411,11 +414,11 @@
411
414
  }
412
415
  }
413
416
  }
414
- `,Ne=({header:t,actions:e,dispatch:r})=>{const o=n.usePrevious(e),a=y.useRef(),i=n.useIsTabbing(),u=n.useContainer(),{events:m}=u.get("$widget");return y.useEffect(()=>{if(o&&Array.isArray(e)&&Array.isArray(o)&&o.length<e.length&&a.current){const d=a.current.querySelectorAll(".humany-conversation-link-list > ul > li"),b=d[o.length];if(d.length===e.length&&o.length){const $=d[o.length-1];if($){const c=$.querySelector(".humany-button");c&&c.focus()}}else b&&new MutationObserver((c,h)=>{c.forEach(v=>{if(v.addedNodes){const x=Array.from(v.addedNodes).find(S=>S.tagName==="BUTTON");x&&L.htmlParentContains(a.current,document.activeElement)&&(i&&x.focus(),h.disconnect())}})}).observe(b,{attributes:!1,characterData:!1,childList:!0,subtree:!0,attributeOldValue:!1,characterDataOldValue:!1})}}),s.jsx(Me,{ref:a,className:"humany-conversation-link-list",header:t,items:E(e),renderItem:d=>s.jsx("li",{children:s.jsxs(Ie,{help:d.actionKey==="help",onClick:()=>{r("action",d),m.dispatch("tracking:link-list-item-clicked",d)},"aria-label":d.label,title:d.label,children:[d.label,d.actionKey==="help"&&s.jsx(n.SymbolBadge,{size:14,symbol:{type:"Svg",content:"caret-down"}})]})},d.actionKey)})},Me=l(n.ItemList)`
417
+ `,Me=({header:t,actions:e,dispatch:o})=>{const a=n.usePrevious(e),i=y.useRef(),r=n.useIsTabbing(),m=n.useContainer(),{events:d}=m.get("$widget");return y.useEffect(()=>{if(a&&Array.isArray(e)&&Array.isArray(a)&&a.length<e.length&&i.current){const u=i.current.querySelectorAll(".humany-conversation-link-list > ul > li"),p=u[a.length];if(u.length===e.length&&a.length){const $=u[a.length-1];if($){const c=$.querySelector(".humany-button");c&&c.focus()}}else p&&new MutationObserver((c,h)=>{c.forEach(v=>{if(v.addedNodes){const x=Array.from(v.addedNodes).find(w=>w.tagName==="BUTTON");x&&k.htmlParentContains(i.current,document.activeElement)&&(r&&x.focus(),h.disconnect())}})}).observe(p,{attributes:!1,characterData:!1,childList:!0,subtree:!0,attributeOldValue:!1,characterDataOldValue:!1})}}),s.jsx(Ie,{ref:i,className:"humany-conversation-link-list",header:t,items:K(e),renderItem:u=>s.jsx("li",{children:s.jsxs(Be,{help:u.actionKey==="help",onClick:()=>{o("action",u),d.dispatch("tracking:link-list-item-clicked",u)},"aria-label":u.label,title:u.label,children:[u.label,u.actionKey==="help"&&s.jsx(n.SymbolBadge,{size:14,symbol:{type:"Svg",content:"caret-down"}})]})},u.actionKey)})},Ie=l(n.ItemList)`
415
418
  ${n.itemList}
416
- ${k}
419
+ ${S}
417
420
 
418
- ${t=>n.headingElement(t)("h1",p.css`
421
+ ${t=>n.headingElement(t)("h1",f.css`
419
422
  white-space: normal;
420
423
  `)}
421
424
 
@@ -427,7 +430,7 @@
427
430
  margin: 0;
428
431
  }
429
432
  }
430
- `,Ie=l(n.Button)`
433
+ `,Be=l(n.Button)`
431
434
  display: block;
432
435
  text-align: left;
433
436
  font-weight: 300;
@@ -436,13 +439,13 @@
436
439
  text-overflow: ellipsis;
437
440
  overflow: hidden;
438
441
 
439
- ${t=>{var e,r;return t.help&&p.css`
442
+ ${t=>{var e,o;return t.help&&f.css`
440
443
  color: ${(e=t.theme.colors)==null?void 0:e.text};
441
444
  text-decoration: underline;
442
445
 
443
446
  i,
444
447
  svg {
445
- margin-left: ${(r=t.theme.sizes)==null?void 0:r.small};
448
+ margin-left: ${(o=t.theme.sizes)==null?void 0:o.small};
446
449
  }
447
450
  `}}
448
451
 
@@ -453,12 +456,12 @@
453
456
  text-decoration: underline;
454
457
  }
455
458
  }
456
- `,Be=()=>s.jsx(He,{className:"humany-conversation-separator"}),He=l.div`
459
+ `,Ae=()=>s.jsx(He,{className:"humany-conversation-separator"}),He=l.div`
457
460
  ${t=>t.theme.border&&`border-bottom: ${t.theme.border};`}
458
461
  width: 100%;
459
- `,Ae=({text:t})=>s.jsx(Oe,{className:"humany-conversation-text",variant:"span",children:t}),Oe=l(n.Typography)`
460
- ${k}
461
- `,Re=({header:t="Video call",acceptLabel:e="Accept",declineLabel:r="Decline",dispatch:o})=>{const a=y.useMemo(()=>[{label:e,actionKey:"accept-video-call",symbol:{type:"Svg",content:"video"}},{label:r,actionKey:"decline-video-call",symbol:{type:"Svg",content:"close"}}],[e,r]);return s.jsx(Ee,{className:"humany-conversation-video-request",header:t,items:a,renderItem:i=>{const u=i.actionKey==="accept-video-call"?"#70c48e":"#da5c85";return s.jsx("li",{children:s.jsx(De,{onClick:()=>{o("action",i)},"aria-label":i.label,title:i.label,bgColor:u,children:s.jsx(n.SymbolBadge,{symbol:i.symbol,size:25})})},i.actionKey)}})},Ee=l(n.ItemList)`
462
+ `,Oe=({text:t})=>s.jsx(Re,{className:"humany-conversation-text",variant:"span",children:t}),Re=l(n.Typography)`
463
+ ${S}
464
+ `,Ee=({header:t="Video call",acceptLabel:e="Accept",declineLabel:o="Decline",dispatch:a})=>{const i=y.useMemo(()=>[{label:e,actionKey:"accept-video-call",symbol:{type:"Svg",content:"video"}},{label:o,actionKey:"decline-video-call",symbol:{type:"Svg",content:"close"}}],[e,o]);return s.jsx(Ke,{className:"humany-conversation-video-request",header:t,items:i,renderItem:r=>{const m=r.actionKey==="accept-video-call"?"#70c48e":"#da5c85";return s.jsx("li",{children:s.jsx(De,{onClick:()=>{a("action",r)},"aria-label":r.label,title:r.label,bgColor:m,children:s.jsx(n.SymbolBadge,{symbol:r.symbol,size:25})})},r.actionKey)}})},Ke=l(n.ItemList)`
462
465
  ${t=>n.itemList(t)}
463
466
  > ul {
464
467
  display: flex;
@@ -468,7 +471,7 @@
468
471
  margin: 0;
469
472
  }
470
473
  }
471
- ${t=>k(t)}
474
+ ${t=>S(t)}
472
475
  `,De=l(n.Button)`
473
476
  ${n.buttonCss};
474
477
 
@@ -503,13 +506,13 @@
503
506
  stroke: #fff;
504
507
  }
505
508
  }
506
- `,Ke=([t,e])=>({type:t,content:e}),qe=({items:t,dispatch:e})=>s.jsx(Pe,{role:"none",className:"humany-message-list",items:t.map(Ke),renderLi:!0,renderItem:r=>{switch(r.type){case j.ConversationMessageListItemType.Text:return s.jsx(Ae,{text:r.content});case j.ConversationMessageListItemType.HTML:return s.jsx(we,{...r.content});case j.ConversationMessageListItemType.Separator:return s.jsx(Be,{...r.content});case j.ConversationMessageListItemType.ItemList:return s.jsx(Le,{...r.content,dispatch:e});case j.ConversationMessageListItemType.LinkList:return s.jsx(Ne,{...r.content,dispatch:e});case j.ConversationMessageListItemType.ButtonList:return s.jsx(ve,{...r.content,dispatch:e});case j.ConversationMessageListItemType.VideoRequest:return s.jsx(Re,{...r.content,dispatch:e});default:return s.jsx(Se,{type:r.type,content:r.content})}}}),Pe=l(n.List)`
509
+ `,M=([t,e])=>({type:t,content:e}),qe=({items:t,dispatch:e})=>{const o=t.map(M).filter(r=>r.type.includes("ace-knowledge")).map(r=>"humany-"+r.type.toString());return!!t.map(M).filter(r=>{const m=r==null?void 0:r.content,d=m==null?void 0:m.actions;return!!(d!=null&&d.filter(u=>u.actionKey==="contact").length)}).length&&o.push("humany-secondary-action-list"),!!t.map(M).filter(r=>{var d;const m=r==null?void 0:r.content;return!!((d=m==null?void 0:m.tags)!=null&&d.includes("category"))}).length&&o.push("humany-category-list"),s.jsx(Pe,{role:"none",className:k.appendClassNames("humany-message-list",o.join(" ")),items:t.map(M),renderLi:!0,renderItem:r=>{switch(r.type){case j.ConversationMessageListItemType.Text:return s.jsx(Oe,{text:r.content});case j.ConversationMessageListItemType.HTML:return s.jsx(Ce,{...r.content});case j.ConversationMessageListItemType.Separator:return s.jsx(Ae,{...r.content});case j.ConversationMessageListItemType.ItemList:return s.jsx(ze,{...r.content,dispatch:e});case j.ConversationMessageListItemType.LinkList:return s.jsx(Me,{...r.content,dispatch:e});case j.ConversationMessageListItemType.ButtonList:return s.jsx($e,{...r.content,dispatch:e});case j.ConversationMessageListItemType.VideoRequest:return s.jsx(Ee,{...r.content,dispatch:e});default:return s.jsx(we,{type:r.type,content:r.content})}}})},Pe=l(n.List)`
507
510
  ${n.list}
508
511
 
509
512
  > li {
510
513
  margin: 0;
511
514
  }
512
- `,Fe=y.forwardRef(({className:t,timestamp:e,sender:r,type:o,content:a},i)=>{const u=y.useCallback(c=>{let h="first";return a.length>1&&(h=c===0?"first":c+1===a.length?"last":"middle"),h},[a]),{userLabel:m=""}=n.useProperties(),d=()=>s.jsx(s.Fragment,{children:a.map(c=>{const{key:h,body:v,title:x,form:S,actions:f}=c,T=!!v&&!x&&!S&&!f;return s.jsx(ye,{className:t,discrete:T,ref:i,timestamp:e,fullWidth:!!S||!!f,children:T&&v?s.jsx(n.Html,{html:v}):s.jsx(B,{isSystem:!0,content:c})},h)})}),b=()=>s.jsxs(s.Fragment,{children:[s.jsx(q,{className:"humany-sr-only",children:s.jsx(C,{name:r==null?void 0:r.name,timestamp:e})}),s.jsx(W,{sender:r,timestamp:e,className:t,children:s.jsx(A,{className:"humany-message-content-bundle",children:a.map((c,h)=>s.jsx(O,{className:"humany-message-container",left:!0,ref:i,children:s.jsx(B,{content:c,stacked:u(h)})},c.key))})})]}),$=()=>s.jsxs(s.Fragment,{children:[s.jsx(q,{className:"humany-sr-only",children:s.jsx(C,{name:m,timestamp:e})}),s.jsx(fe,{timestamp:e,className:t,children:s.jsx(A,{className:"humany-message-content-bundle",children:a.map((c,h)=>s.jsx(O,{className:"humany-message-container",right:!0,ref:i,children:s.jsx(B,{isUser:!0,content:c,stacked:u(h)})},c.key))})})]});switch(o){case j.ConversationMessageType.System:return d();case j.ConversationMessageType.Agent:return b();case j.ConversationMessageType.User:return $();default:return null}}),B=({content:t,isUser:e,isSystem:r,stacked:o})=>{const a=n.useDispatch(),{title:i,body:u,actions:m,form:d,items:b}=t;return b?s.jsx(R,{className:"humany-message-content",user:!!e,stacked:o,children:s.jsx(qe,{items:b,dispatch:a})}):s.jsxs(R,{className:"humany-message-content",padded:!r,user:!!e,stacked:o,fullWidth:!!d||!!m,children:[i&&s.jsx(N,{children:s.jsx(ae,{variant:"h2",children:i})}),u&&s.jsx(N,{children:s.jsx(de,{html:u})}),d&&s.jsx(N,{children:s.jsx(ce,{...d,onChange:(c,h)=>{a("form",{data:h,formKey:d.schema.id,actionKey:c})}})}),m&&s.jsx(N,{children:s.jsx(me,{items:Object.keys(m).map(c=>({label:m[c],actionKey:c})),renderItem:c=>s.jsx("li",{children:s.jsx(ue,{onClick:()=>{a("action",c.actionKey)},children:c.label})},c.actionKey)})})]})},q=l.div`
515
+ `,Fe=y.forwardRef(({className:t,timestamp:e,sender:o,type:a,content:i},r)=>{const m=y.useCallback(c=>{let h="first";return i.length>1&&(h=c===0?"first":c+1===i.length?"last":"middle"),h},[i]),{userLabel:d=""}=n.useProperties(),u=()=>s.jsx(s.Fragment,{children:i.map(c=>{const{key:h,body:v,title:x,form:w,actions:b}=c,T=!!v&&!x&&!w&&!b;return s.jsx(pe,{className:t,discrete:T,ref:r,timestamp:e,fullWidth:!!w||!!b,children:T&&v?s.jsx(n.Html,{html:v}):s.jsx(A,{isSystem:!0,content:c})},h)})}),p=()=>s.jsxs(s.Fragment,{children:[s.jsx(P,{className:"humany-sr-only",children:s.jsx(L,{name:o==null?void 0:o.name,timestamp:e})}),s.jsx(U,{sender:o,timestamp:e,className:t,children:s.jsx(O,{className:"humany-message-content-bundle",children:i.map((c,h)=>s.jsx(R,{className:"humany-message-container",left:!0,ref:r,children:s.jsx(A,{content:c,stacked:m(h)})},c.key))})})]}),$=()=>s.jsxs(s.Fragment,{children:[s.jsx(P,{className:"humany-sr-only",children:s.jsx(L,{name:d,timestamp:e})}),s.jsx(xe,{timestamp:e,className:t,children:s.jsx(O,{className:"humany-message-content-bundle",children:i.map((c,h)=>s.jsx(R,{className:"humany-message-container",right:!0,ref:r,children:s.jsx(A,{isUser:!0,content:c,stacked:m(h)})},c.key))})})]});switch(a){case j.ConversationMessageType.System:return u();case j.ConversationMessageType.Agent:return p();case j.ConversationMessageType.User:return $();default:return null}}),A=({content:t,isUser:e,isSystem:o,stacked:a})=>{const i=n.useDispatch(),{title:r,body:m,actions:d,form:u,items:p}=t;return p?s.jsx(E,{className:"humany-message-content",user:!!e,stacked:a,children:s.jsx(qe,{items:p,dispatch:i})}):s.jsxs(E,{className:"humany-message-content",padded:!o,user:!!e,stacked:a,fullWidth:!!u||!!d,children:[r&&s.jsx(N,{children:s.jsx(ie,{variant:"h2",children:r})}),m&&s.jsx(N,{children:s.jsx(ue,{html:m})}),u&&s.jsx(N,{children:s.jsx(de,{...u,onChange:(c,h)=>{i("form",{data:h,formKey:u.schema.id,actionKey:c})}})}),d&&s.jsx(N,{children:s.jsx(me,{items:Object.keys(d).map(c=>({label:d[c],actionKey:c})),renderItem:c=>s.jsx("li",{children:s.jsx(he,{onClick:()=>{i("action",c.actionKey)},children:c.label})},c.actionKey)})})]})},P=l.div`
513
516
  position: absolute !important;
514
517
  height: 1px;
515
518
  width: 1px;
@@ -518,7 +521,7 @@
518
521
  clip: rect(1px, 1px, 1px, 1px);
519
522
  left: -10000000px;
520
523
  top: auto;
521
- `,We=()=>{const{skipToLatestMessageLabel:t="Skip to latest message"}=n.useProperties(),e=n.useContainer(),r=()=>{const o=e.get("widgetDOMElement");if(o){const a=o.querySelectorAll(".humany-conversation-entry");a.length&&a[a.length-1].focus()}};return s.jsx(Ue,{className:"humany-skip-to-latest-message",onKeyDown:o=>{(o.key==="Enter"||o.keyCode===13)&&r()},onClick:r,children:t})},Ue=l.button`
524
+ `,We=()=>{const{skipToLatestMessageLabel:t="Skip to latest message"}=n.useProperties(),e=n.useContainer(),o=()=>{const a=e.get("widgetDOMElement");if(a){const i=a.querySelectorAll(".humany-conversation-entry");i.length&&i[i.length-1].focus()}};return s.jsx(Ue,{className:"humany-skip-to-latest-message",onKeyDown:a=>{(a.key==="Enter"||a.keyCode===13)&&o()},onClick:o,children:t})},Ue=l.button`
522
525
  position: absolute;
523
526
  bottom: 60px;
524
527
  text-align: center;
@@ -532,7 +535,7 @@
532
535
  transform: translateX(-50%);
533
536
  ${n.borderTabStyle};
534
537
  }
535
- `,U=()=>{const t=y.useCallback(m=>{m&&setTimeout(()=>{m.scrollIntoView({block:"start",behavior:"smooth"})},250)},[]),[e,r]=n.useScroll(!0),{messages:o,loading:a,typingActors:i=[]}=n.useProperties(),u=()=>i&&i.length?i.map((m,d)=>s.jsx(H,{id:`typing_${m.name}`,children:s.jsx(W,{timestamp:Date.now(),sender:m,children:s.jsx(D,{boxed:!0,ref:t})})},`typing_${m.name}`)):null;return s.jsxs(s.Fragment,{children:[s.jsxs(Ve,{tabIndex:0,scrollableCss:e,ref:r,children:[o&&o.length?o.map((m,d)=>{const{type:b,timestamp:$,sender:c,content:h}=m;return s.jsx(H,{className:"humany-conversation-entry",tabIndex:-1,children:s.jsx(Fe,{...m,ref:t})},`${b}_${c==null?void 0:c.name}_${$}_${h[0].key}`)}):null,u(),a&&s.jsx(H,{children:s.jsx(D,{ref:t})})]}),s.jsx(J,{}),s.jsx(We,{})]})},Ve=l.div`
538
+ `,V=()=>{const t=y.useCallback(d=>{d&&setTimeout(()=>{d.scrollIntoView({block:"start",behavior:"smooth"})},250)},[]),[e,o]=n.useScroll(!0),{messages:a,loading:i,typingActors:r=[]}=n.useProperties(),m=()=>r&&r.length?r.map((d,u)=>s.jsx(H,{id:`typing_${d.name}`,children:s.jsx(U,{timestamp:Date.now(),sender:d,children:s.jsx(D,{boxed:!0,ref:t})})},`typing_${d.name}`)):null;return s.jsxs(s.Fragment,{children:[s.jsxs(Ve,{tabIndex:0,scrollableCss:e,ref:o,children:[a&&a.length?a.map((d,u)=>{const{type:p,timestamp:$,sender:c,content:h}=d;return s.jsx(H,{className:"humany-conversation-entry",tabIndex:-1,children:s.jsx(Fe,{...d,ref:t})},`${p}_${c==null?void 0:c.name}_${$}_${h[0].key}`)}):null,m(),i&&s.jsx(H,{children:s.jsx(D,{ref:t})})]}),s.jsx(Q,{}),s.jsx(We,{})]})},Ve=l.div`
536
539
  display: flex;
537
540
  flex-direction: column;
538
541
  align-items: stretch;
@@ -570,10 +573,10 @@
570
573
  ${n.borderTabStyle}
571
574
  border-radius: ${t=>{var e;return(e=t.theme.sizes)==null?void 0:e.small}};
572
575
  }
573
- ${t=>n.headingElement(t)("h1",p.css`
576
+ ${t=>n.headingElement(t)("h1",f.css`
574
577
  font-weight: normal;
575
578
  `)}
576
- `,_e=({dispatch:t})=>{const e=y.useRef(null);return y.useEffect(()=>{e.current&&e.current.parentNode&&t("overlay-mounted",e.current)},[e]),s.jsx(n.WidgetOverlayOutlet,{portalId:"humany-conversation-overlay-portal",className:"humany-conversation-overlay-outlet",ref:e})},Ye=({dispatch:t,header:e,buttonLabel:r})=>s.jsxs(Xe,{portalId:"humany-conversation-portal",className:"humany-conversation-outlet",children:[s.jsxs(Ge,{className:"humany-conversation-outlet-head",children:[s.jsx(Qe,{className:"humany-conversation-outlet-head-button","aria-label":r,title:r,onClick:()=>t("hide-overlay-conversation"),children:s.jsx(n.SymbolBadge,{symbol:{type:"Svg",content:"caret-down"},size:20})}),e&&s.jsx(Je,{className:"humany-conversation-outlet-header",variant:"h1",children:e})]}),s.jsx(U,{})]}),Xe=l(n.WidgetOverlayOutlet)`
579
+ `,_e=({dispatch:t})=>{const e=y.useRef(null);return y.useEffect(()=>{e.current&&e.current.parentNode&&t("overlay-mounted",e.current)},[e]),s.jsx(n.WidgetOverlayOutlet,{portalId:"humany-conversation-overlay-portal",className:"humany-conversation-overlay-outlet",ref:e})},Ye=({dispatch:t,header:e,buttonLabel:o})=>s.jsxs(Xe,{portalId:"humany-conversation-portal",className:"humany-conversation-outlet",children:[s.jsxs(Ge,{className:"humany-conversation-outlet-head",children:[s.jsx(Qe,{className:"humany-conversation-outlet-head-button","aria-label":o,title:o,onClick:()=>t("hide-overlay-conversation"),children:s.jsx(n.SymbolBadge,{symbol:{type:"Svg",content:"caret-down"},size:20})}),e&&s.jsx(Je,{className:"humany-conversation-outlet-header",variant:"h1",children:e})]}),s.jsx(V,{})]}),Xe=l(n.WidgetOverlayOutlet)`
577
580
  z-index: 11;
578
581
  top: auto;
579
582
  height: 65%;
@@ -608,7 +611,7 @@
608
611
  svg line {
609
612
  stroke: ${t=>{var e;return(e=t.theme.colors)==null?void 0:e.text}};
610
613
  }
611
- `,Ze=({className:t,...e})=>{const{overlay:r,overlayConversationHeader:o,overlayConversationCloseLabel:a,conversationControllerId:i}=n.useProperties(),u=n.useDispatch(),d=n.useContainer().get("$settings");return s.jsx(n.ConversationContext.Provider,{value:i?{id:i}:null,children:s.jsxs(F.Provider,{value:d==null?void 0:d.language,children:[s.jsx(et,{"aria-live":"assertive",...e,className:L.appendClassNames(t,"humany-conversation-component"),children:s.jsx(U,{})}),r&&s.jsxs(s.Fragment,{children:[s.jsx(_e,{dispatch:u}),r.conversation&&s.jsx(Ye,{dispatch:u,header:o,buttonLabel:a})]})]})})},et=l.div`
614
+ `,Ze=({className:t,...e})=>{const{overlay:o,overlayConversationHeader:a,overlayConversationCloseLabel:i,conversationControllerId:r}=n.useProperties(),m=n.useDispatch(),u=n.useContainer().get("$settings");return s.jsx(n.ConversationContext.Provider,{value:r?{id:r}:null,children:s.jsxs(W.Provider,{value:u==null?void 0:u.language,children:[s.jsx(et,{"aria-live":"assertive",...e,className:k.appendClassNames(t,"humany-conversation-component"),children:s.jsx(V,{})}),o&&s.jsxs(s.Fragment,{children:[s.jsx(_e,{dispatch:m}),o.conversation&&s.jsx(Ye,{dispatch:m,header:a,buttonLabel:i})]})]})})},et=l.div`
612
615
  position: absolute;
613
616
  right: 0;
614
617
  left: 0;
package/index.js CHANGED
@@ -1,3 +1,3 @@
1
1
  "use strict";var _=Object.defineProperty;var q=(o,e,t)=>e in o?_(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t;var c=(o,e,t)=>(q(o,typeof e!="symbol"?e+"":e,t),t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const D=require("@telia-ace/widget-core"),p=require("@telia-ace/widget-services"),E=require("@telia-ace/widget-utilities"),L=require("@telia-ace/widget-forms"),M=require("@telia-ace/widget-plugins"),N=require("@telia-ace/widget-ui"),z=require("react");class U{constructor(e){c(this,"cache",new Map);c(this,"subscriptions",[]);this.controller=e;const{events:t}=e.container.get("$widget"),s=t.subscribe("data-client:fetched",(r,i)=>{i.type==="contact-method"&&this.cache.set(i.response.id,i.response)});this.subscriptions.push(s)}getConversationLogs(){return this.controller.messages.reduce((t,s)=>{const r=k(s),{key:i,content:a,type:n,sender:d,timestamp:h}=r.content,u=this.parseEntry(a,n,d,h);return u&&t.push(u),t},[])}parseEntry(e,t,s,r){const i=h=>{let u=[],l=[],m;if(Array.isArray(h)){const[g,f]=h;m=f}else m=h;return this.createMessageContent(m).length&&(l=[...l,this.createMessageContent(m)]),u=[...u,...this.createMessageOptions(m)],{messagesAsList:l,options:u}};let a=[],n=[];if(Array.isArray(e.items)){const{items:h}=e;h.forEach(u=>{const l=i(u);a=[...a,...l.options],n=[...n,...l.messagesAsList]})}else{const h=i(e);a=[...a,...h.options],n=[...n,...h.messagesAsList]}return{options:a,message:n.length?n.join(`
2
2
  `):void 0,source:this.createMessageSource(t),alias:this.createAlias(t,s),timestamp:r}}createMessageSource(e){return e}createAlias(e,t){return e===y.System?"system":(t==null?void 0:t.name)||"Me"}handleContactMethod(e){if(!this.cache.has(e))return;const t=this.cache.get(e);let s="";return s=this.appendText(s,`${t.clientName}:`),s=this.appendText(s,t.title),t.description&&(s=this.appendText(s,t.title)),s}getDetails(e,t=!0){if(!e)return"";const{header:s,title:r,label:i,description:a,text:n,html:d,body:h,contactMethodId:u}=e;let l="";if(u){const m=this.handleContactMethod(u.toString());m&&(l=this.appendText(l,m,t))}return s&&(l=this.appendText(l,s,t)),r&&(l=this.appendText(l,r,t)),a&&(l=this.appendText(l,a,t)),n&&(l=this.appendText(l,n,t)),i&&(l=this.appendText(l,i,t)),d&&(l=this.appendText(l,d,t)),h&&typeof h=="string"&&(l=this.appendText(l,h,t)),l}createMessageContent(e){let t="";return t=this.getDetails(e),t}createMessageOptions(e){let t=[],s=[];return Array.isArray(e==null?void 0:e.actions)?s=e.actions:typeof(e==null?void 0:e.actions)=="object"&&(s=Object.entries(e.actions).map(([r,i])=>({actionKey:r,label:i}))),s.length&&(t=s.map(r=>this.getDetails(r,!1))),t}appendText(e,t,s=!0){return s&&e.length?`${e}
3
- ${t}`:e.length?`${e} ${t}`:t}dispose(){this.subscriptions.forEach(e=>{e()})}}class P{constructor(e,t){c(this,"id");c(this,"name");c(this,"avatar");c(this,"container");c(this,"widget");c(this,"print",(e,t,s=null)=>{const r={name:this.name,avatar:this.avatar,id:this.id},i=k(e,t);s=s??i.timestamp;const{events:a}=this.widget;return a==null||a.dispatch("tracking:conversation-message",{sender:"agent"}),this.provider.createEntry(i.key,i.content,y.Agent,r,s)});c(this,"typing",()=>this.provider.setTypingState({name:this.name,avatar:this.avatar}));var s,r;this.provider=e,this.id=t.id||E.uuid(),this.name=t.name,this.avatar=t.avatar,this.container=(s=e.controller)==null?void 0:s.container,this.widget=(r=this.container)==null?void 0:r.get("$widget")}update(e){var r;const{name:t,avatar:s}=e;s===null?this.avatar=void 0:s&&(this.avatar=s),t===null?this.name=void 0:t&&(this.name=t),(r=this.provider.controller)==null||r.events.dispatch("conversation:agent-updated",{agent:this})}}class A{constructor(e,t,s){c(this,"subscriptions",[]);c(this,"options");c(this,"user");this.name=e,this.container=t,this.controller=s,this.user=s==null?void 0:s.user,this.options={silent:!1}}static create(e,t,s){return new A(e,t,s)}createAgent(e={}){var t;if(this.controller){const s=this.controller.getAgentById(e.id),r=s?new P(this,{...s,...e}):new P(this,e);return s||(t=this.controller)==null||t.events.dispatch("conversation:agent-created",{agent:r}),r}}print(e){var t;return(t=this.controller)==null?void 0:t.print(e)}setTypingState(e,t){var s;return(s=this.controller)==null?void 0:s.setTypingState(e,t)}loading(){return this.controller?this.controller.loader():()=>()=>{}}createEntry(e,t,s,r,i){var a;return(a=this.controller)==null?void 0:a.createEntry(e,t,s,r,i)}dispose(){var e;process.env.NODE_ENV!=="production"&&console.log(`conversation-provider: dispose (${this.name})`),(e=this.controller)==null||e.disposeProvider(this),this.controller=null,this.subscriptions.forEach(t=>t())}isRehydrated(){var e;return((e=this.controller)==null?void 0:e.isRehydrated())||Promise.resolve(!1)}getHistory(){var e;return((e=this.controller)==null?void 0:e.getHistory())||[]}complete(){var e;(e=this.controller)==null||e.onCompleteProvider()}setOptions(e={silent:!1}){this.options=e}onUnreadMessage(e){var t;if(this.controller){const s=(t=this.controller)==null?void 0:t.onUnreadMessage(e);return this.subscriptions.push(s),()=>{s()}}}onMounted(e){var t;if(this.controller){const s=(t=this.controller)==null?void 0:t.events.subscribe("conversation:component-mount-changed",e);return this.subscriptions.push(s),e({},this.controller.getComponentMountedState()),()=>{s()}}}}const O=o=>`conversation-${o}`;class K{constructor(){c(this,"_locking",Promise.resolve());c(this,"_locks",0)}isLocked(){return this._locks>0}lock(){this._locks+=1;let e;const t=new Promise(r=>e=()=>{this._locks-=1,r()}),s=this._locking.then(()=>e);return this._locking=this._locking.then(()=>t),s}}class Q{constructor(e,t,s){c(this,"sessionStorageKey");c(this,"locker",new K);c(this,"initialStoredAgents",[]);this.container=e,this.conversation=t,this.enabled=s,this.sessionStorageKey=O(t.id),t.onStarted(async()=>{if(t.messages.length>0)return;const{agents:r}=await this.read(),i=[];r&&r.forEach(n=>{const d=t.providerIndex(n.providerName),h=d>-1?t.registeredProviders[d]:t.createProvider(n.providerName),u=new P(h,{name:n.name,avatar:n.avatar,id:n.id});i.push(u)});const{messages:a}=await this.read();a.forEach(n=>{switch(n.type){case"agent":{const d=i.find(h=>{var u;return h.id===((u=n.sender)==null?void 0:u.id)});d&&d.print(n.content.items||n.content,{key:n.key},n.timestamp);return}case"user":{t.user.print(n.content.items||n.content,{key:n.key},n.timestamp);return}case"system":default:t.print(n.content.items||n.content,n.timestamp)}})}),t.onMessageCreated(async(r,i)=>{this.write(i.message,"messages")}),t.events.subscribe("conversation:agent-created",async(r,i)=>{const a={id:i.agent.id,name:i.agent.name,avatar:i.agent.avatar,providerName:i.agent.provider.name};await this.write(a,"agents")}),t.events.subscribe("conversation:agent-updated",async(r,i)=>{const{agents:a}=await this.read();await this.write([...a.map(n=>n.id===i.agent.id?{...n,name:i.agent.name,avatar:i.agent.avatar}:n)],"agents","update")})}setInitialData(e){this.initialStoredAgents=e.agents}async isRehydrated(){const{messages:e}=await this.read();return e.length>0}getStoredAgent(e){if(this.enabled)return this.initialStoredAgents.find(t=>t.id===e)}async write(e,t,s="add"){if(!this.enabled)return;const r=await this.locker.lock();return p.createStorageWriter(this.container,this.sessionStorageKey,p.StorageCategory.Necessary).then(async i=>{if(s==="add"){const a=await this.read();if(t==="messages"&&a.messages.findIndex(d=>d.key===e.key)>-1){r();return}const n={...a};return t==="messages"?n.messages=[...n.messages,e]:t==="agents"&&(n.agents=[...n.agents,e]),i({...a,...n}).then(()=>{r()})}if(s==="update"&&t==="agents"){const a=await this.read();return i({...a,agents:e}).then(()=>{r()})}return i(e).then(()=>{r()})})}async read(){return p.readStorage(this.container,this.sessionStorageKey).then(e=>e||{messages:[],agents:[]})}}class j{constructor(e){c(this,"container");c(this,"widget");c(this,"print",(e,t,s=null)=>{const r=k(e,t);s=s??r.timestamp;const{events:i}=this.widget;return i==null||i.dispatch("tracking:conversation-message",{sender:"user"}),this.controller.createEntry(r.key,r.content,y.User,void 0,s)});var t;this.controller=e,this.container=e==null?void 0:e.container,this.widget=(t=this.container)==null?void 0:t.get("$widget")}}const x=async(o,e,t)=>{const s=await o.getAsync("conversation"),r=await o.getAsync("components"),i=s.controllers.find(a=>a.conversation.id===e);if(i){const a=[...i.conversation.providers];a.forEach(d=>{i.conversation.setProviderOptions(d,{silent:!0})}),i.conversation.queueProviders(a),i.conversation.setProviders([t]);const n=r.components().ofType("conversation");r.write({key:"setConversationProvider",attributes:{properties:{providers:[t]}},target:n,provider:"localStorage"})}};class ${constructor(e){this.writer=e}update(e){const t=this.getNormalizedSettings(e);this.writer(t)}remove(){this.writer(null)}getNormalizedSettings(e){return typeof e=="string"?{body:e}:e.length>-1&&typeof e=="object"?{items:e}:e}}var y=(o=>(o.User="user",o.Agent="agent",o.System="system",o))(y||{});const k=(o,e)=>{let t,s=(e==null?void 0:e.key)||E.uuid(),r=Date.now();if(Array.isArray(o)&&o.length>-1)typeof o[0]=="string"?t={items:[o]}:t={items:o};else if(typeof o=="string")t={body:o};else if(o=o||{},o.type)t={...o};else{if(t={body:o.body,actions:o.actions,title:o.title},o.key&&(s=o.key),o.timestamp&&(r=o.timestamp),typeof o.form=="function"){const i=L.FormBuilder.create(s);o.form(i);const a=i.get();t.form=a}o.timestamp===null&&(r=null)}return{content:t,key:s,timestamp:r}},W=(o,e)=>{if(!e)return;const t=JSON.stringify(e),s=o.findIndex(r=>t===JSON.stringify(r));if(s>-1)return o.splice(s,1)};class H{constructor(e,t,s){c(this,"formHandlers",{});c(this,"user",new j(this));c(this,"widget");c(this,"events");c(this,"providers",[]);c(this,"active",!1);c(this,"queuedProviders",[]);c(this,"registeredProviders",[]);c(this,"loaders",0);c(this,"componentMounted",!1);c(this,"store");c(this,"messages",[]);c(this,"typingActors",[]);c(this,"conversationHistory");c(this,"print",(e,t=null)=>{const s=k(e);t=t??s.timestamp;const{events:r}=this.widget;return r.dispatch("tracking:conversation-message",{sender:"system"}),this.createEntry(s.key,s.content,"system",void 0,t)});this.container=e,this.id=t,this.widget=e.get("$widget"),this.events=this.widget.events.createChild(this),this.store=new Q(e,this,s.rehydrate),this.conversationHistory=new U(this)}setInitialStorage(e){this.store.setInitialData(e)}setProviders(e){const t=[],s=[];this.providers.reduce((r,i)=>(e.indexOf(i)===-1&&r.push(i),r),[]).forEach(r=>{const i=this.providers.indexOf(r);i>-1&&(t.push(r),this.providers.splice(i,1))}),e.forEach(r=>{this.providers.indexOf(r)===-1&&(s.push(r),this.providers.push(r))}),(s.length||t.length)&&this.events.dispatch("conversation:providers-changed",{added:s,removed:t})}createProvider(e){const t=this.providerIndex(e);if(t>-1)return this.registeredProviders[t];const s=A.create(e,this.container,this);return this.registeredProviders.push(s),s}providerIndex(e){return this.registeredProviders.findIndex(t=>t.name===e)}getAgentById(e){if(e)return this.store.getStoredAgent(e)}dispose(){this.conversationHistory.dispose(),this.registeredProviders.forEach(e=>e.dispose()),this.messages=[],this.events.dispatch("conversation:controller-disposed",this),this.active=!1}onDispose(e){return this.events.subscribe("conversation:controller-disposed",e)}onStarted(e){return this.events.subscribe("conversation:started",e)}onMessageCreated(e){return this.events.subscribe("conversation:message-created",e)}isRehydrated(){return this.store.isRehydrated()}disposeProvider(e){const t=this.providerIndex(e.name);t>-1&&this.registeredProviders.splice(t,1),this.events.dispatch("conversation:providers-changed",{removed:[e.name]}),this.registeredProviders.length||this.dispose()}onProvidersChange(e){return this.events.subscribe("conversation:providers-changed",e)}setComponentMountedState(e){this.componentMounted!==e&&(this.componentMounted=e,e&&(this.events.dispatch("conversation:unread-message",!1),this.events.dispatch("conversation:started",!0),this.active=!0),this.events.dispatch("conversation:component-mount-changed",e))}setProviderOptions(e,t){const s=this.providerIndex(e);s>-1&&this.registeredProviders[s].setOptions(t)}changeProvider(e){this.registeredProviders.find(s=>s.name===e)&&x(this.container,this.id,e)}queueProviders(e){this.queuedProviders=e}onCompleteProvider(){const e=this.queuedProviders.pop();e&&x(this.container,this.id,e)}getComponentMountedState(){return this.componentMounted}onUnreadMessage(e){return this.events.subscribe("conversation:unread-message",e)}createEntry(e,t,s,r,i){const a={key:e,content:t,type:s,sender:r||null,timestamp:i||i===null?i:Date.now()};this.messages.push(a),a.type==="agent"&&W(this.typingActors,r);const n=new $(d=>{if(d!==null){const{timestamp:h=void 0,...u}=d;a.content=u,h&&(a.timestamp=h)}else{const h=this.messages.indexOf(a);a.content=null,h>-1&&this.messages.splice(h,1)}this.events.dispatch("conversation:message-updated",{message:a}),this.update()});return this.events.dispatch("conversation:message-created",{message:a}),this.update(),this.componentMounted||this.events.dispatch("conversation:unread-message",!0),n}update(){this.events.dispatch("conversation:updated",{messages:this.messages,loading:this.loaders>0,typingActors:this.typingActors})}getMessageStream(){return{messages:this.messages,loading:this.loaders>0,typingActors:this.typingActors}}setTypingState(e,t){return this.typingActors.indexOf(e)===-1&&(this.typingActors.push(e),this.update()),()=>{W(this.typingActors,e),this.update()}}loader(){this.loaders=this.loaders+1;let e=!1;return this.loaders===1&&this.update(),()=>{e||(e=!0,this.loaders=this.loaders-1,this.loaders===0&&this.update())}}submitForm(e,t){this.formHandlers[e]={...this.formHandlers[e],submit:t}}validateForm(e,t){this.formHandlers[e]={...this.formHandlers[e],validate:t}}getHistory(){return this.conversationHistory.getConversationLogs()}}const F=(o,e)=>{const t=o.split("_contact");return e.widgets.get(t[0])},I=o=>{const e=o.get("$widget"),{name:t,implementation:s}=o.get("$widget"),r=t.indexOf("_contact")>-1?F(t,s):e,{data:i}=o.get("$settings"),{trigger:a}=r.container.get("$settings"),n=`${t.replace("_contact-method","").replace("_contact","")}_contact-method`,d=s.widgets.get(n);return d&&!a?{chatWidget:d,mainWidget:r,data:i}:{mainWidget:r,data:i}},G=o=>{const{chatWidget:e}=I(o);return!!e},R=(o,e,t)=>{const{mainWidget:s,data:r,chatWidget:i}=I(o);return i?i.state==="activated"?i.invoke("open").then(()=>{i.container.getAsync("conversation").then(a=>{a.navigateToConversationIfActive(e.id).then(()=>M.closeAllModals(o))})}):i.activate().then(()=>{const{trigger:a}=i.container.get("$settings");return a.action="hide",i.invoke("setSettings",()=>({data:r,trigger:a,activate:!0})).then(()=>i.container.getAsync("components").then(n=>{const d=n.components().ofType("contact-method");n.write({key:"setContactMethodId",attributes:{properties:{id:e.id,guideId:e.guideId}},target:d,provider:"localStorage"});const h=n.components().ofType("conversation");n.write({key:"setConversationProvider",attributes:{properties:{providers:[e.clientName]}},target:h,provider:"localStorage"})}))}).then(()=>i.invoke("attach",{key:"contact-method",triggerDOMElement:t,withRenderState:"open"})).then(()=>(p.createStorageWriter(i.container,"activeStickyWidget",p.StorageCategory.Necessary,{medium:p.StorageMedium.Local,scope:p.StorageScope.Implementation}).then(a=>a(i.name)),i.container.getAsync("conversation").then(a=>{a.setConversationEndedBehavior(S.Deactivate)}).then(()=>M.closeAllModals(o)).then(()=>!1))):(s.container.getAsync("conversation").then(a=>a.navigateToConversationIfActive(e.id).then(()=>a.setConversationEndedBehavior(S.Navigate))),!i)},J=(o,e,t="conversation")=>{const{mainWidget:s,chatWidget:r}=I(o);return r?r.container.getAsync("router").then(i=>{i.navigate(t,{id:e.id})}):s.container.getAsync("conversation").then(i=>{var a;(a=i.setConversationEndedBehavior(S.Navigate))==null||a.then(()=>{s.container.getAsync("router").then(n=>{s.container.getAsync("components").then(d=>{const h=d.components().ofType("conversation");d.write({key:"setConversationProvider",attributes:{properties:{providers:[e.clientName]}},target:h,provider:"localStorage"})}).then(()=>{n.navigate(t,{id:e.id})})})})})},b="conversations";var S=(o=>(o.Deactivate="deactivate",o.Navigate="navigate",o.None="none",o))(S||{});class w{constructor(e,t){c(this,"events");c(this,"controllers",[]);c(this,"providers",[]);c(this,"disposeProviders",{});c(this,"subscriptions",[]);c(this,"storageWriter",null);c(this,"router",null);c(this,"buttonQuery",null);c(this,"sessionInfo",null);this.container=e,this.components=t;const s=e.get("$widget");this.events=s.events.createChild(this)}initialize(){p.createStorageWriter(this.container,b,p.StorageCategory.Necessary,{medium:p.StorageMedium.Local}).then(e=>this.storageWriter=e),p.readStorage(this.container,b,p.StorageMedium.Local).then(e=>{this.buttonQuery=this.components.components().ofType("conversation-return-button"),e&&(this.sessionInfo=e,e.id&&e.route&&this.writeToComponents({active:!0,alert:{show:!1}}))}),this.container.getAsync("router").then(e=>this.router=e),this.events.subscribe("conversation:ended",(e,t)=>{var s,r,i;switch((s=this.sessionInfo)==null?void 0:s.conversationEndedBehavior){case"deactivate":this.container.get("$widget").deactivate();break;case"navigate":const n=(r=this.router)==null?void 0:r.getInitialRoute();n&&((i=this.router)==null||i.navigate(n.name));break}this.writeToComponents({active:!1}),this.sessionInfo=null,this.storageWriter&&this.storageWriter()})}addSubscription(e){this.subscriptions.push(e)}static getInstance(e,t="conversation"){return E.lock(e)(()=>e.getAsync(t).then(s=>{let r=s;return r||D.ComponentPlatform.getInstance(e).then(i=>(r=new w(e,i),r.initialize(),e.registerAsync(t,()=>r),r))}))}navigateToConversationIfActive(e){return p.readStorage(this.container,b,p.StorageMedium.Local).then(t=>{var s;if(t&&t.id===e&&t.route){const{name:r,params:i}=t.route;(s=this.router)==null||s.navigate(r,i)}})}setConversationEndedBehavior(e){return p.readStorage(this.container,b,p.StorageMedium.Local).then(t=>{let s=t;return s?s.conversationEndedBehavior=e:s={conversationEndedBehavior:e},this.sessionInfo=s,this.storageWriter&&this.storageWriter(this.sessionInfo)||Promise.resolve()})}async createController(e,t){const s=O(e),{agents:r}=await p.readStorage(this.container,s)||{agents:[]},i=this.controllers.findIndex(n=>n.conversation.id===e);let a;return i>-1?a=this.controllers[i].conversation:a=new H(this.container,e,t),a.setInitialStorage({agents:r||[]}),a}registerProvider(e,t){const s={name:e,handler:t};this.providers.push(s),this.controllers.filter(r=>r.conversation.providers.indexOf(e)>-1).forEach(r=>{this.invokeHandler(s,r)})}registerController(e,t){const s=this.controllers.findIndex(i=>i.conversation.id===e.id);let r;if(s<0){r={conversation:e,component:t},this.controllers.push(r);const i=a=>{a&&this.providers.filter(n=>a.indexOf(n.name)>-1).forEach(n=>{this.invokeHandler(n,r)})};return this.subscriptions.push(e.onDispose((a,n)=>{const d=this.controllers.findIndex(h=>h.conversation===n);d>-1&&this.controllers.splice(d,1),this.components.components().ofType("conversation-return-button").select().writeProperties({active:!1}),this.events.dispatch("conversation:ended",{},{bubbles:!0})})),this.subscriptions.push(e.onProvidersChange((a,n)=>{const{added:d,removed:h=[]}=n;h.forEach(u=>{(this.disposeProviders[u]||[]).forEach(l=>{l()})}),i(d)})),this.subscriptions.push(e.onStarted((a,n)=>{var h,u;const d={id:e.id,route:(h=this.router)==null?void 0:h.getRouteData(),conversationEndedBehavior:(u=this.sessionInfo)==null?void 0:u.conversationEndedBehavior};this.sessionInfo=d,this.storageWriter&&this.storageWriter(d),this.writeToComponents({active:n})})),this.subscriptions.push(e.onUnreadMessage((a,n)=>{this.events.dispatch("conversation:unread-message",n),this.writeToComponents({alert:{show:n}})})),i(e.providers),!0}return r=this.controllers[s],!1}writeToComponents(e,t="conversationReturnButtonState"){this.buttonQuery&&this.components.write({key:"conversationReturnButtonState",attributes:{properties:e},target:this.buttonQuery,provider:"localStorage"})}invokeHandler(e,t){const s=e.handler(t.conversation.createProvider(e.name),t.component);s&&(this.disposeProviders[e.name]||(this.disposeProviders[e.name]=[]),this.disposeProviders[e.name].push(s))}getComponentRoute(){return p.readStorage(this.container,b,p.StorageMedium.Local).then(e=>e==null?void 0:e.route)}dispose(){Object.keys(this.disposeProviders).forEach(e=>{this.disposeProviders[e].forEach(t=>{t()})}),this.subscriptions.forEach(e=>{e()}),this.controllers=[],this.providers=[]}static async handleContactMethodClick(e,t,s,r){if(G(t)){e.preventDefault();let i=document.getElementById("humany-dynamic-anchor");i||(i=document.createElement("a"),i.setAttribute("href","#"),i.id="humany-dynamic-anchor",document.body.appendChild(i)),R(t,s,i)}R(t,s)}static async handleContactMethodSubmit(e,t){var s,r;return(r=(s=t==null?void 0:t.body.form.meta)==null?void 0:s.conversation)!=null&&r.id?x(e,t.body.form.meta.conversation.id,t.clientName):J(e,t)}}const V=(o,e)=>o.reduce((t,s,r)=>{var a,n;const i={...s,content:[{...s.content,key:s.key}]};if(t.length>0&&s.type!==y.System){const d=t[t.length-1];if((!e&&e!==0||Math.abs(d.timestamp-s.timestamp)<e)&&((a=d.sender)==null?void 0:a.name)===((n=s.sender)==null?void 0:n.name)&&d.type===s.type)return d.timestamp=s.timestamp,d.content.push({...s.content,key:s.key}),t}return t.push(i),t},[]),Y=o=>Promise.all([w.getInstance(o),o.getAsync("router")]).then(([e,t])=>N.createReactComponent(o,"conversation",Promise.resolve().then(()=>require("./conversation-a202d402.js")),async s=>{const{rehydrate:r=!1}=s.properties(),a=t.getRouteData().params.id||s.node.name||"component",n=await e.createController(a,{rehydrate:r}),d=e.registerController(n,s),h=3*60*1e3,u=v=>{const{providers:g=[]}=v;if(g){const f=Array.isArray(g)?g:[g];return n.setProviders(f),f}};u(s.properties(u)),n.setComponentMountedState(!0);const l=v=>{const{loading:g,typingActors:f,messages:C}=v;s.writeProperties({loading:g,typingActors:f,messages:V(C,h)})};l(n.getMessageStream()),d&&(s.writeProperties({conversationControllerId:n.id}),s.actions.create("user-submit",(v,g)=>{if(g){const{preventDefault:f,validationPromise:C}=g;if(f){C&&C().then(T=>{T&&n.user.print(T)});return}}n.user.print(v.text)}),s.actions.create("user-typing",(v,g)=>{}),s.actions.create("form",(v,g)=>{}),s.actions.create("action",(v,g)=>{}),s.actions.create("overlay-mounted",(v,g)=>{}),s.actions.create("show-overlay",(v,g)=>{s.writeProperties({overlay:{conversation:!1,secondary:!1}})}),s.actions.create("hide-overlay",(v,g)=>{s.writeProperties({overlay:null})}),s.actions.create("show-overlay-conversation",(v,g)=>{s.writeProperties({overlay:{conversation:!0,secondary:!1}})}),s.actions.create("hide-overlay-conversation",(v,g)=>{s.writeProperties({overlay:{conversation:!1,secondary:!1}})}));const m=n.events.subscribe("conversation:updated",(v,g)=>{l(g)});return()=>{n.setComponentMountedState(!1),m(),n.active||l({messages:[],typingActors:[],loading:!1})}},{reuseController:!0})),X=o=>Promise.all([D.ComponentPlatform.getInstance(o),w.getInstance(o),o.getAsync("router")]).then(([e,t,s])=>N.createReactComponent(o,"conversation-return-button",Promise.resolve().then(()=>require("./return-button-f1f43984.js")),r=>{r.actions.create("toggle",(i={})=>{var a;(a=t.getComponentRoute())==null||a.then(n=>{n&&s.navigate(n.name,n.params)})})}));var B=(o=>(o.LinkList="link-list",o.Separator="separator",o.ButtonList="button-list",o.ItemList="item-list",o.Text="text",o.HTML="html",o.VideoRequest="video-request",o))(B||{});const Z=(o,e,t)=>o.getAsync("componentResolver").then(async s=>{(await w.getInstance(o)).addSubscription(s.registerComponent(e,z.lazy(()=>t)))});exports.Agent=P;exports.ConversationComponent=Y;exports.ConversationController=H;exports.ConversationEndedBehavior=S;exports.ConversationEntry=$;exports.ConversationMessageListItemType=B;exports.ConversationMessageType=y;exports.ConversationPlatform=w;exports.ConversationProvider=A;exports.ConversationReturnButtonComponent=X;exports.registerCustomMessageComponent=Z;
3
+ ${t}`:e.length?`${e} ${t}`:t}dispose(){this.subscriptions.forEach(e=>{e()})}}class P{constructor(e,t){c(this,"id");c(this,"name");c(this,"avatar");c(this,"container");c(this,"widget");c(this,"print",(e,t,s=null)=>{const r={name:this.name,avatar:this.avatar,id:this.id},i=k(e,t);s=s??i.timestamp;const{events:a}=this.widget;return a==null||a.dispatch("tracking:conversation-message",{sender:"agent"}),this.provider.createEntry(i.key,i.content,y.Agent,r,s)});c(this,"typing",()=>this.provider.setTypingState({name:this.name,avatar:this.avatar}));var s,r;this.provider=e,this.id=t.id||E.uuid(),this.name=t.name,this.avatar=t.avatar,this.container=(s=e.controller)==null?void 0:s.container,this.widget=(r=this.container)==null?void 0:r.get("$widget")}update(e){var r;const{name:t,avatar:s}=e;s===null?this.avatar=void 0:s&&(this.avatar=s),t===null?this.name=void 0:t&&(this.name=t),(r=this.provider.controller)==null||r.events.dispatch("conversation:agent-updated",{agent:this})}}class A{constructor(e,t,s){c(this,"subscriptions",[]);c(this,"options");c(this,"user");this.name=e,this.container=t,this.controller=s,this.user=s==null?void 0:s.user,this.options={silent:!1}}static create(e,t,s){return new A(e,t,s)}createAgent(e={}){var t;if(this.controller){const s=this.controller.getAgentById(e.id),r=s?new P(this,{...s,...e}):new P(this,e);return s||(t=this.controller)==null||t.events.dispatch("conversation:agent-created",{agent:r}),r}}print(e){var t;return(t=this.controller)==null?void 0:t.print(e)}setTypingState(e,t){var s;return(s=this.controller)==null?void 0:s.setTypingState(e,t)}loading(){return this.controller?this.controller.loader():()=>()=>{}}createEntry(e,t,s,r,i){var a;return(a=this.controller)==null?void 0:a.createEntry(e,t,s,r,i)}dispose(){var e;process.env.NODE_ENV!=="production"&&console.log(`conversation-provider: dispose (${this.name})`),(e=this.controller)==null||e.disposeProvider(this),this.controller=null,this.subscriptions.forEach(t=>t())}isRehydrated(){var e;return((e=this.controller)==null?void 0:e.isRehydrated())||Promise.resolve(!1)}getHistory(){var e;return((e=this.controller)==null?void 0:e.getHistory())||[]}complete(){var e;(e=this.controller)==null||e.onCompleteProvider()}setOptions(e={silent:!1}){this.options=e}onUnreadMessage(e){var t;if(this.controller){const s=(t=this.controller)==null?void 0:t.onUnreadMessage(e);return this.subscriptions.push(s),()=>{s()}}}onMounted(e){var t;if(this.controller){const s=(t=this.controller)==null?void 0:t.events.subscribe("conversation:component-mount-changed",e);return this.subscriptions.push(s),e({},this.controller.getComponentMountedState()),()=>{s()}}}}const O=o=>`conversation-${o}`;class K{constructor(){c(this,"_locking",Promise.resolve());c(this,"_locks",0)}isLocked(){return this._locks>0}lock(){this._locks+=1;let e;const t=new Promise(r=>e=()=>{this._locks-=1,r()}),s=this._locking.then(()=>e);return this._locking=this._locking.then(()=>t),s}}class Q{constructor(e,t,s){c(this,"sessionStorageKey");c(this,"locker",new K);c(this,"initialStoredAgents",[]);this.container=e,this.conversation=t,this.enabled=s,this.sessionStorageKey=O(t.id),t.onStarted(async()=>{if(t.messages.length>0)return;const{agents:r}=await this.read(),i=[];r&&r.forEach(n=>{const d=t.providerIndex(n.providerName),h=d>-1?t.registeredProviders[d]:t.createProvider(n.providerName),u=new P(h,{name:n.name,avatar:n.avatar,id:n.id});i.push(u)});const{messages:a}=await this.read();a.forEach(n=>{switch(n.type){case"agent":{const d=i.find(h=>{var u;return h.id===((u=n.sender)==null?void 0:u.id)});d&&d.print(n.content.items||n.content,{key:n.key},n.timestamp);return}case"user":{t.user.print(n.content.items||n.content,{key:n.key},n.timestamp);return}case"system":default:t.print(n.content.items||n.content,n.timestamp)}})}),t.onMessageCreated(async(r,i)=>{this.write(i.message,"messages")}),t.events.subscribe("conversation:agent-created",async(r,i)=>{const a={id:i.agent.id,name:i.agent.name,avatar:i.agent.avatar,providerName:i.agent.provider.name};await this.write(a,"agents")}),t.events.subscribe("conversation:agent-updated",async(r,i)=>{const{agents:a}=await this.read();await this.write([...a.map(n=>n.id===i.agent.id?{...n,name:i.agent.name,avatar:i.agent.avatar}:n)],"agents","update")})}setInitialData(e){this.initialStoredAgents=e.agents}async isRehydrated(){const{messages:e}=await this.read();return e.length>0}getStoredAgent(e){if(this.enabled)return this.initialStoredAgents.find(t=>t.id===e)}async write(e,t,s="add"){if(!this.enabled)return;const r=await this.locker.lock();return p.createStorageWriter(this.container,this.sessionStorageKey,p.StorageCategory.Necessary).then(async i=>{if(s==="add"){const a=await this.read();if(t==="messages"&&a.messages.findIndex(d=>d.key===e.key)>-1){r();return}const n={...a};return t==="messages"?n.messages=[...n.messages,e]:t==="agents"&&(n.agents=[...n.agents,e]),i({...a,...n}).then(()=>{r()})}if(s==="update"&&t==="agents"){const a=await this.read();return i({...a,agents:e}).then(()=>{r()})}return i(e).then(()=>{r()})})}async read(){return p.readStorage(this.container,this.sessionStorageKey).then(e=>e||{messages:[],agents:[]})}}class j{constructor(e){c(this,"container");c(this,"widget");c(this,"print",(e,t,s=null)=>{const r=k(e,t);s=s??r.timestamp;const{events:i}=this.widget;return i==null||i.dispatch("tracking:conversation-message",{sender:"user"}),this.controller.createEntry(r.key,r.content,y.User,void 0,s)});var t;this.controller=e,this.container=e==null?void 0:e.container,this.widget=(t=this.container)==null?void 0:t.get("$widget")}}const x=async(o,e,t)=>{const s=await o.getAsync("conversation"),r=await o.getAsync("components"),i=s.controllers.find(a=>a.conversation.id===e);if(i){const a=[...i.conversation.providers];a.forEach(d=>{i.conversation.setProviderOptions(d,{silent:!0})}),i.conversation.queueProviders(a),i.conversation.setProviders([t]);const n=r.components().ofType("conversation");r.write({key:"setConversationProvider",attributes:{properties:{providers:[t]}},target:n,provider:"localStorage"})}};class ${constructor(e){this.writer=e}update(e){const t=this.getNormalizedSettings(e);this.writer(t)}remove(){this.writer(null)}getNormalizedSettings(e){return typeof e=="string"?{body:e}:e.length>-1&&typeof e=="object"?{items:e}:e}}var y=(o=>(o.User="user",o.Agent="agent",o.System="system",o))(y||{});const k=(o,e)=>{let t,s=(e==null?void 0:e.key)||E.uuid(),r=Date.now();if(Array.isArray(o)&&o.length>-1)typeof o[0]=="string"?t={items:[o]}:t={items:o};else if(typeof o=="string")t={body:o};else if(o=o||{},o.type)t={...o};else{if(t={body:o.body,actions:o.actions,title:o.title},o.key&&(s=o.key),o.timestamp&&(r=o.timestamp),typeof o.form=="function"){const i=L.FormBuilder.create(s);o.form(i);const a=i.get();t.form=a}o.timestamp===null&&(r=null)}return{content:t,key:s,timestamp:r}},W=(o,e)=>{if(!e)return;const t=JSON.stringify(e),s=o.findIndex(r=>t===JSON.stringify(r));if(s>-1)return o.splice(s,1)};class H{constructor(e,t,s){c(this,"formHandlers",{});c(this,"user",new j(this));c(this,"widget");c(this,"events");c(this,"providers",[]);c(this,"active",!1);c(this,"queuedProviders",[]);c(this,"registeredProviders",[]);c(this,"loaders",0);c(this,"componentMounted",!1);c(this,"store");c(this,"messages",[]);c(this,"typingActors",[]);c(this,"conversationHistory");c(this,"print",(e,t=null)=>{const s=k(e);t=t??s.timestamp;const{events:r}=this.widget;return r.dispatch("tracking:conversation-message",{sender:"system"}),this.createEntry(s.key,s.content,"system",void 0,t)});this.container=e,this.id=t,this.widget=e.get("$widget"),this.events=this.widget.events.createChild(this),this.store=new Q(e,this,s.rehydrate),this.conversationHistory=new U(this)}setInitialStorage(e){this.store.setInitialData(e)}setProviders(e){const t=[],s=[];this.providers.reduce((r,i)=>(e.indexOf(i)===-1&&r.push(i),r),[]).forEach(r=>{const i=this.providers.indexOf(r);i>-1&&(t.push(r),this.providers.splice(i,1))}),e.forEach(r=>{this.providers.indexOf(r)===-1&&(s.push(r),this.providers.push(r))}),(s.length||t.length)&&this.events.dispatch("conversation:providers-changed",{added:s,removed:t})}createProvider(e){const t=this.providerIndex(e);if(t>-1)return this.registeredProviders[t];const s=A.create(e,this.container,this);return this.registeredProviders.push(s),s}providerIndex(e){return this.registeredProviders.findIndex(t=>t.name===e)}getAgentById(e){if(e)return this.store.getStoredAgent(e)}dispose(){this.conversationHistory.dispose(),this.registeredProviders.forEach(e=>e.dispose()),this.messages=[],this.events.dispatch("conversation:controller-disposed",this),this.active=!1}onDispose(e){return this.events.subscribe("conversation:controller-disposed",e)}onStarted(e){return this.events.subscribe("conversation:started",e)}onMessageCreated(e){return this.events.subscribe("conversation:message-created",e)}isRehydrated(){return this.store.isRehydrated()}disposeProvider(e){const t=this.providerIndex(e.name);t>-1&&this.registeredProviders.splice(t,1),this.events.dispatch("conversation:providers-changed",{removed:[e.name]}),this.registeredProviders.length||this.dispose()}onProvidersChange(e){return this.events.subscribe("conversation:providers-changed",e)}setComponentMountedState(e){this.componentMounted!==e&&(this.componentMounted=e,e&&(this.events.dispatch("conversation:unread-message",!1),this.events.dispatch("conversation:started",!0),this.active=!0),this.events.dispatch("conversation:component-mount-changed",e))}setProviderOptions(e,t){const s=this.providerIndex(e);s>-1&&this.registeredProviders[s].setOptions(t)}changeProvider(e){this.registeredProviders.find(s=>s.name===e)&&x(this.container,this.id,e)}queueProviders(e){this.queuedProviders=e}onCompleteProvider(){const e=this.queuedProviders.pop();e&&x(this.container,this.id,e)}getComponentMountedState(){return this.componentMounted}onUnreadMessage(e){return this.events.subscribe("conversation:unread-message",e)}createEntry(e,t,s,r,i){const a={key:e,content:t,type:s,sender:r||null,timestamp:i||i===null?i:Date.now()};this.messages.push(a),a.type==="agent"&&W(this.typingActors,r);const n=new $(d=>{if(d!==null){const{timestamp:h=void 0,...u}=d;a.content=u,h&&(a.timestamp=h)}else{const h=this.messages.indexOf(a);a.content=null,h>-1&&this.messages.splice(h,1)}this.events.dispatch("conversation:message-updated",{message:a}),this.update()});return this.events.dispatch("conversation:message-created",{message:a}),this.update(),this.componentMounted||this.events.dispatch("conversation:unread-message",!0),n}update(){this.events.dispatch("conversation:updated",{messages:this.messages,loading:this.loaders>0,typingActors:this.typingActors})}getMessageStream(){return{messages:this.messages,loading:this.loaders>0,typingActors:this.typingActors}}setTypingState(e,t){return this.typingActors.indexOf(e)===-1&&(this.typingActors.push(e),this.update()),()=>{W(this.typingActors,e),this.update()}}loader(){this.loaders=this.loaders+1;let e=!1;return this.loaders===1&&this.update(),()=>{e||(e=!0,this.loaders=this.loaders-1,this.loaders===0&&this.update())}}submitForm(e,t){this.formHandlers[e]={...this.formHandlers[e],submit:t}}validateForm(e,t){this.formHandlers[e]={...this.formHandlers[e],validate:t}}getHistory(){return this.conversationHistory.getConversationLogs()}}const F=(o,e)=>{const t=o.split("_contact");return e.widgets.get(t[0])},I=o=>{const e=o.get("$widget"),{name:t,implementation:s}=o.get("$widget"),r=t.indexOf("_contact")>-1?F(t,s):e,{data:i}=o.get("$settings"),{trigger:a}=r.container.get("$settings"),n=`${t.replace("_contact-method","").replace("_contact","")}_contact-method`,d=s.widgets.get(n);return d&&!a?{chatWidget:d,mainWidget:r,data:i}:{mainWidget:r,data:i}},G=o=>{const{chatWidget:e}=I(o);return!!e},R=(o,e,t)=>{const{mainWidget:s,data:r,chatWidget:i}=I(o);return i?i.state==="activated"?i.invoke("open").then(()=>{i.container.getAsync("conversation").then(a=>{a.navigateToConversationIfActive(e.id).then(()=>M.closeAllModals(o))})}):i.activate().then(()=>{const{trigger:a}=i.container.get("$settings");return a.action="hide",i.invoke("setSettings",()=>({data:r,trigger:a,activate:!0})).then(()=>i.container.getAsync("components").then(n=>{const d=n.components().ofType("contact-method");n.write({key:"setContactMethodId",attributes:{properties:{id:e.id,guideId:e.guideId}},target:d,provider:"localStorage"});const h=n.components().ofType("conversation");n.write({key:"setConversationProvider",attributes:{properties:{providers:[e.clientName]}},target:h,provider:"localStorage"})}))}).then(()=>i.invoke("attach",{key:"contact-method",triggerDOMElement:t,withRenderState:"open"})).then(()=>(p.createStorageWriter(i.container,"activeStickyWidget",p.StorageCategory.Necessary,{medium:p.StorageMedium.Local,scope:p.StorageScope.Implementation}).then(a=>a(i.name)),i.container.getAsync("conversation").then(a=>{a.setConversationEndedBehavior(S.Deactivate)}).then(()=>M.closeAllModals(o)).then(()=>!1))):(s.container.getAsync("conversation").then(a=>a.navigateToConversationIfActive(e.id).then(()=>a.setConversationEndedBehavior(S.Navigate))),!i)},J=(o,e,t="conversation")=>{const{mainWidget:s,chatWidget:r}=I(o);return r?r.container.getAsync("router").then(i=>{i.navigate(t,{id:e.id})}):s.container.getAsync("conversation").then(i=>{var a;(a=i.setConversationEndedBehavior(S.Navigate))==null||a.then(()=>{s.container.getAsync("router").then(n=>{s.container.getAsync("components").then(d=>{const h=d.components().ofType("conversation");d.write({key:"setConversationProvider",attributes:{properties:{providers:[e.clientName]}},target:h,provider:"localStorage"})}).then(()=>{n.navigate(t,{id:e.id})})})})})},b="conversations";var S=(o=>(o.Deactivate="deactivate",o.Navigate="navigate",o.None="none",o))(S||{});class w{constructor(e,t){c(this,"events");c(this,"controllers",[]);c(this,"providers",[]);c(this,"disposeProviders",{});c(this,"subscriptions",[]);c(this,"storageWriter",null);c(this,"router",null);c(this,"buttonQuery",null);c(this,"sessionInfo",null);this.container=e,this.components=t;const s=e.get("$widget");this.events=s.events.createChild(this)}initialize(){p.createStorageWriter(this.container,b,p.StorageCategory.Necessary,{medium:p.StorageMedium.Local}).then(e=>this.storageWriter=e),p.readStorage(this.container,b,p.StorageMedium.Local).then(e=>{this.buttonQuery=this.components.components().ofType("conversation-return-button"),e&&(this.sessionInfo=e,e.id&&e.route&&this.writeToComponents({active:!0,alert:{show:!1}}))}),this.container.getAsync("router").then(e=>this.router=e),this.events.subscribe("conversation:ended",(e,t)=>{var s,r,i;switch((s=this.sessionInfo)==null?void 0:s.conversationEndedBehavior){case"deactivate":this.container.get("$widget").deactivate();break;case"navigate":const n=(r=this.router)==null?void 0:r.getInitialRoute();n&&((i=this.router)==null||i.navigate(n.name));break}this.writeToComponents({active:!1}),this.sessionInfo=null,this.storageWriter&&this.storageWriter()})}addSubscription(e){this.subscriptions.push(e)}static getInstance(e,t="conversation"){return E.lock(e)(()=>e.getAsync(t).then(s=>{let r=s;return r||D.ComponentPlatform.getInstance(e).then(i=>(r=new w(e,i),r.initialize(),e.registerAsync(t,()=>r),r))}))}navigateToConversationIfActive(e){return p.readStorage(this.container,b,p.StorageMedium.Local).then(t=>{var s;if(t&&t.id===e&&t.route){const{name:r,params:i}=t.route;(s=this.router)==null||s.navigate(r,i)}})}setConversationEndedBehavior(e){return p.readStorage(this.container,b,p.StorageMedium.Local).then(t=>{let s=t;return s?s.conversationEndedBehavior=e:s={conversationEndedBehavior:e},this.sessionInfo=s,this.storageWriter&&this.storageWriter(this.sessionInfo)||Promise.resolve()})}async createController(e,t){const s=O(e),{agents:r}=await p.readStorage(this.container,s)||{agents:[]},i=this.controllers.findIndex(n=>n.conversation.id===e);let a;return i>-1?a=this.controllers[i].conversation:a=new H(this.container,e,t),a.setInitialStorage({agents:r||[]}),a}registerProvider(e,t){const s={name:e,handler:t};this.providers.push(s),this.controllers.filter(r=>r.conversation.providers.indexOf(e)>-1).forEach(r=>{this.invokeHandler(s,r)})}registerController(e,t){const s=this.controllers.findIndex(i=>i.conversation.id===e.id);let r;if(s<0){r={conversation:e,component:t},this.controllers.push(r);const i=a=>{a&&this.providers.filter(n=>a.indexOf(n.name)>-1).forEach(n=>{this.invokeHandler(n,r)})};return this.subscriptions.push(e.onDispose((a,n)=>{const d=this.controllers.findIndex(h=>h.conversation===n);d>-1&&this.controllers.splice(d,1),this.components.components().ofType("conversation-return-button").select().writeProperties({active:!1}),this.events.dispatch("conversation:ended",{},{bubbles:!0})})),this.subscriptions.push(e.onProvidersChange((a,n)=>{const{added:d,removed:h=[]}=n;h.forEach(u=>{(this.disposeProviders[u]||[]).forEach(l=>{l()})}),i(d)})),this.subscriptions.push(e.onStarted((a,n)=>{var h,u;const d={id:e.id,route:(h=this.router)==null?void 0:h.getRouteData(),conversationEndedBehavior:(u=this.sessionInfo)==null?void 0:u.conversationEndedBehavior};this.sessionInfo=d,this.storageWriter&&this.storageWriter(d),this.writeToComponents({active:n})})),this.subscriptions.push(e.onUnreadMessage((a,n)=>{this.events.dispatch("conversation:unread-message",n),this.writeToComponents({alert:{show:n}})})),i(e.providers),!0}return r=this.controllers[s],!1}writeToComponents(e,t="conversationReturnButtonState"){this.buttonQuery&&this.components.write({key:"conversationReturnButtonState",attributes:{properties:e},target:this.buttonQuery,provider:"localStorage"})}invokeHandler(e,t){const s=e.handler(t.conversation.createProvider(e.name),t.component);s&&(this.disposeProviders[e.name]||(this.disposeProviders[e.name]=[]),this.disposeProviders[e.name].push(s))}getComponentRoute(){return p.readStorage(this.container,b,p.StorageMedium.Local).then(e=>e==null?void 0:e.route)}dispose(){Object.keys(this.disposeProviders).forEach(e=>{this.disposeProviders[e].forEach(t=>{t()})}),this.subscriptions.forEach(e=>{e()}),this.controllers=[],this.providers=[]}static async handleContactMethodClick(e,t,s,r){if(G(t)){e.preventDefault();let i=document.getElementById("humany-dynamic-anchor");i||(i=document.createElement("a"),i.setAttribute("href","#"),i.id="humany-dynamic-anchor",document.body.appendChild(i)),R(t,s,i)}R(t,s)}static async handleContactMethodSubmit(e,t){var s,r;return(r=(s=t==null?void 0:t.body.form.meta)==null?void 0:s.conversation)!=null&&r.id?x(e,t.body.form.meta.conversation.id,t.clientName):J(e,t)}}const V=(o,e)=>o.reduce((t,s,r)=>{var a,n;const i={...s,content:[{...s.content,key:s.key}]};if(t.length>0&&s.type!==y.System){const d=t[t.length-1];if((!e&&e!==0||Math.abs(d.timestamp-s.timestamp)<e)&&((a=d.sender)==null?void 0:a.name)===((n=s.sender)==null?void 0:n.name)&&d.type===s.type)return d.timestamp=s.timestamp,d.content.push({...s.content,key:s.key}),t}return t.push(i),t},[]),Y=o=>Promise.all([w.getInstance(o),o.getAsync("router")]).then(([e,t])=>N.createReactComponent(o,"conversation",Promise.resolve().then(()=>require("./conversation-eaa1e841.js")),async s=>{const{rehydrate:r=!1}=s.properties(),a=t.getRouteData().params.id||s.node.name||"component",n=await e.createController(a,{rehydrate:r}),d=e.registerController(n,s),h=3*60*1e3,u=v=>{const{providers:g=[]}=v;if(g){const f=Array.isArray(g)?g:[g];return n.setProviders(f),f}};u(s.properties(u)),n.setComponentMountedState(!0);const l=v=>{const{loading:g,typingActors:f,messages:C}=v;s.writeProperties({loading:g,typingActors:f,messages:V(C,h)})};l(n.getMessageStream()),d&&(s.writeProperties({conversationControllerId:n.id}),s.actions.create("user-submit",(v,g)=>{if(g){const{preventDefault:f,validationPromise:C}=g;if(f){C&&C().then(T=>{T&&n.user.print(T)});return}}n.user.print(v.text)}),s.actions.create("user-typing",(v,g)=>{}),s.actions.create("form",(v,g)=>{}),s.actions.create("action",(v,g)=>{}),s.actions.create("overlay-mounted",(v,g)=>{}),s.actions.create("show-overlay",(v,g)=>{s.writeProperties({overlay:{conversation:!1,secondary:!1}})}),s.actions.create("hide-overlay",(v,g)=>{s.writeProperties({overlay:null})}),s.actions.create("show-overlay-conversation",(v,g)=>{s.writeProperties({overlay:{conversation:!0,secondary:!1}})}),s.actions.create("hide-overlay-conversation",(v,g)=>{s.writeProperties({overlay:{conversation:!1,secondary:!1}})}));const m=n.events.subscribe("conversation:updated",(v,g)=>{l(g)});return()=>{n.setComponentMountedState(!1),m(),n.active||l({messages:[],typingActors:[],loading:!1})}},{reuseController:!0})),X=o=>Promise.all([D.ComponentPlatform.getInstance(o),w.getInstance(o),o.getAsync("router")]).then(([e,t,s])=>N.createReactComponent(o,"conversation-return-button",Promise.resolve().then(()=>require("./return-button-f1f43984.js")),r=>{r.actions.create("toggle",(i={})=>{var a;(a=t.getComponentRoute())==null||a.then(n=>{n&&s.navigate(n.name,n.params)})})}));var B=(o=>(o.LinkList="link-list",o.Separator="separator",o.ButtonList="button-list",o.ItemList="item-list",o.Text="text",o.HTML="html",o.VideoRequest="video-request",o))(B||{});const Z=(o,e,t)=>o.getAsync("componentResolver").then(async s=>{(await w.getInstance(o)).addSubscription(s.registerComponent(e,z.lazy(()=>t)))});exports.Agent=P;exports.ConversationComponent=Y;exports.ConversationController=H;exports.ConversationEndedBehavior=S;exports.ConversationEntry=$;exports.ConversationMessageListItemType=B;exports.ConversationMessageType=y;exports.ConversationPlatform=w;exports.ConversationProvider=A;exports.ConversationReturnButtonComponent=X;exports.registerCustomMessageComponent=Z;
package/index.mjs CHANGED
@@ -956,7 +956,7 @@ const ee = (o, e) => o.reduce((t, s, r) => {
956
956
  ]).then(([e, t]) => H(
957
957
  o,
958
958
  "conversation",
959
- import("./conversation-8295aeca.mjs"),
959
+ import("./conversation-78933b09.mjs"),
960
960
  async (s) => {
961
961
  const { rehydrate: r = !1 } = s.properties(), a = t.getRouteData().params.id || s.node.name || "component", n = await e.createController(a, {
962
962
  rehydrate: r