kritzel-stencil 0.3.44 → 0.3.45

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.
Files changed (68) hide show
  1. package/dist/cjs/index-Xav9JFHg.js +2 -2
  2. package/dist/cjs/{kritzel-active-users_46.cjs.entry.js → kritzel-active-users_47.cjs.entry.js} +61 -24
  3. package/dist/cjs/loader.cjs.js +1 -1
  4. package/dist/cjs/stencil.cjs.js +1 -1
  5. package/dist/collection/collection-manifest.json +1 -0
  6. package/dist/collection/components/core/kritzel-engine/kritzel-engine.js +39 -4
  7. package/dist/collection/components/shared/kritzel-sync-indicator/kritzel-sync-indicator.css +50 -0
  8. package/dist/collection/components/shared/kritzel-sync-indicator/kritzel-sync-indicator.js +66 -0
  9. package/dist/collection/components/shared/kritzel-tooltip/kritzel-tooltip.js +2 -2
  10. package/dist/collection/components/ui/kritzel-back-to-content/kritzel-back-to-content.js +1 -1
  11. package/dist/collection/components/ui/kritzel-controls/kritzel-controls.js +6 -6
  12. package/dist/collection/components/ui/kritzel-current-user/kritzel-current-user.js +1 -1
  13. package/dist/collection/components/ui/kritzel-current-user-dialog/kritzel-current-user-dialog.js +1 -1
  14. package/dist/collection/components/ui/kritzel-export/kritzel-export.js +1 -1
  15. package/dist/collection/components/ui/kritzel-loading-overlay/kritzel-loading-overlay.js +1 -1
  16. package/dist/collection/components/ui/kritzel-login-dialog/kritzel-login-dialog.js +1 -1
  17. package/dist/collection/components/ui/kritzel-more-menu/kritzel-more-menu.js +1 -1
  18. package/dist/collection/components/ui/kritzel-settings/kritzel-settings.js +1 -1
  19. package/dist/collection/components/ui/kritzel-share-dialog/kritzel-share-dialog.js +2 -2
  20. package/dist/collection/components/ui/kritzel-utility-panel/kritzel-utility-panel.js +1 -1
  21. package/dist/collection/components/ui/kritzel-zoom-panel/kritzel-zoom-panel.js +1 -1
  22. package/dist/collection/constants/version.js +1 -1
  23. package/dist/components/index.d.ts +2 -0
  24. package/dist/components/index.js +1 -1
  25. package/dist/components/kritzel-back-to-content.js +1 -1
  26. package/dist/components/kritzel-controls.js +1 -1
  27. package/dist/components/kritzel-current-user-dialog.js +1 -1
  28. package/dist/components/kritzel-current-user.js +1 -1
  29. package/dist/components/kritzel-editor.js +1 -1
  30. package/dist/components/kritzel-engine.js +1 -1
  31. package/dist/components/kritzel-export.js +1 -1
  32. package/dist/components/kritzel-loading-overlay.js +1 -1
  33. package/dist/components/kritzel-login-dialog.js +1 -1
  34. package/dist/components/kritzel-more-menu.js +1 -1
  35. package/dist/components/kritzel-settings.js +1 -1
  36. package/dist/components/kritzel-share-dialog.js +1 -1
  37. package/dist/components/kritzel-sync-indicator.d.ts +11 -0
  38. package/dist/components/kritzel-sync-indicator.js +1 -0
  39. package/dist/components/kritzel-tooltip.js +1 -1
  40. package/dist/components/kritzel-utility-panel.js +1 -1
  41. package/dist/components/kritzel-zoom-panel.js +1 -1
  42. package/dist/components/p-894OnDQV.js +1 -0
  43. package/dist/components/{p-D-NSbx5U.js → p-B5oHmPJb.js} +1 -1
  44. package/dist/components/{p-DU7g4PU-.js → p-BTzlrIxe.js} +1 -1
  45. package/dist/components/{p-zPqYwncm.js → p-C2ocjA6D.js} +1 -1
  46. package/dist/components/p-C7rN6L3d.js +9 -0
  47. package/dist/components/{p-Cf2ZKUo0.js → p-CsvMgk_f.js} +1 -1
  48. package/dist/components/{p-_Bq7P1RT.js → p-D30zs0kA.js} +1 -1
  49. package/dist/components/{p-MWbDABmq.js → p-D3y_Hauo.js} +1 -1
  50. package/dist/components/{p-DJy_uWqB.js → p-DIazmg6w.js} +1 -1
  51. package/dist/components/{p-CrihGZwy.js → p-DUYmwrWV.js} +1 -1
  52. package/dist/components/{p-BJ3Do8l1.js → p-DgJ0ufzr.js} +1 -1
  53. package/dist/components/{p-DS6BjPHy.js → p-DkUb2czk.js} +1 -1
  54. package/dist/components/{p-CiJ8GUSN.js → p-Dlp84thc.js} +1 -1
  55. package/dist/components/{p-Cq3RhUie.js → p-e6Zpc9Vp.js} +1 -1
  56. package/dist/components/{p-DiN6reV0.js → p-s7PqL1NE.js} +1 -1
  57. package/dist/esm/index-Dhio9uis.js +2 -2
  58. package/dist/esm/{kritzel-active-users_46.entry.js → kritzel-active-users_47.entry.js} +61 -25
  59. package/dist/esm/loader.js +1 -1
  60. package/dist/esm/stencil.js +1 -1
  61. package/dist/stencil/{p-c6ee3857.entry.js → p-ad326bf7.entry.js} +2 -2
  62. package/dist/stencil/stencil.esm.js +1 -1
  63. package/dist/types/components/core/kritzel-engine/kritzel-engine.d.ts +4 -0
  64. package/dist/types/components/shared/kritzel-sync-indicator/kritzel-sync-indicator.d.ts +7 -0
  65. package/dist/types/components.d.ts +42 -0
  66. package/dist/types/constants/version.d.ts +1 -1
  67. package/package.json +1 -1
  68. package/dist/components/p-BbGeZ47F.js +0 -9
