kritzel-stencil 0.1.10 → 0.1.12

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 (34) hide show
  1. package/dist/cjs/{default-line-tool.config-C0aHyMAU.js → default-line-tool.config-DvzIh9zU.js} +2 -1
  2. package/dist/cjs/index.cjs.js +1 -1
  3. package/dist/cjs/kritzel-back-to-content_32.cjs.entry.js +53 -15
  4. package/dist/collection/components/core/kritzel-engine/kritzel-engine.js +49 -11
  5. package/dist/collection/components/shared/kritzel-dialog/kritzel-dialog.css +4 -0
  6. package/dist/collection/components/ui/kritzel-more-menu/kritzel-more-menu.css +8 -0
  7. package/dist/collection/constants/version.js +1 -1
  8. package/dist/components/index.js +1 -1
  9. package/dist/components/kritzel-controls.js +1 -1
  10. package/dist/components/kritzel-dialog.js +1 -1
  11. package/dist/components/kritzel-editor.js +1 -1
  12. package/dist/components/kritzel-engine.js +1 -1
  13. package/dist/components/kritzel-export.js +1 -1
  14. package/dist/components/kritzel-more-menu.js +1 -1
  15. package/dist/components/kritzel-settings.js +1 -1
  16. package/dist/components/kritzel-tool-config.js +1 -1
  17. package/dist/components/{p-CgB7__HC.js → p-BVGy2ETQ.js} +1 -1
  18. package/dist/components/{p-BT8qoqo4.js → p-BbC4EJrJ.js} +1 -1
  19. package/dist/components/{p-CQV1Azq8.js → p-BvoIoyaZ.js} +1 -1
  20. package/dist/components/{p-DCbOCSX1.js → p-Csm0Kf0_.js} +2 -2
  21. package/dist/components/{p-CVPA34Tp.js → p-CuifaWTr.js} +1 -1
  22. package/dist/components/{p-CGggCpmW.js → p-DB-e1jRv.js} +1 -1
  23. package/dist/components/{p-D8A3OvXv.js → p-DCFa1WDS.js} +1 -1
  24. package/dist/components/{p-21gD4R2M.js → p-DuK31Tjt.js} +1 -1
  25. package/dist/esm/{default-line-tool.config-BNltY2Ek.js → default-line-tool.config-cZLDi3SD.js} +2 -1
  26. package/dist/esm/index.js +2 -2
  27. package/dist/esm/kritzel-back-to-content_32.entry.js +53 -15
  28. package/dist/stencil/index.esm.js +1 -1
  29. package/dist/stencil/p-b740c167.entry.js +9 -0
  30. package/dist/stencil/{p-BNltY2Ek.js → p-cZLDi3SD.js} +1 -1
  31. package/dist/stencil/stencil.esm.js +1 -1
  32. package/dist/types/constants/version.d.ts +1 -1
  33. package/package.json +1 -1
  34. package/dist/stencil/p-4d01c7a6.entry.js +0 -9
@@ -14300,7 +14300,8 @@ function requireCjs () {
14300
14300
  if (hasRequiredCjs) return cjs;
14301
14301
  hasRequiredCjs = 1;
14302
14302
  (function (exports) {
14303
- var pe=Object.defineProperty;var ge=e=>pe(e,"__esModule",{value:true});var de=(e,t)=>{ge(e);for(var s in t)pe(e,s,{get:t[s],enumerable:true});};de(exports,{default:()=>ve,getStroke:()=>ne,getStrokeOutlinePoints:()=>te,getStrokePoints:()=>re});function $(e,t,s,x=h=>h){return e*x(.5-t*(.5-s))}function ce(e){return [-e[0],-e[1]]}function l(e,t){return [e[0]+t[0],e[1]+t[1]]}function a(e,t){return [e[0]-t[0],e[1]-t[1]]}function b(e,t){return [e[0]*t,e[1]*t]}function xe(e,t){return [e[0]/t,e[1]/t]}function R(e){return [e[1],-e[0]]}function B(e,t){return e[0]*t[0]+e[1]*t[1]}function me(e,t){return e[0]===t[0]&&e[1]===t[1]}function Se(e){return Math.hypot(e[0],e[1])}function Pe(e){return e[0]*e[0]+e[1]*e[1]}function A(e,t){return Pe(a(e,t))}function G(e){return xe(e,Se(e))}function ae(e,t){return Math.hypot(e[1]-t[1],e[0]-t[0])}function L(e,t,s){let x=Math.sin(s),h=Math.cos(s),y=e[0]-t[0],n=e[1]-t[1],f=y*h-n*x,d=y*x+n*h;return [f+t[0],d+t[1]]}function K(e,t,s){return l(e,b(a(t,e),s))}function ee(e,t,s){return l(e,b(t,s))}var{min:C,PI:ke}=Math,le=.275,V=ke+1e-4;function te(e,t={}){let{size:s=16,smoothing:x=.5,thinning:h=.5,simulatePressure:y=true,easing:n=r=>r,start:f={},end:d={},last:D=false}=t,{cap:S=true,easing:j=r=>r*(2-r)}=f,{cap:q=true,easing:c=r=>--r*r*r+1}=d;if(e.length===0||s<=0)return [];let p=e[e.length-1].runningLength,g=f.taper===false?0:f.taper===true?Math.max(s,p):f.taper,T=d.taper===false?0:d.taper===true?Math.max(s,p):d.taper,oe=Math.pow(s*x,2),_=[],M=[],H=e.slice(0,10).reduce((r,i)=>{let o=i.pressure;if(y){let u=C(1,i.distance/s),W=C(1,1-u);o=C(1,r+(W-r)*(u*le));}return (r+o)/2},e[0].pressure),m=$(s,h,e[e.length-1].pressure,n),U,X=e[0].vector,z=e[0].point,F=z,O=z,E=F,J=false;for(let r=0;r<e.length;r++){let{pressure:i}=e[r],{point:o,vector:u,distance:W,runningLength:I}=e[r];if(r<e.length-1&&p-I<3)continue;if(h){if(y){let v=C(1,W/s),Z=C(1,1-v);i=C(1,H+(Z-H)*(v*le));}m=$(s,h,i,n);}else m=s/2;U===void 0&&(U=m);let fe=I<g?j(I/g):1,be=p-I<T?c((p-I)/T):1;m=Math.max(.01,m*Math.min(fe,be));let se=(r<e.length-1?e[r+1]:e[r]).vector,Y=r<e.length-1?B(u,se):1,he=B(u,X)<0&&!J,ue=Y!==null&&Y<0;if(he||ue){let v=b(R(X),m);for(let Z=1/13,w=0;w<=1;w+=Z)O=L(a(o,v),o,V*w),_.push(O),E=L(l(o,v),o,V*-w),M.push(E);z=O,F=E,ue&&(J=true);continue}if(J=false,r===e.length-1){let v=b(R(u),m);_.push(a(o,v)),M.push(l(o,v));continue}let ie=b(R(K(se,u,Y)),m);O=a(o,ie),(r<=1||A(z,O)>oe)&&(_.push(O),z=O),E=l(o,ie),(r<=1||A(F,E)>oe)&&(M.push(E),F=E),H=i,X=u;}let P=e[0].point.slice(0,2),k=e.length>1?e[e.length-1].point.slice(0,2):l(e[0].point,[1,1]),Q=[],N=[];if(e.length===1){if(!(g||T)||D){let r=ee(P,G(R(a(P,k))),-(U||m)),i=[];for(let o=1/13,u=o;u<=1;u+=o)i.push(L(r,P,V*2*u));return i}}else {if(!(g||T&&e.length===1))if(S)for(let i=1/13,o=i;o<=1;o+=i){let u=L(M[0],P,V*o);Q.push(u);}else {let i=a(_[0],M[0]),o=b(i,.5),u=b(i,.51);Q.push(a(P,o),a(P,u),l(P,u),l(P,o));}let r=R(ce(e[e.length-1].vector));if(T||g&&e.length===1)N.push(k);else if(q){let i=ee(k,r,m);for(let o=1/29,u=o;u<1;u+=o)N.push(L(i,k,V*3*u));}else N.push(l(k,b(r,m)),l(k,b(r,m*.99)),a(k,b(r,m*.99)),a(k,b(r,m)));}return _.concat(N,M.reverse(),Q)}function re(e,t={}){var q;let{streamline:s=.5,size:x=16,last:h=false}=t;if(e.length===0)return [];let y=.15+(1-s)*.85,n=Array.isArray(e[0])?e:e.map(({x:c,y:p,pressure:g=.5})=>[c,p,g]);if(n.length===2){let c=n[1];n=n.slice(0,-1);for(let p=1;p<5;p++)n.push(K(n[0],c,p/4));}n.length===1&&(n=[...n,[...l(n[0],[1,1]),...n[0].slice(2)]]);let f=[{point:[n[0][0],n[0][1]],pressure:n[0][2]>=0?n[0][2]:.25,vector:[1,1],distance:0,runningLength:0}],d=false,D=0,S=f[0],j=n.length-1;for(let c=1;c<n.length;c++){let p=h&&c===j?n[c].slice(0,2):K(S.point,n[c],y);if(me(S.point,p))continue;let g=ae(p,S.point);if(D+=g,c<j&&!d){if(D<x)continue;d=true;}S={point:p,pressure:n[c][2]>=0?n[c][2]:.5,vector:G(a(S.point,p)),distance:g,runningLength:D},f.push(S);}return f[0].vector=((q=f[1])==null?void 0:q.vector)||[0,0],f}function ne(e,t={}){return te(re(e,t),t)}var ve=ne;
14303
+ Object.defineProperties(exports,{__esModule:{value:true},[Symbol.toStringTag]:{value:`Module`}});const{PI:e}=Math,t=e+1e-4,n=.5,r=[1,1];function i(e,t,n,r=e=>e){return e*r(.5-t*(.5-n))}const{min:a}=Math;function o(e,t,n){let r=a(1,t/n);return a(1,e+(a(1,1-r)-e)*(r*.275))}function s(e){return [-e[0],-e[1]]}function c(e,t){return [e[0]+t[0],e[1]+t[1]]}function l(e,t,n){return e[0]=t[0]+n[0],e[1]=t[1]+n[1],e}function u(e,t){return [e[0]-t[0],e[1]-t[1]]}function d(e,t,n){return e[0]=t[0]-n[0],e[1]=t[1]-n[1],e}function f(e,t){return [e[0]*t,e[1]*t]}function p(e,t,n){return e[0]=t[0]*n,e[1]=t[1]*n,e}function m(e,t){return [e[0]/t,e[1]/t]}function h(e){return [e[1],-e[0]]}function g(e,t){let n=t[0];return e[0]=t[1],e[1]=-n,e}function ee(e,t){return e[0]*t[0]+e[1]*t[1]}function _(e,t){return e[0]===t[0]&&e[1]===t[1]}function v(e){return Math.hypot(e[0],e[1])}function y(e,t){let n=e[0]-t[0],r=e[1]-t[1];return n*n+r*r}function b(e){return m(e,v(e))}function x(e,t){return Math.hypot(e[1]-t[1],e[0]-t[0])}function S(e,t,n){let r=Math.sin(n),i=Math.cos(n),a=e[0]-t[0],o=e[1]-t[1],s=a*i-o*r,c=a*r+o*i;return [s+t[0],c+t[1]]}function C(e,t,n,r){let i=Math.sin(r),a=Math.cos(r),o=t[0]-n[0],s=t[1]-n[1],c=o*a-s*i,l=o*i+s*a;return e[0]=c+n[0],e[1]=l+n[1],e}function w(e,t,n){return c(e,f(u(t,e),n))}function te(e,t,n,r){let i=n[0]-t[0],a=n[1]-t[1];return e[0]=t[0]+i*r,e[1]=t[1]+a*r,e}function T(e,t,n){return c(e,f(t,n))}const E=[0,0],D=[0,0],O=[0,0];function k(e,n){let r=T(e,b(h(u(e,c(e,[1,1])))),-n),i=[],a=1/13;for(let n=a;n<=1;n+=a)i.push(S(r,e,t*2*n));return i}function A(e,n,r){let i=[],a=1/r;for(let r=a;r<=1;r+=a)i.push(S(n,e,t*r));return i}function j(e,t,n){let r=u(t,n),i=f(r,.5),a=f(r,.51);return [u(e,i),u(e,a),c(e,a),c(e,i)]}function M(e,n,r,i){let a=[],o=T(e,n,r),s=1/i;for(let n=s;n<1;n+=s)a.push(S(o,e,t*3*n));return a}function ne(e,t,n){return [c(e,f(t,n)),c(e,f(t,n*.99)),u(e,f(t,n*.99)),u(e,f(t,n))]}function N(e,t,n){return e===false||e===void 0?0:e===true?Math.max(t,n):e}function re(e,t,n){return e.slice(0,10).reduce((e,r)=>{let i=r.pressure;return t&&(i=o(e,r.distance,n)),(e+i)/2},e[0].pressure)}function P(e,n={}){let{size:r=16,smoothing:a=.5,thinning:f=.5,simulatePressure:m=true,easing:_=e=>e,start:v={},end:b={},last:x=false}=n,{cap:S=true,easing:w=e=>e*(2-e)}=v,{cap:T=true,easing:P=e=>--e*e*e+1}=b;if(e.length===0||r<=0)return [];let F=e[e.length-1].runningLength,I=N(v.taper,r,F),L=N(b.taper,r,F),R=(r*a)**2,z=[],B=[],V=re(e,m,r),H=i(r,f,e[e.length-1].pressure,_),U,W=e[0].vector,G=e[0].point,K=G,q=G,J=K,Y=false;for(let n=0;n<e.length;n++){let{pressure:a}=e[n],{point:s,vector:h,distance:v,runningLength:b}=e[n],x=n===e.length-1;if(!x&&F-b<3)continue;f?(m&&(a=o(V,v,r)),H=i(r,f,a,_)):H=r/2,U===void 0&&(U=H);let S=b<I?w(b/I):1,T=F-b<L?P((F-b)/L):1;H=Math.max(.01,H*Math.min(S,T));let k=(x?e[n]:e[n+1]).vector,A=x?1:ee(h,k),j=ee(h,W)<0&&!Y,M=A!==null&&A<0;if(j||M){g(E,W),p(E,E,H);for(let e=0;e<=1;e+=.07692307692307693)d(D,s,E),C(D,D,s,t*e),q=[D[0],D[1]],z.push(q),l(O,s,E),C(O,O,s,t*-e),J=[O[0],O[1]],B.push(J);G=q,K=J,M&&(Y=true);continue}if(Y=false,x){g(E,h),p(E,E,H),z.push(u(s,E)),B.push(c(s,E));continue}te(E,k,h,A),g(E,E),p(E,E,H),d(D,s,E),q=[D[0],D[1]],(n<=1||y(G,q)>R)&&(z.push(q),G=q),l(O,s,E),J=[O[0],O[1]],(n<=1||y(K,J)>R)&&(B.push(J),K=J),V=a,W=h;}let X=[e[0].point[0],e[0].point[1]],Z=e.length>1?[e[e.length-1].point[0],e[e.length-1].point[1]]:c(e[0].point,[1,1]),Q=[],$=[];if(e.length===1){if(!(I||L)||x)return k(X,U||H)}else {I||L&&e.length===1||(S?Q.push(...A(X,B[0],13)):Q.push(...j(X,z[0],B[0])));let t=h(s(e[e.length-1].vector));L||I&&e.length===1?$.push(Z):T?$.push(...M(Z,t,H,29)):$.push(...ne(Z,t,H));}return z.concat($,B.reverse(),Q)}const F=[0,0];function I(e){return e!=null&&e>=0}function L(e,t={}){let{streamline:i=.5,size:a=16,last:o=false}=t;if(e.length===0)return [];let s=.15+(1-i)*.85,l=Array.isArray(e[0])?e:e.map(({x:e,y:t,pressure:r=n})=>[e,t,r]);if(l.length===2){let e=l[1];l=l.slice(0,-1);for(let t=1;t<5;t++)l.push(w(l[0],e,t/4));}l.length===1&&(l=[...l,[...c(l[0],r),...l[0].slice(2)]]);let u=[{point:[l[0][0],l[0][1]],pressure:I(l[0][2])?l[0][2]:.25,vector:[...r],distance:0,runningLength:0}],f=false,p=0,m=u[0],h=l.length-1;for(let e=1;e<l.length;e++){let t=o&&e===h?[l[e][0],l[e][1]]:w(m.point,l[e],s);if(_(m.point,t))continue;let r=x(t,m.point);if(p+=r,e<h&&!f){if(p<a)continue;f=true;}d(F,m.point,t),m={point:t,pressure:I(l[e][2])?l[e][2]:n,vector:b(F),distance:r,runningLength:p},u.push(m);}return u[0].vector=u[1]?.vector||[0,0],u}function R(e,t={}){return P(L(e,t),t)}var z=R;exports.default=z,exports.getStroke=R,exports.getStrokeOutlinePoints=P,exports.getStrokePoints=L;
14304
+
14304
14305
  } (cjs));
14305
14306
  return cjs;
14306
14307
  }
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var defaultLineTool_config = require('./default-line-tool.config-C0aHyMAU.js');
3
+ var defaultLineTool_config = require('./default-line-tool.config-DvzIh9zU.js');
4
4
 
