@botfabrik/engine-webclient 4.65.2 → 4.66.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ @import"//fonts.googleapis.com/css?family=Roboto:400,300,700,500,100,200";html{font-family:Roboto,sans-serif}body{margin:0}._app_tur9j_10{display:flex;flex-direction:row;height:100vh;height:100svh}:root{--aspect-ratio: calc(16 / 9);--body-background-color: white;--brand-primary-color: rgb(4, 47, 97);--brand-secondary-color: white;--danger-color: #b11106;--scrollbar-thumb-color: #adadad;--avatar-size: 2rem;--avatar-radius: 50%;--bot-avatar-background-color: rgb(233, 239, 246);--agent-avatar-background-color: rgb(233, 239, 246);--bubble-padding: .9em 1.3em;--bubble-margin-small: 3px;--bubble-margin-large: 1.2rem;--bubble-radius-large: 20px;--bubble-radius-small: 4px;--bot-bubble-background-color: white;--bot-bubble-text-color: #2e2e2e;--bot-bubble-border-color: #434343;--bot-bubble-border-width: 2px;--bot-bubble-top-left-radius: var(--bubble-radius-small);--bot-bubble-top-right-radius: var(--bubble-radius-large);--bot-bubble-bottom-right-radius: var(--bubble-radius-large);--bot-bubble-bottom-left-radius: var(--bubble-radius-small);--guest-bubble-background-color: var(--brand-primary-color);--guest-bubble-text-color: white;--guest-bubble-border-color: white;--guest-bubble-border-width: 0px;--guest-bubble-top-left-radius: var(--bubble-radius-large);--guest-bubble-top-right-radius: var(--bubble-radius-small);--guest-bubble-bottom-right-radius: var(--bubble-radius-small);--guest-bubble-bottom-left-radius: var(--bubble-radius-large)}::-webkit-scrollbar{width:8px;border:none}::-webkit-scrollbar-track{background:var(--body-background-color)}::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb-color)}input::placeholder,textarea::placeholder{color:#666;opacity:1}._button_1e5of_54{display:inline-block;font-family:inherit;font-size:1em;padding:.5em 1em;border-radius:.2rem;background-color:#fff;cursor:pointer;transition:all .2s linear;text-align:center}._buttonDefault_1e5of_66{color:#000000d9;background-color:#fff;border:2px solid #adadad}._buttonDefault_1e5of_66:hover{color:var(--brand-primary-color);border:2px solid var(--brand-primary-color)}._buttonDefault_1e5of_66:disabled{cursor:not-allowed;opacity:.3}._buttonPrimary_1e5of_80{color:var(--brand-secondary-color);background-color:var(--brand-primary-color);border:2px solid var(--brand-primary-color)}._buttonPrimary_1e5of_80:hover{color:var(--brand-primary-color);background-color:var(--brand-secondary-color);border:2px solid var(--brand-primary-color)}._buttonPrimary_1e5of_80:disabled{cursor:not-allowed;opacity:.3;color:var(--brand-secondary-color);background-color:var(--brand-primary-color)}svg{fill:currentColor}._accessabilityHidden_1e5of_132{visibility:hidden}._messageContainer_1wdci_1{flex:1;overflow-y:scroll;overscroll-behavior:contain;padding-top:1rem;position:relative;-webkit-overflow-scrolling:touch}._messages_1wdci_10{position:relative;list-style:none;font-size:.9rem;line-height:1.4;padding:0 1rem;margin:0;overflow-wrap:break-word;word-wrap:break-word}@media (min-width: 36rem){._messageContainer_1wdci_1{padding-top:2rem}._messages_1wdci_10{font-size:1rem;line-height:1.8}}._generalConditionsContainer_1ijeb_1{margin-bottom:1.2rem;margin-left:1rem;margin-right:1rem}._generalConditions_1ijeb_1{transition:all .5s linear;background-color:var(--bot-bubble-background-color);color:var(--bot-bubble-text-color);padding:.9em 1.3em;font-size:.9rem}._generalConditionsHeader_1ijeb_15{display:flex;align-items:flex-end;justify-content:space-between;cursor:pointer}._generalConditionsHeader_1ijeb_15:focus{outline:none}._generalConditionsBody_1ijeb_25{display:flex;align-items:flex-end}._generalConditionsBody_1ijeb_25:focus{outline:none}._generalConditionsAccept_1ijeb_33{padding:.9em 1.3em;font-size:.9rem}._generalConditionsAccept_1ijeb_33:focus{outline:none}._message_1exlf_5{--bubble-margin: var(--bubble-margin-small);margin-bottom:var(--bubble-margin);transition:border-radius .5s}._messageBot_1exlf_11{display:flex;align-items:flex-end}._messageBot_1exlf_11:not(._messageBotLast_1exlf_15) ._avatar_1exlf_15{visibility:hidden}._messageBotFirst_1exlf_19{--bot-bubble-top-left-radius: var(--bubble-radius-large);--bot-bubble-top-right-radius: var(--bubble-radius-large);--bot-bubble-bottom-right-radius: var(--bubble-radius-large)}._messageBotLast_1exlf_15{--bot-bubble-top-right-radius: var(--bubble-radius-large);--bot-bubble-bottom-left-radius: var(--bubble-radius-large);--bot-bubble-bottom-right-radius: var(--bubble-radius-large);--bubble-margin: var(--bubble-margin-large)}._messageBotAnimated_1exlf_32{animation-duration:.25s;animation-timing-function:ease-in;animation-delay:0s;animation-iteration-count:1;animation-direction:normal;animation-fill-mode:forwards;animation-play-state:running;animation-name:_fadeInLeft_1exlf_1}._messageGuest_1exlf_43{display:flex;align-items:flex-end;justify-content:flex-end}._messageGuestFirst_1exlf_49{--guest-bubble-top-left-radius: var(--bubble-radius-large);--guest-bubble-top-right-radius: var(--bubble-radius-large);--guest-bubble-bottom-left-radius: var(--bubble-radius-large)}._messageGuestLast_1exlf_55{--guest-bubble-top-left-radius: var(--bubble-radius-large);--guest-bubble-bottom-left-radius: var(--bubble-radius-large);--guest-bubble-bottom-right-radius: var(--bubble-radius-large);--bubble-margin: var(--bubble-margin-large);margin-bottom:var(--bubble-margin)}._avatar_1exlf_15{width:var(--avatar-size);height:var(--avatar-size);border-radius:var(--avatar-radius, 50%)}._botAvatar_1exlf_69{background-color:var(--bot-avatar-background-color)}._agentAvatar_1exlf_73{background-color:var(--agent-avatar-background-color)}._bubble_1exlf_77{display:inline-block;max-width:calc(100% - 4.3rem);position:relative}._bubbleContent_1exlf_83{padding:var(--bubble-padding);color:inherit;font-size:inherit}._bubbleContent_1exlf_83 *>:first-child{margin-top:0}._bubbleContent_1exlf_83 *>:last-child{margin-bottom:0}._bubbleContent_1exlf_83 h1,._bubbleContent_1exlf_83 h2,._bubbleContent_1exlf_83 h3,._bubbleContent_1exlf_83 h4,._bubbleContent_1exlf_83 h5,._bubbleContent_1exlf_83 p,._bubbleContent_1exlf_83 a,._bubbleContent_1exlf_83 ul,._bubbleContent_1exlf_83 ol{color:inherit;margin-block-start:.4em;margin-block-end:.4em;margin-inline-start:0px;margin-inline-end:0px}._bubbleContent_1exlf_83 h1{font-size:1.2rem;white-space:pre-wrap}._bubbleContent_1exlf_83 h2{font-size:1.1rem;white-space:pre-wrap}._bubbleContent_1exlf_83 h3,._bubbleContent_1exlf_83 h4,._bubbleContent_1exlf_83 h5{font-size:1rem;white-space:pre-wrap}._bubbleContent_1exlf_83 a{text-decoration:underline;cursor:pointer}._bubbleContent_1exlf_83 a:hover{opacity:.8}._bubbleContent_1exlf_83 img{max-width:100%;margin-block-start:0;margin-block-end:0}._bubbleContent_1exlf_83 ul{padding:0 0 0 1.1em}._bubbleContent_1exlf_83 ul>li{list-style-type:disc}._bubbleContent_1exlf_83 ul>li ul{margin-block-start:0}._bubbleContent_1exlf_83 ul>li p{margin-bottom:0}._bubbleContent_1exlf_83 ol{padding:0 0 0 1.1em}._bubbleContent_1exlf_83 ol>li{list-style-type:decimal}._bubbleContent_1exlf_83 table{width:100%}._bubbleContent_1exlf_83 td:not(:last-child){padding-right:1rem}._bubbleContent_1exlf_83 hr{margin-top:1rem;margin-bottom:1rem;border-top:1px solid;border-left:0;border-bottom:0;border-right:0}._bubbleLeft_1exlf_174{border-radius:var(--bot-bubble-top-left-radius) var(--bot-bubble-top-right-radius) var(--bot-bubble-bottom-right-radius) var(--bot-bubble-bottom-left-radius);border-color:var(--bot-bubble-border-color);border-width:var(--bot-bubble-border-width);border-style:solid;background-color:var(--bot-bubble-background-color);margin-left:1rem}._leftText_1exlf_183{color:var(--bot-bubble-text-color)}._leftText_1exlf_183 a{color:var(--bot-bubble-text-color)!important}._bubbleRight_1exlf_190{border-radius:var(--guest-bubble-top-left-radius) var(--guest-bubble-top-right-radius) var(--guest-bubble-bottom-right-radius) var(--guest-bubble-bottom-left-radius);border-color:var(--guest-bubble-border-color);border-width:var(--guest-bubble-border-width);border-style:solid;background-color:var(--guest-bubble-background-color)}._rightText_1exlf_198,._rightText_1exlf_198 a{color:var(--guest-bubble-text-color)}@keyframes _fadeInLeft_1exlf_1{0%{transform:translate(-100vw)}to{transform:translate(0)}}._problemReport_j3gru_1{display:flex;flex-direction:column;align-self:center}._problemReportIcon_j3gru_7{height:1rem;width:1rem;margin-left:.5rem}._problemReportIconActive_j3gru_13{cursor:pointer;opacity:1}._problemReportIconActive_j3gru_13:hover{opacity:.5}._problemReportIconInactive_j3gru_21{cursor:pointer;opacity:.5}._problemReportIconInactive_j3gru_21:hover{opacity:1}._title_1mhh2_1{margin-top:0;margin-block-start:0}._subtitle_1mhh2_6{margin-top:.5rem;margin-bottom:.5rem}._buttons_1mhh2_11{margin-top:1rem;display:flex;flex-direction:row;flex-wrap:wrap;gap:.5rem}._button_1mhh2_11{font-size:.9em;margin:0;background-color:var(--bot-bubble-text-color);color:var(--bot-bubble-background-color);border:2px solid var(--bot-bubble-text-color);width:100%}._button_1mhh2_11:hover{color:var(--bot-bubble-text-color);background-color:var(--bot-bubble-background-color);border:2px solid var(--bot-bubble-text-color)}._imageContainer_1mhh2_33{display:flex}._image_1mhh2_33{height:100%;width:100%;object-fit:cover;border-radius:calc(var(--bot-bubble-top-left-radius) - var(--bot-bubble-border-width)) calc(var(--bot-bubble-top-right-radius) - var(--bot-bubble-border-width)) 0 0}._video_container_1mhh2_44{display:flex}._video_1mhh2_44{width:100%;height:100%;border-radius:calc(var(--bot-bubble-top-left-radius) - var(--bot-bubble-border-width)) calc(var(--bot-bubble-top-right-radius) - var(--bot-bubble-border-width)) 0 0}._only_1mhh2_54{border-radius:calc(var(--bot-bubble-top-left-radius) - var(--bot-bubble-border-width)) calc(var(--bot-bubble-top-right-radius) - var(--bot-bubble-border-width)) calc(var(--bot-bubble-bottom-right-radius) - var(--bot-bubble-border-width)) calc(var(--bot-bubble-bottom-left-radius) - var(--bot-bubble-border-width))}._text_1k7aq_1{overflow-wrap:break-word}._ticontainer_wftg7_1{padding:var(--bubble-padding)}._tiblock_wftg7_5{align-items:center;display:flex;height:1rem;margin:2.1px}._tidot_wftg7_12{background-color:var(--bot-bubble-text-color);animation:_mercuryTypingAnimation_wftg7_1 1s infinite ease-in-out;border-radius:3px;display:inline-block;height:6px;margin-right:3px;width:6px}@keyframes _mercuryTypingAnimation_wftg7_1{0%{transform:translateY(0)}28%{transform:translateY(-5px)}44%{transform:translateY(0)}}._tidot_wftg7_12:nth-child(1){animation-delay:50ms}._tidot_wftg7_12:nth-child(2){animation-delay:.15s}._tidot_wftg7_12:nth-child(3){animation-delay:.25s}._container_t5oqt_1{padding:.5rem;display:flex;justify-content:center;align-items:center;border-top:1px solid #bfbfbf;background-color:#fff;font-size:.7rem;color:#717171}._container_t5oqt_1 a{color:var(--brand-primary-color);text-decoration:none}._container_fgqz2_1{visibility:hidden;position:absolute;z-index:3000;padding:1rem;height:100%;width:100%;background-color:#fff;top:0;bottom:0;transform:translateY(100%);overflow-y:auto;overscroll-behavior:contain}._container_fgqz2_1 h1{font-size:1.6em}._container_fgqz2_1 h2{font-size:1em}._container_fgqz2_1 p{line-height:1.5}@keyframes _slide-in_fgqz2_1{0%{transform:translateY(100%);visibility:visible}to{transform:translateY(0);visibility:visible}}@keyframes _slide-out_fgqz2_1{0%{transform:translateY(0);visibility:visible}99%{visibility:visible}to{transform:translateY(100%);visibility:hidden}}._containerOpen_fgqz2_48{animation:_slide-in_fgqz2_1 .2s forwards}._containerClose_fgqz2_52{animation:_slide-out_fgqz2_1 .2s forwards}._formContainer_fgqz2_56{display:flex;flex-direction:column}._emailInput_fgqz2_61{box-sizing:border-box;margin:1rem 0 0;font-variant:tabular-nums;list-style:none;font-feature-settings:"tnum";position:relative;display:inline-block;width:100%;min-width:0;padding:4px 11px;color:#000000a6;font-size:14px;line-height:1.5715;background-color:#fff;background-image:none;border:1px solid #d9d9d9;border-radius:2px;transition:all .3s;outline:none}._emailInput_fgqz2_61:hover{border:1px solid var(--brand-primary-color)}._emailInput_fgqz2_61:focus{border:1px solid var(--brand-primary-color)}._description_fgqz2_90{font-size:.9rem;-webkit-hyphens:auto;hyphens:auto}._actions_fgqz2_95{margin-top:1rem;padding-bottom:3rem;display:flex;flex-direction:row;flex-wrap:wrap;justify-content:flex-end;gap:.5rem}._validationError_fgqz2_105{padding-top:.5em;color:var(--danger-color);font-size:.8em;height:1rem}._submitted_fgqz2_112{margin-top:3rem;padding:1rem;border:1px solid var(--brand-primary-color);border-radius:2px}._inputContainer_1px77_1{z-index:2000}._blockUserInput_rv0dg_1{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:left;position:relative;background-color:#fff;color:#717171;font-size:.9rem;border-top:1px solid #bfbfbf;padding:.6rem 1rem;animation:_append-animate_rv0dg_1 .2s ease-in;z-index:0}@keyframes _append-animate_rv0dg_1{0%{opacity:0;top:6rem}to{opacity:1;top:0}}._callToActionContainer_1t611_1{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;position:relative;background-color:#fff;border-top:1px solid #bfbfbf;padding:.6rem 1rem .3rem;animation:_append-animate_1t611_1 .2s ease-in;z-index:0}@keyframes _append-animate_1t611_1{0%{opacity:0;top:6rem}to{opacity:1;top:0}}._callToActionTitle_1t611_24{font-size:.9rem;color:#717171;margin-bottom:.2rem;padding-right:.5rem}._rateOverlay_1t611_31{visibility:hidden;position:absolute;z-index:3000;display:flex;flex-direction:column;justify-content:space-between;height:100%;width:100%;background-color:var(--body-background-color);top:0;bottom:0;transform:translateY(100%);overflow-y:auto;overscroll-behavior:contain}._rateOverlay_1t611_31 h2{font-size:1em;text-align:center}._rateOverlay_1t611_31 p{line-height:1.5}._rateOverlay_1t611_31 form{display:flex;flex:1;flex-direction:column;justify-content:space-between}._body_1t611_61{height:100%;display:flex;flex-direction:column;justify-content:space-between;padding:1rem}@keyframes _slide-in_1t611_1{0%{transform:translateY(100%);visibility:visible}to{transform:translateY(0);visibility:visible}}@keyframes _slide-out_1t611_1{0%{transform:translateY(0);visibility:visible}99%{visibility:visible}to{transform:translateY(100%);visibility:hidden}}._rateOverlayOpen_1t611_92{animation:_slide-in_1t611_1 .2s forwards}._rateOverlayClose_1t611_96{animation:_slide-out_1t611_1 .2s forwards}._footer_1t611_100{border-top:1px solid #bfbfbf;background-color:#fff}._footer_1t611_100 input{font-size:1rem;border:none;box-sizing:border-box;width:100%;outline-width:0;padding:1.3rem 1rem 1rem;text-overflow:ellipsis;color:#717171}._actions_1t611_115{display:flex;padding:.5rem;justify-content:flex-end;align-items:center;line-height:0}._actions_1t611_115 button{width:100%;font-size:.8rem}._bubbles_1t611_127{display:flex;flex-direction:column}@keyframes _appear_1t611_1{0%{opacity:0}66%{opacity:0}to{opacity:1}}@keyframes _fadeInLeft_1t611_1{0%{transform:translate(-3rem)}80%{transform:translate(-3rem)}to{transform:translate(0)}}._rateFeedbackBotBubble_1t611_154{display:flex;align-items:flex-end;margin:1rem 0}._rateFeedbackGuestBubble_1t611_160{display:flex;align-items:flex-end;justify-content:flex-end}._avatar_1t611_166{width:var(--avatar-size);height:var(--avatar-size);animation-duration:.5s;animation-timing-function:ease-in;animation-delay:0s;animation-iteration-count:1;animation-direction:normal;animation-fill-mode:forwards;animation-play-state:running;animation-name:_fadeInLeft_1t611_1}._bubble_1t611_127{padding:var(--bubble-padding);font-size:.9rem;animation-duration:1s;animation-delay:0s;animation-timing-function:ease;animation-iteration-count:1;animation-direction:normal;animation-fill-mode:forwards;animation-play-state:running;animation-name:_appear_1t611_1}._botBubble_1t611_192{border-radius:var(--bubble-radius-large);background-color:var(--bot-bubble-background-color);margin-left:1rem;color:var(--bot-bubble-text-color)}._botBubble_1t611_192 a{color:var(--bot-bubble-text-color)!important}._guestBubble_1t611_202{animation-duration:.25s;align-self:end;border-radius:var(--bubble-radius-large);background-color:var(--guest-bubble-background-color);color:var(--guest-bubble-text-color);margin-left:1rem;display:box;line-clamp:3;box-orient:vertical;overflow:hidden}._guestBubble_1t611_202 a{color:var(--guest-bubble-text-color)}._rateText_1t611_218{padding:.75rem;font-size:.9rem}._stars_1t611_223{box-sizing:border-box;font-variant:tabular-nums;font-feature-settings:"tnum";display:inline-block;margin:0;padding:0;color:#c4c4c4;line-height:unset;list-style:none;outline:none}._starsSmall_1t611_236{font-size:1.2rem}._starsLarge_1t611_240{font-size:2rem}._starsLarge_1t611_240 ._star_1t611_223:not(:last-child){margin-right:1.5rem}._star_1t611_223{display:inline-block;color:inherit;cursor:pointer}._star_1t611_223:not(:last-child){margin-right:8px}._starReadonly_1t611_257{cursor:inherit}._star_1t611_223>div{transition:all .3s,outline 0s}._starIcon_1t611_265{display:inline-block;color:inherit;font-style:normal;line-height:0;text-align:center;text-transform:none;text-rendering:optimizelegibility}._star_1t611_223 [aria-checked=true]{color:var(--brand-primary-color, #fadb14)}._star_1t611_223 [aria-checked=false]{color:#adadad}._starsDescriptionContainer_1t611_283{display:flex;flex-direction:column;width:fit-content;padding-top:1rem;padding-bottom:1rem;margin:auto}._starsDescription_1t611_283{display:flex;flex-direction:row;justify-content:space-between;font-size:.7rem;color:#000000a6}._inputWrapper_lbrof_5{display:flex;justify-content:center;align-items:center;line-height:0;border-top:1px solid #bfbfbf;background-color:#fff}._messageInputWrapper_lbrof_14{flex:1;margin-right:.5rem}._messageInput_lbrof_14{resize:none;font-size:1rem;font-family:inherit;border:none;height:calc(1em + 3rem);box-sizing:border-box;width:100%;outline-width:0;padding:1.3rem 1rem;text-overflow:ellipsis}._messageInput_lbrof_14:focus{outline:none}._buttons_lbrof_36{padding-right:.5rem;display:flex;justify-content:center;align-items:center}._button_lbrof_36[disabled]{opacity:.4}._button_lbrof_36{display:flex;align-items:center;justify-content:center;width:40px;height:40px;color:var(--brand-primary-color);background-color:var(--brand-secondary-color);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:50%;border:none;text-align:center}._button_lbrof_36 svg{margin:2px;height:2em;width:2em;fill:currentColor}._button_lbrof_36:hover,._button_lbrof_36:active,._button_lbrof_36:focus{border:none;outline:none;color:var(--brand-secondary-color);background-color:var(--brand-primary-color)}._button_lbrof_36:not(:last-child){margin-right:.5em}*{box-sizing:border-box}._audioRecorder_12g22_5{display:flex;margin-left:-5px}._recordButton_12g22_10{display:flex;align-items:center;justify-content:center;cursor:pointer;-webkit-user-select:none;user-select:none;width:40px;height:40px;border-radius:50%;border:none;text-align:center;color:var(--brand-primary-color);background-color:var(--brand-secondary-color)}._recordButton_12g22_10 svg{margin:2px;height:2em;width:2em;fill:currentColor}._recordButton_12g22_10:hover,._recordButton_12g22_10:active,._recordButton_12g22_10:focus{background-color:var(--brand-primary-color);color:var(--brand-secondary-color);border:none;outline:none}._submitButton_12g22_37{display:flex;align-items:center;justify-content:center;cursor:pointer;-webkit-user-select:none;user-select:none;width:40px;height:40px;border-radius:50%;border:none;text-align:center;color:var(--brand-primary-color);background-color:var(--brand-secondary-color)}._submitButton_12g22_37 svg{margin:2px;height:2em;width:2em;fill:currentColor}._submitButton_12g22_37:hover,._submitButton_12g22_37:active,._submitButton_12g22_37:focus{background-color:var(--brand-primary-color);color:var(--brand-secondary-color);border:none;outline:none}._cancelButton_12g22_64{display:flex;align-items:center;justify-content:center;cursor:pointer;-webkit-user-select:none;user-select:none;width:40px;height:40px;border-radius:50%;border:none;text-align:center;color:var(--brand-primary-color);background-color:var(--brand-secondary-color)}._cancelButton_12g22_64 svg{margin:2px;height:2em;width:2em;fill:currentColor}._cancelButton_12g22_64:hover,._cancelButton_12g22_64:active,._cancelButton_12g22_64:focus{background-color:var(--brand-primary-color);color:var(--brand-secondary-color);border:none;outline:none}._recorderIcon_12g22_91{width:1.3em;height:1.3em;border-radius:50%;animation:_pulse_12g22_1 2s infinite;margin:auto .6em}@keyframes _pulse_12g22_1{0%{background-color:#fff}40%{background-color:var(--danger-color)}60%{background-color:var(--danger-color)}to{background-color:#fff}}._spinning_12g22_113{width:40px;height:40px;padding:5px;display:block;margin:auto;color:var(--brand-primary-color);animation:_spin_12g22_113 1.2s linear infinite}@keyframes _spin_12g22_113{to{transform:rotate(360deg)}}._quickReplies_11l22_1{display:flex;flex-flow:row wrap;justify-content:flex-end;padding:.4rem 1rem;gap:.5rem}._quickReply_11l22_9{font-size:.8rem;background-color:var(--brand-secondary-color);color:var(--brand-primary-color);border:1px solid var(--brand-primary-color)}._quickReply_11l22_9:active,._quickReply_11l22_9:focus,._quickReply_11l22_9:hover{background-color:var(--brand-primary-color);color:var(--brand-secondary-color);border:1px solid var(--brand-secondary-color);outline:none}._chatwindow_phukm_1{position:relative;width:100%;height:100vh;height:100svh;max-width:48rem;margin-left:auto;margin-right:auto;overflow:hidden;background-color:var(--body-background-color)}._chatcontent_phukm_13{display:flex;flex-flow:column nowrap;width:100%;height:100vh;height:100svh}._container_7ypo3_1{padding:1rem}._container_7ypo3_1 h1{font-size:1.3em}._container_7ypo3_1 h2{font-size:1em}._container_7ypo3_1 p{line-height:1.5}._startChatButton_7ypo3_14{margin-top:1rem;width:100%}
@@ -6,7 +6,7 @@
6
6
  </g>
7
7
  <g>
8
8
  <g transform="matrix(0.968573,0,0,0.968573,50.1659,47.2531)">
9
- <path d="M1531.31,5.511C2393.48,5.511 3108.27,705.64 3126.5,1568C3144.73,2430.38 2459.57,3130.51 1597.4,3130.51C735.231,3130.51 20.46,2430.38 2.21,1568C-16.022,705.638 669.138,5.511 1531.31,5.511Z" style="fill:#722ed1;stroke:white;stroke-width:61.95px;"/>
9
+ <path d="M1531.31,5.511C2393.48,5.511 3108.27,705.64 3126.5,1568C3144.73,2430.38 2459.57,3130.51 1597.4,3130.51C735.231,3130.51 20.46,2430.38 2.21,1568C-16.022,705.638 669.138,5.511 1531.31,5.511Z" style="fill:#042f61;stroke:white;stroke-width:61.95px;"/>
10
10
  </g>
11
11
  <g transform="matrix(0.968573,0,0,0.968573,50.1659,47.2531)">
12
12
  <path d="M1179.34,2536.02C1114.36,2559.92 1082.25,2566.64 1035.19,2566.64C977.681,2566.64 941.083,2526.31 940.336,2458.34C940.336,2382.91 976.187,2346.31 1041.91,2346.31C1076.27,2346.31 1109.13,2353.03 1167.39,2367.97L1208.47,2262.66C1152.45,2235.03 1093.45,2221.58 1035.94,2221.58C888.054,2221.58 799.175,2306.73 799.175,2458.34C799.175,2607.72 888.054,2691.37 1028.47,2691.37C1097.18,2691.37 1153.2,2676.43 1224.15,2639.84L1179.34,2536.02Z" style="fill:white;fill-rule:nonzero;"/>
@@ -7,8 +7,8 @@
7
7
  <meta name="theme-color" content="#000000" />
8
8
  <meta name="google" content="notranslate" />
9
9
  <title>Bubble Chat Client</title>
10
- <script type="module" crossorigin src="./assets/index-CtRHUofL.js"></script>
11
- <link rel="stylesheet" crossorigin href="./assets/index-vVZBi9_F.css">
10
+ <script type="module" crossorigin src="./assets/index-Ces-s9t_.js"></script>
11
+ <link rel="stylesheet" crossorigin href="./assets/index-IZ7KnhKS.css">
12
12
  </head>
13
13
 
14
14
  <body>
@@ -10,6 +10,6 @@
10
10
  ],