@@ -1 +1 @@
1
- import{p as t,H as e,c as s,h as i,d as n,t as o}from"./p-B43upypT.js";import{K as r,d as a}from"./p-CdR76C4L.js";import{D as c,h,S as l,f as d,e as u,i as p,j as m,k as g}from"./p-D8NvNMcU.js";import{a as f,c as b,b as y,e as k,d as w,k as v,l as z,m as C}from"./p-BbGeZ47F.js";import{D as j,T as A,d as x,l as T}from"./p-BmyTdQGy.js";import{A as S,a as E,d as O}from"./p-PSFAfAyd.js";import{K as I}from"./p-jGOpkGDl.js";import{O as D}from"./p-Dd-pMvlr.js";import"./p-UEf2EN23.js";import*as U from"yjs";import"y-indexeddb";import"y-websocket";import{d as M}from"./p-DJ88BrIW.js";import{d as B}from"./p-D5jf8wAu.js";import{d as R}from"./p-CwbZCXKh.js";import{d as P}from"./p-CiJ8GUSN.js";import{d as W}from"./p-DEBwmRTC.js";import{d as V}from"./p-CqLgB8JK.js";import{d as L}from"./p-Cymum41a.js";import{d as N}from"./p-BxpKq94F.js";import{d as F}from"./p-zPqYwncm.js";import{d as J}from"./p-DJy_uWqB.js";import{d as q}from"./p-MWbDABmq.js";import{d as Z}from"./p-B4b6TDxp.js";import{d as H}from"./p-DX2nriaq.js";import{d as K}from"./p-Df3BwVGy.js";import{d as Y}from"./p-Cq3RhUie.js";import{d as G}from"./p-B8Xi4Clg.js";import{d as _}from"./p-JhOYwUOj.js";import{d as $}from"./p-BI2ng9I_.js";import{d as Q}from"./p-C4NrrUfN.js";import{d as X}from"./p-CXpv9Rxe.js";import{d as tt}from"./p-BJ3Do8l1.js";import{d as et}from"./p-D-NSbx5U.js";import{d as st}from"./p-BsANVili.js";import{d as it,a as nt}from"./p-CwJwsRR3.js";import{d as ot}from"./p-_Bq7P1RT.js";import{d as rt}from"./p-pagW8YF7.js";import{d as at}from"./p-BDzlx2hB.js";import{d as ct}from"./p-B6t5q-V4.js";import{d as ht}from"./p-D09kgc5Q.js";import{d as lt}from"./p-Ca-igU1f.js";import{d as dt}from"./p-DiN6reV0.js";import{d as ut}from"./p-BFYtCsZu.js";import{d as pt}from"./p-CrihGZwy.js";import{d as mt}from"./p-CWRSGYOE.js";import{d as gt}from"./p-Cr682JI_.js";import{d as ft}from"./p-D82VaHce.js";import{d as bt}from"./p-D2q_wTyG.js";import{d as yt}from"./p-DU7g4PU-.js";import{d as kt}from"./p-Cf2ZKUo0.js";import{d as wt}from"./p-9692OaI_.js";import{d as vt}from"./p-DS6BjPHy.js";const zt=Math.floor,Ct=127,jt=Number.MAX_SAFE_INTEGER,At="undefined"!=typeof TextEncoder?new TextEncoder:null,xt=At?t=>At.encode(t):t=>{const e=unescape(encodeURIComponent(t)),s=e.length,i=new Uint8Array(s);for(let t=0;t<s;t++)i[t]=e.codePointAt(t);return i};let Tt="undefined"==typeof TextDecoder?null:new TextDecoder("utf-8",{fatal:!0,ignoreBOM:!0});Tt&&1===Tt.decode(new Uint8Array).length&&(Tt=null);const St=(t,e)=>{const s=t.cbuf.length;t.cpos===s&&(t.bufs.push(t.cbuf),t.cbuf=new Uint8Array(2*s),t.cpos=0),t.cbuf[t.cpos++]=e},Et=(t,e)=>{for(;e>Ct;)St(t,128|Ct&e),e=zt(e/128);St(t,Ct&e)},Ot=new Uint8Array(3e4),It=Ot.length/3,Dt=At&&At.encodeInto?(t,e)=>{if(e.length<It){const s=At.encodeInto(e,Ot).written||0;Et(t,s);for(let e=0;e<s;e++)St(t,Ot[e])}else Ut(t,xt(e))}:(t,e)=>{const s=unescape(encodeURIComponent(e)),i=s.length;Et(t,i);for(let e=0;e<i;e++)St(t,s.codePointAt(e))},Ut=(t,e)=>{Et(t,e.byteLength),((t,e)=>{const s=t.cbuf.length,i=t.cpos,n=((t,e)=>t<e?t:e)(s-i,e.length),o=e.length-n;t.cbuf.set(e.subarray(0,n),i),t.cpos+=n,o>0&&(t.bufs.push(t.cbuf),t.cbuf=new Uint8Array(((t,e)=>t>e?t:e)(2*s,o)),t.cbuf.set(e.subarray(n)),t.cpos=o)})(t,e)},Mt=t=>Error(t),Bt=Mt("Unexpected end of array"),Rt=Mt("Integer out of Range"),Pt=t=>t.arr[t.pos++],Wt=t=>{let e=0,s=1;const i=t.arr.length;for(;t.pos<i;){const i=t.arr[t.pos++];if(e+=(i&Ct)*s,s*=128,i<128)return e;if(e>jt)throw Rt}throw Bt},Vt=Tt?t=>Tt.decode((t=>((t,e)=>{const s=new Uint8Array(t.arr.buffer,t.pos+t.arr.byteOffset,e);return t.pos+=e,s})(t,Wt(t)))(t)):t=>{let e=Wt(t);if(0===e)return"";{let s=String.fromCodePoint(Pt(t));if(--e<100)for(;e--;)s+=String.fromCodePoint(Pt(t));else for(;e>0;){const i=e<1e4?e:1e4,n=t.arr.subarray(t.pos,t.pos+i);t.pos+=i,s+=String.fromCodePoint.apply(null,n),e-=i}return decodeURIComponent(escape(s))}};var Lt;!function(t){t[t.Token=0]="Token",t[t.PermissionDenied=1]="PermissionDenied",t[t.Authenticated=2]="Authenticated"}(Lt||(Lt={}));const Nt=t=>Array.from(t.entries()).map((([t,e])=>({clientId:t,...e})));var Ft;async function Jt(t){return new Promise((e=>setTimeout(e,t)))}function qt(t,e){let s=e.delay;if(0===s)return 0;if(e.factor&&(s*=Math.pow(e.factor,t.attemptNum-1),0!==e.maxDelay&&(s=Math.min(s,e.maxDelay))),e.jitter){const t=Math.ceil(e.minDelay),i=Math.floor(s);s=Math.floor(Math.random()*(i-t+1))+t}return Math.round(s)}!function(t){t[t.Connecting=0]="Connecting",t[t.Open=1]="Open",t[t.Closing=2]="Closing",t[t.Closed=3]="Closed"}(Ft||(Ft={}));const Zt=Math.floor,Ht=128,Kt=127,Yt=Number.MAX_SAFE_INTEGER,Gt=()=>new Set,_t=Array.from,$t="undefined"!=typeof TextEncoder?new TextEncoder:null,Qt=$t?t=>$t.encode(t):t=>{const e=unescape(encodeURIComponent(t)),s=e.length,i=new Uint8Array(s);for(let t=0;t<s;t++)i[t]=e.codePointAt(t);return i};let Xt="undefined"==typeof TextDecoder?null:new TextDecoder("utf-8",{fatal:!0,ignoreBOM:!0});Xt&&1===Xt.decode(new Uint8Array).length&&(Xt=null);class te{constructor(){this.cpos=0,this.cbuf=new Uint8Array(100),this.bufs=[]}}const ee=()=>new te,se=t=>{let e=t.cpos;for(let s=0;s<t.bufs.length;s++)e+=t.bufs[s].length;return e},ie=t=>{const e=new Uint8Array(se(t));let s=0;for(let i=0;i<t.bufs.length;i++){const n=t.bufs[i];e.set(n,s),s+=n.length}return e.set(new Uint8Array(t.cbuf.buffer,0,t.cpos),s),e},ne=(t,e)=>{const s=t.cbuf.length;t.cpos===s&&(t.bufs.push(t.cbuf),t.cbuf=new Uint8Array(2*s),t.cpos=0),t.cbuf[t.cpos++]=e},oe=(t,e)=>{for(;e>Kt;)ne(t,Ht|Kt&e),e=Zt(e/128);ne(t,Kt&e)},re=new Uint8Array(3e4),ae=re.length/3,ce=$t&&$t.encodeInto?(t,e)=>{if(e.length<ae){const s=$t.encodeInto(e,re).written||0;oe(t,s);for(let e=0;e<s;e++)ne(t,re[e])}else he(t,Qt(e))}:(t,e)=>{const s=unescape(encodeURIComponent(e)),i=s.length;oe(t,i);for(let e=0;e<i;e++)ne(t,s.codePointAt(e))},he=(t,e)=>{oe(t,e.byteLength),((t,e)=>{const s=t.cbuf.length,i=t.cpos,n=((t,e)=>t<e?t:e)(s-i,e.length),o=e.length-n;t.cbuf.set(e.subarray(0,n),i),t.cpos+=n,o>0&&(t.bufs.push(t.cbuf),t.cbuf=new Uint8Array(((t,e)=>t>e?t:e)(2*s,o)),t.cbuf.set(e.subarray(n)),t.cpos=o)})(t,e)},le=t=>Error(t),de=le("Unexpected end of array"),ue=le("Integer out of Range");class pe{constructor(t){this.arr=t,this.pos=0}}const me=t=>new pe(t),ge=t=>((t,e)=>{const s=new Uint8Array(t.arr.buffer,t.pos+t.arr.byteOffset,e);return t.pos+=e,s})(t,be(t)),fe=t=>t.arr[t.pos++],be=t=>{let e=0,s=1;const i=t.arr.length;for(;t.pos<i;){const i=t.arr[t.pos++];if(e+=(i&Kt)*s,s*=128,i<Ht)return e;if(e>Yt)throw ue}throw de},ye=Xt?t=>Xt.decode(ge(t)):t=>{let e=be(t);if(0===e)return"";{let s=String.fromCodePoint(fe(t));if(--e<100)for(;e--;)s+=String.fromCodePoint(fe(t));else for(;e>0;){const i=e<1e4?e:1e4,n=t.arr.subarray(t.pos,t.pos+i);t.pos+=i,s+=String.fromCodePoint.apply(null,n),e-=i}return decodeURIComponent(escape(s))}},ke=Date.now,we=()=>new Map;class ve{constructor(){this._observers=we()}on(t,e){((t,e,s)=>{let i=t.get(e);return void 0===i&&t.set(e,i=s()),i})(this._observers,t,Gt).add(e)}once(t,e){const s=(...i)=>{this.off(t,s),e(...i)};this.on(t,s)}off(t,e){const s=this._observers.get(t);void 0!==s&&(s.delete(e),0===s.size&&this._observers.delete(t))}emit(t,e){return _t((this._observers.get(t)||we()).values()).forEach((t=>t(...e)))}destroy(){this._observers=we()}}const ze=Object.keys,Ce=t=>ze(t).length,je=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),Ae=(t,e)=>{if(null==t||null==e)return((t,e)=>t===e)(t,e);if(t.constructor!==e.constructor)return!1;if(t===e)return!0;switch(t.constructor){case ArrayBuffer:t=new Uint8Array(t),e=new Uint8Array(e);case Uint8Array:if(t.byteLength!==e.byteLength)return!1;for(let s=0;s<t.length;s++)if(t[s]!==e[s])return!1;break;case Set:if(t.size!==e.size)return!1;for(const s of t)if(!e.has(s))return!1;break;case Map:if(t.size!==e.size)return!1;for(const s of t.keys())if(!e.has(s)||!Ae(t.get(s),e.get(s)))return!1;break;case Object:if(Ce(t)!==Ce(e))return!1;for(const s in t)if(!je(t,s)||!Ae(t[s],e[s]))return!1;break;case Array:if(t.length!==e.length)return!1;for(let s=0;s<t.length;s++)if(!Ae(t[s],e[s]))return!1;break;default:return!1}return!0};class xe extends ve{constructor(t){super(),this.doc=t,this.clientID=t.clientID,this.states=new Map,this.meta=new Map,this._checkInterval=setInterval((()=>{const t=ke();null!==this.getLocalState()&&15e3<=t-this.meta.get(this.clientID).lastUpdated&&this.setLocalState(this.getLocalState());const e=[];this.meta.forEach(((s,i)=>{i!==this.clientID&&3e4<=t-s.lastUpdated&&this.states.has(i)&&e.push(i)})),e.length>0&&Te(this,e,"timeout")}),Zt(3e3)),t.on("destroy",(()=>{this.destroy()})),this.setLocalState({})}destroy(){this.emit("destroy",[this]),this.setLocalState(null),super.destroy(),clearInterval(this._checkInterval)}getLocalState(){return this.states.get(this.clientID)||null}setLocalState(t){const e=this.clientID,s=this.meta.get(e),i=void 0===s?0:s.clock+1,n=this.states.get(e);null===t?this.states.delete(e):this.states.set(e,t),this.meta.set(e,{clock:i,lastUpdated:ke()});const o=[],r=[],a=[],c=[];null===t?c.push(e):null==n?null!=t&&o.push(e):(r.push(e),Ae(n,t)||a.push(e)),(o.length>0||a.length>0||c.length>0)&&this.emit("change",[{added:o,updated:a,removed:c},"local"]),this.emit("update",[{added:o,updated:r,removed:c},"local"])}setLocalStateField(t,e){const s=this.getLocalState();null!==s&&this.setLocalState({...s,[t]:e})}getStates(){return this.states}}const Te=(t,e,s)=>{const i=[];for(let s=0;s<e.length;s++){const n=e[s];if(t.states.has(n)){if(t.states.delete(n),n===t.clientID){const e=t.meta.get(n);t.meta.set(n,{clock:e.clock+1,lastUpdated:ke()})}i.push(n)}}i.length>0&&(t.emit("change",[{added:[],updated:[],removed:i},s]),t.emit("update",[{added:[],updated:[],removed:i},s]))},Se=(t,e,s=t.states)=>{const i=e.length,n=ee();oe(n,i);for(let o=0;o<i;o++){const i=e[o],r=s.get(i)||null,a=t.meta.get(i).clock;oe(n,i),oe(n,a),ce(n,JSON.stringify(r))}return ie(n)};class Ee{constructor(){this.callbacks={}}on(t,e){return this.callbacks[t]||(this.callbacks[t]=[]),this.callbacks[t].push(e),this}emit(t,...e){const s=this.callbacks[t];return s&&s.forEach((t=>t.apply(this,e))),this}off(t,e){const s=this.callbacks[t];return s&&(e?this.callbacks[t]=s.filter((t=>t!==e)):delete this.callbacks[t]),this}removeAllListeners(){this.callbacks={}}}class Oe{constructor(t){this.data=t,this.encoder=ee(),this.decoder=me(new Uint8Array(this.data))}peekVarString(){return(t=>{const e=t.pos,s=ye(t);return t.pos=e,s})(this.decoder)}readVarUint(){return be(this.decoder)}readVarString(){return ye(this.decoder)}readVarUint8Array(){return ge(this.decoder)}writeVarUint(t){return oe(this.encoder,t)}writeVarString(t){return ce(this.encoder,t)}writeVarUint8Array(t){return he(this.encoder,t)}length(){return se(this.encoder)}}var Ie,De;!function(t){t[t.Sync=0]="Sync",t[t.Awareness=1]="Awareness",t[t.Auth=2]="Auth",t[t.QueryAwareness=3]="QueryAwareness",t[t.Stateless=5]="Stateless",t[t.CLOSE=7]="CLOSE",t[t.SyncStatus=8]="SyncStatus"}(Ie||(Ie={})),function(t){t.Connecting="connecting",t.Connected="connected",t.Disconnected="disconnected"}(De||(De={}));class Ue{constructor(){this.encoder=ee()}get(t){return t.encoder}toUint8Array(){return ie(this.encoder)}}class Me extends Ue{constructor(){super(...arguments),this.type=Ie.CLOSE,this.description="Ask the server to close the connection"}get(t){return ce(this.encoder,t.documentName),oe(this.encoder,this.type),this.encoder}}class Be extends Ee{constructor(t){super(),this.messageQueue=[],this.configuration={url:"",autoConnect:!0,preserveTrailingSlash:!1,document:void 0,WebSocketPolyfill:void 0,messageReconnectTimeout:3e4,delay:1e3,initialDelay:0,factor:2,maxAttempts:0,minDelay:1e3,maxDelay:3e4,jitter:!0,timeout:0,onOpen:()=>null,onConnect:()=>null,onMessage:()=>null,onOutgoingMessage:()=>null,onStatus:()=>null,onDisconnect:()=>null,onClose:()=>null,onDestroy:()=>null,onAwarenessUpdate:()=>null,onAwarenessChange:()=>null,handleTimeout:null,providerMap:new Map},this.webSocket=null,this.webSocketHandlers={},this.shouldConnect=!0,this.status=De.Disconnected,this.lastMessageReceived=0,this.identifier=0,this.intervals={connectionChecker:null},this.connectionAttempt=null,this.receivedOnOpenPayload=void 0,this.closeTries=0,this.setConfiguration(t),this.configuration.WebSocketPolyfill=t.WebSocketPolyfill?t.WebSocketPolyfill:WebSocket,this.on("open",this.configuration.onOpen),this.on("open",this.onOpen.bind(this)),this.on("connect",this.configuration.onConnect),this.on("message",this.configuration.onMessage),this.on("outgoingMessage",this.configuration.onOutgoingMessage),this.on("status",this.configuration.onStatus),this.on("disconnect",this.configuration.onDisconnect),this.on("close",this.configuration.onClose),this.on("destroy",this.configuration.onDestroy),this.on("awarenessUpdate",this.configuration.onAwarenessUpdate),this.on("awarenessChange",this.configuration.onAwarenessChange),this.on("close",this.onClose.bind(this)),this.on("message",this.onMessage.bind(this)),this.intervals.connectionChecker=setInterval(this.checkConnection.bind(this),this.configuration.messageReconnectTimeout/10),this.shouldConnect&&this.connect()}async onOpen(t){this.status=De.Connected,this.emit("status",{status:De.Connected}),this.cancelWebsocketRetry=void 0,this.receivedOnOpenPayload=t}attach(t){this.configuration.providerMap.set(t.configuration.name,t),this.status===De.Disconnected&&this.shouldConnect&&this.connect(),this.receivedOnOpenPayload&&this.status===De.Connected&&t.onOpen(this.receivedOnOpenPayload)}detach(t){this.configuration.providerMap.has(t.configuration.name)&&(t.send(Me,{documentName:t.configuration.name}),this.configuration.providerMap.delete(t.configuration.name))}setConfiguration(t={}){this.configuration={...this.configuration,...t},this.configuration.autoConnect||(this.shouldConnect=!1)}async connect(){if(this.status===De.Connected)return;this.cancelWebsocketRetry&&(this.cancelWebsocketRetry(),this.cancelWebsocketRetry=void 0),this.receivedOnOpenPayload=void 0,this.shouldConnect=!0;const{retryPromise:t,cancelFunc:e}=(()=>{let t=!1;return{retryPromise:async function(t,e){const s=function(t){return t||(t={}),{delay:void 0===t.delay?200:t.delay,initialDelay:void 0===t.initialDelay?0:t.initialDelay,minDelay:void 0===t.minDelay?0:t.minDelay,maxDelay:void 0===t.maxDelay?0:t.maxDelay,factor:void 0===t.factor?0:t.factor,maxAttempts:void 0===t.maxAttempts?3:t.maxAttempts,timeout:void 0===t.timeout?0:t.timeout,jitter:!0===t.jitter,initialJitter:!0===t.initialJitter,handleError:void 0===t.handleError?null:t.handleError,handleTimeout:void 0===t.handleTimeout?null:t.handleTimeout,beforeAttempt:void 0===t.beforeAttempt?null:t.beforeAttempt,calculateDelay:void 0===t.calculateDelay?null:t.calculateDelay}}(e);for(const t of["delay","initialDelay","minDelay","maxDelay","maxAttempts","timeout"]){const e=s[t];if(!Number.isInteger(e)||e<0)throw Error(`Value for ${t} must be an integer greater than or equal to 0`)}if(s.factor.constructor!==Number||s.factor<0)throw Error("Value for factor must be a number greater than or equal to 0");if(s.delay<s.minDelay)throw Error(`delay cannot be less than minDelay (delay: ${s.delay}, minDelay: ${s.minDelay}`);const i={attemptNum:0,attemptsRemaining:s.maxAttempts?s.maxAttempts:-1,aborted:!1,abort(){i.aborted=!0}},n=s.calculateDelay||qt,o=s.calculateDelay?s.calculateDelay(i,s):s.initialDelay;if(o&&await Jt(o),i.attemptNum<1&&s.initialJitter){const t=n(i,s);t&&await Jt(t)}return async function e(){if(s.beforeAttempt&&s.beforeAttempt(i,s),i.aborted){const t=Error("Attempt aborted");throw t.code="ATTEMPT_ABORTED",t}const o=async t=>{if(s.handleError&&await s.handleError(t,i,s),i.aborted||0===i.attemptsRemaining)throw t;i.attemptNum++;const o=n(i,s);return o&&await Jt(o),e()};return i.attemptsRemaining>0&&i.attemptsRemaining--,s.timeout?new Promise(((e,n)=>{const r=setTimeout((()=>{if(s.handleTimeout)try{e(s.handleTimeout(i,s))}catch(t){n(t)}else{const t=Error(`Retry timeout (attemptNum: ${i.attemptNum}, timeout: ${s.timeout})`);t.code="ATTEMPT_TIMEOUT",n(t)}}),s.timeout);t(i,s).then((t=>{clearTimeout(r),e(t)})).catch((t=>{clearTimeout(r),o(t).then(e).catch(n)}))})):t(i,s).catch(o)}()}(this.createWebSocketConnection.bind(this),{delay:this.configuration.delay,initialDelay:this.configuration.initialDelay,factor:this.configuration.factor,maxAttempts:this.configuration.maxAttempts,minDelay:this.configuration.minDelay,maxDelay:this.configuration.maxDelay,jitter:this.configuration.jitter,timeout:this.configuration.timeout,handleTimeout:this.configuration.handleTimeout,beforeAttempt:e=>{this.shouldConnect&&!t||e.abort()}}).catch((t=>{if(t&&"ATTEMPT_ABORTED"!==t.code)throw t})),cancelFunc:()=>{t=!0}}})();return this.cancelWebsocketRetry=e,t}attachWebSocketListeners(t,e){const{identifier:s}=t;this.webSocketHandlers[s]={message:t=>this.emit("message",t),close:t=>this.emit("close",{event:t}),open:t=>this.emit("open",t),error:t=>{e(t)}};const i=this.webSocketHandlers[t.identifier];Object.keys(i).forEach((e=>{t.addEventListener(e,i[e])}))}cleanupWebSocket(){if(!this.webSocket)return;const{identifier:t}=this.webSocket,e=this.webSocketHandlers[t];Object.keys(e).forEach((s=>{var i;null===(i=this.webSocket)||void 0===i||i.removeEventListener(s,e[s]),delete this.webSocketHandlers[t]})),this.webSocket.close(),this.webSocket=null}createWebSocketConnection(){return new Promise(((t,e)=>{this.webSocket&&(this.messageQueue=[],this.cleanupWebSocket()),this.lastMessageReceived=0,this.identifier+=1;const s=new this.configuration.WebSocketPolyfill(this.url);s.binaryType="arraybuffer",s.identifier=this.identifier,this.attachWebSocketListeners(s,e),this.webSocket=s,this.status=De.Connecting,this.emit("status",{status:De.Connecting}),this.connectionAttempt={resolve:t,reject:e}}))}onMessage(t){var e;this.resolveConnectionAttempt(),this.lastMessageReceived=ke();const s=new Oe(t.data).peekVarString();null===(e=this.configuration.providerMap.get(s))||void 0===e||e.onMessage(t)}resolveConnectionAttempt(){this.connectionAttempt&&(this.connectionAttempt.resolve(),this.connectionAttempt=null,this.status=De.Connected,this.emit("status",{status:De.Connected}),this.emit("connect"),this.messageQueue.forEach((t=>this.send(t))),this.messageQueue=[])}stopConnectionAttempt(){this.connectionAttempt=null}rejectConnectionAttempt(){var t;null===(t=this.connectionAttempt)||void 0===t||t.reject(),this.connectionAttempt=null}checkConnection(){var t;this.status===De.Connected&&this.lastMessageReceived&&(this.configuration.messageReconnectTimeout>=ke()-this.lastMessageReceived||(this.closeTries+=1,this.closeTries>2?(this.onClose({event:{code:4408,reason:"forced"}}),this.closeTries=0):(null===(t=this.webSocket)||void 0===t||t.close(),this.messageQueue=[])))}get serverUrl(){if(this.configuration.preserveTrailingSlash)return this.configuration.url;let t=this.configuration.url;for(;"/"===t[t.length-1];)t=t.slice(0,t.length-1);return t}get url(){return this.serverUrl}disconnect(){if(this.shouldConnect=!1,null!==this.webSocket)try{this.webSocket.close(),this.messageQueue=[]}catch(t){console.error(t)}}send(t){var e;(null===(e=this.webSocket)||void 0===e?void 0:e.readyState)===Ft.Open?this.webSocket.send(t):this.messageQueue.push(t)}onClose({event:t}){this.closeTries=0,this.cleanupWebSocket(),this.connectionAttempt&&this.rejectConnectionAttempt(),this.status=De.Disconnected,this.emit("status",{status:De.Disconnected}),this.emit("disconnect",{event:t}),!this.cancelWebsocketRetry&&this.shouldConnect&&setTimeout((()=>{this.connect()}),this.configuration.delay)}destroy(){this.emit("destroy"),clearInterval(this.intervals.connectionChecker),this.stopConnectionAttempt(),this.disconnect(),this.removeAllListeners(),this.cleanupWebSocket()}}const Re=(t,e,s)=>{try{U.applyUpdate(e,ge(t),s)}catch(t){console.error("Caught error while handling a Yjs update",t)}},Pe=Re;class We{constructor(t){this.message=t}apply(t,e){const{message:s}=this,i=s.readVarUint(),n=s.length();switch(i){case Ie.Sync:this.applySyncMessage(t,e);break;case Ie.Awareness:this.applyAwarenessMessage(t);break;case Ie.Auth:this.applyAuthMessage(t);break;case Ie.QueryAwareness:this.applyQueryAwarenessMessage(t);break;case Ie.Stateless:t.receiveStateless(ye(s.decoder));break;case Ie.SyncStatus:this.applySyncStatusMessage(t,1===(t=>{let e=t.arr[t.pos++],s=63&e,i=64;const n=(64&e)>0?-1:1;if(!(e&Ht))return n*s;const o=t.arr.length;for(;t.pos<o;){if(e=t.arr[t.pos++],s+=(e&Kt)*i,i*=128,e<Ht)return n*s;if(s>Yt)throw ue}throw de})(s.decoder));break;case Ie.CLOSE:const n={code:1e3,reason:ye(s.decoder),target:t.configuration.websocketProvider.webSocket,type:"close"};t.onClose(),t.configuration.onClose({event:n}),t.forwardClose({event:n});break;default:throw Error("Can’t apply message of unknown type: "+i)}s.length()>n+1&&t.send(Ue,{encoder:s.encoder})}applySyncMessage(t,e){const{message:s}=this;s.writeVarUint(Ie.Sync);const i=((t,e,s,i)=>{const n=be(t);switch(n){case 0:((t,e,s)=>{((t,e,s)=>{oe(t,1),he(t,U.encodeStateAsUpdate(e,s))})(e,s,ge(t))})(t,e,s);break;case 1:Re(t,s,i);break;case 2:Pe(t,s,i);break;default:throw Error("Unknown message type")}return n})(s.decoder,s.encoder,t.document,t);e&&1===i&&(t.synced=!0)}applySyncStatusMessage(t,e){e&&t.decrementUnsyncedChanges()}applyAwarenessMessage(t){if(!t.awareness)return;const{message:e}=this;((t,e,s)=>{const i=me(e),n=ke(),o=[],r=[],a=[],c=[],h=be(i);for(let e=0;e<h;e++){const e=be(i);let s=be(i);const h=JSON.parse(ye(i)),l=t.meta.get(e),d=t.states.get(e),u=void 0===l?0:l.clock;(u<s||u===s&&null===h&&t.states.has(e))&&(null===h?e===t.clientID&&null!=t.getLocalState()?s++:t.states.delete(e):t.states.set(e,h),t.meta.set(e,{clock:s,lastUpdated:n}),void 0===l&&null!==h?o.push(e):void 0!==l&&null===h?c.push(e):null!==h&&(Ae(h,d)||a.push(e),r.push(e)))}(o.length>0||a.length>0||c.length>0)&&t.emit("change",[{added:o,updated:a,removed:c},s]),(o.length>0||r.length>0||c.length>0)&&t.emit("update",[{added:o,updated:r,removed:c},s])})(t.awareness,e.readVarUint8Array(),t)}applyAuthMessage(t){const{message:e}=this;((t,e,s,i)=>{switch(Wt(t)){case Lt.Token:e();break;case Lt.PermissionDenied:s(Vt(t));break;case Lt.Authenticated:i(Vt(t))}})(e.decoder,t.sendToken.bind(t),t.permissionDeniedHandler.bind(t),t.authenticatedHandler.bind(t))}applyQueryAwarenessMessage(t){if(!t.awareness)return;const{message:e}=this;e.writeVarUint(Ie.Awareness),e.writeVarUint8Array(Se(t.awareness,Array.from(t.awareness.getStates().keys())))}}class Ve{constructor(t,e={}){this.message=new t,this.encoder=this.message.get(e)}create(){return ie(this.encoder)}send(t){null==t||t.send(this.create())}}class Le extends Ue{constructor(){super(...arguments),this.type=Ie.Auth,this.description="Authentication"}get(t){if(void 0===t.token)throw Error("The authentication message requires `token` as an argument.");return ce(this.encoder,t.documentName),oe(this.encoder,this.type),((t,e)=>{Et(t,Lt.Token),Dt(t,e)})(this.encoder,t.token),this.encoder}}class Ne extends Ue{constructor(){super(...arguments),this.type=Ie.Awareness,this.description="Awareness states update"}get(t){if(void 0===t.awareness)throw Error("The awareness message requires awareness as an argument");if(void 0===t.clients)throw Error("The awareness message requires clients as an argument");let e;return ce(this.encoder,t.documentName),oe(this.encoder,this.type),e=void 0===t.states?Se(t.awareness,t.clients):Se(t.awareness,t.clients,t.states),he(this.encoder,e),this.encoder}}class Fe extends Ue{constructor(){super(...arguments),this.type=Ie.Stateless,this.description="A stateless message"}get(t){var e;return ce(this.encoder,t.documentName),oe(this.encoder,this.type),ce(this.encoder,null!==(e=t.payload)&&void 0!==e?e:""),this.encoder}}class Je extends Ue{constructor(){super(...arguments),this.type=Ie.Sync,this.description="First sync step"}get(t){if(void 0===t.document)throw Error("The sync step one message requires document as an argument");return ce(this.encoder,t.documentName),oe(this.encoder,this.type),((t,e)=>{oe(t,0);const s=U.encodeStateVector(e);he(t,s)})(this.encoder,t.document),this.encoder}}class qe extends Ue{constructor(){super(...arguments),this.type=Ie.Sync,this.description="A document update"}get(t){return ce(this.encoder,t.documentName),oe(this.encoder,this.type),((t,e)=>{oe(t,2),he(t,e)})(this.encoder,t.update),this.encoder}}class Ze extends Error{constructor(){super(...arguments),this.code=1001}}class He extends Ee{constructor(t){var e,s,i;super(),this.configuration={name:"",document:void 0,awareness:void 0,token:null,forceSyncInterval:!1,onAuthenticated:()=>null,onAuthenticationFailed:()=>null,onOpen:()=>null,onConnect:()=>null,onMessage:()=>null,onOutgoingMessage:()=>null,onSynced:()=>null,onStatus:()=>null,onDisconnect:()=>null,onClose:()=>null,onDestroy:()=>null,onAwarenessUpdate:()=>null,onAwarenessChange:()=>null,onStateless:()=>null,onUnsyncedChanges:()=>null},this.isSynced=!1,this.unsyncedChanges=0,this.isAuthenticated=!1,this.authorizedScope=void 0,this.manageSocket=!1,this._isAttached=!1,this.intervals={forceSync:null},this.boundDocumentUpdateHandler=this.documentUpdateHandler.bind(this),this.boundAwarenessUpdateHandler=this.awarenessUpdateHandler.bind(this),this.boundPageHide=this.pageHide.bind(this),this.boundOnOpen=this.onOpen.bind(this),this.boundOnClose=this.onClose.bind(this),this.forwardConnect=()=>this.emit("connect"),this.forwardStatus=t=>this.emit("status",t),this.forwardClose=t=>this.emit("close",t),this.forwardDisconnect=t=>this.emit("disconnect",t),this.forwardDestroy=()=>this.emit("destroy"),this.setConfiguration(t),this.configuration.document=t.document?t.document:new U.Doc,this.configuration.awareness=void 0!==t.awareness?t.awareness:new xe(this.document),this.on("open",this.configuration.onOpen),this.on("message",this.configuration.onMessage),this.on("outgoingMessage",this.configuration.onOutgoingMessage),this.on("synced",this.configuration.onSynced),this.on("destroy",this.configuration.onDestroy),this.on("awarenessUpdate",this.configuration.onAwarenessUpdate),this.on("awarenessChange",this.configuration.onAwarenessChange),this.on("stateless",this.configuration.onStateless),this.on("unsyncedChanges",this.configuration.onUnsyncedChanges),this.on("authenticated",this.configuration.onAuthenticated),this.on("authenticationFailed",this.configuration.onAuthenticationFailed),null===(e=this.awareness)||void 0===e||e.on("update",(()=>{this.emit("awarenessUpdate",{states:Nt(this.awareness.getStates())})})),null===(s=this.awareness)||void 0===s||s.on("change",(()=>{this.emit("awarenessChange",{states:Nt(this.awareness.getStates())})})),this.document.on("update",this.boundDocumentUpdateHandler),null===(i=this.awareness)||void 0===i||i.on("update",this.boundAwarenessUpdateHandler),this.registerEventListeners(),this.configuration.forceSyncInterval&&"number"==typeof this.configuration.forceSyncInterval&&(this.intervals.forceSync=setInterval(this.forceSync.bind(this),this.configuration.forceSyncInterval)),this.manageSocket&&this.attach()}setConfiguration(t={}){t.websocketProvider||(this.manageSocket=!0,this.configuration.websocketProvider=new Be(t)),this.configuration={...this.configuration,...t}}get document(){return this.configuration.document}get isAttached(){return this._isAttached}get awareness(){return this.configuration.awareness}get hasUnsyncedChanges(){return this.unsyncedChanges>0}resetUnsyncedChanges(){this.unsyncedChanges=1,this.emit("unsyncedChanges",{number:this.unsyncedChanges})}incrementUnsyncedChanges(){this.unsyncedChanges+=1,this.emit("unsyncedChanges",{number:this.unsyncedChanges})}decrementUnsyncedChanges(){this.unsyncedChanges>0&&(this.unsyncedChanges-=1),0===this.unsyncedChanges&&(this.synced=!0),this.emit("unsyncedChanges",{number:this.unsyncedChanges})}forceSync(){this.resetUnsyncedChanges(),this.send(Je,{document:this.document,documentName:this.configuration.name})}pageHide(){this.awareness&&Te(this.awareness,[this.document.clientID],"page hide")}registerEventListeners(){"undefined"!=typeof window&&"addEventListener"in window&&window.addEventListener("pagehide",this.boundPageHide)}sendStateless(t){this.send(Fe,{documentName:this.configuration.name,payload:t})}async sendToken(){let t;try{t=await this.getToken()}catch(t){return void this.permissionDeniedHandler("Failed to get token during sendToken(): "+t)}this.send(Le,{token:null!=t?t:"",documentName:this.configuration.name})}documentUpdateHandler(t,e){e!==this&&(this.incrementUnsyncedChanges(),this.send(qe,{update:t,documentName:this.configuration.name}))}awarenessUpdateHandler({added:t,updated:e,removed:s},i){const n=t.concat(e).concat(s);this.send(Ne,{awareness:this.awareness,clients:n,documentName:this.configuration.name})}get synced(){return this.isSynced}set synced(t){this.isSynced!==t&&(this.isSynced=t,t&&this.emit("synced",{state:t}))}receiveStateless(t){this.emit("stateless",{payload:t})}async connect(){if(this.manageSocket)return this.configuration.websocketProvider.connect();console.warn("HocuspocusProvider::connect() is deprecated and does not do anything. Please connect/disconnect on the websocketProvider, or attach/deattach providers.")}disconnect(){if(this.manageSocket)return this.configuration.websocketProvider.disconnect();console.warn("HocuspocusProvider::disconnect() is deprecated and does not do anything. Please connect/disconnect on the websocketProvider, or attach/deattach providers.")}async onOpen(t){this.isAuthenticated=!1,this.emit("open",{event:t}),await this.sendToken(),this.startSync()}async getToken(){return"function"==typeof this.configuration.token?await this.configuration.token():this.configuration.token}startSync(){this.resetUnsyncedChanges(),this.send(Je,{document:this.document,documentName:this.configuration.name}),this.awareness&&null!==this.awareness.getLocalState()&&this.send(Ne,{awareness:this.awareness,clients:[this.document.clientID],documentName:this.configuration.name})}send(t,e){if(!this._isAttached)return;const s=new Ve(t,e);this.emit("outgoingMessage",{message:s.message}),s.send(this.configuration.websocketProvider)}onMessage(t){const e=new Oe(t.data),s=e.readVarString();e.writeVarString(s),this.emit("message",{event:t,message:new Oe(t.data)}),new We(e).apply(this,!0)}onClose(){this.isAuthenticated=!1,this.synced=!1,this.awareness&&Te(this.awareness,Array.from(this.awareness.getStates().keys()).filter((t=>t!==this.document.clientID)),this)}destroy(){this.emit("destroy"),this.intervals.forceSync&&clearInterval(this.intervals.forceSync),this.awareness&&(Te(this.awareness,[this.document.clientID],"provider destroy"),this.awareness.off("update",this.boundAwarenessUpdateHandler),this.awareness.destroy()),this.document.off("update",this.boundDocumentUpdateHandler),this.removeAllListeners(),this.detach(),this.manageSocket&&this.configuration.websocketProvider.destroy(),"undefined"!=typeof window&&"removeEventListener"in window&&window.removeEventListener("pagehide",this.boundPageHide)}detach(){this.configuration.websocketProvider.off("connect",this.configuration.onConnect),this.configuration.websocketProvider.off("connect",this.forwardConnect),this.configuration.websocketProvider.off("status",this.forwardStatus),this.configuration.websocketProvider.off("status",this.configuration.onStatus),this.configuration.websocketProvider.off("open",this.boundOnOpen),this.configuration.websocketProvider.off("close",this.boundOnClose),this.configuration.websocketProvider.off("close",this.configuration.onClose),this.configuration.websocketProvider.off("close",this.forwardClose),this.configuration.websocketProvider.off("disconnect",this.configuration.onDisconnect),this.configuration.websocketProvider.off("disconnect",this.forwardDisconnect),this.configuration.websocketProvider.off("destroy",this.configuration.onDestroy),this.configuration.websocketProvider.off("destroy",this.forwardDestroy),this.configuration.websocketProvider.detach(this),this._isAttached=!1}attach(){this._isAttached||(this.configuration.websocketProvider.on("connect",this.configuration.onConnect),this.configuration.websocketProvider.on("connect",this.forwardConnect),this.configuration.websocketProvider.on("status",this.configuration.onStatus),this.configuration.websocketProvider.on("status",this.forwardStatus),this.configuration.websocketProvider.on("open",this.boundOnOpen),this.configuration.websocketProvider.on("close",this.boundOnClose),this.configuration.websocketProvider.on("close",this.configuration.onClose),this.configuration.websocketProvider.on("close",this.forwardClose),this.configuration.websocketProvider.on("disconnect",this.configuration.onDisconnect),this.configuration.websocketProvider.on("disconnect",this.forwardDisconnect),this.configuration.websocketProvider.on("destroy",this.configuration.onDestroy),this.configuration.websocketProvider.on("destroy",this.forwardDestroy),this.configuration.websocketProvider.attach(this),this._isAttached=!0)}permissionDeniedHandler(t){this.emit("authenticationFailed",{reason:t}),this.isAuthenticated=!1}authenticatedHandler(t){this.isAuthenticated=!0,this.authorizedScope=t,this.emit("authenticated",{scope:t})}setAwarenessField(t,e){if(!this.awareness)throw new Ze(`Cannot set awareness field "${t}" to ${JSON.stringify(e)}. You have disabled Awareness for this provider by explicitly passing awareness: null in the provider configuration.`);this.awareness.setLocalStateField(t,e)}}const Ke={type:"pen",color:j[0],size:16,opacity:1,palettes:{pen:[...j]},sizes:{pen:[...c]}},Ye={color:j[0],size:8,opacity:1,fontFamily:"Arial",palette:[...j],sizes:[...h]},Ge={color:j[0],size:4,opacity:1,palette:[...j],sizes:[...c],arrows:{end:{enabled:!0,style:"triangle"}}},_e={providers:[]},$e={shapeType:l.Rectangle,fillColor:{light:"transparent",dark:"transparent"},strokeColor:j[0],strokeWidth:4,opacity:1,fontColor:j[0],fontSize:16,fontFamily:"Arial",palette:[...j],sizes:[...c]},Qe=t(class extends e{constructor(t){super(),!1!==t&&this.__registerHost(),this.isReady=s(this,"isReady"),this.activeWorkspaceChange=s(this,"activeWorkspaceChange"),this.objectsChange=s(this,"objectsChange"),this.objectsAdded=s(this,"objectsAdded"),this.objectsRemoved=s(this,"objectsRemoved"),this.objectsUpdated=s(this,"objectsUpdated"),this.undoStateChange=s(this,"undoStateChange"),this.themeChange=s(this,"themeChange"),this.localeChange=s(this,"localeChange"),this.viewportChange=s(this,"viewportChange"),this.logout=s(this,"logout"),this.login=s(this,"login"),this.isPublicChange=s(this,"isPublicChange"),this.awarenessChange=s(this,"awarenessChange")}get host(){return this}scaleMax=S;scaleMin=E;lockDrawingScale=!0;viewportBoundaryLeft=-1/0;viewportBoundaryRight=1/0;viewportBoundaryTop=-1/0;viewportBoundaryBottom=1/0;debugInfo={showViewportInfo:!1,showObjectInfo:!1,showSyncProviderInfo:!0,showMigrationInfo:!0,showAssetResolverInfo:!1};user;activeUsers;controls=[{name:"selection",type:"tool",isDefault:!0,tool:d,icon:"cursor"},{name:"brush",type:"tool",tool:f,icon:"pen",config:Ke},{name:"eraser",type:"tool",tool:b,icon:"eraser"},{name:"line",type:"tool",tool:y,icon:"arrow",config:Ge},{name:"shape",type:"tool",tool:k,icon:"shape-rectangle",config:$e,subOptions:[{id:"rectangle",icon:"shape-rectangle",label:"Rectangle",value:l.Rectangle,toolProperty:"shapeType"},{id:"ellipse",icon:"shape-ellipse",label:"Ellipse",value:l.Ellipse,toolProperty:"shapeType"},{id:"triangle",icon:"shape-triangle",label:"Triangle",value:l.Triangle,toolProperty:"shapeType"}]},{name:"text",type:"tool",tool:u,icon:"type",config:Ye},{name:"image",type:"tool",tool:w,icon:"image"},{name:"config",type:"config"}];globalContextMenuItems=[{label:"menu.paste",icon:"paste",action:t=>this.engineRef.paste(t.x,t.y)},{label:"menu.selectAll",icon:"select-all",action:()=>this.selectAllObjectsInViewport()}];objectContextMenuItems=[{label:"menu.copy",icon:"copy",group:"clipboard",action:()=>this.engineRef.copy()},{label:"menu.cut",icon:"cut",group:"clipboard",action:()=>this.engineRef.cut()},{label:"menu.paste",icon:"paste",group:"clipboard",action:t=>this.engineRef.paste(t.x,t.y)},{label:"menu.order",icon:"ordering",group:"other",children:[{label:"menu.bringToFront",icon:"bring-to-front",action:()=>this.engineRef.bringToFront()},{label:"menu.sendToBack",icon:"send-to-back",action:()=>this.engineRef.sendToBack()},{label:"menu.moveUp",icon:"arrow-up-from-dot",action:()=>this.engineRef.bringForward()},{label:"menu.moveDown",icon:"arrow-down-from-dot",action:()=>this.engineRef.sendBackward()}]},{label:"menu.align",icon:"align",group:"other",children:[{label:"menu.alignLeft",icon:"align-start-vertical",action:()=>this.engineRef.alignObjects(v.StartHorizontal)},{label:"menu.alignCenterHorizontal",icon:"align-center-horizontal",action:()=>this.engineRef.alignObjects(v.CenterHorizontal)},{label:"menu.alignRight",icon:"align-end-vertical",action:()=>this.engineRef.alignObjects(v.EndHorizontal)},{label:"menu.alignTop",icon:"align-start-horizontal",action:()=>this.engineRef.alignObjects(v.StartVertical)},{label:"menu.alignCenterVertical",icon:"align-center-vertical",action:()=>this.engineRef.alignObjects(v.CenterVertical)},{label:"menu.alignBottom",icon:"align-end-horizontal",action:()=>this.engineRef.alignObjects(v.EndVertical)}]},{label:"menu.group",icon:"group",group:"other",children:[{label:"menu.group",icon:"group",action:()=>this.engineRef.group()},{label:"menu.ungroup",icon:"ungroup",action:()=>this.engineRef.ungroup()}]},{label:"menu.export",icon:"download",group:"export",children:[{label:"menu.exportAsSvg",icon:"download",action:()=>this.engineRef.exportSelectedObjectsAsSvg()},{label:"menu.exportAsPng",icon:"download",action:()=>this.engineRef.exportSelectedObjectsAsPng()}]},{label:"menu.delete",icon:"delete",group:"edit",action:()=>this.engineRef.delete()}];themes;theme="light";licenseKey;locale="en";locales;fallbackLocale="en";customSvgIcons={};isPanningEnabled=!0;isZoomingEnabled=!0;isControlsVisible=!0;isUtilityPanelVisible=!0;isWorkspaceManagerVisible=!0;isMoreMenuVisible=!0;isZoomPanelVisible=!0;isObjectDistanceFadingActive=!1;syncConfig=z;assetStorageConfig=_e;cursorTarget;loginConfig;isLoading=!1;editorId;activeWorkspaceId;isReady;activeWorkspaceChange;objectsChange;objectsAdded;objectsRemoved;objectsUpdated;undoStateChange;themeChange;localeChange;viewportChange;logout;login;isPublicChange;awarenessChange;isEngineReady=!1;isControlsReady=!1;isWorkspaceManagerReady=!1;workspaces=[];activeWorkspace;isVirtualKeyboardOpen=!1;undoState=null;isBackToContentButtonVisible=!1;resolvedTerms={};availableLocaleOptions=[];currentZoomPercent=100;shortcuts=[];currentIsPublic=!1;isEditorVisible=!1;activeNotification;isNotificationDismissing=!1;notificationDismissTimeout;notificationDismissAnimationTimeout;notificationDisplayDurationMs=5e3;notificationDismissAnimationDurationMs=180;isNotificationHovered=!1;onIsEngineReady(t){t&&this.isControlsReady&&this.checkIsReady()}onIsControlsReady(t){t&&this.isEngineReady&&this.checkIsReady()}onWorkspacesChange(t){const e=this.activeWorkspace;if(e){const s=t.find((t=>t.id===e.id));s&&s!==e&&(this.activeWorkspace=s)}if(this.activeWorkspaceId){const e=t.find((t=>t.id===this.activeWorkspaceId));e&&e!==this.activeWorkspace&&(this.activeWorkspace=e)}}onActiveWorkspaceChange(){this.updateCurrentIsPublic()}onActiveWorkspaceIdChange(t){if(!t)return;if(0===this.workspaces.length)return;const e=this.workspaces.find((e=>e.id===t));e?e!==this.activeWorkspace&&(this.activeWorkspace=e):console.warn("[KritzelEditor] No workspace found with ID: "+t)}onCurrentThemeChange(){this.applyTheme(),setTimeout((()=>this.setOsSpecificCssVariables()),0),this.engineRef&&this.engineRef.saveSettings(this.currentSettingsConfig)}onThemesChange(){this.applyTheme()}onLocaleChange(t){this.engineRef&&(this.engineRef.setLocale(t),this.engineRef.saveSettings(this.currentSettingsConfig),this.refreshLocalizedTerms())}async refreshLocalizedTerms(){this.engineRef&&(this.resolvedTerms=await this.engineRef.getResolvedTerms(),this.availableLocaleOptions=await this.engineRef.getAvailableLocaleOptions())}onTouchStart(t){t.cancelable&&t.preventDefault()}async getObjectById(t){return this.engineRef.getObjectById(t)}async addObject(t){return this.engineRef.addObject(t)}async addObjects(t){return this.engineRef.addObjects(t)}async updateObject(t,e){return this.engineRef.updateObject(t,e)}async removeObject(t){return this.engineRef.removeObject(t)}async removeObjects(t){return this.engineRef.removeObjects(t)}async getSelectedObjects(){return this.engineRef.getSelectedObjects()}async selectObjects(t){return this.engineRef.selectObjects(t)}async selectAllObjectsInViewport(){return this.engineRef.selectAllObjectsInViewport()}async clearSelection(){this.engineRef.clearSelection()}async centerObjectInViewport(t){return this.engineRef.centerObjectInViewport(t)}async panToObject(t){return this.engineRef.panToObject(t)}async backToContent(){return this.engineRef.backToContent()}async centerAllObjects(t=!0){return this.engineRef.centerAllObjects(t)}async centerObjects(t,e=!0){return this.engineRef.centerObjects(t,e)}async setViewport(t,e,s){return this.engineRef.setViewport(t,e,s)}async panTo(t,e){return this.engineRef.panTo(t,e)}async zoomTo(t,e,s){return this.engineRef.zoomTo(t,e,s)}async zoomIn(t=1.6,e=200){return this.engineRef.zoomIn(t,e)}async zoomOut(t=1.6,e=200){return this.engineRef.zoomOut(t,e)}async getViewport(){return this.engineRef.getViewport()}async screenToWorld(t,e){return this.engineRef.screenToWorld(t,e)}async worldToScreen(t,e){return this.engineRef.worldToScreen(t,e)}async createWorkspace(t){return this.engineRef.createWorkspace(t)}async updateWorkspace(t){return this.engineRef.updateWorkspace(t)}async deleteWorkspace(t){return this.engineRef.deleteWorkspace(t)}async getWorkspaces(){return this.engineRef.getWorkspaces()}async getActiveWorkspace(){return this.engineRef.getActiveWorkspace()}async loadSharedWorkspace(t){return this.engineRef.loadSharedWorkspace(t)}async reinitSync(){return this.engineRef.reinitSync()}async registerTool(t,e,s){return this.engineRef.registerTool(t,e,s)}async changeActiveTool(t){return this.engineRef.changeActiveTool(t)}async changeActiveToolByName(t){return this.engineRef.changeActiveToolByName(t)}async disable(){return this.engineRef.disable()}async enable(){return this.engineRef.enable()}async copy(){return this.engineRef.copy()}async cut(){return this.engineRef.cut()}async paste(t,e){return this.engineRef.paste(t,e)}async delete(){return this.engineRef.delete()}async bringForward(t){return this.engineRef.bringForward(t)}async sendBackward(t){return this.engineRef.sendBackward(t)}async bringToFront(t){return this.engineRef.bringToFront(t)}async sendToBack(t){return this.engineRef.sendToBack(t)}async alignObjects(t){return this.engineRef.alignObjects(t)}async group(){return this.engineRef.group()}async ungroup(){return this.engineRef.ungroup()}async undo(){return this.engineRef.undo()}async redo(){return this.engineRef.redo()}async getScreenshot(t="png",e){return this.engineRef.getScreenshot(t,e)}async exportViewportAsPng(t){return this.engineRef.exportViewportAsPng(t)}async exportViewportAsSvg(t){return this.engineRef.exportViewportAsSvg(t)}async exportSelectedObjectsAsPng(){return this.engineRef.exportSelectedObjectsAsPng()}async exportSelectedObjectsAsSvg(){return this.engineRef.exportSelectedObjectsAsSvg()}async downloadAsJson(t){return this.engineRef.downloadAsJson(t)}async importFromFile(){return this.engineRef.importFromFile()}async loadObjectsFromJson(t){return this.engineRef.loadObjectsFromJson(t)}async getObjectsTotalCount(){return this.engineRef.getObjectsTotalCount()}async getAllObjects(){return this.engineRef.getAllObjects()}async findObjects(t){return this.engineRef.findObjects(t)}async getObjectsInViewport(){return this.engineRef.getObjectsInViewport()}async hideContextMenu(){return this.engineRef.hideContextMenu()}async openContextMenu(t){return this.engineRef.openContextMenu(t)}async triggerSelectionChange(){return this.engineRef.triggerSelectionChange()}async getDisplayableShortcuts(){return this.engineRef.getDisplayableShortcuts()}async triggerNotification(t){const e={...t,id:t.id??D.generateUUID(),timestamp:t.timestamp??new Date};this.clearNotificationDismissAnimationTimer(),this.isNotificationDismissing=!1,this.isNotificationHovered=!1,this.activeNotification=e,this.scheduleNotificationDismiss()}engineRef;controlsRef;settingsRef;exportRef;splitButtonRef;shareDialogRef;loginDialogRef;currentUserDialogRef;componentWillLoad(){this.loadSettingsFromStorage(),this.applyTheme()}applyTheme(){const t=this.resolveThemeObject();A.applyThemeToElement(this.host,t)}resolveThemeObject(){return this.themes?.find((t=>t.name===this.theme))??("dark"===this.theme?x:T)}componentDidLoad(){this.registerCustomSvgIcons(),this.listenForMobileKeyboard(),this.setOsSpecificCssVariables()}disconnectedCallback(){this.clearNotificationDismissTimer(),this.clearNotificationDismissAnimationTimer()}async checkIsReady(){if(await customElements.whenDefined("kritzel-editor"),await customElements.whenDefined("kritzel-workspace-manager"),await customElements.whenDefined("kritzel-controls"),await customElements.whenDefined("kritzel-engine"),!(this.isEngineReady&&this.isControlsReady&&this.isWorkspaceManagerReady&&this.activeWorkspace))return;this.isEditorVisible=!0;const{id:t,name:e,isPublic:s,createdAt:i,updatedAt:n}=this.activeWorkspace;this.isReady.emit({host:this.host,activeWorkspace:{id:t,name:e,isPublic:s,createdAt:i,updatedAt:n},syncConfig:this.syncConfig,assetStorageConfig:this.assetStorageConfig,loginConfig:this.loginConfig,theme:this.theme})}async onEngineReady(t){if(this.isEngineReady=!0,!t.detail.activeWorkspace)return;this.activeWorkspace=t.detail.activeWorkspace,this.workspaces=t.detail.workspaces,this.currentIsPublic=await this.engineRef.getIsPublic(),await this.refreshLocalizedTerms();const e=await this.engineRef.getViewport();this.currentZoomPercent=this.getZoomPercentFromScale(e.scale),this.loadShortcuts()}handleWorkspacesChange(t){t.stopPropagation(),this.workspaces=t.detail}handleActiveWorkspaceChange(t){if(t.stopPropagation(),this.activeWorkspace=t.detail,!this.isEngineReady)return;const{id:e,name:s,isPublic:i,createdAt:n,updatedAt:o}=this.activeWorkspace;this.activeWorkspaceChange.emit({id:e,name:s,isPublic:i,createdAt:n,updatedAt:o})}handleObjectsChange(t){t.stopPropagation(),this.objectsChange.emit(t.detail)}handleObjectsAdded(t){t.stopPropagation(),this.objectsAdded.emit(t.detail)}handleObjectsRemoved(t){t.stopPropagation(),this.objectsRemoved.emit(t.detail)}handleObjectsUpdated(t){t.stopPropagation(),this.objectsUpdated.emit(t.detail)}handleUndoStateChange(t){t.stopPropagation(),this.undoStateChange.emit(t.detail),this.undoState=t.detail}async handleObjectsInViewportChange(t){t.stopPropagation();const e=this.getContentObjects(t.detail).length>0,s=this.getContentObjects(await this.engineRef.getAllObjects()).length>0;this.isBackToContentButtonVisible=!e&&s}handleViewportChange(t){t.stopPropagation(),this.currentZoomPercent=this.getZoomPercentFromScale(t.detail.scale),this.viewportChange.emit(t.detail)}getZoomPercentFromScale(t){return!Number.isFinite(t)||t<=0?100:Math.round(100*t)}handleAwarenessChange(t){t.stopPropagation(),this.awarenessChange.emit(t.detail)}handleNotificationsChange(t){t.stopPropagation(),this.clearNotificationDismissAnimationTimer(),this.isNotificationDismissing=!1,this.isNotificationHovered=!1,this.activeNotification=t.detail,this.scheduleNotificationDismiss()}handleNotificationHoverChange(t){t.stopPropagation(),this.isNotificationHovered=t.detail,this.isNotificationHovered?this.clearNotificationDismissTimer():this.activeNotification&&!this.isNotificationDismissing&&this.scheduleNotificationDismiss()}scheduleNotificationDismiss(){this.clearNotificationDismissTimer(),this.notificationDismissTimeout=setTimeout((()=>{this.dismissNotification()}),this.notificationDisplayDurationMs)}clearNotificationDismissTimer(){this.notificationDismissTimeout&&(clearTimeout(this.notificationDismissTimeout),this.notificationDismissTimeout=void 0)}clearNotificationDismissAnimationTimer(){this.notificationDismissAnimationTimeout&&(clearTimeout(this.notificationDismissAnimationTimeout),this.notificationDismissAnimationTimeout=void 0)}dismissNotification=()=>{this.clearNotificationDismissTimer(),this.isNotificationHovered=!1,this.activeNotification&&!this.isNotificationDismissing&&(this.isNotificationDismissing=!0,this.clearNotificationDismissAnimationTimer(),this.notificationDismissAnimationTimeout=setTimeout((()=>{this.activeNotification=void 0,this.isNotificationDismissing=!1,this.notificationDismissAnimationTimeout=void 0}),this.notificationDismissAnimationDurationMs))};handleSettingsChange(t){this.scaleMin=t.detail.scaleMin,this.scaleMax=t.detail.scaleMax,this.lockDrawingScale=t.detail.lockDrawingScale,this.theme=t.detail.theme,"string"==typeof t.detail.locale&&t.detail.locale!==this.locale&&(this.locale=t.detail.locale,this.localeChange.emit(t.detail.locale)),this.viewportBoundaryLeft=t.detail.viewportBoundaryLeft??-1/0,this.viewportBoundaryRight=t.detail.viewportBoundaryRight??1/0,this.viewportBoundaryTop=t.detail.viewportBoundaryTop??-1/0,this.viewportBoundaryBottom=t.detail.viewportBoundaryBottom??1/0,this.debugInfo=t.detail.debugInfo,this.engineRef&&this.engineRef.saveSettings(t.detail),this.themeChange.emit(t.detail.theme)}get moreMenuItems(){return[{id:"share",label:this.resolvedTerms["menu.share"]??"Share",icon:"share",action:()=>{this.isLoggedIn||!this.loginConfig?this.shareDialogRef.open():this.openLoginDialog()}},{id:"export",label:this.resolvedTerms["menu.export"]??"Export",icon:"upload",action:async()=>{const t=await this.engineRef.getScreenshot("png");this.exportRef.open(t??void 0)}},{id:"import",label:this.resolvedTerms["menu.import"]??"Import",icon:"download",action:()=>this.engineRef.importFromFile()},{id:"settings",label:this.resolvedTerms["menu.settings"]??"Settings",icon:"settings",action:()=>this.settingsRef.open()}]}handleToggleIsPublic=async t=>{const e=t.detail,s=await this.engineRef.getActiveWorkspace();s.isPublic=e,await this.engineRef.updateWorkspace(s),this.activeWorkspace=s.clone(),this.isPublicChange.emit({isPublic:e,workspaceId:s.id})};updateCurrentIsPublic(){const t=this.activeWorkspace?.isPublic??!1,e=this.activeWorkspace?.id;this.currentIsPublic=t,e&&this.isPublicChange.emit({isPublic:t,workspaceId:e})}handleProviderLogin=t=>{this.login.emit(t.detail)};handleCurrentUserLogout=()=>{this.logout.emit()};get isLoggedIn(){return!!this.user&&!this.user.isGuest}async openLoginDialog(){this.loginDialogRef?.open()}async setLoginLoading(t){this.loginDialogRef?.setLoading(t)}async setLocale(t){this.locale=t,await(this.engineRef?.setLocale(t))}async getLocale(){return this.engineRef?this.engineRef.getLocale():this.locale}async getAvailableLocales(){return this.engineRef?this.engineRef.getAvailableLocales():[]}async registerLocales(t){await(this.engineRef?.registerLocales(t))}async t(t,e){return this.engineRef?this.engineRef.t(t,e):t}getSettingsStorageKey(){return this.editorId?"kritzel-settings-"+this.editorId:"kritzel-settings"}loadSettingsFromStorage(){const t=localStorage.getItem(this.getSettingsStorageKey());if(t)try{const e=JSON.parse(t);"number"==typeof e.scaleMin&&(this.scaleMin=e.scaleMin),"number"==typeof e.scaleMax&&(this.scaleMax=e.scaleMax),"boolean"==typeof e.lockDrawingScale&&(this.lockDrawingScale=e.lockDrawingScale),"string"==typeof e.theme&&(this.theme=e.theme),"string"==typeof e.locale&&(this.locale=e.locale),"number"==typeof e.viewportBoundaryLeft&&(this.viewportBoundaryLeft=e.viewportBoundaryLeft),"number"==typeof e.viewportBoundaryRight&&(this.viewportBoundaryRight=e.viewportBoundaryRight),"number"==typeof e.viewportBoundaryTop&&(this.viewportBoundaryTop=e.viewportBoundaryTop),"number"==typeof e.viewportBoundaryBottom&&(this.viewportBoundaryBottom=e.viewportBoundaryBottom),e.debugInfo&&(this.debugInfo={...this.debugInfo,...e.debugInfo})}catch{}}async loadShortcuts(){this.shortcuts=await this.engineRef.getDisplayableShortcuts()}get currentSettingsConfig(){return{scaleMin:this.scaleMin,scaleMax:this.scaleMax,lockDrawingScale:this.lockDrawingScale,theme:this.theme,locale:this.locale,viewportBoundaryLeft:this.viewportBoundaryLeft,viewportBoundaryRight:this.viewportBoundaryRight,viewportBoundaryTop:this.viewportBoundaryTop,viewportBoundaryBottom:this.viewportBoundaryBottom,debugInfo:this.debugInfo}}getContentObjects(t){return t.filter((t=>!(t instanceof p||t instanceof m)))}registerCustomSvgIcons(){for(const[t,e]of Object.entries(this.customSvgIcons))r.register(t,e)}listenForMobileKeyboard(){g.onKeyboardVisibleChanged((t=>{this.isVirtualKeyboardOpen=t}))}setOsSpecificCssVariables(){switch(I.detectOS()){case"iOS":this.host.style.setProperty("--kritzel-editor-top-left-buttons-top","14px"),this.host.style.setProperty("--kritzel-editor-top-left-buttons-left","14px"),this.host.style.setProperty("--kritzel-editor-controls-bottom","14px"),this.host.style.setProperty("--kritzel-editor-controls-transition","cubic-bezier(0.25, 0.1, 0.25, 1.0)"),this.host.style.setProperty("--kritzel-editor-controls-transform","translateY(200%)"),this.host.style.setProperty("--kritzel-editor-controls-transition-duration","0.25s");break;case"Android":this.host.style.setProperty("--kritzel-editor-top-left-buttons-top","14px"),this.host.style.setProperty("--kritzel-editor-top-left-buttons-left","14px"),this.host.style.setProperty("--kritzel-editor-controls-bottom","24px"),this.host.style.setProperty("--kritzel-editor-controls-transition","cubic-bezier(0.25, 0.1, 0.25, 1.0)"),this.host.style.setProperty("--kritzel-editor-controls-transform","translateY(200%)"),this.host.style.setProperty("--kritzel-editor-controls-transition-duration","0.25s");break;default:this.host.style.setProperty("--kritzel-editor-top-left-buttons-top","14px"),this.host.style.setProperty("--kritzel-editor-top-left-buttons-left","14px"),this.host.style.setProperty("--kritzel-editor-controls-bottom","14px")}}render(){const t=this.isLoggedIn,e=t,s=this.isReady&&!!this.loginConfig&&!t;return i(n,{key:"3128b38a04cd636abc1f2466f1ac1aa3dcea2262"},i("div",{key:"b1fbb051cb1144fd84f28cfea4ad824f92189dbd",class:"editor-content",style:{opacity:this.isEditorVisible?"1":"0",visibility:this.isEditorVisible?"visible":"hidden",transition:"opacity 0.2s ease-in-out, visibility 0.2s ease-in-out"}},i("div",{key:"2b896fa8bd00a7c68b74df7a9846e8c3e0f6efc4",class:"top-left-buttons"},i("kritzel-workspace-manager",{key:"13244251aa8999d78d275eefe5583d592f3506fc",visible:this.isWorkspaceManagerVisible,workspaces:this.workspaces,activeWorkspace:this.activeWorkspace,terms:this.resolvedTerms,onWorkspaceChange:t=>this.activeWorkspace=t.detail,onIsWorkspaceManagerReady:()=>this.isWorkspaceManagerReady=!0}),i("kritzel-back-to-content",{key:"7d3015918e4af7ee435aee8da37ddfa206cdfd66",visible:this.isBackToContentButtonVisible,text:this.resolvedTerms["backToContent.label"]??"Back to content",onBackToContent:()=>this.backToContent()})),this.activeNotification&&i("div",{key:"49f13f23698db9b804d139e0f35696be06569346",class:"top-center-notification-layer",role:"presentation"},i("div",{key:"765aa6995398aca3c7738758bedb7d9a7c2f099a",class:{"top-center-notification-container":!0,"is-dismissing":this.isNotificationDismissing},role:"presentation"},i("kritzel-notification-card",{key:"fe0dfa30aa498a608f9167b01e0a2309dfa67162",notification:this.activeNotification,locale:this.locale,onDismiss:this.dismissNotification,onHoverChange:t=>this.handleNotificationHoverChange(t)}))),i("kritzel-engine",{key:"5aeb7979faa8779653ff6a2930d288fd601cb0e9",ref:t=>{t&&(this.engineRef=t)},workspace:this.activeWorkspace,activeWorkspaceId:this.activeWorkspaceId,editorId:this.editorId,syncConfig:this.syncConfig,assetStorageConfig:this.assetStorageConfig,user:this.user,scaleMax:this.scaleMax,lockDrawingScale:this.lockDrawingScale,isObjectDistanceFadingActive:this.isObjectDistanceFadingActive,scaleMin:this.scaleMin,cursorTarget:this.cursorTarget,isLoading:this.isLoading,viewportBoundaryLeft:this.viewportBoundaryLeft,viewportBoundaryRight:this.viewportBoundaryRight,viewportBoundaryTop:this.viewportBoundaryTop,viewportBoundaryBottom:this.viewportBoundaryBottom,isPanningEnabled:this.isPanningEnabled,isZoomingEnabled:this.isZoomingEnabled,theme:this.theme,themes:this.themes,licenseKey:this.licenseKey,locale:this.locale,locales:this.locales,fallbackLocale:this.fallbackLocale,debugInfo:this.debugInfo,globalContextMenuItems:this.globalContextMenuItems,objectContextMenuItems:this.objectContextMenuItems,onIsEngineReady:t=>this.onEngineReady(t),onWorkspacesChange:t=>this.handleWorkspacesChange(t),onActiveWorkspaceChange:t=>this.handleActiveWorkspaceChange(t),onObjectsChange:t=>this.handleObjectsChange(t),onObjectsAdded:t=>this.handleObjectsAdded(t),onObjectsRemoved:t=>this.handleObjectsRemoved(t),onObjectsUpdated:t=>this.handleObjectsUpdated(t),onUndoStateChange:t=>this.handleUndoStateChange(t),onObjectsInViewportChange:t=>this.handleObjectsInViewportChange(t),onViewportChange:t=>this.handleViewportChange(t),onAwarenessChange:t=>this.handleAwarenessChange(t),onNotificationsChange:t=>this.handleNotificationsChange(t)}),i("kritzel-controls",{key:"eda4dc93fe663c8472638190216bea5bf64d7153",visible:this.isControlsVisible,class:{"keyboard-open":this.isVirtualKeyboardOpen},ref:t=>{t&&(this.controlsRef=t)},controls:this.controls,isUtilityPanelVisible:this.isUtilityPanelVisible,undoState:this.undoState??void 0,theme:this.theme,terms:this.resolvedTerms,onIsControlsReady:()=>this.isControlsReady=!0}),i("div",{key:"ffdb548da8aac3498b1b3e9bfdc9a41f8c448675",class:"bottom-left-buttons"},i("kritzel-zoom-panel",{key:"af6f6a86212195fd3ee13bc33c16574e0a5236a6",visible:this.isZoomPanelVisible,disabled:!this.isZoomingEnabled,zoomPercent:this.currentZoomPercent,terms:this.resolvedTerms,onZoomIn:()=>this.zoomIn(),onZoomOut:()=>this.zoomOut()})),i("div",{key:"0870c0e47838fc99b4041718a431535827e199cf",class:"top-right-buttons"},i("kritzel-settings",{key:"b95beb43dbe1a9c99454fc4ff74f0630aca7ad83",ref:t=>{t&&(this.settingsRef=t)},shortcuts:this.shortcuts,availableThemes:this.themes&&this.themes.length>0?this.themes.map((t=>t.name)):["light","dark"],availableLocales:this.availableLocaleOptions,settings:this.currentSettingsConfig,terms:this.resolvedTerms,onSettingsChange:t=>this.handleSettingsChange(t)}),i("kritzel-export",{key:"ef6fea2715ff99226fde937185a693efc2a7dd75",ref:t=>{t&&(this.exportRef=t)},workspaceName:this.activeWorkspace?.name||"workspace",terms:this.resolvedTerms,onExportPng:()=>this.engineRef.exportViewportAsPng(),onExportSvg:()=>this.engineRef.exportViewportAsSvg(),onExportJson:t=>this.engineRef.downloadAsJson(t.detail)}),i("kritzel-active-users",{key:"872b7fa12d49410d1c370baed3386a34f89d3e2a",users:this.activeUsers}),e&&i("kritzel-current-user",{key:"da19825b4fba6a516803f8330cdfdfac6b6c9db1",user:this.user,terms:this.resolvedTerms,onClick:()=>this.currentUserDialogRef?.open()}),e&&i("kritzel-current-user-dialog",{key:"9336ce611286d3ecf9318317ab4bedb8c3f79f05",ref:t=>{t&&(this.currentUserDialogRef=t,this.currentUserDialogRef.addEventListener("logoutRequest",this.handleCurrentUserLogout))},user:this.user,terms:this.resolvedTerms}),s&&i("kritzel-button",{key:"a9e38ad3e13c785f6a4223ebde95f60451c6515f",onButtonClick:()=>this.loginDialogRef?.open()},this.resolvedTerms["login.dialogTitle"]??"Sign in"),i("kritzel-more-menu",{key:"b8f63a63ae4e75a70d0069410170af902f2a362b",items:this.moreMenuItems,visible:this.isMoreMenuVisible,terms:this.resolvedTerms}),i("kritzel-share-dialog",{key:"7a923fd51e8d2bd1e2833e0941622efadd55f881",ref:t=>{t&&(this.shareDialogRef=t)},isPublic:this.currentIsPublic,workspaceId:this.activeWorkspace?.id,terms:this.resolvedTerms,onToggleIsPublic:this.handleToggleIsPublic}),this.loginConfig&&i("kritzel-login-dialog",{key:"ac54c699a94bb2657a6817c37d6220b75d931cd3",ref:t=>{t&&(this.loginDialogRef=t)},providers:this.loginConfig.providers,dialogTitle:this.loginConfig.title??this.resolvedTerms["login.dialogTitle"]??"Sign in",subtitle:this.loginConfig.subtitle,onProviderLogin:this.handleProviderLogin}))))}static get watchers(){return{isEngineReady:[{onIsEngineReady:0}],isControlsReady:[{onIsControlsReady:0}],workspaces:[{onWorkspacesChange:0}],activeWorkspace:[{onActiveWorkspaceChange:0}],activeWorkspaceId:[{onActiveWorkspaceIdChange:0}],theme:[{onCurrentThemeChange:0}],themes:[{onThemesChange:0}],locale:[{onLocaleChange:0}]}}static get style(){return"kritzel-editor{display:flex;margin:0;position:relative;container-type:inline-size;overflow:hidden;width:100%;height:100%;align-items:center;justify-content:center;touch-action:manipulation;user-select:none;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-align:start;line-height:normal}.editor-content{position:absolute;inset:0}.editor-content>kritzel-engine{position:absolute;inset:0;z-index:0}kritzel-controls{position:absolute;z-index:1;left:0;right:0;margin-inline:auto;width:max-content;max-width:calc(100% - 16px);bottom:var(--kritzel-editor-controls-bottom, 14px);transition:transform var(--kritzel-editor-controls-transition-duration, 0.1s) var(--kritzel-editor-controls-transition, ease-in-out)}kritzel-controls.keyboard-open{transform:var(--kritzel-editor-controls-transform, translateY(300%))}.top-left-buttons{position:absolute;z-index:1;top:var(--kritzel-editor-top-left-buttons-top, 14px);left:var(--kritzel-editor-top-left-buttons-left, 14px);display:flex;align-items:flex-start;gap:8px}.top-center-notification-layer{position:absolute;top:var(--kritzel-editor-top-center-notification-top, 14px);left:0;right:0;z-index:var(--kritzel-editor-top-center-notification-z-index, 10001);display:flex;justify-content:center;pointer-events:none}.top-center-notification-container{width:min(90vw, 420px);pointer-events:auto;animation:kritzel-notification-slide-in var(--kritzel-editor-notification-animation-duration, 220ms) var(--kritzel-editor-notification-animation-easing, cubic-bezier(0.22, 1, 0.36, 1))}.top-center-notification-container.is-dismissing{animation:kritzel-notification-fade-out var(--kritzel-editor-notification-dismiss-animation-duration, 180ms) var(--kritzel-editor-notification-dismiss-animation-easing, ease-in) forwards}@keyframes kritzel-notification-slide-in{from{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}@keyframes kritzel-notification-fade-out{from{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-6px)}}@media (prefers-reduced-motion: reduce){.top-center-notification-container{animation:none}}.top-right-buttons{position:absolute;z-index:1;top:var(--kritzel-editor-top-right-buttons-top, 14px);right:var(--kritzel-editor-top-right-buttons-right, 14px);display:flex;align-items:center;gap:8px}.bottom-left-buttons{position:absolute;z-index:1;left:var(--kritzel-editor-top-left-buttons-left, 14px);bottom:var(--kritzel-editor-controls-bottom, 14px);display:flex;align-items:flex-end}@container (max-width: 767px){.bottom-left-buttons{display:none}}.top-right-button{display:flex;align-items:center;justify-content:center;width:50px;height:50px;padding:0;border:var(--kritzel-split-button-border, 1px solid #ebebeb);border-radius:var(--kritzel-split-button-border-radius, 12px);background-color:var(--kritzel-split-button-background-color, #ffffff);cursor:var(--kritzel-global-pointer-cursor, pointer);box-shadow:var(--kritzel-split-button-box-shadow, 0 0 3px rgba(0, 0, 0, 0.08));transition:background-color 150ms ease;-webkit-tap-highlight-color:transparent}.top-right-button:hover{background-color:#f5f5f5}.top-right-button:active{background-color:#ebebeb}"}},[512,"kritzel-editor",{scaleMax:[1026,"scale-max"],scaleMin:[1026,"scale-min"],lockDrawingScale:[1028,"lock-drawing-scale"],viewportBoundaryLeft:[1026,"viewport-boundary-left"],viewportBoundaryRight:[1026,"viewport-boundary-right"],viewportBoundaryTop:[1026,"viewport-boundary-top"],viewportBoundaryBottom:[1026,"viewport-boundary-bottom"],debugInfo:[1040],user:[16],activeUsers:[16],controls:[16],globalContextMenuItems:[16],objectContextMenuItems:[16],themes:[16],theme:[1025],licenseKey:[1,"license-key"],locale:[1025],locales:[16],fallbackLocale:[1,"fallback-locale"],customSvgIcons:[16],isPanningEnabled:[1028,"is-panning-enabled"],isZoomingEnabled:[1028,"is-zooming-enabled"],isControlsVisible:[4,"is-controls-visible"],isUtilityPanelVisible:[4,"is-utility-panel-visible"],isWorkspaceManagerVisible:[4,"is-workspace-manager-visible"],isMoreMenuVisible:[4,"is-more-menu-visible"],isZoomPanelVisible:[4,"is-zoom-panel-visible"],isObjectDistanceFadingActive:[4,"is-object-distance-fading-active"],syncConfig:[16],assetStorageConfig:[16],cursorTarget:[16],loginConfig:[16],isLoading:[4,"is-loading"],editorId:[1,"editor-id"],activeWorkspaceId:[1,"active-workspace-id"],isEngineReady:[32],isControlsReady:[32],isWorkspaceManagerReady:[32],workspaces:[32],activeWorkspace:[32],isVirtualKeyboardOpen:[32],undoState:[32],isBackToContentButtonVisible:[32],resolvedTerms:[32],availableLocaleOptions:[32],currentZoomPercent:[32],shortcuts:[32],currentIsPublic:[32],isEditorVisible:[32],activeNotification:[32],isNotificationDismissing:[32],getObjectById:[64],addObject:[64],addObjects:[64],updateObject:[64],removeObject:[64],removeObjects:[64],getSelectedObjects:[64],selectObjects:[64],selectAllObjectsInViewport:[64],clearSelection:[64],centerObjectInViewport:[64],panToObject:[64],backToContent:[64],centerAllObjects:[64],centerObjects:[64],setViewport:[64],panTo:[64],zoomTo:[64],zoomIn:[64],zoomOut:[64],getViewport:[64],screenToWorld:[64],worldToScreen:[64],createWorkspace:[64],updateWorkspace:[64],deleteWorkspace:[64],getWorkspaces:[64],getActiveWorkspace:[64],loadSharedWorkspace:[64],reinitSync:[64],registerTool:[64],changeActiveTool:[64],changeActiveToolByName:[64],disable:[64],enable:[64],copy:[64],cut:[64],paste:[64],delete:[64],bringForward:[64],sendBackward:[64],bringToFront:[64],sendToBack:[64],alignObjects:[64],group:[64],ungroup:[64],undo:[64],redo:[64],getScreenshot:[64],exportViewportAsPng:[64],exportViewportAsSvg:[64],exportSelectedObjectsAsPng:[64],exportSelectedObjectsAsSvg:[64],downloadAsJson:[64],importFromFile:[64],loadObjectsFromJson:[64],getObjectsTotalCount:[64],getAllObjects:[64],findObjects:[64],getObjectsInViewport:[64],hideContextMenu:[64],openContextMenu:[64],triggerSelectionChange:[64],getDisplayableShortcuts:[64],triggerNotification:[64],openLoginDialog:[64],setLoginLoading:[64],setLocale:[64],getLocale:[64],getAvailableLocales:[64],registerLocales:[64],t:[64]},[[0,"dblclick","onTouchStart"]],{isEngineReady:[{onIsEngineReady:0}],isControlsReady:[{onIsControlsReady:0}],workspaces:[{onWorkspacesChange:0}],activeWorkspace:[{onActiveWorkspaceChange:0}],activeWorkspaceId:[{onActiveWorkspaceIdChange:0}],theme:[{onCurrentThemeChange:0}],themes:[{onThemesChange:0}],locale:[{onLocaleChange:0}]}]),Xe=Qe,ts=function(){"undefined"!=typeof customElements&&["kritzel-editor","kritzel-active-users","kritzel-avatar","kritzel-awareness-cursors","kritzel-back-to-content","kritzel-button","kritzel-color","kritzel-color-palette","kritzel-context-menu","kritzel-controls","kritzel-current-user","kritzel-current-user-dialog","kritzel-cursor-trail","kritzel-dialog","kritzel-dropdown","kritzel-engine","kritzel-export","kritzel-font","kritzel-font-family","kritzel-font-size","kritzel-icon","kritzel-input","kritzel-line-endings","kritzel-loading-overlay","kritzel-login-dialog","kritzel-master-detail","kritzel-menu","kritzel-menu-item","kritzel-more-menu","kritzel-notification-card","kritzel-numeric-input","kritzel-opacity-slider","kritzel-pill-tabs","kritzel-portal","kritzel-settings","kritzel-shape-fill","kritzel-share-dialog","kritzel-slide-toggle","kritzel-split-button","kritzel-stroke-size","kritzel-tool-config","kritzel-tooltip","kritzel-utility-panel","kritzel-watermark","kritzel-workspace-manager","kritzel-zoom-panel"].forEach((t=>{switch(t){case"kritzel-editor":customElements.get(o(t))||customElements.define(o(t),Qe);break;case"kritzel-active-users":customElements.get(o(t))||M();break;case"kritzel-avatar":customElements.get(o(t))||B();break;case"kritzel-awareness-cursors":customElements.get(o(t))||R();break;case"kritzel-back-to-content":customElements.get(o(t))||P();break;case"kritzel-button":customElements.get(o(t))||W();break;case"kritzel-color":customElements.get(o(t))||V();break;case"kritzel-color-palette":customElements.get(o(t))||L();break;case"kritzel-context-menu":customElements.get(o(t))||N();break;case"kritzel-controls":customElements.get(o(t))||F();break;case"kritzel-current-user":customElements.get(o(t))||J();break;case"kritzel-current-user-dialog":customElements.get(o(t))||q();break;case"kritzel-cursor-trail":customElements.get(o(t))||Z();break;case"kritzel-dialog":customElements.get(o(t))||H();break;case"kritzel-dropdown":customElements.get(o(t))||K();break;case"kritzel-engine":customElements.get(o(t))||C();break;case"kritzel-export":customElements.get(o(t))||Y();break;case"kritzel-font":customElements.get(o(t))||G();break;case"kritzel-font-family":customElements.get(o(t))||_();break;case"kritzel-font-size":customElements.get(o(t))||$();break;case"kritzel-icon":customElements.get(o(t))||a();break;case"kritzel-input":customElements.get(o(t))||Q();break;case"kritzel-line-endings":customElements.get(o(t))||X();break;case"kritzel-loading-overlay":customElements.get(o(t))||tt();break;case"kritzel-login-dialog":customElements.get(o(t))||et();break;case"kritzel-master-detail":customElements.get(o(t))||st();break;case"kritzel-menu":customElements.get(o(t))||nt();break;case"kritzel-menu-item":customElements.get(o(t))||it();break;case"kritzel-more-menu":customElements.get(o(t))||ot();break;case"kritzel-notification-card":customElements.get(o(t))||rt();break;case"kritzel-numeric-input":customElements.get(o(t))||at();break;case"kritzel-opacity-slider":customElements.get(o(t))||ct();break;case"kritzel-pill-tabs":customElements.get(o(t))||ht();break;case"kritzel-portal":customElements.get(o(t))||lt();break;case"kritzel-settings":customElements.get(o(t))||dt();break;case"kritzel-shape-fill":customElements.get(o(t))||ut();break;case"kritzel-share-dialog":customElements.get(o(t))||pt();break;case"kritzel-slide-toggle":customElements.get(o(t))||mt();break;case"kritzel-split-button":customElements.get(o(t))||gt();break;case"kritzel-stroke-size":customElements.get(o(t))||ft();break;case"kritzel-tool-config":customElements.get(o(t))||bt();break;case"kritzel-tooltip":customElements.get(o(t))||yt();break;case"kritzel-utility-panel":customElements.get(o(t))||kt();break;case"kritzel-watermark":customElements.get(o(t))||O();break;case"kritzel-workspace-manager":customElements.get(o(t))||wt();break;case"kritzel-zoom-panel":customElements.get(o(t))||vt()}}))};export{Ke as D,He as H,Xe as KritzelEditor,Be as a,Ye as b,Ge as c,_e as d,ts as defineCustomElement}
1
+ import{p as t,H as e,c as s,h as i,d as n,t as o}from"./p-B43upypT.js";import{K as r,d as a}from"./p-CdR76C4L.js";import{D as c,h,S as l,f as d,e as u,i as p,j as m,k as g}from"./p-D8NvNMcU.js";import{a as f,c as b,b as y,e as k,d as w,k as v,l as z,m as C}from"./p-C7rN6L3d.js";import{D as j,T as A,d as x,l as T}from"./p-BmyTdQGy.js";import{A as E,a as S,d as O}from"./p-PSFAfAyd.js";import{K as I}from"./p-jGOpkGDl.js";import{O as D}from"./p-Dd-pMvlr.js";import"./p-UEf2EN23.js";import*as M from"yjs";import"y-indexeddb";import"y-websocket";import{d as U}from"./p-DJ88BrIW.js";import{d as R}from"./p-D5jf8wAu.js";import{d as B}from"./p-CwbZCXKh.js";import{d as P}from"./p-Dlp84thc.js";import{d as W}from"./p-DEBwmRTC.js";import{d as V}from"./p-CqLgB8JK.js";import{d as L}from"./p-Cymum41a.js";import{d as N}from"./p-BxpKq94F.js";import{d as F}from"./p-C2ocjA6D.js";import{d as J}from"./p-DIazmg6w.js";import{d as H}from"./p-D3y_Hauo.js";import{d as Y}from"./p-B4b6TDxp.js";import{d as q}from"./p-DX2nriaq.js";import{d as K}from"./p-Df3BwVGy.js";import{d as Z}from"./p-e6Zpc9Vp.js";import{d as _}from"./p-B8Xi4Clg.js";import{d as $}from"./p-JhOYwUOj.js";import{d as G}from"./p-BI2ng9I_.js";import{d as Q}from"./p-C4NrrUfN.js";import{d as X}from"./p-CXpv9Rxe.js";import{d as tt}from"./p-DgJ0ufzr.js";import{d as et}from"./p-B5oHmPJb.js";import{d as st}from"./p-BsANVili.js";import{d as it,a as nt}from"./p-CwJwsRR3.js";import{d as ot}from"./p-D30zs0kA.js";import{d as rt}from"./p-pagW8YF7.js";import{d as at}from"./p-BDzlx2hB.js";import{d as ct}from"./p-B6t5q-V4.js";import{d as ht}from"./p-D09kgc5Q.js";import{d as lt}from"./p-Ca-igU1f.js";import{d as dt}from"./p-s7PqL1NE.js";import{d as ut}from"./p-BFYtCsZu.js";import{d as pt}from"./p-DUYmwrWV.js";import{d as mt}from"./p-CWRSGYOE.js";import{d as gt}from"./p-Cr682JI_.js";import{d as ft}from"./p-D82VaHce.js";import{d as bt}from"./p-894OnDQV.js";import{d as yt}from"./p-D2q_wTyG.js";import{d as kt}from"./p-BTzlrIxe.js";import{d as wt}from"./p-CsvMgk_f.js";import{d as vt}from"./p-9692OaI_.js";import{d as zt}from"./p-DkUb2czk.js";const Ct=Math.floor,jt=127,At=Number.MAX_SAFE_INTEGER,xt="undefined"!=typeof TextEncoder?new TextEncoder:null,Tt=xt?t=>xt.encode(t):t=>{const e=unescape(encodeURIComponent(t)),s=e.length,i=new Uint8Array(s);for(let t=0;t<s;t++)i[t]=e.codePointAt(t);return i};let Et="undefined"==typeof TextDecoder?null:new TextDecoder("utf-8",{fatal:!0,ignoreBOM:!0});Et&&1===Et.decode(new Uint8Array).length&&(Et=null);const St=(t,e)=>{const s=t.cbuf.length;t.cpos===s&&(t.bufs.push(t.cbuf),t.cbuf=new Uint8Array(2*s),t.cpos=0),t.cbuf[t.cpos++]=e},Ot=(t,e)=>{for(;e>jt;)St(t,128|jt&e),e=Ct(e/128);St(t,jt&e)},It=new Uint8Array(3e4),Dt=It.length/3,Mt=xt&&xt.encodeInto?(t,e)=>{if(e.length<Dt){const s=xt.encodeInto(e,It).written||0;Ot(t,s);for(let e=0;e<s;e++)St(t,It[e])}else Ut(t,Tt(e))}:(t,e)=>{const s=unescape(encodeURIComponent(e)),i=s.length;Ot(t,i);for(let e=0;e<i;e++)St(t,s.codePointAt(e))},Ut=(t,e)=>{Ot(t,e.byteLength),((t,e)=>{const s=t.cbuf.length,i=t.cpos,n=((t,e)=>t<e?t:e)(s-i,e.length),o=e.length-n;t.cbuf.set(e.subarray(0,n),i),t.cpos+=n,o>0&&(t.bufs.push(t.cbuf),t.cbuf=new Uint8Array(((t,e)=>t>e?t:e)(2*s,o)),t.cbuf.set(e.subarray(n)),t.cpos=o)})(t,e)},Rt=t=>Error(t),Bt=Rt("Unexpected end of array"),Pt=Rt("Integer out of Range"),Wt=t=>t.arr[t.pos++],Vt=t=>{let e=0,s=1;const i=t.arr.length;for(;t.pos<i;){const i=t.arr[t.pos++];if(e+=(i&jt)*s,s*=128,i<128)return e;if(e>At)throw Pt}throw Bt},Lt=Et?t=>Et.decode((t=>((t,e)=>{const s=new Uint8Array(t.arr.buffer,t.pos+t.arr.byteOffset,e);return t.pos+=e,s})(t,Vt(t)))(t)):t=>{let e=Vt(t);if(0===e)return"";{let s=String.fromCodePoint(Wt(t));if(--e<100)for(;e--;)s+=String.fromCodePoint(Wt(t));else for(;e>0;){const i=e<1e4?e:1e4,n=t.arr.subarray(t.pos,t.pos+i);t.pos+=i,s+=String.fromCodePoint.apply(null,n),e-=i}return decodeURIComponent(escape(s))}};var Nt;!function(t){t[t.Token=0]="Token",t[t.PermissionDenied=1]="PermissionDenied",t[t.Authenticated=2]="Authenticated"}(Nt||(Nt={}));const Ft=t=>Array.from(t.entries()).map((([t,e])=>({clientId:t,...e})));var Jt;async function Ht(t){return new Promise((e=>setTimeout(e,t)))}function Yt(t,e){let s=e.delay;if(0===s)return 0;if(e.factor&&(s*=Math.pow(e.factor,t.attemptNum-1),0!==e.maxDelay&&(s=Math.min(s,e.maxDelay))),e.jitter){const t=Math.ceil(e.minDelay),i=Math.floor(s);s=Math.floor(Math.random()*(i-t+1))+t}return Math.round(s)}!function(t){t[t.Connecting=0]="Connecting",t[t.Open=1]="Open",t[t.Closing=2]="Closing",t[t.Closed=3]="Closed"}(Jt||(Jt={}));const qt=Math.floor,Kt=128,Zt=127,_t=Number.MAX_SAFE_INTEGER,$t=()=>new Set,Gt=Array.from,Qt="undefined"!=typeof TextEncoder?new TextEncoder:null,Xt=Qt?t=>Qt.encode(t):t=>{const e=unescape(encodeURIComponent(t)),s=e.length,i=new Uint8Array(s);for(let t=0;t<s;t++)i[t]=e.codePointAt(t);return i};let te="undefined"==typeof TextDecoder?null:new TextDecoder("utf-8",{fatal:!0,ignoreBOM:!0});te&&1===te.decode(new Uint8Array).length&&(te=null);class ee{constructor(){this.cpos=0,this.cbuf=new Uint8Array(100),this.bufs=[]}}const se=()=>new ee,ie=t=>{let e=t.cpos;for(let s=0;s<t.bufs.length;s++)e+=t.bufs[s].length;return e},ne=t=>{const e=new Uint8Array(ie(t));let s=0;for(let i=0;i<t.bufs.length;i++){const n=t.bufs[i];e.set(n,s),s+=n.length}return e.set(new Uint8Array(t.cbuf.buffer,0,t.cpos),s),e},oe=(t,e)=>{const s=t.cbuf.length;t.cpos===s&&(t.bufs.push(t.cbuf),t.cbuf=new Uint8Array(2*s),t.cpos=0),t.cbuf[t.cpos++]=e},re=(t,e)=>{for(;e>Zt;)oe(t,Kt|Zt&e),e=qt(e/128);oe(t,Zt&e)},ae=new Uint8Array(3e4),ce=ae.length/3,he=Qt&&Qt.encodeInto?(t,e)=>{if(e.length<ce){const s=Qt.encodeInto(e,ae).written||0;re(t,s);for(let e=0;e<s;e++)oe(t,ae[e])}else le(t,Xt(e))}:(t,e)=>{const s=unescape(encodeURIComponent(e)),i=s.length;re(t,i);for(let e=0;e<i;e++)oe(t,s.codePointAt(e))},le=(t,e)=>{re(t,e.byteLength),((t,e)=>{const s=t.cbuf.length,i=t.cpos,n=((t,e)=>t<e?t:e)(s-i,e.length),o=e.length-n;t.cbuf.set(e.subarray(0,n),i),t.cpos+=n,o>0&&(t.bufs.push(t.cbuf),t.cbuf=new Uint8Array(((t,e)=>t>e?t:e)(2*s,o)),t.cbuf.set(e.subarray(n)),t.cpos=o)})(t,e)},de=t=>Error(t),ue=de("Unexpected end of array"),pe=de("Integer out of Range");class me{constructor(t){this.arr=t,this.pos=0}}const ge=t=>new me(t),fe=t=>((t,e)=>{const s=new Uint8Array(t.arr.buffer,t.pos+t.arr.byteOffset,e);return t.pos+=e,s})(t,ye(t)),be=t=>t.arr[t.pos++],ye=t=>{let e=0,s=1;const i=t.arr.length;for(;t.pos<i;){const i=t.arr[t.pos++];if(e+=(i&Zt)*s,s*=128,i<Kt)return e;if(e>_t)throw pe}throw ue},ke=te?t=>te.decode(fe(t)):t=>{let e=ye(t);if(0===e)return"";{let s=String.fromCodePoint(be(t));if(--e<100)for(;e--;)s+=String.fromCodePoint(be(t));else for(;e>0;){const i=e<1e4?e:1e4,n=t.arr.subarray(t.pos,t.pos+i);t.pos+=i,s+=String.fromCodePoint.apply(null,n),e-=i}return decodeURIComponent(escape(s))}},we=Date.now,ve=()=>new Map;class ze{constructor(){this._observers=ve()}on(t,e){((t,e,s)=>{let i=t.get(e);return void 0===i&&t.set(e,i=s()),i})(this._observers,t,$t).add(e)}once(t,e){const s=(...i)=>{this.off(t,s),e(...i)};this.on(t,s)}off(t,e){const s=this._observers.get(t);void 0!==s&&(s.delete(e),0===s.size&&this._observers.delete(t))}emit(t,e){return Gt((this._observers.get(t)||ve()).values()).forEach((t=>t(...e)))}destroy(){this._observers=ve()}}const Ce=Object.keys,je=t=>Ce(t).length,Ae=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),xe=(t,e)=>{if(null==t||null==e)return((t,e)=>t===e)(t,e);if(t.constructor!==e.constructor)return!1;if(t===e)return!0;switch(t.constructor){case ArrayBuffer:t=new Uint8Array(t),e=new Uint8Array(e);case Uint8Array:if(t.byteLength!==e.byteLength)return!1;for(let s=0;s<t.length;s++)if(t[s]!==e[s])return!1;break;case Set:if(t.size!==e.size)return!1;for(const s of t)if(!e.has(s))return!1;break;case Map:if(t.size!==e.size)return!1;for(const s of t.keys())if(!e.has(s)||!xe(t.get(s),e.get(s)))return!1;break;case Object:if(je(t)!==je(e))return!1;for(const s in t)if(!Ae(t,s)||!xe(t[s],e[s]))return!1;break;case Array:if(t.length!==e.length)return!1;for(let s=0;s<t.length;s++)if(!xe(t[s],e[s]))return!1;break;default:return!1}return!0};class Te extends ze{constructor(t){super(),this.doc=t,this.clientID=t.clientID,this.states=new Map,this.meta=new Map,this._checkInterval=setInterval((()=>{const t=we();null!==this.getLocalState()&&15e3<=t-this.meta.get(this.clientID).lastUpdated&&this.setLocalState(this.getLocalState());const e=[];this.meta.forEach(((s,i)=>{i!==this.clientID&&3e4<=t-s.lastUpdated&&this.states.has(i)&&e.push(i)})),e.length>0&&Ee(this,e,"timeout")}),qt(3e3)),t.on("destroy",(()=>{this.destroy()})),this.setLocalState({})}destroy(){this.emit("destroy",[this]),this.setLocalState(null),super.destroy(),clearInterval(this._checkInterval)}getLocalState(){return this.states.get(this.clientID)||null}setLocalState(t){const e=this.clientID,s=this.meta.get(e),i=void 0===s?0:s.clock+1,n=this.states.get(e);null===t?this.states.delete(e):this.states.set(e,t),this.meta.set(e,{clock:i,lastUpdated:we()});const o=[],r=[],a=[],c=[];null===t?c.push(e):null==n?null!=t&&o.push(e):(r.push(e),xe(n,t)||a.push(e)),(o.length>0||a.length>0||c.length>0)&&this.emit("change",[{added:o,updated:a,removed:c},"local"]),this.emit("update",[{added:o,updated:r,removed:c},"local"])}setLocalStateField(t,e){const s=this.getLocalState();null!==s&&this.setLocalState({...s,[t]:e})}getStates(){return this.states}}const Ee=(t,e,s)=>{const i=[];for(let s=0;s<e.length;s++){const n=e[s];if(t.states.has(n)){if(t.states.delete(n),n===t.clientID){const e=t.meta.get(n);t.meta.set(n,{clock:e.clock+1,lastUpdated:we()})}i.push(n)}}i.length>0&&(t.emit("change",[{added:[],updated:[],removed:i},s]),t.emit("update",[{added:[],updated:[],removed:i},s]))},Se=(t,e,s=t.states)=>{const i=e.length,n=se();re(n,i);for(let o=0;o<i;o++){const i=e[o],r=s.get(i)||null,a=t.meta.get(i).clock;re(n,i),re(n,a),he(n,JSON.stringify(r))}return ne(n)};class Oe{constructor(){this.callbacks={}}on(t,e){return this.callbacks[t]||(this.callbacks[t]=[]),this.callbacks[t].push(e),this}emit(t,...e){const s=this.callbacks[t];return s&&s.forEach((t=>t.apply(this,e))),this}off(t,e){const s=this.callbacks[t];return s&&(e?this.callbacks[t]=s.filter((t=>t!==e)):delete this.callbacks[t]),this}removeAllListeners(){this.callbacks={}}}class Ie{constructor(t){this.data=t,this.encoder=se(),this.decoder=ge(new Uint8Array(this.data))}peekVarString(){return(t=>{const e=t.pos,s=ke(t);return t.pos=e,s})(this.decoder)}readVarUint(){return ye(this.decoder)}readVarString(){return ke(this.decoder)}readVarUint8Array(){return fe(this.decoder)}writeVarUint(t){return re(this.encoder,t)}writeVarString(t){return he(this.encoder,t)}writeVarUint8Array(t){return le(this.encoder,t)}length(){return ie(this.encoder)}}var De,Me;!function(t){t[t.Sync=0]="Sync",t[t.Awareness=1]="Awareness",t[t.Auth=2]="Auth",t[t.QueryAwareness=3]="QueryAwareness",t[t.Stateless=5]="Stateless",t[t.CLOSE=7]="CLOSE",t[t.SyncStatus=8]="SyncStatus"}(De||(De={})),function(t){t.Connecting="connecting",t.Connected="connected",t.Disconnected="disconnected"}(Me||(Me={}));class Ue{constructor(){this.encoder=se()}get(t){return t.encoder}toUint8Array(){return ne(this.encoder)}}class Re extends Ue{constructor(){super(...arguments),this.type=De.CLOSE,this.description="Ask the server to close the connection"}get(t){return he(this.encoder,t.documentName),re(this.encoder,this.type),this.encoder}}class Be extends Oe{constructor(t){super(),this.messageQueue=[],this.configuration={url:"",autoConnect:!0,preserveTrailingSlash:!1,document:void 0,WebSocketPolyfill:void 0,messageReconnectTimeout:3e4,delay:1e3,initialDelay:0,factor:2,maxAttempts:0,minDelay:1e3,maxDelay:3e4,jitter:!0,timeout:0,onOpen:()=>null,onConnect:()=>null,onMessage:()=>null,onOutgoingMessage:()=>null,onStatus:()=>null,onDisconnect:()=>null,onClose:()=>null,onDestroy:()=>null,onAwarenessUpdate:()=>null,onAwarenessChange:()=>null,handleTimeout:null,providerMap:new Map},this.webSocket=null,this.webSocketHandlers={},this.shouldConnect=!0,this.status=Me.Disconnected,this.lastMessageReceived=0,this.identifier=0,this.intervals={connectionChecker:null},this.connectionAttempt=null,this.receivedOnOpenPayload=void 0,this.closeTries=0,this.setConfiguration(t),this.configuration.WebSocketPolyfill=t.WebSocketPolyfill?t.WebSocketPolyfill:WebSocket,this.on("open",this.configuration.onOpen),this.on("open",this.onOpen.bind(this)),this.on("connect",this.configuration.onConnect),this.on("message",this.configuration.onMessage),this.on("outgoingMessage",this.configuration.onOutgoingMessage),this.on("status",this.configuration.onStatus),this.on("disconnect",this.configuration.onDisconnect),this.on("close",this.configuration.onClose),this.on("destroy",this.configuration.onDestroy),this.on("awarenessUpdate",this.configuration.onAwarenessUpdate),this.on("awarenessChange",this.configuration.onAwarenessChange),this.on("close",this.onClose.bind(this)),this.on("message",this.onMessage.bind(this)),this.intervals.connectionChecker=setInterval(this.checkConnection.bind(this),this.configuration.messageReconnectTimeout/10),this.shouldConnect&&this.connect()}async onOpen(t){this.status=Me.Connected,this.emit("status",{status:Me.Connected}),this.cancelWebsocketRetry=void 0,this.receivedOnOpenPayload=t}attach(t){this.configuration.providerMap.set(t.configuration.name,t),this.status===Me.Disconnected&&this.shouldConnect&&this.connect(),this.receivedOnOpenPayload&&this.status===Me.Connected&&t.onOpen(this.receivedOnOpenPayload)}detach(t){this.configuration.providerMap.has(t.configuration.name)&&(t.send(Re,{documentName:t.configuration.name}),this.configuration.providerMap.delete(t.configuration.name))}setConfiguration(t={}){this.configuration={...this.configuration,...t},this.configuration.autoConnect||(this.shouldConnect=!1)}async connect(){if(this.status===Me.Connected)return;this.cancelWebsocketRetry&&(this.cancelWebsocketRetry(),this.cancelWebsocketRetry=void 0),this.receivedOnOpenPayload=void 0,this.shouldConnect=!0;const{retryPromise:t,cancelFunc:e}=(()=>{let t=!1;return{retryPromise:async function(t,e){const s=function(t){return t||(t={}),{delay:void 0===t.delay?200:t.delay,initialDelay:void 0===t.initialDelay?0:t.initialDelay,minDelay:void 0===t.minDelay?0:t.minDelay,maxDelay:void 0===t.maxDelay?0:t.maxDelay,factor:void 0===t.factor?0:t.factor,maxAttempts:void 0===t.maxAttempts?3:t.maxAttempts,timeout:void 0===t.timeout?0:t.timeout,jitter:!0===t.jitter,initialJitter:!0===t.initialJitter,handleError:void 0===t.handleError?null:t.handleError,handleTimeout:void 0===t.handleTimeout?null:t.handleTimeout,beforeAttempt:void 0===t.beforeAttempt?null:t.beforeAttempt,calculateDelay:void 0===t.calculateDelay?null:t.calculateDelay}}(e);for(const t of["delay","initialDelay","minDelay","maxDelay","maxAttempts","timeout"]){const e=s[t];if(!Number.isInteger(e)||e<0)throw Error(`Value for ${t} must be an integer greater than or equal to 0`)}if(s.factor.constructor!==Number||s.factor<0)throw Error("Value for factor must be a number greater than or equal to 0");if(s.delay<s.minDelay)throw Error(`delay cannot be less than minDelay (delay: ${s.delay}, minDelay: ${s.minDelay}`);const i={attemptNum:0,attemptsRemaining:s.maxAttempts?s.maxAttempts:-1,aborted:!1,abort(){i.aborted=!0}},n=s.calculateDelay||Yt,o=s.calculateDelay?s.calculateDelay(i,s):s.initialDelay;if(o&&await Ht(o),i.attemptNum<1&&s.initialJitter){const t=n(i,s);t&&await Ht(t)}return async function e(){if(s.beforeAttempt&&s.beforeAttempt(i,s),i.aborted){const t=Error("Attempt aborted");throw t.code="ATTEMPT_ABORTED",t}const o=async t=>{if(s.handleError&&await s.handleError(t,i,s),i.aborted||0===i.attemptsRemaining)throw t;i.attemptNum++;const o=n(i,s);return o&&await Ht(o),e()};return i.attemptsRemaining>0&&i.attemptsRemaining--,s.timeout?new Promise(((e,n)=>{const r=setTimeout((()=>{if(s.handleTimeout)try{e(s.handleTimeout(i,s))}catch(t){n(t)}else{const t=Error(`Retry timeout (attemptNum: ${i.attemptNum}, timeout: ${s.timeout})`);t.code="ATTEMPT_TIMEOUT",n(t)}}),s.timeout);t(i,s).then((t=>{clearTimeout(r),e(t)})).catch((t=>{clearTimeout(r),o(t).then(e).catch(n)}))})):t(i,s).catch(o)}()}(this.createWebSocketConnection.bind(this),{delay:this.configuration.delay,initialDelay:this.configuration.initialDelay,factor:this.configuration.factor,maxAttempts:this.configuration.maxAttempts,minDelay:this.configuration.minDelay,maxDelay:this.configuration.maxDelay,jitter:this.configuration.jitter,timeout:this.configuration.timeout,handleTimeout:this.configuration.handleTimeout,beforeAttempt:e=>{this.shouldConnect&&!t||e.abort()}}).catch((t=>{if(t&&"ATTEMPT_ABORTED"!==t.code)throw t})),cancelFunc:()=>{t=!0}}})();return this.cancelWebsocketRetry=e,t}attachWebSocketListeners(t,e){const{identifier:s}=t;this.webSocketHandlers[s]={message:t=>this.emit("message",t),close:t=>this.emit("close",{event:t}),open:t=>this.emit("open",t),error:t=>{e(t)}};const i=this.webSocketHandlers[t.identifier];Object.keys(i).forEach((e=>{t.addEventListener(e,i[e])}))}cleanupWebSocket(){if(!this.webSocket)return;const{identifier:t}=this.webSocket,e=this.webSocketHandlers[t];Object.keys(e).forEach((s=>{var i;null===(i=this.webSocket)||void 0===i||i.removeEventListener(s,e[s]),delete this.webSocketHandlers[t]})),this.webSocket.close(),this.webSocket=null}createWebSocketConnection(){return new Promise(((t,e)=>{this.webSocket&&(this.messageQueue=[],this.cleanupWebSocket()),this.lastMessageReceived=0,this.identifier+=1;const s=new this.configuration.WebSocketPolyfill(this.url);s.binaryType="arraybuffer",s.identifier=this.identifier,this.attachWebSocketListeners(s,e),this.webSocket=s,this.status=Me.Connecting,this.emit("status",{status:Me.Connecting}),this.connectionAttempt={resolve:t,reject:e}}))}onMessage(t){var e;this.resolveConnectionAttempt(),this.lastMessageReceived=we();const s=new Ie(t.data).peekVarString();null===(e=this.configuration.providerMap.get(s))||void 0===e||e.onMessage(t)}resolveConnectionAttempt(){this.connectionAttempt&&(this.connectionAttempt.resolve(),this.connectionAttempt=null,this.status=Me.Connected,this.emit("status",{status:Me.Connected}),this.emit("connect"),this.messageQueue.forEach((t=>this.send(t))),this.messageQueue=[])}stopConnectionAttempt(){this.connectionAttempt=null}rejectConnectionAttempt(){var t;null===(t=this.connectionAttempt)||void 0===t||t.reject(),this.connectionAttempt=null}checkConnection(){var t;this.status===Me.Connected&&this.lastMessageReceived&&(this.configuration.messageReconnectTimeout>=we()-this.lastMessageReceived||(this.closeTries+=1,this.closeTries>2?(this.onClose({event:{code:4408,reason:"forced"}}),this.closeTries=0):(null===(t=this.webSocket)||void 0===t||t.close(),this.messageQueue=[])))}get serverUrl(){if(this.configuration.preserveTrailingSlash)return this.configuration.url;let t=this.configuration.url;for(;"/"===t[t.length-1];)t=t.slice(0,t.length-1);return t}get url(){return this.serverUrl}disconnect(){if(this.shouldConnect=!1,null!==this.webSocket)try{this.webSocket.close(),this.messageQueue=[]}catch(t){console.error(t)}}send(t){var e;(null===(e=this.webSocket)||void 0===e?void 0:e.readyState)===Jt.Open?this.webSocket.send(t):this.messageQueue.push(t)}onClose({event:t}){this.closeTries=0,this.cleanupWebSocket(),this.connectionAttempt&&this.rejectConnectionAttempt(),this.status=Me.Disconnected,this.emit("status",{status:Me.Disconnected}),this.emit("disconnect",{event:t}),!this.cancelWebsocketRetry&&this.shouldConnect&&setTimeout((()=>{this.connect()}),this.configuration.delay)}destroy(){this.emit("destroy"),clearInterval(this.intervals.connectionChecker),this.stopConnectionAttempt(),this.disconnect(),this.removeAllListeners(),this.cleanupWebSocket()}}const Pe=(t,e,s)=>{try{M.applyUpdate(e,fe(t),s)}catch(t){console.error("Caught error while handling a Yjs update",t)}},We=Pe;class Ve{constructor(t){this.message=t}apply(t,e){const{message:s}=this,i=s.readVarUint(),n=s.length();switch(i){case De.Sync:this.applySyncMessage(t,e);break;case De.Awareness:this.applyAwarenessMessage(t);break;case De.Auth:this.applyAuthMessage(t);break;case De.QueryAwareness:this.applyQueryAwarenessMessage(t);break;case De.Stateless:t.receiveStateless(ke(s.decoder));break;case De.SyncStatus:this.applySyncStatusMessage(t,1===(t=>{let e=t.arr[t.pos++],s=63&e,i=64;const n=(64&e)>0?-1:1;if(!(e&Kt))return n*s;const o=t.arr.length;for(;t.pos<o;){if(e=t.arr[t.pos++],s+=(e&Zt)*i,i*=128,e<Kt)return n*s;if(s>_t)throw pe}throw ue})(s.decoder));break;case De.CLOSE:const n={code:1e3,reason:ke(s.decoder),target:t.configuration.websocketProvider.webSocket,type:"close"};t.onClose(),t.configuration.onClose({event:n}),t.forwardClose({event:n});break;default:throw Error("Can’t apply message of unknown type: "+i)}s.length()>n+1&&t.send(Ue,{encoder:s.encoder})}applySyncMessage(t,e){const{message:s}=this;s.writeVarUint(De.Sync);const i=((t,e,s,i)=>{const n=ye(t);switch(n){case 0:((t,e,s)=>{((t,e,s)=>{re(t,1),le(t,M.encodeStateAsUpdate(e,s))})(e,s,fe(t))})(t,e,s);break;case 1:Pe(t,s,i);break;case 2:We(t,s,i);break;default:throw Error("Unknown message type")}return n})(s.decoder,s.encoder,t.document,t);e&&1===i&&(t.synced=!0)}applySyncStatusMessage(t,e){e&&t.decrementUnsyncedChanges()}applyAwarenessMessage(t){if(!t.awareness)return;const{message:e}=this;((t,e,s)=>{const i=ge(e),n=we(),o=[],r=[],a=[],c=[],h=ye(i);for(let e=0;e<h;e++){const e=ye(i);let s=ye(i);const h=JSON.parse(ke(i)),l=t.meta.get(e),d=t.states.get(e),u=void 0===l?0:l.clock;(u<s||u===s&&null===h&&t.states.has(e))&&(null===h?e===t.clientID&&null!=t.getLocalState()?s++:t.states.delete(e):t.states.set(e,h),t.meta.set(e,{clock:s,lastUpdated:n}),void 0===l&&null!==h?o.push(e):void 0!==l&&null===h?c.push(e):null!==h&&(xe(h,d)||a.push(e),r.push(e)))}(o.length>0||a.length>0||c.length>0)&&t.emit("change",[{added:o,updated:a,removed:c},s]),(o.length>0||r.length>0||c.length>0)&&t.emit("update",[{added:o,updated:r,removed:c},s])})(t.awareness,e.readVarUint8Array(),t)}applyAuthMessage(t){const{message:e}=this;((t,e,s,i)=>{switch(Vt(t)){case Nt.Token:e();break;case Nt.PermissionDenied:s(Lt(t));break;case Nt.Authenticated:i(Lt(t))}})(e.decoder,t.sendToken.bind(t),t.permissionDeniedHandler.bind(t),t.authenticatedHandler.bind(t))}applyQueryAwarenessMessage(t){if(!t.awareness)return;const{message:e}=this;e.writeVarUint(De.Awareness),e.writeVarUint8Array(Se(t.awareness,Array.from(t.awareness.getStates().keys())))}}class Le{constructor(t,e={}){this.message=new t,this.encoder=this.message.get(e)}create(){return ne(this.encoder)}send(t){null==t||t.send(this.create())}}class Ne extends Ue{constructor(){super(...arguments),this.type=De.Auth,this.description="Authentication"}get(t){if(void 0===t.token)throw Error("The authentication message requires `token` as an argument.");return he(this.encoder,t.documentName),re(this.encoder,this.type),((t,e)=>{Ot(t,Nt.Token),Mt(t,e)})(this.encoder,t.token),this.encoder}}class Fe extends Ue{constructor(){super(...arguments),this.type=De.Awareness,this.description="Awareness states update"}get(t){if(void 0===t.awareness)throw Error("The awareness message requires awareness as an argument");if(void 0===t.clients)throw Error("The awareness message requires clients as an argument");let e;return he(this.encoder,t.documentName),re(this.encoder,this.type),e=void 0===t.states?Se(t.awareness,t.clients):Se(t.awareness,t.clients,t.states),le(this.encoder,e),this.encoder}}class Je extends Ue{constructor(){super(...arguments),this.type=De.Stateless,this.description="A stateless message"}get(t){var e;return he(this.encoder,t.documentName),re(this.encoder,this.type),he(this.encoder,null!==(e=t.payload)&&void 0!==e?e:""),this.encoder}}class He extends Ue{constructor(){super(...arguments),this.type=De.Sync,this.description="First sync step"}get(t){if(void 0===t.document)throw Error("The sync step one message requires document as an argument");return he(this.encoder,t.documentName),re(this.encoder,this.type),((t,e)=>{re(t,0);const s=M.encodeStateVector(e);le(t,s)})(this.encoder,t.document),this.encoder}}class Ye extends Ue{constructor(){super(...arguments),this.type=De.Sync,this.description="A document update"}get(t){return he(this.encoder,t.documentName),re(this.encoder,this.type),((t,e)=>{re(t,2),le(t,e)})(this.encoder,t.update),this.encoder}}class qe extends Error{constructor(){super(...arguments),this.code=1001}}class Ke extends Oe{constructor(t){var e,s,i;super(),this.configuration={name:"",document:void 0,awareness:void 0,token:null,forceSyncInterval:!1,onAuthenticated:()=>null,onAuthenticationFailed:()=>null,onOpen:()=>null,onConnect:()=>null,onMessage:()=>null,onOutgoingMessage:()=>null,onSynced:()=>null,onStatus:()=>null,onDisconnect:()=>null,onClose:()=>null,onDestroy:()=>null,onAwarenessUpdate:()=>null,onAwarenessChange:()=>null,onStateless:()=>null,onUnsyncedChanges:()=>null},this.isSynced=!1,this.unsyncedChanges=0,this.isAuthenticated=!1,this.authorizedScope=void 0,this.manageSocket=!1,this._isAttached=!1,this.intervals={forceSync:null},this.boundDocumentUpdateHandler=this.documentUpdateHandler.bind(this),this.boundAwarenessUpdateHandler=this.awarenessUpdateHandler.bind(this),this.boundPageHide=this.pageHide.bind(this),this.boundOnOpen=this.onOpen.bind(this),this.boundOnClose=this.onClose.bind(this),this.forwardConnect=()=>this.emit("connect"),this.forwardStatus=t=>this.emit("status",t),this.forwardClose=t=>this.emit("close",t),this.forwardDisconnect=t=>this.emit("disconnect",t),this.forwardDestroy=()=>this.emit("destroy"),this.setConfiguration(t),this.configuration.document=t.document?t.document:new M.Doc,this.configuration.awareness=void 0!==t.awareness?t.awareness:new Te(this.document),this.on("open",this.configuration.onOpen),this.on("message",this.configuration.onMessage),this.on("outgoingMessage",this.configuration.onOutgoingMessage),this.on("synced",this.configuration.onSynced),this.on("destroy",this.configuration.onDestroy),this.on("awarenessUpdate",this.configuration.onAwarenessUpdate),this.on("awarenessChange",this.configuration.onAwarenessChange),this.on("stateless",this.configuration.onStateless),this.on("unsyncedChanges",this.configuration.onUnsyncedChanges),this.on("authenticated",this.configuration.onAuthenticated),this.on("authenticationFailed",this.configuration.onAuthenticationFailed),null===(e=this.awareness)||void 0===e||e.on("update",(()=>{this.emit("awarenessUpdate",{states:Ft(this.awareness.getStates())})})),null===(s=this.awareness)||void 0===s||s.on("change",(()=>{this.emit("awarenessChange",{states:Ft(this.awareness.getStates())})})),this.document.on("update",this.boundDocumentUpdateHandler),null===(i=this.awareness)||void 0===i||i.on("update",this.boundAwarenessUpdateHandler),this.registerEventListeners(),this.configuration.forceSyncInterval&&"number"==typeof this.configuration.forceSyncInterval&&(this.intervals.forceSync=setInterval(this.forceSync.bind(this),this.configuration.forceSyncInterval)),this.manageSocket&&this.attach()}setConfiguration(t={}){t.websocketProvider||(this.manageSocket=!0,this.configuration.websocketProvider=new Be(t)),this.configuration={...this.configuration,...t}}get document(){return this.configuration.document}get isAttached(){return this._isAttached}get awareness(){return this.configuration.awareness}get hasUnsyncedChanges(){return this.unsyncedChanges>0}resetUnsyncedChanges(){this.unsyncedChanges=1,this.emit("unsyncedChanges",{number:this.unsyncedChanges})}incrementUnsyncedChanges(){this.unsyncedChanges+=1,this.emit("unsyncedChanges",{number:this.unsyncedChanges})}decrementUnsyncedChanges(){this.unsyncedChanges>0&&(this.unsyncedChanges-=1),0===this.unsyncedChanges&&(this.synced=!0),this.emit("unsyncedChanges",{number:this.unsyncedChanges})}forceSync(){this.resetUnsyncedChanges(),this.send(He,{document:this.document,documentName:this.configuration.name})}pageHide(){this.awareness&&Ee(this.awareness,[this.document.clientID],"page hide")}registerEventListeners(){"undefined"!=typeof window&&"addEventListener"in window&&window.addEventListener("pagehide",this.boundPageHide)}sendStateless(t){this.send(Je,{documentName:this.configuration.name,payload:t})}async sendToken(){let t;try{t=await this.getToken()}catch(t){return void this.permissionDeniedHandler("Failed to get token during sendToken(): "+t)}this.send(Ne,{token:null!=t?t:"",documentName:this.configuration.name})}documentUpdateHandler(t,e){e!==this&&(this.incrementUnsyncedChanges(),this.send(Ye,{update:t,documentName:this.configuration.name}))}awarenessUpdateHandler({added:t,updated:e,removed:s},i){const n=t.concat(e).concat(s);this.send(Fe,{awareness:this.awareness,clients:n,documentName:this.configuration.name})}get synced(){return this.isSynced}set synced(t){this.isSynced!==t&&(this.isSynced=t,t&&this.emit("synced",{state:t}))}receiveStateless(t){this.emit("stateless",{payload:t})}async connect(){if(this.manageSocket)return this.configuration.websocketProvider.connect();console.warn("HocuspocusProvider::connect() is deprecated and does not do anything. Please connect/disconnect on the websocketProvider, or attach/deattach providers.")}disconnect(){if(this.manageSocket)return this.configuration.websocketProvider.disconnect();console.warn("HocuspocusProvider::disconnect() is deprecated and does not do anything. Please connect/disconnect on the websocketProvider, or attach/deattach providers.")}async onOpen(t){this.isAuthenticated=!1,this.emit("open",{event:t}),await this.sendToken(),this.startSync()}async getToken(){return"function"==typeof this.configuration.token?await this.configuration.token():this.configuration.token}startSync(){this.resetUnsyncedChanges(),this.send(He,{document:this.document,documentName:this.configuration.name}),this.awareness&&null!==this.awareness.getLocalState()&&this.send(Fe,{awareness:this.awareness,clients:[this.document.clientID],documentName:this.configuration.name})}send(t,e){if(!this._isAttached)return;const s=new Le(t,e);this.emit("outgoingMessage",{message:s.message}),s.send(this.configuration.websocketProvider)}onMessage(t){const e=new Ie(t.data),s=e.readVarString();e.writeVarString(s),this.emit("message",{event:t,message:new Ie(t.data)}),new Ve(e).apply(this,!0)}onClose(){this.isAuthenticated=!1,this.synced=!1,this.awareness&&Ee(this.awareness,Array.from(this.awareness.getStates().keys()).filter((t=>t!==this.document.clientID)),this)}destroy(){this.emit("destroy"),this.intervals.forceSync&&clearInterval(this.intervals.forceSync),this.awareness&&(Ee(this.awareness,[this.document.clientID],"provider destroy"),this.awareness.off("update",this.boundAwarenessUpdateHandler),this.awareness.destroy()),this.document.off("update",this.boundDocumentUpdateHandler),this.removeAllListeners(),this.detach(),this.manageSocket&&this.configuration.websocketProvider.destroy(),"undefined"!=typeof window&&"removeEventListener"in window&&window.removeEventListener("pagehide",this.boundPageHide)}detach(){this.configuration.websocketProvider.off("connect",this.configuration.onConnect),this.configuration.websocketProvider.off("connect",this.forwardConnect),this.configuration.websocketProvider.off("status",this.forwardStatus),this.configuration.websocketProvider.off("status",this.configuration.onStatus),this.configuration.websocketProvider.off("open",this.boundOnOpen),this.configuration.websocketProvider.off("close",this.boundOnClose),this.configuration.websocketProvider.off("close",this.configuration.onClose),this.configuration.websocketProvider.off("close",this.forwardClose),this.configuration.websocketProvider.off("disconnect",this.configuration.onDisconnect),this.configuration.websocketProvider.off("disconnect",this.forwardDisconnect),this.configuration.websocketProvider.off("destroy",this.configuration.onDestroy),this.configuration.websocketProvider.off("destroy",this.forwardDestroy),this.configuration.websocketProvider.detach(this),this._isAttached=!1}attach(){this._isAttached||(this.configuration.websocketProvider.on("connect",this.configuration.onConnect),this.configuration.websocketProvider.on("connect",this.forwardConnect),this.configuration.websocketProvider.on("status",this.configuration.onStatus),this.configuration.websocketProvider.on("status",this.forwardStatus),this.configuration.websocketProvider.on("open",this.boundOnOpen),this.configuration.websocketProvider.on("close",this.boundOnClose),this.configuration.websocketProvider.on("close",this.configuration.onClose),this.configuration.websocketProvider.on("close",this.forwardClose),this.configuration.websocketProvider.on("disconnect",this.configuration.onDisconnect),this.configuration.websocketProvider.on("disconnect",this.forwardDisconnect),this.configuration.websocketProvider.on("destroy",this.configuration.onDestroy),this.configuration.websocketProvider.on("destroy",this.forwardDestroy),this.configuration.websocketProvider.attach(this),this._isAttached=!0)}permissionDeniedHandler(t){this.emit("authenticationFailed",{reason:t}),this.isAuthenticated=!1}authenticatedHandler(t){this.isAuthenticated=!0,this.authorizedScope=t,this.emit("authenticated",{scope:t})}setAwarenessField(t,e){if(!this.awareness)throw new qe(`Cannot set awareness field "${t}" to ${JSON.stringify(e)}. You have disabled Awareness for this provider by explicitly passing awareness: null in the provider configuration.`);this.awareness.setLocalStateField(t,e)}}const Ze={type:"pen",color:j[0],size:16,opacity:1,palettes:{pen:[...j]},sizes:{pen:[...c]}},_e={color:j[0],size:8,opacity:1,fontFamily:"Arial",palette:[...j],sizes:[...h]},$e={color:j[0],size:4,opacity:1,palette:[...j],sizes:[...c],arrows:{end:{enabled:!0,style:"triangle"}}},Ge={providers:[]},Qe={shapeType:l.Rectangle,fillColor:{light:"transparent",dark:"transparent"},strokeColor:j[0],strokeWidth:4,opacity:1,fontColor:j[0],fontSize:16,fontFamily:"Arial",palette:[...j],sizes:[...c]},Xe=t(class extends e{constructor(t){super(),!1!==t&&this.__registerHost(),this.isReady=s(this,"isReady"),this.activeWorkspaceChange=s(this,"activeWorkspaceChange"),this.objectsChange=s(this,"objectsChange"),this.objectsAdded=s(this,"objectsAdded"),this.objectsRemoved=s(this,"objectsRemoved"),this.objectsUpdated=s(this,"objectsUpdated"),this.undoStateChange=s(this,"undoStateChange"),this.themeChange=s(this,"themeChange"),this.localeChange=s(this,"localeChange"),this.viewportChange=s(this,"viewportChange"),this.logout=s(this,"logout"),this.login=s(this,"login"),this.isPublicChange=s(this,"isPublicChange"),this.awarenessChange=s(this,"awarenessChange")}get host(){return this}scaleMax=E;scaleMin=S;lockDrawingScale=!0;viewportBoundaryLeft=-1/0;viewportBoundaryRight=1/0;viewportBoundaryTop=-1/0;viewportBoundaryBottom=1/0;debugInfo={showViewportInfo:!1,showObjectInfo:!1,showSyncProviderInfo:!0,showMigrationInfo:!0,showAssetResolverInfo:!1};user;activeUsers;controls=[{name:"selection",type:"tool",isDefault:!0,tool:d,icon:"cursor"},{name:"brush",type:"tool",tool:f,icon:"pen",config:Ze},{name:"eraser",type:"tool",tool:b,icon:"eraser"},{name:"line",type:"tool",tool:y,icon:"arrow",config:$e},{name:"shape",type:"tool",tool:k,icon:"shape-rectangle",config:Qe,subOptions:[{id:"rectangle",icon:"shape-rectangle",label:"Rectangle",value:l.Rectangle,toolProperty:"shapeType"},{id:"ellipse",icon:"shape-ellipse",label:"Ellipse",value:l.Ellipse,toolProperty:"shapeType"},{id:"triangle",icon:"shape-triangle",label:"Triangle",value:l.Triangle,toolProperty:"shapeType"}]},{name:"text",type:"tool",tool:u,icon:"type",config:_e},{name:"image",type:"tool",tool:w,icon:"image"},{name:"config",type:"config"}];globalContextMenuItems=[{label:"menu.paste",icon:"paste",action:t=>this.engineRef.paste(t.x,t.y)},{label:"menu.selectAll",icon:"select-all",action:()=>this.selectAllObjectsInViewport()}];objectContextMenuItems=[{label:"menu.copy",icon:"copy",group:"clipboard",action:()=>this.engineRef.copy()},{label:"menu.cut",icon:"cut",group:"clipboard",action:()=>this.engineRef.cut()},{label:"menu.paste",icon:"paste",group:"clipboard",action:t=>this.engineRef.paste(t.x,t.y)},{label:"menu.order",icon:"ordering",group:"other",children:[{label:"menu.bringToFront",icon:"bring-to-front",action:()=>this.engineRef.bringToFront()},{label:"menu.sendToBack",icon:"send-to-back",action:()=>this.engineRef.sendToBack()},{label:"menu.moveUp",icon:"arrow-up-from-dot",action:()=>this.engineRef.bringForward()},{label:"menu.moveDown",icon:"arrow-down-from-dot",action:()=>this.engineRef.sendBackward()}]},{label:"menu.align",icon:"align",group:"other",children:[{label:"menu.alignLeft",icon:"align-start-vertical",action:()=>this.engineRef.alignObjects(v.StartHorizontal)},{label:"menu.alignCenterHorizontal",icon:"align-center-horizontal",action:()=>this.engineRef.alignObjects(v.CenterHorizontal)},{label:"menu.alignRight",icon:"align-end-vertical",action:()=>this.engineRef.alignObjects(v.EndHorizontal)},{label:"menu.alignTop",icon:"align-start-horizontal",action:()=>this.engineRef.alignObjects(v.StartVertical)},{label:"menu.alignCenterVertical",icon:"align-center-vertical",action:()=>this.engineRef.alignObjects(v.CenterVertical)},{label:"menu.alignBottom",icon:"align-end-horizontal",action:()=>this.engineRef.alignObjects(v.EndVertical)}]},{label:"menu.group",icon:"group",group:"other",children:[{label:"menu.group",icon:"group",action:()=>this.engineRef.group()},{label:"menu.ungroup",icon:"ungroup",action:()=>this.engineRef.ungroup()}]},{label:"menu.export",icon:"download",group:"export",children:[{label:"menu.exportAsSvg",icon:"download",action:()=>this.engineRef.exportSelectedObjectsAsSvg()},{label:"menu.exportAsPng",icon:"download",action:()=>this.engineRef.exportSelectedObjectsAsPng()}]},{label:"menu.delete",icon:"delete",group:"edit",action:()=>this.engineRef.delete()}];themes;theme="light";licenseKey;locale="en";locales;fallbackLocale="en";customSvgIcons={};isPanningEnabled=!0;isZoomingEnabled=!0;isControlsVisible=!0;isUtilityPanelVisible=!0;isWorkspaceManagerVisible=!0;isMoreMenuVisible=!0;isZoomPanelVisible=!0;isObjectDistanceFadingActive=!1;syncConfig=z;assetStorageConfig=Ge;cursorTarget;loginConfig;isLoading=!1;editorId;activeWorkspaceId;isReady;activeWorkspaceChange;objectsChange;objectsAdded;objectsRemoved;objectsUpdated;undoStateChange;themeChange;localeChange;viewportChange;logout;login;isPublicChange;awarenessChange;isEngineReady=!1;isControlsReady=!1;isWorkspaceManagerReady=!1;workspaces=[];activeWorkspace;isVirtualKeyboardOpen=!1;undoState=null;isBackToContentButtonVisible=!1;resolvedTerms={};availableLocaleOptions=[];currentZoomPercent=100;shortcuts=[];currentIsPublic=!1;isEditorVisible=!1;activeNotification;isNotificationDismissing=!1;notificationDismissTimeout;notificationDismissAnimationTimeout;notificationDisplayDurationMs=5e3;notificationDismissAnimationDurationMs=180;isNotificationHovered=!1;onIsEngineReady(t){t&&this.isControlsReady&&this.checkIsReady()}onIsControlsReady(t){t&&this.isEngineReady&&this.checkIsReady()}onWorkspacesChange(t){const e=this.activeWorkspace;if(e){const s=t.find((t=>t.id===e.id));s&&s!==e&&(this.activeWorkspace=s)}if(this.activeWorkspaceId){const e=t.find((t=>t.id===this.activeWorkspaceId));e&&e!==this.activeWorkspace&&(this.activeWorkspace=e)}}onActiveWorkspaceChange(){this.updateCurrentIsPublic()}onActiveWorkspaceIdChange(t){if(!t)return;if(0===this.workspaces.length)return;const e=this.workspaces.find((e=>e.id===t));e?e!==this.activeWorkspace&&(this.activeWorkspace=e):console.warn("[KritzelEditor] No workspace found with ID: "+t)}onCurrentThemeChange(){this.applyTheme(),setTimeout((()=>this.setOsSpecificCssVariables()),0),this.engineRef&&this.engineRef.saveSettings(this.currentSettingsConfig)}onThemesChange(){this.applyTheme()}onLocaleChange(t){this.engineRef&&(this.engineRef.setLocale(t),this.engineRef.saveSettings(this.currentSettingsConfig),this.refreshLocalizedTerms())}async refreshLocalizedTerms(){this.engineRef&&(this.resolvedTerms=await this.engineRef.getResolvedTerms(),this.availableLocaleOptions=await this.engineRef.getAvailableLocaleOptions())}onTouchStart(t){t.cancelable&&t.preventDefault()}async getObjectById(t){return this.engineRef.getObjectById(t)}async addObject(t){return this.engineRef.addObject(t)}async addObjects(t){return this.engineRef.addObjects(t)}async updateObject(t,e){return this.engineRef.updateObject(t,e)}async removeObject(t){return this.engineRef.removeObject(t)}async removeObjects(t){return this.engineRef.removeObjects(t)}async getSelectedObjects(){return this.engineRef.getSelectedObjects()}async selectObjects(t){return this.engineRef.selectObjects(t)}async selectAllObjectsInViewport(){return this.engineRef.selectAllObjectsInViewport()}async clearSelection(){this.engineRef.clearSelection()}async centerObjectInViewport(t){return this.engineRef.centerObjectInViewport(t)}async panToObject(t){return this.engineRef.panToObject(t)}async backToContent(){return this.engineRef.backToContent()}async centerAllObjects(t=!0){return this.engineRef.centerAllObjects(t)}async centerObjects(t,e=!0){return this.engineRef.centerObjects(t,e)}async setViewport(t,e,s){return this.engineRef.setViewport(t,e,s)}async panTo(t,e){return this.engineRef.panTo(t,e)}async zoomTo(t,e,s){return this.engineRef.zoomTo(t,e,s)}async zoomIn(t=1.6,e=200){return this.engineRef.zoomIn(t,e)}async zoomOut(t=1.6,e=200){return this.engineRef.zoomOut(t,e)}async getViewport(){return this.engineRef.getViewport()}async screenToWorld(t,e){return this.engineRef.screenToWorld(t,e)}async worldToScreen(t,e){return this.engineRef.worldToScreen(t,e)}async createWorkspace(t){return this.engineRef.createWorkspace(t)}async updateWorkspace(t){return this.engineRef.updateWorkspace(t)}async deleteWorkspace(t){return this.engineRef.deleteWorkspace(t)}async getWorkspaces(){return this.engineRef.getWorkspaces()}async getActiveWorkspace(){return this.engineRef.getActiveWorkspace()}async loadSharedWorkspace(t){return this.engineRef.loadSharedWorkspace(t)}async reinitSync(){return this.engineRef.reinitSync()}async registerTool(t,e,s){return this.engineRef.registerTool(t,e,s)}async changeActiveTool(t){return this.engineRef.changeActiveTool(t)}async changeActiveToolByName(t){return this.engineRef.changeActiveToolByName(t)}async disable(){return this.engineRef.disable()}async enable(){return this.engineRef.enable()}async copy(){return this.engineRef.copy()}async cut(){return this.engineRef.cut()}async paste(t,e){return this.engineRef.paste(t,e)}async delete(){return this.engineRef.delete()}async bringForward(t){return this.engineRef.bringForward(t)}async sendBackward(t){return this.engineRef.sendBackward(t)}async bringToFront(t){return this.engineRef.bringToFront(t)}async sendToBack(t){return this.engineRef.sendToBack(t)}async alignObjects(t){return this.engineRef.alignObjects(t)}async group(){return this.engineRef.group()}async ungroup(){return this.engineRef.ungroup()}async undo(){return this.engineRef.undo()}async redo(){return this.engineRef.redo()}async getScreenshot(t="png",e){return this.engineRef.getScreenshot(t,e)}async exportViewportAsPng(t){return this.engineRef.exportViewportAsPng(t)}async exportViewportAsSvg(t){return this.engineRef.exportViewportAsSvg(t)}async exportSelectedObjectsAsPng(){return this.engineRef.exportSelectedObjectsAsPng()}async exportSelectedObjectsAsSvg(){return this.engineRef.exportSelectedObjectsAsSvg()}async downloadAsJson(t){return this.engineRef.downloadAsJson(t)}async importFromFile(){return this.engineRef.importFromFile()}async loadObjectsFromJson(t){return this.engineRef.loadObjectsFromJson(t)}async getObjectsTotalCount(){return this.engineRef.getObjectsTotalCount()}async getAllObjects(){return this.engineRef.getAllObjects()}async findObjects(t){return this.engineRef.findObjects(t)}async getObjectsInViewport(){return this.engineRef.getObjectsInViewport()}async hideContextMenu(){return this.engineRef.hideContextMenu()}async openContextMenu(t){return this.engineRef.openContextMenu(t)}async triggerSelectionChange(){return this.engineRef.triggerSelectionChange()}async getDisplayableShortcuts(){return this.engineRef.getDisplayableShortcuts()}async triggerNotification(t){const e={...t,id:t.id??D.generateUUID(),timestamp:t.timestamp??new Date};this.clearNotificationDismissAnimationTimer(),this.isNotificationDismissing=!1,this.isNotificationHovered=!1,this.activeNotification=e,this.scheduleNotificationDismiss()}engineRef;controlsRef;settingsRef;exportRef;splitButtonRef;shareDialogRef;loginDialogRef;currentUserDialogRef;componentWillLoad(){this.loadSettingsFromStorage(),this.applyTheme()}applyTheme(){const t=this.resolveThemeObject();A.applyThemeToElement(this.host,t)}resolveThemeObject(){return this.themes?.find((t=>t.name===this.theme))??("dark"===this.theme?x:T)}componentDidLoad(){this.registerCustomSvgIcons(),this.listenForMobileKeyboard(),this.setOsSpecificCssVariables()}disconnectedCallback(){this.clearNotificationDismissTimer(),this.clearNotificationDismissAnimationTimer()}async checkIsReady(){if(await customElements.whenDefined("kritzel-editor"),await customElements.whenDefined("kritzel-workspace-manager"),await customElements.whenDefined("kritzel-controls"),await customElements.whenDefined("kritzel-engine"),!(this.isEngineReady&&this.isControlsReady&&this.isWorkspaceManagerReady&&this.activeWorkspace))return;this.isEditorVisible=!0;const{id:t,name:e,isPublic:s,createdAt:i,updatedAt:n}=this.activeWorkspace;this.isReady.emit({host:this.host,activeWorkspace:{id:t,name:e,isPublic:s,createdAt:i,updatedAt:n},syncConfig:this.syncConfig,assetStorageConfig:this.assetStorageConfig,loginConfig:this.loginConfig,theme:this.theme})}async onEngineReady(t){if(this.isEngineReady=!0,!t.detail.activeWorkspace)return;this.activeWorkspace=t.detail.activeWorkspace,this.workspaces=t.detail.workspaces,this.currentIsPublic=await this.engineRef.getIsPublic(),await this.refreshLocalizedTerms();const e=await this.engineRef.getViewport();this.currentZoomPercent=this.getZoomPercentFromScale(e.scale),this.loadShortcuts()}handleWorkspacesChange(t){t.stopPropagation(),this.workspaces=t.detail}handleActiveWorkspaceChange(t){if(t.stopPropagation(),this.activeWorkspace=t.detail,!this.isEngineReady)return;const{id:e,name:s,isPublic:i,createdAt:n,updatedAt:o}=this.activeWorkspace;this.activeWorkspaceChange.emit({id:e,name:s,isPublic:i,createdAt:n,updatedAt:o})}handleObjectsChange(t){t.stopPropagation(),this.objectsChange.emit(t.detail)}handleObjectsAdded(t){t.stopPropagation(),this.objectsAdded.emit(t.detail)}handleObjectsRemoved(t){t.stopPropagation(),this.objectsRemoved.emit(t.detail)}handleObjectsUpdated(t){t.stopPropagation(),this.objectsUpdated.emit(t.detail)}handleUndoStateChange(t){t.stopPropagation(),this.undoStateChange.emit(t.detail),this.undoState=t.detail}async handleObjectsInViewportChange(t){t.stopPropagation();const e=this.getContentObjects(t.detail).length>0,s=this.getContentObjects(await this.engineRef.getAllObjects()).length>0;this.isBackToContentButtonVisible=!e&&s}handleViewportChange(t){t.stopPropagation(),this.currentZoomPercent=this.getZoomPercentFromScale(t.detail.scale),this.viewportChange.emit(t.detail)}getZoomPercentFromScale(t){return!Number.isFinite(t)||t<=0?100:Math.round(100*t)}handleAwarenessChange(t){t.stopPropagation(),this.awarenessChange.emit(t.detail)}handleNotificationsChange(t){t.stopPropagation(),this.clearNotificationDismissAnimationTimer(),this.isNotificationDismissing=!1,this.isNotificationHovered=!1,this.activeNotification=t.detail,this.scheduleNotificationDismiss()}handleNotificationHoverChange(t){t.stopPropagation(),this.isNotificationHovered=t.detail,this.isNotificationHovered?this.clearNotificationDismissTimer():this.activeNotification&&!this.isNotificationDismissing&&this.scheduleNotificationDismiss()}scheduleNotificationDismiss(){this.clearNotificationDismissTimer(),this.notificationDismissTimeout=setTimeout((()=>{this.dismissNotification()}),this.notificationDisplayDurationMs)}clearNotificationDismissTimer(){this.notificationDismissTimeout&&(clearTimeout(this.notificationDismissTimeout),this.notificationDismissTimeout=void 0)}clearNotificationDismissAnimationTimer(){this.notificationDismissAnimationTimeout&&(clearTimeout(this.notificationDismissAnimationTimeout),this.notificationDismissAnimationTimeout=void 0)}dismissNotification=()=>{this.clearNotificationDismissTimer(),this.isNotificationHovered=!1,this.activeNotification&&!this.isNotificationDismissing&&(this.isNotificationDismissing=!0,this.clearNotificationDismissAnimationTimer(),this.notificationDismissAnimationTimeout=setTimeout((()=>{this.activeNotification=void 0,this.isNotificationDismissing=!1,this.notificationDismissAnimationTimeout=void 0}),this.notificationDismissAnimationDurationMs))};handleSettingsChange(t){this.scaleMin=t.detail.scaleMin,this.scaleMax=t.detail.scaleMax,this.lockDrawingScale=t.detail.lockDrawingScale,this.theme=t.detail.theme,"string"==typeof t.detail.locale&&t.detail.locale!==this.locale&&(this.locale=t.detail.locale,this.localeChange.emit(t.detail.locale)),this.viewportBoundaryLeft=t.detail.viewportBoundaryLeft??-1/0,this.viewportBoundaryRight=t.detail.viewportBoundaryRight??1/0,this.viewportBoundaryTop=t.detail.viewportBoundaryTop??-1/0,this.viewportBoundaryBottom=t.detail.viewportBoundaryBottom??1/0,this.debugInfo=t.detail.debugInfo,this.engineRef&&this.engineRef.saveSettings(t.detail),this.themeChange.emit(t.detail.theme)}get moreMenuItems(){return[{id:"share",label:this.resolvedTerms["menu.share"]??"Share",icon:"share",action:()=>{this.isLoggedIn||!this.loginConfig?this.shareDialogRef.open():this.openLoginDialog()}},{id:"export",label:this.resolvedTerms["menu.export"]??"Export",icon:"upload",action:async()=>{const t=await this.engineRef.getScreenshot("png");this.exportRef.open(t??void 0)}},{id:"import",label:this.resolvedTerms["menu.import"]??"Import",icon:"download",action:()=>this.engineRef.importFromFile()},{id:"settings",label:this.resolvedTerms["menu.settings"]??"Settings",icon:"settings",action:()=>this.settingsRef.open()}]}handleToggleIsPublic=async t=>{const e=t.detail,s=await this.engineRef.getActiveWorkspace();s.isPublic=e,await this.engineRef.updateWorkspace(s),this.activeWorkspace=s.clone(),this.isPublicChange.emit({isPublic:e,workspaceId:s.id})};updateCurrentIsPublic(){const t=this.activeWorkspace?.isPublic??!1,e=this.activeWorkspace?.id;this.currentIsPublic=t,e&&this.isPublicChange.emit({isPublic:t,workspaceId:e})}handleProviderLogin=t=>{this.login.emit(t.detail)};handleCurrentUserLogout=()=>{this.logout.emit()};get isLoggedIn(){return!!this.user&&!this.user.isGuest}async openLoginDialog(){this.loginDialogRef?.open()}async setLoginLoading(t){this.loginDialogRef?.setLoading(t)}async setLocale(t){this.locale=t,await(this.engineRef?.setLocale(t))}async getLocale(){return this.engineRef?this.engineRef.getLocale():this.locale}async getAvailableLocales(){return this.engineRef?this.engineRef.getAvailableLocales():[]}async registerLocales(t){await(this.engineRef?.registerLocales(t))}async t(t,e){return this.engineRef?this.engineRef.t(t,e):t}getSettingsStorageKey(){return this.editorId?"kritzel-settings-"+this.editorId:"kritzel-settings"}loadSettingsFromStorage(){const t=localStorage.getItem(this.getSettingsStorageKey());if(t)try{const e=JSON.parse(t);"number"==typeof e.scaleMin&&(this.scaleMin=e.scaleMin),"number"==typeof e.scaleMax&&(this.scaleMax=e.scaleMax),"boolean"==typeof e.lockDrawingScale&&(this.lockDrawingScale=e.lockDrawingScale),"string"==typeof e.theme&&(this.theme=e.theme),"string"==typeof e.locale&&(this.locale=e.locale),"number"==typeof e.viewportBoundaryLeft&&(this.viewportBoundaryLeft=e.viewportBoundaryLeft),"number"==typeof e.viewportBoundaryRight&&(this.viewportBoundaryRight=e.viewportBoundaryRight),"number"==typeof e.viewportBoundaryTop&&(this.viewportBoundaryTop=e.viewportBoundaryTop),"number"==typeof e.viewportBoundaryBottom&&(this.viewportBoundaryBottom=e.viewportBoundaryBottom),e.debugInfo&&(this.debugInfo={...this.debugInfo,...e.debugInfo})}catch{}}async loadShortcuts(){this.shortcuts=await this.engineRef.getDisplayableShortcuts()}get currentSettingsConfig(){return{scaleMin:this.scaleMin,scaleMax:this.scaleMax,lockDrawingScale:this.lockDrawingScale,theme:this.theme,locale:this.locale,viewportBoundaryLeft:this.viewportBoundaryLeft,viewportBoundaryRight:this.viewportBoundaryRight,viewportBoundaryTop:this.viewportBoundaryTop,viewportBoundaryBottom:this.viewportBoundaryBottom,debugInfo:this.debugInfo}}getContentObjects(t){return t.filter((t=>!(t instanceof p||t instanceof m)))}registerCustomSvgIcons(){for(const[t,e]of Object.entries(this.customSvgIcons))r.register(t,e)}listenForMobileKeyboard(){g.onKeyboardVisibleChanged((t=>{this.isVirtualKeyboardOpen=t}))}setOsSpecificCssVariables(){switch(I.detectOS()){case"iOS":this.host.style.setProperty("--kritzel-editor-top-left-buttons-top","14px"),this.host.style.setProperty("--kritzel-editor-top-left-buttons-left","14px"),this.host.style.setProperty("--kritzel-editor-controls-bottom","14px"),this.host.style.setProperty("--kritzel-editor-controls-transition","cubic-bezier(0.25, 0.1, 0.25, 1.0)"),this.host.style.setProperty("--kritzel-editor-controls-transform","translateY(200%)"),this.host.style.setProperty("--kritzel-editor-controls-transition-duration","0.25s");break;case"Android":this.host.style.setProperty("--kritzel-editor-top-left-buttons-top","14px"),this.host.style.setProperty("--kritzel-editor-top-left-buttons-left","14px"),this.host.style.setProperty("--kritzel-editor-controls-bottom","24px"),this.host.style.setProperty("--kritzel-editor-controls-transition","cubic-bezier(0.25, 0.1, 0.25, 1.0)"),this.host.style.setProperty("--kritzel-editor-controls-transform","translateY(200%)"),this.host.style.setProperty("--kritzel-editor-controls-transition-duration","0.25s");break;default:this.host.style.setProperty("--kritzel-editor-top-left-buttons-top","14px"),this.host.style.setProperty("--kritzel-editor-top-left-buttons-left","14px"),this.host.style.setProperty("--kritzel-editor-controls-bottom","14px")}}render(){const t=this.isLoggedIn,e=t,s=this.isReady&&!!this.loginConfig&&!t;return i(n,{key:"3128b38a04cd636abc1f2466f1ac1aa3dcea2262"},i("div",{key:"b1fbb051cb1144fd84f28cfea4ad824f92189dbd",class:"editor-content",style:{opacity:this.isEditorVisible?"1":"0",visibility:this.isEditorVisible?"visible":"hidden",transition:"opacity 0.2s ease-in-out, visibility 0.2s ease-in-out"}},i("div",{key:"2b896fa8bd00a7c68b74df7a9846e8c3e0f6efc4",class:"top-left-buttons"},i("kritzel-workspace-manager",{key:"13244251aa8999d78d275eefe5583d592f3506fc",visible:this.isWorkspaceManagerVisible,workspaces:this.workspaces,activeWorkspace:this.activeWorkspace,terms:this.resolvedTerms,onWorkspaceChange:t=>this.activeWorkspace=t.detail,onIsWorkspaceManagerReady:()=>this.isWorkspaceManagerReady=!0}),i("kritzel-back-to-content",{key:"7d3015918e4af7ee435aee8da37ddfa206cdfd66",visible:this.isBackToContentButtonVisible,text:this.resolvedTerms["backToContent.label"]??"Back to content",onBackToContent:()=>this.backToContent()})),this.activeNotification&&i("div",{key:"49f13f23698db9b804d139e0f35696be06569346",class:"top-center-notification-layer",role:"presentation"},i("div",{key:"765aa6995398aca3c7738758bedb7d9a7c2f099a",class:{"top-center-notification-container":!0,"is-dismissing":this.isNotificationDismissing},role:"presentation"},i("kritzel-notification-card",{key:"fe0dfa30aa498a608f9167b01e0a2309dfa67162",notification:this.activeNotification,locale:this.locale,onDismiss:this.dismissNotification,onHoverChange:t=>this.handleNotificationHoverChange(t)}))),i("kritzel-engine",{key:"5aeb7979faa8779653ff6a2930d288fd601cb0e9",ref:t=>{t&&(this.engineRef=t)},workspace:this.activeWorkspace,activeWorkspaceId:this.activeWorkspaceId,editorId:this.editorId,syncConfig:this.syncConfig,assetStorageConfig:this.assetStorageConfig,user:this.user,scaleMax:this.scaleMax,lockDrawingScale:this.lockDrawingScale,isObjectDistanceFadingActive:this.isObjectDistanceFadingActive,scaleMin:this.scaleMin,cursorTarget:this.cursorTarget,isLoading:this.isLoading,viewportBoundaryLeft:this.viewportBoundaryLeft,viewportBoundaryRight:this.viewportBoundaryRight,viewportBoundaryTop:this.viewportBoundaryTop,viewportBoundaryBottom:this.viewportBoundaryBottom,isPanningEnabled:this.isPanningEnabled,isZoomingEnabled:this.isZoomingEnabled,theme:this.theme,themes:this.themes,licenseKey:this.licenseKey,locale:this.locale,locales:this.locales,fallbackLocale:this.fallbackLocale,debugInfo:this.debugInfo,globalContextMenuItems:this.globalContextMenuItems,objectContextMenuItems:this.objectContextMenuItems,onIsEngineReady:t=>this.onEngineReady(t),onWorkspacesChange:t=>this.handleWorkspacesChange(t),onActiveWorkspaceChange:t=>this.handleActiveWorkspaceChange(t),onObjectsChange:t=>this.handleObjectsChange(t),onObjectsAdded:t=>this.handleObjectsAdded(t),onObjectsRemoved:t=>this.handleObjectsRemoved(t),onObjectsUpdated:t=>this.handleObjectsUpdated(t),onUndoStateChange:t=>this.handleUndoStateChange(t),onObjectsInViewportChange:t=>this.handleObjectsInViewportChange(t),onViewportChange:t=>this.handleViewportChange(t),onAwarenessChange:t=>this.handleAwarenessChange(t),onNotificationsChange:t=>this.handleNotificationsChange(t)}),i("kritzel-controls",{key:"eda4dc93fe663c8472638190216bea5bf64d7153",visible:this.isControlsVisible,class:{"keyboard-open":this.isVirtualKeyboardOpen},ref:t=>{t&&(this.controlsRef=t)},controls:this.controls,isUtilityPanelVisible:this.isUtilityPanelVisible,undoState:this.undoState??void 0,theme:this.theme,terms:this.resolvedTerms,onIsControlsReady:()=>this.isControlsReady=!0}),i("div",{key:"ffdb548da8aac3498b1b3e9bfdc9a41f8c448675",class:"bottom-left-buttons"},i("kritzel-zoom-panel",{key:"af6f6a86212195fd3ee13bc33c16574e0a5236a6",visible:this.isZoomPanelVisible,disabled:!this.isZoomingEnabled,zoomPercent:this.currentZoomPercent,terms:this.resolvedTerms,onZoomIn:()=>this.zoomIn(),onZoomOut:()=>this.zoomOut()})),i("div",{key:"0870c0e47838fc99b4041718a431535827e199cf",class:"top-right-buttons"},i("kritzel-settings",{key:"b95beb43dbe1a9c99454fc4ff74f0630aca7ad83",ref:t=>{t&&(this.settingsRef=t)},shortcuts:this.shortcuts,availableThemes:this.themes&&this.themes.length>0?this.themes.map((t=>t.name)):["light","dark"],availableLocales:this.availableLocaleOptions,settings:this.currentSettingsConfig,terms:this.resolvedTerms,onSettingsChange:t=>this.handleSettingsChange(t)}),i("kritzel-export",{key:"ef6fea2715ff99226fde937185a693efc2a7dd75",ref:t=>{t&&(this.exportRef=t)},workspaceName:this.activeWorkspace?.name||"workspace",terms:this.resolvedTerms,onExportPng:()=>this.engineRef.exportViewportAsPng(),onExportSvg:()=>this.engineRef.exportViewportAsSvg(),onExportJson:t=>this.engineRef.downloadAsJson(t.detail)}),i("kritzel-active-users",{key:"872b7fa12d49410d1c370baed3386a34f89d3e2a",users:this.activeUsers}),e&&i("kritzel-current-user",{key:"da19825b4fba6a516803f8330cdfdfac6b6c9db1",user:this.user,terms:this.resolvedTerms,onClick:()=>this.currentUserDialogRef?.open()}),e&&i("kritzel-current-user-dialog",{key:"9336ce611286d3ecf9318317ab4bedb8c3f79f05",ref:t=>{t&&(this.currentUserDialogRef=t,this.currentUserDialogRef.addEventListener("logoutRequest",this.handleCurrentUserLogout))},user:this.user,terms:this.resolvedTerms}),s&&i("kritzel-button",{key:"a9e38ad3e13c785f6a4223ebde95f60451c6515f",onButtonClick:()=>this.loginDialogRef?.open()},this.resolvedTerms["login.dialogTitle"]??"Sign in"),i("kritzel-more-menu",{key:"b8f63a63ae4e75a70d0069410170af902f2a362b",items:this.moreMenuItems,visible:this.isMoreMenuVisible,terms:this.resolvedTerms}),i("kritzel-share-dialog",{key:"7a923fd51e8d2bd1e2833e0941622efadd55f881",ref:t=>{t&&(this.shareDialogRef=t)},isPublic:this.currentIsPublic,workspaceId:this.activeWorkspace?.id,terms:this.resolvedTerms,onToggleIsPublic:this.handleToggleIsPublic}),this.loginConfig&&i("kritzel-login-dialog",{key:"ac54c699a94bb2657a6817c37d6220b75d931cd3",ref:t=>{t&&(this.loginDialogRef=t)},providers:this.loginConfig.providers,dialogTitle:this.loginConfig.title??this.resolvedTerms["login.dialogTitle"]??"Sign in",subtitle:this.loginConfig.subtitle,onProviderLogin:this.handleProviderLogin}))))}static get watchers(){return{isEngineReady:[{onIsEngineReady:0}],isControlsReady:[{onIsControlsReady:0}],workspaces:[{onWorkspacesChange:0}],activeWorkspace:[{onActiveWorkspaceChange:0}],activeWorkspaceId:[{onActiveWorkspaceIdChange:0}],theme:[{onCurrentThemeChange:0}],themes:[{onThemesChange:0}],locale:[{onLocaleChange:0}]}}static get style(){return"kritzel-editor{display:flex;margin:0;position:relative;container-type:inline-size;overflow:hidden;width:100%;height:100%;align-items:center;justify-content:center;touch-action:manipulation;user-select:none;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-align:start;line-height:normal}.editor-content{position:absolute;inset:0}.editor-content>kritzel-engine{position:absolute;inset:0;z-index:0}kritzel-controls{position:absolute;z-index:1;left:0;right:0;margin-inline:auto;width:max-content;max-width:calc(100% - 16px);bottom:var(--kritzel-editor-controls-bottom, 14px);transition:transform var(--kritzel-editor-controls-transition-duration, 0.1s) var(--kritzel-editor-controls-transition, ease-in-out)}kritzel-controls.keyboard-open{transform:var(--kritzel-editor-controls-transform, translateY(300%))}.top-left-buttons{position:absolute;z-index:1;top:var(--kritzel-editor-top-left-buttons-top, 14px);left:var(--kritzel-editor-top-left-buttons-left, 14px);display:flex;align-items:flex-start;gap:8px}.top-center-notification-layer{position:absolute;top:var(--kritzel-editor-top-center-notification-top, 14px);left:0;right:0;z-index:var(--kritzel-editor-top-center-notification-z-index, 10001);display:flex;justify-content:center;pointer-events:none}.top-center-notification-container{width:min(90vw, 420px);pointer-events:auto;animation:kritzel-notification-slide-in var(--kritzel-editor-notification-animation-duration, 220ms) var(--kritzel-editor-notification-animation-easing, cubic-bezier(0.22, 1, 0.36, 1))}.top-center-notification-container.is-dismissing{animation:kritzel-notification-fade-out var(--kritzel-editor-notification-dismiss-animation-duration, 180ms) var(--kritzel-editor-notification-dismiss-animation-easing, ease-in) forwards}@keyframes kritzel-notification-slide-in{from{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}@keyframes kritzel-notification-fade-out{from{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-6px)}}@media (prefers-reduced-motion: reduce){.top-center-notification-container{animation:none}}.top-right-buttons{position:absolute;z-index:1;top:var(--kritzel-editor-top-right-buttons-top, 14px);right:var(--kritzel-editor-top-right-buttons-right, 14px);display:flex;align-items:center;gap:8px}.bottom-left-buttons{position:absolute;z-index:1;left:var(--kritzel-editor-top-left-buttons-left, 14px);bottom:var(--kritzel-editor-controls-bottom, 14px);display:flex;align-items:flex-end}@container (max-width: 767px){.bottom-left-buttons{display:none}}.top-right-button{display:flex;align-items:center;justify-content:center;width:50px;height:50px;padding:0;border:var(--kritzel-split-button-border, 1px solid #ebebeb);border-radius:var(--kritzel-split-button-border-radius, 12px);background-color:var(--kritzel-split-button-background-color, #ffffff);cursor:var(--kritzel-global-pointer-cursor, pointer);box-shadow:var(--kritzel-split-button-box-shadow, 0 0 3px rgba(0, 0, 0, 0.08));transition:background-color 150ms ease;-webkit-tap-highlight-color:transparent}.top-right-button:hover{background-color:#f5f5f5}.top-right-button:active{background-color:#ebebeb}"}},[512,"kritzel-editor",{scaleMax:[1026,"scale-max"],scaleMin:[1026,"scale-min"],lockDrawingScale:[1028,"lock-drawing-scale"],viewportBoundaryLeft:[1026,"viewport-boundary-left"],viewportBoundaryRight:[1026,"viewport-boundary-right"],viewportBoundaryTop:[1026,"viewport-boundary-top"],viewportBoundaryBottom:[1026,"viewport-boundary-bottom"],debugInfo:[1040],user:[16],activeUsers:[16],controls:[16],globalContextMenuItems:[16],objectContextMenuItems:[16],themes:[16],theme:[1025],licenseKey:[1,"license-key"],locale:[1025],locales:[16],fallbackLocale:[1,"fallback-locale"],customSvgIcons:[16],isPanningEnabled:[1028,"is-panning-enabled"],isZoomingEnabled:[1028,"is-zooming-enabled"],isControlsVisible:[4,"is-controls-visible"],isUtilityPanelVisible:[4,"is-utility-panel-visible"],isWorkspaceManagerVisible:[4,"is-workspace-manager-visible"],isMoreMenuVisible:[4,"is-more-menu-visible"],isZoomPanelVisible:[4,"is-zoom-panel-visible"],isObjectDistanceFadingActive:[4,"is-object-distance-fading-active"],syncConfig:[16],assetStorageConfig:[16],cursorTarget:[16],loginConfig:[16],isLoading:[4,"is-loading"],editorId:[1,"editor-id"],activeWorkspaceId:[1,"active-workspace-id"],isEngineReady:[32],isControlsReady:[32],isWorkspaceManagerReady:[32],workspaces:[32],activeWorkspace:[32],isVirtualKeyboardOpen:[32],undoState:[32],isBackToContentButtonVisible:[32],resolvedTerms:[32],availableLocaleOptions:[32],currentZoomPercent:[32],shortcuts:[32],currentIsPublic:[32],isEditorVisible:[32],activeNotification:[32],isNotificationDismissing:[32],getObjectById:[64],addObject:[64],addObjects:[64],updateObject:[64],removeObject:[64],removeObjects:[64],getSelectedObjects:[64],selectObjects:[64],selectAllObjectsInViewport:[64],clearSelection:[64],centerObjectInViewport:[64],panToObject:[64],backToContent:[64],centerAllObjects:[64],centerObjects:[64],setViewport:[64],panTo:[64],zoomTo:[64],zoomIn:[64],zoomOut:[64],getViewport:[64],screenToWorld:[64],worldToScreen:[64],createWorkspace:[64],updateWorkspace:[64],deleteWorkspace:[64],getWorkspaces:[64],getActiveWorkspace:[64],loadSharedWorkspace:[64],reinitSync:[64],registerTool:[64],changeActiveTool:[64],changeActiveToolByName:[64],disable:[64],enable:[64],copy:[64],cut:[64],paste:[64],delete:[64],bringForward:[64],sendBackward:[64],bringToFront:[64],sendToBack:[64],alignObjects:[64],group:[64],ungroup:[64],undo:[64],redo:[64],getScreenshot:[64],exportViewportAsPng:[64],exportViewportAsSvg:[64],exportSelectedObjectsAsPng:[64],exportSelectedObjectsAsSvg:[64],downloadAsJson:[64],importFromFile:[64],loadObjectsFromJson:[64],getObjectsTotalCount:[64],getAllObjects:[64],findObjects:[64],getObjectsInViewport:[64],hideContextMenu:[64],openContextMenu:[64],triggerSelectionChange:[64],getDisplayableShortcuts:[64],triggerNotification:[64],openLoginDialog:[64],setLoginLoading:[64],setLocale:[64],getLocale:[64],getAvailableLocales:[64],registerLocales:[64],t:[64]},[[0,"dblclick","onTouchStart"]],{isEngineReady:[{onIsEngineReady:0}],isControlsReady:[{onIsControlsReady:0}],workspaces:[{onWorkspacesChange:0}],activeWorkspace:[{onActiveWorkspaceChange:0}],activeWorkspaceId:[{onActiveWorkspaceIdChange:0}],theme:[{onCurrentThemeChange:0}],themes:[{onThemesChange:0}],locale:[{onLocaleChange:0}]}]),ts=Xe,es=function(){"undefined"!=typeof customElements&&["kritzel-editor","kritzel-active-users","kritzel-avatar","kritzel-awareness-cursors","kritzel-back-to-content","kritzel-button","kritzel-color","kritzel-color-palette","kritzel-context-menu","kritzel-controls","kritzel-current-user","kritzel-current-user-dialog","kritzel-cursor-trail","kritzel-dialog","kritzel-dropdown","kritzel-engine","kritzel-export","kritzel-font","kritzel-font-family","kritzel-font-size","kritzel-icon","kritzel-input","kritzel-line-endings","kritzel-loading-overlay","kritzel-login-dialog","kritzel-master-detail","kritzel-menu","kritzel-menu-item","kritzel-more-menu","kritzel-notification-card","kritzel-numeric-input","kritzel-opacity-slider","kritzel-pill-tabs","kritzel-portal","kritzel-settings","kritzel-shape-fill","kritzel-share-dialog","kritzel-slide-toggle","kritzel-split-button","kritzel-stroke-size","kritzel-sync-indicator","kritzel-tool-config","kritzel-tooltip","kritzel-utility-panel","kritzel-watermark","kritzel-workspace-manager","kritzel-zoom-panel"].forEach((t=>{switch(t){case"kritzel-editor":customElements.get(o(t))||customElements.define(o(t),Xe);break;case"kritzel-active-users":customElements.get(o(t))||U();break;case"kritzel-avatar":customElements.get(o(t))||R();break;case"kritzel-awareness-cursors":customElements.get(o(t))||B();break;case"kritzel-back-to-content":customElements.get(o(t))||P();break;case"kritzel-button":customElements.get(o(t))||W();break;case"kritzel-color":customElements.get(o(t))||V();break;case"kritzel-color-palette":customElements.get(o(t))||L();break;case"kritzel-context-menu":customElements.get(o(t))||N();break;case"kritzel-controls":customElements.get(o(t))||F();break;case"kritzel-current-user":customElements.get(o(t))||J();break;case"kritzel-current-user-dialog":customElements.get(o(t))||H();break;case"kritzel-cursor-trail":customElements.get(o(t))||Y();break;case"kritzel-dialog":customElements.get(o(t))||q();break;case"kritzel-dropdown":customElements.get(o(t))||K();break;case"kritzel-engine":customElements.get(o(t))||C();break;case"kritzel-export":customElements.get(o(t))||Z();break;case"kritzel-font":customElements.get(o(t))||_();break;case"kritzel-font-family":customElements.get(o(t))||$();break;case"kritzel-font-size":customElements.get(o(t))||G();break;case"kritzel-icon":customElements.get(o(t))||a();break;case"kritzel-input":customElements.get(o(t))||Q();break;case"kritzel-line-endings":customElements.get(o(t))||X();break;case"kritzel-loading-overlay":customElements.get(o(t))||tt();break;case"kritzel-login-dialog":customElements.get(o(t))||et();break;case"kritzel-master-detail":customElements.get(o(t))||st();break;case"kritzel-menu":customElements.get(o(t))||nt();break;case"kritzel-menu-item":customElements.get(o(t))||it();break;case"kritzel-more-menu":customElements.get(o(t))||ot();break;case"kritzel-notification-card":customElements.get(o(t))||rt();break;case"kritzel-numeric-input":customElements.get(o(t))||at();break;case"kritzel-opacity-slider":customElements.get(o(t))||ct();break;case"kritzel-pill-tabs":customElements.get(o(t))||ht();break;case"kritzel-portal":customElements.get(o(t))||lt();break;case"kritzel-settings":customElements.get(o(t))||dt();break;case"kritzel-shape-fill":customElements.get(o(t))||ut();break;case"kritzel-share-dialog":customElements.get(o(t))||pt();break;case"kritzel-slide-toggle":customElements.get(o(t))||mt();break;case"kritzel-split-button":customElements.get(o(t))||gt();break;case"kritzel-stroke-size":customElements.get(o(t))||ft();break;case"kritzel-sync-indicator":customElements.get(o(t))||bt();break;case"kritzel-tool-config":customElements.get(o(t))||yt();break;case"kritzel-tooltip":customElements.get(o(t))||kt();break;case"kritzel-utility-panel":customElements.get(o(t))||wt();break;case"kritzel-watermark":customElements.get(o(t))||O();break;case"kritzel-workspace-manager":customElements.get(o(t))||vt();break;case"kritzel-zoom-panel":customElements.get(o(t))||zt()}}))};export{Ze as D,Ke as H,ts as KritzelEditor,Be as a,_e as b,$e as c,Ge as d,es as defineCustomElement}
@@ -1 +1 @@
1
- import{n as o,m as s}from"./p-BbGeZ47F.js";const m=o,p=s;export{m as KritzelEngine,p as defineCustomElement}
1
+ import{n as o,m as r}from"./p-C7rN6L3d.js";const s=o,m=r;export{s as KritzelEngine,m as defineCustomElement}
@@ -1 +1 @@
1
- import{K as o,d as s}from"./p-Cq3RhUie.js";const p=o,r=s;export{p as KritzelExport,r as defineCustomElement}
1
+ import{K as p,d as o}from"./p-e6Zpc9Vp.js";const s=p,r=o;export{s as KritzelExport,r as defineCustomElement}
@@ -1 +1 @@
1
- import{K as o,d as s}from"./p-BJ3Do8l1.js";const p=o,r=s;export{p as KritzelLoadingOverlay,r as defineCustomElement}
1
+ import{K as o,d as r}from"./p-DgJ0ufzr.js";const s=o,p=r;export{s as KritzelLoadingOverlay,p as defineCustomElement}
@@ -1 +1 @@
1
- import{K as o,d as s}from"./p-D-NSbx5U.js";const p=o,r=s;export{p as KritzelLoginDialog,r as defineCustomElement}
1
+ import{K as o,d as s}from"./p-B5oHmPJb.js";const m=o,p=s;export{m as KritzelLoginDialog,p as defineCustomElement}
@@ -1 +1 @@
1
- import{K as o,d as s}from"./p-_Bq7P1RT.js";const p=o,r=s;export{p as KritzelMoreMenu,r as defineCustomElement}
1
+ import{K as s,d as o}from"./p-D30zs0kA.js";const p=s,r=o;export{p as KritzelMoreMenu,r as defineCustomElement}
@@ -1 +1 @@
1
- import{K as o,d as r}from"./p-DiN6reV0.js";const s=o,p=r;export{s as KritzelSettings,p as defineCustomElement}
1
+ import{K as s,d as o}from"./p-s7PqL1NE.js";const p=s,r=o;export{p as KritzelSettings,r as defineCustomElement}
@@ -1 +1 @@
1
- import{K as o,d as r}from"./p-CrihGZwy.js";const s=o,p=r;export{s as KritzelShareDialog,p as defineCustomElement}
1
+ import{K as o,d as r}from"./p-DUYmwrWV.js";const s=o,m=r;export{s as KritzelShareDialog,m as defineCustomElement}
@@ -0,0 +1,11 @@
1
+ import type { Components, JSX } from "../types/components";
2
+
3
+ interface KritzelSyncIndicator extends Components.KritzelSyncIndicator, HTMLElement {}
4
+ export const KritzelSyncIndicator: {
5
+ prototype: KritzelSyncIndicator;
6
+ new (): KritzelSyncIndicator;
7
+ };
8
+ /**
9
+ * Used to define this component and all nested components recursively.
10
+ */
11
+ export const defineCustomElement: () => void;
@@ -0,0 +1 @@
1
+ import{K as o,d as s}from"./p-894OnDQV.js";const p=o,r=s;export{p as KritzelSyncIndicator,r as defineCustomElement}
@@ -1 +1 @@
1
- import{K as o,d as s}from"./p-DU7g4PU-.js";const p=o,r=s;export{p as KritzelTooltip,r as defineCustomElement}
1
+ import{K as o,d as r}from"./p-BTzlrIxe.js";const s=o,p=r;export{s as KritzelTooltip,p as defineCustomElement}
@@ -1 +1 @@
1
- import{K as o,d as s}from"./p-Cf2ZKUo0.js";const p=o,r=s;export{p as KritzelUtilityPanel,r as defineCustomElement}
1
+ import{K as s,d as o}from"./p-CsvMgk_f.js";const p=s,r=o;export{p as KritzelUtilityPanel,r as defineCustomElement}
@@ -1 +1 @@
1
- import{K as o,d as s}from"./p-DS6BjPHy.js";const p=o,r=s;export{p as KritzelZoomPanel,r as defineCustomElement}
1
+ import{K as o,d as s}from"./p-DkUb2czk.js";const p=o,r=s;export{p as KritzelZoomPanel,r as defineCustomElement}
@@ -0,0 +1 @@
1
+ import{p as i,H as t,h as e,d as r,t as a}from"./p-B43upypT.js";const n=i(class extends t{constructor(i){super(),!1!==i&&this.__registerHost(),this.__attachShadow()}visible=!1;text="Syncing...";render(){return e(r,{key:"833aa19a39357398a9fc2d97246398b77f1b990f"},e("div",{key:"cabb31890ea7c6afdafa6427306caa19a2d8f818",class:{indicator:!0,visible:this.visible},role:"status","aria-live":"polite","aria-label":"Synchronizing workspace"},e("span",{key:"086105d00156d8556d8a78cfb0cec47d65b40a1f",class:"spinner","aria-hidden":"true"}),e("span",{key:"9934152bb9f55399a20112f4230c4efc1518a2e1"},this.text)))}static get style(){return":host{display:contents}.indicator{position:absolute;top:12px;left:50%;transform:translateX(-50%);z-index:var(--kritzel-sync-indicator-z-index, 10001);pointer-events:none;display:inline-flex;align-items:center;gap:8px;padding:6px 10px;border-radius:999px;background:var(--kritzel-sync-indicator-background, rgba(255, 255, 255, 0.92));color:var(--kritzel-sync-indicator-color, #334155);box-shadow:0 2px 10px rgba(0, 0, 0, 0.12);font-family:var(--kritzel-font-family, sans-serif);font-size:12px;line-height:1;font-weight:500;opacity:0;visibility:hidden}.indicator.visible{opacity:1;visibility:visible}.spinner{width:12px;height:12px;border-radius:50%;border:2px solid var(--kritzel-sync-indicator-spinner-track, rgba(148, 163, 184, 0.35));border-top-color:var(--kritzel-sync-indicator-spinner-color, #2563eb);animation:kritzel-sync-indicator-spin 0.8s linear infinite}@keyframes kritzel-sync-indicator-spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}"}},[513,"kritzel-sync-indicator",{visible:[4],text:[1]}]);function s(){"undefined"!=typeof customElements&&["kritzel-sync-indicator"].forEach((i=>{"kritzel-sync-indicator"===i&&(customElements.get(a(i))||customElements.define(a(i),n))}))}export{n as K,s as d}
@@ -1 +1 @@
1
- import{p as i,H as e,c as o,h as t,d as r,t as l}from"./p-B43upypT.js";import{d as s}from"./p-DX2nriaq.js";import{d as n}from"./p-CdR76C4L.js";const a=i(class extends e{constructor(i){super(),!1!==i&&this.__registerHost(),this.__attachShadow(),this.providerLogin=o(this,"providerLogin"),this.dialogClosed=o(this,"dialogClosed")}get host(){return this}providers=[];dialogTitle="Sign in";subtitle;isDialogOpen=!1;loadingProvider=null;providerLogin;dialogClosed;async open(){this.loadingProvider=null,this.isDialogOpen=!0}async close(){this.isDialogOpen=!1,this.loadingProvider=null}async setLoading(i){this.loadingProvider=i}handleProviderClick=i=>{this.loadingProvider||(this.loadingProvider=i.name,this.providerLogin.emit({provider:i.name}))};closeDialog=()=>{this.isDialogOpen=!1,this.loadingProvider=null,this.dialogClosed.emit()};render(){return t(r,{key:"2af5a03ebc5f779527a18e0ebfaf3e603d907ec7"},t("kritzel-dialog",{key:"10fd1178cb30985fbe3e88be0e3b276bd35d7e7f",dialogTitle:this.dialogTitle,isOpen:this.isDialogOpen,onDialogClose:this.closeDialog,size:"small",contained:!0},t("div",{key:"29ce2d7893a7bca3c62ae3a577c0652d30f62905",class:"login-content"},this.subtitle&&t("p",{key:"a70d440e724aa97050d361f2d54456e61192bc54",class:"login-subtitle"},this.subtitle),t("div",{key:"4ec6546c23b0ec9dccba77407bbff8d4fa43561f",class:"login-providers"},this.providers.map((i=>t("button",{key:i.name,class:{"provider-button":!0,"is-loading":this.loadingProvider===i.name,"is-disabled":null!==this.loadingProvider&&this.loadingProvider!==i.name},disabled:null!==this.loadingProvider&&this.loadingProvider!==i.name,onClick:()=>this.handleProviderClick(i)},this.loadingProvider===i.name?t("span",{class:"spinner"}):i.icon&&t("kritzel-icon",{name:i.icon,size:20}),t("span",{class:"provider-label"},i.label))))))))}static get style(){return":host{display:contents}kritzel-dialog{--kritzel-dialog-width-small:380px}.login-content{display:flex;flex-direction:column;gap:20px}.login-subtitle{font-size:13px;color:var(--kritzel-login-dialog-subtitle-color, #666666);margin:0;line-height:1.5;text-align:center}.login-providers{display:flex;flex-direction:column;gap:10px}.provider-button{display:flex;align-items:center;justify-content:center;gap:10px;width:100%;padding:12px 16px;border:1px solid var(--kritzel-login-dialog-button-border-color, #e0e0e0);border-radius:8px;background:var(--kritzel-login-dialog-button-background, #ffffff);color:var(--kritzel-login-dialog-button-text-color, #333333);font-size:14px;font-weight:500;font-family:inherit;cursor:var(--kritzel-global-pointer-cursor, pointer);transition:background-color 0.15s ease, border-color 0.15s ease, opacity 0.15s ease;-webkit-tap-highlight-color:transparent}.provider-button:hover:not(:disabled){background:var(--kritzel-login-dialog-button-hover-background, #f5f5f5);border-color:var(--kritzel-login-dialog-button-hover-border-color, #cccccc)}.provider-button:active:not(:disabled){background:var(--kritzel-login-dialog-button-active-background, #ebebeb)}.provider-button:focus-visible{outline:revert;outline-offset:revert}.provider-button.is-disabled{opacity:0.5;cursor:default;pointer-events:none}.provider-button.is-loading{cursor:default}.provider-label{flex-shrink:0}.provider-button.is-loading .provider-label{opacity:0.7}@keyframes kritzel-login-spin{to{transform:rotate(360deg)}}.spinner{width:20px;height:20px;box-sizing:border-box;display:block;flex-shrink:0;border:2px solid var(--kritzel-login-dialog-spinner-color, #cccccc);border-top-color:var(--kritzel-login-dialog-spinner-active-color, #333333);border-radius:50%;animation:kritzel-login-spin 0.6s linear infinite}"}},[513,"kritzel-login-dialog",{providers:[16],dialogTitle:[1,"dialog-title"],subtitle:[1],isDialogOpen:[32],loadingProvider:[32],open:[64],close:[64],setLoading:[64]}]);function d(){"undefined"!=typeof customElements&&["kritzel-login-dialog","kritzel-dialog","kritzel-icon"].forEach((i=>{switch(i){case"kritzel-login-dialog":customElements.get(l(i))||customElements.define(l(i),a);break;case"kritzel-dialog":customElements.get(l(i))||s();break;case"kritzel-icon":customElements.get(l(i))||n()}}))}export{a as K,d}
1
+ import{p as i,H as o,c as e,h as t,d as r,t as l}from"./p-B43upypT.js";import{d as s}from"./p-DX2nriaq.js";import{d as n}from"./p-CdR76C4L.js";const a=i(class extends o{constructor(i){super(),!1!==i&&this.__registerHost(),this.__attachShadow(),this.providerLogin=e(this,"providerLogin"),this.dialogClosed=e(this,"dialogClosed")}get host(){return this}providers=[];dialogTitle="Sign in";subtitle;isDialogOpen=!1;loadingProvider=null;providerLogin;dialogClosed;async open(){this.loadingProvider=null,this.isDialogOpen=!0}async close(){this.isDialogOpen=!1,this.loadingProvider=null}async setLoading(i){this.loadingProvider=i}handleProviderClick=i=>{this.loadingProvider||(this.loadingProvider=i.name,this.providerLogin.emit({provider:i.name}))};closeDialog=()=>{this.isDialogOpen=!1,this.loadingProvider=null,this.dialogClosed.emit()};render(){return t(r,{key:"d2b393ac37292a0cf88d0e18e9768ca666b238b2"},t("kritzel-dialog",{key:"6e302e9030b5da0baf307fe261285e484b3c1f08",dialogTitle:this.dialogTitle,isOpen:this.isDialogOpen,onDialogClose:this.closeDialog,size:"small",contained:!0},t("div",{key:"f32b073d70acb3874dc3ab4c3905543067a543d8",class:"login-content"},this.subtitle&&t("p",{key:"42a6ec7d6c9ca0a14700bd13cbe8ee9edbbcc18b",class:"login-subtitle"},this.subtitle),t("div",{key:"cbb5497abd1c88fc364ac8bb7c3d356df6df0dad",class:"login-providers"},this.providers.map((i=>t("button",{key:i.name,class:{"provider-button":!0,"is-loading":this.loadingProvider===i.name,"is-disabled":null!==this.loadingProvider&&this.loadingProvider!==i.name},disabled:null!==this.loadingProvider&&this.loadingProvider!==i.name,onClick:()=>this.handleProviderClick(i)},this.loadingProvider===i.name?t("span",{class:"spinner"}):i.icon&&t("kritzel-icon",{name:i.icon,size:20}),t("span",{class:"provider-label"},i.label))))))))}static get style(){return":host{display:contents}kritzel-dialog{--kritzel-dialog-width-small:380px}.login-content{display:flex;flex-direction:column;gap:20px}.login-subtitle{font-size:13px;color:var(--kritzel-login-dialog-subtitle-color, #666666);margin:0;line-height:1.5;text-align:center}.login-providers{display:flex;flex-direction:column;gap:10px}.provider-button{display:flex;align-items:center;justify-content:center;gap:10px;width:100%;padding:12px 16px;border:1px solid var(--kritzel-login-dialog-button-border-color, #e0e0e0);border-radius:8px;background:var(--kritzel-login-dialog-button-background, #ffffff);color:var(--kritzel-login-dialog-button-text-color, #333333);font-size:14px;font-weight:500;font-family:inherit;cursor:var(--kritzel-global-pointer-cursor, pointer);transition:background-color 0.15s ease, border-color 0.15s ease, opacity 0.15s ease;-webkit-tap-highlight-color:transparent}.provider-button:hover:not(:disabled){background:var(--kritzel-login-dialog-button-hover-background, #f5f5f5);border-color:var(--kritzel-login-dialog-button-hover-border-color, #cccccc)}.provider-button:active:not(:disabled){background:var(--kritzel-login-dialog-button-active-background, #ebebeb)}.provider-button:focus-visible{outline:revert;outline-offset:revert}.provider-button.is-disabled{opacity:0.5;cursor:default;pointer-events:none}.provider-button.is-loading{cursor:default}.provider-label{flex-shrink:0}.provider-button.is-loading .provider-label{opacity:0.7}@keyframes kritzel-login-spin{to{transform:rotate(360deg)}}.spinner{width:20px;height:20px;box-sizing:border-box;display:block;flex-shrink:0;border:2px solid var(--kritzel-login-dialog-spinner-color, #cccccc);border-top-color:var(--kritzel-login-dialog-spinner-active-color, #333333);border-radius:50%;animation:kritzel-login-spin 0.6s linear infinite}"}},[513,"kritzel-login-dialog",{providers:[16],dialogTitle:[1,"dialog-title"],subtitle:[1],isDialogOpen:[32],loadingProvider:[32],open:[64],close:[64],setLoading:[64]}]);function d(){"undefined"!=typeof customElements&&["kritzel-login-dialog","kritzel-dialog","kritzel-icon"].forEach((i=>{switch(i){case"kritzel-login-dialog":customElements.get(l(i))||customElements.define(l(i),a);break;case"kritzel-dialog":customElements.get(l(i))||s();break;case"kritzel-icon":customElements.get(l(i))||n()}}))}export{a as K,d}
@@ -1 +1 @@
1
- import{p as t,H as i,c as e,h as s,d as o,t as n}from"./p-B43upypT.js";import{K as l}from"./p-WUdQqYnu.js";const h=t(class extends i{constructor(t){super(),!1!==t&&this.__registerHost(),this.__attachShadow(),this.tooltipClosed=e(this,"tooltipClosed"),this.tooltipOpened=e(this,"tooltipOpened")}get host(){return this}isVisible=!1;anchorElement;triggerElement;offsetY=24;tooltipClosed;tooltipOpened;positionX=0;positionY=0;handleOutsideClick(t){if(!this.isVisible)return;const i=t.composedPath(),e=i.some((t=>t===this.host)),s=this.triggerElement&&i.some((t=>t===this.triggerElement));e||s||this.close()}handleOutsidePointerDown(t){if(!this.isVisible)return;const i=t.composedPath(),e=i.some((t=>t===this.host)),s=this.triggerElement&&i.some((t=>t===this.triggerElement));e||s||(t.stopPropagation(),t.preventDefault(),this.close())}handleCloseAll(t){t.detail!==this.host&&this.close()}handleWindowResize(){this.calculateAdjustedPosition()}handleTriggerElementChange(t,i){i&&i.removeEventListener("click",this.handleTriggerClick),t&&t.addEventListener("click",this.handleTriggerClick)}handleVisibilityChange(t){t&&(this.calculateAdjustedPosition(),requestAnimationFrame((()=>{this.focusContent()})))}async open(){this.isVisible||(document.dispatchEvent(new CustomEvent("kritzelTooltipCloseAll",{detail:this.host})),this.isVisible=!0,this.tooltipOpened.emit())}async close(){this.isVisible&&(this.isVisible=!1,this.tooltipClosed.emit())}async toggle(){this.isVisible?this.close():this.open()}async focusContent(){const t=l.getFocusableElements(this.host);t.length>0&&t[0].focus()}connectedCallback(){this.triggerElement&&this.triggerElement.addEventListener("click",this.handleTriggerClick)}componentDidLoad(){this.triggerElement&&this.triggerElement.addEventListener("click",this.handleTriggerClick)}componentWillLoad(){this.calculateAdjustedPosition()}componentWillUpdate(){this.calculateAdjustedPosition()}disconnectedCallback(){this.triggerElement&&this.triggerElement.removeEventListener("click",this.handleTriggerClick)}handleTriggerClick=t=>{t.stopPropagation(),this.toggle()};calculateAdjustedPosition(){if(this.isVisible&&this.anchorElement){const t=this.anchorElement.getBoundingClientRect(),i=this.host.shadowRoot?.querySelector(".tooltip-content"),e=i?.getBoundingClientRect(),s=e?.width||0,o=12,n=window.innerWidth-s-o;this.positionX=Math.max(o,Math.min(t.left+t.width/2-s/2,n)),this.positionY=window.innerHeight-t.top+this.offsetY}}render(){return s(o,{key:"4465ed45a4a145164e3b86baa2dbfbe6185574ed",style:{position:"fixed",zIndex:"9999",transition:"opacity 0.3s ease-in-out, transform 0.3s ease-in-out",visibility:this.isVisible?"visible":"hidden",left:`${this.positionX}px`,bottom:`${this.positionY}px`}},s("div",{key:"b98c28e7d1ecacb04534cb5044d2bee468c8a52c",class:"tooltip-content",onClick:t=>t.stopPropagation(),onPointerDown:t=>t.stopPropagation(),onMouseDown:t=>t.stopPropagation()},s("slot",{key:"42d05b850b4a87f8b2663d9462f3d05b641df1f1"})))}static get watchers(){return{triggerElement:[{handleTriggerElementChange:0}],isVisible:[{handleVisibilityChange:0}]}}static get style(){return":host{width:auto}.tooltip-content{position:relative;padding:8px 12px;border-radius:4px;width:fit-content;background-color:var(--kritzel-tooltip-background-color, #ffffff);color:var(--kritzel-tooltip-color, #000000);padding:var(--kritzel-tooltip-padding, 12px);border:var(--kritzel-tooltip-border, 1px solid #ebebeb);border-radius:var(--kritzel-tooltip-border-radius, 16px);white-space:nowrap;box-shadow:var(--kritzel-tooltip-box-shadow, 0 1px 6px rgba(0, 0, 0, 0.12))}"}},[769,"kritzel-tooltip",{isVisible:[1028,"is-visible"],anchorElement:[16],triggerElement:[16],offsetY:[2,"offset-y"],positionX:[32],positionY:[32],open:[64],close:[64],toggle:[64],focusContent:[64]},[[4,"click","handleOutsideClick"],[6,"pointerdown","handleOutsidePointerDown"],[4,"kritzelTooltipCloseAll","handleCloseAll"],[9,"resize","handleWindowResize"]],{triggerElement:[{handleTriggerElementChange:0}],isVisible:[{handleVisibilityChange:0}]}]);function r(){"undefined"!=typeof customElements&&["kritzel-tooltip"].forEach((t=>{"kritzel-tooltip"===t&&(customElements.get(n(t))||customElements.define(n(t),h))}))}export{h as K,r as d}
1
+ import{p as t,H as i,c as e,h as s,d as o,t as n}from"./p-B43upypT.js";import{K as l}from"./p-WUdQqYnu.js";const h=t(class extends i{constructor(t){super(),!1!==t&&this.__registerHost(),this.__attachShadow(),this.tooltipClosed=e(this,"tooltipClosed"),this.tooltipOpened=e(this,"tooltipOpened")}get host(){return this}isVisible=!1;anchorElement;triggerElement;offsetY=24;tooltipClosed;tooltipOpened;positionX=0;positionY=0;handleOutsideClick(t){if(!this.isVisible)return;const i=t.composedPath(),e=i.some((t=>t===this.host)),s=this.triggerElement&&i.some((t=>t===this.triggerElement));e||s||this.close()}handleOutsidePointerDown(t){if(!this.isVisible)return;const i=t.composedPath(),e=i.some((t=>t===this.host)),s=this.triggerElement&&i.some((t=>t===this.triggerElement));e||s||(t.stopPropagation(),t.preventDefault(),this.close())}handleCloseAll(t){t.detail!==this.host&&this.close()}handleWindowResize(){this.calculateAdjustedPosition()}handleTriggerElementChange(t,i){i&&i.removeEventListener("click",this.handleTriggerClick),t&&t.addEventListener("click",this.handleTriggerClick)}handleVisibilityChange(t){t&&(this.calculateAdjustedPosition(),requestAnimationFrame((()=>{this.focusContent()})))}async open(){this.isVisible||(document.dispatchEvent(new CustomEvent("kritzelTooltipCloseAll",{detail:this.host})),this.isVisible=!0,this.tooltipOpened.emit())}async close(){this.isVisible&&(this.isVisible=!1,this.tooltipClosed.emit())}async toggle(){this.isVisible?this.close():this.open()}async focusContent(){const t=l.getFocusableElements(this.host);t.length>0&&t[0].focus()}connectedCallback(){this.triggerElement&&this.triggerElement.addEventListener("click",this.handleTriggerClick)}componentDidLoad(){this.triggerElement&&this.triggerElement.addEventListener("click",this.handleTriggerClick)}componentWillLoad(){this.calculateAdjustedPosition()}componentWillUpdate(){this.calculateAdjustedPosition()}disconnectedCallback(){this.triggerElement&&this.triggerElement.removeEventListener("click",this.handleTriggerClick)}handleTriggerClick=t=>{t.stopPropagation(),this.toggle()};calculateAdjustedPosition(){if(this.isVisible&&this.anchorElement){const t=this.anchorElement.getBoundingClientRect(),i=this.host.shadowRoot?.querySelector(".tooltip-content"),e=i?.getBoundingClientRect(),s=e?.width||0,o=12,n=window.innerWidth-s-o;this.positionX=Math.max(o,Math.min(t.left+t.width/2-s/2,n)),this.positionY=window.innerHeight-t.top+this.offsetY}}render(){return s(o,{key:"c0a4b682b3279b8c830dfa758284979e91c0ce2a",style:{position:"fixed",zIndex:"9999",transition:"opacity 0.3s ease-in-out, transform 0.3s ease-in-out",visibility:this.isVisible?"visible":"hidden",left:`${this.positionX}px`,bottom:`${this.positionY}px`}},s("div",{key:"09fd259d19d42db513161b645aa19206ae81c76a",class:"tooltip-content",onClick:t=>t.stopPropagation(),onPointerDown:t=>t.stopPropagation(),onMouseDown:t=>t.stopPropagation()},s("slot",{key:"f743c0ca8c415d71e0af53cdab8304df60dd9a37"})))}static get watchers(){return{triggerElement:[{handleTriggerElementChange:0}],isVisible:[{handleVisibilityChange:0}]}}static get style(){return":host{width:auto}.tooltip-content{position:relative;padding:8px 12px;border-radius:4px;width:fit-content;background-color:var(--kritzel-tooltip-background-color, #ffffff);color:var(--kritzel-tooltip-color, #000000);padding:var(--kritzel-tooltip-padding, 12px);border:var(--kritzel-tooltip-border, 1px solid #ebebeb);border-radius:var(--kritzel-tooltip-border-radius, 16px);white-space:nowrap;box-shadow:var(--kritzel-tooltip-box-shadow, 0 1px 6px rgba(0, 0, 0, 0.12))}"}},[769,"kritzel-tooltip",{isVisible:[1028,"is-visible"],anchorElement:[16],triggerElement:[16],offsetY:[2,"offset-y"],positionX:[32],positionY:[32],open:[64],close:[64],toggle:[64],focusContent:[64]},[[4,"click","handleOutsideClick"],[6,"pointerdown","handleOutsidePointerDown"],[4,"kritzelTooltipCloseAll","handleCloseAll"],[9,"resize","handleWindowResize"]],{triggerElement:[{handleTriggerElementChange:0}],isVisible:[{handleVisibilityChange:0}]}]);function a(){"undefined"!=typeof customElements&&["kritzel-tooltip"].forEach((t=>{"kritzel-tooltip"===t&&(customElements.get(n(t))||customElements.define(n(t),h))}))}export{h as K,a as d}
@@ -1 +1 @@
1
- import{p as t,H as o,c as e,h as r,d as i,t as l}from"./p-B43upypT.js";import{f as n,e as s}from"./p-D8NvNMcU.js";import{K as a}from"./p-jGOpkGDl.js";import{K as c,d}from"./p-D2q_wTyG.js";import{a as h}from"./p-BmyTdQGy.js";import{d as p}from"./p-CqLgB8JK.js";import{d as k}from"./p-Cymum41a.js";import{d as f}from"./p-Df3BwVGy.js";import{d as u}from"./p-B8Xi4Clg.js";import{d as b}from"./p-JhOYwUOj.js";import{d as g}from"./p-BI2ng9I_.js";import{d as z}from"./p-CdR76C4L.js";import{d as m}from"./p-CXpv9Rxe.js";import{d as v}from"./p-B6t5q-V4.js";import{d as y}from"./p-BFYtCsZu.js";import{d as x}from"./p-D82VaHce.js";import{d as w}from"./p-DU7g4PU-.js";import{d as C}from"./p-Cf2ZKUo0.js";const j=t(class extends o{constructor(t){super(),!1!==t&&this.__registerHost(),this.__attachShadow(),this.isControlsReady=e(this,"isControlsReady")}get host(){return this}visible=!0;controls=[];activeControl=null;isUtilityPanelVisible=!0;undoState=null;theme="light";terms={};isControlsReady;firstConfig=null;isTouchDevice=a.isTouchDevice();selectedSubOptions=new Map;canScrollLeft=!1;canScrollRight=!1;needsScrolling=!1;displayValues=null;internalControls=[];handleActiveToolChangeBound=this.handleActiveToolChange.bind(this);handleSelectionChangeBound=this.handleSelectionChange.bind(this);handleKeyDown(t){"Escape"===t.key&&(t.preventDefault(),this.closeTooltip(),this.kritzelEngine?.enable())}async handleActiveToolChange(t){this.activeControl=this.internalControls.find((o=>o.tool===t.detail))||null,this.activeControl?.tool&&this.updateDisplayValues(this.activeControl.tool),this.closeTooltip()}handleSelectionChange(){this.activeControl?.tool instanceof n&&this.updateDisplayValues(this.activeControl.tool)}async onControlsChange(){this.kritzelEngine&&await this.initializeTools()}onThemeChange(){this.activeControl?.tool&&this.updateDisplayValues(this.activeControl.tool)}async closeTooltip(){document.dispatchEvent(new CustomEvent("kritzelTooltipCloseAll"))}kritzelEngine=null;toolsScrollRef=null;configTriggerRef=null;get activeToolAsTextTool(){return this.activeControl?.tool}get activeToolAsBrushTool(){return this.activeControl?.tool}get activeToolAsLineTool(){return this.activeControl?.tool}get activeToolAsShapeTool(){return this.activeControl?.tool}handleDisplayValuesChange=t=>{const o=t.detail;this.displayValues&&this.displayValues.color===o.color&&this.displayValues.size===o.size&&this.displayValues.fontFamily===o.fontFamily||(this.displayValues=o)};updateDisplayValues(t){const o=c.getToolConfig(t);if(!o)return void(this.displayValues=null);const e=t[o.sizeProperty],r={color:h.applyOpacity(t[o.colorProperty],t[o.opacityProperty]??1,this.theme),size:e};t instanceof s&&(r.fontFamily=t.fontFamily),this.displayValues&&this.displayValues.color===r.color&&this.displayValues.size===r.size&&this.displayValues.fontFamily===r.fontFamily||(this.displayValues=r)}async componentWillLoad(){await this.initializeEngine(),await this.initializeTools(),this.isControlsReady.emit()}componentDidLoad(){this.updateScrollIndicators()}componentDidRender(){this.updateScrollIndicators()}disconnectedCallback(){this.kritzelEngine&&(this.kritzelEngine.removeEventListener("activeToolChange",this.handleActiveToolChangeBound),this.kritzelEngine.removeEventListener("objectsSelectionChange",this.handleSelectionChangeBound))}updateScrollIndicators(){if(!this.toolsScrollRef)return;const{scrollLeft:t,scrollWidth:o,clientWidth:e}=this.toolsScrollRef,r=t>2,i=t+e<o-2,l=o>e;this.canScrollLeft!==r&&(this.canScrollLeft=r),this.canScrollRight!==i&&(this.canScrollRight=i),this.needsScrolling!==l&&(this.needsScrolling=l)}handleToolsScroll=()=>{this.updateScrollIndicators()};async initializeEngine(){if(await customElements.whenDefined("kritzel-engine"),this.kritzelEngine=this.host.parentElement.querySelector("kritzel-engine"),!this.kritzelEngine)throw new Error("kritzel-engine not found in parent element.");this.kritzelEngine.addEventListener("activeToolChange",this.handleActiveToolChangeBound),this.kritzelEngine.addEventListener("objectsSelectionChange",this.handleSelectionChangeBound)}async initializeTools(){let t=!1;const o=this.controls.map((t=>({...t})));for(const e of o){if("tool"===e.type&&e.tool){let t=e.tool;"function"!=typeof t&&(t=t.constructor);const o=await this.kritzelEngine.registerTool(e.name,t,e.config);o&&(e.tool=o)}"tool"===e.type&&e.isDefault&&e.tool&&(await this.kritzelEngine.changeActiveTool(e.tool),this.activeControl=e,this.updateDisplayValues(e.tool),t=!0),"config"===e.type&&(null===this.firstConfig?this.firstConfig=e:console.warn("Only one config control is allowed. The first one will be used."))}if(this.internalControls=o,!t){const t=this.internalControls.find((t=>"tool"===t.type&&t.tool));t&&(await this.kritzelEngine.changeActiveTool(t.tool),this.activeControl=t,this.updateDisplayValues(t.tool))}}async handleControlClick(t){this.activeControl=t,"tool"===this.activeControl.type&&(this.updateDisplayValues(this.activeControl.tool),await this.kritzelEngine.changeActiveTool(this.activeControl.tool))}async handleToolChange(t){this.activeControl={...this.activeControl,tool:t.detail},await this.kritzelEngine.changeActiveTool(this.activeControl.tool)}getSelectedSubOption(t){if(t.subOptions?.length)return this.selectedSubOptions.get(t.name)||t.subOptions[0]}async selectSubOption(t,o){const e=new Map(this.selectedSubOptions);e.set(t.name,o),this.selectedSubOptions=e,t.tool&&"function"!=typeof t.tool&&(t.tool[o.toolProperty]=o.value),this.closeTooltip(),await this.handleControlClick(t)}render(){const t=null!==(this.activeControl?.tool?c.getToolConfig(this.activeControl.tool):null),o=this.internalControls.filter((t=>"tool"===t.type||"separator"===t.type)),e=this.internalControls.find((t=>"config"===t.type&&t.name===this.firstConfig?.name));return r(i,{key:"7112ce9c79dcff24e48d6dff09257791b253ac4e",style:{display:this.visible?"":"none"},class:{mobile:this.isTouchDevice}},this.isUtilityPanelVisible&&r("kritzel-utility-panel",{key:"19f70fef9b6bd8a2e27c0d01099e93b72c57356b",style:{position:"absolute",bottom:"56px",left:"12px"},undoState:this.undoState,terms:this.terms,onUndo:()=>this.kritzelEngine?.undo(),onRedo:()=>this.kritzelEngine?.redo(),onDelete:()=>this.kritzelEngine?.delete()}),r("div",{key:"8c36e3de1e3c0012c3e5d98ca0118ab9c45152f8",class:"kritzel-controls"},r("div",{key:"b2d6f311dc4c1e3e2edb01c83c7aa01b99e9f01a",class:{"scroll-indicator-left":!0,visible:this.canScrollLeft}}),r("div",{key:"cdd4af3f020a9cf9b8924d27286555488f65477e",class:"kritzel-tools-scroll",ref:t=>this.toolsScrollRef=t,onScroll:this.handleToolsScroll},o.map((t=>{if(t.subOptions?.length){const o=this.getSelectedSubOption(t),e=this.activeControl?.name===t.name;return r("div",{class:{"kritzel-control-split":!0,selected:e},key:t.name,"data-testid":`tool-${t.name}`,ref:o=>{o&&(t._anchorRef=o)}},r("button",{class:"kritzel-control-main",onClick:()=>this.handleControlClick(t),"aria-label":o?.label,"data-testid":`tool-${t.name}-main`},r("kritzel-icon",{name:o?.icon||t.icon})),r("button",{class:{"kritzel-control-dropdown":!0,visible:e},ref:o=>{o&&(t._triggerRef=o)},"aria-label":`Select ${t.name} options`,"data-testid":`tool-${t.name}-dropdown`,tabIndex:e?0:-1},r("kritzel-icon",{name:"chevron-down",size:12})),r("kritzel-tooltip",{anchorElement:t._anchorRef,triggerElement:t._triggerRef},r("div",{class:"kritzel-submenu-content"},t.subOptions.map((e=>r("button",{class:{"kritzel-submenu-item":!0,active:e.id===o?.id},key:e.id,"data-testid":`suboption-${e.id}`,onClick:()=>this.selectSubOption(t,e)},r("kritzel-icon",{name:e.icon,size:20}),r("span",null,e.label)))))))}return"separator"===t.type?r("div",{class:"kritzel-control-separator",key:t.name}):r("button",{class:{"kritzel-control":!0,selected:this.activeControl?.name===t?.name},key:t.name,"data-testid":`tool-${t.name}`,onClick:()=>this.handleControlClick?.(t),"aria-label":t.name.charAt(0).toUpperCase()+t.name.slice(1)},r("kritzel-icon",{name:t.icon}))}))),r("div",{key:"7bbd436986a433f934f5992f8ae96b6cdb233381",class:{"scroll-indicator-right":!0,visible:this.canScrollRight&&!(e&&this.activeControl&&t)}}),e&&this.activeControl&&r("div",{class:{"kritzel-config-container":!0,visible:t},key:e.name},r("div",{key:"3c00abcde934f2a6d5c3768277b20cf22bcf66d6",class:{"config-gradient-left":!0,visible:this.needsScrolling}}),r("kritzel-tooltip",{key:"67cf36c2eaddfd66bd243496a48736d89d60b370",anchorElement:this.host.shadowRoot?.querySelector(".kritzel-config-container"),triggerElement:this.configTriggerRef},r("kritzel-tool-config",{key:"8bcaae6e0482858eea69aae42adbe62665ad4d98",tool:this.activeControl.tool,theme:this.theme,engine:this.kritzelEngine,terms:this.terms,onToolChange:t=>this.handleToolChange?.(t),onDisplayValuesChange:this.handleDisplayValuesChange,style:{width:"100%",height:"100%"}})),r("div",{key:"91d3b8578958f322d31dd0e38dc7203095c23f9f",tabIndex:t?0:-1,class:"kritzel-config","data-testid":"tool-config",ref:t=>{t&&(this.configTriggerRef=t)},onKeyDown:t=>{"Enter"===t.key&&t.target.click()},style:{cursor:"pointer"}},this.displayValues&&r("div",{key:"6bd17c4d1781cf9e33483a801f52ef09af70802f",class:"color-container"},r("kritzel-color",{key:"a1af397c023a3f0247afdf06b9400543d0c3cbdd",value:this.displayValues.color,theme:this.theme,size:18,style:{borderRadius:"50%",border:"none"}}))))))}static get assetsDirs(){return["../assets"]}static get watchers(){return{controls:[{onControlsChange:0}],theme:[{onThemeChange:0}]}}static get style(){return":host{display:flex;flex-direction:column;user-select:none;max-width:100%;z-index:1}:host(.mobile){--kritzel-controls-control-hover-background-color:transparent;--kritzel-controls-control-active-background-color:transparent}.kritzel-controls{display:flex;flex-direction:row;align-items:center;justify-content:flex-start;gap:var(--kritzel-controls-gap, 8px);height:100%;padding:var(--kritzel-controls-padding, 8px);background-color:var(--kritzel-controls-background-color, #ffffff);border-radius:var(--kritzel-controls-border-radius, 16px);box-shadow:var(--kritzel-controls-box-shadow, 0 0 3px rgba(0, 0, 0, 0.08));border:var(--kritzel-controls-border, 1px solid #ebebeb);z-index:1;position:relative;max-width:100%;overflow:hidden}.kritzel-tools-scroll{display:flex;flex-direction:row;align-items:center;gap:var(--kritzel-controls-gap, 8px);overflow-x:auto;overflow-y:hidden;flex:1 1 auto;min-width:0;padding:4px;margin:-4px;scrollbar-width:none;-ms-overflow-style:none}.kritzel-tools-scroll::-webkit-scrollbar{display:none}.scroll-indicator-left,.scroll-indicator-right{position:absolute;top:0;bottom:0;width:32px;pointer-events:none;opacity:0;transition:opacity 0.2s ease-out;z-index:1}.scroll-indicator-left{left:0;background:linear-gradient(to right, var(--kritzel-controls-background-color, #ffffff), transparent);border-radius:var(--kritzel-controls-border-radius, 16px) 0 0 var(--kritzel-controls-border-radius, 16px)}.scroll-indicator-right{right:0;background:linear-gradient(to left, var(--kritzel-controls-background-color, #ffffff), transparent);border-radius:0 var(--kritzel-controls-border-radius, 16px) var(--kritzel-controls-border-radius, 16px) 0}.scroll-indicator-left.visible,.scroll-indicator-right.visible{opacity:1}.kritzel-control{display:flex;justify-content:center;align-items:center;color:var(--kritzel-controls-control-color, #000000);border-radius:var(--kritzel-controls-control-border-radius, 12px);padding:var(--kritzel-controls-control-padding, 8px);border:none;background:none;cursor:var(--kritzel-global-pointer-cursor, pointer);-webkit-tap-highlight-color:transparent;font-weight:bold}.kritzel-control:focus,.kritzel-control:hover{background-color:var(--kritzel-controls-control-hover-background-color, hsl(0, 0%, 0%, 4.3%))}.kritzel-control:active{background-color:var(--kritzel-controls-control-active-background-color, hsl(0, 0%, 0%, 8.6%))}.kritzel-control.selected,.kritzel-control.selected:hover,.kritzel-control.selected:active{background-color:var(--kritzel-controls-control-selected-background-color, #007AFF) !important;color:var(--kritzel-controls-control-selected-color, #ffffff) !important}.kritzel-control.selected:focus{background-color:var(--kritzel-controls-control-selected-background-color, #007bffe3) !important}.kritzel-control-separator{width:1px;height:24px;background-color:var(--kritzel-controls-separator-color, #ebebeb);margin:0 4px}.kritzel-control-split{position:relative;display:flex;align-items:center;border-radius:var(--kritzel-controls-control-border-radius, 12px);color:var(--kritzel-controls-control-color, #000000)}.kritzel-control-split .kritzel-control-main{display:flex;justify-content:center;align-items:center;padding:var(--kritzel-controls-control-padding, 8px);border:none;background:none;cursor:var(--kritzel-global-pointer-cursor, pointer);-webkit-tap-highlight-color:transparent;border-radius:var(--kritzel-controls-control-border-radius, 12px);color:inherit}.kritzel-control-split.selected .kritzel-control-main{border-radius:var(--kritzel-controls-control-border-radius, 12px) 0 0 var(--kritzel-controls-control-border-radius, 12px)}.kritzel-control-split .kritzel-control-dropdown{display:flex;justify-content:center;align-items:center;align-self:stretch;border:none;background:none;cursor:var(--kritzel-global-pointer-cursor, pointer);-webkit-tap-highlight-color:transparent;border-radius:0 var(--kritzel-controls-control-border-radius, 12px) var(--kritzel-controls-control-border-radius, 12px) 0;color:inherit;width:0;padding:0;opacity:0;overflow:hidden;pointer-events:none;transition:width 0.15s ease-out, padding 0.15s ease-out, opacity 0.15s ease-out}.kritzel-control-split .kritzel-control-dropdown.visible{width:auto;padding:0 6px;opacity:1;pointer-events:auto}.kritzel-control-split .kritzel-control-main:focus,.kritzel-control-split .kritzel-control-main:hover,.kritzel-control-split .kritzel-control-dropdown:focus,.kritzel-control-split .kritzel-control-dropdown:hover{background-color:var(--kritzel-controls-control-hover-background-color, hsl(0, 0%, 0%, 4.3%))}.kritzel-control-split .kritzel-control-main:active,.kritzel-control-split .kritzel-control-dropdown:active{background-color:var(--kritzel-controls-control-active-background-color, hsl(0, 0%, 0%, 8.6%))}.kritzel-control-split.selected{background-color:var(--kritzel-controls-control-selected-background-color, #007AFF) !important;color:var(--kritzel-controls-control-selected-color, #ffffff) !important}.kritzel-control-split.selected .kritzel-control-main:hover,.kritzel-control-split.selected .kritzel-control-dropdown:hover{background-color:rgba(255, 255, 255, 0.15)}.kritzel-submenu-content{display:flex;flex-direction:column;gap:var(--kritzel-submenu-gap, 4px);min-width:140px}.kritzel-submenu-item{display:flex;align-items:center;gap:10px;padding:10px 12px;border:none;background:none;cursor:var(--kritzel-global-pointer-cursor, pointer);border-radius:8px;color:var(--kritzel-controls-control-color, #000000);font-size:14px;text-align:left;white-space:nowrap;-webkit-tap-highlight-color:transparent}.kritzel-submenu-item:hover{background-color:var(--kritzel-controls-control-hover-background-color, hsl(0, 0%, 0%, 4.3%))}.kritzel-submenu-item.active{background-color:var(--kritzel-controls-control-selected-background-color, #007AFF);color:var(--kritzel-controls-control-selected-color, #ffffff)}.kritzel-submenu-item.active:hover{background-color:var(--kritzel-controls-control-selected-background-color, #007AFF)}.kritzel-config-container{position:relative;display:flex;justify-content:center;align-items:center;height:40px;box-sizing:border-box;-webkit-tap-highlight-color:transparent;flex-shrink:0;width:0;opacity:0;overflow:hidden;pointer-events:none;margin-left:calc(-1 * var(--kritzel-controls-gap, 8px));transition:width 0.2s ease-out, opacity 0.2s ease-out, margin-left 0.2s ease-out}.kritzel-config-container.visible{width:40px;opacity:1;pointer-events:auto;margin-left:0;overflow:visible}.config-gradient-left{position:absolute;top:0;bottom:0;left:-32px;width:32px;background:linear-gradient(to right, transparent, var(--kritzel-controls-background-color, #ffffff));pointer-events:none;z-index:1;opacity:0;transition:opacity 0.2s ease-out}.config-gradient-left.visible{opacity:1}.kritzel-config{display:flex;justify-content:center;align-items:center;cursor:var(--kritzel-global-pointer-cursor, pointer);border-radius:50%}.color-container{display:flex;justify-content:center;align-items:center;width:32px;height:32px;border-radius:50%;cursor:var(--kritzel-global-pointer-cursor, pointer);border:2px solid transparent;box-sizing:border-box;background-color:var(--kritzel-color-palette-hover-background-color, #ebebeb)}.font-container{display:flex;justify-content:center;align-items:center;width:32px;height:32px;border-radius:50%;cursor:var(--kritzel-global-pointer-cursor, pointer);border:2px solid transparent;box-sizing:border-box;background-color:var(--kritzel-color-palette-hover-background-color, #ebebeb)}.no-config{height:24px;width:24px;border-radius:50%;border:1px dashed gray}kritzel-tooltip{z-index:10001}"}},[513,"kritzel-controls",{visible:[4],controls:[16],activeControl:[1040],isUtilityPanelVisible:[4,"is-utility-panel-visible"],undoState:[16],theme:[1],terms:[16],firstConfig:[32],isTouchDevice:[32],selectedSubOptions:[32],canScrollLeft:[32],canScrollRight:[32],needsScrolling:[32],displayValues:[32],internalControls:[32],closeTooltip:[64]},[[8,"keydown","handleKeyDown"]],{controls:[{onControlsChange:0}],theme:[{onThemeChange:0}]}]);function T(){"undefined"!=typeof customElements&&["kritzel-controls","kritzel-color","kritzel-color-palette","kritzel-dropdown","kritzel-font","kritzel-font-family","kritzel-font-size","kritzel-icon","kritzel-line-endings","kritzel-opacity-slider","kritzel-shape-fill","kritzel-stroke-size","kritzel-tool-config","kritzel-tooltip","kritzel-utility-panel"].forEach((t=>{switch(t){case"kritzel-controls":customElements.get(l(t))||customElements.define(l(t),j);break;case"kritzel-color":customElements.get(l(t))||p();break;case"kritzel-color-palette":customElements.get(l(t))||k();break;case"kritzel-dropdown":customElements.get(l(t))||f();break;case"kritzel-font":customElements.get(l(t))||u();break;case"kritzel-font-family":customElements.get(l(t))||b();break;case"kritzel-font-size":customElements.get(l(t))||g();break;case"kritzel-icon":customElements.get(l(t))||z();break;case"kritzel-line-endings":customElements.get(l(t))||m();break;case"kritzel-opacity-slider":customElements.get(l(t))||v();break;case"kritzel-shape-fill":customElements.get(l(t))||y();break;case"kritzel-stroke-size":customElements.get(l(t))||x();break;case"kritzel-tool-config":customElements.get(l(t))||d();break;case"kritzel-tooltip":customElements.get(l(t))||w();break;case"kritzel-utility-panel":customElements.get(l(t))||C()}}))}export{j as K,T as d}
1
+ import{p as t,H as o,c as e,h as r,d as i,t as l}from"./p-B43upypT.js";import{f as n,e as s}from"./p-D8NvNMcU.js";import{K as a}from"./p-jGOpkGDl.js";import{K as c,d}from"./p-D2q_wTyG.js";import{a as h}from"./p-BmyTdQGy.js";import{d as p}from"./p-CqLgB8JK.js";import{d as k}from"./p-Cymum41a.js";import{d as b}from"./p-Df3BwVGy.js";import{d as u}from"./p-B8Xi4Clg.js";import{d as f}from"./p-JhOYwUOj.js";import{d as g}from"./p-BI2ng9I_.js";import{d as z}from"./p-CdR76C4L.js";import{d as m}from"./p-CXpv9Rxe.js";import{d as v}from"./p-B6t5q-V4.js";import{d as y}from"./p-BFYtCsZu.js";import{d as x}from"./p-D82VaHce.js";import{d as w}from"./p-BTzlrIxe.js";import{d as C}from"./p-CsvMgk_f.js";const T=t(class extends o{constructor(t){super(),!1!==t&&this.__registerHost(),this.__attachShadow(),this.isControlsReady=e(this,"isControlsReady")}get host(){return this}visible=!0;controls=[];activeControl=null;isUtilityPanelVisible=!0;undoState=null;theme="light";terms={};isControlsReady;firstConfig=null;isTouchDevice=a.isTouchDevice();selectedSubOptions=new Map;canScrollLeft=!1;canScrollRight=!1;needsScrolling=!1;displayValues=null;internalControls=[];handleActiveToolChangeBound=this.handleActiveToolChange.bind(this);handleSelectionChangeBound=this.handleSelectionChange.bind(this);handleKeyDown(t){"Escape"===t.key&&(t.preventDefault(),this.closeTooltip(),this.kritzelEngine?.enable())}async handleActiveToolChange(t){this.activeControl=this.internalControls.find((o=>o.tool===t.detail))||null,this.activeControl?.tool&&this.updateDisplayValues(this.activeControl.tool),this.closeTooltip()}handleSelectionChange(){this.activeControl?.tool instanceof n&&this.updateDisplayValues(this.activeControl.tool)}async onControlsChange(){this.kritzelEngine&&await this.initializeTools()}onThemeChange(){this.activeControl?.tool&&this.updateDisplayValues(this.activeControl.tool)}async closeTooltip(){document.dispatchEvent(new CustomEvent("kritzelTooltipCloseAll"))}kritzelEngine=null;toolsScrollRef=null;configTriggerRef=null;get activeToolAsTextTool(){return this.activeControl?.tool}get activeToolAsBrushTool(){return this.activeControl?.tool}get activeToolAsLineTool(){return this.activeControl?.tool}get activeToolAsShapeTool(){return this.activeControl?.tool}handleDisplayValuesChange=t=>{const o=t.detail;this.displayValues&&this.displayValues.color===o.color&&this.displayValues.size===o.size&&this.displayValues.fontFamily===o.fontFamily||(this.displayValues=o)};updateDisplayValues(t){const o=c.getToolConfig(t);if(!o)return void(this.displayValues=null);const e=t[o.sizeProperty],r={color:h.applyOpacity(t[o.colorProperty],t[o.opacityProperty]??1,this.theme),size:e};t instanceof s&&(r.fontFamily=t.fontFamily),this.displayValues&&this.displayValues.color===r.color&&this.displayValues.size===r.size&&this.displayValues.fontFamily===r.fontFamily||(this.displayValues=r)}async componentWillLoad(){await this.initializeEngine(),await this.initializeTools(),this.isControlsReady.emit()}componentDidLoad(){this.updateScrollIndicators()}componentDidRender(){this.updateScrollIndicators()}disconnectedCallback(){this.kritzelEngine&&(this.kritzelEngine.removeEventListener("activeToolChange",this.handleActiveToolChangeBound),this.kritzelEngine.removeEventListener("objectsSelectionChange",this.handleSelectionChangeBound))}updateScrollIndicators(){if(!this.toolsScrollRef)return;const{scrollLeft:t,scrollWidth:o,clientWidth:e}=this.toolsScrollRef,r=t>2,i=t+e<o-2,l=o>e;this.canScrollLeft!==r&&(this.canScrollLeft=r),this.canScrollRight!==i&&(this.canScrollRight=i),this.needsScrolling!==l&&(this.needsScrolling=l)}handleToolsScroll=()=>{this.updateScrollIndicators()};async initializeEngine(){if(await customElements.whenDefined("kritzel-engine"),this.kritzelEngine=this.host.parentElement.querySelector("kritzel-engine"),!this.kritzelEngine)throw new Error("kritzel-engine not found in parent element.");this.kritzelEngine.addEventListener("activeToolChange",this.handleActiveToolChangeBound),this.kritzelEngine.addEventListener("objectsSelectionChange",this.handleSelectionChangeBound)}async initializeTools(){let t=!1;const o=this.controls.map((t=>({...t})));for(const e of o){if("tool"===e.type&&e.tool){let t=e.tool;"function"!=typeof t&&(t=t.constructor);const o=await this.kritzelEngine.registerTool(e.name,t,e.config);o&&(e.tool=o)}"tool"===e.type&&e.isDefault&&e.tool&&(await this.kritzelEngine.changeActiveTool(e.tool),this.activeControl=e,this.updateDisplayValues(e.tool),t=!0),"config"===e.type&&(null===this.firstConfig?this.firstConfig=e:console.warn("Only one config control is allowed. The first one will be used."))}if(this.internalControls=o,!t){const t=this.internalControls.find((t=>"tool"===t.type&&t.tool));t&&(await this.kritzelEngine.changeActiveTool(t.tool),this.activeControl=t,this.updateDisplayValues(t.tool))}}async handleControlClick(t){this.activeControl=t,"tool"===this.activeControl.type&&(this.updateDisplayValues(this.activeControl.tool),await this.kritzelEngine.changeActiveTool(this.activeControl.tool))}async handleToolChange(t){this.activeControl={...this.activeControl,tool:t.detail},await this.kritzelEngine.changeActiveTool(this.activeControl.tool)}getSelectedSubOption(t){if(t.subOptions?.length)return this.selectedSubOptions.get(t.name)||t.subOptions[0]}async selectSubOption(t,o){const e=new Map(this.selectedSubOptions);e.set(t.name,o),this.selectedSubOptions=e,t.tool&&"function"!=typeof t.tool&&(t.tool[o.toolProperty]=o.value),this.closeTooltip(),await this.handleControlClick(t)}render(){const t=null!==(this.activeControl?.tool?c.getToolConfig(this.activeControl.tool):null),o=this.internalControls.filter((t=>"tool"===t.type||"separator"===t.type)),e=this.internalControls.find((t=>"config"===t.type&&t.name===this.firstConfig?.name));return r(i,{key:"5a23a0a1baa407097b18b9bc43f41186c0c333b2",style:{display:this.visible?"":"none"},class:{mobile:this.isTouchDevice}},this.isUtilityPanelVisible&&r("kritzel-utility-panel",{key:"6d3878904bd13266be79cef0e0d1ee55d760b3da",style:{position:"absolute",bottom:"56px",left:"12px"},undoState:this.undoState,terms:this.terms,onUndo:()=>this.kritzelEngine?.undo(),onRedo:()=>this.kritzelEngine?.redo(),onDelete:()=>this.kritzelEngine?.delete()}),r("div",{key:"5e066964eba04ad9b0d1abf36f61b93464254f48",class:"kritzel-controls"},r("div",{key:"76e49fd459e0a312837ec0b5e552355395b8814e",class:{"scroll-indicator-left":!0,visible:this.canScrollLeft}}),r("div",{key:"d4cffe56418dae5c569a47fe2ffc3f810f221455",class:"kritzel-tools-scroll",ref:t=>this.toolsScrollRef=t,onScroll:this.handleToolsScroll},o.map((t=>{if(t.subOptions?.length){const o=this.getSelectedSubOption(t),e=this.activeControl?.name===t.name;return r("div",{class:{"kritzel-control-split":!0,selected:e},key:t.name,"data-testid":`tool-${t.name}`,ref:o=>{o&&(t._anchorRef=o)}},r("button",{class:"kritzel-control-main",onClick:()=>this.handleControlClick(t),"aria-label":o?.label,"data-testid":`tool-${t.name}-main`},r("kritzel-icon",{name:o?.icon||t.icon})),r("button",{class:{"kritzel-control-dropdown":!0,visible:e},ref:o=>{o&&(t._triggerRef=o)},"aria-label":`Select ${t.name} options`,"data-testid":`tool-${t.name}-dropdown`,tabIndex:e?0:-1},r("kritzel-icon",{name:"chevron-down",size:12})),r("kritzel-tooltip",{anchorElement:t._anchorRef,triggerElement:t._triggerRef},r("div",{class:"kritzel-submenu-content"},t.subOptions.map((e=>r("button",{class:{"kritzel-submenu-item":!0,active:e.id===o?.id},key:e.id,"data-testid":`suboption-${e.id}`,onClick:()=>this.selectSubOption(t,e)},r("kritzel-icon",{name:e.icon,size:20}),r("span",null,e.label)))))))}return"separator"===t.type?r("div",{class:"kritzel-control-separator",key:t.name}):r("button",{class:{"kritzel-control":!0,selected:this.activeControl?.name===t?.name},key:t.name,"data-testid":`tool-${t.name}`,onClick:()=>this.handleControlClick?.(t),"aria-label":t.name.charAt(0).toUpperCase()+t.name.slice(1)},r("kritzel-icon",{name:t.icon}))}))),r("div",{key:"49806e8e06b8756a097eeec53203a55586214a4a",class:{"scroll-indicator-right":!0,visible:this.canScrollRight&&!(e&&this.activeControl&&t)}}),e&&this.activeControl&&r("div",{class:{"kritzel-config-container":!0,visible:t},key:e.name},r("div",{key:"da0ec9cf776dee0872bbb7f0369a6a5a56ebb955",class:{"config-gradient-left":!0,visible:this.needsScrolling}}),r("kritzel-tooltip",{key:"c848a63392d4ed9a30f467512421fbea3096d876",anchorElement:this.host.shadowRoot?.querySelector(".kritzel-config-container"),triggerElement:this.configTriggerRef},r("kritzel-tool-config",{key:"c7ed50fbdfbdab1847fb8c5c6e73d0e743b45706",tool:this.activeControl.tool,theme:this.theme,engine:this.kritzelEngine,terms:this.terms,onToolChange:t=>this.handleToolChange?.(t),onDisplayValuesChange:this.handleDisplayValuesChange,style:{width:"100%",height:"100%"}})),r("div",{key:"de6c9801d3e9e89674b60b1c4e270b8520014aae",tabIndex:t?0:-1,class:"kritzel-config","data-testid":"tool-config",ref:t=>{t&&(this.configTriggerRef=t)},onKeyDown:t=>{"Enter"===t.key&&t.target.click()},style:{cursor:"pointer"}},this.displayValues&&r("div",{key:"140bbf567b0bbd2a2fe878536e93d8646a58b209",class:"color-container"},r("kritzel-color",{key:"eeb1d94fa41bbc177d39b4158ae3c4c1d692c0ec",value:this.displayValues.color,theme:this.theme,size:18,style:{borderRadius:"50%",border:"none"}}))))))}static get assetsDirs(){return["../assets"]}static get watchers(){return{controls:[{onControlsChange:0}],theme:[{onThemeChange:0}]}}static get style(){return":host{display:flex;flex-direction:column;user-select:none;max-width:100%;z-index:1}:host(.mobile){--kritzel-controls-control-hover-background-color:transparent;--kritzel-controls-control-active-background-color:transparent}.kritzel-controls{display:flex;flex-direction:row;align-items:center;justify-content:flex-start;gap:var(--kritzel-controls-gap, 8px);height:100%;padding:var(--kritzel-controls-padding, 8px);background-color:var(--kritzel-controls-background-color, #ffffff);border-radius:var(--kritzel-controls-border-radius, 16px);box-shadow:var(--kritzel-controls-box-shadow, 0 0 3px rgba(0, 0, 0, 0.08));border:var(--kritzel-controls-border, 1px solid #ebebeb);z-index:1;position:relative;max-width:100%;overflow:hidden}.kritzel-tools-scroll{display:flex;flex-direction:row;align-items:center;gap:var(--kritzel-controls-gap, 8px);overflow-x:auto;overflow-y:hidden;flex:1 1 auto;min-width:0;padding:4px;margin:-4px;scrollbar-width:none;-ms-overflow-style:none}.kritzel-tools-scroll::-webkit-scrollbar{display:none}.scroll-indicator-left,.scroll-indicator-right{position:absolute;top:0;bottom:0;width:32px;pointer-events:none;opacity:0;transition:opacity 0.2s ease-out;z-index:1}.scroll-indicator-left{left:0;background:linear-gradient(to right, var(--kritzel-controls-background-color, #ffffff), transparent);border-radius:var(--kritzel-controls-border-radius, 16px) 0 0 var(--kritzel-controls-border-radius, 16px)}.scroll-indicator-right{right:0;background:linear-gradient(to left, var(--kritzel-controls-background-color, #ffffff), transparent);border-radius:0 var(--kritzel-controls-border-radius, 16px) var(--kritzel-controls-border-radius, 16px) 0}.scroll-indicator-left.visible,.scroll-indicator-right.visible{opacity:1}.kritzel-control{display:flex;justify-content:center;align-items:center;color:var(--kritzel-controls-control-color, #000000);border-radius:var(--kritzel-controls-control-border-radius, 12px);padding:var(--kritzel-controls-control-padding, 8px);border:none;background:none;cursor:var(--kritzel-global-pointer-cursor, pointer);-webkit-tap-highlight-color:transparent;font-weight:bold}.kritzel-control:focus,.kritzel-control:hover{background-color:var(--kritzel-controls-control-hover-background-color, hsl(0, 0%, 0%, 4.3%))}.kritzel-control:active{background-color:var(--kritzel-controls-control-active-background-color, hsl(0, 0%, 0%, 8.6%))}.kritzel-control.selected,.kritzel-control.selected:hover,.kritzel-control.selected:active{background-color:var(--kritzel-controls-control-selected-background-color, #007AFF) !important;color:var(--kritzel-controls-control-selected-color, #ffffff) !important}.kritzel-control.selected:focus{background-color:var(--kritzel-controls-control-selected-background-color, #007bffe3) !important}.kritzel-control-separator{width:1px;height:24px;background-color:var(--kritzel-controls-separator-color, #ebebeb);margin:0 4px}.kritzel-control-split{position:relative;display:flex;align-items:center;border-radius:var(--kritzel-controls-control-border-radius, 12px);color:var(--kritzel-controls-control-color, #000000)}.kritzel-control-split .kritzel-control-main{display:flex;justify-content:center;align-items:center;padding:var(--kritzel-controls-control-padding, 8px);border:none;background:none;cursor:var(--kritzel-global-pointer-cursor, pointer);-webkit-tap-highlight-color:transparent;border-radius:var(--kritzel-controls-control-border-radius, 12px);color:inherit}.kritzel-control-split.selected .kritzel-control-main{border-radius:var(--kritzel-controls-control-border-radius, 12px) 0 0 var(--kritzel-controls-control-border-radius, 12px)}.kritzel-control-split .kritzel-control-dropdown{display:flex;justify-content:center;align-items:center;align-self:stretch;border:none;background:none;cursor:var(--kritzel-global-pointer-cursor, pointer);-webkit-tap-highlight-color:transparent;border-radius:0 var(--kritzel-controls-control-border-radius, 12px) var(--kritzel-controls-control-border-radius, 12px) 0;color:inherit;width:0;padding:0;opacity:0;overflow:hidden;pointer-events:none;transition:width 0.15s ease-out, padding 0.15s ease-out, opacity 0.15s ease-out}.kritzel-control-split .kritzel-control-dropdown.visible{width:auto;padding:0 6px;opacity:1;pointer-events:auto}.kritzel-control-split .kritzel-control-main:focus,.kritzel-control-split .kritzel-control-main:hover,.kritzel-control-split .kritzel-control-dropdown:focus,.kritzel-control-split .kritzel-control-dropdown:hover{background-color:var(--kritzel-controls-control-hover-background-color, hsl(0, 0%, 0%, 4.3%))}.kritzel-control-split .kritzel-control-main:active,.kritzel-control-split .kritzel-control-dropdown:active{background-color:var(--kritzel-controls-control-active-background-color, hsl(0, 0%, 0%, 8.6%))}.kritzel-control-split.selected{background-color:var(--kritzel-controls-control-selected-background-color, #007AFF) !important;color:var(--kritzel-controls-control-selected-color, #ffffff) !important}.kritzel-control-split.selected .kritzel-control-main:hover,.kritzel-control-split.selected .kritzel-control-dropdown:hover{background-color:rgba(255, 255, 255, 0.15)}.kritzel-submenu-content{display:flex;flex-direction:column;gap:var(--kritzel-submenu-gap, 4px);min-width:140px}.kritzel-submenu-item{display:flex;align-items:center;gap:10px;padding:10px 12px;border:none;background:none;cursor:var(--kritzel-global-pointer-cursor, pointer);border-radius:8px;color:var(--kritzel-controls-control-color, #000000);font-size:14px;text-align:left;white-space:nowrap;-webkit-tap-highlight-color:transparent}.kritzel-submenu-item:hover{background-color:var(--kritzel-controls-control-hover-background-color, hsl(0, 0%, 0%, 4.3%))}.kritzel-submenu-item.active{background-color:var(--kritzel-controls-control-selected-background-color, #007AFF);color:var(--kritzel-controls-control-selected-color, #ffffff)}.kritzel-submenu-item.active:hover{background-color:var(--kritzel-controls-control-selected-background-color, #007AFF)}.kritzel-config-container{position:relative;display:flex;justify-content:center;align-items:center;height:40px;box-sizing:border-box;-webkit-tap-highlight-color:transparent;flex-shrink:0;width:0;opacity:0;overflow:hidden;pointer-events:none;margin-left:calc(-1 * var(--kritzel-controls-gap, 8px));transition:width 0.2s ease-out, opacity 0.2s ease-out, margin-left 0.2s ease-out}.kritzel-config-container.visible{width:40px;opacity:1;pointer-events:auto;margin-left:0;overflow:visible}.config-gradient-left{position:absolute;top:0;bottom:0;left:-32px;width:32px;background:linear-gradient(to right, transparent, var(--kritzel-controls-background-color, #ffffff));pointer-events:none;z-index:1;opacity:0;transition:opacity 0.2s ease-out}.config-gradient-left.visible{opacity:1}.kritzel-config{display:flex;justify-content:center;align-items:center;cursor:var(--kritzel-global-pointer-cursor, pointer);border-radius:50%}.color-container{display:flex;justify-content:center;align-items:center;width:32px;height:32px;border-radius:50%;cursor:var(--kritzel-global-pointer-cursor, pointer);border:2px solid transparent;box-sizing:border-box;background-color:var(--kritzel-color-palette-hover-background-color, #ebebeb)}.font-container{display:flex;justify-content:center;align-items:center;width:32px;height:32px;border-radius:50%;cursor:var(--kritzel-global-pointer-cursor, pointer);border:2px solid transparent;box-sizing:border-box;background-color:var(--kritzel-color-palette-hover-background-color, #ebebeb)}.no-config{height:24px;width:24px;border-radius:50%;border:1px dashed gray}kritzel-tooltip{z-index:10001}"}},[513,"kritzel-controls",{visible:[4],controls:[16],activeControl:[1040],isUtilityPanelVisible:[4,"is-utility-panel-visible"],undoState:[16],theme:[1],terms:[16],firstConfig:[32],isTouchDevice:[32],selectedSubOptions:[32],canScrollLeft:[32],canScrollRight:[32],needsScrolling:[32],displayValues:[32],internalControls:[32],closeTooltip:[64]},[[8,"keydown","handleKeyDown"]],{controls:[{onControlsChange:0}],theme:[{onThemeChange:0}]}]);function j(){"undefined"!=typeof customElements&&["kritzel-controls","kritzel-color","kritzel-color-palette","kritzel-dropdown","kritzel-font","kritzel-font-family","kritzel-font-size","kritzel-icon","kritzel-line-endings","kritzel-opacity-slider","kritzel-shape-fill","kritzel-stroke-size","kritzel-tool-config","kritzel-tooltip","kritzel-utility-panel"].forEach((t=>{switch(t){case"kritzel-controls":customElements.get(l(t))||customElements.define(l(t),T);break;case"kritzel-color":customElements.get(l(t))||p();break;case"kritzel-color-palette":customElements.get(l(t))||k();break;case"kritzel-dropdown":customElements.get(l(t))||b();break;case"kritzel-font":customElements.get(l(t))||u();break;case"kritzel-font-family":customElements.get(l(t))||f();break;case"kritzel-font-size":customElements.get(l(t))||g();break;case"kritzel-icon":customElements.get(l(t))||z();break;case"kritzel-line-endings":customElements.get(l(t))||m();break;case"kritzel-opacity-slider":customElements.get(l(t))||v();break;case"kritzel-shape-fill":customElements.get(l(t))||y();break;case"kritzel-stroke-size":customElements.get(l(t))||x();break;case"kritzel-tool-config":customElements.get(l(t))||d();break;case"kritzel-tooltip":customElements.get(l(t))||w();break;case"kritzel-utility-panel":customElements.get(l(t))||C()}}))}export{T as K,j as d}