5
5
  /**
6
6
  * BroadcastChannel sync provider for cross-tab synchronization
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var index = require('./index-i21-qqbc.js');
4
- var defaultLineTool_config = require('./default-line-tool.config-C0aHyMAU.js');
4
+ var defaultLineTool_config = require('./default-line-tool.config-DvzIh9zU.js');
5
5
 
6
6
  var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
7
7
 
@@ -979,7 +979,7 @@ class KritzelHTMLHelper {
979
979
  }
980
980
  }
981
981
 
982
- const kritzelDialogCss = () => `:host{display:contents}.backdrop{position:fixed;top:0;left:0;right:0;bottom:0;z-index:10002;display:flex;align-items:center;justify-content:center;background-color:var(--kritzel-dialog-backdrop-color, rgba(0, 0, 0, 0.5));opacity:1;transition:opacity 150ms ease-out}.backdrop.is-animating{opacity:0}.dialog-content{position:relative;display:flex;flex-direction:column;background-color:var(--kritzel-dialog-background-color, #ffffff);border-radius:var(--kritzel-dialog-border-radius, 12px);box-shadow:var(--kritzel-dialog-box-shadow, 0 4px 20px rgba(0, 0, 0, 0.15));border:var(--kritzel-dialog-border, 1px solid #ebebeb);max-height:var(--kritzel-dialog-max-height, 90vh);max-width:var(--kritzel-dialog-max-width, 90vw);overflow:hidden;transform:scale(1);opacity:1;transition:transform 200ms ease-out, opacity 200ms ease-out;font-family:var(--kritzel-dialog-font-family, sans-serif)}.dialog-content.is-animating{transform:scale(0.95);opacity:0}.dialog-content.size-small{width:var(--kritzel-dialog-width-small, 320px);height:var(--kritzel-dialog-height-small, auto)}.dialog-content.size-medium{width:var(--kritzel-dialog-width-medium, 480px);height:var(--kritzel-dialog-height-medium, auto)}.dialog-content.size-large{width:var(--kritzel-dialog-width-large, 640px);height:var(--kritzel-dialog-height-large, auto)}.dialog-content.size-fullscreen{width:100vw;height:100vh;height:100dvh;max-width:100vw;max-height:100vh;max-height:100dvh;border-radius:0}@media (max-width: 576px){.dialog-content.fullscreen-on-mobile{width:100vw;height:100vh;height:100dvh;max-width:100vw;max-height:100vh;max-height:100dvh;border-radius:0}}.dialog-header{display:flex;align-items:center;justify-content:space-between;padding:var(--kritzel-dialog-header-padding, 16px 20px);border-bottom:var(--kritzel-dialog-header-border, 1px solid #ebebeb);gap:12px}.dialog-title{margin:0;font-size:var(--kritzel-dialog-title-font-size, 18px);font-weight:var(--kritzel-dialog-title-font-weight, 600);color:var(--kritzel-dialog-title-color, #1a1a1a);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.close-button{display:flex;align-items:center;justify-content:center;width:32px;height:32px;padding:0;border:none;border-radius:var(--kritzel-dialog-close-button-border-radius, 6px);background-color:var(--kritzel-dialog-close-button-background, transparent);color:var(--kritzel-dialog-close-button-color, #666666);cursor:var(--kritzel-pointer-cursor, pointer);transition:background-color 150ms ease, color 150ms ease;flex-shrink:0;-webkit-tap-highlight-color:transparent}.close-button:hover{background-color:var(--kritzel-dialog-close-button-hover-background, #f5f5f5);color:var(--kritzel-dialog-close-button-hover-color, #1a1a1a)}.close-button:focus{outline:none}.close-button:focus-visible{outline:2px solid var(--kritzel-dialog-focus-ring-color, #0066cc);outline-offset:2px}.close-button:active{background-color:var(--kritzel-dialog-close-button-active-background, #ebebeb)}.dialog-body{padding:var(--kritzel-dialog-body-padding, 20px);overflow-y:auto;flex:1;scrollbar-color:#ebebeb transparent;scrollbar-width:thin}.dialog-footer{display:flex;align-items:center;justify-content:flex-end;gap:var(--kritzel-dialog-footer-gap, 8px);padding:var(--kritzel-dialog-footer-padding, 16px 20px);border-top:var(--kritzel-dialog-footer-border, 1px solid #ebebeb)}::slotted([slot='header']){flex:1}::slotted([slot='footer']){display:contents}`;
982
+ const kritzelDialogCss = () => `:host{display:contents}.backdrop{position:fixed;top:0;left:0;right:0;bottom:0;z-index:10002;display:flex;align-items:center;justify-content:center;background-color:var(--kritzel-dialog-backdrop-color, rgba(0, 0, 0, 0.5));opacity:1;transition:opacity 150ms ease-out}.backdrop.is-animating{opacity:0}.dialog-content{position:relative;display:flex;flex-direction:column;background-color:var(--kritzel-dialog-background-color, #ffffff);border-radius:var(--kritzel-dialog-border-radius, 12px);box-shadow:var(--kritzel-dialog-box-shadow, 0 4px 20px rgba(0, 0, 0, 0.15));border:var(--kritzel-dialog-border, 1px solid #ebebeb);max-height:var(--kritzel-dialog-max-height, 90vh);max-width:var(--kritzel-dialog-max-width, 90vw);overflow:hidden;transform:scale(1);opacity:1;transition:transform 200ms ease-out, opacity 200ms ease-out;font-family:var(--kritzel-dialog-font-family, sans-serif)}.dialog-content.is-animating{transform:scale(0.95);opacity:0}.dialog-content.size-small{width:var(--kritzel-dialog-width-small, 320px);height:var(--kritzel-dialog-height-small, auto)}.dialog-content.size-medium{width:var(--kritzel-dialog-width-medium, 480px);height:var(--kritzel-dialog-height-medium, auto)}.dialog-content.size-large{width:var(--kritzel-dialog-width-large, 640px);height:var(--kritzel-dialog-height-large, auto)}.dialog-content.size-fullscreen{width:100vw;height:100vh;height:100dvh;max-width:100vw;max-height:100vh;max-height:100dvh;border-radius:0}@media (max-width: 576px){.backdrop:has(.fullscreen-on-mobile){background-color:transparent}.dialog-content.fullscreen-on-mobile{width:100vw;height:100vh;height:100dvh;max-width:100vw;max-height:100vh;max-height:100dvh;border-radius:0}}.dialog-header{display:flex;align-items:center;justify-content:space-between;padding:var(--kritzel-dialog-header-padding, 16px 20px);border-bottom:var(--kritzel-dialog-header-border, 1px solid #ebebeb);gap:12px}.dialog-title{margin:0;font-size:var(--kritzel-dialog-title-font-size, 18px);font-weight:var(--kritzel-dialog-title-font-weight, 600);color:var(--kritzel-dialog-title-color, #1a1a1a);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.close-button{display:flex;align-items:center;justify-content:center;width:32px;height:32px;padding:0;border:none;border-radius:var(--kritzel-dialog-close-button-border-radius, 6px);background-color:var(--kritzel-dialog-close-button-background, transparent);color:var(--kritzel-dialog-close-button-color, #666666);cursor:var(--kritzel-pointer-cursor, pointer);transition:background-color 150ms ease, color 150ms ease;flex-shrink:0;-webkit-tap-highlight-color:transparent}.close-button:hover{background-color:var(--kritzel-dialog-close-button-hover-background, #f5f5f5);color:var(--kritzel-dialog-close-button-hover-color, #1a1a1a)}.close-button:focus{outline:none}.close-button:focus-visible{outline:2px solid var(--kritzel-dialog-focus-ring-color, #0066cc);outline-offset:2px}.close-button:active{background-color:var(--kritzel-dialog-close-button-active-background, #ebebeb)}.dialog-body{padding:var(--kritzel-dialog-body-padding, 20px);overflow-y:auto;flex:1;scrollbar-color:#ebebeb transparent;scrollbar-width:thin}.dialog-footer{display:flex;align-items:center;justify-content:flex-end;gap:var(--kritzel-dialog-footer-gap, 8px);padding:var(--kritzel-dialog-footer-padding, 16px 20px);border-top:var(--kritzel-dialog-footer-border, 1px solid #ebebeb)}::slotted([slot='header']){flex:1}::slotted([slot='footer']){display:contents}`;
983
983
 
984
984
  const KritzelDialog = class {
985
985
  constructor(hostRef) {
@@ -22205,6 +22205,17 @@ const KritzelEngine = class {
22205
22205
  async getScreenshot(format = 'png') {
22206
22206
  if (!this.host)
22207
22207
  return null;
22208
+ // Save critical state before screenshot to restore after
22209
+ const savedState = {
22210
+ objects: this.core.store.state.objects,
22211
+ activeWorkspace: this.core.store.state.activeWorkspace,
22212
+ workspaces: this.core.store.state.workspaces,
22213
+ activeTool: this.core.store.state.activeTool,
22214
+ isReady: this.core.store.state.isReady,
22215
+ translateX: this.core.store.state.translateX,
22216
+ translateY: this.core.store.state.translateY,
22217
+ scale: this.core.store.state.scale,
22218
+ };
22208
22219
  const options = {
22209
22220
  filter: (node) => {
22210
22221
  // Exclude the context menu and debug panel from the screenshot
@@ -22217,12 +22228,28 @@ const KritzelEngine = class {
22217
22228
  return true;
22218
22229
  },
22219
22230
  };
22220
- if (format === 'svg') {
22221
- return await toSvg(this.host, options);
22231
+ let result;
22232
+ try {
22233
+ if (format === 'svg') {
22234
+ result = await toSvg(this.host, options);
22235
+ }
22236
+ else {
22237
+ result = await toPng(this.host, options);
22238
+ }
22222
22239
  }
22223
- else {
22224
- return await toPng(this.host, options);
22240
+ finally {
22241
+ // Restore state after screenshot in case cloning caused any side effects
22242
+ this.core.store.state.objects = savedState.objects;
22243
+ this.core.store.state.activeWorkspace = savedState.activeWorkspace;
22244
+ this.core.store.state.workspaces = savedState.workspaces;
22245
+ this.core.store.state.activeTool = savedState.activeTool;
22246
+ this.core.store.state.isReady = savedState.isReady;
22247
+ this.core.store.state.translateX = savedState.translateX;
22248
+ this.core.store.state.translateY = savedState.translateY;
22249
+ this.core.store.state.scale = savedState.scale;
22250
+ this.core.rerender();
22225
22251
  }
22252
+ return result;
22226
22253
  }
22227
22254
  async exportViewportAsPng() {
22228
22255
  try {
@@ -22381,7 +22408,7 @@ const KritzelEngine = class {
22381
22408
  if (this.core.store.totalObjectCount > 0) {
22382
22409
  this.objectsInViewportChange.emit(visibleObjects);
22383
22410
  }
22384
- return (index.h(index.Host, { key: '00c29d6a19a47011b0e9ba6977b43e0706f0ec44' }, this.core.store.state.debugInfo.showViewportInfo && (index.h("div", { key: '51a0815ac76961d4c618895f54e99a399814e936', class: "debug-panel" }, index.h("div", { key: '46cbc830f3ccfb1f3b6c76bae58447c60a2c73ac' }, "ActiveWorkspaceId: ", this.core.store.state?.activeWorkspace?.id), index.h("div", { key: '592fd839603ee14c85e32b68c25653ddd346c74d' }, "ActiveWorkspaceName: ", this.core.store.state?.activeWorkspace?.name), index.h("div", { key: '3dcb028c0b3a74072df636fba71ecd690cc97b92' }, "TranslateX: ", this.core.store.state?.translateX), index.h("div", { key: '4ec69c521e629d211020b062d8ebbfa5e628e1bd' }, "TranslateY: ", this.core.store.state?.translateY), index.h("div", { key: '7775563a5a8eb7e4a5af5377b725fcfb153f668d' }, "ViewportWidth: ", this.core.store.state?.viewportWidth), index.h("div", { key: '627b6471401b4ef24ca5226057f7ba57c1877d0b' }, "ViewportHeight: ", this.core.store.state?.viewportHeight), index.h("div", { key: '64de38db4971e00e7df3db2e457f7ce222af2367' }, "PointerCount: ", this.core.store.state.pointers.size), index.h("div", { key: '175231bc3822428cf9984d29ed5b5da2ef0a9e3d' }, "Scale: ", this.core.store.state?.scale), index.h("div", { key: '9cef3fe5c5971265ffd403ceb528825a589ab3e0' }, "ActiveTool: ", this.core.store.state?.activeTool?.name), index.h("div", { key: 'aa8cd5f64a78636640cb515ddf472f3d1f75d9fc' }, "HasViewportChanged: ", this.core.store.state?.hasViewportChanged ? 'true' : 'false'), index.h("div", { key: '9d938b280e5bc5993254dbc826967cb7a4ab1cdf' }, "IsEnabled: ", this.core.store.state?.isEnabled ? 'true' : 'false'), index.h("div", { key: 'e7873b4f7be3a8f2e399ece7172a9b93fb3dd24c' }, "IsScaling: ", this.core.store.state?.isScaling ? 'true' : 'false'), index.h("div", { key: '215fdbbee5aae35fd41c39c08d8583e1b6f1eec5' }, "IsPanning: ", this.core.store.state?.isPanning ? 'true' : 'false'), index.h("div", { key: '3ec27b5b312f257294b62403ccb1b595b4804730' }, "IsSelecting: ", this.isSelecting ? 'true' : 'false'), index.h("div", { key: 'ecc397837a917eb3a270bf9500bee66697ee2f30' }, "IsSelectionActive: ", this.isSelectionActive ? 'true' : 'false'), index.h("div", { key: '1a1ab9d4b3e1597eb895bf73a5866b6067ee648e' }, "IsResizeHandleSelected: ", this.core.store.state.isResizeHandleSelected ? 'true' : 'false'), index.h("div", { key: 'd09983fe1af7b4163ed5ce6ac4fc7b9ed3bebcce' }, "IsRotationHandleSelected: ", this.core.store.state.isRotationHandleSelected ? 'true' : 'false'), index.h("div", { key: '72e0ae5e6c06d124dd02253b7757d2750d7ed296' }, "IsRotationHandleHovered: ", this.core.store.state.isRotationHandleHovered ? 'true' : 'false'), index.h("div", { key: 'a03399a8bc693058ff46b0d526f9c606b15a0417' }, "IsDrawing: ", this.core.store.state.isDrawing ? 'true' : 'false'), index.h("div", { key: 'b3293f7075f26290827490af6c93151d2bbc13af' }, "IsWriting: ", this.core.store.state.isWriting ? 'true' : 'false'), index.h("div", { key: 'b3592b410a81ec5b5c8c1424f05386fc685b8e0a' }, "IsPointerDown: ", this.core.store.isPointerDown ? 'true' : 'false'), index.h("div", { key: '433b489b98c25504fdba7d34f12c1f9421d2df78' }, "PointerX: ", this.core.store.state?.pointerX), index.h("div", { key: '8e3416a277dd1a0f35208dc19cb9a2c0f38aeb85' }, "PointerY: ", this.core.store.state?.pointerY), index.h("div", { key: '69d2920c5f13961baa619f30e36288783173ddd1' }, "SelectedObjects: ", this.core.store.selectionGroup?.objects.length || 0), index.h("div", { key: '1175f72816f38d24d986f3e78a1f312cc99aea7c' }, "ViewportCenter: (", viewportCenterX.toFixed(2), ", ", viewportCenterY.toFixed(2), ")"))), index.h("div", { key: '0f9c1a69ecd260287647967109619c83761abf81', id: "origin", class: "origin", style: {
22411
+ return (index.h(index.Host, { key: '39f0ffff986b61133ad44f5eadab07f7d776cb01' }, this.core.store.state.debugInfo.showViewportInfo && (index.h("div", { key: '946bfcc8d6fb9986c1b7b7fc150eb7dfc45cbb59', class: "debug-panel" }, index.h("div", { key: 'ae6f054b4aefca557228d810125dec1b7695654c' }, "ActiveWorkspaceId: ", this.core.store.state?.activeWorkspace?.id), index.h("div", { key: 'f47b71175c0dd1db6fb1a82bbdfd5532a1ce55b3' }, "ActiveWorkspaceName: ", this.core.store.state?.activeWorkspace?.name), index.h("div", { key: 'aba67c4bd24fb9b03848614831d48e6d70ec104f' }, "TranslateX: ", this.core.store.state?.translateX), index.h("div", { key: 'f1c32b14966542f41a9118e3af76bd3f54ae0039' }, "TranslateY: ", this.core.store.state?.translateY), index.h("div", { key: '9d4457d49b8a2f5420fb115d41e9aeef2f72eb59' }, "ViewportWidth: ", this.core.store.state?.viewportWidth), index.h("div", { key: '53b482102ec828758904dcc4c8d62e8e960f87f0' }, "ViewportHeight: ", this.core.store.state?.viewportHeight), index.h("div", { key: '8f3a6156b882350b3ead9c5778df5c7c80ca8888' }, "PointerCount: ", this.core.store.state.pointers.size), index.h("div", { key: '6471128d6613f638848ea99e2337126828c6236a' }, "Scale: ", this.core.store.state?.scale), index.h("div", { key: 'f70133c73206ae0651a7777a87ecbfc967f97e0d' }, "ActiveTool: ", this.core.store.state?.activeTool?.name), index.h("div", { key: '172b5725dbb9b37a1b63df04e908906d5b04445d' }, "HasViewportChanged: ", this.core.store.state?.hasViewportChanged ? 'true' : 'false'), index.h("div", { key: '114e8afde10ea3e8eae32a2772914b56a0c718f4' }, "IsEnabled: ", this.core.store.state?.isEnabled ? 'true' : 'false'), index.h("div", { key: '9e8288cdf8d9f365317649fd36fd32f41d18a165' }, "IsScaling: ", this.core.store.state?.isScaling ? 'true' : 'false'), index.h("div", { key: '2498b02ef54fdb9752ca2c86ccb6a24ef272ee03' }, "IsPanning: ", this.core.store.state?.isPanning ? 'true' : 'false'), index.h("div", { key: '66b10615c0c15b2d1f93e22954bae32a171cda26' }, "IsSelecting: ", this.isSelecting ? 'true' : 'false'), index.h("div", { key: '8a246ad747b8b289e89d7edd8df84b74d88363de' }, "IsSelectionActive: ", this.isSelectionActive ? 'true' : 'false'), index.h("div", { key: '5d8086caabac9183f9be9076fa724d5d6b009b2a' }, "IsResizeHandleSelected: ", this.core.store.state.isResizeHandleSelected ? 'true' : 'false'), index.h("div", { key: 'edf7cbb6439ec09b26e895b696e80981a127ec8f' }, "IsRotationHandleSelected: ", this.core.store.state.isRotationHandleSelected ? 'true' : 'false'), index.h("div", { key: 'ad95478b84f7381fb32eb23606e5697e944649c2' }, "IsRotationHandleHovered: ", this.core.store.state.isRotationHandleHovered ? 'true' : 'false'), index.h("div", { key: 'ec41d473e9194732c6846ea388c24b4e2edd6119' }, "IsDrawing: ", this.core.store.state.isDrawing ? 'true' : 'false'), index.h("div", { key: 'dbe271f716901a41c857724abbf0837b63995e07' }, "IsWriting: ", this.core.store.state.isWriting ? 'true' : 'false'), index.h("div", { key: 'e8d6bac1c6069923cfd3f5d6177b60d6d3ad6eaa' }, "IsPointerDown: ", this.core.store.isPointerDown ? 'true' : 'false'), index.h("div", { key: 'a2b19dff95c8e35f7b40f9e378e8ca49e878d939' }, "PointerX: ", this.core.store.state?.pointerX), index.h("div", { key: 'f94f38ae42e2c98df3a82f09e18fa482f5c1a415' }, "PointerY: ", this.core.store.state?.pointerY), index.h("div", { key: '1bfc6689f25c7912074f147394ea1d9fce42d990' }, "SelectedObjects: ", this.core.store.selectionGroup?.objects.length || 0), index.h("div", { key: 'a7761da6ae5caa3f0df089b223006959ffec65fd' }, "ViewportCenter: (", viewportCenterX.toFixed(2), ", ", viewportCenterY.toFixed(2), ")"))), index.h("div", { key: '485aa0df270cc27992abfac5f7639967aa6845a3', id: "origin", class: "origin", style: {
22385
22412
  transform: `matrix(${this.core.store.state?.scale}, 0, 0, ${this.core.store.state?.scale}, ${this.core.store.state?.translateX}, ${this.core.store.state?.translateY})`,
22386
22413
  } }, visibleObjects?.map(object => {
22387
22414
  return (index.h("div", { key: object.id, style: {
@@ -22409,7 +22436,9 @@ const KritzelEngine = class {
22409
22436
  borderStyle: 'solid',
22410
22437
  padding: object.padding + 'px',
22411
22438
  overflow: 'visible',
22412
- display: defaultLineTool_config.KritzelClassHelper.isInstanceOf(object, 'KritzelLine') || defaultLineTool_config.KritzelClassHelper.isInstanceOf(object, 'KritzelPath') ? 'none' : 'block'
22439
+ display: defaultLineTool_config.KritzelClassHelper.isInstanceOf(object, 'KritzelLine') || defaultLineTool_config.KritzelClassHelper.isInstanceOf(object, 'KritzelPath')
22440
+ ? 'none'
22441
+ : 'block',
22413
22442
  } }, defaultLineTool_config.KritzelClassHelper.isInstanceOf(object, 'KritzelImage') && (index.h("img", { ref: el => object.mount(el), src: object.src, style: {
22414
22443
  width: '100%',
22415
22444
  height: '100%',
@@ -22545,10 +22574,18 @@ const KritzelEngine = class {
22545
22574
  } }), index.h("circle", { class: "selection-line-handle-overlay start", cx: object.startX - object.x, cy: object.startY - object.y, r: `${(baseHandleTouchSize * object.scale) / this.core.store.state?.scale}`, style: {
22546
22575
  fill: 'transparent',
22547
22576
  paintOrder: 'fill',
22548
- } }), index.h("circle", { class: "selection-line-handle center", cx: object.controlX !== undefined ? (object.startX + 2 * object.controlX + object.endX) / 4 - object.x : (object.startX - object.x + object.endX - object.x) / 2, cy: object.controlY !== undefined ? (object.startY + 2 * object.controlY + object.endY) / 4 - object.y : (object.startY - object.y + object.endY - object.y) / 2, r: `${(baseHandleSize * object.scale) / this.core.store.state?.scale}`, style: {
22577
+ } }), index.h("circle", { class: "selection-line-handle center", cx: object.controlX !== undefined
22578
+ ? (object.startX + 2 * object.controlX + object.endX) / 4 - object.x
22579
+ : (object.startX - object.x + object.endX - object.x) / 2, cy: object.controlY !== undefined
22580
+ ? (object.startY + 2 * object.controlY + object.endY) / 4 - object.y
22581
+ : (object.startY - object.y + object.endY - object.y) / 2, r: `${(baseHandleSize * object.scale) / this.core.store.state?.scale}`, style: {
22549
22582
  fill: 'var(--kritzel-selection-handle-color, #000000)',
22550
22583
  paintOrder: 'fill',
22551
- } }), index.h("circle", { class: "selection-line-handle-overlay center", cx: object.controlX !== undefined ? (object.startX + 2 * object.controlX + object.endX) / 4 - object.x : (object.startX - object.x + object.endX - object.x) / 2, cy: object.controlY !== undefined ? (object.startY + 2 * object.controlY + object.endY) / 4 - object.y : (object.startY - object.y + object.endY - object.y) / 2, r: `${(baseHandleTouchSize * object.scale) / this.core.store.state?.scale}`, style: {
22584
+ } }), index.h("circle", { class: "selection-line-handle-overlay center", cx: object.controlX !== undefined
22585
+ ? (object.startX + 2 * object.controlX + object.endX) / 4 - object.x
22586
+ : (object.startX - object.x + object.endX - object.x) / 2, cy: object.controlY !== undefined
22587
+ ? (object.startY + 2 * object.controlY + object.endY) / 4 - object.y
22588
+ : (object.startY - object.y + object.endY - object.y) / 2, r: `${(baseHandleTouchSize * object.scale) / this.core.store.state?.scale}`, style: {
22552
22589
  fill: 'transparent',
22553
22590
  paintOrder: 'fill',
22554
22591
  } }), index.h("circle", { class: "selection-line-handle end", cx: object.endX - object.x, cy: object.endY - object.y, r: `${(baseHandleSize * object.scale) / this.core.store.state?.scale}`, style: {
@@ -22620,7 +22657,8 @@ const KritzelEngine = class {
22620
22657
  strokeWidth: data.lineStrokeWidth,
22621
22658
  strokeDasharray: data.dashArray,
22622
22659
  strokeLinecap: 'round',
22623
- } })) : (data.edgeX !== undefined && data.edgeY !== undefined && (index.h("line", { x1: data.edgeX, y1: data.edgeY, x2: data.centerX, y2: data.centerY, style: {
22660
+ } })) : (data.edgeX !== undefined &&
22661
+ data.edgeY !== undefined && (index.h("line", { x1: data.edgeX, y1: data.edgeY, x2: data.centerX, y2: data.centerY, style: {
22624
22662
  stroke: 'var(--kritzel-snap-line-stroke, rgba(0, 0, 0, 0.2))',
22625
22663
  strokeWidth: data.lineStrokeWidth,
22626
22664
  strokeDasharray: data.dashArray,
@@ -22630,7 +22668,7 @@ const KritzelEngine = class {
22630
22668
  stroke: 'var(--kritzel-snap-indicator-stroke, #007bff)',
22631
22669
  strokeWidth: data.indicatorStrokeWidth,
22632
22670
  } }))));
22633
- })()), this.core.store.state.isContextMenuVisible && (index.h("kritzel-context-menu", { key: '6bc7badd1372727cda363f335c358323e25eef40', class: "context-menu", ref: el => (this.contextMenuElement = el), items: this.core.store.state.contextMenuItems, objects: this.core.store.selectionGroup?.objects || [], style: {
22671
+ })()), this.core.store.state.isContextMenuVisible && (index.h("kritzel-context-menu", { key: 'a46409b1a9d2c7a97e2463ac689e4fa1b0802a70', class: "context-menu", ref: el => (this.contextMenuElement = el), items: this.core.store.state.contextMenuItems, objects: this.core.store.selectionGroup?.objects || [], style: {
22634
22672
  position: 'fixed',
22635
22673
  left: `${this.core.store.state.contextMenuX}px`,
22636
22674
  top: `${this.core.store.state.contextMenuY}px`,
@@ -22641,7 +22679,7 @@ const KritzelEngine = class {
22641
22679
  y: (-this.core.store.state.translateY + this.core.store.state.contextMenuY) / this.core.store.state.scale,
22642
22680
  }, this.core.store.selectionGroup?.objects);
22643
22681
  this.hideContextMenu();
22644
- }, onClose: () => this.hideContextMenu() })), this.core.store.state?.activeTool instanceof defaultLineTool_config.KritzelEraserTool && !this.core.store.state.isScaling && index.h("kritzel-cursor-trail", { key: '48318d12506f588d510645ee1fdd5f08c511adf9', core: this.core })));
22682
+ }, onClose: () => this.hideContextMenu() })), this.core.store.state?.activeTool instanceof defaultLineTool_config.KritzelEraserTool && !this.core.store.state.isScaling && index.h("kritzel-cursor-trail", { key: '479b86bb97be00f0859a62b2b16f419dff6d2bac', core: this.core })));
22645
22683
  }
22646
22684
  static get watchers() { return {
22647
22685
  "workspace": [{
@@ -23198,7 +23236,7 @@ const KritzelMenuItem = class {
23198
23236
  };
23199
23237
  KritzelMenuItem.style = kritzelMenuItemCss();
23200
23238
 
23201
- const kritzelMoreMenuCss = () => `:host{display:inline-flex}.more-menu-button{display:flex;align-items:center;justify-content:center;width:var(--kritzel-more-menu-button-width, 50px);height:var(--kritzel-more-menu-button-height, 50px);padding:0;border:var(--kritzel-more-menu-button-border, 1px solid #ebebeb);border-radius:var(--kritzel-more-menu-button-border-radius, 12px);background-color:var(--kritzel-more-menu-button-background-color, #ffffff);cursor:var(--kritzel-pointer-cursor, pointer);box-shadow:var(--kritzel-more-menu-button-box-shadow, 0 0 3px rgba(0, 0, 0, 0.08));transition:background-color 150ms ease;-webkit-tap-highlight-color:transparent}.more-menu-button:hover{background-color:var(--kritzel-more-menu-button-hover-background-color, #f5f5f5)}.more-menu-button:active{background-color:var(--kritzel-more-menu-button-active-background-color, #ebebeb)}`;
23239
+ const kritzelMoreMenuCss = () => `:host{display:inline-flex}.more-menu-button{display:flex;align-items:center;justify-content:center;width:var(--kritzel-more-menu-button-width, 50px);height:var(--kritzel-more-menu-button-height, 50px);padding:0;border:var(--kritzel-more-menu-button-border, 1px solid #ebebeb);border-radius:var(--kritzel-more-menu-button-border-radius, 12px);background-color:var(--kritzel-more-menu-button-background-color, #ffffff);cursor:var(--kritzel-pointer-cursor, pointer);box-shadow:var(--kritzel-more-menu-button-box-shadow, 0 0 3px rgba(0, 0, 0, 0.08));transition:background-color 150ms ease;-webkit-tap-highlight-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none;color:inherit}.more-menu-button:hover{background-color:var(--kritzel-more-menu-button-hover-background-color, #f5f5f5)}.more-menu-button:focus{background-color:var(--kritzel-more-menu-button-hover-background-color, #f5f5f5)}.more-menu-button:active{background-color:var(--kritzel-more-menu-button-active-background-color, #ebebeb)}`;
23202
23240
 
23203
23241
  const KritzelMoreMenu = class {
23204
23242
  constructor(hostRef) {
@@ -23611,7 +23649,7 @@ const KritzelPortal = class {
23611
23649
  * This file is auto-generated by the version bump scripts.
23612
23650
  * Do not modify manually.
23613
23651
  */
