@lilaquadrat/chat 0.1.16 → 0.1.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/wc/lilaquadrat-studio-chat.js +5 -5
- package/dist/wc/lilaquadrat-studio-chat.umd.cjs +1 -1
- package/package.json +24 -23
- package/dist/app/assets/de-DD_Cd2_H.js +0 -1
- package/dist/app/assets/loadFonts-BZPSkxb8.js +0 -1
- package/dist/app/assets/main-CMstByrm.js +0 -2
- package/dist/app/assets/preload-helper-OSX1TyOM.js +0 -1
- package/dist/app/assets/support-C4cC4Lzu.js +0 -2
- package/dist/app/assets/support-agent-DX9ndFJx.js +0 -1
- package/dist/app/assets/web-component-C7H8-BJp.js +0 -1
- package/dist/app/index.html +0 -37
- package/dist/app/support/index.html +0 -43
- package/dist/studio-chat-module.js +0 -0
- package/dist/studio-chat-module.umd.cjs +0 -1
- package/dist/types/src/bot/botClient.d.ts +0 -40
- package/dist/types/src/bot/botManager.d.ts +0 -3
- package/dist/types/src/composables/useChatBootstrap.d.ts +0 -27
- package/dist/types/src/composables/useChatVisibility.d.ts +0 -18
- package/dist/types/src/composables/useTriggerEvent.d.ts +0 -10
- package/dist/types/src/composables/useWebSocket.d.ts +0 -11
- package/dist/types/src/config/auth.d.ts +0 -19
- package/dist/types/src/config/bootstrap.agent.d.ts +0 -86
- package/dist/types/src/config/bootstrap.d.ts +0 -10
- package/dist/types/src/config/chatConfig.d.ts +0 -83
- package/dist/types/src/config/components.shared.d.ts +0 -18
- package/dist/types/src/config/users.d.ts +0 -27
- package/dist/types/src/helpers/date.d.ts +0 -7
- package/dist/types/src/helpers/handleMessages.d.ts +0 -2
- package/dist/types/src/helpers/loadComponents.d.ts +0 -10
- package/dist/types/src/helpers/participants.d.ts +0 -50
- package/dist/types/src/helpers/rights.d.ts +0 -19
- package/dist/types/src/helpers/sdkOptions.d.ts +0 -17
- package/dist/types/src/helpers/sounds.d.ts +0 -8
- package/dist/types/src/helpers/supportStatus.d.ts +0 -15
- package/dist/types/src/interfaces/Conversation.d.ts +0 -44
- package/dist/types/src/interfaces/ConversationSla.d.ts +0 -9
- package/dist/types/src/interfaces/IncomingFrame.d.ts +0 -71
- package/dist/types/src/interfaces/Message.d.ts +0 -18
- package/dist/types/src/interfaces/ParticipantDocument.d.ts +0 -13
- package/dist/types/src/libs/StudioSDK.d.ts +0 -148
- package/dist/types/src/libs/chatSession.d.ts +0 -113
- package/dist/types/src/libs/resize.d.ts +0 -79
- package/dist/types/src/libs/websocketManager.d.ts +0 -54
- package/dist/types/src/locales/de.d.ts +0 -113
- package/dist/types/src/locales/en.d.ts +0 -113
- package/dist/types/src/main.d.ts +0 -1
- package/dist/types/src/mixins/groupMessages.d.ts +0 -14
- package/dist/types/src/mixins/hardCopy.d.ts +0 -2
- package/dist/types/src/mixins/logger.d.ts +0 -8
- package/dist/types/src/mixins/traceable.d.ts +0 -11
- package/dist/types/src/plugins/i18n.d.ts +0 -122
- package/dist/types/src/standalone/auth.d.ts +0 -26
- package/dist/types/src/standalone/main.d.ts +0 -1
- package/dist/types/src/standalone/settings.d.ts +0 -63
- package/dist/types/src/standalone-support/main.d.ts +0 -1
- package/dist/types/src/stores/bots.store.d.ts +0 -69
- package/dist/types/src/stores/calls.store.d.ts +0 -14
- package/dist/types/src/stores/contacts.store.d.ts +0 -87
- package/dist/types/src/stores/conversations.store.d.ts +0 -2228
- package/dist/types/src/stores/main.store.d.ts +0 -184
- package/dist/types/src/stores/supportConversations.store.d.ts +0 -65
- package/dist/types/src/stores/user.store.d.ts +0 -8
- package/dist/types/src/stores/usersCache.store.d.ts +0 -31
- package/dist/types/src/styles/loadFonts.d.ts +0 -15
- package/dist/types/src/support-agent.d.ts +0 -18
- package/dist/types/tsconfig.build.tsbuildinfo +0 -1
- package/dist/wc-support/lilaquadrat-studio-support.js +0 -9
- package/dist/wc-support/lilaquadrat-studio-support.umd.cjs +0 -1
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/web-component-C7H8-BJp.js","assets/preload-helper-OSX1TyOM.js","assets/loadFonts-BZPSkxb8.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{n as t,r as e,t as n}from"./preload-helper-OSX1TyOM.js";var o="#app";async function a(e){await n(()=>import("./web-component-C7H8-BJp.js"),__vite__mapDeps([0,1,2]));const a=document.createElement("lilaquadrat-studio-chat");a.config={...e.chat,token:await t.getToken(),getToken:e=>t.getToken(e),user:t.getProfile(),close:()=>t.logout()},function(){const t=document.querySelector(o);if(!t)throw new Error(`mount target ${o} not found`);return t}().replaceChildren(a)}(async function(){const n=await e();n.title&&(document.title=n.title),await t.init(n)&&await a(n)})().catch(function(t){const e=t instanceof Error?t.message:String(t);console.error("[studio-chat] standalone boot failed",t);const n=document.querySelector(o);if(!n)return;const a=document.createElement("div");a.className="standalone-error",a.innerHTML="<h1>Chat unavailable</h1>",a.appendChild(Object.assign(document.createElement("p"),{textContent:e})),n.replaceChildren(a)});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var e=Object.create,t=Object.defineProperty,r=Object.getOwnPropertyDescriptor,n=Object.getOwnPropertyNames,o=Object.getPrototypeOf,i=Object.prototype.hasOwnProperty,s=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),a=(e,r)=>{let n={};for(var o in e)t(n,o,{get:e[o],enumerable:!0});return r||t(n,Symbol.toStringTag,{value:"Module"}),n},c=(s,a,c)=>(c=null!=s?e(o(s)):{},((e,o,s,a)=>{if(o&&"object"==typeof o||"function"==typeof o)for(var c,u=n(o),l=0,d=u.length;l<d;l++)c=u[l],i.call(e,c)||c===s||t(e,c,{get:(e=>o[e]).bind(null,c),enumerable:!(a=r(o,c))||a.enumerable});return e})(!a&&s&&s.__esModule&&i.call(s,"default")?c:t(c,"default",{value:s,enumerable:!0}),s));!function(){const e=document.createElement("link").relList;if(!(e&&e.supports&&e.supports("modulepreload"))){for(const e of document.querySelectorAll('link[rel="modulepreload"]'))t(e);new MutationObserver(e=>{for(const r of e)if("childList"===r.type)for(const e of r.addedNodes)"LINK"===e.tagName&&"modulepreload"===e.rel&&t(e)}).observe(document,{childList:!0,subtree:!0})}function t(e){if(e.ep)return;e.ep=!0;const t=function(e){const t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),"use-credentials"===e.crossOrigin?t.credentials="include":"anonymous"===e.crossOrigin?t.credentials="omit":t.credentials="same-origin",t}(e);fetch(e.href,t)}}();var u="/settings/settings.json",l=["localhost","127.0.0.1","[::1]"];async function d(){const e=await fetch(u,{cache:"no-store"});if(!e.ok)throw new Error(`could not load ${u} (${e.status})`);const t=await e.json();if(!t.chat)throw new Error(`${u} has no "chat" section`);if(t.dev&&!l.includes(window.location.hostname))throw new Error(`${u} has dev mode enabled, which only works on localhost — replace it with this deployment's configuration`);return t}function h(e){const{wsUrl:t,apiUrl:r,mediaUrl:n,sound:o}=e.chat;return{wsUrl:t,apiUrl:r,mediaUrl:n,sound:o}}var f=s((e,t)=>{t.exports={}}),p=c(s((e,t)=>{!function(){var e="input is invalid type",r="object"==typeof window,n=r?window:{};n.JS_SHA256_NO_WINDOW&&(r=!1);var o=!r&&"object"==typeof self,i=!n.JS_SHA256_NO_NODE_JS&&"object"==typeof process&&process.versions&&process.versions.node&&"renderer"!=process.type;i?n=global:o&&(n=self);var s=!n.JS_SHA256_NO_COMMON_JS&&"object"==typeof t&&t.exports,a="function"==typeof define&&define.amd,c=!n.JS_SHA256_NO_ARRAY_BUFFER&&"undefined"!=typeof ArrayBuffer,u="0123456789abcdef".split(""),l=[-2147483648,8388608,32768,128],d=[24,16,8,0],h=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],p=["hex","array","digest","arrayBuffer"],m=[];!n.JS_SHA256_NO_NODE_JS&&Array.isArray||(Array.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)}),!c||!n.JS_SHA256_NO_ARRAY_BUFFER_IS_VIEW&&ArrayBuffer.isView||(ArrayBuffer.isView=function(e){return"object"==typeof e&&e.buffer&&e.buffer.constructor===ArrayBuffer});var g=function(e,t){return function(r){return new b(t,!0).update(r)[e]()}},k=function(e){var t=g("hex",e);i&&(t=w(t,e)),t.create=function(){return new b(e)},t.update=function(e){return t.create().update(e)};for(var r=0;r<p.length;++r){var n=p[r];t[n]=g(n,e)}return t},w=function(t,r){var o,i=f(),s=f().Buffer,a=r?"sha224":"sha256";o=s.from&&!n.JS_SHA256_NO_BUFFER_FROM?s.from:function(e){return new s(e)};return function(r){if("string"==typeof r)return i.createHash(a).update(r,"utf8").digest("hex");if(null==r)throw new Error(e);return r.constructor===ArrayBuffer&&(r=new Uint8Array(r)),Array.isArray(r)||ArrayBuffer.isView(r)||r.constructor===s?i.createHash(a).update(o(r)).digest("hex"):t(r)}},v=function(e,t){return function(r,n){return new S(r,t,!0).update(n)[e]()}},y=function(e){var t=v("hex",e);t.create=function(t){return new S(t,e)},t.update=function(e,r){return t.create(e).update(r)};for(var r=0;r<p.length;++r){var n=p[r];t[n]=v(n,e)}return t};function b(e,t){t?(m[0]=m[16]=m[1]=m[2]=m[3]=m[4]=m[5]=m[6]=m[7]=m[8]=m[9]=m[10]=m[11]=m[12]=m[13]=m[14]=m[15]=0,this.blocks=m):this.blocks=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],e?(this.h0=3238371032,this.h1=914150663,this.h2=812702999,this.h3=4144912697,this.h4=4290775857,this.h5=1750603025,this.h6=1694076839,this.h7=3204075428):(this.h0=1779033703,this.h1=3144134277,this.h2=1013904242,this.h3=2773480762,this.h4=1359893119,this.h5=2600822924,this.h6=528734635,this.h7=1541459225),this.block=this.start=this.bytes=this.hBytes=0,this.finalized=this.hashed=!1,this.first=!0,this.is224=e}function S(t,r,n){var o,i=typeof t;if("string"===i){var s,a=[],u=t.length,l=0;for(o=0;o<u;++o)(s=t.charCodeAt(o))<128?a[l++]=s:s<2048?(a[l++]=192|s>>>6,a[l++]=128|63&s):s<55296||s>=57344?(a[l++]=224|s>>>12,a[l++]=128|s>>>6&63,a[l++]=128|63&s):(s=65536+((1023&s)<<10|1023&t.charCodeAt(++o)),a[l++]=240|s>>>18,a[l++]=128|s>>>12&63,a[l++]=128|s>>>6&63,a[l++]=128|63&s);t=a}else{if("object"!==i)throw new Error(e);if(null===t)throw new Error(e);if(c&&t.constructor===ArrayBuffer)t=new Uint8Array(t);else if(!(Array.isArray(t)||c&&ArrayBuffer.isView(t)))throw new Error(e)}t.length>64&&(t=new b(r,!0).update(t).array());var d=[],h=[];for(o=0;o<64;++o){var f=t[o]||0;d[o]=92^f,h[o]=54^f}b.call(this,r,n),this.update(h),this.oKeyPad=d,this.inner=!0,this.sharedMemory=n}b.prototype.update=function(t){if(!this.finalized){var r,n=typeof t;if("string"!==n){if("object"!==n)throw new Error(e);if(null===t)throw new Error(e);if(c&&t.constructor===ArrayBuffer)t=new Uint8Array(t);else if(!(Array.isArray(t)||c&&ArrayBuffer.isView(t)))throw new Error(e);r=!0}for(var o,i,s=0,a=t.length,u=this.blocks;s<a;){if(this.hashed&&(this.hashed=!1,u[0]=this.block,this.block=u[16]=u[1]=u[2]=u[3]=u[4]=u[5]=u[6]=u[7]=u[8]=u[9]=u[10]=u[11]=u[12]=u[13]=u[14]=u[15]=0),r)for(i=this.start;s<a&&i<64;++s)u[i>>>2]|=t[s]<<d[3&i++];else for(i=this.start;s<a&&i<64;++s)(o=t.charCodeAt(s))<128?u[i>>>2]|=o<<d[3&i++]:o<2048?(u[i>>>2]|=(192|o>>>6)<<d[3&i++],u[i>>>2]|=(128|63&o)<<d[3&i++]):o<55296||o>=57344?(u[i>>>2]|=(224|o>>>12)<<d[3&i++],u[i>>>2]|=(128|o>>>6&63)<<d[3&i++],u[i>>>2]|=(128|63&o)<<d[3&i++]):(o=65536+((1023&o)<<10|1023&t.charCodeAt(++s)),u[i>>>2]|=(240|o>>>18)<<d[3&i++],u[i>>>2]|=(128|o>>>12&63)<<d[3&i++],u[i>>>2]|=(128|o>>>6&63)<<d[3&i++],u[i>>>2]|=(128|63&o)<<d[3&i++]);this.lastByteIndex=i,this.bytes+=i-this.start,i>=64?(this.block=u[16],this.start=i-64,this.hash(),this.hashed=!0):this.start=i}return this.bytes>4294967295&&(this.hBytes+=this.bytes/4294967296|0,this.bytes=this.bytes%4294967296),this}},b.prototype.finalize=function(){if(!this.finalized){this.finalized=!0;var e=this.blocks,t=this.lastByteIndex;e[16]=this.block,e[t>>>2]|=l[3&t],this.block=e[16],t>=56&&(this.hashed||this.hash(),e[0]=this.block,e[16]=e[1]=e[2]=e[3]=e[4]=e[5]=e[6]=e[7]=e[8]=e[9]=e[10]=e[11]=e[12]=e[13]=e[14]=e[15]=0),e[14]=this.hBytes<<3|this.bytes>>>29,e[15]=this.bytes<<3,this.hash()}},b.prototype.hash=function(){var e,t,r,n,o,i,s,a,c,u=this.h0,l=this.h1,d=this.h2,f=this.h3,p=this.h4,m=this.h5,g=this.h6,k=this.h7,w=this.blocks;for(e=16;e<64;++e)t=((o=w[e-15])>>>7|o<<25)^(o>>>18|o<<14)^o>>>3,r=((o=w[e-2])>>>17|o<<15)^(o>>>19|o<<13)^o>>>10,w[e]=w[e-16]+t+w[e-7]+r|0;for(c=l&d,e=0;e<64;e+=4)this.first?(this.is224?(i=300032,k=(o=w[0]-1413257819)-150054599|0,f=o+24177077|0):(i=704751109,k=(o=w[0]-210244248)-1521486534|0,f=o+143694565|0),this.first=!1):(t=(u>>>2|u<<30)^(u>>>13|u<<19)^(u>>>22|u<<10),n=(i=u&l)^u&d^c,k=f+(o=k+(r=(p>>>6|p<<26)^(p>>>11|p<<21)^(p>>>25|p<<7))+(p&m^~p&g)+h[e]+w[e])|0,f=o+(t+n)|0),t=(f>>>2|f<<30)^(f>>>13|f<<19)^(f>>>22|f<<10),n=(s=f&u)^f&l^i,g=d+(o=g+(r=(k>>>6|k<<26)^(k>>>11|k<<21)^(k>>>25|k<<7))+(k&p^~k&m)+h[e+1]+w[e+1])|0,t=((d=o+(t+n)|0)>>>2|d<<30)^(d>>>13|d<<19)^(d>>>22|d<<10),n=(a=d&f)^d&u^s,m=l+(o=m+(r=(g>>>6|g<<26)^(g>>>11|g<<21)^(g>>>25|g<<7))+(g&k^~g&p)+h[e+2]+w[e+2])|0,t=((l=o+(t+n)|0)>>>2|l<<30)^(l>>>13|l<<19)^(l>>>22|l<<10),n=(c=l&d)^l&f^a,p=u+(o=p+(r=(m>>>6|m<<26)^(m>>>11|m<<21)^(m>>>25|m<<7))+(m&g^~m&k)+h[e+3]+w[e+3])|0,u=o+(t+n)|0,this.chromeBugWorkAround=!0;this.h0=this.h0+u|0,this.h1=this.h1+l|0,this.h2=this.h2+d|0,this.h3=this.h3+f|0,this.h4=this.h4+p|0,this.h5=this.h5+m|0,this.h6=this.h6+g|0,this.h7=this.h7+k|0},b.prototype.hex=function(){this.finalize();var e=this.h0,t=this.h1,r=this.h2,n=this.h3,o=this.h4,i=this.h5,s=this.h6,a=this.h7,c=u[e>>>28&15]+u[e>>>24&15]+u[e>>>20&15]+u[e>>>16&15]+u[e>>>12&15]+u[e>>>8&15]+u[e>>>4&15]+u[15&e]+u[t>>>28&15]+u[t>>>24&15]+u[t>>>20&15]+u[t>>>16&15]+u[t>>>12&15]+u[t>>>8&15]+u[t>>>4&15]+u[15&t]+u[r>>>28&15]+u[r>>>24&15]+u[r>>>20&15]+u[r>>>16&15]+u[r>>>12&15]+u[r>>>8&15]+u[r>>>4&15]+u[15&r]+u[n>>>28&15]+u[n>>>24&15]+u[n>>>20&15]+u[n>>>16&15]+u[n>>>12&15]+u[n>>>8&15]+u[n>>>4&15]+u[15&n]+u[o>>>28&15]+u[o>>>24&15]+u[o>>>20&15]+u[o>>>16&15]+u[o>>>12&15]+u[o>>>8&15]+u[o>>>4&15]+u[15&o]+u[i>>>28&15]+u[i>>>24&15]+u[i>>>20&15]+u[i>>>16&15]+u[i>>>12&15]+u[i>>>8&15]+u[i>>>4&15]+u[15&i]+u[s>>>28&15]+u[s>>>24&15]+u[s>>>20&15]+u[s>>>16&15]+u[s>>>12&15]+u[s>>>8&15]+u[s>>>4&15]+u[15&s];return this.is224||(c+=u[a>>>28&15]+u[a>>>24&15]+u[a>>>20&15]+u[a>>>16&15]+u[a>>>12&15]+u[a>>>8&15]+u[a>>>4&15]+u[15&a]),c},b.prototype.toString=b.prototype.hex,b.prototype.digest=function(){this.finalize();var e=this.h0,t=this.h1,r=this.h2,n=this.h3,o=this.h4,i=this.h5,s=this.h6,a=this.h7,c=[e>>>24&255,e>>>16&255,e>>>8&255,255&e,t>>>24&255,t>>>16&255,t>>>8&255,255&t,r>>>24&255,r>>>16&255,r>>>8&255,255&r,n>>>24&255,n>>>16&255,n>>>8&255,255&n,o>>>24&255,o>>>16&255,o>>>8&255,255&o,i>>>24&255,i>>>16&255,i>>>8&255,255&i,s>>>24&255,s>>>16&255,s>>>8&255,255&s];return this.is224||c.push(a>>>24&255,a>>>16&255,a>>>8&255,255&a),c},b.prototype.array=b.prototype.digest,b.prototype.arrayBuffer=function(){this.finalize();var e=new ArrayBuffer(this.is224?28:32),t=new DataView(e);return t.setUint32(0,this.h0),t.setUint32(4,this.h1),t.setUint32(8,this.h2),t.setUint32(12,this.h3),t.setUint32(16,this.h4),t.setUint32(20,this.h5),t.setUint32(24,this.h6),this.is224||t.setUint32(28,this.h7),e},S.prototype=new b,S.prototype.finalize=function(){if(b.prototype.finalize.call(this),this.inner){this.inner=!1;var e=this.array();b.call(this,this.is224,this.sharedMemory),this.update(this.oKeyPad),this.update(e),b.prototype.finalize.call(this)}};var _=k();_.sha256=_,_.sha224=k(!0),_.sha256.hmac=y(),_.sha224.hmac=y(!0),s?t.exports=_:(n.sha256=_.sha256,n.sha224=_.sha224,a&&define(function(){return _}))}()})(),1),m=class extends Error{};function g(e){let t=e.replace(/-/g,"+").replace(/_/g,"/");switch(t.length%4){case 0:break;case 2:t+="==";break;case 3:t+="=";break;default:throw new Error("base64 string is not of the correct length")}try{return function(e){return decodeURIComponent(atob(e).replace(/(.)/g,(e,t)=>{let r=t.charCodeAt(0).toString(16).toUpperCase();return r.length<2&&(r="0"+r),"%"+r}))}(t)}catch(r){return atob(t)}}function k(e,t){if("string"!=typeof e)throw new m("Invalid token specified: must be a string");t||(t={});const r=!0===t.header?0:1,n=e.split(".")[r];if("string"!=typeof n)throw new m(`Invalid token specified: missing part #${r+1}`);let o;try{o=g(n)}catch(i){throw new m(`Invalid token specified: invalid base64 for part #${r+1} (${i.message})`)}try{return JSON.parse(o)}catch(i){throw new m(`Invalid token specified: invalid json for part #${r+1} (${i.message})`)}}if(m.prototype.name="InvalidTokenError","undefined"==typeof Promise)throw Error("Keycloak requires an environment that supports Promises. Make sure that you include the appropriate polyfill.");function w(e){if(!(this instanceof w))throw new Error("The 'Keycloak' constructor must be invoked with 'new'.");for(var t,r,n=this,o=[],i={enable:!0,callbackList:[],interval:5},s=document.getElementsByTagName("script"),a=0;a<s.length;a++)-1===s[a].src.indexOf("keycloak.js")&&-1===s[a].src.indexOf("keycloak.min.js")||-1===s[a].src.indexOf("version=")||(n.iframeVersion=s[a].src.substring(s[a].src.indexOf("version=")+8).split("&")[0]);var c=!0,u=R(console.info),l=R(console.warn);function d(e,t){for(var r=function(e){var t=null,r=window.crypto||window.msCrypto;if(r&&r.getRandomValues&&window.Uint8Array)return t=new Uint8Array(e),r.getRandomValues(t),t;t=new Array(e);for(var n=0;n<t.length;n++)t[n]=Math.floor(256*Math.random());return t}(e),n=new Array(e),o=0;o<e;o++)n[o]=t.charCodeAt(r[o]%t.length);return String.fromCharCode.apply(null,n)}function h(e,t){if("S256"!==e)throw new TypeError(`Invalid value for 'pkceMethod', expected 'S256' but got '${e}'.`);return function(e){const t=String.fromCodePoint(...e);return btoa(t)}(new Uint8Array(p.default.arrayBuffer(t))).replace(/\+/g,"-").replace(/\//g,"_").replace(/\=/g,"")}function f(){return void 0!==n.authServerUrl?"/"==n.authServerUrl.charAt(n.authServerUrl.length-1)?n.authServerUrl+"realms/"+encodeURIComponent(n.realm):n.authServerUrl+"/realms/"+encodeURIComponent(n.realm):void 0}function m(e,t){var r=e.code,o=e.error,i=e.prompt,s=(new Date).getTime();if(e.kc_action_status&&n.onActionUpdate&&n.onActionUpdate(e.kc_action_status),o)if("none"!=i)if(e.error_description&&"authentication_expired"===e.error_description)n.login(e.loginOptions);else{var a={error:o,error_description:e.error_description};n.onAuthError&&n.onAuthError(a),t&&t.setError(a)}else t&&t.setSuccess();else if("standard"!=n.flow&&(e.access_token||e.id_token)&&f(e.access_token,null,e.id_token,!0),"implicit"!=n.flow&&r){var l="code="+r+"&grant_type=authorization_code",d=n.endpoints.token(),h=new XMLHttpRequest;h.open("POST",d,!0),h.setRequestHeader("Content-type","application/x-www-form-urlencoded"),l+="&client_id="+encodeURIComponent(n.clientId),l+="&redirect_uri="+e.redirectUri,e.pkceCodeVerifier&&(l+="&code_verifier="+e.pkceCodeVerifier),h.withCredentials=!0,h.onreadystatechange=function(){if(4==h.readyState)if(200==h.status){var e=JSON.parse(h.responseText);f(e.access_token,e.refresh_token,e.id_token,"standard"===n.flow),A()}else n.onAuthError&&n.onAuthError(),t&&t.setError()},h.send(l)}function f(r,o,i,a){v(r,o,i,s=(s+(new Date).getTime())/2),c&&n.idTokenParsed&&n.idTokenParsed.nonce!=e.storedNonce?(u("[KEYCLOAK] Invalid nonce, clearing token"),n.clearToken(),t&&t.setError()):a&&(n.onAuthSuccess&&n.onAuthSuccess(),t&&t.setSuccess())}}function g(e){return 0==e.status&&e.responseText&&e.responseURL.startsWith("file:")}function v(e,t,r,o){if(n.tokenTimeoutHandle&&(clearTimeout(n.tokenTimeoutHandle),n.tokenTimeoutHandle=null),t?(n.refreshToken=t,n.refreshTokenParsed=k(t)):(delete n.refreshToken,delete n.refreshTokenParsed),r?(n.idToken=r,n.idTokenParsed=k(r)):(delete n.idToken,delete n.idTokenParsed),e){if(n.token=e,n.tokenParsed=k(e),n.sessionId=n.tokenParsed.sid,n.authenticated=!0,n.subject=n.tokenParsed.sub,n.realmAccess=n.tokenParsed.realm_access,n.resourceAccess=n.tokenParsed.resource_access,o&&(n.timeSkew=Math.floor(o/1e3)-n.tokenParsed.iat),null!=n.timeSkew&&(u("[KEYCLOAK] Estimated time difference between browser and server is "+n.timeSkew+" seconds"),n.onTokenExpired)){var i=1e3*(n.tokenParsed.exp-(new Date).getTime()/1e3+n.timeSkew);u("[KEYCLOAK] Token expires in "+Math.round(i/1e3)+" s"),i<=0?n.onTokenExpired():n.tokenTimeoutHandle=setTimeout(n.onTokenExpired,i)}}else delete n.token,delete n.tokenParsed,delete n.subject,delete n.realmAccess,delete n.resourceAccess,n.authenticated=!1}function y(){var e="0123456789abcdef",t=d(36,e).split("");return t[14]="4",t[19]=e.substr(3&t[19]|8,1),t[8]=t[13]=t[18]=t[23]="-",t.join("")}function b(e){var t=function(e){var t;switch(n.flow){case"standard":t=["code","state","session_state","kc_action_status","iss"];break;case"implicit":t=["access_token","token_type","id_token","state","session_state","expires_in","kc_action_status","iss"];break;case"hybrid":t=["access_token","token_type","id_token","code","state","session_state","expires_in","kc_action_status","iss"]}t.push("error"),t.push("error_description"),t.push("error_uri");var r,o,i=e.indexOf("?"),s=e.indexOf("#");"query"===n.responseMode&&-1!==i?(r=e.substring(0,i),""!==(o=S(e.substring(i+1,-1!==s?s:e.length),t)).paramsString&&(r+="?"+o.paramsString),-1!==s&&(r+=e.substring(s))):"fragment"===n.responseMode&&-1!==s&&(r=e.substring(0,s),""!==(o=S(e.substring(s+1),t)).paramsString&&(r+="#"+o.paramsString));if(o&&o.oauthParams)if("standard"===n.flow||"hybrid"===n.flow){if((o.oauthParams.code||o.oauthParams.error)&&o.oauthParams.state)return o.oauthParams.newUrl=r,o.oauthParams}else if("implicit"===n.flow&&(o.oauthParams.access_token||o.oauthParams.error)&&o.oauthParams.state)return o.oauthParams.newUrl=r,o.oauthParams}(e);if(t){var o=r.get(t.state);return o&&(t.valid=!0,t.redirectUri=o.redirectUri,t.storedNonce=o.nonce,t.prompt=o.prompt,t.pkceCodeVerifier=o.pkceCodeVerifier,t.loginOptions=o.loginOptions),t}}function S(e,t){for(var r=e.split("&"),n={paramsString:"",oauthParams:{}},o=0;o<r.length;o++){var i=r[o].indexOf("="),s=r[o].slice(0,i);-1!==t.indexOf(s)?n.oauthParams[s]=r[o].slice(i+1):(""!==n.paramsString&&(n.paramsString+="&"),n.paramsString+=r[o])}return n}function _(){var e={setSuccess:function(t){e.resolve(t)},setError:function(t){e.reject(t)}};return e.promise=new Promise(function(t,r){e.resolve=t,e.reject=r}),e}function U(){var e=_();if(!i.enable)return e.setSuccess(),e.promise;if(i.iframe)return e.setSuccess(),e.promise;var t=document.createElement("iframe");i.iframe=t,t.onload=function(){var t=n.endpoints.authorize();"/"===t.charAt(0)?i.iframeOrigin=window.location.origin?window.location.origin:window.location.protocol+"//"+window.location.hostname+(window.location.port?":"+window.location.port:""):i.iframeOrigin=t.substring(0,t.indexOf("/",8)),e.setSuccess()};var r=n.endpoints.checkSessionIframe();t.setAttribute("src",r),t.setAttribute("sandbox","allow-storage-access-by-user-activation allow-scripts allow-same-origin"),t.setAttribute("title","keycloak-session-iframe"),t.style.display="none",document.body.appendChild(t);return window.addEventListener("message",function(e){if(e.origin===i.iframeOrigin&&i.iframe.contentWindow===e.source&&("unchanged"==e.data||"changed"==e.data||"error"==e.data)){"unchanged"!=e.data&&n.clearToken();for(var t=i.callbackList.splice(0,i.callbackList.length),r=t.length-1;r>=0;--r){var o=t[r];"error"==e.data?o.setError():o.setSuccess("unchanged"==e.data)}}},!1),e.promise}function A(){i.enable&&n.token&&setTimeout(function(){E().then(function(e){e&&A()})},1e3*i.interval)}function E(){var e=_();if(i.iframe&&i.iframeOrigin){var t=n.clientId+" "+(n.sessionId?n.sessionId:"");i.callbackList.push(e);var r=i.iframeOrigin;1==i.callbackList.length&&i.iframe.contentWindow.postMessage(t,r)}else e.setSuccess();return e.promise}function T(){var e=_();if(i.enable||n.silentCheckSsoRedirectUri){var t=document.createElement("iframe");t.setAttribute("src",n.endpoints.thirdPartyCookiesIframe()),t.setAttribute("sandbox","allow-storage-access-by-user-activation allow-scripts allow-same-origin"),t.setAttribute("title","keycloak-3p-check-iframe"),t.style.display="none",document.body.appendChild(t);var r=function(o){t.contentWindow===o.source&&("supported"!==o.data&&"unsupported"!==o.data||("unsupported"===o.data&&(l("[KEYCLOAK] Your browser is blocking access to 3rd-party cookies, this means:\n\n - It is not possible to retrieve tokens without redirecting to the Keycloak server (a.k.a. no support for silent authentication).\n - It is not possible to automatically detect changes to the session status (such as the user logging out in another tab).\n\nFor more information see: https://www.keycloak.org/docs/latest/securing_apps/#_modern_browsers"),i.enable=!1,n.silentCheckSsoFallback&&(n.silentCheckSsoRedirectUri=!1)),document.body.removeChild(t),window.removeEventListener("message",r),e.setSuccess()))};window.addEventListener("message",r,!1)}else e.setSuccess();return function(e,t,r){var n=null,o=new Promise(function(e,o){n=setTimeout(function(){o({error:r})},t)});return Promise.race([e,o]).finally(function(){clearTimeout(n)})}(e.promise,n.messageReceiveTimeout,"Timeout when waiting for 3rd party check iframe message.")}function I(e){if(!e||"default"==e)return{login:function(e){return window.location.assign(n.createLoginUrl(e)),_().promise},logout:async function(e){if("GET"===(e?.logoutMethod??n.logoutMethod))return void window.location.replace(n.createLogoutUrl(e));const r=n.createLogoutUrl(e),o=await fetch(r,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({id_token_hint:n.idToken,client_id:n.clientId,post_logout_redirect_uri:t.redirectUri(e,!1)})});if(o.redirected)window.location.href=o.url;else{if(!o.ok)throw new Error("Logout failed, request returned an error code.");window.location.reload()}},register:function(e){return window.location.assign(n.createRegisterUrl(e)),_().promise},accountManagement:function(){var e=n.createAccountUrl();if(void 0===e)throw"Not supported by the OIDC server";return window.location.href=e,_().promise},redirectUri:function(e,t){return e&&e.redirectUri?e.redirectUri:n.redirectUri?n.redirectUri:location.href}};if("cordova"==e){i.enable=!1;var r=function(e,t,r){return window.cordova&&window.cordova.InAppBrowser?window.cordova.InAppBrowser.open(e,t,r):window.open(e,t,r)},o=function(e){var t=function(e){return e&&e.cordovaOptions?Object.keys(e.cordovaOptions).reduce(function(t,r){return t[r]=e.cordovaOptions[r],t},{}):{}}(e);return t.location="no",e&&"none"==e.prompt&&(t.hidden="yes"),function(e){return Object.keys(e).reduce(function(t,r){return t.push(r+"="+e[r]),t},[]).join(",")}(t)},s=function(){return n.redirectUri||"http://localhost"};return{login:function(e){var t=_(),i=o(e),a=r(n.createLoginUrl(e),"_blank",i),c=!1,u=!1,l=function(){u=!0,a.close()};return a.addEventListener("loadstart",function(e){0==e.url.indexOf(s())&&(m(b(e.url),t),l(),c=!0)}),a.addEventListener("loaderror",function(e){c||(0==e.url.indexOf(s())?(m(b(e.url),t),l(),c=!0):(t.setError(),l()))}),a.addEventListener("exit",function(e){u||t.setError({reason:"closed_by_user"})}),t.promise},logout:function(e){var t,o=_(),i=r(n.createLogoutUrl(e),"_blank","location=no,hidden=yes,clearcache=yes");return i.addEventListener("loadstart",function(e){0==e.url.indexOf(s())&&i.close()}),i.addEventListener("loaderror",function(e){0==e.url.indexOf(s())||(t=!0),i.close()}),i.addEventListener("exit",function(e){t?o.setError():(n.clearToken(),o.setSuccess())}),o.promise},register:function(e){var t=_(),i=r(n.createRegisterUrl(),"_blank",o(e));return i.addEventListener("loadstart",function(e){0==e.url.indexOf(s())&&(i.close(),m(b(e.url),t))}),t.promise},accountManagement:function(){var e=n.createAccountUrl();if(void 0===e)throw"Not supported by the OIDC server";var t=r(e,"_blank","location=no");t.addEventListener("loadstart",function(e){0==e.url.indexOf(s())&&t.close()})},redirectUri:function(e){return s()}}}if("cordova-native"==e)return i.enable=!1,{login:function(e){var t=_(),r=n.createLoginUrl(e);return universalLinks.subscribe("keycloak",function(e){universalLinks.unsubscribe("keycloak"),window.cordova.plugins.browsertab.close(),m(b(e.url),t)}),window.cordova.plugins.browsertab.openUrl(r),t.promise},logout:function(e){var t=_(),r=n.createLogoutUrl(e);return universalLinks.subscribe("keycloak",function(e){universalLinks.unsubscribe("keycloak"),window.cordova.plugins.browsertab.close(),n.clearToken(),t.setSuccess()}),window.cordova.plugins.browsertab.openUrl(r),t.promise},register:function(e){var t=_(),r=n.createRegisterUrl(e);return universalLinks.subscribe("keycloak",function(e){universalLinks.unsubscribe("keycloak"),window.cordova.plugins.browsertab.close(),m(b(e.url),t)}),window.cordova.plugins.browsertab.openUrl(r),t.promise},accountManagement:function(){var e=n.createAccountUrl();if(void 0===e)throw"Not supported by the OIDC server";window.cordova.plugins.browsertab.openUrl(e)},redirectUri:function(e){return e&&e.redirectUri?e.redirectUri:n.redirectUri?n.redirectUri:"http://localhost"}};throw"invalid adapter type: "+e}n.init=function(o){if(n.didInitialize)throw new Error("A 'Keycloak' instance can only be initialized once.");if(n.didInitialize=!0,n.authenticated=!1,r=function(){try{return new O}catch(e){}return new C}(),t=o&&["default","cordova","cordova-native"].indexOf(o.adapter)>-1?I(o.adapter):o&&"object"==typeof o.adapter?o.adapter:window.Cordova||window.cordova?I("cordova"):I(),o){if(void 0!==o.useNonce&&(c=o.useNonce),void 0!==o.checkLoginIframe&&(i.enable=o.checkLoginIframe),o.checkLoginIframeInterval&&(i.interval=o.checkLoginIframeInterval),"login-required"===o.onLoad&&(n.loginRequired=!0),o.responseMode){if("query"!==o.responseMode&&"fragment"!==o.responseMode)throw"Invalid value for responseMode";n.responseMode=o.responseMode}if(o.flow){switch(o.flow){case"standard":n.responseType="code";break;case"implicit":n.responseType="id_token token";break;case"hybrid":n.responseType="code id_token token";break;default:throw"Invalid value for flow"}n.flow=o.flow}if(null!=o.timeSkew&&(n.timeSkew=o.timeSkew),o.redirectUri&&(n.redirectUri=o.redirectUri),o.silentCheckSsoRedirectUri&&(n.silentCheckSsoRedirectUri=o.silentCheckSsoRedirectUri),"boolean"==typeof o.silentCheckSsoFallback?n.silentCheckSsoFallback=o.silentCheckSsoFallback:n.silentCheckSsoFallback=!0,void 0!==o.pkceMethod){if("S256"!==o.pkceMethod&&!1!==o.pkceMethod)throw new TypeError(`Invalid value for pkceMethod', expected 'S256' or false but got ${o.pkceMethod}.`);n.pkceMethod=o.pkceMethod}else n.pkceMethod="S256";"boolean"==typeof o.enableLogging?n.enableLogging=o.enableLogging:n.enableLogging=!1,"POST"===o.logoutMethod?n.logoutMethod="POST":n.logoutMethod="GET","string"==typeof o.scope&&(n.scope=o.scope),"string"==typeof o.acrValues&&(n.acrValues=o.acrValues),"number"==typeof o.messageReceiveTimeout&&o.messageReceiveTimeout>0?n.messageReceiveTimeout=o.messageReceiveTimeout:n.messageReceiveTimeout=1e4}n.responseMode||(n.responseMode="fragment"),n.responseType||(n.responseType="code",n.flow="standard");var s=_(),a=_();a.promise.then(function(){n.onReady&&n.onReady(n.authenticated),s.setSuccess(n.authenticated)}).catch(function(e){s.setError(e)});var u=function(){var t,r=_();e?"string"==typeof e&&(t=e):t="keycloak.json";function o(e){n.endpoints=e?{authorize:function(){return e.authorization_endpoint},token:function(){return e.token_endpoint},logout:function(){if(!e.end_session_endpoint)throw"Not supported by the OIDC server";return e.end_session_endpoint},checkSessionIframe:function(){if(!e.check_session_iframe)throw"Not supported by the OIDC server";return e.check_session_iframe},register:function(){throw'Redirection to "Register user" page not supported in standard OIDC mode'},userinfo:function(){if(!e.userinfo_endpoint)throw"Not supported by the OIDC server";return e.userinfo_endpoint}}:{authorize:function(){return f()+"/protocol/openid-connect/auth"},token:function(){return f()+"/protocol/openid-connect/token"},logout:function(){return f()+"/protocol/openid-connect/logout"},checkSessionIframe:function(){var e=f()+"/protocol/openid-connect/login-status-iframe.html";return n.iframeVersion&&(e=e+"?version="+n.iframeVersion),e},thirdPartyCookiesIframe:function(){var e=f()+"/protocol/openid-connect/3p-cookies/step1.html";return n.iframeVersion&&(e=e+"?version="+n.iframeVersion),e},register:function(){return f()+"/protocol/openid-connect/registrations"},userinfo:function(){return f()+"/protocol/openid-connect/userinfo"}}}if(t){(a=new XMLHttpRequest).open("GET",t,!0),a.setRequestHeader("Accept","application/json"),a.onreadystatechange=function(){if(4==a.readyState)if(200==a.status||g(a)){var e=JSON.parse(a.responseText);n.authServerUrl=e["auth-server-url"],n.realm=e.realm,n.clientId=e.resource,o(null),r.setSuccess()}else r.setError()},a.send()}else{if(!e.clientId)throw"clientId missing";n.clientId=e.clientId;var i=e.oidcProvider;if(i)if("string"==typeof i){var s,a;s="/"==i.charAt(i.length-1)?i+".well-known/openid-configuration":i+"/.well-known/openid-configuration",(a=new XMLHttpRequest).open("GET",s,!0),a.setRequestHeader("Accept","application/json"),a.onreadystatechange=function(){4==a.readyState&&(200==a.status||g(a)?(o(JSON.parse(a.responseText)),r.setSuccess()):r.setError())},a.send()}else o(i),r.setSuccess();else{if(!e.url)for(var c=document.getElementsByTagName("script"),u=0;u<c.length;u++)if(c[u].src.match(/.*keycloak\.js/)){e.url=c[u].src.substr(0,c[u].src.indexOf("/js/keycloak.js"));break}if(!e.realm)throw"realm missing";n.authServerUrl=e.url,n.realm=e.realm,o(null),r.setSuccess()}}return r.promise}();function l(){var e=function(e){e||(r.prompt="none"),o&&o.locale&&(r.locale=o.locale),n.login(r).then(function(){a.setSuccess()}).catch(function(e){a.setError(e)})},t=function(){var e=document.createElement("iframe"),t=n.createLoginUrl({prompt:"none",redirectUri:n.silentCheckSsoRedirectUri});e.setAttribute("src",t),e.setAttribute("sandbox","allow-storage-access-by-user-activation allow-scripts allow-same-origin"),e.setAttribute("title","keycloak-silent-check-sso"),e.style.display="none",document.body.appendChild(e);var r=function(t){t.origin===window.location.origin&&e.contentWindow===t.source&&(m(b(t.data),a),document.body.removeChild(e),window.removeEventListener("message",r))};window.addEventListener("message",r)},r={};switch(o.onLoad){case"check-sso":i.enable?U().then(function(){E().then(function(r){r?a.setSuccess():n.silentCheckSsoRedirectUri?t():e(!1)}).catch(function(e){a.setError(e)})}):n.silentCheckSsoRedirectUri?t():e(!1);break;case"login-required":e(!0);break;default:throw"Invalid value for onLoad"}}function d(){var e=b(window.location.href);if(e&&window.history.replaceState(window.history.state,null,e.newUrl),e&&e.valid)return U().then(function(){m(e,a)}).catch(function(e){a.setError(e)});o?o.token&&o.refreshToken?(v(o.token,o.refreshToken,o.idToken),i.enable?U().then(function(){E().then(function(e){e?(n.onAuthSuccess&&n.onAuthSuccess(),a.setSuccess(),A()):a.setSuccess()}).catch(function(e){a.setError(e)})}):n.updateToken(-1).then(function(){n.onAuthSuccess&&n.onAuthSuccess(),a.setSuccess()}).catch(function(e){n.onAuthError&&n.onAuthError(),o.onLoad?l():a.setError(e)})):o.onLoad?l():a.setSuccess():a.setSuccess()}return u.then(function(){(function(){var e=_(),t=function(){"interactive"!==document.readyState&&"complete"!==document.readyState||(document.removeEventListener("readystatechange",t),e.setSuccess())};return document.addEventListener("readystatechange",t),t(),e.promise})().then(T).then(d).catch(function(e){s.setError(e)})}),u.catch(function(e){s.setError(e)}),s.promise},n.login=function(e){return t.login(e)},n.createLoginUrl=function(e){var o,i=y(),s=y(),a=t.redirectUri(e),u={state:i,nonce:s,redirectUri:encodeURIComponent(a),loginOptions:e};e&&e.prompt&&(u.prompt=e.prompt),o=e&&"register"==e.action?n.endpoints.register():n.endpoints.authorize();var l=e&&e.scope||n.scope;l?-1===l.indexOf("openid")&&(l="openid "+l):l="openid";var f,p=o+"?client_id="+encodeURIComponent(n.clientId)+"&redirect_uri="+encodeURIComponent(a)+"&state="+encodeURIComponent(i)+"&response_mode="+encodeURIComponent(n.responseMode)+"&response_type="+encodeURIComponent(n.responseType)+"&scope="+encodeURIComponent(l);if(c&&(p=p+"&nonce="+encodeURIComponent(s)),e&&e.prompt&&(p+="&prompt="+encodeURIComponent(e.prompt)),e&&e.maxAge&&(p+="&max_age="+encodeURIComponent(e.maxAge)),e&&e.loginHint&&(p+="&login_hint="+encodeURIComponent(e.loginHint)),e&&e.idpHint&&(p+="&kc_idp_hint="+encodeURIComponent(e.idpHint)),e&&e.action&&"register"!=e.action&&(p+="&kc_action="+encodeURIComponent(e.action)),e&&e.locale&&(p+="&ui_locales="+encodeURIComponent(e.locale)),e&&e.acr){var m=(f=e.acr,JSON.stringify({id_token:{acr:f}}));p+="&claims="+encodeURIComponent(m)}if((e&&e.acrValues||n.acrValues)&&(p+="&acr_values="+encodeURIComponent(e.acrValues||n.acrValues)),n.pkceMethod){var g=d(96,"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789");u.pkceCodeVerifier=g,p+="&code_challenge="+h(n.pkceMethod,g),p+="&code_challenge_method="+n.pkceMethod}return r.add(u),p},n.logout=function(e){return t.logout(e)},n.createLogoutUrl=function(e){if("POST"===(e?.logoutMethod??n.logoutMethod))return n.endpoints.logout();var r=n.endpoints.logout()+"?client_id="+encodeURIComponent(n.clientId)+"&post_logout_redirect_uri="+encodeURIComponent(t.redirectUri(e,!1));return n.idToken&&(r+="&id_token_hint="+encodeURIComponent(n.idToken)),r},n.register=function(e){return t.register(e)},n.createRegisterUrl=function(e){return e||(e={}),e.action="register",n.createLoginUrl(e)},n.createAccountUrl=function(e){var r=f(),o=void 0;return void 0!==r&&(o=r+"/account?referrer="+encodeURIComponent(n.clientId)+"&referrer_uri="+encodeURIComponent(t.redirectUri(e))),o},n.accountManagement=function(){return t.accountManagement()},n.hasRealmRole=function(e){var t=n.realmAccess;return!!t&&t.roles.indexOf(e)>=0},n.hasResourceRole=function(e,t){if(!n.resourceAccess)return!1;var r=n.resourceAccess[t||n.clientId];return!!r&&r.roles.indexOf(e)>=0},n.loadUserProfile=function(){var e=f()+"/account",t=new XMLHttpRequest;t.open("GET",e,!0),t.setRequestHeader("Accept","application/json"),t.setRequestHeader("Authorization","bearer "+n.token);var r=_();return t.onreadystatechange=function(){4==t.readyState&&(200==t.status?(n.profile=JSON.parse(t.responseText),r.setSuccess(n.profile)):r.setError())},t.send(),r.promise},n.loadUserInfo=function(){var e=n.endpoints.userinfo(),t=new XMLHttpRequest;t.open("GET",e,!0),t.setRequestHeader("Accept","application/json"),t.setRequestHeader("Authorization","bearer "+n.token);var r=_();return t.onreadystatechange=function(){4==t.readyState&&(200==t.status?(n.userInfo=JSON.parse(t.responseText),r.setSuccess(n.userInfo)):r.setError())},t.send(),r.promise},n.isTokenExpired=function(e){if(!n.tokenParsed||!n.refreshToken&&"implicit"!=n.flow)throw"Not authenticated";if(null==n.timeSkew)return u("[KEYCLOAK] Unable to determine if token is expired as timeskew is not set"),!0;var t=n.tokenParsed.exp-Math.ceil((new Date).getTime()/1e3)+n.timeSkew;if(e){if(isNaN(e))throw"Invalid minValidity";t-=e}return t<0},n.updateToken=function(e){var t=_();if(!n.refreshToken)return t.setError(),t.promise;e=e||5;var r=function(){var r=!1;if(-1==e?(r=!0,u("[KEYCLOAK] Refreshing token: forced refresh")):n.tokenParsed&&!n.isTokenExpired(e)||(r=!0,u("[KEYCLOAK] Refreshing token: token expired")),r){var i="grant_type=refresh_token&refresh_token="+n.refreshToken,s=n.endpoints.token();if(o.push(t),1==o.length){var a=new XMLHttpRequest;a.open("POST",s,!0),a.setRequestHeader("Content-type","application/x-www-form-urlencoded"),a.withCredentials=!0,i+="&client_id="+encodeURIComponent(n.clientId);var c=(new Date).getTime();a.onreadystatechange=function(){if(4==a.readyState)if(200==a.status){u("[KEYCLOAK] Token refreshed"),c=(c+(new Date).getTime())/2;var e=JSON.parse(a.responseText);v(e.access_token,e.refresh_token,e.id_token,c),n.onAuthRefreshSuccess&&n.onAuthRefreshSuccess();for(var t=o.pop();null!=t;t=o.pop())t.setSuccess(!0)}else{l("[KEYCLOAK] Failed to refresh token"),400==a.status&&n.clearToken(),n.onAuthRefreshError&&n.onAuthRefreshError();for(t=o.pop();null!=t;t=o.pop())t.setError(!0)}},a.send(i)}}else t.setSuccess(!1)};return i.enable?E().then(function(){r()}).catch(function(e){t.setError(e)}):r(),t.promise},n.clearToken=function(){n.token&&(v(null,null,null),n.onAuthLogout&&n.onAuthLogout(),n.loginRequired&&n.login())};var O=function(){if(!(this instanceof O))return new O;localStorage.setItem("kc-test","test"),localStorage.removeItem("kc-test");function e(){for(var e=(new Date).getTime(),t=0;t<localStorage.length;t++){var r=localStorage.key(t);if(r&&0==r.indexOf("kc-callback-")){var n=localStorage.getItem(r);if(n)try{var o=JSON.parse(n).expires;(!o||o<e)&&localStorage.removeItem(r)}catch(i){localStorage.removeItem(r)}}}}this.get=function(t){if(t){var r="kc-callback-"+t,n=localStorage.getItem(r);return n&&(localStorage.removeItem(r),n=JSON.parse(n)),e(),n}},this.add=function(t){e();var r="kc-callback-"+t.state;t.expires=(new Date).getTime()+36e5,localStorage.setItem(r,JSON.stringify(t))}},C=function(){if(!(this instanceof C))return new C;var e=this;e.get=function(e){if(e){var o=r("kc-callback-"+e);return n("kc-callback-"+e,"",t(-100)),o?JSON.parse(o):void 0}},e.add=function(e){n("kc-callback-"+e.state,JSON.stringify(e),t(60))},e.removeItem=function(e){n(e,"",t(-100))};var t=function(e){var t=new Date;return t.setTime(t.getTime()+60*e*1e3),t},r=function(e){for(var t=e+"=",r=document.cookie.split(";"),n=0;n<r.length;n++){for(var o=r[n];" "==o.charAt(0);)o=o.substring(1);if(0==o.indexOf(t))return o.substring(t.length,o.length)}return""},n=function(e,t,r){var n=e+"="+t+"; expires="+r.toUTCString()+"; ";document.cookie=n}};function R(e){return function(){n.enableLogging&&e.apply(console,Array.prototype.slice.call(arguments))}}}var v="/login/callback",y="studio-chat:login-target";function b(e,t){return"string"==typeof e[t]?e[t]:void 0}var S=new class{client;dev=!1;devToken;profile;refreshPromise;refreshForced=!1;get origin(){return window.location.origin}get keycloak(){if(!this.client)throw new Error("[studio-chat] auth used before init()");return this.client}async init(e){if(e.dev)return this.dev=!0,this.devToken=e.devToken,this.devToken||console.warn("[studio-chat] settings.dev is set but devToken is missing"),!0;if(!e.keycloak)throw new Error("[studio-chat] settings.keycloak is missing");this.client=new w(e.keycloak);const t=window.location.pathname===v;return await this.keycloak.init({onLoad:"check-sso",flow:"standard",pkceMethod:"S256",scope:"profile email"})?(this.profile=this.loadProfile(),!t||this.restoreLoginTarget()):(sessionStorage.setItem(y,window.location.pathname+window.location.search),await this.keycloak.login({redirectUri:`${this.origin}${v}`}),!1)}async refreshToken(e=!1){if(this.dev)return this.devToken??"";if(!this.keycloak.authenticated)throw new Error("[studio-chat] not authenticated");if(this.refreshPromise){if(!e||this.refreshForced)return this.refreshPromise;try{await this.refreshPromise}catch{}return this.refreshToken(!0)}const t=this.keycloak.updateToken(e?-1:30).then(()=>{if(!this.keycloak.token)throw new Error("[studio-chat] Keycloak returned no access token");return this.keycloak.token});this.refreshPromise=t,this.refreshForced=e;try{return await t}finally{this.refreshPromise===t&&(this.refreshPromise=void 0,this.refreshForced=!1)}}getToken(e=!1){return this.refreshToken(e)}getProfile(){return this.profile}loadProfile(){const e=this.keycloak.tokenParsed;if("object"!=typeof(t=e)||null===t)return;var t;const r=b(e,"sub");return r?{id:r,prename:b(e,"given_name"),lastname:b(e,"family_name"),name:b(e,"name")??b(e,"preferred_username"),email:b(e,"email")}:void 0}restoreLoginTarget(){const e=(t=sessionStorage.getItem(y)??void 0)&&t!==v?"/"!==t[0]||"/"===t[1]||"\\"===t[1]?"/":t:"/";var t;return sessionStorage.removeItem(y),"/"!==e?(window.location.replace(e),!1):(window.history.replaceState({},document.title,"/"),!0)}logout(){this.dev?window.location.reload():this.keycloak.logout({redirectUri:this.origin})}},_={},U=function(e,t,r){let n=Promise.resolve();if(t&&t.length>0){const e=document.getElementsByTagName("link"),r=document.querySelector("meta[property=csp-nonce]"),i=r?.nonce||r?.getAttribute("nonce");o=t.map(t=>{var r;if(t=function(e){return"/"+e}(t),r=t,(t=import.meta.resolve?import.meta.resolve(r):new URL(r,import.meta.url).href)in _)return;_[t]=!0;const n=t.endsWith(".css");for(let i=e.length-1;i>=0;i--){const r=e[i];if(r.href===t&&(!n||"stylesheet"===r.rel))return}const o=document.createElement("link");return o.rel=n?"stylesheet":"modulepreload",n||(o.as="script"),o.crossOrigin="",o.href=t,i&&o.setAttribute("nonce",i),document.head.appendChild(o),n?new Promise((e,r)=>{o.addEventListener("load",e),o.addEventListener("error",()=>r(new Error(`Unable to preload CSS for ${t}`)))}):void 0}),n=Promise.all(o.map(e=>Promise.resolve(e).then(e=>({status:"fulfilled",value:e}),e=>({status:"rejected",reason:e}))))}var o;function i(e){const t=new Event("vite:preloadError",{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return n.then(t=>{for(const e of t||[])"rejected"===e.status&&i(e.reason);return e().catch(i)})};export{s as a,h as i,S as n,a as o,d as r,c as s,U as t};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/support-agent-DX9ndFJx.js","assets/preload-helper-OSX1TyOM.js","assets/loadFonts-BZPSkxb8.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{i as t,n as e,r as n,t as o}from"./preload-helper-OSX1TyOM.js";var a="#app";async function r(n){await o(()=>import("./support-agent-DX9ndFJx.js"),__vite__mapDeps([0,1,2]));const r=document.createElement("lilaquadrat-studio-support");r.config={...t(n),token:await e.getToken(),getToken:t=>e.getToken(t),user:e.getProfile(),close:()=>e.logout()},function(){const t=document.querySelector(a);if(!t)throw new Error(`mount target ${a} not found`);return t}().replaceChildren(r)}(async function(){const t=await n();t.title&&(document.title=t.title),await e.init(t)&&await r(t)})().catch(function(t){const e=t instanceof Error?t.message:String(t);console.error("[studio-chat] standalone support boot failed",t);const n=document.querySelector(a);if(!n)return;const o=document.createElement("div");o.className="standalone-error",o.innerHTML="<h1>Support console unavailable</h1>",o.appendChild(Object.assign(document.createElement("p"),{textContent:e})),n.replaceChildren(o)});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{s as t}from"./preload-helper-OSX1TyOM.js";import{$ as e,A as a,B as s,C as o,D as r,H as n,I as i,J as l,L as c,M as d,O as u,Q as p,R as m,U as v,V as f,W as g,X as h,Y as y,Z as b,_ as w,a as x,at as k,b as _,c as C,d as M,et as S,f as z,g as $,h as A,i as I,it as O,k as V,l as j,m as N,n as D,nt as L,o as R,p as q,r as E,rt as F,t as T,v as U,w as B,z as H}from"./loadFonts-BZPSkxb8.js";var J=t(V(),1),Q=t(u(),1),W=["aria-label"],X=j(g({__name:"support-status-filter.partial",setup(t){const e=N(),a=["all",...$];return(t,s)=>{const o=p("button-partial");return h(),f("nav",{class:"status-filters","aria-label":t.$t("supportStatus.filter")},[(h(),f(i,null,b(a,a=>v(o,{key:a,size:"sm",variant:F(e).statusFilter===a?"primary":"ghost",onClick:t=>{return s=a,void e.setStatusFilter(s);var s}},{default:S(()=>[n(k(t.$t(`supportStatus.${a}`)),1)]),_:2},1032,["variant","onClick"])),64))],8,W)}}}),[["styles",[".status-filters[data-v-d6a8b4d3]{border-bottom:1px solid var(--scm-color-highlight);flex-wrap:wrap;display:flex}"]],["__scopeId","data-v-d6a8b4d3"]]),Y=j(g({__name:"support-sla.partial",props:{sla:{type:[Object,null]},status:{type:null},statusVersion:{type:Number},now:{type:Number}},setup(t){const e=t,a=c(()=>{if("awaiting_agent"!==e.status||!e.sla||e.sla.stoppedAt||e.sla.status!==e.status||e.sla.statusVersion!==e.statusVersion)return;const t=new Date(e.sla.endAt).getTime();return Number.isNaN(t)?void 0:t-e.now}),o=c(()=>"number"==typeof a.value&&a.value<=0),r=c(()=>{if(void 0===a.value)return"";const t=Math.max(1,Math.ceil(Math.abs(a.value)/6e4)),e=Math.floor(t/1440),s=Math.floor(t%1440/60),o=t%60;return e?`${e}d ${s}h`:s?`${s}h ${o}m`:`${o}m`});return(t,e)=>void 0!==a.value?(h(),f("span",{key:0,class:O(["support-sla",{overdue:o.value}])},k(t.$t(o.value?"sla.overdue":"sla.due",{time:r.value})),3)):s("",!0)}}),[["styles",[".support-sla[data-v-bd4c02b8]{color:var(--scm-color-muted);font-size:.75em}.support-sla.overdue[data-v-bd4c02b8]{color:var(--scm-color-danger);font-weight:600}"]],["__scopeId","data-v-bd4c02b8"]]),Z={class:"conversations-module"},G=["onClick"],K={class:"row-heading"},P={class:"time"},tt={class:"message-unread-container"},et={key:0,class:"lastMessage"},at={key:2,class:"unread"},st={key:0,class:"load-more"};function ot(t,e){const a={...t,features:["support"]};delete a.getUsers,I(a,e)}var rt=[{name:"conversations",component:j(g({__name:"support-conversations.module",emits:["close"],setup(t){const a=N(),o=A(),r=U(),d=B(),{triggerEvent:u}=M(),g=L(Date.now());let x;l(()=>{x=setInterval(()=>{g.value=Date.now()},3e4)}),y(()=>{x&&clearInterval(x)}),e(()=>d.user,t=>{t&&a.load()},{immediate:!0});const z=c(()=>o.activeConversation),$=c(()=>a.conversations.map(t=>({id:t._id||t.id,customer:I(_(t.participants)),lastMessage:t.lastMessage?.message,lastActivity:t.lastActivity||t.lastMessage?.history?.created,unread:t.unread,unreadCount:t.unreadCount,muted:!0===t.participant?.muted,supportStatus:w(t.supportStatus),supportStatusVersion:t.supportStatusVersion,sla:t.sla,isActive:(z.value?._id||z.value?.id)===(t._id||t.id)})));function I(t){if(!t?.id)return;const e=r.name(t.id);return e&&e!==t.id?e:t.email||t.id}return(t,e)=>{const r=p("icons-partial"),l=p("button-partial"),c=p("notice-partial");return h(),f("section",Z,[v(X),(h(!0),f(i,null,b($.value,e=>(h(),f("article",{key:e.id,class:O(["single-conversation",{active:e.isActive,unread:e.unread,muted:e.muted}]),role:"button",onClick:t=>{return a=e.id,o.activateConversation(a),void u("close");var a}},[m("section",K,[m("h3",null,[e.customer?(h(),f(i,{key:0},[n(k(e.customer),1)],64)):(h(),f(i,{key:1},[n(k(t.$t("customer")),1)],64))]),v(C,{status:e.supportStatus},null,8,["status"]),v(Y,{sla:e.sla,status:e.supportStatus,"status-version":e.supportStatusVersion,now:g.value+F(a).serverTimeOffsetMilliseconds},null,8,["sla","status","status-version","now"])]),m("span",P,k(F(J.default)(e.lastActivity).fromNow()),1),m("section",tt,[e.lastMessage?(h(),f("p",et,k(e.lastMessage),1)):s("",!0),e.muted?(h(),H(r,{key:1,type:"muted",size:"small","aria-label":t.$t("muted")},null,8,["aria-label"])):s("",!0),e.unread?(h(),f("span",at,k(e.unreadCount),1)):s("",!0)])],10,G))),128)),F(a).hasMore?(h(),f("section",st,[v(l,{variant:"ghost",onClick:F(a).loadMore},{default:S(()=>[n(k(t.$t("load more")),1)]),_:1},8,["onClick"])])):s("",!0),F(a).loaded&&!$.value.length?(h(),H(c,{key:1,type:"notice",class:"empty-conversations"},{default:S(()=>[n(k(t.$t("no conversations yet")),1)]),_:1})):s("",!0)])}}}),[["styles",[".conversations-module[data-v-f7970e9c]{grid-auto-rows:max-content;display:grid}.conversations-module .single-conversation[data-v-f7970e9c]{cursor:pointer;grid-template-columns:1fr 1fr;gap:5px;padding:20px;display:grid}.conversations-module .single-conversation h3[data-v-f7970e9c]{letter-spacing:-.1px;color:var(--scm-color-primary);font-family:Open Sans;font-weight:600}.conversations-module .single-conversation .time[data-v-f7970e9c]{justify-self:end}.conversations-module .single-conversation .message-unread-container[data-v-f7970e9c]{grid-column:1/3;grid-template-columns:1fr max-content max-content;align-items:center;gap:5px;display:grid}.conversations-module .single-conversation .message-unread-container .lastMessage[data-v-f7970e9c]{white-space:nowrap;text-overflow:ellipsis;color:var(--scm-color-text);overflow:hidden}.conversations-module .single-conversation .message-unread-container .unread[data-v-f7970e9c]{border-radius:var(--scm-radius-lg);background-color:var(--scm-color-own);color:#fff;place-self:center end;padding:0 4px;font-size:.75em}.conversations-module .single-conversation[data-v-f7970e9c]:hover,.conversations-module .single-conversation.active[data-v-f7970e9c]{background-color:var(--scm-color-highlight)}.conversations-module .single-conversation.support[data-v-f7970e9c]{border-left:3px solid var(--scm-color-primary);font-weight:600}.conversations-module .single-conversation.muted .icon-partial[data-v-f7970e9c],.conversations-module .single-conversation.muted .unread[data-v-f7970e9c]{opacity:.5}.conversations-module .row-heading[data-v-f7970e9c]{gap:4px;min-width:0;display:grid}.conversations-module .load-more[data-v-f7970e9c]{justify-items:center;padding:10px 20px;display:grid}"]],["__scopeId","data-v-f7970e9c"]])}],nt=[{name:"support-left-target",component:j(g({__name:"support-left-target.partial",setup(t){const e=o(),a=c(()=>"conversations"===e.content.left||"mobile"!==e.viewMode&&!e.content.left);function r(){e.unsetContent("left")}return(t,o)=>{const n=p("conversations-module");return a.value?(h(),f("section",{key:0,class:O(["main-left-target",[F(e).viewMode,F(e).state]])},[v(n,{onClose:r})],2)):s("",!0)}}}),[["styles",[".main-left-target[data-v-4629b612]{background-color:var(--scm-color-surface);z-index:100;width:100%;height:calc(100% - 35px);position:absolute;top:35px;left:0;overflow:hidden}.main-left-target.desktop[data-v-4629b612],.main-left-target.tablet[data-v-4629b612]{top:unset;height:unset;position:relative}.main-left-target.disconnected[data-v-4629b612]{height:calc(100% - 55px);top:55px}"]],["__scopeId","data-v-4629b612"]])}];var it={class:"header"},lt={class:"main-target"},ct=j(g({__name:"SupportApp",props:{config:{type:Object}},setup(t){const e=t,a=o(),r=A(),n=N();q();const{viewMode:i}=D({config:()=>e.config,applyConfig:ot,onSessionRestored:()=>{n.reload().catch(()=>{})},onStarted:async()=>{await n.load(),r.readLastActiveConversation(),n.activateLastOrLatest(),a.setContent("conversations","left")}});function l(){a.unsetContent("left")}function c(){a.unsetContent("right")}return(t,e)=>{const o=p("actions-partial"),r=p("connection-status-partial"),n=p("support-left-target-partial"),d=p("chats-module"),u=p("main-right-target-partial"),g=p("error-notice-partial");return h(),f("div",{class:O(["studio-chat-root",[F(i),F(a).state]])},[m("section",it,[v(o,{onClose:c}),"disconnected"===F(a).state?(h(),H(r,{key:0})):s("",!0)]),v(n),m("section",lt,["chat"===F(a).content.main?(h(),H(d,{key:0,onClose:l})):s("",!0)]),v(u),v(g),e[0]||(e[0]=m("div",{class:"util"},null,-1))],2)}}}),[["styles",[".studio-chat-root[data-v-92390e6d]{--scm-font-size:16px;--scm-color-primary:#3f2d56;--scm-color-own:#533474;--scm-color-surface:#f9f9f9;--scm-color-subtle:#fcfcfc;--scm-color-shadow:#ccc;--scm-color-muted:#757474;--scm-color-danger:#ea624f;--scm-color-text:#555;--scm-color-highlight:hsl(from var(--scm-color-primary) h s 92%);--scm-radius:5px;--scm-radius-lg:8px;font-family:Open Sans,sans-serif;font-size:var(--scm-font-size)}#app[data-v-92390e6d]{height:100vh}.studio-chat-root[data-v-92390e6d]{grid-template-rows:35px 1fr;grid-template-columns:1fr;height:100%;display:grid}.studio-chat-root .header[data-v-92390e6d]{background-color:var(--scm-color-surface);grid-template-columns:max-content 1fr;align-content:center;display:grid}.studio-chat-root.disconnected[data-v-92390e6d]{grid-template-rows:55px 1fr}.studio-chat-root.disconnected .header[data-v-92390e6d]{grid-template-rows:35px 20px}.studio-chat-root.disconnected .header .connection-status[data-v-92390e6d]{grid-column:1/3}.studio-chat-root .conversations-module[data-v-92390e6d]{grid-column:1}.studio-chat-root .main-target[data-v-92390e6d]{height:100%;overflow:hidden}.studio-chat-root.desktop[data-v-92390e6d],.studio-chat-root.tablet[data-v-92390e6d]{grid-template-columns:350px 1fr}.studio-chat-root.desktop .header[data-v-92390e6d],.studio-chat-root.tablet .header[data-v-92390e6d]{grid-column:1/3}.studio-chat-root .chats-module[data-v-92390e6d]{grid-column:1}","*,:before,:after{box-sizing:border-box;background-repeat:no-repeat;margin:0;padding:0}*{min-width:0}img,picture,video,canvas,svg{max-width:100%;display:block}input,button,textarea,select{font:inherit;color:inherit}a{color:inherit;text-decoration:none}ul,ol{list-style:none}p,h1,h2,h3,h4,h5,h6{overflow-wrap:break-word}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}:host{--scm-font-size:16px;--scm-color-primary:#3f2d56;--scm-color-own:#533474;--scm-color-surface:#f9f9f9;--scm-color-subtle:#fcfcfc;--scm-color-shadow:#ccc;--scm-color-muted:#757474;--scm-color-danger:#ea624f;--scm-color-text:#555;--scm-color-highlight:hsl(from var(--scm-color-primary) h s 92%);--scm-radius:5px;--scm-radius-lg:8px;height:100%;font-family:Open Sans,sans-serif;font-size:var(--scm-font-size);display:block}"]],["__scopeId","data-v-92390e6d"]]);J.default.extend(Q.default),T();var dt=d(ct,{shadowRoot:!0,configureApp(t){const e=a();t.use(E,{selector:"lilaquadrat-studio-support"}),t.use(e),o(e).appRole="agent",t.use(r),function(t){z([...x,...rt],void 0,"module",t),z([...R,...nt],void 0,"partial",t)}(t)}});customElements.get("lilaquadrat-studio-support")||customElements.define("lilaquadrat-studio-support",dt);export{dt as LilaquadratStudioSupport};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{s as e}from"./preload-helper-OSX1TyOM.js";import{$ as a,A as t,B as o,C as n,D as s,E as r,F as i,G as l,H as c,I as d,J as u,K as p,L as v,M as m,N as g,O as f,P as h,Q as b,R as y,S as w,T as x,U as k,V as C,W as _,X as $,Z as M,a as z,at as S,d as O,et as j,f as B,h as V,i as A,it as E,j as L,k as N,l as U,n as I,nt as P,o as R,p as D,q as K,r as F,rt as q,s as T,t as G,tt as H,u as J,v as Q,w as W,x as X,y as Z,z as Y}from"./loadFonts-BZPSkxb8.js";var ee=e(N(),1),ae=e(f(),1),te=L("contacts",()=>{const e=W(),a=P([]);return{contacts:v(()=>a.value.filter(a=>a.id!==e.user)),users:a,loadUsers:async function(e){const t=await new x("chat",await Z()).contacts.list(e);return a.value=t.data,Q().ingest(t.data),a.value}}}),oe={class:"contacts-module"},ne={class:"scroll-container"},se={key:0,class:"members-view"},re=["placeholder"],ie=["onClick","onKeydown"],le={key:0,class:"selected-indicator"},ce={key:2,class:"members-view"},de=["placeholder"],ue={key:1,class:"controls"},pe=U(_({__name:"contacts.module",props:{startMode:{type:String},autosave:{type:Boolean}},emits:["close"],setup(e){const t=n(),s=te(),i=V(),l=Q(),{triggerEvent:u}=O(),p=e,m=v(()=>p.startMode??"members"),f=["read","write","rename","participants","block"],h=["read","write"],x=P([]),_=P({}),z=P({}),B=v(()=>i.activeConversation),A=v(()=>Object.keys(_.value).length>0||Object.keys(z.value).length>0),L=v(()=>J(B.value,"participants")),N=v(()=>"rights"===m.value&&L.value),U=v(()=>x.value.map(e=>({id:e}))),I=P("");function R(e,a){const t=(e.prename??"").toLowerCase(),o=(e.lastname??"").toLowerCase(),n=[e.id.toLowerCase(),t,o,(e.name??"").toLowerCase(),[t,o].filter(Boolean).join(" "),[o,t].filter(Boolean).join(" ")].filter(Boolean),s=a.split(/\s+/).filter(Boolean);return!s.length||s.every(e=>n.some(a=>a.includes(e)))}const D=v(()=>{const e=I.value.trim().toLowerCase();return e?U.value.filter(a=>R(l.get(a.id)??{id:a.id},e)):U.value}),F=P(""),q=v(()=>{const e=B.value,a=r(s.contacts),t=F.value.trim().toLowerCase();return a.map(a=>({id:a.id,name:a.name,prename:a.prename,lastname:a.lastname,inConversation:!!e&&x.value.includes(a.id)})).filter(e=>!t||R(e,t))}),T=v(()=>{const e=B.value,a=r(e?.participantDocs||[]),t=new Map(a.map(e=>[e.user,e]));return x.value.map(e=>t.get(e)??{user:e,rights:h,state:"active"})});function G(e,a){const t=a.trim().toLowerCase();return e.filter(e=>!t||R(l.get(e.user)??{id:e.user},t)).sort((e,a)=>{const t=l.get(e.user),o=l.get(a.user);return(t?.lastname??"").localeCompare(o?.lastname??"")||(t?.prename??"").localeCompare(o?.prename??"")||(t?.name??"").localeCompare(o?.name??"")||e.user.localeCompare(a.user)})}function W(){const e=B.value;x.value=e?w(e.participants):[]}function X(){_.value={},z.value={}}function Z(){const e=B.value?._id;return e?i.loadParticipants(e):Promise.resolve()}const ee=v(()=>"mobile"!==t.viewMode&&!!B.value?.isNew);let ae=Promise.resolve();function pe(e){const a=x.value.indexOf(e.id);-1===a?x.value.push(e.id):x.value.splice(a,1),ee.value&&(ae=ae.then(()=>ye()).catch(e=>{console.warn("[studio-chat] autosave failed",e),W(),X()}))}async function ve(){await ye(),be()}function me(e,a){return(_.value[e.user]??e.rights??[]).includes(a)}function ge(e,a){const t=new Set(_.value[e.user]??e.rights??[]);t.has(a)?t.delete(a):t.add(a),_.value={..._.value,[e.user]:[...t]}}function fe(e){return z.value[e.user]??"blocked"===e.state}function he(e){z.value={...z.value,[e.user]:!fe(e)}}function be(){u("close")}async function ye(){const e=B.value;if(!e)return;const a=w(e.participants),t=a.filter(e=>!x.value.includes(e)),o=x.value.filter(e=>!a.includes(e));if(e.isNew)t.forEach(a=>i.removeParticipant(e.id,a)),o.forEach(a=>i.addParticipant(e.id,a));else{(o.length||t.length)&&(await i.executeParticipantsEdit(e._id,o,t),o.forEach(a=>i.addParticipant(e._id,a)),t.forEach(a=>i.removeParticipant(e._id,a)));for(const[a,t]of Object.entries(_.value))await i.setRights(e._id,a,t);for(const[a,t]of Object.entries(z.value))await i.blockUser(e._id,a,t);await Z()}X(),u("close")}return K(()=>{W(),l.ensure(x.value),"contacts"!==m.value?N.value&&Z():s.loadUsers()}),a(()=>B.value?._id,()=>{W(),X(),N.value&&Z()}),a(()=>B.value?.participants,e=>{A.value||"contacts"===m.value||(x.value=w(e??[]))}),(a,t)=>{const n=b("user-avatar-partial"),s=b("rights-editor-partial"),r=b("button-partial");return $(),C("article",oe,[y("header",null,[y("h4",null,S(a.$t("participants")),1)]),y("section",ne,["contacts"===m.value?($(),C("section",se,[H(y("input",{"onUpdate:modelValue":t[0]||(t[0]=e=>F.value=e),class:"member-filter",type:"search",placeholder:a.$t("filter contacts")},null,8,re),[[g,F.value]]),y("ul",null,[($(!0),C(d,null,M(q.value,e=>($(),C("li",{key:e.id,class:E(["single-contact",{selected:e.inConversation}]),role:"button",tabindex:"0",onClick:a=>pe(e),onKeydown:a=>function(e,a){"Enter"!==e.key&&" "!==e.key||(e.preventDefault(),pe(a))}(a,e)},[k(n,{"user-id":e.id},null,8,["user-id"]),e.inConversation?($(),C("span",le,"✓")):o("",!0)],42,ie))),128))])])):N.value?($(),Y(s,{key:1,docs:T.value,rights:f,"has-right":me,"is-blocked":fe,"filter-docs":G,onToggleRight:ge,onToggleBlock:he},null,8,["docs"])):($(),C("section",ce,[H(y("input",{"onUpdate:modelValue":t[1]||(t[1]=e=>I.value=e),class:"member-filter",type:"search",placeholder:a.$t("filter members")},null,8,de),[[g,I.value]]),y("ul",null,[($(!0),C(d,null,M(D.value,e=>($(),C("li",{key:e.id,class:"single-contact"},[k(n,{"user-id":e.id},null,8,["user-id"])]))),128))])]))]),"contacts"!==m.value||ee.value?N.value?($(),C("section",ue,[k(r,{variant:"secondary","aria-label":a.$t("abandon"),onClick:be},{default:j(()=>[c(S(a.$t("abandon")),1)]),_:1},8,["aria-label"]),k(r,{variant:"primary",onClick:ye},{default:j(()=>[c(S(a.$t("save edits")),1)]),_:1})])):o("",!0):($(),C("section",{key:0,class:E(["controls",{single:e.autosave}])},[e.autosave?o("",!0):($(),Y(r,{key:0,variant:"secondary","aria-label":a.$t("abandon"),onClick:be},{default:j(()=>[c(S(a.$t("abandon")),1)]),_:1},8,["aria-label"])),k(r,{variant:"primary",onClick:ve},{default:j(()=>[c(S(e.autosave?a.$t("close"):a.$t("update members")),1)]),_:1})],2))])}}}),[["styles",[".contacts-module[data-v-a851b9fb]{grid-template-rows:max-content 1fr max-content;height:100%;display:grid;overflow:hidden}.contacts-module header[data-v-a851b9fb]{justify-content:space-between;align-items:center;gap:10px;padding:10px 20px;display:flex}.contacts-module .scroll-container[data-v-a851b9fb]{overflow-y:scroll}.contacts-module .scroll-container .member-filter[data-v-a851b9fb]{border:1px solid var(--scm-color-subtle);border-radius:var(--scm-radius);background-color:var(--scm-color-surface);width:calc(100% - 40px);color:inherit;font:inherit;margin:10px 20px;padding:8px 12px;display:block}.contacts-module .scroll-container .member-filter[data-v-a851b9fb]:focus-visible{outline:2px solid var(--scm-color-primary);outline-offset:1px}.contacts-module .scroll-container .single-contact[data-v-a851b9fb]{cursor:pointer;justify-content:space-between;align-items:center;padding:20px;display:flex}.contacts-module .scroll-container .single-contact[data-v-a851b9fb]:hover,.contacts-module .scroll-container .single-contact.selected[data-v-a851b9fb]{background-color:color-mix(in srgb, var(--scm-color-primary) 15%, transparent)}.contacts-module .scroll-container .single-contact .selected-indicator[data-v-a851b9fb]{color:var(--scm-color-primary);font-weight:700}.contacts-module .controls[data-v-a851b9fb]{grid-template-columns:1fr 1fr;gap:5px;padding:20px;display:grid}.contacts-module .controls.single[data-v-a851b9fb]{grid-template-columns:1fr}"]],["__scopeId","data-v-a851b9fb"]]),ve={class:"conversations-module"},me=["onClick"],ge={class:"time"},fe={class:"message-unread-container"},he={key:0,class:"lastMessage"},be={key:2,class:"unread"},ye={key:0,class:"draft"},we={key:0,class:"empty-conversations"},xe=U(_({__name:"conversations.module",emits:["close"],setup(e){const t=V(),s=W(),i=n(),{triggerEvent:l}=O();a(()=>s.user,e=>{e&&(t.cleanConversations(),t.getAllConversations())},{immediate:!0});const u=v(()=>r(t.conversations).sort((e,a)=>(0,ee.default)(a.lastMessage?.history.created).valueOf()-(0,ee.default)(e.lastMessage?.history.created).valueOf()).map(e=>({...e,isActive:p.value?._id===e._id&&e._id||p.value?.id===e.id&&e.id}))),p=v(()=>t.activeConversation);function m(e){t.activateConversation(e),l("close")}function g(){const e=t.createConversation();e&&("mobile"!==i.viewMode&&i.setContent("contacts-new","left"),l("close"),t.activateConversation(e))}let f=!1;return a(u,e=>{if(f||!e.length||p.value)return;let a;t.lastActiveConversation&&(a=e.find(e=>e._id===t.lastActiveConversation));const o=a||e.find(e=>!e.isNew);o&&(f=!0,m(o._id||o.id))}),(e,a)=>{const n=b("participants-partial"),s=b("icons-partial"),r=b("button-partial");return $(),C("section",ve,[($(!0),C(d,null,M(u.value,a=>($(),C("article",{key:a._id,class:E(["single-conversation",{active:a.isActive,unread:a.unread,support:"support"===a.operationMode,muted:a.participant?.muted}]),role:"button",onClick:e=>m(a._id||a.id)},[y("h3",null,["support"===a.operationMode?($(),C(d,{key:0},[c(S(e.$t("support")),1)],64)):a.name?($(),C(d,{key:1},[c(S(a.name),1)],64)):($(),Y(n,{key:2,participants:a.participants,inline:"","remove-user":""},null,8,["participants"]))]),y("span",ge,S(q(ee.default)(a.lastMessage?.history.created).fromNow()),1),y("section",fe,[a.lastMessage?($(),C("p",he,S(a.lastMessage.message),1)):o("",!0),a.participant?.muted?($(),Y(s,{key:1,type:"muted",size:"small","aria-label":e.$t("muted")},null,8,["aria-label"])):o("",!0),a.unread?($(),C("span",be,S(a.unreadCount),1)):o("",!0)]),a.isNew?($(),C("span",ye,"draft")):o("",!0)],10,me))),128)),q(t).conversationsLoaded&&!u.value.length?($(),C("section",we,[y("p",null,S(e.$t("no conversations yet")),1),k(r,{variant:"ghost",icon:"add",onClick:g},{default:j(()=>[c(S(e.$t("new chat")),1)]),_:1})])):o("",!0)])}}}),[["styles",[".conversations-module[data-v-c3e322ad]{grid-auto-rows:max-content;display:grid}.conversations-module .single-conversation[data-v-c3e322ad]{cursor:pointer;grid-template-columns:1fr 1fr;gap:5px;padding:20px;display:grid}.conversations-module .single-conversation h3[data-v-c3e322ad]{letter-spacing:-.1px;color:var(--scm-color-primary);font-family:Open Sans;font-weight:600}.conversations-module .single-conversation .time[data-v-c3e322ad]{justify-self:end}.conversations-module .single-conversation .message-unread-container[data-v-c3e322ad]{grid-column:1/3;grid-template-columns:1fr max-content max-content;align-items:center;gap:5px;display:grid}.conversations-module .single-conversation .message-unread-container .lastMessage[data-v-c3e322ad]{white-space:nowrap;text-overflow:ellipsis;color:var(--scm-color-text);overflow:hidden}.conversations-module .single-conversation .message-unread-container .unread[data-v-c3e322ad]{border-radius:var(--scm-radius-lg);background-color:var(--scm-color-own);color:#fff;place-self:center end;padding:0 4px;font-size:.75em}.conversations-module .single-conversation[data-v-c3e322ad]:hover,.conversations-module .single-conversation.active[data-v-c3e322ad]{background-color:var(--scm-color-highlight)}.conversations-module .single-conversation.support[data-v-c3e322ad]{border-left:3px solid var(--scm-color-primary);font-weight:600}.conversations-module .single-conversation.muted .icon-partial[data-v-c3e322ad],.conversations-module .single-conversation.muted .unread[data-v-c3e322ad]{opacity:.5}.conversations-module .empty-conversations[data-v-c3e322ad]{text-align:center;justify-items:center;gap:10px;padding:40px 20px;display:grid}.conversations-module .empty-conversations p[data-v-c3e322ad]{color:var(--scm-color-muted)}"]],["__scopeId","data-v-c3e322ad"]]),ke={key:1,class:"name-edit-module"},Ce={key:0,class:"form-container"},_e={key:1,class:"denied"},$e=U(_({__name:"name-edit.module",props:{conversation:{type:String},variant:{type:String}},emits:["close"],setup(e){const t=V(),{triggerEvent:n}=O(),s=e,r=v(()=>{if(s.conversation)return s.conversation;const e=t.activeConversation;return e?._id??e?.id}),i=v(()=>J(r.value?t.getConversation(r.value):void 0,"rename")),l=P(""),c=P(null),d=P(!1);function u(){n("close")}async function p(){const e=r.value;if(e&&l.value.length&&i.value){d.value=!0,c.value=null;try{await t.rename(e,l.value),u()}catch(a){const e=a?.response?.data?.message||"Unknown error";console.error("Error renaming conversation:",e),c.value=e}finally{d.value=!1}}}return a(r,()=>{c.value=null,l.value=r.value&&t.getConversation(r.value)?.name||""},{immediate:!0}),(a,t)=>{const n=b("name-edit-partial");return"inline"===e.variant&&i.value?($(),Y(n,{key:0,modelValue:l.value,"onUpdate:modelValue":t[0]||(t[0]=e=>l.value=e),error:c.value,saving:d.value,onSave:p,onCancel:u},null,8,["modelValue","error","saving"])):"inline"!==e.variant?($(),C("article",ke,[y("header",null,[y("h4",null,S(a.$t("rename")),1)]),i.value?($(),C("section",Ce,[k(n,{modelValue:l.value,"onUpdate:modelValue":t[1]||(t[1]=e=>l.value=e),error:c.value,saving:d.value,onSave:p,onCancel:u},null,8,["modelValue","error","saving"])])):($(),C("section",_e,S(a.$t("you left this conversation")),1))])):o("",!0)}}}),[["styles",[".name-edit-module[data-v-d3bbe054]{grid-template-rows:max-content 1fr;height:100%;display:grid;overflow:hidden}.name-edit-module header[data-v-d3bbe054]{justify-content:space-between;align-items:center;gap:10px;padding:10px 20px;display:flex}.name-edit-module header h4[data-v-d3bbe054]{letter-spacing:-.1px;font-family:Open Sans;font-size:.875em;font-weight:400}.name-edit-module .form-container[data-v-d3bbe054]{padding:10px 20px}.name-edit-module .denied[data-v-d3bbe054]{color:var(--scm-color-muted);padding:10px 20px;font-size:.75em}"]],["__scopeId","data-v-d3bbe054"]]),Me={key:0,class:"participants-partial__count"},ze=U(_({__name:"participants.partial",props:{participants:{type:Array},removeUser:{type:Boolean},isNew:{type:Boolean},inline:{type:Boolean},showNumbers:{type:Boolean},showOverview:{type:Boolean}},setup(e){const a=W(),t=e,n=v(()=>t.removeUser?t.participants.filter(e=>X(e)!==a.user):t.participants),s=v(()=>n.value.length),r=v(()=>t.isNew&&!s.value);return(a,t)=>{const i=b("user-avatar-partial");return $(),C("section",{class:E(["participants-partial",{"participants-partial--inline":e.inline}])},[r.value?o("",!0):($(),C(d,{key:0},[e.showOverview?($(),C(d,{key:0},[c(S(a.$t("member count",{count:s.value})),1)],64)):($(),C(d,{key:1},[e.showNumbers?($(),C("span",Me,S(s.value),1)):o("",!0),($(!0),C(d,null,M(n.value,(a,t)=>($(),C(d,{key:q(X)(a)},[e.inline?($(),Y(T,{key:0,"user-id":q(X)(a)},null,8,["user-id"])):($(),Y(i,{key:1,"user-id":q(X)(a)},null,8,["user-id"])),t<n.value.length-1?($(),C(d,{key:2},[c(S(", "))],64)):o("",!0)],64))),128))],64))],64))],2)}}}),[["styles",[".participants-partial__count[data-v-8352829f]{letter-spacing:-.1px;margin-right:6px;font-family:Open Sans;font-weight:600}.participants-partial--inline[data-v-8352829f]{font-size:inherit;white-space:nowrap;text-overflow:ellipsis;min-width:0;display:block;overflow:hidden}"]],["__scopeId","data-v-8352829f"]]),Se=["value","placeholder","aria-label"],Oe={key:0,class:"error",role:"alert"},je={class:"controls"},Be=_({__name:"name-edit.partial",props:{modelValue:{type:String},error:{type:[String,null]},saving:{type:Boolean}},emits:["update:modelValue","save","cancel"],setup(e,{emit:a}){const t=a,n=P();return u(async()=>{await p(),n.value?.focus()}),(a,s)=>{const r=b("button-partial");return $(),C("form",{class:"name-edit",onSubmit:s[3]||(s[3]=i(e=>t("save"),["prevent"]))},[y("input",{ref_key:"inputRef",ref:n,class:"name-input",type:"text",value:e.modelValue,placeholder:a.$t("conversation name"),"aria-label":a.$t("conversation name"),onInput:s[0]||(s[0]=e=>t("update:modelValue",e.target.value)),onKeydown:s[1]||(s[1]=h(e=>t("cancel"),["esc"]))},null,40,Se),e.error?($(),C("p",Oe,S(e.error),1)):o("",!0),y("section",je,[k(r,{variant:"secondary",size:"sm","aria-label":a.$t("abandon"),onClick:s[2]||(s[2]=e=>t("cancel"))},{default:j(()=>[c(S(a.$t("abandon")),1)]),_:1},8,["aria-label"]),k(r,{variant:"primary",size:"sm",type:"submit",disabled:!e.modelValue.length,loading:e.saving},{default:j(()=>[c(S(a.$t("save")),1)]),_:1},8,["disabled","loading"])])],32)}}}),Ve={class:"rights-panel"},Ae=["placeholder"],Ee=["aria-expanded","onClick","onKeydown"],Le={key:0,class:"rights"},Ne={key:1,class:"actions-container"},Ue=[{name:"conversations",component:xe},{name:"contacts",component:pe},{name:"name-edit",component:$e}],Ie=[{name:"participants",component:ze},{name:"name-edit",component:U(Be,[["styles",[".name-edit[data-v-898b5575]{gap:10px;display:grid}.name-edit .name-input[data-v-898b5575]{border:1px solid var(--scm-color-subtle);border-radius:var(--scm-radius);background-color:var(--scm-color-surface);width:100%;color:inherit;font:inherit;padding:8px 12px}.name-edit .name-input[data-v-898b5575]:focus-visible{outline:2px solid var(--scm-color-primary);outline-offset:1px}.name-edit .error[data-v-898b5575]{color:var(--scm-color-danger);margin:0;font-size:.75em}.name-edit .controls[data-v-898b5575]{justify-content:flex-end;gap:5px;display:flex}"]],["__scopeId","data-v-898b5575"]])},{name:"rights-editor",component:U(_({__name:"rights-editor.partial",props:{docs:{type:Array},rights:{type:Array},hasRight:{type:Function},isBlocked:{type:Function},filterDocs:{type:Function}},emits:["toggle-right","toggle-block"],setup(e,{emit:a}){const t=e,n=a,s=P(""),r=v(()=>t.filterDocs(t.docs,s.value)),i=P({});function l(e){return!!i.value[e.user]}function u(e){i.value={...i.value,[e.user]:!l(e)}}return(e,a)=>{const i=b("user-avatar-partial"),p=b("icons-partial"),v=b("checkbox-partial"),m=b("button-partial");return $(),C("section",Ve,[H(y("input",{"onUpdate:modelValue":a[0]||(a[0]=e=>s.value=e),class:"member-filter",type:"search",placeholder:e.$t("filter members")},null,8,Ae),[[g,s.value]]),y("ul",null,[($(!0),C(d,null,M(r.value,a=>($(),C("li",{key:a.user,class:E(["participant-rights",{expanded:l(a)}])},[y("section",{class:"who",role:"button",tabindex:"0","aria-expanded":l(a),onClick:e=>u(a),onKeydown:e=>function(e,a){"Enter"!==e.key&&" "!==e.key||(e.preventDefault(),u(a))}(e,a)},[k(i,{"user-id":a.user},null,8,["user-id"]),c(" ("+S(a.state)+") ",1),k(p,{class:"expand-indicator",type:"chevron-down",rotate:l(a)?180:0},null,8,["rotate"])],40,Ee),l(a)?($(),C("section",Le,[($(!0),C(d,null,M(t.rights,o=>($(),Y(v,{key:o,class:"right-toggle","model-value":t.hasRight(a,o),label:e.$t(o),onChange:e=>n("toggle-right",a,o)},null,8,["model-value","label","onChange"]))),128))])):o("",!0),l(a)?($(),C("section",Ne,[k(m,{variant:t.isBlocked(a)?"secondary":"danger",onClick:e=>n("toggle-block",a)},{default:j(()=>[c(S(t.isBlocked(a)?e.$t("unblock"):e.$t("block")),1)]),_:2},1032,["variant","onClick"])])):o("",!0)],2))),128))])])}}}),[["styles",[".rights-panel .member-filter[data-v-a897e833]{border:1px solid var(--scm-color-subtle);border-radius:var(--scm-radius);background-color:var(--scm-color-surface);width:calc(100% - 40px);color:inherit;font:inherit;margin:10px 20px;padding:8px 12px;display:block}.rights-panel .member-filter[data-v-a897e833]:focus-visible{outline:2px solid var(--scm-color-primary);outline-offset:1px}.rights-panel .participant-rights[data-v-a897e833]{gap:30px;padding:20px;display:grid}.rights-panel .participant-rights .who[data-v-a897e833]{cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:10px;display:flex}.rights-panel .participant-rights .who .expand-indicator[data-v-a897e833]{margin-left:auto}.rights-panel .participant-rights .rights[data-v-a897e833]{gap:10px;display:grid}.rights-panel .participant-rights .rights .right-toggle[data-v-a897e833]{--scm-checkbox-font-size:.75em}"]],["__scopeId","data-v-a897e833"]])},{name:"main-left-target",component:U(_({__name:"main-left-target.partial",setup(e){const a=n(),t=V(),s=v(()=>"conversations"===a.content.left||!t.activeConversation?.isNew&&("mobile"!==a.viewMode&&!a.content.left)),r=v(()=>"contacts-new"===a.content.left||t.activeConversation?.isNew&&"mobile"!==a.viewMode&&!a.content.left?{startMode:"contacts",autosave:!0}:"contacts-edit"===a.content.left?{startMode:"contacts",autosave:!1}:"contacts-rights"===a.content.left?{startMode:"rights",autosave:!1}:void 0),i=v(()=>!!s.value||(!!r.value||"rename"===a.content.left));function c(){a.unsetContent("left")}return(e,t)=>{const n=b("conversations-module"),d=b("contacts-module"),u=b("name-edit-module");return i.value?($(),C("section",{key:0,class:E(["main-left-target",[q(a).viewMode,q(a).state]])},[s.value?($(),Y(n,{key:0,onClose:c})):o("",!0),r.value?($(),Y(d,l({key:1},r.value,{onClose:c}),null,16)):o("",!0),"rename"===q(a).content.left?($(),Y(u,{key:2,onClose:c})):o("",!0)],2)):o("",!0)}}}),[["styles",[".main-left-target[data-v-233714c6]{background-color:var(--scm-color-surface);z-index:100;width:100%;height:calc(100% - 35px);position:absolute;top:35px;left:0;overflow:hidden}.main-left-target.desktop[data-v-233714c6],.main-left-target.tablet[data-v-233714c6]{top:unset;height:unset;position:relative}.main-left-target.disconnected[data-v-233714c6]{height:calc(100% - 55px);top:55px}"]],["__scopeId","data-v-233714c6"]])}];var Pe={class:"header"},Re={class:"main-target"},De=U(_({__name:"App",props:{config:{type:Object}},setup(e){const a=e,t=n(),s=V();D();const{viewMode:r}=I({config:()=>a.config,applyConfig:A,onSessionRestored:()=>{s.handleReconnect().catch(()=>{})},onStarted:async()=>{t.isSupportOnly&&async function(){try{await s.getAllConversations()}catch(e){console.warn("[studio-chat] could not load conversations",e)}await s.startSupport()}(),await s.getAllConversations(),s.readLastActiveConversation(),s.activateLastOrLatestConversation()}});function i(){t.unsetContent("left")}function l(){t.unsetContent("right")}return(e,a)=>{const n=b("actions-partial"),s=b("connection-status-partial"),c=b("main-left-target-partial"),d=b("chats-module"),u=b("main-right-target-partial"),p=b("error-notice-partial");return $(),C("div",{class:E(["studio-chat-root",[q(r),q(t).state]])},[y("section",Pe,[k(n,{onClose:l}),"disconnected"===q(t).state?($(),Y(s,{key:0})):o("",!0)]),k(c),y("section",Re,["chat"===q(t).content.main?($(),Y(d,{key:0,onClose:i})):o("",!0)]),k(u),k(p),a[0]||(a[0]=y("div",{class:"util"},null,-1))],2)}}}),[["styles",[".studio-chat-root[data-v-74b09ea5]{--scm-font-size:16px;--scm-color-primary:#3f2d56;--scm-color-own:#533474;--scm-color-surface:#f9f9f9;--scm-color-subtle:#fcfcfc;--scm-color-shadow:#ccc;--scm-color-muted:#757474;--scm-color-danger:#ea624f;--scm-color-text:#555;--scm-color-highlight:hsl(from var(--scm-color-primary) h s 92%);--scm-radius:5px;--scm-radius-lg:8px;font-family:Open Sans,sans-serif;font-size:var(--scm-font-size)}#app[data-v-74b09ea5]{height:100vh}.studio-chat-root[data-v-74b09ea5]{grid-template-rows:35px 1fr;grid-template-columns:1fr;height:100%;display:grid}.studio-chat-root .header[data-v-74b09ea5]{background-color:var(--scm-color-surface);grid-template-columns:max-content 1fr;align-content:center;display:grid}.studio-chat-root.disconnected[data-v-74b09ea5]{grid-template-rows:55px 1fr}.studio-chat-root.disconnected .header[data-v-74b09ea5]{grid-template-rows:35px 20px}.studio-chat-root.disconnected .header .connection-status[data-v-74b09ea5]{grid-column:1/3}.studio-chat-root .conversations-module[data-v-74b09ea5]{grid-column:1}.studio-chat-root .main-target[data-v-74b09ea5]{height:100%;overflow:hidden}.studio-chat-root.desktop[data-v-74b09ea5],.studio-chat-root.tablet[data-v-74b09ea5]{grid-template-columns:350px 1fr}.studio-chat-root.desktop .header[data-v-74b09ea5],.studio-chat-root.tablet .header[data-v-74b09ea5]{grid-column:1/3}.studio-chat-root .chats-module[data-v-74b09ea5]{grid-column:1}","*,:before,:after{box-sizing:border-box;background-repeat:no-repeat;margin:0;padding:0}*{min-width:0}img,picture,video,canvas,svg{max-width:100%;display:block}input,button,textarea,select{font:inherit;color:inherit}a{color:inherit;text-decoration:none}ul,ol{list-style:none}p,h1,h2,h3,h4,h5,h6{overflow-wrap:break-word}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}:host{--scm-font-size:16px;--scm-color-primary:#3f2d56;--scm-color-own:#533474;--scm-color-surface:#f9f9f9;--scm-color-subtle:#fcfcfc;--scm-color-shadow:#ccc;--scm-color-muted:#757474;--scm-color-danger:#ea624f;--scm-color-text:#555;--scm-color-highlight:hsl(from var(--scm-color-primary) h s 92%);--scm-radius:5px;--scm-radius-lg:8px;height:100%;font-family:Open Sans,sans-serif;font-size:var(--scm-font-size);display:block}"]],["__scopeId","data-v-74b09ea5"]]);ee.default.extend(ae.default),G();var Ke=m(De,{shadowRoot:!0,configureApp(e){const a=t();e.use(F,{selector:"lilaquadrat-studio-chat"}),e.use(a),e.use(s),function(e){B([...z,...Ue],void 0,"module",e),B([...R,...Ie],void 0,"partial",e)}(e)}});customElements.get("lilaquadrat-studio-chat")||customElements.define("lilaquadrat-studio-chat",Ke);export{Ke as LilaquadratStudioChat};
|
package/dist/app/index.html
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="UTF-8" />
|
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
-
<meta name="robots" content="noindex" />
|
|
7
|
-
<title>lilaquadrat STUDIO Chat</title>
|
|
8
|
-
<style>
|
|
9
|
-
html,
|
|
10
|
-
body,
|
|
11
|
-
#app {
|
|
12
|
-
height: 100%;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
body {
|
|
16
|
-
margin: 0;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
.standalone-error {
|
|
20
|
-
padding: 2rem;
|
|
21
|
-
font-family: system-ui, sans-serif;
|
|
22
|
-
color: #757474;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
.standalone-error h1 {
|
|
26
|
-
font-size: 1.25rem;
|
|
27
|
-
color: #e53935;
|
|
28
|
-
}
|
|
29
|
-
</style>
|
|
30
|
-
<script type="module" crossorigin src="/assets/main-CMstByrm.js"></script>
|
|
31
|
-
<link rel="modulepreload" crossorigin href="/assets/preload-helper-OSX1TyOM.js">
|
|
32
|
-
</head>
|
|
33
|
-
<body>
|
|
34
|
-
<div id="app"></div>
|
|
35
|
-
<noscript>This chat requires JavaScript.</noscript>
|
|
36
|
-
</body>
|
|
37
|
-
</html>
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="UTF-8" />
|
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
-
<!-- a staff console has no business in a search index -->
|
|
7
|
-
<meta name="robots" content="noindex" />
|
|
8
|
-
<title>lilaquadrat STUDIO Support</title>
|
|
9
|
-
<style>
|
|
10
|
-
html,
|
|
11
|
-
body,
|
|
12
|
-
#app {
|
|
13
|
-
height: 100%;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
body {
|
|
17
|
-
margin: 0;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
.standalone-error {
|
|
21
|
-
padding: 2rem;
|
|
22
|
-
font-family: system-ui, sans-serif;
|
|
23
|
-
color: #757474;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
.standalone-error h1 {
|
|
27
|
-
font-size: 1.25rem;
|
|
28
|
-
color: #e53935;
|
|
29
|
-
}
|
|
30
|
-
</style>
|
|
31
|
-
<script type="module" crossorigin src="/assets/support-C4cC4Lzu.js"></script>
|
|
32
|
-
<link rel="modulepreload" crossorigin href="/assets/preload-helper-OSX1TyOM.js">
|
|
33
|
-
</head>
|
|
34
|
-
<body>
|
|
35
|
-
<div id="app"></div>
|
|
36
|
-
<noscript>This support console requires JavaScript.</noscript>
|
|
37
|
-
<!--
|
|
38
|
-
Second page of the one standalone app (see vite.config.app.ts): the repo root is the vite
|
|
39
|
-
`root`, so this file is the /support route in dev and dist/app/support/index.html in a build.
|
|
40
|
-
The src is absolute-from-root; the entry itself stays in src/standalone-support/.
|
|
41
|
-
-->
|
|
42
|
-
</body>
|
|
43
|
-
</html>
|
|
File without changes
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
!function(n){"function"==typeof define&&define.amd&&define([],n)}(function(){});
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
/** prefix on bot-sent replies so auto-reply bots don't ping-pong off each other */
|
|
2
|
-
export declare const BOT_PREFIX = "\uD83E\uDD16";
|
|
3
|
-
export type BotConnectionStatus = 'connecting' | 'connected' | 'disconnected';
|
|
4
|
-
export interface BotClientOptions {
|
|
5
|
-
userId: number;
|
|
6
|
-
url?: string;
|
|
7
|
-
apiUrl?: string;
|
|
8
|
-
getAutoReply?: () => boolean;
|
|
9
|
-
onStatus?: (_status: BotConnectionStatus) => void;
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* One independent websocket connection acting as a single user. Authenticates as its
|
|
13
|
-
* userId, learns the conversations it belongs to, auto-replies to others' messages, and
|
|
14
|
-
* proactively sends random messages on an interval — so it behaves like a live user for
|
|
15
|
-
* debugging multi-user flows.
|
|
16
|
-
*/
|
|
17
|
-
export declare class BotClient {
|
|
18
|
-
private socket;
|
|
19
|
-
private readonly userId;
|
|
20
|
-
private readonly url;
|
|
21
|
-
private readonly apiUrl;
|
|
22
|
-
private readonly getAutoReply;
|
|
23
|
-
private readonly onStatus?;
|
|
24
|
-
private conversations;
|
|
25
|
-
private chatterTimer;
|
|
26
|
-
private readonly replyTimers;
|
|
27
|
-
private readonly pace;
|
|
28
|
-
constructor(options: BotClientOptions);
|
|
29
|
-
connect(): void;
|
|
30
|
-
disconnect(): void;
|
|
31
|
-
sendMessage(conversation: string, message: string): void;
|
|
32
|
-
private handleClose;
|
|
33
|
-
/** fetch the conversations this bot is a participant of (raw fetch — SDK GET cache is shared across users) */
|
|
34
|
-
private loadConversations;
|
|
35
|
-
private scheduleChatter;
|
|
36
|
-
private clearTimers;
|
|
37
|
-
private sendRandom;
|
|
38
|
-
private send;
|
|
39
|
-
private handle;
|
|
40
|
-
}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { type ComputedRef } from 'vue';
|
|
2
|
-
import type { ParticipantUser } from '@/helpers/participants';
|
|
3
|
-
/** the least a shell's config has to provide for the bootstrap to find an identity */
|
|
4
|
-
export interface ChatBootstrapConfig {
|
|
5
|
-
token?: string;
|
|
6
|
-
userId?: string;
|
|
7
|
-
user?: ParticipantUser;
|
|
8
|
-
}
|
|
9
|
-
export interface ChatBootstrapOptions<C extends ChatBootstrapConfig> {
|
|
10
|
-
/** the shell's config — read reactively, so a late-set config (custom element) still boots */
|
|
11
|
-
config: () => C | undefined;
|
|
12
|
-
/** hand the config to whatever registers components, features and endpoints for this shell */
|
|
13
|
-
applyConfig: (_config: C) => void;
|
|
14
|
-
/** the session came back (re-auth or reconnect) — pull everything missed meanwhile */
|
|
15
|
-
onSessionRestored: () => void;
|
|
16
|
-
/** the shell's own start-up, run once the session is up and identity is known */
|
|
17
|
-
onStarted: () => Promise<void> | void;
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Everything the customer shell and the agent shell boot identically: view mode from the
|
|
21
|
-
* measured width, the unread bridge to the host, and the one-shot session start (config →
|
|
22
|
-
* token → identity → chatSession). What differs per shell is passed in via `options`.
|
|
23
|
-
*/
|
|
24
|
-
export declare function useChatBootstrap<C extends ChatBootstrapConfig>(options: ChatBootstrapOptions<C>): {
|
|
25
|
-
viewMode: ComputedRef<'mobile' | 'tablet' | 'desktop'>;
|
|
26
|
-
};
|
|
27
|
-
export default useChatBootstrap;
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { type Ref } from 'vue';
|
|
2
|
-
/**
|
|
3
|
-
* tracks whether the chat is actually visible to the user:
|
|
4
|
-
* - the element must intersect the viewport (catches display:none, collapsed hosts, and a
|
|
5
|
-
* host that parks the widget off screen — the supported way to hide an embedded instance)
|
|
6
|
-
* - the tab must be in the foreground
|
|
7
|
-
* - in compact mode no left panel may overlay the chat (occlusion is not detectable
|
|
8
|
-
* cross-browser, so our own overlay state is checked explicitly)
|
|
9
|
-
*
|
|
10
|
-
* Purely visual hiding — `opacity: 0` — is deliberately NOT detected: no observer reports it
|
|
11
|
-
* and probing for it means walking every ancestor's computed style on each check. Hosts hide
|
|
12
|
-
* the widget by moving it out of the viewport (or `display: none`) instead.
|
|
13
|
-
*/
|
|
14
|
-
export declare function useChatVisibility(element: Ref<HTMLElement | undefined>): {
|
|
15
|
-
chatVisible: import("vue").ComputedRef<boolean>;
|
|
16
|
-
isVisibleNow: () => boolean;
|
|
17
|
-
};
|
|
18
|
-
export default useChatVisibility;
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* fires Vue events out of a module/partial without it knowing where it is
|
|
3
|
-
* mounted: the component tells the parent it is done — triggerEvent('close') —
|
|
4
|
-
* and the parent decides how to react. The event name is the string input;
|
|
5
|
-
* more event types can be added later.
|
|
6
|
-
*/
|
|
7
|
-
export declare function useTriggerEvent(): {
|
|
8
|
-
triggerEvent: (event: string) => void;
|
|
9
|
-
};
|
|
10
|
-
export default useTriggerEvent;
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Component-facing websocket API. Sending goes through the chat session layer, which
|
|
3
|
-
* queues frames while the connection/session is down and resends unconfirmed ones
|
|
4
|
-
* after a session loss — callers just fire and forget.
|
|
5
|
-
*/
|
|
6
|
-
export declare function useWebSocket(): {
|
|
7
|
-
conversationStart: (message: string, participants: string[], name: string | undefined, id: string, operationMode?: "chat" | "support") => boolean;
|
|
8
|
-
conversationLastRead: (conversation: string, lastReadId: number) => boolean;
|
|
9
|
-
messageAdd: (message: string, conversation: string) => boolean;
|
|
10
|
-
conversationTyping: (conversation: string, typing: boolean) => boolean;
|
|
11
|
-
};
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Pluggable auth-token source.
|
|
3
|
-
*
|
|
4
|
-
* The chat module never owns the auth session. The host application provides a
|
|
5
|
-
* function that, whenever called, returns a currently-valid OIDC access token.
|
|
6
|
-
* Registered once via `createChatModule({ getToken })` (see main.ts) or
|
|
7
|
-
* `setGetToken()` directly. The module derives identity from the token's `sub`
|
|
8
|
-
* and sends it as the WS `authenticate` token + HTTP Bearer.
|
|
9
|
-
*
|
|
10
|
-
* The function is called on every (re)connect and may be async, so the host can
|
|
11
|
-
* refresh/rotate the token transparently. `force` is true after AUTH_FAILED and
|
|
12
|
-
* must bypass the provider's normal minimum-validity check.
|
|
13
|
-
*/
|
|
14
|
-
export type GetTokenFn = (_force?: boolean) => string | Promise<string>;
|
|
15
|
-
/** register the host implementation. last call wins. */
|
|
16
|
-
export declare function setGetToken(fn: GetTokenFn): void;
|
|
17
|
-
export declare function hasGetToken(): boolean;
|
|
18
|
-
/** Resolve a token through the registered implementation, optionally forcing rotation. */
|
|
19
|
-
export declare function resolveToken(force?: boolean): Promise<string | undefined>;
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
import type { App } from 'vue';
|
|
2
|
-
import type { Pinia } from 'pinia';
|
|
3
|
-
import { type ChatModuleConfig } from '@/config/chatConfig';
|
|
4
|
-
/**
|
|
5
|
-
* Bootstrap for <lilaquadrat-studio-support>, the support-agent console.
|
|
6
|
-
*
|
|
7
|
-
* NOTE what is NOT imported here: '@/config/bootstrap'. That file statically imports every
|
|
8
|
-
* customer-only component (contacts, conversations, rights-editor, …) and rollup tree-shakes by
|
|
9
|
-
* module, not by branch — one import of it and the whole customer widget lands in the agent
|
|
10
|
-
* bundle, which is the only reason this second element exists. `applyConfig` therefore comes
|
|
11
|
-
* from '@/config/chatConfig' and the shared component lists from '@/config/components.shared'.
|
|
12
|
-
*/
|
|
13
|
-
/**
|
|
14
|
-
* What a host may configure on the support-agent element.
|
|
15
|
-
*
|
|
16
|
-
* Deliberately NARROWER than ChatModuleConfig, and the three omissions are the point:
|
|
17
|
-
*
|
|
18
|
-
* - no `getUsers`: the console has no user directory to browse. An agent works the conversations
|
|
19
|
-
* the backend hands it; participants arrive enriched on the rows themselves.
|
|
20
|
-
* - no `features` / no `mode`: the BUNDLE decides what this element is, not the host.
|
|
21
|
-
* applySupportAgentConfig forces `features: ['support']` below — a host that could pass
|
|
22
|
-
* `['chat']` here would get a support console rendering the customer's chat header.
|
|
23
|
-
* - no `support: { participants }`: already a no-op in ChatModuleConfig (the backend owns the
|
|
24
|
-
* support team). A brand-new interface has no legacy embeds to keep working, so it starts clean.
|
|
25
|
-
*
|
|
26
|
-
* Everything that remains is identity, endpoints and host callbacks — handled by the shared
|
|
27
|
-
* applyConfig so it cannot drift between the two elements.
|
|
28
|
-
*/
|
|
29
|
-
export interface SupportAgentConfig {
|
|
30
|
-
/** the host's OIDC access token. Identity is derived from its `sub`; sent as Bearer + WS auth. */
|
|
31
|
-
token?: string;
|
|
32
|
-
/**
|
|
33
|
-
* host-provided token resolver. Called on every (re)connect; may be async and must always
|
|
34
|
-
* return a currently-valid token. Receives `true` after AUTH_FAILED to force rotation.
|
|
35
|
-
* Preferred over the static `token` — identity comes from its `sub`.
|
|
36
|
-
*/
|
|
37
|
-
getToken?: ChatModuleConfig['getToken'];
|
|
38
|
-
/** websocket endpoint. Defaults to ws://localhost:3001 (dev). */
|
|
39
|
-
wsUrl?: string;
|
|
40
|
-
/** API endpoint. Defaults to http://localhost:3000 (dev). */
|
|
41
|
-
apiUrl?: string;
|
|
42
|
-
/** media endpoint. Defaults to http://localhost:3000 (dev). */
|
|
43
|
-
mediaUrl?: string;
|
|
44
|
-
/** the agent's own profile — the backend enriches other participants but not the requesting user. */
|
|
45
|
-
user?: ChatModuleConfig['user'];
|
|
46
|
-
/** the agent's user id. Only a fallback: a token's `sub` wins over it. */
|
|
47
|
-
userId?: string;
|
|
48
|
-
/** called whenever the unread message/conversation count changes */
|
|
49
|
-
unread?: ChatModuleConfig['unread'];
|
|
50
|
-
/** called when the close button in the header is clicked */
|
|
51
|
-
close?: () => void;
|
|
52
|
-
/**
|
|
53
|
-
* notification sounds. On at full volume by default; `false` silences them.
|
|
54
|
-
* A sound is only played for remote events the user cannot currently see.
|
|
55
|
-
*/
|
|
56
|
-
sound?: boolean | {
|
|
57
|
-
enabled?: boolean;
|
|
58
|
-
volume?: number;
|
|
59
|
-
};
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Compile-time guard for the narrowing above: `B extends A` fails to compile the moment
|
|
63
|
-
* SupportAgentConfig stops being assignable to ChatModuleConfig — which is exactly when
|
|
64
|
-
* applySupportAgentConfig's spread into applyConfig would start silently mis-typing a field.
|
|
65
|
-
* Exported only so it counts as used; it carries no runtime weight.
|
|
66
|
-
*/
|
|
67
|
-
type MustExtend<A, B extends A> = B;
|
|
68
|
-
export type SupportAgentConfigIsAChatModuleConfig = MustExtend<ChatModuleConfig, SupportAgentConfig>;
|
|
69
|
-
/**
|
|
70
|
-
* Apply the agent host's configuration.
|
|
71
|
-
*
|
|
72
|
-
* Delegates to the shared applyConfig rather than touching the stores itself: token, sound,
|
|
73
|
-
* endpoints and identity caching are subtle enough (`sound: false` is meaningful, the own-user
|
|
74
|
-
* profile has to be cached under the authoritative id) that a second implementation would drift.
|
|
75
|
-
*
|
|
76
|
-
* `features: ['support']` is set HERE and never by the host. With hasChat === false the shared
|
|
77
|
-
* actions.partial drops both of its customer buttons on its own — the new-chat button is
|
|
78
|
-
* `v-if="hasChat"` and the support button is `v-if="hasChat && hasSupport"` — which leaves
|
|
79
|
-
* exactly the header an agent should get: the conversations button and close.
|
|
80
|
-
*
|
|
81
|
-
* Pass the pinia instance when calling outside an active-pinia context.
|
|
82
|
-
*/
|
|
83
|
-
export declare function applySupportAgentConfig(config: SupportAgentConfig, pinia?: Pinia): void;
|
|
84
|
-
/** register the agent console's global components on a Vue app (or custom-element app). */
|
|
85
|
-
export declare function registerAgentComponents(app: App): void;
|
|
86
|
-
export {};
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import type { App } from 'vue';
|
|
2
|
-
/**
|
|
3
|
-
* The host-facing config moved to config/chatConfig.ts — importing `applyConfig` from here would
|
|
4
|
-
* pull every customer component below into the importer's bundle, since this file imports them
|
|
5
|
-
* statically and rollup tree-shakes by module. Re-exported so existing consumers keep working;
|
|
6
|
-
* the support-agent entry must import from '@/config/chatConfig' directly.
|
|
7
|
-
*/
|
|
8
|
-
export { applyConfig, resolveFeatures, type ChatModuleConfig } from '@/config/chatConfig';
|
|
9
|
-
/** register the module's global components on a Vue app (or custom-element app). */
|
|
10
|
-
export declare function registerComponents(app: App): void;
|