11
11
  "start_url": ".",
12
12
  "display": "standalone",
13
- "theme_color": "#722ed1",
13
+ "theme_color": "#042f61",
14
14
  "background_color": "#ffffff"
15
15
  }
@@ -3,5 +3,5 @@ import type { Environment } from '@botfabrik/engine-domain';
3
3
  import type { Socket } from 'socket.io';
4
4
  import { WebClientProps } from './index';
5
5
  import type { SessionInfoClientPayload, SessionInfoUserPayload } from './types';
6
- declare const createSessionInfo: (socket: Socket, clientName: string, environment: Environment, sessionInfo: SessionInfo<SessionInfoClientPayload, SessionInfoUserPayload>, locale: string | undefined, props: WebClientProps) => () => Promise<SessionInfo<SessionInfoClientPayload, SessionInfoUserPayload>>;
6
+ declare const createSessionInfo: (socket: Socket, clientName: string, environment: Environment, sessionInfo: SessionInfo<SessionInfoClientPayload, SessionInfoUserPayload>, userId: string, locale: string | undefined, props: WebClientProps) => () => Promise<SessionInfo<SessionInfoClientPayload, SessionInfoUserPayload>>;
7
7
  export default createSessionInfo;
@@ -6,8 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const buildUserAgentInfos_1 = __importDefault(require("./buildUserAgentInfos"));
7
7
  const extractIP_1 = __importDefault(require("./extractIP"));