23614
- const KRITZEL_VERSION = '0.1.10';
23652
+ const KRITZEL_VERSION = '0.1.12';
23615
23653
 
23616
23654
  const kritzelSettingsCss = () => `:host{display:contents}kritzel-dialog{--kritzel-dialog-body-padding:0;--kritzel-dialog-width-large:800px;--kritzel-dialog-height-large:500px}.footer-button{padding:8px 16px;border-radius:6px;cursor:pointer;font-size:14px}.cancel-button{border:1px solid #ebebeb;background:#fff;color:inherit}.cancel-button:hover{background:#f5f5f5}.settings-content{padding:0}.settings-content h3{margin:0 0 16px 0;font-size:18px;font-weight:600;color:var(--kritzel-settings-content-heading-color, #333333)}.settings-content p{margin:0;font-size:14px;color:var(--kritzel-settings-content-text-color, #666666);line-height:1.5}.settings-group{display:flex;flex-direction:column;gap:24px}.settings-item{display:flex;flex-direction:column;gap:8px}.settings-row{display:flex;align-items:center;justify-content:space-between;gap:16px}.settings-label{font-size:14px;font-weight:500;color:var(--kritzel-settings-label-color, #333333);margin:0}.settings-description{font-size:12px;color:var(--kritzel-settings-description-color, #888888);margin:0;line-height:1.4}`;
23617
23655
 
@@ -302,6 +302,17 @@ export class KritzelEngine {
302
302
  async getScreenshot(format = 'png') {
303
303
  if (!this.host)
304
304
  return null;
305
+ // Save critical state before screenshot to restore after
306
+ const savedState = {
307
+ objects: this.core.store.state.objects,
308
+ activeWorkspace: this.core.store.state.activeWorkspace,
309
+ workspaces: this.core.store.state.workspaces,
310
+ activeTool: this.core.store.state.activeTool,
311
+ isReady: this.core.store.state.isReady,
312
+ translateX: this.core.store.state.translateX,
313
+ translateY: this.core.store.state.translateY,
314
+ scale: this.core.store.state.scale,
315
+ };
305
316
  const options = {
306
317
  filter: (node) => {
307
318
  // Exclude the context menu and debug panel from the screenshot
@@ -314,12 +325,28 @@ export class KritzelEngine {
314
325
  return true;
315
326
  },
316
327
  };
317
- if (format === 'svg') {
318
- return await toSvg(this.host, options);
328
+ let result;
329
+ try {
330
+ if (format === 'svg') {
331
+ result = await toSvg(this.host, options);
332
+ }
333
+ else {
334
+ result = await toPng(this.host, options);
335
+ }
319
336
  }
320
- else {
321
- return await toPng(this.host, options);
337
+ finally {
338
+ // Restore state after screenshot in case cloning caused any side effects
339
+ this.core.store.state.objects = savedState.objects;
340
+ this.core.store.state.activeWorkspace = savedState.activeWorkspace;
341
+ this.core.store.state.workspaces = savedState.workspaces;
342
+ this.core.store.state.activeTool = savedState.activeTool;
343
+ this.core.store.state.isReady = savedState.isReady;
344
+ this.core.store.state.translateX = savedState.translateX;
345
+ this.core.store.state.translateY = savedState.translateY;
346
+ this.core.store.state.scale = savedState.scale;
347
+ this.core.rerender();
322
348
  }
349
+ return result;
323
350
  }
324
351
  async exportViewportAsPng() {
325
352
  try {
@@ -469,7 +496,7 @@ export class KritzelEngine {
469
496
  if (this.core.store.totalObjectCount > 0) {
470
497
  this.objectsInViewportChange.emit(visibleObjects);
471
498
  }
472
- return (h(Host, { key: '00c29d6a19a47011b0e9ba6977b43e0706f0ec44' }, this.core.store.state.debugInfo.showViewportInfo && (h("div", { key: '51a0815ac76961d4c618895f54e99a399814e936', class: "debug-panel" }, h("div", { key: '46cbc830f3ccfb1f3b6c76bae58447c60a2c73ac' }, "ActiveWorkspaceId: ", this.core.store.state?.activeWorkspace?.id), h("div", { key: '592fd839603ee14c85e32b68c25653ddd346c74d' }, "ActiveWorkspaceName: ", this.core.store.state?.activeWorkspace?.name), h("div", { key: '3dcb028c0b3a74072df636fba71ecd690cc97b92' }, "TranslateX: ", this.core.store.state?.translateX), h("div", { key: '4ec69c521e629d211020b062d8ebbfa5e628e1bd' }, "TranslateY: ", this.core.store.state?.translateY), h("div", { key: '7775563a5a8eb7e4a5af5377b725fcfb153f668d' }, "ViewportWidth: ", this.core.store.state?.viewportWidth), h("div", { key: '627b6471401b4ef24ca5226057f7ba57c1877d0b' }, "ViewportHeight: ", this.core.store.state?.viewportHeight), h("div", { key: '64de38db4971e00e7df3db2e457f7ce222af2367' }, "PointerCount: ", this.core.store.state.pointers.size), h("div", { key: '175231bc3822428cf9984d29ed5b5da2ef0a9e3d' }, "Scale: ", this.core.store.state?.scale), h("div", { key: '9cef3fe5c5971265ffd403ceb528825a589ab3e0' }, "ActiveTool: ", this.core.store.state?.activeTool?.name), h("div", { key: 'aa8cd5f64a78636640cb515ddf472f3d1f75d9fc' }, "HasViewportChanged: ", this.core.store.state?.hasViewportChanged ? 'true' : 'false'), h("div", { key: '9d938b280e5bc5993254dbc826967cb7a4ab1cdf' }, "IsEnabled: ", this.core.store.state?.isEnabled ? 'true' : 'false'), h("div", { key: 'e7873b4f7be3a8f2e399ece7172a9b93fb3dd24c' }, "IsScaling: ", this.core.store.state?.isScaling ? 'true' : 'false'), h("div", { key: '215fdbbee5aae35fd41c39c08d8583e1b6f1eec5' }, "IsPanning: ", this.core.store.state?.isPanning ? 'true' : 'false'), h("div", { key: '3ec27b5b312f257294b62403ccb1b595b4804730' }, "IsSelecting: ", this.isSelecting ? 'true' : 'false'), h("div", { key: 'ecc397837a917eb3a270bf9500bee66697ee2f30' }, "IsSelectionActive: ", this.isSelectionActive ? 'true' : 'false'), h("div", { key: '1a1ab9d4b3e1597eb895bf73a5866b6067ee648e' }, "IsResizeHandleSelected: ", this.core.store.state.isResizeHandleSelected ? 'true' : 'false'), h("div", { key: 'd09983fe1af7b4163ed5ce6ac4fc7b9ed3bebcce' }, "IsRotationHandleSelected: ", this.core.store.state.isRotationHandleSelected ? 'true' : 'false'), h("div", { key: '72e0ae5e6c06d124dd02253b7757d2750d7ed296' }, "IsRotationHandleHovered: ", this.core.store.state.isRotationHandleHovered ? 'true' : 'false'), h("div", { key: 'a03399a8bc693058ff46b0d526f9c606b15a0417' }, "IsDrawing: ", this.core.store.state.isDrawing ? 'true' : 'false'), h("div", { key: 'b3293f7075f26290827490af6c93151d2bbc13af' }, "IsWriting: ", this.core.store.state.isWriting ? 'true' : 'false'), h("div", { key: 'b3592b410a81ec5b5c8c1424f05386fc685b8e0a' }, "IsPointerDown: ", this.core.store.isPointerDown ? 'true' : 'false'), h("div", { key: '433b489b98c25504fdba7d34f12c1f9421d2df78' }, "PointerX: ", this.core.store.state?.pointerX), h("div", { key: '8e3416a277dd1a0f35208dc19cb9a2c0f38aeb85' }, "PointerY: ", this.core.store.state?.pointerY), h("div", { key: '69d2920c5f13961baa619f30e36288783173ddd1' }, "SelectedObjects: ", this.core.store.selectionGroup?.objects.length || 0), h("div", { key: '1175f72816f38d24d986f3e78a1f312cc99aea7c' }, "ViewportCenter: (", viewportCenterX.toFixed(2), ", ", viewportCenterY.toFixed(2), ")"))), h("div", { key: '0f9c1a69ecd260287647967109619c83761abf81', id: "origin", class: "origin", style: {
499
+ return (h(Host, { key: '39f0ffff986b61133ad44f5eadab07f7d776cb01' }, this.core.store.state.debugInfo.showViewportInfo && (h("div", { key: '946bfcc8d6fb9986c1b7b7fc150eb7dfc45cbb59', class: "debug-panel" }, h("div", { key: 'ae6f054b4aefca557228d810125dec1b7695654c' }, "ActiveWorkspaceId: ", this.core.store.state?.activeWorkspace?.id), h("div", { key: 'f47b71175c0dd1db6fb1a82bbdfd5532a1ce55b3' }, "ActiveWorkspaceName: ", this.core.store.state?.activeWorkspace?.name), h("div", { key: 'aba67c4bd24fb9b03848614831d48e6d70ec104f' }, "TranslateX: ", this.core.store.state?.translateX), h("div", { key: 'f1c32b14966542f41a9118e3af76bd3f54ae0039' }, "TranslateY: ", this.core.store.state?.translateY), h("div", { key: '9d4457d49b8a2f5420fb115d41e9aeef2f72eb59' }, "ViewportWidth: ", this.core.store.state?.viewportWidth), h("div", { key: '53b482102ec828758904dcc4c8d62e8e960f87f0' }, "ViewportHeight: ", this.core.store.state?.viewportHeight), h("div", { key: '8f3a6156b882350b3ead9c5778df5c7c80ca8888' }, "PointerCount: ", this.core.store.state.pointers.size), h("div", { key: '6471128d6613f638848ea99e2337126828c6236a' }, "Scale: ", this.core.store.state?.scale), h("div", { key: 'f70133c73206ae0651a7777a87ecbfc967f97e0d' }, "ActiveTool: ", this.core.store.state?.activeTool?.name), h("div", { key: '172b5725dbb9b37a1b63df04e908906d5b04445d' }, "HasViewportChanged: ", this.core.store.state?.hasViewportChanged ? 'true' : 'false'), h("div", { key: '114e8afde10ea3e8eae32a2772914b56a0c718f4' }, "IsEnabled: ", this.core.store.state?.isEnabled ? 'true' : 'false'), h("div", { key: '9e8288cdf8d9f365317649fd36fd32f41d18a165' }, "IsScaling: ", this.core.store.state?.isScaling ? 'true' : 'false'), h("div", { key: '2498b02ef54fdb9752ca2c86ccb6a24ef272ee03' }, "IsPanning: ", this.core.store.state?.isPanning ? 'true' : 'false'), h("div", { key: '66b10615c0c15b2d1f93e22954bae32a171cda26' }, "IsSelecting: ", this.isSelecting ? 'true' : 'false'), h("div", { key: '8a246ad747b8b289e89d7edd8df84b74d88363de' }, "IsSelectionActive: ", this.isSelectionActive ? 'true' : 'false'), h("div", { key: '5d8086caabac9183f9be9076fa724d5d6b009b2a' }, "IsResizeHandleSelected: ", this.core.store.state.isResizeHandleSelected ? 'true' : 'false'), h("div", { key: 'edf7cbb6439ec09b26e895b696e80981a127ec8f' }, "IsRotationHandleSelected: ", this.core.store.state.isRotationHandleSelected ? 'true' : 'false'), h("div", { key: 'ad95478b84f7381fb32eb23606e5697e944649c2' }, "IsRotationHandleHovered: ", this.core.store.state.isRotationHandleHovered ? 'true' : 'false'), h("div", { key: 'ec41d473e9194732c6846ea388c24b4e2edd6119' }, "IsDrawing: ", this.core.store.state.isDrawing ? 'true' : 'false'), h("div", { key: 'dbe271f716901a41c857724abbf0837b63995e07' }, "IsWriting: ", this.core.store.state.isWriting ? 'true' : 'false'), h("div", { key: 'e8d6bac1c6069923cfd3f5d6177b60d6d3ad6eaa' }, "IsPointerDown: ", this.core.store.isPointerDown ? 'true' : 'false'), h("div", { key: 'a2b19dff95c8e35f7b40f9e378e8ca49e878d939' }, "PointerX: ", this.core.store.state?.pointerX), h("div", { key: 'f94f38ae42e2c98df3a82f09e18fa482f5c1a415' }, "PointerY: ", this.core.store.state?.pointerY), h("div", { key: '1bfc6689f25c7912074f147394ea1d9fce42d990' }, "SelectedObjects: ", this.core.store.selectionGroup?.objects.length || 0), h("div", { key: 'a7761da6ae5caa3f0df089b223006959ffec65fd' }, "ViewportCenter: (", viewportCenterX.toFixed(2), ", ", viewportCenterY.toFixed(2), ")"))), h("div", { key: '485aa0df270cc27992abfac5f7639967aa6845a3', id: "origin", class: "origin", style: {
473
500
  transform: `matrix(${this.core.store.state?.scale}, 0, 0, ${this.core.store.state?.scale}, ${this.core.store.state?.translateX}, ${this.core.store.state?.translateY})`,
474
501
  } }, visibleObjects?.map(object => {
475
502
  return (h("div", { key: object.id, style: {
@@ -497,7 +524,9 @@ export class KritzelEngine {
497
524
  borderStyle: 'solid',
498
525
  padding: object.padding + 'px',
499
526
  overflow: 'visible',
500
- display: KritzelClassHelper.isInstanceOf(object, 'KritzelLine') || KritzelClassHelper.isInstanceOf(object, 'KritzelPath') ? 'none' : 'block'
527
+ display: KritzelClassHelper.isInstanceOf(object, 'KritzelLine') || KritzelClassHelper.isInstanceOf(object, 'KritzelPath')
528
+ ? 'none'
529
+ : 'block',
501
530
  } }, KritzelClassHelper.isInstanceOf(object, 'KritzelImage') && (h("img", { ref: el => object.mount(el), src: object.src, style: {
502
531
  width: '100%',
503
532
  height: '100%',
@@ -633,10 +662,18 @@ export class KritzelEngine {
633
662
  } }), h("circle", { class: "selection-line-handle-overlay start", cx: object.startX - object.x, cy: object.startY - object.y, r: `${(baseHandleTouchSize * object.scale) / this.core.store.state?.scale}`, style: {
634
663
  fill: 'transparent',
635
664
  paintOrder: 'fill',
636
- } }), h("circle", { class: "selection-line-handle center", cx: object.controlX !== undefined ? (object.startX + 2 * object.controlX + object.endX) / 4 - object.x : (object.startX - object.x + object.endX - object.x) / 2, cy: object.controlY !== undefined ? (object.startY + 2 * object.controlY + object.endY) / 4 - object.y : (object.startY - object.y + object.endY - object.y) / 2, r: `${(baseHandleSize * object.scale) / this.core.store.state?.scale}`, style: {
665
+ } }), h("circle", { class: "selection-line-handle center", cx: object.controlX !== undefined
666
+ ? (object.startX + 2 * object.controlX + object.endX) / 4 - object.x
667
+ : (object.startX - object.x + object.endX - object.x) / 2, cy: object.controlY !== undefined
668
+ ? (object.startY + 2 * object.controlY + object.endY) / 4 - object.y
669
+ : (object.startY - object.y + object.endY - object.y) / 2, r: `${(baseHandleSize * object.scale) / this.core.store.state?.scale}`, style: {
637
670
  fill: 'var(--kritzel-selection-handle-color, #000000)',
638
671
  paintOrder: 'fill',
639
- } }), h("circle", { class: "selection-line-handle-overlay center", cx: object.controlX !== undefined ? (object.startX + 2 * object.controlX + object.endX) / 4 - object.x : (object.startX - object.x + object.endX - object.x) / 2, cy: object.controlY !== undefined ? (object.startY + 2 * object.controlY + object.endY) / 4 - object.y : (object.startY - object.y + object.endY - object.y) / 2, r: `${(baseHandleTouchSize * object.scale) / this.core.store.state?.scale}`, style: {
672
+ } }), h("circle", { class: "selection-line-handle-overlay center", cx: object.controlX !== undefined
673
+ ? (object.startX + 2 * object.controlX + object.endX) / 4 - object.x
674
+ : (object.startX - object.x + object.endX - object.x) / 2, cy: object.controlY !== undefined
675
+ ? (object.startY + 2 * object.controlY + object.endY) / 4 - object.y
676
+ : (object.startY - object.y + object.endY - object.y) / 2, r: `${(baseHandleTouchSize * object.scale) / this.core.store.state?.scale}`, style: {
640
677
  fill: 'transparent',
641
678
  paintOrder: 'fill',
642
679
  } }), h("circle", { class: "selection-line-handle end", cx: object.endX - object.x, cy: object.endY - object.y, r: `${(baseHandleSize * object.scale) / this.core.store.state?.scale}`, style: {
@@ -708,7 +745,8 @@ export class KritzelEngine {
708
745
  strokeWidth: data.lineStrokeWidth,
709
746
  strokeDasharray: data.dashArray,
710
747
  strokeLinecap: 'round',
711
- } })) : (data.edgeX !== undefined && data.edgeY !== undefined && (h("line", { x1: data.edgeX, y1: data.edgeY, x2: data.centerX, y2: data.centerY, style: {
748
+ } })) : (data.edgeX !== undefined &&
749
+ data.edgeY !== undefined && (h("line", { x1: data.edgeX, y1: data.edgeY, x2: data.centerX, y2: data.centerY, style: {
712
750
  stroke: 'var(--kritzel-snap-line-stroke, rgba(0, 0, 0, 0.2))',
713
751
  strokeWidth: data.lineStrokeWidth,
714
752
  strokeDasharray: data.dashArray,
@@ -718,7 +756,7 @@ export class KritzelEngine {
718
756
  stroke: 'var(--kritzel-snap-indicator-stroke, #007bff)',
719
757
  strokeWidth: data.indicatorStrokeWidth,
720
758
  } }))));
721
- })()), this.core.store.state.isContextMenuVisible && (h("kritzel-context-menu", { key: '6bc7badd1372727cda363f335c358323e25eef40', class: "context-menu", ref: el => (this.contextMenuElement = el), items: this.core.store.state.contextMenuItems, objects: this.core.store.selectionGroup?.objects || [], style: {
759
+ })()), this.core.store.state.isContextMenuVisible && (h("kritzel-context-menu", { key: 'a46409b1a9d2c7a97e2463ac689e4fa1b0802a70', class: "context-menu", ref: el => (this.contextMenuElement = el), items: this.core.store.state.contextMenuItems, objects: this.core.store.selectionGroup?.objects || [], style: {
722
760
  position: 'fixed',
723
761
  left: `${this.core.store.state.contextMenuX}px`,
724
762
  top: `${this.core.store.state.contextMenuY}px`,
@@ -729,7 +767,7 @@ export class KritzelEngine {
729
767
  y: (-this.core.store.state.translateY + this.core.store.state.contextMenuY) / this.core.store.state.scale,
730
768
  }, this.core.store.selectionGroup?.objects);
731
769
  this.hideContextMenu();
732
- }, onClose: () => this.hideContextMenu() })), this.core.store.state?.activeTool instanceof KritzelEraserTool && !this.core.store.state.isScaling && h("kritzel-cursor-trail", { key: '48318d12506f588d510645ee1fdd5f08c511adf9', core: this.core })));
770
+ }, onClose: () => this.hideContextMenu() })), this.core.store.state?.activeTool instanceof KritzelEraserTool && !this.core.store.state.isScaling && h("kritzel-cursor-trail", { key: '479b86bb97be00f0859a62b2b16f419dff6d2bac', core: this.core })));
733
771
  }
734
772
  static get is() { return "kritzel-engine"; }
735
773
  static get encapsulation() { return "shadow"; }
@@ -73,6 +73,10 @@
73
73
 
74
74
  /* Responsive: auto fullscreen on mobile when enabled */
75
75
  @media (max-width: 576px) {
76
+ .backdrop:has(.fullscreen-on-mobile) {
77
+ background-color: transparent;
78
+ }
79
+
76
80
  .dialog-content.fullscreen-on-mobile {
77
81
  width: 100vw;
78
82
  height: 100vh;
@@ -16,12 +16,20 @@
16
16
  box-shadow: var(--kritzel-more-menu-button-box-shadow, 0 0 3px rgba(0, 0, 0, 0.08));
17
17
  transition: background-color 150ms ease;
18
18
  -webkit-tap-highlight-color: transparent;
19
+ -webkit-appearance: none;
20
+ -moz-appearance: none;
21
+ appearance: none;
22
+ color: inherit;
19
23
  }
20
24
 
21
25
  .more-menu-button:hover {
22
26
  background-color: var(--kritzel-more-menu-button-hover-background-color, #f5f5f5);
23
27
  }
24
28
 
29
+ .more-menu-button:focus {
30
+ background-color: var(--kritzel-more-menu-button-hover-background-color, #f5f5f5);
31
+ }
32
+
25
33
  .more-menu-button:active {
26
34
  background-color: var(--kritzel-more-menu-button-active-background-color, #ebebeb);
27
35
  }
@@ -3,4 +3,4 @@
3
3
  * This file is auto-generated by the version bump scripts.
4
4
  * Do not modify manually.
5
5
  */
6
- export const KRITZEL_VERSION = '0.1.10';
6
+ export const KRITZEL_VERSION = '0.1.12';
@@ -1 +1 @@
1
- export{g as getAssetPath,r as render,s as setAssetPath,a as setNonce,b as setPlatformOptions}from"./p-Cj-I2_Og.js";export{e as KritzelBrushTool,d as KritzelGroup,b as KritzelImage,c as KritzelLine,f as KritzelLineTool,a as KritzelPath,h as KritzelSelectionTool,K as KritzelText,g as KritzelTextTool}from"./p-CVPA34Tp.js";import{w as t,a as i,t as o,r as n,b as l,e as u,c as m,d as p,f as z,g as C,s as k,h as S,i as x,v as y,j,o as w,k as T,l as v,m as P,O as M,n as B,p as W,q as U,u as A,x as H,y as O,z as L,A as N,B as _,C as $,H as R,D as X}from"./p-DCbOCSX1.js";export{I as IndexedDBSyncProvider,J as KritzelAnchorManager,G as KritzelAppStateMap,F as KritzelCursorHelper,K as KritzelEraserTool,E as KritzelImageTool}from"./p-DCbOCSX1.js";export{K as KritzelWorkspace}from"./p-n789Y3S-.js";export{D as DEFAULT_BRUSH_CONFIG,b as DEFAULT_LINE_TOOL_CONFIG,a as DEFAULT_TEXT_CONFIG,KritzelEditor,defineCustomElement as defineCustomElementKritzelEditor}from"./kritzel-editor.js";export{KritzelBackToContent,defineCustomElement as defineCustomElementKritzelBackToContent}from"./kritzel-back-to-content.js";export{KritzelBrushStyle,defineCustomElement as defineCustomElementKritzelBrushStyle}from"./kritzel-brush-style.js";export{KritzelColor,defineCustomElement as defineCustomElementKritzelColor}from"./kritzel-color.js";export{KritzelColorPalette,defineCustomElement as defineCustomElementKritzelColorPalette}from"./kritzel-color-palette.js";export{KritzelContextMenu,defineCustomElement as defineCustomElementKritzelContextMenu}from"./kritzel-context-menu.js";export{KritzelControls,defineCustomElement as defineCustomElementKritzelControls}from"./kritzel-controls.js";export{KritzelCursorTrail,defineCustomElement as defineCustomElementKritzelCursorTrail}from"./kritzel-cursor-trail.js";export{KritzelDialog,defineCustomElement as defineCustomElementKritzelDialog}from"./kritzel-dialog.js";export{KritzelDropdown,defineCustomElement as defineCustomElementKritzelDropdown}from"./kritzel-dropdown.js";export{KritzelEngine,defineCustomElement as defineCustomElementKritzelEngine}from"./kritzel-engine.js";export{KritzelExport,defineCustomElement as defineCustomElementKritzelExport}from"./kritzel-export.js";export{KritzelFont,defineCustomElement as defineCustomElementKritzelFont}from"./kritzel-font.js";export{KritzelFontFamily,defineCustomElement as defineCustomElementKritzelFontFamily}from"./kritzel-font-family.js";export{KritzelFontSize,defineCustomElement as defineCustomElementKritzelFontSize}from"./kritzel-font-size.js";export{KritzelIcon,defineCustomElement as defineCustomElementKritzelIcon}from"./kritzel-icon.js";export{KritzelLineEndings,defineCustomElement as defineCustomElementKritzelLineEndings}from"./kritzel-line-endings.js";export{KritzelMasterDetail,defineCustomElement as defineCustomElementKritzelMasterDetail}from"./kritzel-master-detail.js";export{KritzelMenu,defineCustomElement as defineCustomElementKritzelMenu}from"./kritzel-menu.js";export{KritzelMenuItem,defineCustomElement as defineCustomElementKritzelMenuItem}from"./kritzel-menu-item.js";export{KritzelMoreMenu,defineCustomElement as defineCustomElementKritzelMoreMenu}from"./kritzel-more-menu.js";export{KritzelNumericInput,defineCustomElement as defineCustomElementKritzelNumericInput}from"./kritzel-numeric-input.js";export{KritzelOpacitySlider,defineCustomElement as defineCustomElementKritzelOpacitySlider}from"./kritzel-opacity-slider.js";export{KritzelPortal,defineCustomElement as defineCustomElementKritzelPortal}from"./kritzel-portal.js";export{KritzelSettings,defineCustomElement as defineCustomElementKritzelSettings}from"./kritzel-settings.js";export{KritzelShapeFill,defineCustomElement as defineCustomElementKritzelShapeFill}from"./kritzel-shape-fill.js";export{KritzelSlideToggle,defineCustomElement as defineCustomElementKritzelSlideToggle}from"./kritzel-slide-toggle.js";export{KritzelSplitButton,defineCustomElement as defineCustomElementKritzelSplitButton}from"./kritzel-split-button.js";export{KritzelStrokeSize,defineCustomElement as defineCustomElementKritzelStrokeSize}from"./kritzel-stroke-size.js";export{KritzelToolConfig,defineCustomElement as defineCustomElementKritzelToolConfig}from"./kritzel-tool-config.js";export{KritzelTooltip,defineCustomElement as defineCustomElementKritzelTooltip}from"./kritzel-tooltip.js";export{KritzelUtilityPanel,defineCustomElement as defineCustomElementKritzelUtilityPanel}from"./kritzel-utility-panel.js";export{KritzelWorkspaceManager,defineCustomElement as defineCustomElementKritzelWorkspaceManager}from"./kritzel-workspace-manager.js";class Y{doc;channel;_synced=!1;constructor(e,t,s){this.doc=t,this.channel=new BroadcastChannel(e),this.channel.onmessage=e=>{this.handleMessage(e.data)},this.doc.on("update",this.handleDocUpdate),this.broadcastSync(),setTimeout((()=>{this._synced=!0}),100),console.info("BroadcastChannel Provider initialized: "+e)}handleDocUpdate=(e,s)=>{if(s!==this){const s=z();t(s,0),i(s,e),this.channel.postMessage(o(s))}};handleMessage(e){const s=C(new Uint8Array(e));switch(n(s)){case 0:const e=l(s);m(this.doc,e,this);break;case 1:this.broadcastSync();break;case 2:const n=l(s),r=u(this.doc,n);if(r.length>0){const e=z();t(e,0),i(e,r),this.channel.postMessage(o(e))}}}broadcastSync(){const e=z();t(e,2),i(e,p(this.doc)),this.channel.postMessage(o(e))}async connect(){if(!this._synced)return new Promise((e=>{const t=()=>{this._synced?e():setTimeout(t,50)};t()}))}disconnect(){}destroy(){this.doc.off("update",this.handleDocUpdate),this.channel.close()}}const q=new Map,V="undefined"==typeof BroadcastChannel?class{constructor(e){this.room=e,this.onmessage=null,this._onChange=t=>t.key===e&&null!==this.onmessage&&this.onmessage({data:x(t.newValue||"")}),w(this._onChange)}postMessage(e){y.setItem(this.room,j(T(e)))}close(){v(this._onChange)}}:BroadcastChannel,Q=e=>k(q,e,(()=>{const t=S(),s=new V(e);return s.onmessage=e=>t.forEach((t=>t(e.data,"broadcastchannel"))),{bc:s,subs:t}})),Z=(e,t,s=null)=>{const i=Q(e);i.bc.postMessage(t),i.subs.forEach((e=>e(t,s)))},ee=(e,s)=>{t(e,0);const o=p(s);i(e,o)},te=(e,s,o)=>{t(e,1),i(e,u(s,o))},se=(e,t,s,i)=>{try{m(t,l(e),s)}catch(e){null!=i&&i(e),console.error("Caught error while handling a Yjs update",e)}},ie=se;class oe extends M{constructor(e){super(),this.doc=e,this.clientID=e.clientID,this.states=new Map,this.meta=new Map,this._checkInterval=setInterval((()=>{const e=W();null!==this.getLocalState()&&15e3<=e-this.meta.get(this.clientID).lastUpdated&&this.setLocalState(this.getLocalState());const t=[];this.meta.forEach(((s,i)=>{i!==this.clientID&&3e4<=e-s.lastUpdated&&this.states.has(i)&&t.push(i)})),t.length>0&&ne(this,t,"timeout")}),B(3e3)),e.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(e){const t=this.clientID,s=this.meta.get(t),i=void 0===s?0:s.clock+1,o=this.states.get(t);null===e?this.states.delete(t):this.states.set(t,e),this.meta.set(t,{clock:i,lastUpdated:W()});const n=[],r=[],l=[],a=[];null===e?a.push(t):null==o?null!=e&&n.push(t):(r.push(t),U(o,e)||l.push(t)),(n.length>0||l.length>0||a.length>0)&&this.emit("change",[{added:n,updated:l,removed:a},"local"]),this.emit("update",[{added:n,updated:r,removed:a},"local"])}setLocalStateField(e,t){const s=this.getLocalState();null!==s&&this.setLocalState({...s,[e]:t})}getStates(){return this.states}}const ne=(e,t,s)=>{const i=[];for(let s=0;s<t.length;s++){const o=t[s];if(e.states.has(o)){if(e.states.delete(o),o===e.clientID){const t=e.meta.get(o);e.meta.set(o,{clock:t.clock+1,lastUpdated:W()})}i.push(o)}}i.length>0&&(e.emit("change",[{added:[],updated:[],removed:i},s]),e.emit("update",[{added:[],updated:[],removed:i},s]))},re=(e,s,i=e.states)=>{const n=s.length,r=z();t(r,n);for(let o=0;o<n;o++){const n=s[o],l=i.get(n)||null,a=e.meta.get(n).clock;t(r,n),t(r,a),A(r,JSON.stringify(l))}return o(r)},le=[];le[0]=(e,s,i,o)=>{t(e,0);const r=((e,t,s,i,o)=>{const r=n(e);switch(r){case 0:((e,t,s)=>{te(t,s,l(e))})(e,t,s);break;case 1:se(e,s,i,o);break;case 2:ie(e,s,i,o);break;default:throw Error("Unknown message type")}return r})(s,e,i.doc,i);o&&1===r&&!i.synced&&(i.synced=!0)},le[3]=(e,s,o)=>{t(e,1),i(e,re(o.awareness,Array.from(o.awareness.getStates().keys())))},le[1]=(e,t,s)=>{((e,t,s)=>{const i=C(t),o=W(),r=[],l=[],a=[],c=[],d=n(i);for(let t=0;t<d;t++){const t=n(i);let s=n(i);const d=JSON.parse(P(i)),h=e.meta.get(t),u=e.states.get(t),m=void 0===h?0:h.clock;(m<s||m===s&&null===d&&e.states.has(t))&&(null===d?t===e.clientID&&null!=e.getLocalState()?s++:e.states.delete(t):e.states.set(t,d),e.meta.set(t,{clock:s,lastUpdated:o}),void 0===h&&null!==d?r.push(t):void 0!==h&&null===d?c.push(t):null!==d&&(U(d,u)||a.push(t),l.push(t)))}(r.length>0||a.length>0||c.length>0)&&e.emit("change",[{added:r,updated:a,removed:c},s]),(r.length>0||l.length>0||c.length>0)&&e.emit("update",[{added:r,updated:l,removed:c},s])})(s.awareness,l(t),s)},le[2]=(e,t,s)=>{((e,t,s)=>{0===n(e)&&s(0,P(e))})(t,0,((e,t)=>ae(s,t)))};const ae=(e,t)=>console.warn(`Permission denied to access ${e.url}.\n${t}`),ce=(e,t,s)=>{const i=C(t),o=z(),r=n(i),l=e.messageHandlers[r];return l?l(o,i,e,s,r):console.error("Unable to compute message"),o},de=(e,t,s)=>{t===e.ws&&(e.emit("connection-close",[s,e]),e.ws=null,t.close(),e.wsconnecting=!1,e.wsconnected?(e.wsconnected=!1,e.synced=!1,ne(e.awareness,Array.from(e.awareness.getStates().keys()).filter((t=>t!==e.doc.clientID)),e),e.emit("status",[{status:"disconnected"}])):e.wsUnsuccessfulReconnects++,setTimeout(he,_(100*$(2,e.wsUnsuccessfulReconnects),e.maxBackoffTime),e))},he=e=>{if(e.shouldConnect&&null===e.ws){const s=new e._WS(e.url,e.protocols);s.binaryType="arraybuffer",e.ws=s,e.wsconnecting=!0,e.wsconnected=!1,e.synced=!1,s.onmessage=t=>{e.wsLastMessageReceived=W();const i=ce(e,new Uint8Array(t.data),!0);L(i)>1&&s.send(o(i))},s.onerror=t=>{e.emit("connection-error",[t,e])},s.onclose=t=>{de(e,s,t)},s.onopen=()=>{e.wsLastMessageReceived=W(),e.wsconnecting=!1,e.wsconnected=!0,e.wsUnsuccessfulReconnects=0,e.emit("status",[{status:"connected"}]);const n=z();if(t(n,0),ee(n,e.doc),s.send(o(n)),null!==e.awareness.getLocalState()){const n=z();t(n,1),i(n,re(e.awareness,[e.doc.clientID])),s.send(o(n))}},e.emit("status",[{status:"connecting"}])}},ue=(e,t)=>{const s=e.ws;e.wsconnected&&s&&s.readyState===s.OPEN&&s.send(t),e.bcconnected&&Z(e.bcChannel,t,e)};class me extends O{constructor(e,s,n,{connect:r=!0,awareness:l=new oe(n),params:a={},protocols:c=[],WebSocketPolyfill:d=WebSocket,resyncInterval:h=-1,maxBackoffTime:u=2500,disableBc:m=!1}={}){for(super();"/"===e[e.length-1];)e=e.slice(0,e.length-1);this.serverUrl=e,this.bcChannel=e+"/"+s,this.maxBackoffTime=u,this.params=a,this.protocols=c,this.roomname=s,this.doc=n,this._WS=d,this.awareness=l,this.wsconnected=!1,this.wsconnecting=!1,this.bcconnected=!1,this.disableBc=m,this.wsUnsuccessfulReconnects=0,this.messageHandlers=le.slice(),this._synced=!1,this.ws=null,this.wsLastMessageReceived=0,this.shouldConnect=r,this._resyncInterval=0,h>0&&(this._resyncInterval=setInterval((()=>{if(this.ws&&this.ws.readyState===WebSocket.OPEN){const e=z();t(e,0),ee(e,n),this.ws.send(o(e))}}),h)),this._bcSubscriber=(e,t)=>{if(t!==this){const t=ce(this,new Uint8Array(e),!1);L(t)>1&&Z(this.bcChannel,o(t),this)}},this._updateHandler=(e,s)=>{if(s!==this){const s=z();t(s,0),((e,s)=>{t(e,2),i(e,s)})(s,e),ue(this,o(s))}},this.doc.on("update",this._updateHandler),this._awarenessUpdateHandler=({added:e,updated:s,removed:n})=>{const r=e.concat(s).concat(n),a=z();t(a,1),i(a,re(l,r)),ue(this,o(a))},this._exitHandler=()=>{ne(this.awareness,[n.clientID],"app closed")},N&&"undefined"!=typeof process&&process.on("exit",this._exitHandler),l.on("update",this._awarenessUpdateHandler),this._checkInterval=setInterval((()=>{this.wsconnected&&3e4<W()-this.wsLastMessageReceived&&de(this,this.ws,null)}),3e3),r&&this.connect()}get url(){const e=(()=>H(this.params,((e,t)=>`${encodeURIComponent(t)}=${encodeURIComponent(e)}`)).join("&"))();return this.serverUrl+"/"+this.roomname+(0===e.length?"":"?"+e)}get synced(){return this._synced}set synced(e){this._synced!==e&&(this._synced=e,this.emit("synced",[e]),this.emit("sync",[e]))}destroy(){0!==this._resyncInterval&&clearInterval(this._resyncInterval),clearInterval(this._checkInterval),this.disconnect(),N&&"undefined"!=typeof process&&process.off("exit",this._exitHandler),this.awareness.off("update",this._awarenessUpdateHandler),this.doc.off("update",this._updateHandler),super.destroy()}connectBc(){if(this.disableBc)return;this.bcconnected||(((e,t)=>{Q(this.bcChannel).subs.add(t)})(0,this._bcSubscriber),this.bcconnected=!0);const e=z();t(e,0),ee(e,this.doc),Z(this.bcChannel,o(e),this);const s=z();t(s,0),te(s,this.doc),Z(this.bcChannel,o(s),this);const n=z();t(n,3),Z(this.bcChannel,o(n),this);const r=z();t(r,1),i(r,re(this.awareness,[this.doc.clientID])),Z(this.bcChannel,o(r),this)}disconnectBc(){const e=z();t(e,1),i(e,re(this.awareness,[this.doc.clientID],new Map)),ue(this,o(e)),this.bcconnected&&(((e,t)=>{const s=Q(e);s.subs.delete(t)&&0===s.subs.size&&(s.bc.close(),q.delete(e))})(this.bcChannel,this._bcSubscriber),this.bcconnected=!1)}disconnect(){this.shouldConnect=!1,this.disconnectBc(),null!==this.ws&&de(this,this.ws,null)}connect(){this.shouldConnect=!0,this.wsconnected||null!==this.ws||(he(this),this.connectBc())}}class fe{provider;isConnected=!1;constructor(e,t,s){const i=s?.url||"ws://localhost:1234",o=s?.roomName||e;this.provider=new me(i,o,t,{params:s?.params,protocols:s?.protocols,WebSocketPolyfill:s?.WebSocketPolyfill,awareness:s?.awareness,maxBackoffTime:s?.maxBackoffTime,disableBc:!0}),this.setupEventListeners(),console.info(`WebSocket Provider initialized: ${i}/${o}`)}static with(e){return{create:(t,s)=>new fe(t,s,e)}}setupEventListeners(){this.provider.on("status",(({status:e})=>{"connected"===e?(this.isConnected=!0,console.info("WebSocket connected")):"disconnected"===e&&(this.isConnected=!1,console.info("WebSocket disconnected"))})),this.provider.on("sync",(e=>{e&&console.info("WebSocket synced")}))}async connect(){if(!this.isConnected)return new Promise(((e,t)=>{const s=setTimeout((()=>{t(Error("WebSocket connection timeout"))}),1e4),i=({status:t})=>{"connected"===t&&(clearTimeout(s),this.provider.off("status",i),this.isConnected=!0,e())};this.provider.on("status",i),this.provider.wsconnected&&(clearTimeout(s),this.provider.off("status",i),this.isConnected=!0,e())}))}disconnect(){this.provider&&this.provider.disconnect(),this.isConnected=!1}destroy(){this.provider&&this.provider.destroy(),this.isConnected=!1}}class pe{provider;isConnected=!1;isSynced=!1;usesSharedSocket=!1;static sharedWebSocketProvider=null;constructor(e,t,s){const i=s?.name||e,o=s?.url||"ws://localhost:1234",n=s?.websocketProvider||pe.sharedWebSocketProvider;if(n){this.usesSharedSocket=!0;const e={websocketProvider:n,name:i,document:t,token:s?.token||null,onConnect:()=>{this.isConnected=!0,s?.quiet||console.info("Hocuspocus connected: "+i),s?.onConnect&&s.onConnect()},onDisconnect:()=>{this.isConnected=!1,this.isSynced=!1,s?.quiet||console.info("Hocuspocus disconnected: "+i),s?.onDisconnect&&s.onDisconnect()},onSynced:()=>{this.isSynced=!0,s?.quiet||console.info("Hocuspocus synced: "+i),s?.onSynced&&s.onSynced()}};void 0!==s?.forceSyncInterval&&(e.forceSyncInterval=s.forceSyncInterval),s?.onAuthenticationFailed&&(e.onAuthenticationFailed=s.onAuthenticationFailed),s?.onStatus&&(e.onStatus=s.onStatus),this.provider=new R(e),this.provider.attach(),s?.quiet||console.info("Hocuspocus Provider initialized (multiplexed): "+i)}else{this.usesSharedSocket=!1;const e={url:o,name:i,document:t,token:s?.token||null,onConnect:()=>{this.isConnected=!0,s?.quiet||console.info("Hocuspocus connected: "+i),s?.onConnect&&s.onConnect()},onDisconnect:()=>{this.isConnected=!1,this.isSynced=!1,s?.quiet||console.info("Hocuspocus disconnected: "+i),s?.onDisconnect&&s.onDisconnect()},onSynced:()=>{this.isSynced=!0,s?.quiet||console.info("Hocuspocus synced: "+i),s?.onSynced&&s.onSynced()}};void 0!==s?.forceSyncInterval&&(e.forceSyncInterval=s.forceSyncInterval),s?.onAuthenticationFailed&&(e.onAuthenticationFailed=s.onAuthenticationFailed),s?.onStatus&&(e.onStatus=s.onStatus),s?.WebSocketPolyfill&&(e.WebSocketPolyfill=s.WebSocketPolyfill),this.provider=new R(e),s?.quiet||console.info(`Hocuspocus Provider initialized: ${o}/${i}`)}}static createSharedWebSocket(e){if(pe.sharedWebSocketProvider)return console.warn("Shared WebSocket already exists. Returning existing instance."),pe.sharedWebSocketProvider;const t={url:e.url};return e.WebSocketPolyfill&&(t.WebSocketPolyfill=e.WebSocketPolyfill),e.onConnect&&(t.onConnect=e.onConnect),e.onDisconnect&&(t.onDisconnect=e.onDisconnect),e.onStatus&&(t.onStatus=e.onStatus),pe.sharedWebSocketProvider=new X(t),console.info("Shared Hocuspocus WebSocket created: "+e.url),pe.sharedWebSocketProvider}static destroySharedWebSocket(){pe.sharedWebSocketProvider&&(pe.sharedWebSocketProvider.destroy(),pe.sharedWebSocketProvider=null,console.info("Shared Hocuspocus WebSocket destroyed"))}static getSharedWebSocket(){return pe.sharedWebSocketProvider}static with(e){return{create:(t,s)=>new pe(t,s,e)}}async connect(){if(!this.isSynced)return new Promise(((e,t)=>{const s=setTimeout((()=>{t(Error("Hocuspocus connection timeout"))}),1e4),i=()=>{clearTimeout(s),this.provider.off("synced",i),e()};if(this.provider.on("synced",i),this.provider.isSynced)return clearTimeout(s),this.provider.off("synced",i),void e();this.isConnected||this.usesSharedSocket||this.provider.connect()}))}disconnect(){this.provider&&(this.usesSharedSocket?this.provider.detach():this.provider.disconnect()),this.isConnected=!1,this.isSynced=!1}destroy(){this.provider&&this.provider.destroy(),this.isConnected=!1,this.isSynced=!1}}export{Y as BroadcastSyncProvider,pe as HocuspocusSyncProvider,fe as WebSocketSyncProvider}
1
+ export{g as getAssetPath,r as render,s as setAssetPath,a as setNonce,b as setPlatformOptions}from"./p-Cj-I2_Og.js";export{e as KritzelBrushTool,d as KritzelGroup,b as KritzelImage,c as KritzelLine,f as KritzelLineTool,a as KritzelPath,h as KritzelSelectionTool,K as KritzelText,g as KritzelTextTool}from"./p-CuifaWTr.js";import{w as t,a as i,t as o,r as n,b as l,e as u,c as m,d as p,f as z,g as C,s as k,h as x,i as y,v as S,j,o as w,k as T,l as v,m as P,O as M,n as B,p as W,q as U,u as H,x as A,y as L,z as O,A as _,B as N,C as $,H as R,D as Y}from"./p-Csm0Kf0_.js";export{I as IndexedDBSyncProvider,J as KritzelAnchorManager,G as KritzelAppStateMap,F as KritzelCursorHelper,K as KritzelEraserTool,E as KritzelImageTool}from"./p-Csm0Kf0_.js";export{K as KritzelWorkspace}from"./p-n789Y3S-.js";export{D as DEFAULT_BRUSH_CONFIG,b as DEFAULT_LINE_TOOL_CONFIG,a as DEFAULT_TEXT_CONFIG,KritzelEditor,defineCustomElement as defineCustomElementKritzelEditor}from"./kritzel-editor.js";export{KritzelBackToContent,defineCustomElement as defineCustomElementKritzelBackToContent}from"./kritzel-back-to-content.js";export{KritzelBrushStyle,defineCustomElement as defineCustomElementKritzelBrushStyle}from"./kritzel-brush-style.js";export{KritzelColor,defineCustomElement as defineCustomElementKritzelColor}from"./kritzel-color.js";export{KritzelColorPalette,defineCustomElement as defineCustomElementKritzelColorPalette}from"./kritzel-color-palette.js";export{KritzelContextMenu,defineCustomElement as defineCustomElementKritzelContextMenu}from"./kritzel-context-menu.js";export{KritzelControls,defineCustomElement as defineCustomElementKritzelControls}from"./kritzel-controls.js";export{KritzelCursorTrail,defineCustomElement as defineCustomElementKritzelCursorTrail}from"./kritzel-cursor-trail.js";export{KritzelDialog,defineCustomElement as defineCustomElementKritzelDialog}from"./kritzel-dialog.js";export{KritzelDropdown,defineCustomElement as defineCustomElementKritzelDropdown}from"./kritzel-dropdown.js";export{KritzelEngine,defineCustomElement as defineCustomElementKritzelEngine}from"./kritzel-engine.js";export{KritzelExport,defineCustomElement as defineCustomElementKritzelExport}from"./kritzel-export.js";export{KritzelFont,defineCustomElement as defineCustomElementKritzelFont}from"./kritzel-font.js";export{KritzelFontFamily,defineCustomElement as defineCustomElementKritzelFontFamily}from"./kritzel-font-family.js";export{KritzelFontSize,defineCustomElement as defineCustomElementKritzelFontSize}from"./kritzel-font-size.js";export{KritzelIcon,defineCustomElement as defineCustomElementKritzelIcon}from"./kritzel-icon.js";export{KritzelLineEndings,defineCustomElement as defineCustomElementKritzelLineEndings}from"./kritzel-line-endings.js";export{KritzelMasterDetail,defineCustomElement as defineCustomElementKritzelMasterDetail}from"./kritzel-master-detail.js";export{KritzelMenu,defineCustomElement as defineCustomElementKritzelMenu}from"./kritzel-menu.js";export{KritzelMenuItem,defineCustomElement as defineCustomElementKritzelMenuItem}from"./kritzel-menu-item.js";export{KritzelMoreMenu,defineCustomElement as defineCustomElementKritzelMoreMenu}from"./kritzel-more-menu.js";export{KritzelNumericInput,defineCustomElement as defineCustomElementKritzelNumericInput}from"./kritzel-numeric-input.js";export{KritzelOpacitySlider,defineCustomElement as defineCustomElementKritzelOpacitySlider}from"./kritzel-opacity-slider.js";export{KritzelPortal,defineCustomElement as defineCustomElementKritzelPortal}from"./kritzel-portal.js";export{KritzelSettings,defineCustomElement as defineCustomElementKritzelSettings}from"./kritzel-settings.js";export{KritzelShapeFill,defineCustomElement as defineCustomElementKritzelShapeFill}from"./kritzel-shape-fill.js";export{KritzelSlideToggle,defineCustomElement as defineCustomElementKritzelSlideToggle}from"./kritzel-slide-toggle.js";export{KritzelSplitButton,defineCustomElement as defineCustomElementKritzelSplitButton}from"./kritzel-split-button.js";export{KritzelStrokeSize,defineCustomElement as defineCustomElementKritzelStrokeSize}from"./kritzel-stroke-size.js";export{KritzelToolConfig,defineCustomElement as defineCustomElementKritzelToolConfig}from"./kritzel-tool-config.js";export{KritzelTooltip,defineCustomElement as defineCustomElementKritzelTooltip}from"./kritzel-tooltip.js";export{KritzelUtilityPanel,defineCustomElement as defineCustomElementKritzelUtilityPanel}from"./kritzel-utility-panel.js";export{KritzelWorkspaceManager,defineCustomElement as defineCustomElementKritzelWorkspaceManager}from"./kritzel-workspace-manager.js";class q{doc;channel;_synced=!1;constructor(e,t,s){this.doc=t,this.channel=new BroadcastChannel(e),this.channel.onmessage=e=>{this.handleMessage(e.data)},this.doc.on("update",this.handleDocUpdate),this.broadcastSync(),setTimeout((()=>{this._synced=!0}),100),console.info("BroadcastChannel Provider initialized: "+e)}handleDocUpdate=(e,s)=>{if(s!==this){const s=z();t(s,0),i(s,e),this.channel.postMessage(o(s))}};handleMessage(e){const s=C(new Uint8Array(e));switch(n(s)){case 0:const e=l(s);m(this.doc,e,this);break;case 1:this.broadcastSync();break;case 2:const n=l(s),r=u(this.doc,n);if(r.length>0){const e=z();t(e,0),i(e,r),this.channel.postMessage(o(e))}}}broadcastSync(){const e=z();t(e,2),i(e,p(this.doc)),this.channel.postMessage(o(e))}async connect(){if(!this._synced)return new Promise((e=>{const t=()=>{this._synced?e():setTimeout(t,50)};t()}))}disconnect(){}destroy(){this.doc.off("update",this.handleDocUpdate),this.channel.close()}}const X=new Map,Q="undefined"==typeof BroadcastChannel?class{constructor(e){this.room=e,this.onmessage=null,this._onChange=t=>t.key===e&&null!==this.onmessage&&this.onmessage({data:y(t.newValue||"")}),w(this._onChange)}postMessage(e){S.setItem(this.room,j(T(e)))}close(){v(this._onChange)}}:BroadcastChannel,V=e=>k(X,e,(()=>{const t=x(),s=new Q(e);return s.onmessage=e=>t.forEach((t=>t(e.data,"broadcastchannel"))),{bc:s,subs:t}})),Z=(e,t,s=null)=>{const i=V(e);i.bc.postMessage(t),i.subs.forEach((e=>e(t,s)))},ee=(e,s)=>{t(e,0);const o=p(s);i(e,o)},te=(e,s,o)=>{t(e,1),i(e,u(s,o))},se=(e,t,s,i)=>{try{m(t,l(e),s)}catch(e){null!=i&&i(e),console.error("Caught error while handling a Yjs update",e)}},ie=se;class oe extends M{constructor(e){super(),this.doc=e,this.clientID=e.clientID,this.states=new Map,this.meta=new Map,this._checkInterval=setInterval((()=>{const e=W();null!==this.getLocalState()&&15e3<=e-this.meta.get(this.clientID).lastUpdated&&this.setLocalState(this.getLocalState());const t=[];this.meta.forEach(((s,i)=>{i!==this.clientID&&3e4<=e-s.lastUpdated&&this.states.has(i)&&t.push(i)})),t.length>0&&ne(this,t,"timeout")}),B(3e3)),e.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(e){const t=this.clientID,s=this.meta.get(t),i=void 0===s?0:s.clock+1,o=this.states.get(t);null===e?this.states.delete(t):this.states.set(t,e),this.meta.set(t,{clock:i,lastUpdated:W()});const n=[],r=[],l=[],a=[];null===e?a.push(t):null==o?null!=e&&n.push(t):(r.push(t),U(o,e)||l.push(t)),(n.length>0||l.length>0||a.length>0)&&this.emit("change",[{added:n,updated:l,removed:a},"local"]),this.emit("update",[{added:n,updated:r,removed:a},"local"])}setLocalStateField(e,t){const s=this.getLocalState();null!==s&&this.setLocalState({...s,[e]:t})}getStates(){return this.states}}const ne=(e,t,s)=>{const i=[];for(let s=0;s<t.length;s++){const o=t[s];if(e.states.has(o)){if(e.states.delete(o),o===e.clientID){const t=e.meta.get(o);e.meta.set(o,{clock:t.clock+1,lastUpdated:W()})}i.push(o)}}i.length>0&&(e.emit("change",[{added:[],updated:[],removed:i},s]),e.emit("update",[{added:[],updated:[],removed:i},s]))},re=(e,s,i=e.states)=>{const n=s.length,r=z();t(r,n);for(let o=0;o<n;o++){const n=s[o],l=i.get(n)||null,a=e.meta.get(n).clock;t(r,n),t(r,a),H(r,JSON.stringify(l))}return o(r)},le=[];le[0]=(e,s,i,o)=>{t(e,0);const r=((e,t,s,i,o)=>{const r=n(e);switch(r){case 0:((e,t,s)=>{te(t,s,l(e))})(e,t,s);break;case 1:se(e,s,i,o);break;case 2:ie(e,s,i,o);break;default:throw Error("Unknown message type")}return r})(s,e,i.doc,i);o&&1===r&&!i.synced&&(i.synced=!0)},le[3]=(e,s,o)=>{t(e,1),i(e,re(o.awareness,Array.from(o.awareness.getStates().keys())))},le[1]=(e,t,s)=>{((e,t,s)=>{const i=C(t),o=W(),r=[],l=[],a=[],c=[],d=n(i);for(let t=0;t<d;t++){const t=n(i);let s=n(i);const d=JSON.parse(P(i)),h=e.meta.get(t),u=e.states.get(t),m=void 0===h?0:h.clock;(m<s||m===s&&null===d&&e.states.has(t))&&(null===d?t===e.clientID&&null!=e.getLocalState()?s++:e.states.delete(t):e.states.set(t,d),e.meta.set(t,{clock:s,lastUpdated:o}),void 0===h&&null!==d?r.push(t):void 0!==h&&null===d?c.push(t):null!==d&&(U(d,u)||a.push(t),l.push(t)))}(r.length>0||a.length>0||c.length>0)&&e.emit("change",[{added:r,updated:a,removed:c},s]),(r.length>0||l.length>0||c.length>0)&&e.emit("update",[{added:r,updated:l,removed:c},s])})(s.awareness,l(t),s)},le[2]=(e,t,s)=>{((e,t,s)=>{0===n(e)&&s(0,P(e))})(t,0,((e,t)=>ae(s,t)))};const ae=(e,t)=>console.warn(`Permission denied to access ${e.url}.\n${t}`),ce=(e,t,s)=>{const i=C(t),o=z(),r=n(i),l=e.messageHandlers[r];return l?l(o,i,e,s,r):console.error("Unable to compute message"),o},de=(e,t,s)=>{t===e.ws&&(e.emit("connection-close",[s,e]),e.ws=null,t.close(),e.wsconnecting=!1,e.wsconnected?(e.wsconnected=!1,e.synced=!1,ne(e.awareness,Array.from(e.awareness.getStates().keys()).filter((t=>t!==e.doc.clientID)),e),e.emit("status",[{status:"disconnected"}])):e.wsUnsuccessfulReconnects++,setTimeout(he,N(100*$(2,e.wsUnsuccessfulReconnects),e.maxBackoffTime),e))},he=e=>{if(e.shouldConnect&&null===e.ws){const s=new e._WS(e.url,e.protocols);s.binaryType="arraybuffer",e.ws=s,e.wsconnecting=!0,e.wsconnected=!1,e.synced=!1,s.onmessage=t=>{e.wsLastMessageReceived=W();const i=ce(e,new Uint8Array(t.data),!0);O(i)>1&&s.send(o(i))},s.onerror=t=>{e.emit("connection-error",[t,e])},s.onclose=t=>{de(e,s,t)},s.onopen=()=>{e.wsLastMessageReceived=W(),e.wsconnecting=!1,e.wsconnected=!0,e.wsUnsuccessfulReconnects=0,e.emit("status",[{status:"connected"}]);const n=z();if(t(n,0),ee(n,e.doc),s.send(o(n)),null!==e.awareness.getLocalState()){const n=z();t(n,1),i(n,re(e.awareness,[e.doc.clientID])),s.send(o(n))}},e.emit("status",[{status:"connecting"}])}},ue=(e,t)=>{const s=e.ws;e.wsconnected&&s&&s.readyState===s.OPEN&&s.send(t),e.bcconnected&&Z(e.bcChannel,t,e)};class me extends L{constructor(e,s,n,{connect:r=!0,awareness:l=new oe(n),params:a={},protocols:c=[],WebSocketPolyfill:d=WebSocket,resyncInterval:h=-1,maxBackoffTime:u=2500,disableBc:m=!1}={}){for(super();"/"===e[e.length-1];)e=e.slice(0,e.length-1);this.serverUrl=e,this.bcChannel=e+"/"+s,this.maxBackoffTime=u,this.params=a,this.protocols=c,this.roomname=s,this.doc=n,this._WS=d,this.awareness=l,this.wsconnected=!1,this.wsconnecting=!1,this.bcconnected=!1,this.disableBc=m,this.wsUnsuccessfulReconnects=0,this.messageHandlers=le.slice(),this._synced=!1,this.ws=null,this.wsLastMessageReceived=0,this.shouldConnect=r,this._resyncInterval=0,h>0&&(this._resyncInterval=setInterval((()=>{if(this.ws&&this.ws.readyState===WebSocket.OPEN){const e=z();t(e,0),ee(e,n),this.ws.send(o(e))}}),h)),this._bcSubscriber=(e,t)=>{if(t!==this){const t=ce(this,new Uint8Array(e),!1);O(t)>1&&Z(this.bcChannel,o(t),this)}},this._updateHandler=(e,s)=>{if(s!==this){const s=z();t(s,0),((e,s)=>{t(e,2),i(e,s)})(s,e),ue(this,o(s))}},this.doc.on("update",this._updateHandler),this._awarenessUpdateHandler=({added:e,updated:s,removed:n})=>{const r=e.concat(s).concat(n),a=z();t(a,1),i(a,re(l,r)),ue(this,o(a))},this._exitHandler=()=>{ne(this.awareness,[n.clientID],"app closed")},_&&"undefined"!=typeof process&&process.on("exit",this._exitHandler),l.on("update",this._awarenessUpdateHandler),this._checkInterval=setInterval((()=>{this.wsconnected&&3e4<W()-this.wsLastMessageReceived&&de(this,this.ws,null)}),3e3),r&&this.connect()}get url(){const e=(()=>A(this.params,((e,t)=>`${encodeURIComponent(t)}=${encodeURIComponent(e)}`)).join("&"))();return this.serverUrl+"/"+this.roomname+(0===e.length?"":"?"+e)}get synced(){return this._synced}set synced(e){this._synced!==e&&(this._synced=e,this.emit("synced",[e]),this.emit("sync",[e]))}destroy(){0!==this._resyncInterval&&clearInterval(this._resyncInterval),clearInterval(this._checkInterval),this.disconnect(),_&&"undefined"!=typeof process&&process.off("exit",this._exitHandler),this.awareness.off("update",this._awarenessUpdateHandler),this.doc.off("update",this._updateHandler),super.destroy()}connectBc(){if(this.disableBc)return;this.bcconnected||(((e,t)=>{V(this.bcChannel).subs.add(t)})(0,this._bcSubscriber),this.bcconnected=!0);const e=z();t(e,0),ee(e,this.doc),Z(this.bcChannel,o(e),this);const s=z();t(s,0),te(s,this.doc),Z(this.bcChannel,o(s),this);const n=z();t(n,3),Z(this.bcChannel,o(n),this);const r=z();t(r,1),i(r,re(this.awareness,[this.doc.clientID])),Z(this.bcChannel,o(r),this)}disconnectBc(){const e=z();t(e,1),i(e,re(this.awareness,[this.doc.clientID],new Map)),ue(this,o(e)),this.bcconnected&&(((e,t)=>{const s=V(e);s.subs.delete(t)&&0===s.subs.size&&(s.bc.close(),X.delete(e))})(this.bcChannel,this._bcSubscriber),this.bcconnected=!1)}disconnect(){this.shouldConnect=!1,this.disconnectBc(),null!==this.ws&&de(this,this.ws,null)}connect(){this.shouldConnect=!0,this.wsconnected||null!==this.ws||(he(this),this.connectBc())}}class fe{provider;isConnected=!1;constructor(e,t,s){const i=s?.url||"ws://localhost:1234",o=s?.roomName||e;this.provider=new me(i,o,t,{params:s?.params,protocols:s?.protocols,WebSocketPolyfill:s?.WebSocketPolyfill,awareness:s?.awareness,maxBackoffTime:s?.maxBackoffTime,disableBc:!0}),this.setupEventListeners(),console.info(`WebSocket Provider initialized: ${i}/${o}`)}static with(e){return{create:(t,s)=>new fe(t,s,e)}}setupEventListeners(){this.provider.on("status",(({status:e})=>{"connected"===e?(this.isConnected=!0,console.info("WebSocket connected")):"disconnected"===e&&(this.isConnected=!1,console.info("WebSocket disconnected"))})),this.provider.on("sync",(e=>{e&&console.info("WebSocket synced")}))}async connect(){if(!this.isConnected)return new Promise(((e,t)=>{const s=setTimeout((()=>{t(Error("WebSocket connection timeout"))}),1e4),i=({status:t})=>{"connected"===t&&(clearTimeout(s),this.provider.off("status",i),this.isConnected=!0,e())};this.provider.on("status",i),this.provider.wsconnected&&(clearTimeout(s),this.provider.off("status",i),this.isConnected=!0,e())}))}disconnect(){this.provider&&this.provider.disconnect(),this.isConnected=!1}destroy(){this.provider&&this.provider.destroy(),this.isConnected=!1}}class pe{provider;isConnected=!1;isSynced=!1;usesSharedSocket=!1;static sharedWebSocketProvider=null;constructor(e,t,s){const i=s?.name||e,o=s?.url||"ws://localhost:1234",n=s?.websocketProvider||pe.sharedWebSocketProvider;if(n){this.usesSharedSocket=!0;const e={websocketProvider:n,name:i,document:t,token:s?.token||null,onConnect:()=>{this.isConnected=!0,s?.quiet||console.info("Hocuspocus connected: "+i),s?.onConnect&&s.onConnect()},onDisconnect:()=>{this.isConnected=!1,this.isSynced=!1,s?.quiet||console.info("Hocuspocus disconnected: "+i),s?.onDisconnect&&s.onDisconnect()},onSynced:()=>{this.isSynced=!0,s?.quiet||console.info("Hocuspocus synced: "+i),s?.onSynced&&s.onSynced()}};void 0!==s?.forceSyncInterval&&(e.forceSyncInterval=s.forceSyncInterval),s?.onAuthenticationFailed&&(e.onAuthenticationFailed=s.onAuthenticationFailed),s?.onStatus&&(e.onStatus=s.onStatus),this.provider=new R(e),this.provider.attach(),s?.quiet||console.info("Hocuspocus Provider initialized (multiplexed): "+i)}else{this.usesSharedSocket=!1;const e={url:o,name:i,document:t,token:s?.token||null,onConnect:()=>{this.isConnected=!0,s?.quiet||console.info("Hocuspocus connected: "+i),s?.onConnect&&s.onConnect()},onDisconnect:()=>{this.isConnected=!1,this.isSynced=!1,s?.quiet||console.info("Hocuspocus disconnected: "+i),s?.onDisconnect&&s.onDisconnect()},onSynced:()=>{this.isSynced=!0,s?.quiet||console.info("Hocuspocus synced: "+i),s?.onSynced&&s.onSynced()}};void 0!==s?.forceSyncInterval&&(e.forceSyncInterval=s.forceSyncInterval),s?.onAuthenticationFailed&&(e.onAuthenticationFailed=s.onAuthenticationFailed),s?.onStatus&&(e.onStatus=s.onStatus),s?.WebSocketPolyfill&&(e.WebSocketPolyfill=s.WebSocketPolyfill),this.provider=new R(e),s?.quiet||console.info(`Hocuspocus Provider initialized: ${o}/${i}`)}}static createSharedWebSocket(e){if(pe.sharedWebSocketProvider)return console.warn("Shared WebSocket already exists. Returning existing instance."),pe.sharedWebSocketProvider;const t={url:e.url};return e.WebSocketPolyfill&&(t.WebSocketPolyfill=e.WebSocketPolyfill),e.onConnect&&(t.onConnect=e.onConnect),e.onDisconnect&&(t.onDisconnect=e.onDisconnect),e.onStatus&&(t.onStatus=e.onStatus),pe.sharedWebSocketProvider=new Y(t),console.info("Shared Hocuspocus WebSocket created: "+e.url),pe.sharedWebSocketProvider}static destroySharedWebSocket(){pe.sharedWebSocketProvider&&(pe.sharedWebSocketProvider.destroy(),pe.sharedWebSocketProvider=null,console.info("Shared Hocuspocus WebSocket destroyed"))}static getSharedWebSocket(){return pe.sharedWebSocketProvider}static with(e){return{create:(t,s)=>new pe(t,s,e)}}async connect(){if(!this.isSynced)return new Promise(((e,t)=>{const s=setTimeout((()=>{t(Error("Hocuspocus connection timeout"))}),1e4),i=()=>{clearTimeout(s),this.provider.off("synced",i),e()};if(this.provider.on("synced",i),this.provider.isSynced)return clearTimeout(s),this.provider.off("synced",i),void e();this.isConnected||this.usesSharedSocket||this.provider.connect()}))}disconnect(){this.provider&&(this.usesSharedSocket?this.provider.detach():this.provider.disconnect()),this.isConnected=!1,this.isSynced=!1}destroy(){this.provider&&this.provider.destroy(),this.isConnected=!1,this.isSynced=!1}}export{q as BroadcastSyncProvider,pe as HocuspocusSyncProvider,fe as WebSocketSyncProvider}
@@ -1 +1 @@
1
- import{K as o,d as s}from"./p-CQV1Azq8.js";const p=o,r=s;export{p as KritzelControls,r as defineCustomElement}
1
+ import{K as o,d as s}from"./p-BvoIoyaZ.js";const a=o,p=s;export{a as KritzelControls,p as defineCustomElement}
@@ -1 +1 @@
1
- import{K as o,d as s}from"./p-D8A3OvXv.js";const p=o,r=s;export{p as KritzelDialog,r as defineCustomElement}
1
+ import{K as o,d as s}from"./p-DCFa1WDS.js";const a=o,p=s;export{a as KritzelDialog,p as defineCustomElement}