8
8
  const index_1 = require("./index");
9
- const createSessionInfoBase = async (querystrings, headers, ip, clientName, environment, sessionInfo, locale, props) => {
10
- const userId = querystrings.userId;
9
+ const createSessionInfoBase = async (userId, querystrings, headers, ip, clientName, environment, sessionInfo, locale, props) => {
11
10
  const userAgent = (0, buildUserAgentInfos_1.default)(headers['user-agent'], querystrings);
12
11
  const client = {
13
12
  ...sessionInfo.client,
@@ -43,10 +42,10 @@ const createSessionInfoBase = async (querystrings, headers, ip, clientName, envi
43
42
  }
44
43
  return { client, user, contexts, environment };
45
44
  };
46
- const createSessionInfo = (socket, clientName, environment, sessionInfo, locale, props) => async () => {
45
+ const createSessionInfo = (socket, clientName, environment, sessionInfo, userId, locale, props) => async () => {
47
46
  const request = socket.request;
48
47
  const querystrings = socket.handshake.query;
49
48
  const ip = (0, extractIP_1.default)(request);
50
- return await createSessionInfoBase(querystrings, request.headers, ip, clientName, environment, sessionInfo, locale, props);
49
+ return await createSessionInfoBase(userId, querystrings, request.headers, ip, clientName, environment, sessionInfo, locale, props);
51
50
  };
52
51
  exports.default = createSessionInfo;
@@ -6,10 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const globals_1 = require("@jest/globals");
7
7
  const createSessionInfo_1 = __importDefault(require("./createSessionInfo"));
8
8
  (0, globals_1.describe)('create session info', () => {
9
- const querystrings = {
10
- sessionId: 'session-id',
11
- userId: 'user-id',
12
- };
9
+ const querystrings = {};
13
10
  const headers = {
14
11
  host: 'fluance-chatbot.scapp.io',
15
12
  'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36',
@@ -58,7 +55,7 @@ const createSessionInfo_1 = __importDefault(require("./createSessionInfo"));
58
55
  environment: 'PROD',
59
56
  };
60
57
  (0, globals_1.it)('without user payload', async () => {
61
- const sessionInfo = await (0, createSessionInfo_1.default)(socket, 'my-client', 'TEST', defaultSessionInfo, 'de_DE', {})();
58
+ const sessionInfo = await (0, createSessionInfo_1.default)(socket, 'my-client', 'TEST', defaultSessionInfo, 'my-user-id', 'de_DE', {})();
62
59
  // client
63
60
  (0, globals_1.expect)(sessionInfo.client.name).toBe('my-client');
64
61
  (0, globals_1.expect)(sessionInfo.client.type).toBe('webclient');
@@ -69,7 +66,7 @@ const createSessionInfo_1 = __importDefault(require("./createSessionInfo"));
69
66
  (0, globals_1.expect)(sessionInfo.client.payload.querystrings).toEqual(querystrings);
70
67
  (0, globals_1.expect)(sessionInfo.client.payload.ip).toBe('151.248.213.117');
71
68
  // user
72
- (0, globals_1.expect)(sessionInfo.user.id).toBe('user-id');
69
+ (0, globals_1.expect)(sessionInfo.user.id).toBe('my-user-id');
73
70
  (0, globals_1.expect)(sessionInfo.user.displayName).toBe('Webseiten Besucher');
74
71
  (0, globals_1.expect)(sessionInfo.user.locale).toBe('de_DE');
75
72
  (0, globals_1.expect)(sessionInfo.user.payload).toStrictEqual({});
@@ -91,7 +88,7 @@ const createSessionInfo_1 = __importDefault(require("./createSessionInfo"));
91
88
  const props = {
92
89
  requestUserInfos,
93
90
  };
94
- const sessionInfo = await (0, createSessionInfo_1.default)(socket, 'my-client', 'TEST', defaultSessionInfo, 'de_DE', props)();
91
+ const sessionInfo = await (0, createSessionInfo_1.default)(socket, 'my-client', 'TEST', defaultSessionInfo, 'my-user-id', 'de_DE', props)();
95
92
  (0, globals_1.expect)(sessionInfo.user.id).toBe('hans.muster@PRIMARY');
96
93
  (0, globals_1.expect)(sessionInfo.user.displayName).toBe('Hans Muster');
97
94
  (0, globals_1.expect)(sessionInfo.user.payload.username).toBe('hans.muster');
@@ -105,8 +102,8 @@ const createSessionInfo_1 = __importDefault(require("./createSessionInfo"));
105
102
  const props = {
106
103
  requestUserInfos,
107
104
  };
108
- const sessionInfo = await (0, createSessionInfo_1.default)(socket, 'my-client', 'TEST', defaultSessionInfo, 'de_DE', props)();
109
- (0, globals_1.expect)(sessionInfo.user.id).toBe('user-id');
105
+ const sessionInfo = await (0, createSessionInfo_1.default)(socket, 'my-client', 'TEST', defaultSessionInfo, 'my-user-id', 'de_DE', props)();
106
+ (0, globals_1.expect)(sessionInfo.user.id).toBe('my-user-id');
110
107
  (0, globals_1.expect)(sessionInfo.user.displayName).toBe('Webseiten Besucher');
111
108
  (0, globals_1.expect)(sessionInfo.user.locale).toBe('de_DE');
112
109
  (0, globals_1.expect)(sessionInfo.user.payload).toStrictEqual({});
@@ -1,19 +1,19 @@
1
- var at=Object.defineProperty;var lt=(h,g,y)=>g in h?at(h,g,{enumerable:!0,configurable:!0,writable:!0,value:y}):h[g]=y;var Z=(h,g,y)=>lt(h,typeof g!="symbol"?g+"":g,y);(function(){"use strict";function h(){}function g(e){return e()}function y(){return Object.create(null)}function x(e){e.forEach(g)}function L(e){return typeof e=="function"}function z(e,t){return e!=e?t==t:e!==t||e&&typeof e=="object"||typeof e=="function"}let W;function C(e,t){return e===t?!0:(W||(W=document.createElement("a")),W.href=t,e===W.href)}function we(e){return Object.keys(e).length===0}const ke=typeof window<"u"?window:typeof globalThis<"u"?globalThis:global;function m(e,t){e.appendChild(t)}function j(e,t,n){const r=_e(e);if(!r.getElementById(t)){const o=b("style");o.id=t,o.textContent=n,ye(r,o)}}function _e(e){if(!e)return document;const t=e.getRootNode?e.getRootNode():e.ownerDocument;return t&&t.host?t:e.ownerDocument}function ye(e,t){return m(e.head||e,t),t.sheet}function _(e,t,n){e.insertBefore(t,n||null)}function v(e){e.parentNode&&e.parentNode.removeChild(e)}function b(e){return document.createElement(e)}function ee(e){return document.createTextNode(e)}function U(){return ee(" ")}function xe(){return ee("")}function I(e,t,n,r){return e.addEventListener(t,n,r),()=>e.removeEventListener(t,n,r)}function c(e,t,n){n==null?e.removeAttribute(t):e.getAttribute(t)!==n&&e.setAttribute(t,n)}function Ce(e){return Array.from(e.childNodes)}function te(e,t,n){e.classList.toggle(t,!!n)}let N;function S(e){N=e}const O=[],ne=[];let T=[];const re=[],Oe=Promise.resolve();let H=!1;function Te(){H||(H=!0,Oe.then(oe))}function q(e){T.push(e)}const M=new Set;let E=0;function oe(){if(E!==0)return;const e=N;do{try{for(;E<O.length;){const t=O[E];E++,S(t),Ee(t.$$)}}catch(t){throw O.length=0,E=0,t}for(S(null),O.length=0,E=0;ne.length;)ne.pop()();for(let t=0;t<T.length;t+=1){const n=T[t];M.has(n)||(M.add(n),n())}T.length=0}while(O.length);for(;re.length;)re.pop()();H=!1,M.clear(),S(e)}function Ee(e){if(e.fragment!==null){e.update(),x(e.before_update);const t=e.dirty;e.dirty=[-1],e.fragment&&e.fragment.p(e.ctx,t),e.after_update.forEach(q)}}function Ue(e){const t=[],n=[];T.forEach(r=>e.indexOf(r)===-1?t.push(r):n.push(r)),n.forEach(r=>r()),T=t}const R=new Set;let Se;function B(e,t){e&&e.i&&(R.delete(e),e.i(t))}function ie(e,t,n,r){if(e&&e.o){if(R.has(e))return;R.add(e),Se.c.push(()=>{R.delete(e),r&&(n&&e.d(1),r())}),e.o(t)}else r&&r()}function se(e){e&&e.c()}function $(e,t,n){const{fragment:r,after_update:o}=e.$$;r&&r.m(t,n),q(()=>{const s=e.$$.on_mount.map(g).filter(L);e.$$.on_destroy?e.$$.on_destroy.push(...s):x(s),e.$$.on_mount=[]}),o.forEach(q)}function G(e,t){const n=e.$$;n.fragment!==null&&(Ue(n.after_update),x(n.on_destroy),n.fragment&&n.fragment.d(t),n.on_destroy=n.fragment=null,n.ctx=[])}function Ae(e,t){e.$$.dirty[0]===-1&&(O.push(e),Te(),e.$$.dirty.fill(0)),e.$$.dirty[t/31|0]|=1<<t%31}function F(e,t,n,r,o,s,a=null,f=[-1]){const l=N;S(e);const i=e.$$={fragment:null,ctx:[],props:s,update:h,not_equal:o,bound:y(),on_mount:[],on_destroy:[],on_disconnect:[],before_update:[],after_update:[],context:new Map(t.context||(l?l.$$.context:[])),callbacks:y(),dirty:f,skip_bound:!1,root:t.target||l.$$.root};a&&a(i.root);let d=!1;if(i.ctx=n?n(e,t.props||{},(u,p,...w)=>{const k=w.length?w[0]:p;return i.ctx&&o(i.ctx[u],i.ctx[u]=k)&&(!i.skip_bound&&i.bound[u]&&i.bound[u](k),d&&Ae(e,u)),p}):[],i.update(),d=!0,x(i.before_update),i.fragment=r?r(i.ctx):!1,t.target){if(t.hydrate){const u=Ce(t.target);i.fragment&&i.fragment.l(u),u.forEach(v)}else i.fragment&&i.fragment.c();t.intro&&B(e.$$.fragment),$(e,t.target,t.anchor),oe()}S(l)}class Y{constructor(){Z(this,"$$");Z(this,"$$set")}$destroy(){G(this,1),this.$destroy=h}$on(t,n){if(!L(n))return h;const r=this.$$.callbacks[t]||(this.$$.callbacks[t]=[]);return r.push(n),()=>{const o=r.indexOf(n);o!==-1&&r.splice(o,1)}}$set(t){this.$$set&&!we(t)&&(this.$$.skip_bound=!0,this.$$set(t),this.$$.skip_bound=!1)}}const Le="4";typeof window<"u"&&(window.__svelte||(window.__svelte={v:new Set})).v.add(Le);function We(e){j(e,"svelte-ka7fpb",`.svelte-ka7fpb.svelte-ka7fpb,.svelte-ka7fpb.svelte-ka7fpb:before,.svelte-ka7fpb.svelte-ka7fpb:after{box-sizing:border-box}.bot-border.svelte-ka7fpb.svelte-ka7fpb{position:fixed;display:flex;flex-direction:column;top:0;bottom:env(safe-area-inset-bottom);height:100%;max-height:100vh;width:100%;border-width:0;border-radius:var(--window-border-radius, 8px);box-shadow:rgba(0, 0, 0, 0.24) 0px 16px 40px;background:transparent;opacity:1;transition:transform 200ms,
1
+ var at=Object.defineProperty;var lt=(h,p,j)=>p in h?at(h,p,{enumerable:!0,configurable:!0,writable:!0,value:j}):h[p]=j;var Z=(h,p,j)=>lt(h,typeof p!="symbol"?p+"":p,j);(function(){"use strict";function h(){}function p(e){return e()}function j(){return Object.create(null)}function k(e){e.forEach(p)}function A(e){return typeof e=="function"}function P(e,t){return e!=e?t==t:e!==t||e&&typeof e=="object"||typeof e=="function"}let L;function x(e,t){return e===t?!0:(L||(L=document.createElement("a")),L.href=t,e===L.href)}function be(e){return Object.keys(e).length===0}const _e=typeof window<"u"?window:typeof globalThis<"u"?globalThis:global;function v(e,t){e.appendChild(t)}function z(e,t,n){const r=ye(e);if(!r.getElementById(t)){const o=m("style");o.id=t,o.textContent=n,je(r,o)}}function ye(e){if(!e)return document;const t=e.getRootNode?e.getRootNode():e.ownerDocument;return t&&t.host?t:e.ownerDocument}function je(e,t){return v(e.head||e,t),t.sheet}function y(e,t,n){e.insertBefore(t,n||null)}function w(e){e.parentNode&&e.parentNode.removeChild(e)}function m(e){return document.createElement(e)}function ee(e){return document.createTextNode(e)}function E(){return ee(" ")}function ke(){return ee("")}function W(e,t,n,r){return e.addEventListener(t,n,r),()=>e.removeEventListener(t,n,r)}function f(e,t,n){n==null?e.removeAttribute(t):e.getAttribute(t)!==n&&e.setAttribute(t,n)}function xe(e){return Array.from(e.childNodes)}function te(e,t,n){e.classList.toggle(t,!!n)}let N;function U(e){N=e}const C=[],ne=[];let O=[];const re=[],Ce=Promise.resolve();let H=!1;function Oe(){H||(H=!0,Ce.then(oe))}function q(e){O.push(e)}const M=new Set;let T=0;function oe(){if(T!==0)return;const e=N;do{try{for(;T<C.length;){const t=C[T];T++,U(t),Te(t.$$)}}catch(t){throw C.length=0,T=0,t}for(U(null),C.length=0,T=0;ne.length;)ne.pop()();for(let t=0;t<O.length;t+=1){const n=O[t];M.has(n)||(M.add(n),n())}O.length=0}while(C.length);for(;re.length;)re.pop()();H=!1,M.clear(),U(e)}function Te(e){if(e.fragment!==null){e.update(),k(e.before_update);const t=e.dirty;e.dirty=[-1],e.fragment&&e.fragment.p(e.ctx,t),e.after_update.forEach(q)}}function Ee(e){const t=[],n=[];O.forEach(r=>e.indexOf(r)===-1?t.push(r):n.push(r)),n.forEach(r=>r()),O=t}const I=new Set;let Ue;function B(e,t){e&&e.i&&(I.delete(e),e.i(t))}function ie(e,t,n,r){if(e&&e.o){if(I.has(e))return;I.add(e),Ue.c.push(()=>{I.delete(e),r&&(n&&e.d(1),r())}),e.o(t)}else r&&r()}function se(e){e&&e.c()}function $(e,t,n){const{fragment:r,after_update:o}=e.$$;r&&r.m(t,n),q(()=>{const s=e.$$.on_mount.map(p).filter(A);e.$$.on_destroy?e.$$.on_destroy.push(...s):k(s),e.$$.on_mount=[]}),o.forEach(q)}function G(e,t){const n=e.$$;n.fragment!==null&&(Ee(n.after_update),k(n.on_destroy),n.fragment&&n.fragment.d(t),n.on_destroy=n.fragment=null,n.ctx=[])}function Se(e,t){e.$$.dirty[0]===-1&&(C.push(e),Oe(),e.$$.dirty.fill(0)),e.$$.dirty[t/31|0]|=1<<t%31}function F(e,t,n,r,o,s,a=null,d=[-1]){const l=N;U(e);const i=e.$$={fragment:null,ctx:[],props:s,update:h,not_equal:o,bound:j(),on_mount:[],on_destroy:[],on_disconnect:[],before_update:[],after_update:[],context:new Map(t.context||(l?l.$$.context:[])),callbacks:j(),dirty:d,skip_bound:!1,root:t.target||l.$$.root};a&&a(i.root);let c=!1;if(i.ctx=n?n(e,t.props||{},(u,g,...b)=>{const _=b.length?b[0]:g;return i.ctx&&o(i.ctx[u],i.ctx[u]=_)&&(!i.skip_bound&&i.bound[u]&&i.bound[u](_),c&&Se(e,u)),g}):[],i.update(),c=!0,k(i.before_update),i.fragment=r?r(i.ctx):!1,t.target){if(t.hydrate){const u=xe(t.target);i.fragment&&i.fragment.l(u),u.forEach(w)}else i.fragment&&i.fragment.c();t.intro&&B(e.$$.fragment),$(e,t.target,t.anchor),oe()}U(l)}class Y{constructor(){Z(this,"$$");Z(this,"$$set")}$destroy(){G(this,1),this.$destroy=h}$on(t,n){if(!A(n))return h;const r=this.$$.callbacks[t]||(this.$$.callbacks[t]=[]);return r.push(n),()=>{const o=r.indexOf(n);o!==-1&&r.splice(o,1)}}$set(t){this.$$set&&!be(t)&&(this.$$.skip_bound=!0,this.$$set(t),this.$$.skip_bound=!1)}}const Ae="4";typeof window<"u"&&(window.__svelte||(window.__svelte={v:new Set})).v.add(Ae);function Le(e){z(e,"svelte-f0h0jd",`.svelte-f0h0jd.svelte-f0h0jd,.svelte-f0h0jd.svelte-f0h0jd:before,.svelte-f0h0jd.svelte-f0h0jd:after{box-sizing:border-box}.bot-border.svelte-f0h0jd.svelte-f0h0jd{position:fixed;display:flex;flex-direction:column;top:0;bottom:env(safe-area-inset-bottom);height:100%;max-height:100vh;width:100%;border-width:0;border-radius:var(--window-border-radius, 8px);box-shadow:rgba(0, 0, 0, 0.24) 0px 16px 40px;background:transparent;opacity:1;transition:transform 200ms,
2
2
  opacity 100ms 100ms,
3
- all 150ms;z-index:2147483647}.bot-border.closed.svelte-ka7fpb.svelte-ka7fpb{transform:translateY(100vh);opacity:0}.header.svelte-ka7fpb.svelte-ka7fpb{display:flex;justify-content:space-between;width:100%;height:var(--header-height, 4em);background-color:var(
3
+ all 150ms;z-index:2147483647}.bot-border.closed.svelte-f0h0jd.svelte-f0h0jd{transform:translateY(100vh);opacity:0}.header.svelte-f0h0jd.svelte-f0h0jd{display:flex;justify-content:space-between;width:100%;height:var(--header-height, 4em);background-color:var(
4
4
  --header-background-color,
5
- var(--brand-primary-color, rgb(114, 46, 209))
6
- )}.bot.svelte-ka7fpb.svelte-ka7fpb{display:block;width:100%;flex:1 0 auto;margin:0}@media screen and (min-width: 768px){#chat-frame.svelte-ka7fpb.svelte-ka7fpb{border-bottom-left-radius:var(--window-border-radius, 8px);border-bottom-right-radius:var(--window-border-radius, 8px)}.header.svelte-ka7fpb.svelte-ka7fpb{border-top-left-radius:var(--window-border-radius, 8px);border-top-right-radius:var(--window-border-radius, 8px)}.bot-border.svelte-ka7fpb.svelte-ka7fpb{height:var(--window-height, 40em);max-height:calc(100vh - 2em);width:var(--window-width, 23em);top:auto;right:1em;bottom:1em;left:auto;border-radius:var(--window-border-radius, 8px)}.bot-border.closed.svelte-ka7fpb.svelte-ka7fpb{transform:translateY(var(--window-height, 40em));opacity:0}}.bot-border-close-icon.svelte-ka7fpb.svelte-ka7fpb{height:100%;padding:var(--close-icon-padding, 1em)}img.svelte-ka7fpb.svelte-ka7fpb{display:block;height:100%;padding:var(--logo-padding, 1em)}svg.svelte-ka7fpb.svelte-ka7fpb{height:100%;padding:0.4em;cursor:pointer}svg.svelte-ka7fpb path.svelte-ka7fpb{transition:stroke-width 100ms;stroke:white;stroke-width:2px}svg.svelte-ka7fpb:hover path.svelte-ka7fpb{stroke-width:3px}p.svelte-ka7fpb.svelte-ka7fpb,pre.svelte-ka7fpb.svelte-ka7fpb{max-width:300px}pre.svelte-ka7fpb.svelte-ka7fpb{font-size:0.6em;line-height:0.5}`)}function Ie(e){let t,n,r;return{c(){t=b("p"),t.textContent=`Please make sure that the script tag has 'id="chatbot"' and the attribute
7
- 'data-server' with the full qualified URL to the chatbot-server.`,n=U(),r=b("pre"),r.innerHTML=` <code class="svelte-ka7fpb">
5
+ var(--brand-primary-color, white)
6
+ )}.bot.svelte-f0h0jd.svelte-f0h0jd{display:block;width:100%;flex:1 0 auto;margin:0}@media screen and (min-width: 768px){#chat-frame.svelte-f0h0jd.svelte-f0h0jd{border-bottom-left-radius:var(--window-border-radius, 8px);border-bottom-right-radius:var(--window-border-radius, 8px)}.header.svelte-f0h0jd.svelte-f0h0jd{border-top-left-radius:var(--window-border-radius, 8px);border-top-right-radius:var(--window-border-radius, 8px)}.bot-border.svelte-f0h0jd.svelte-f0h0jd{height:var(--window-height, 40em);max-height:calc(100vh - 2em);width:var(--window-width, 23em);top:auto;right:1em;bottom:1em;left:auto;border-radius:var(--window-border-radius, 8px)}.bot-border.closed.svelte-f0h0jd.svelte-f0h0jd{transform:translateY(var(--window-height, 40em));opacity:0}}.bot-border-close-icon.svelte-f0h0jd.svelte-f0h0jd{height:100%;padding:var(--close-icon-padding, 1em)}img.svelte-f0h0jd.svelte-f0h0jd{display:block;height:100%;padding:var(--logo-padding, 1em)}svg.svelte-f0h0jd.svelte-f0h0jd{height:100%;padding:0.4em;cursor:pointer}svg.svelte-f0h0jd path.svelte-f0h0jd{transition:stroke-width 100ms;stroke:white;stroke-width:2px}svg.svelte-f0h0jd:hover path.svelte-f0h0jd{stroke-width:3px}p.svelte-f0h0jd.svelte-f0h0jd,pre.svelte-f0h0jd.svelte-f0h0jd{max-width:300px}pre.svelte-f0h0jd.svelte-f0h0jd{font-size:0.6em;line-height:0.5}`)}function We(e){let t,n,r;return{c(){t=m("p"),t.textContent=`Please make sure that the script tag has 'id="chatbot"' and the attribute
7
+ 'data-server' with the full qualified URL to the chatbot-server.`,n=E(),r=m("pre"),r.innerHTML=` <code class="svelte-f0h0jd">
8
8
  &lt;script
9
- <br class="svelte-ka7fpb"/>
9
+ <br class="svelte-f0h0jd"/>
10
10
  id=&quot;chatbot&quot;
11
- <br class="svelte-ka7fpb"/>
11
+ <br class="svelte-f0h0jd"/>
12
12
  data-server=&quot;https://server.com/webclient&quot;
13
- <br class="svelte-ka7fpb"/>
13
+ <br class="svelte-f0h0jd"/>
14
14
  defer
15
- <br class="svelte-ka7fpb"/>
15
+ <br class="svelte-f0h0jd"/>
16
16
  src=&quot;https://server.com/webclient/embed/bundle.js&quot;&gt; &lt;/script&gt;
17
17
  </code>
18
- `,c(t,"class","svelte-ka7fpb"),c(r,"class","svelte-ka7fpb")},m(o,s){_(o,t,s),_(o,n,s),_(o,r,s)},p:h,d(o){o&&(v(t),v(n),v(r))}}}function Re(e){let t,n,r,o,s,a,f,l,i,d,u,p;return{c(){t=b("div"),n=b("div"),r=b("img"),s=U(),a=b("div"),a.innerHTML='<svg viewBox="-2 -2 24 24" aria-label="Close window icon" class="svelte-ka7fpb"><path d="M0,0L20,20M20,0L0,20" class="svelte-ka7fpb"></path></svg>',f=U(),l=b("iframe"),C(r.src,o=`${e[3]}/logo.svg`)||c(r,"src",o),c(r,"alt","Logo"),c(r,"class","logo svelte-ka7fpb"),c(a,"aria-label","Close chat window"),c(a,"role","button"),c(a,"class","bot-border-close-icon svelte-ka7fpb"),c(a,"tabindex",0),c(n,"class","header svelte-ka7fpb"),c(l,"id","chat-frame"),c(l,"title","Chat"),c(l,"class","bot svelte-ka7fpb"),C(l.src,i=`${e[0]}${e[0].indexOf("?")===-1?"?":"&"}referrer=${encodeURIComponent(e[1]??"")}&windowHeight=${le()}&windowWidth=${ae()}`)||c(l,"src",i),c(l,"frameborder","0"),c(l,"allow","microphone"),l.allowFullscreen=!0,c(t,"class","bot-border svelte-ka7fpb"),c(t,"aria-hidden",d=e[2]?"false":"true"),te(t,"closed",!e[2])},m(w,k){_(w,t,k),m(t,n),m(n,r),m(n,s),m(n,a),m(t,f),m(t,l),u||(p=[I(a,"click",function(){L(e[4])&&e[4].apply(this,arguments)}),I(a,"keydown",e[5])],u=!0)},p(w,k){e=w,k&8&&!C(r.src,o=`${e[3]}/logo.svg`)&&c(r,"src",o),k&3&&!C(l.src,i=`${e[0]}${e[0].indexOf("?")===-1?"?":"&"}referrer=${encodeURIComponent(e[1]??"")}&windowHeight=${le()}&windowWidth=${ae()}`)&&c(l,"src",i),k&4&&d!==(d=e[2]?"false":"true")&&c(t,"aria-hidden",d),k&4&&te(t,"closed",!e[2])},d(w){w&&v(t),u=!1,x(p)}}}function De(e){let t;function n(s,a){return s[0]?Re:Ie}let r=n(e),o=r(e);return{c(){o.c(),t=xe()},m(s,a){o.m(s,a),_(s,t,a)},p(s,[a]){r===(r=n(s))&&o?o.p(s,a):(o.d(1),o=r(s),o&&(o.c(),o.m(t.parentNode,t)))},i:h,o:h,d(s){s&&v(t),o.d(s)}}}function ae(){try{return window.innerWidth}catch{return-1}}function le(){try{return window.innerHeight}catch{return-1}}function Pe(e,t,n){let{server:r}=t,{referrer:o}=t,{open:s}=t,{assetsUrl:a}=t,{onToggle:f}=t;function l(i){const d=i.key;(d==="ArrowDown"||d==="ArrowRight"||d==="Enter"||d===" "||d==="Space")&&(i.stopPropagation(),f())}return e.$$set=i=>{"server"in i&&n(0,r=i.server),"referrer"in i&&n(1,o=i.referrer),"open"in i&&n(2,s=i.open),"assetsUrl"in i&&n(3,a=i.assetsUrl),"onToggle"in i&&n(4,f=i.onToggle)},[r,o,s,a,f,l]}class ze extends Y{constructor(t){super(),F(this,t,Pe,De,z,{server:0,referrer:1,open:2,assetsUrl:3,onToggle:4},We)}}function je(e){j(e,"svelte-2hl2mw",`.svelte-2hl2mw,.svelte-2hl2mw:before,.svelte-2hl2mw:after{box-sizing:border-box}.chat-button-wrapper.svelte-2hl2mw{position:fixed;top:var(--fab-top-mobile, var(--fab-top, auto));right:var(--fab-right-mobile, var(--fab-right, 1.5em));bottom:var(--fab-bottom-mobile, var(--fab-bottom, 1.5em));left:var(--fab-left-mobile, var(--fab-left, auto));width:var(--fab-size-mobile, var(--fab-size, 5em));height:var(--fab-size-mobile, var(--fab-size, 5em));z-index:999}@media screen and (min-width: 768px){.chat-button-wrapper.svelte-2hl2mw{top:var(--fab-top, auto);right:var(--fab-right, 1.5em);bottom:var(--fab-bottom, 1.5em);left:var(--fab-left, auto);width:var(--fab-size, 6em);height:var(--fab-size, 6em)}}.chat-button.svelte-2hl2mw{display:block;height:100%;cursor:pointer;border-radius:50%;box-shadow:9px 9px 16px rgba(0, 0, 0, 0.25);transition:transform 100ms,
19
- box-shadow 100ms}.chat-button.svelte-2hl2mw:hover{box-shadow:16px 16px 16px rgba(0, 0, 0, 0.2);transform:translateY(-2px)}`)}function Ne(e){let t,n,r,o,s,a;return{c(){t=b("div"),n=b("img"),c(n,"class","chat-button svelte-2hl2mw"),c(n,"alt","Open chat window"),C(n.src,r=`${e[0]}/fab.svg`)||c(n,"src",r),c(t,"class","chat-button-wrapper svelte-2hl2mw"),c(t,"tabindex","0"),c(t,"role","button"),c(t,"aria-label","Open chat window"),c(t,"aria-expanded",o=e[2]?"true":"false")},m(f,l){_(f,t,l),m(t,n),s||(a=[I(t,"click",function(){L(e[1])&&e[1].apply(this,arguments)}),I(t,"keydown",e[3])],s=!0)},p(f,[l]){e=f,l&1&&!C(n.src,r=`${e[0]}/fab.svg`)&&c(n,"src",r),l&4&&o!==(o=e[2]?"true":"false")&&c(t,"aria-expanded",o)},i:h,o:h,d(f){f&&v(t),s=!1,x(a)}}}function He(e,t,n){let{assetsUrl:r}=t,{onToggle:o}=t,{open:s}=t;function a(f){const l=f.key;(l==="ArrowDown"||l==="ArrowRight"||l==="Enter"||l===" "||l==="Space")&&(f.stopPropagation(),o())}return e.$$set=f=>{"assetsUrl"in f&&n(0,r=f.assetsUrl),"onToggle"in f&&n(1,o=f.onToggle),"open"in f&&n(2,s=f.open)},[r,o,s,a]}class qe extends Y{constructor(t){super(),F(this,t,He,Ne,z,{assetsUrl:0,onToggle:1,open:2},je)}}/*! js-cookie v3.0.5 | MIT */function D(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)e[r]=n[r]}return e}var Me={read:function(e){return e[0]==='"'&&(e=e.slice(1,-1)),e.replace(/(%[\dA-F]{2})+/gi,decodeURIComponent)},write:function(e){return encodeURIComponent(e).replace(/%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,decodeURIComponent)}};function K(e,t){function n(o,s,a){if(!(typeof document>"u")){a=D({},t,a),typeof a.expires=="number"&&(a.expires=new Date(Date.now()+a.expires*864e5)),a.expires&&(a.expires=a.expires.toUTCString()),o=encodeURIComponent(o).replace(/%(2[346B]|5E|60|7C)/g,decodeURIComponent).replace(/[()]/g,escape);var f="";for(var l in a)a[l]&&(f+="; "+l,a[l]!==!0&&(f+="="+a[l].split(";")[0]));return document.cookie=o+"="+e.write(s,o)+f}}function r(o){if(!(typeof document>"u"||arguments.length&&!o)){for(var s=document.cookie?document.cookie.split("; "):[],a={},f=0;f<s.length;f++){var l=s[f].split("="),i=l.slice(1).join("=");try{var d=decodeURIComponent(l[0]);if(a[d]=e.read(i,d),o===d)break}catch{}}return o?a[o]:a}}return Object.create({set:n,get:r,remove:function(o,s){n(o,"",D({},s,{expires:-1}))},withAttributes:function(o){return K(this.converter,D({},this.attributes,o))},withConverter:function(o){return K(D({},this.converter,o),this.attributes)}},{attributes:{value:Object.freeze(t)},converter:{value:Object.freeze(e)}})}var fe=K(Me,{path:"/"});const ce="bot-window",de=()=>{switch(fe.get(ce)){case"open":return!0;case"closed":return!1;default:return!1}},ue=e=>{fe.set(ce,e)};let he=!1;function Be(e){he=e}function $e(){return he}const V=[];let A=de();function J(){A=!0,ue("open"),V.forEach(function(e){e.call(window,A)})}function Q(){A=!1,ue("closed"),V.forEach(function(e){e.call(window,A)})}function X(){A?Q():J()}function Ge(e){pe({type:"CHAT_MESSAGE_FROM_GUEST",text:e})}function Fe(e){pe({type:"TRIGGER_STORY",story:e})}function pe(e){var n;const t=document.getElementById("chat-frame");(n=t==null?void 0:t.contentWindow)==null||n.postMessage(e,"*")}function be(e,t){switch(e){case"ON_CHAT_WINDOW_STATE_CHANGE":V.push(t);break;default:throw new Error("Unsupported event "+e)}}const Ye=Object.freeze(Object.defineProperty({__proto__:null,closeChatWindow:Q,enterGuestMessage:Ge,isChatbotLoaded:$e,openChatWindow:J,subscribe:be,toggleChatWindow:X,triggerStory:Fe},Symbol.toStringTag,{value:"Module"}));function Ke(){return navigator.userAgent.match(/(iPad|iPhone|iPod)/g)}const Ve=()=>{Ke()&&document.querySelectorAll("html, body").forEach(e=>{e.classList.add("iOS-device")})},Je=e=>{"gtag"in window&&typeof window.gtag=="function"?window.gtag("event","",e):"dataLayer"in window&&Array.isArray(window.dataLayer)&&window.dataLayer.push(e)},Qe=(e,t)=>{window.addEventListener("message",n=>{const r=n.data;switch(r.type){case"webclient.expand.window":e(r.devices);break;case"webclient.change.url":t(r.url);break;case"google.tag.event":Je(r.payload);break}},!1)},{document:Xe}=ke;function Ze(e){j(e,"svelte-sr5aex","#chatbot-window.svelte-sr5aex{font-size:16px}")}function et(e){let t,n,r,o,s,a,f,l;return s=new qe({props:{assetsUrl:e[2],open:e[3],onToggle:X}}),f=new ze({props:{server:e[0],referrer:e[1],assetsUrl:e[2],open:e[3],onToggle:X}}),{c(){t=b("link"),r=U(),o=b("div"),se(s.$$.fragment),a=U(),se(f.$$.fragment),c(t,"rel","stylesheet"),c(t,"href",n=`${e[2]}/custom.css`),c(o,"id","chatbot-window"),c(o,"class","svelte-sr5aex")},m(i,d){m(Xe.head,t),_(i,r,d),_(i,o,d),$(s,o,null),m(o,a),$(f,o,null),l=!0},p(i,[d]){(!l||d&4&&n!==(n=`${i[2]}/custom.css`))&&c(t,"href",n);const u={};d&4&&(u.assetsUrl=i[2]),d&8&&(u.open=i[3]),s.$set(u);const p={};d&1&&(p.server=i[0]),d&2&&(p.referrer=i[1]),d&4&&(p.assetsUrl=i[2]),d&8&&(p.open=i[3]),f.$set(p)},i(i){l||(B(s.$$.fragment,i),B(f.$$.fragment,i),l=!0)},o(i){ie(s.$$.fragment,i),ie(f.$$.fragment,i),l=!1},d(i){i&&(v(r),v(o)),v(t),G(s),G(f)}}}function tt(e,t,n){let{server:r}=t,{referrer:o}=t,{assetsUrl:s=r?r.split("?")[0]:void 0}=t;Ve();let a=de();be("ON_CHAT_WINDOW_STATE_CHANGE",function(d){n(3,a=d)});function f(i){const d=window.innerWidth,u=i==null||i==="all",p=i==="desktop"&&d>=768,w=i==="mobile"&&d<768;(u||p||w)&&J()}function l(i){window.innerWidth<768&&Q(),document.location.href=i}return Qe(f,l),e.$$set=i=>{"server"in i&&n(0,r=i.server),"referrer"in i&&n(1,o=i.referrer),"assetsUrl"in i&&n(2,s=i.assetsUrl)},[r,o,s,a]}class nt extends Y{constructor(t){super(),F(this,t,tt,et,z,{server:0,referrer:1,assetsUrl:2},Ze)}}const rt=e=>e.replace(/\/embed\/bundle\.js/,""),ot=e=>{var t;return(t=e.dataset)==null?void 0:t.server},it=e=>{if(e&&"src"in e&&typeof e.src=="string")return ot(e)||rt(e.src)},st=document.querySelector("script#chatbot"),ge=it(st);window.chatbot=Ye;const me=()=>{console.log("Chatbot is loading from",ge),new nt({target:document.body,props:{server:ge,referrer:window.location.href}}),Be(!0)},ve=(e=0)=>{e>=3||document.readyState==="complete"?setTimeout(me,1e3):setTimeout(()=>{ve(e+1)},1e3)};ve();var P=document.getElementById("chatbot");P&&"src"in P&&typeof P.src=="string"&&P.src.indexOf("caller=bookmarklet")>0&&setTimeout(me,500)})();
18
+ `,f(t,"class","svelte-f0h0jd"),f(r,"class","svelte-f0h0jd")},m(o,s){y(o,t,s),y(o,n,s),y(o,r,s)},p:h,d(o){o&&(w(t),w(n),w(r))}}}function Ie(e){let t,n,r,o,s,a,d,l,i,c,u,g;return{c(){t=m("div"),n=m("div"),r=m("img"),s=E(),a=m("div"),a.innerHTML='<svg viewBox="-2 -2 24 24" aria-label="Close window icon" class="svelte-f0h0jd"><path d="M0,0L20,20M20,0L0,20" class="svelte-f0h0jd"></path></svg>',d=E(),l=m("iframe"),x(r.src,o=`${e[3]}/logo.svg`)||f(r,"src",o),f(r,"alt","Logo"),f(r,"class","logo svelte-f0h0jd"),f(a,"aria-label","Close chat window"),f(a,"role","button"),f(a,"class","bot-border-close-icon svelte-f0h0jd"),f(a,"tabindex",0),f(n,"class","header svelte-f0h0jd"),f(l,"id","chat-frame"),f(l,"title","Chat"),f(l,"class","bot svelte-f0h0jd"),x(l.src,i=`${e[0]}${e[0].indexOf("?")===-1?"?":"&"}referrer=${encodeURIComponent(e[1]??"")}&windowHeight=${le()}&windowWidth=${ae()}`)||f(l,"src",i),f(l,"frameborder","0"),f(l,"allow","microphone"),l.allowFullscreen=!0,f(t,"class","bot-border svelte-f0h0jd"),f(t,"aria-hidden",c=e[2]?"false":"true"),te(t,"closed",!e[2])},m(b,_){y(b,t,_),v(t,n),v(n,r),v(n,s),v(n,a),v(t,d),v(t,l),u||(g=[W(a,"click",function(){A(e[4])&&e[4].apply(this,arguments)}),W(a,"keydown",e[5])],u=!0)},p(b,_){e=b,_&8&&!x(r.src,o=`${e[3]}/logo.svg`)&&f(r,"src",o),_&3&&!x(l.src,i=`${e[0]}${e[0].indexOf("?")===-1?"?":"&"}referrer=${encodeURIComponent(e[1]??"")}&windowHeight=${le()}&windowWidth=${ae()}`)&&f(l,"src",i),_&4&&c!==(c=e[2]?"false":"true")&&f(t,"aria-hidden",c),_&4&&te(t,"closed",!e[2])},d(b){b&&w(t),u=!1,k(g)}}}function Re(e){let t;function n(s,a){return s[0]?Ie:We}let r=n(e),o=r(e);return{c(){o.c(),t=ke()},m(s,a){o.m(s,a),y(s,t,a)},p(s,[a]){r===(r=n(s))&&o?o.p(s,a):(o.d(1),o=r(s),o&&(o.c(),o.m(t.parentNode,t)))},i:h,o:h,d(s){s&&w(t),o.d(s)}}}function ae(){try{return window.innerWidth}catch{return-1}}function le(){try{return window.innerHeight}catch{return-1}}function De(e,t,n){let{server:r}=t,{referrer:o}=t,{open:s}=t,{assetsUrl:a}=t,{onToggle:d}=t;function l(i){const c=i.key;(c==="ArrowDown"||c==="ArrowRight"||c==="Enter"||c===" "||c==="Space")&&(i.stopPropagation(),d())}return e.$$set=i=>{"server"in i&&n(0,r=i.server),"referrer"in i&&n(1,o=i.referrer),"open"in i&&n(2,s=i.open),"assetsUrl"in i&&n(3,a=i.assetsUrl),"onToggle"in i&&n(4,d=i.onToggle)},[r,o,s,a,d,l]}class Pe extends Y{constructor(t){super(),F(this,t,De,Re,P,{server:0,referrer:1,open:2,assetsUrl:3,onToggle:4},Le)}}function ze(e){z(e,"svelte-2hl2mw",`.svelte-2hl2mw,.svelte-2hl2mw:before,.svelte-2hl2mw:after{box-sizing:border-box}.chat-button-wrapper.svelte-2hl2mw{position:fixed;top:var(--fab-top-mobile, var(--fab-top, auto));right:var(--fab-right-mobile, var(--fab-right, 1.5em));bottom:var(--fab-bottom-mobile, var(--fab-bottom, 1.5em));left:var(--fab-left-mobile, var(--fab-left, auto));width:var(--fab-size-mobile, var(--fab-size, 5em));height:var(--fab-size-mobile, var(--fab-size, 5em));z-index:999}@media screen and (min-width: 768px){.chat-button-wrapper.svelte-2hl2mw{top:var(--fab-top, auto);right:var(--fab-right, 1.5em);bottom:var(--fab-bottom, 1.5em);left:var(--fab-left, auto);width:var(--fab-size, 6em);height:var(--fab-size, 6em)}}.chat-button.svelte-2hl2mw{display:block;height:100%;cursor:pointer;border-radius:50%;box-shadow:9px 9px 16px rgba(0, 0, 0, 0.25);transition:transform 100ms,
19
+ box-shadow 100ms}.chat-button.svelte-2hl2mw:hover{box-shadow:16px 16px 16px rgba(0, 0, 0, 0.2);transform:translateY(-2px)}`)}function Ne(e){let t,n,r,o,s,a;return{c(){t=m("div"),n=m("img"),f(n,"class","chat-button svelte-2hl2mw"),f(n,"alt","Open chat window"),x(n.src,r=`${e[0]}/fab.svg`)||f(n,"src",r),f(t,"class","chat-button-wrapper svelte-2hl2mw"),f(t,"tabindex","0"),f(t,"role","button"),f(t,"aria-label","Open chat window"),f(t,"aria-expanded",o=e[2]?"true":"false")},m(d,l){y(d,t,l),v(t,n),s||(a=[W(t,"click",function(){A(e[1])&&e[1].apply(this,arguments)}),W(t,"keydown",e[3])],s=!0)},p(d,[l]){e=d,l&1&&!x(n.src,r=`${e[0]}/fab.svg`)&&f(n,"src",r),l&4&&o!==(o=e[2]?"true":"false")&&f(t,"aria-expanded",o)},i:h,o:h,d(d){d&&w(t),s=!1,k(a)}}}function He(e,t,n){let{assetsUrl:r}=t,{onToggle:o}=t,{open:s}=t;function a(d){const l=d.key;(l==="ArrowDown"||l==="ArrowRight"||l==="Enter"||l===" "||l==="Space")&&(d.stopPropagation(),o())}return e.$$set=d=>{"assetsUrl"in d&&n(0,r=d.assetsUrl),"onToggle"in d&&n(1,o=d.onToggle),"open"in d&&n(2,s=d.open)},[r,o,s,a]}class qe extends Y{constructor(t){super(),F(this,t,He,Ne,P,{assetsUrl:0,onToggle:1,open:2},ze)}}/*! js-cookie v3.0.5 | MIT */function R(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)e[r]=n[r]}return e}var Me={read:function(e){return e[0]==='"'&&(e=e.slice(1,-1)),e.replace(/(%[\dA-F]{2})+/gi,decodeURIComponent)},write:function(e){return encodeURIComponent(e).replace(/%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,decodeURIComponent)}};function K(e,t){function n(o,s,a){if(!(typeof document>"u")){a=R({},t,a),typeof a.expires=="number"&&(a.expires=new Date(Date.now()+a.expires*864e5)),a.expires&&(a.expires=a.expires.toUTCString()),o=encodeURIComponent(o).replace(/%(2[346B]|5E|60|7C)/g,decodeURIComponent).replace(/[()]/g,escape);var d="";for(var l in a)a[l]&&(d+="; "+l,a[l]!==!0&&(d+="="+a[l].split(";")[0]));return document.cookie=o+"="+e.write(s,o)+d}}function r(o){if(!(typeof document>"u"||arguments.length&&!o)){for(var s=document.cookie?document.cookie.split("; "):[],a={},d=0;d<s.length;d++){var l=s[d].split("="),i=l.slice(1).join("=");try{var c=decodeURIComponent(l[0]);if(a[c]=e.read(i,c),o===c)break}catch{}}return o?a[o]:a}}return Object.create({set:n,get:r,remove:function(o,s){n(o,"",R({},s,{expires:-1}))},withAttributes:function(o){return K(this.converter,R({},this.attributes,o))},withConverter:function(o){return K(R({},this.converter,o),this.attributes)}},{attributes:{value:Object.freeze(t)},converter:{value:Object.freeze(e)}})}var de=K(Me,{path:"/"});const fe="bot-window",ce=()=>{switch(de.get(fe)){case"open":return!0;case"closed":return!1;default:return!1}},ue=e=>{de.set(fe,e)};let he=!1;function Be(e){he=e}function $e(){return he}const V=[];let S=ce();function J(){S=!0,ue("open"),V.forEach(function(e){e.call(window,S)})}function Q(){S=!1,ue("closed"),V.forEach(function(e){e.call(window,S)})}function X(){S?Q():J()}function Ge(e){ge({type:"CHAT_MESSAGE_FROM_GUEST",text:e})}function Fe(e){ge({type:"TRIGGER_STORY",story:e})}function ge(e){var n;const t=document.getElementById("chat-frame");(n=t==null?void 0:t.contentWindow)==null||n.postMessage(e,"*")}function me(e,t){switch(e){case"ON_CHAT_WINDOW_STATE_CHANGE":V.push(t);break;default:throw new Error("Unsupported event "+e)}}const Ye=Object.freeze(Object.defineProperty({__proto__:null,closeChatWindow:Q,enterGuestMessage:Ge,isChatbotLoaded:$e,openChatWindow:J,subscribe:me,toggleChatWindow:X,triggerStory:Fe},Symbol.toStringTag,{value:"Module"}));function Ke(){return navigator.userAgent.match(/(iPad|iPhone|iPod)/g)}const Ve=()=>{Ke()&&document.querySelectorAll("html, body").forEach(e=>{e.classList.add("iOS-device")})},Je=e=>{"gtag"in window&&typeof window.gtag=="function"?window.gtag("event","",e):"dataLayer"in window&&Array.isArray(window.dataLayer)&&window.dataLayer.push(e)},Qe=(e,t)=>{window.addEventListener("message",n=>{const r=n.data;switch(r.type){case"webclient.expand.window":e(r.devices);break;case"webclient.change.url":t(r.url);break;case"google.tag.event":Je(r.payload);break}},!1)},{document:Xe}=_e;function Ze(e){z(e,"svelte-sr5aex","#chatbot-window.svelte-sr5aex{font-size:16px}")}function et(e){let t,n,r,o,s,a,d,l;return s=new qe({props:{assetsUrl:e[2],open:e[3],onToggle:X}}),d=new Pe({props:{server:e[0],referrer:e[1],assetsUrl:e[2],open:e[3],onToggle:X}}),{c(){t=m("link"),r=E(),o=m("div"),se(s.$$.fragment),a=E(),se(d.$$.fragment),f(t,"rel","stylesheet"),f(t,"href",n=`${e[2]}/custom.css`),f(o,"id","chatbot-window"),f(o,"class","svelte-sr5aex")},m(i,c){v(Xe.head,t),y(i,r,c),y(i,o,c),$(s,o,null),v(o,a),$(d,o,null),l=!0},p(i,[c]){(!l||c&4&&n!==(n=`${i[2]}/custom.css`))&&f(t,"href",n);const u={};c&4&&(u.assetsUrl=i[2]),c&8&&(u.open=i[3]),s.$set(u);const g={};c&1&&(g.server=i[0]),c&2&&(g.referrer=i[1]),c&4&&(g.assetsUrl=i[2]),c&8&&(g.open=i[3]),d.$set(g)},i(i){l||(B(s.$$.fragment,i),B(d.$$.fragment,i),l=!0)},o(i){ie(s.$$.fragment,i),ie(d.$$.fragment,i),l=!1},d(i){i&&(w(r),w(o)),w(t),G(s),G(d)}}}function tt(e,t,n){let{server:r}=t,{referrer:o}=t,{assetsUrl:s=r?r.split("?")[0]:void 0}=t;Ve();let a=ce();me("ON_CHAT_WINDOW_STATE_CHANGE",function(c){n(3,a=c)});function d(i){const c=window.innerWidth,u=i==null||i==="all",g=i==="desktop"&&c>=768,b=i==="mobile"&&c<768;(u||g||b)&&J()}function l(i){window.innerWidth<768&&Q(),document.location.href=i}return Qe(d,l),e.$$set=i=>{"server"in i&&n(0,r=i.server),"referrer"in i&&n(1,o=i.referrer),"assetsUrl"in i&&n(2,s=i.assetsUrl)},[r,o,s,a]}class nt extends Y{constructor(t){super(),F(this,t,tt,et,P,{server:0,referrer:1,assetsUrl:2},Ze)}}const rt=e=>e.replace(/\/embed\/bundle\.js/,""),ot=e=>{var t;return(t=e.dataset)==null?void 0:t.server},it=e=>{if(e&&"src"in e&&typeof e.src=="string")return ot(e)||rt(e.src)},st=document.querySelector("script#chatbot"),pe=it(st);window.chatbot=Ye;const ve=()=>{console.log("Chatbot is loading from",pe),new nt({target:document.body,props:{server:pe,referrer:window.location.href}}),Be(!0)},we=(e=0)=>{e>=3||document.readyState==="complete"?setTimeout(ve,1e3):setTimeout(()=>{we(e+1)},1e3)};we();var D=document.getElementById("chatbot");D&&"src"in D&&typeof D.src=="string"&&D.src.indexOf("caller=bookmarklet")>0&&setTimeout(ve,500)})();
package/dist/index.d.ts CHANGED
@@ -4,7 +4,10 @@ import { Action } from '@botfabrik/engine-domain';
4
4
  import { SpeechToTextProps } from './speechToText';
5
5
  import type { SessionInfoUserPayload, WebclientMiddlewareState } from './types';
6
6
  export type RequestUserInfos = (querystrings: any) => Promise<Partial<SessionInfoUser<SessionInfoUserPayload>>>;
7
- export type RequestSessionRecordQuery = (querystrings: any) => Promise<Record<string, unknown>>;
7
+ export type RequestSessionRecordQuery = (params: {
8
+ querystrings: any;
9
+ sessionId: string;
10
+ }) => Promise<Record<string, unknown>>;
8
11
  export interface WebClientProps {
9
12
  getStartedAction?: Action;
10
13
  requestUserInfos?: RequestUserInfos;
@@ -17,6 +20,7 @@ export interface WebClientProps {
17
20
  problemReportingEnabled?: boolean;
18
21
  conversationRatingEnabled?: boolean;
19
22
  fabVisible?: boolean;
23
+ useStartScreen?: boolean;
20
24
  }
21
25
  export declare enum Devices {
22
26
  All = "all",
package/dist/index.js CHANGED
@@ -90,92 +90,8 @@ exports.default = (clientName, environment, props) => async (bot) => {
90
90
  const nsp = bot.webserver.socket.of(`/${clientName}/chat`);
91
91
  nsp.on('connection', async (socket) => {
92
92
  try {
93
- const querystrings = socket.handshake.query;
94
- const locale = (0, extractLocale_1.default)(querystrings, socket.request.headers['accept-language']);
95
- const sessionsCollection = bot.store.db.collection('sessions');
96
- const { sessionId, sessionInfo: defaultSessionInfo, isNew, } = await (0, requestSessionData_1.default)(querystrings, sessionsCollection, clientName, locale, props);
97
- // create a channel for each session
98
- socket.join(sessionId);
99
- const sessionInfo = await (0, createSessionInfo_1.default)(socket, clientName, environment, defaultSessionInfo, locale, props)();
100
- const session = await bot.createSession(sessionId, sessionInfo);
101
- // sending active language and translations to client
102
- const clientLocale = (0, getSupportedClientLocale_1.default)(session.translator.locale);
103
- nsp
104
- .to(sessionId)
105
- .emit('set-translations', clientLocale, bot.translation.getResourceBundle(clientLocale)[clientName] || {});
106
- // sending persisted state to client
107
- const previousConversations = await (0, loadPreviousConversation_1.default)(bot.store, sessionId);
108
- nsp.to(sessionId).emit('restore-client-state', {
109
- sessionId,
110
- messages: previousConversations,
111
- });
112
- // enable speech support
113
- if (props.speech) {
114
- nsp.to(sessionId).emit('enable-speech-support');
115
- }
116
- // enable problem reporting
117
- if (props.problemReportingEnabled) {
118
- nsp.to(sessionId).emit('enable-problem-reporting');
119
- }
120
- // enable transcript export
121
- if (props.emailExportEnabled || props.pdfExportEnabled) {
122
- nsp.to(sessionId).emit('enable-transcript-export', {
123
- pdf: props.pdfExportEnabled || false,
124
- email: props.emailExportEnabled || false,
125
- });
126
- }
127
- // enable display of general conditions
128
- if (props.showGeneralConditions) {
129
- nsp.to(sessionId).emit('show-general-conditions');
130
- }
131
- // enable conversation rating
132
- if (props.conversationRatingEnabled) {
133
- nsp.to(sessionId).emit('enable-conversation-rating', {
134
- rating: sessionInfo.client.payload.conversationRating,
135
- });
136
- }
137
- // Notify middlewares about a connected or reconnected guest
138
- await session.dispatch((0, engine_domain_1.guestConnected)(sessionId));
139
- if (isNew && props.getStartedAction) {
140
- await session.dispatch(props.getStartedAction);
141
- }
142
- if (isNew &&
143
- props.expandChatWindowAtStart &&
144
- props.expandChatWindowAtStart !== Devices.None) {
145
- nsp
146
- .to(session.id)
147
- .emit('expand-window', { devices: props.expandChatWindowAtStart });
148
- }
149
- // forward actions from webclient
150
- socket.on('action', async (action) => {
151
- await session.dispatch(JSON.parse(action));
152
- });
153
- socket.on('disconnect', async () => {
154
- await session.dispatch((0, engine_domain_1.guestDisconnected)(sessionId));
155
- });
156
- socket.on('conversation-rating', async (rating) => {
157
- sessionsCollection.updateOne({ _id: sessionId }, {
158
- $set: { 'sessionInfo.client.payload.conversationRating': rating },
159
- });
160
- session.dispatch({
161
- type: engine_domain_1.ActionTypes.CONVERSATION_RATING_FROM_GUEST,
162
- payload: { rating },
163
- });
164
- });
165
- socket.on('audio-message', async (buffer) => {
166
- if (props.speech) {
167
- try {
168
- const text = await (0, speechToText_1.default)(props.speech, session.translator.locale, buffer);
169
- if (text && text.length) {
170
- nsp.to(sessionId).emit('speech-transcription', text);
171
- session.dispatch((0, engine_domain_1.receiveTextMessageFromGuest)(text));
172
- }
173
- }
174
- catch (error) {
175
- logger.error(error);
176
- }
177
- }
178
- });
93
+ sendConfigurationToClient(socket, props, bot, clientName);
94
+ socket.on('start-chat', onStartChat(socket, props, bot, clientName, environment, logger));
179
95
  }
180
96
  catch (error) {
181
97
  logger.error('Error while connecting webclient with backend.');
@@ -207,4 +123,98 @@ const serveStaticOptions = {
207
123
  },
208
124
  };
209
125
  const isFabVisible = ({ fabVisible = true }) => fabVisible;
126
+ const onStartChat = (socket, props, bot, clientName, environment, logger) => async ({ sessionId: defaultSessionId, userId: defaultUserId, }) => {
127
+ const locale = (0, extractLocale_1.default)(socket.handshake.query, socket.request.headers['accept-language']);
128
+ const sessionsCollection = bot.store.db.collection('sessions');
129
+ const { sessionId, sessionInfo: defaultSessionInfo, isNew, } = await (0, requestSessionData_1.default)(defaultSessionId, socket.handshake.query, sessionsCollection, clientName, locale, props);
130
+ // create a channel for each session
131
+ socket.join(sessionId);
132
+ const sessionInfo = await (0, createSessionInfo_1.default)(socket, clientName, environment, defaultSessionInfo, defaultUserId, locale, props)();
133
+ const session = await bot.createSession(sessionId, sessionInfo);
134
+ // sending persisted state to client
135
+ const previousConversations = await (0, loadPreviousConversation_1.default)(bot.store, sessionId);
136
+ socket.emit('restore-client-state', {
137
+ sessionId,
138
+ messages: previousConversations,
139
+ });
140
+ // enable conversation rating
141
+ if (props.conversationRatingEnabled) {
142
+ socket.emit('enable-conversation-rating', {
143
+ rating: sessionInfo.client.payload.conversationRating,
144
+ });
145
+ }
146
+ // Notify middlewares about a connected or reconnected guest
147
+ await session.dispatch((0, engine_domain_1.guestConnected)(sessionId));
148
+ if (isNew && props.getStartedAction) {
149
+ await session.dispatch(props.getStartedAction);
150
+ }
151
+ if (isNew &&
152
+ props.expandChatWindowAtStart &&
153
+ props.expandChatWindowAtStart !== Devices.None) {
154
+ socket.emit('expand-window', {
155
+ devices: props.expandChatWindowAtStart,
156
+ });
157
+ }
158
+ // forward actions from webclient
159
+ socket.on('action', async (action) => {
160
+ await session.dispatch(JSON.parse(action));
161
+ });
162
+ socket.on('disconnect', async () => {
163
+ await session.dispatch((0, engine_domain_1.guestDisconnected)(sessionId));
164
+ });
165
+ socket.on('conversation-rating', async (rating) => {
166
+ sessionsCollection.updateOne({ _id: sessionId }, {
167
+ $set: {
168
+ 'sessionInfo.client.payload.conversationRating': rating,
169
+ },
170
+ });
171
+ session.dispatch({
172
+ type: engine_domain_1.ActionTypes.CONVERSATION_RATING_FROM_GUEST,
173
+ payload: { rating },
174
+ });
175
+ });
176
+ socket.on('audio-message', async (buffer) => {
177
+ if (props.speech) {
178
+ try {
179
+ const text = await (0, speechToText_1.default)(props.speech, session.translator.locale, buffer);
180
+ if (text && text.length) {
181
+ socket.emit('speech-transcription', text);
182
+ session.dispatch((0, engine_domain_1.receiveTextMessageFromGuest)(text));
183
+ }
184
+ }
185
+ catch (error) {
186
+ logger.error(error);
187
+ }
188
+ }
189
+ });
190
+ };
191
+ const sendConfigurationToClient = (socket, props, bot, clientName) => {
192
+ // sending active language and translations to client
193
+ const locale = (0, extractLocale_1.default)(socket.handshake.query, socket.request.headers['accept-language']);
194
+ const supportedLocale = bot.translation.detectSupportedLocale(locale);
195
+ const clientLocale = (0, getSupportedClientLocale_1.default)(supportedLocale);
196
+ socket.emit('set-translations', clientLocale, bot.translation.getResourceBundle(clientLocale)[clientName] || {});
197
+ // enable speech support
198
+ if (props.speech) {
199
+ socket.emit('enable-speech-support');
200
+ }
201
+ // enable problem reporting
202
+ if (props.problemReportingEnabled) {
203
+ socket.emit('enable-problem-reporting');
204
+ }
205
+ // enable transcript export
206
+ if (props.emailExportEnabled || props.pdfExportEnabled) {
207
+ socket.emit('enable-transcript-export', {
208
+ pdf: !!props.pdfExportEnabled,
209
+ email: !!props.emailExportEnabled,
210
+ });
211
+ }
212
+ // enable display of general conditions
213
+ if (props.showGeneralConditions) {
214
+ socket.emit('show-general-conditions');
215
+ }
216
+ // inform client whether to use start screen
217
+ // socket.emit('set-use-start-screen', !!props.useStartScreen);
218
+ socket.emit('set-use-start-screen', true);
219
+ };
210
220
  exports.CLIENT_TYPE = 'webclient';
@@ -6,5 +6,5 @@ interface SessionData {
6
6
  sessionInfo: SessionInfo<SessionInfoClientPayload, SessionInfoUserPayload>;
7
7
  isNew: boolean;
8
8
  }
9
- declare const requestSessionData: (querystrings: any, sessionsCollection: any, clientName: string, locale: string | undefined, props: WebClientProps) => Promise<SessionData>;
9
+ declare const requestSessionData: (sessionId: string, querystrings: any, sessionsCollection: any, clientName: string, locale: string | undefined, props: WebClientProps) => Promise<SessionData>;
10
10
  export default requestSessionData;
@@ -2,34 +2,37 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const crypto_1 = require("crypto");
4
4
  const index_1 = require("./index");
5
- const requestSessionData = async (querystrings, sessionsCollection, clientName, locale, props) => {
5
+ const requestSessionData = async (sessionId, querystrings, sessionsCollection, clientName, locale, props) => {
6
6
  const baseQuery = {
7
7
  'sessionInfo.client.type': index_1.CLIENT_TYPE,
8
8
  'sessionInfo.client.name': clientName,
9
9
  };
10
10
  let findSessionRecordQuery;
11
11
  if (props.requestSessionRecordQuery) {
12
- const customQuery = await props.requestSessionRecordQuery(querystrings);
12
+ const customQuery = await props.requestSessionRecordQuery({
13
+ sessionId,
14
+ querystrings,
15
+ });
13
16
  findSessionRecordQuery = Object.assign({}, baseQuery, customQuery);
14
17
  }
15
18
  else {
16
19
  findSessionRecordQuery = {
17
- _id: querystrings.sessionId,
20
+ _id: sessionId,
18
21
  'sessionInfo.user.locale': locale,
19
22
  ...baseQuery,
20
23
  };
21
24
  }
22
25
  const sessionRecord = await sessionsCollection.findOne(findSessionRecordQuery, { _id: 1, sessionInfo: 1 });
23
- let sessionId;
26
+ let sesId;
24
27
  let sessionInfo;
25
28
  let isNew;
26
29
  if (sessionRecord) {
27
- sessionId = sessionRecord._id;
30
+ sesId = sessionRecord._id;
28
31
  sessionInfo = sessionRecord.sessionInfo;
29
32
  isNew = false;
30
33
  }
31
34
  else {
32
- sessionId = (0, crypto_1.randomUUID)();
35
+ sesId = (0, crypto_1.randomUUID)();
33
36
  sessionInfo = {
34
37
  client: {},
35
38
  user: {},
@@ -38,7 +41,7 @@ const requestSessionData = async (querystrings, sessionsCollection, clientName,
38
41
  isNew = true;
39
42
  }
40
43
  return {
41
- sessionId,
44
+ sessionId: sesId,
42
45
  sessionInfo,
43
46
  isNew,
44
47
  };